diff --git a/kint/README.txt b/kint/README.txt
index c735467..75b68b9 100644
--- a/kint/README.txt
+++ b/kint/README.txt
@@ -1,20 +1,29 @@
 WHAT IS IT?
 -----------
-Kint for PHP is a tool designed to present your debugging data in the absolutely best way possible.
+Kint for PHP is a tool designed to present your debugging data in the absolutely
+best way possible.
 
-In other words, it's var_dump() and debug_backtrace() on steroids. Easy to use, but powerful and customizable.
-An essential addition to your development toolbox.
+In other words, it's var_dump() and debug_backtrace() on steroids. Easy to use,
+but powerful and customizable. An essential addition to your development
+toolbox.
 
 USAGE
 -----
-This module allows to use functions
+This module allows to use these aliases:
     kint($data1, $data2, $data3, ...);
+    ksm($data1, $data2, $data3, ...)
     kint_trace();
-		ksm($data1, $data2, $data3, ...)
 
-Also you can use all of Kint class power!
+But to get the most out of Kint, you will want to use directly the Kint class:
+    kint_require();
+    Kint::dump($data);
+
 Learn more about Kint: http://raveren.github.io/kint/
 
+
+The Kint class function dd() will not work as expected, because this alias
+is already defined in devel.module for other purposes.
+
 CONTACTS
 --------
 Module author:
@@ -23,6 +32,6 @@ Module author:
     https://drupal.org/user/1072104
 
 Kint author:
-    Rokas Šleinius
+    Rokas Šleinius a.k.a. Raveren
     raveren@gmail.com
     https://github.com/raveren
\ No newline at end of file
diff --git a/kint/kint-0.9/.gitignore b/kint/kint-0.9/.gitignore
deleted file mode 100644
index 21a6284..0000000
--- a/kint/kint-0.9/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-
-/config.php
-/.idea
\ No newline at end of file
diff --git a/kint/kint-0.9/Kint.class.php b/kint/kint-0.9/Kint.class.php
deleted file mode 100644
index 9541885..0000000
--- a/kint/kint-0.9/Kint.class.php
+++ /dev/null
@@ -1,742 +0,0 @@
-<?php
-/**
- * Kint is a zero-setup debugging tool to output information about variables and stack traces prettily and comfortably.
- *
- * https://github.com/raveren/kint
- */
-define( 'KINT_DIR', dirname( __FILE__ ) . '/' );
-require KINT_DIR . 'config.default.php';
-require KINT_DIR . 'parsers/parser.class.php';
-
-if ( is_readable( KINT_DIR . 'config.php' ) ) {
-	require KINT_DIR . 'config.php';
-}
-
-class Kint
-{
-	// these are all public and 1:1 config array keys so you can switch them easily
-	public static $traceCleanupCallback;
-	public static $fileLinkFormat;
-	public static $hideSequentialKeys;
-	public static $showClassConstants;
-	public static $keyFilterCallback;
-	public static $displayCalledFrom;
-	public static $charEncodings;
-	public static $maxStrLength;
-	public static $appRootDirs;
-	public static $maxLevels;
-	public static $enabled;
-	public static $theme;
-	public static $expandedByDefault;
-	public static $devel; # todo remove
-
-	protected static $_firstRun = true;
-
-	# non-standard function calls
-	protected static $_statements = array( 'include', 'include_once', 'require', 'require_once' );
-
-	/**
-	 * getter/setter for the enabled parameter, called at the beginning of every public function as getter, also
-	 * initializes the settings if te first time it's run.
-	 *
-	 * @param null $value
-	 *
-	 * @return void|bool
-	 */
-	public static function enabled( $value = null )
-	{
-		# act both as a setter...
-		if ( func_num_args() > 0 ) {
-			self::$enabled = $value;
-			return;
-		}
-
-		# ...and a getter
-		return self::$enabled;
-	}
-
-	public static function _init()
-	{
-		# init settings
-		if ( isset( $GLOBALS['_kint_settings'] ) ) {
-			foreach ( $GLOBALS['_kint_settings'] as $key => $val ) {
-				self::$$key = $val;
-			}
-		}
-
-		require KINT_DIR . 'decorators/rich.php';
-		require KINT_DIR . 'decorators/concise.php';
-	}
-
-	/**
-	 * Prints a debug backtrace
-	 *
-	 * @param array $trace [OPTIONAL] you can pass your own trace, otherwise, `debug_backtrace` will be called
-	 *
-	 * @return void
-	 */
-	public static function trace( $trace = null )
-	{
-		if ( !Kint::enabled() ) return;
-
-		echo Kint_Decorators_Rich::_css();
-
-		isset( $trace ) or $trace = debug_backtrace( true );
-
-		$output = array();
-		foreach ( $trace as $step ) {
-			self::$traceCleanupCallback and $step = call_user_func( self::$traceCleanupCallback, $step );
-
-			# if the user defined trace cleanup function returns null, skip this line
-			if ( $step === null ) {
-				continue;
-			}
-
-			if ( !isset( $step['function'] ) ) {
-				# invalid trace step
-				continue;
-			}
-
-			if ( isset( $step['file'] ) AND isset( $step['line'] ) ) {
-				# include the source of this step
-				$source = self::_showSource( $step['file'], $step['line'] );
-			}
-
-			if ( isset( $step['file'] ) ) {
-				$file = $step['file'];
-
-				if ( isset( $step['line'] ) ) {
-					$line = $step['line'];
-				}
-			}
-
-
-			$function = $step['function'];
-
-			if ( in_array( $step['function'], self::$_statements ) ) {
-				if ( empty( $step['args'] ) ) {
-					# no arguments
-					$args = array();
-				} else {
-					# sanitize the file path
-					$args = array( self::shortenPath( $step['args'][0] ) );
-				}
-			} elseif ( isset( $step['args'] ) ) {
-				if ( empty( $step['class'] ) && !function_exists( $step['function'] ) ) {
-					# introspection on closures or language constructs in a stack trace is impossible before PHP 5.3
-					$params = null;
-				} else {
-					try {
-						if ( isset( $step['class'] ) ) {
-							if ( method_exists( $step['class'], $step['function'] ) ) {
-								$reflection = new ReflectionMethod( $step['class'], $step['function'] );
-							} else if ( isset( $step['type'] ) && $step['type'] == '::' ) {
-								$reflection = new ReflectionMethod( $step['class'], '__callStatic' );
-							} else {
-								$reflection = new ReflectionMethod( $step['class'], '__call' );
-							}
-						} else {
-							$reflection = new ReflectionFunction( $step['function'] );
-						}
-
-						# get the function parameters
-						$params = $reflection->getParameters();
-					} catch ( Exception $e ) {
-						$params = null; # avoid various PHP version incompatibilities
-					}
-				}
-
-				$args = array();
-				foreach ( $step['args'] as $i => $arg ) {
-					if ( isset( $params[$i] ) ) {
-						# assign the argument by the parameter name
-						$args[$params[$i]->name] = $arg;
-					} else {
-						# assign the argument by number
-						$args[$i] = $arg;
-					}
-				}
-			}
-
-			if ( isset( $step['class'] ) ) {
-				# Class->method() or Class::method()
-				$function = $step['class'] . $step['type'] . $step['function'];
-			}
-
-			if ( isset( $step['object'] ) ) {
-				$function = $step['class'] . $step['type'] . $step['function'];
-			}
-
-			$output[] = array(
-				'function' => $function,
-				'args'     => isset( $args ) ? $args : null,
-				'file'     => isset( $file ) ? $file : null,
-				'line'     => isset( $line ) ? $line : null,
-				'source'   => isset( $source ) ? $source : null,
-				'object'   => isset( $step['object'] ) ? $step['object'] : null,
-			);
-
-			unset( $function, $args, $file, $line, $source );
-		}
-
-		require KINT_DIR . 'view/trace.phtml';
-	}
-
-	/**
-	 * dump information about variables
-	 *
-	 * @param mixed $data
-	 *
-	 * @return void|string
-	 */
-	public static function dump( $data = null )
-	{
-		if ( !Kint::enabled() ) return;
-
-		# find caller information
-		$trace = debug_backtrace();
-		list( $names, $modifier, $callee, $previousCaller ) = self::_getPassedNames( $trace );
-		if ( $names === array( null ) && func_num_args() === 1 && $data === 1 ) {
-			$call = reset( $trace );
-			if ( !isset( $call['file'] ) && isset( $call['class'] ) && $call['class'] === __CLASS__ ) {
-				array_shift( $trace );
-				$call = reset( $trace );
-			}
-
-			while ( isset( $call['file'] ) && $call['file'] === __FILE__ ) {
-				array_shift( $trace );
-				$call = reset( $trace );
-			}
-
-			self::trace( $trace );
-			return;
-		}
-
-		# process modifiers: @, + and -
-		switch ( $modifier ) {
-			case '-':
-				self::$_firstRun = true;
-				while ( ob_get_level() ) {
-					ob_end_clean();
-				}
-				break;
-
-			case '!':
-				self::$expandedByDefault = true;
-				break;
-			case '+':
-				$maxLevelsOldValue = self::$maxLevels;
-				self::$maxLevels   = false;
-				break;
-			case '@':
-				$firstRunOldValue = self::$_firstRun;
-				self::$_firstRun  = true;
-				break;
-		}
-
-
-		$data = func_num_args() === 0
-			? array( "[[no arguments passed]]" )
-			: func_get_args();
-
-
-		$output = Kint_Decorators_Rich::_css();
-		$output .= Kint_Decorators_Rich::_wrapStart( $callee );
-
-		foreach ( $data as $k => $argument ) {
-			$output .= self::_dump( $argument, $names[$k] );
-		}
-		$output .= Kint_Decorators_Rich::_wrapEnd( $callee, $previousCaller );
-
-		self::$_firstRun = false;
-
-		switch ( $modifier ) {
-			case '+':
-				self::$maxLevels = $maxLevelsOldValue;
-				echo $output;
-				break;
-			case '@':
-				self::$_firstRun = $firstRunOldValue;
-				return $output;
-				break;
-			default:
-				echo $output;
-				break;
-		}
-
-		return '';
-	}
-
-	protected static function _dump( $var, $name = '' )
-	{
-		kintParser::reset();
-		return Kint_Decorators_Rich::decorate(
-			kintParser::factory( $var, $name )
-		);
-	}
-
-
-	/**
-	 * generic path display callback, can be configured in the settings
-	 *
-	 * @param string $file
-	 * @param int    $line [OPTIONAL]
-	 *
-	 * @return string
-	 */
-	public static function shortenPath( $file, $line = null )
-	{
-		$file          = str_replace( '\\', '/', $file );
-		$shortenedName = $file;
-		foreach ( self::$appRootDirs as $path => $replaceString ) {
-			$path = str_replace( '\\', '/', $path );
-
-			if ( strpos( $file, $path ) === 0 ) {
-				$shortenedName = $replaceString . substr( $file, strlen( $path ) );
-				break;
-			}
-		}
-
-
-		if ( !$line ) { # means this is called from resource type dump
-			return $shortenedName;
-		}
-
-		if ( !self::$fileLinkFormat ) {
-			return "{$shortenedName} line <i>{$line}</i>";
-		}
-
-		$url   = str_replace( array( '%f', '%l' ), array( $file, $line ), self::$fileLinkFormat );
-		$class = ( strpos( $url, 'http://' ) === 0 ) ? 'class="kint-ide-link"' : '';
-
-		return "<u><a {$class} href=\"{$url}\">{$shortenedName}</a></u> line <i>{$line}</i>";
-	}
-
-
-	/**
-	 * trace helper, shows the place in code inline
-	 *
-	 * @param string $file full path to file
-	 * @param int    $lineNumber the line to display
-	 * @param int    $padding surrounding lines to show besides the main one
-	 *
-	 * @return bool|string
-	 */
-	private static function _showSource( $file, $lineNumber, $padding = 7 )
-	{
-		if ( !$file OR !is_readable( $file ) ) {
-			# continuing will cause errors
-			return false;
-		}
-
-		# open the file and set the line position
-		$file = fopen( $file, 'r' );
-		$line = 0;
-
-		# Set the reading range
-		$range = array(
-			'start' => $lineNumber - $padding,
-			'end'   => $lineNumber + $padding
-		);
-
-		# set the zero-padding amount for line numbers
-		$format = '% ' . strlen( $range['end'] ) . 'd';
-
-		$source = '';
-		while ( ( $row = fgets( $file ) ) !== false ) {
-			# increment the line number
-			if ( ++$line > $range['end'] ) {
-				break;
-			}
-
-			if ( $line >= $range['start'] ) {
-				# make the row safe for output
-				$row = htmlspecialchars( $row, ENT_NOQUOTES );
-
-				# trim whitespace and sanitize the row
-				$row = '<span>' . sprintf( $format, $line ) . '</span> ' . $row;
-
-				if ( $line === $lineNumber ) {
-					# apply highlighting to this row
-					$row = '<div class="kint-highlight">' . $row . '</div>';
-				} else {
-					$row = '<div>' . $row . '</div>';
-				}
-
-				# add to the captured source
-				$source .= $row;
-			}
-		}
-
-		# close the file
-		fclose( $file );
-
-		return $source;
-	}
-
-
-	/**
-	 * returns parameter names that the function was passed, as well as any predefined symbols before function
-	 * call (modifiers)
-	 *
-	 * @param array $trace
-	 *
-	 * @return array( $parameters, $modifier, $callee, $previousCaller )
-	 */
-	private static function _getPassedNames( $trace )
-	{
-		$previousCaller = array();
-		while ( $callee = array_pop( $trace ) ) {
-			if ( strtolower( $callee['function'] ) === 'd' ||
-				strtolower( $callee['function'] ) === 'dd' ||
-				( isset( $callee['class'] ) && strtolower( $callee['class'] ) === strtolower( __CLASS__ )
-					&& strtolower( $callee['function'] ) === 'dump' )
-			) {
-				break;
-			} else {
-				$previousCaller = $callee;
-			}
-		}
-
-		if ( !isset( $callee['file'] ) || !is_readable( $callee['file'] ) ) {
-			return false;
-		}
-
-		# open the file and read it up to the position where the function call expression ended
-		$file   = fopen( $callee['file'], 'r' );
-		$line   = 0;
-		$source = '';
-		while ( ( $row = fgets( $file ) ) !== false ) {
-			if ( ++$line > $callee['line'] ) break;
-			$source .= $row;
-		}
-		fclose( $file );
-		$source = self::_removeAllButCode( $source );
-
-
-		$codePattern = empty( $callee['class'] )
-			? $callee['function']
-			: $callee['class'] . "\x07*" . $callee['type'] . "\x07*" . $callee['function'];
-		# get the position of the last call to the function
-		preg_match_all( "#[\x07{(](\\+|-|!|@)?{$codePattern}\x07*(\\()#i", $source, $matches, PREG_OFFSET_CAPTURE );
-		$match    = end( $matches[2] );
-		$modifier = end( $matches[1] );
-		$modifier = $modifier[0];
-
-		$passedParameters = str_replace( "\x07", '', substr( $source, $match[1] + 1 ) );
-		# we now have a string like this:
-		# <parameters passed>); <the rest of the last read line>
-
-		# remove everything in brackets and quotes, we don't need nested statements nor literal strings which would
-		# only complicate separating individual arguments
-		$c          = strlen( $passedParameters );
-		$inString   = $escaped = false;
-		$i          = 0;
-		$inBrackets = 0;
-		while ( $i < $c ) {
-			$letter = $passedParameters[$i];
-			if ( $inString === false ) {
-				if ( $letter === '\'' || $letter === '"' ) {
-					$inString = $letter;
-				} elseif ( $letter === '(' ) {
-					$inBrackets++;
-				} elseif ( $letter === ')' ) {
-					$inBrackets--;
-					if ( $inBrackets === -1 ) { # this means we are out of the brackets that denote passed parameters
-						$passedParameters = substr( $passedParameters, 0, $i );
-						break;
-					}
-				}
-			} elseif ( $letter === $inString && !$escaped ) {
-				$inString = false;
-			}
-
-			# place an untype-able character instead of whatever was inside quotes or brackets, we don't
-			# need that info. We'll later replace it with '...'
-			if ( $inBrackets > 0 ) {
-				if ( $inBrackets > 1 || $letter !== '(' ) {
-					$passedParameters[$i] = "\x07";
-				}
-			}
-			if ( $inString !== false ) {
-				if ( $letter !== $inString || $escaped ) {
-					$passedParameters[$i] = "\x07";
-				}
-			}
-
-			$escaped = !$escaped && ( $letter === '\\' );
-			$i++;
-		}
-
-		# by now we have an unnested arguments list, lets make it to an array for processing further
-		$arguments = explode( ',', preg_replace( "#\x07+#", '...', $passedParameters ) );
-
-		# test each argument whether it was passed literary or was it an expression or a variable name
-		$parameters = array();
-		$blacklist  = array( 'null', 'true', 'false', 'array(...)', 'array()', '"..."', 'b"..."', );
-		foreach ( $arguments as $argument ) {
-
-			if ( is_numeric( $argument )
-				|| in_array( str_replace( "'", '"', strtolower( $argument ) ), $blacklist, true )
-			) {
-				$parameters[] = null;
-			} else {
-				$parameters[] = trim( $argument );
-			}
-		}
-
-		return array( $parameters, $modifier, $callee, $previousCaller );
-	}
-
-	/**
-	 * removes comments and zaps whitespace & <?php tags from php code, makes for easier further parsing
-	 *
-	 * @param string $source
-	 *
-	 * @return string
-	 */
-	private static function _removeAllButCode( $source )
-	{
-		$newStr        = '';
-		$tokens        = token_get_all( $source );
-		$commentTokens = array( T_COMMENT => true, T_INLINE_HTML => true, T_DOC_COMMENT => true );
-
-		defined( 'T_NS_SEPARATOR' ) or define( 'T_NS_SEPARATOR', 380 );
-
-		$whiteSpaceTokens = array(
-			T_WHITESPACE => true, T_CLOSE_TAG => true,
-			T_OPEN_TAG   => true, T_OPEN_TAG_WITH_ECHO => true,
-		);
-
-		foreach ( $tokens as $token ) {
-			if ( is_array( $token ) ) {
-				if ( isset( $commentTokens[$token[0]] ) ) continue;
-
-				if ( $token[0] === T_NEW ) {
-					$token = 'new ';
-				} elseif ( $token[0] === T_NS_SEPARATOR ) {
-					$token = "\\\x07";
-				} elseif ( isset( $whiteSpaceTokens[$token[0]] ) ) {
-					$token = "\x07";
-				} else {
-					$token = $token[1];
-				}
-			} elseif ( $token === ';' ) {
-				$token = "\x07";
-			}
-
-			$newStr .= $token;
-		}
-		return $newStr;
-	}
-}
-
-
-if ( !function_exists( 'd' ) ) {
-	/**
-	 * Alias of Kint::dump()
-	 *
-	 * @return string
-	 */
-	function d()
-	{
-		if ( !Kint::enabled() ) return null;
-
-		$args = func_get_args();
-		return call_user_func_array( array( 'Kint', 'dump' ), $args );
-	}
-}
-
-if ( !function_exists( 'dd' ) ) {
-	/**
-	 * Alias of Kint::dump()
-	 * [!!!] IMPORTANT: execution will halt after call to this function
-	 *
-	 * @return string
-	 */
-	function dd()
-	{
-		if ( !Kint::enabled() ) return;
-
-		$args = func_get_args();
-		call_user_func_array( array( 'Kint', 'dump' ), $args );
-		die;
-	}
-}
-
-if ( !function_exists( 's' ) ) {
-
-	/**
-	 * Alias of kintLite()
-	 *
-	 * @return string
-	 */
-	function s()
-	{
-		if ( !Kint::enabled() ) return;
-
-		$argv = func_get_args();
-		echo '<pre>';
-		foreach ( $argv as $k => $v ) {
-			$k && print( "\n\n" );
-			echo kintLite( $v );
-		}
-		echo '</pre>' . "\n";
-	}
-
-	/**
-	 * Alias of kintLite()
-	 * [!!!] IMPORTANT: execution will halt after call to this function
-	 *
-	 * @return string
-	 */
-	function sd()
-	{
-		if ( !Kint::enabled() ) return;
-
-		echo '<pre>';
-		foreach ( func_get_args() as $k => $v ) {
-			$k && print( "\n\n" );
-			echo kintLite( $v );
-		}
-		echo '</pre>';
-		die;
-
-	}
-
-}
-
-
-/**
- * lightweight version of Kint::dump(). Uses whitespace for formatting instead of html
- * sadly not DRY yet
- *
- * @param     $var
- * @param int $level
- *
- * @return string
- */
-function kintLite( &$var, $level = 0 )
-{
-
-	// initialize function names into variables for prettier string output (html and implode are also DRY)
-	$html     = "htmlspecialchars";
-	$implode  = "implode";
-	$strlen   = "strlen";
-	$count    = "count";
-	$getClass = "get_class";
-
-
-	if ( $var === null ) {
-		return 'NULL';
-	} elseif ( is_bool( $var ) ) {
-		return 'bool ' . ( $var ? 'TRUE' : 'FALSE' );
-	} elseif ( is_float( $var ) ) {
-		return 'float ' . $var;
-	} elseif ( is_int( $var ) ) {
-		return 'integer ' . $var;
-	} elseif ( is_resource( $var ) ) {
-		if ( ( $type = get_resource_type( $var ) ) === 'stream' AND $meta = stream_get_meta_data( $var ) ) {
-
-			if ( isset( $meta['uri'] ) ) {
-				$file = $meta['uri'];
-
-				return "resource ({$type}) {$html( $file, 0 )}";
-			} else {
-				return "resource ({$type})";
-			}
-		} else {
-			return "resource ({$type})";
-		}
-	} elseif ( is_string( $var ) ) {
-		return "string ({$strlen( $var )}) \"{$html( $var )}\"";
-	} elseif ( is_array( $var ) ) {
-		$output = array();
-		$space  = str_repeat( $s = '    ', $level );
-
-		static $marker;
-
-		if ( $marker === null ) {
-			// Make a unique marker
-			$marker = uniqid( "\x00" );
-		}
-
-		if ( empty( $var ) ) {
-			return "array()";
-		} elseif ( isset( $var[$marker] ) ) {
-			$output[] = "[\n$space$s*RECURSION*\n$space]";
-		} elseif ( $level < 7 ) {
-			$isSeq = array_keys( $var ) === range( 0, count( $var ) - 1 );
-
-			$output[] = "[";
-
-			$var[$marker] = true;
-
-
-			foreach ( $var as $key => &$val ) {
-				if ( $key === $marker ) continue;
-
-				$key = $space . $s . ( $isSeq ? "" : "'{$html( $key, 0 )}' => " );
-
-				$dump     = kintLite( $val, $level + 1 );
-				$output[] = "{$key}{$dump}";
-			}
-
-			unset( $var[$marker] );
-			$output[] = "$space]";
-
-		} else {
-			$output[] = "[\n$space$s*depth too great*\n$space]";
-		}
-		return "array({$count( $var )}) {$implode( "\n", $output )}";
-	} elseif ( is_object( $var ) ) {
-		if ( $var instanceof SplFileInfo ) {
-			return "object SplFileInfo " . $var->getRealPath();
-		}
-
-		// Copy the object as an array
-		$array = (array)$var;
-
-		$output = array();
-		$space  = str_repeat( $s = '    ', $level );
-
-		$hash = spl_object_hash( $var );
-
-		// Objects that are being dumped
-		static $objects = array();
-
-		if ( empty( $array ) ) {
-			return "object {$getClass( $var )} {}";
-		} elseif ( isset( $objects[$hash] ) ) {
-			$output[] = "{\n$space$s*RECURSION*\n$space}";
-		} elseif ( $level < 7 ) {
-			$output[]       = "{";
-			$objects[$hash] = true;
-
-			foreach ( $array as $key => & $val ) {
-				if ( $key[0] === "\x00" ) {
-
-					$access = $key[1] === "*" ? "protected" : "private";
-
-					// Remove the access level from the variable name
-					$key = substr( $key, strrpos( $key, "\x00" ) + 1 );
-				} else {
-					$access = "public";
-				}
-
-				$output[] = "$space$s$access $key -> " . kintLite( $val, $level + 1 );
-			}
-			unset( $objects[$hash] );
-			$output[] = "$space}";
-
-		} else {
-			$output[] = "{\n$space$s*depth too great*\n$space}";
-		}
-
-		return "object {$getClass( $var )} ({$count( $array )}) {$implode( "\n", $output )}";
-	} else {
-		return gettype( $var ) . htmlspecialchars( var_export( $var, true ), ENT_NOQUOTES );
-	}
-}
-
-Kint::_init();
diff --git a/kint/kint-0.9/LICENCE b/kint/kint-0.9/LICENCE
deleted file mode 100644
index 936fe1f..0000000
--- a/kint/kint-0.9/LICENCE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 Rokas Šleinius (raveren@gmail.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/kint/kint-0.9/README.md b/kint/kint-0.9/README.md
deleted file mode 100644
index 9fa5b48..0000000
--- a/kint/kint-0.9/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Kint - debugging helper for PHP developers
-
-[![Total Downloads](https://poser.pugx.org/raveren/kint/downloads.png)](https://packagist.org/packages/raveren/kint)
-
-http://raveren.github.com/kint/
-
-![Screenshot](http://raveren.github.com/kint/img/preview.png)
-
-Kint for PHP is a powerful and modern, zero-setup replacement for **[var_dump()](http://php.net/manual/en/function.var-dump.php)**, **[print_r()](http://php.net/manual/en/function.print-r.php)** and **[debug_backtrace()](http://php.net/manual/en/function.debug-backtrace.php)**. You'll wonder how you developed without it.
-
-
-----
-
-
-## Installation and usage
-```php
-<?php
-require '/kint/Kint.class.php';
-
-########## DUMP VARIABLE ###########################
-Kint::dump($GLOBALS, $_SERVER); // any nuber of parameters
-// or simply use d() as a shorthand:
-d($_SERVER);
-
-
-########## DEBUG BACKTRACE #########################
-Kint::trace();
-// or via shorthand:
-d(1);
-
-
-########## TEXT-ONLY OUTPUT ########################
-s($GLOBALS);
-
-
-########## MISCELLANEOUS ###########################
-// to disable all output
-Kint::enabled(false);
-// further calls, this one included, will not yield any output
-d('Get off my lawn!'); // no effect
-
-```
-
-### Furthermore
-
-* `sd()` and `dd()` are shorthands for `s();die;` and `d();die;` respectively.
-* `!Kint::dump()` and `!dd()` will display the dump expanded by default.
-
-----
-
-
-[Visit the project page](http://raveren.github.com/kint/) for documentation, configuration, and more advanced usage examples.
-
-### Author
-
-**Rokas Šleinius** (Raveren)
-
-![](http://img199.yfrog.com/img199/4323/imageda.png)
-
-### License
-
-Licensed under the MIT License
\ No newline at end of file
diff --git a/kint/kint-0.9/composer.json b/kint/kint-0.9/composer.json
deleted file mode 100644
index cbed1f5..0000000
--- a/kint/kint-0.9/composer.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "name": "raveren/kint",
-    "description": "Kint - debugging helper for PHP developers",
-    "keywords": ["kint", "php", "debug"],
-    "type": "library",
-    "homepage": "https://github.com/raveren/kint",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Rokas Šleinius",
-            "homepage": "https://github.com/raveren"
-        },
-        {
-            "name": "Contributors",
-            "homepage": "https://github.com/raveren/kint/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=5.2.0"
-    },
-    "autoload": {
-        "files": ["Kint.class.php"]
-    }
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/config.default.php b/kint/kint-0.9/config.default.php
deleted file mode 100644
index 04d78a3..0000000
--- a/kint/kint-0.9/config.default.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-isset( $GLOBALS['_kint_settings'] ) or $GLOBALS['_kint_settings'] = array();
-$_kintSettings = &$GLOBALS['_kint_settings'];
-
-
-/** @var bool if set to false, kint will become silent, same as Kint::enabled(false) or Kint::$enabled = false */
-$_kintSettings['enabled'] = true;
-
-
-/**
- * @var bool whether to display where kint was called from
- */
-$_kintSettings['displayCalledFrom'] = true;
-
-
-/**
- * @var string format of the link to the source file in trace entries. Use %f for file path, %l for line number.
- * Defaults to xdebug.file_link_format if not set.
- *
- * [!] EXAMPLE (works with for phpStorm and RemoteCall Plugin):
- *
- * $_kintSettings['fileLinkFormat'] = 'http://localhost:8091/?message=%f:%l';
- *
- */
-$_kintSettings['fileLinkFormat'] = ini_get( 'xdebug.file_link_format' );
-
-
-/**
- * @var array base directories of your application that will be displayed instead of the full path. Keys are paths,
- * values are replacement strings
- *
- * Defaults to array( $_SERVER['DOCUMENT_ROOT'] => '&lt;ROOT&gt;' )
- *
- * [!] EXAMPLE (for Kohana framework):
- *
- * $_kintSettings['appRootDirs'] = array(
- *      APPPATH => 'APPPATH', // make sure the constants are already defined at the time of including this config file
- *      SYSPATH => 'SYSPATH',
- *      MODPATH => 'MODPATH',
- *      DOCROOT => 'DOCROOT',
- * );
- *
- * [!] EXAMPLE #2 (for a semi-universal approach)
- *
- * $_kintSettings['appRootDirs'] = array(
- *      realpath( __DIR__ . '/../../..' ) => 'ROOT', // go up as many levels as needed in the realpath() param
- * );
- *
- * $_kintSettings['fileLinkFormat'] = 'http://localhost:8091/?message=%f:%l';
- *
- */
-$_kintSettings['appRootDirs'] = array(
-	$_SERVER['DOCUMENT_ROOT'] => '&lt;ROOT&gt;'
-);
-
-
-/**
- * @var callable|null
- *
- * @param array $step each step of the backtrace is passed to this callback to clean it up or skip it entirely
- *
- * @return array|null you can return null if you want to bypass outputting this step
- *
- * [!] EXAMPLE:
- *
- * $_kintSettings['traceCleanupCallback'] = function( $traceStep ) {
- *      if ( isset( $traceStep['class'] ) && strtolower( $traceStep['class'] ) === 'errorHandler' ) {
- *           return null;
- *      }
- *
- *      if ( isset( $traceStep['function'] ) && strtolower( $traceStep['function'] ) === '__tostring' ) {
- *          $traceStep['function'] = "[object converted to string]";
- *      }
- *
- *       return $traceStep;
- * };
- */
-$_kintSettings['traceCleanupCallback'] = null;
-
-
-/** @var int max length of string before it is truncated and displayed separately in full. Zero or false to disable */
-$_kintSettings['maxStrLength'] = 60;
-
-/** @var array possible alternative char encodings in order of probability, eg. array('windows-1251') */
-$_kintSettings['charEncodings'] = array();
-
-
-/** @var int max array/object levels to go deep, if zero no limits are applied */
-$_kintSettings['maxLevels'] = 5;
-
-
-/** @var bool whether dumped indexed arrays that are in ideal sequence are displayed */
-$_kintSettings['hideSequentialKeys'] = true;
-
-
-/** @var string name of theme for rich view */
-$_kintSettings['theme'] = 'original';
-
-
-/**
- * @var callback filters array/object keys before outputting; return false if you do not wish to see it in the output
- *
- * @param string $key the key being output
- * @param mixed  $val the contents of the dumped element in case you need it
- *
- * @return bool return false to skip displaying
- *
- * [!] EXAMPLE:
- *
- * $_kintSettings['keyFilterCallback'] = function( $key, $val ) {
- *     if ( preg_match( '#_mt$#', $key ) ) {
- *         return false;
- *     }
- *
- *     if ( $val === '--testing--' ) {
- *         return false;
- *     }
- *
- *     // no need to return true to continue output
- * };
- *
- */
-$_kintSettings['keyFilterCallback'] = null;
-
-
-/** @var bool only set to true if you want to develop kint and know what you're doing */
-$_kintSettings['devel'] = false;
-
-
-unset( $_kintSettings );
\ No newline at end of file
diff --git a/kint/kint-0.9/decorators/concise.php b/kint/kint-0.9/decorators/concise.php
deleted file mode 100644
index 4385845..0000000
--- a/kint/kint-0.9/decorators/concise.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-class Kint_Decorators_Concise extends Kint
-{
-	/**
-	 * output:
-	 *
-	 * [value]
-	 *
-	 * value [title="[access] [name] [operator *] [subtype] [size] "]
-	 * OR
-	 * type [title="[access] [name] type [operator *] [subtype] [size] "]
-	 * <ul>extendedValue
-	 *
-	 * @param kintVariableData $kintVar
-	 *
-	 * @return string
-	 */
-	public static function decorate( kintVariableData $kintVar )
-	{
-		if ( $kintVar->extendedValue !== null || !empty( $kintVar->alternatives ) ) {
-			return Kint_Decorators_Rich::decorate( $kintVar );
-		}
-
-		if ( $kintVar->value !== null ) {
-			$output = '<span title="';
-
-			if ( $kintVar->access !== null ) {
-				$output .= $kintVar->access . " ";
-			}
-
-			if ( $kintVar->name !== null ) {
-				$output .= $kintVar->name . " ";
-			}
-
-			if ( $kintVar->type !== null ) {
-				$output .= $kintVar->type;
-				if ( $kintVar->subtype !== null ) {
-					$output .= " " . $kintVar->subtype;
-				}
-				$output .= " ";
-			}
-
-			if ( $kintVar->operator !== null ) {
-				$output .= $kintVar->operator . "";
-			}
-
-			if ( $kintVar->size !== null ) {
-				$output .= "(" . $kintVar->size . ") ";
-			}
-
-			$output = trim( $output ) . '">' . $kintVar->value . '</span>';
-		} else {
-			$output = '<u>NULL</u>';
-		}
-
-		return $output;
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/decorators/plain.php b/kint/kint-0.9/decorators/plain.php
deleted file mode 100644
index 203e60c..0000000
--- a/kint/kint-0.9/decorators/plain.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-class Kint_Decorators_Plain extends Kint
-{
-	/**
-	 * output:
-	 *
-	 * [access *] [name] type [operator *] [subtype] [size] [value]
-	 *
-	 * @param kintParser $kintVar
-	 *
-	 * @return string
-	 */
-	protected static function decorate( $kintVar )
-	{
-	}
-
-
-	/**
-	 * produces css and js required for display. May be called multiple times, will only produce output once per
-	 * pageload or until `-` or `@` modifier is used
-	 *
-	 * @return string
-	 */
-	protected static function _css()
-	{
-	}
-
-
-
-	/**
-	 * called for each dump, opens the html tag
-	 *
-	 * @param array $callee caller information taken from debug backtrace
-	 *
-	 * @return string
-	 */
-	protected static function _wrapStart( $callee )
-	{
-	}
-
-
-	/**
-	 * closes Kint::_wrapStart() started html tags and displays callee information
-	 *
-	 * @param array $callee caller information taken from debug backtrace
-	 * @param array $prevCaller previous caller information taken from debug backtrace
-	 *
-	 * @return string
-	 */
-	private static function _wrapEnd( $callee, $prevCaller )
-	{
-	}
-
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/decorators/rich.php b/kint/kint-0.9/decorators/rich.php
deleted file mode 100644
index c8a1f1f..0000000
--- a/kint/kint-0.9/decorators/rich.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-class Kint_Decorators_Rich extends Kint
-{
-	// make calls to Kint::dump() from different places in source coloured differently.
-	private static $_usedColors = array();
-
-	public static function decorate( kintVariableData $kintVar )
-	{
-		$output = '<dl>';
-
-		$extendedPresent = $kintVar->extendedValue !== null || $kintVar->alternatives !== null;
-
-		if ( $extendedPresent ) {
-			$class = 'kint-parent';
-			if ( Kint::$expandedByDefault ) {
-				$class .= ' kint-show';
-			}
-			$output .= '<dt class="' . $class . '"><nav></nav>';
-		} else {
-			$output .= '<dt>';
-		}
-
-		$output .= self::_drawHeader( $kintVar ) . $kintVar->value . '</dt>';
-
-
-		if ( $extendedPresent ) {
-			$output .= '<dd>';
-		}
-
-		if ( isset( $kintVar->extendedValue ) ) {
-
-			if ( is_array( $kintVar->extendedValue ) ) {
-				foreach ( $kintVar->extendedValue as $v ) {
-					$output .= self::decorate( $v );
-				}
-			} elseif ( is_string( $kintVar->extendedValue ) ) {
-				$output .= '<pre>' . $kintVar->extendedValue . '</pre>';
-			} else {
-				$output .= self::decorate( $kintVar->extendedValue ); //it's kint's container
-			}
-
-		} elseif ( isset( $kintVar->alternatives ) ) {
-			$output .= "<ul class=\"kint-tabs\">";
-
-			foreach ( $kintVar->alternatives as $k => $var ) {
-				$active = $k === 0 ? ' class="kint-active-tab"' : '';
-				$output .= "<li{$active}>" . self::_drawHeader( $var, false ) . '</li>';
-			}
-
-			$output .= "</ul><ul>";
-
-			foreach ( $kintVar->alternatives as $var ) {
-				$output .= "<li>";
-
-				$var = $var->value;
-
-				if ( is_array( $var ) ) {
-					foreach ( $var as $v ) {
-						$output .= self::decorate( $v );
-					}
-				} elseif ( is_string( $var ) ) {
-					$output .= '<pre>' . $var . '</pre>';
-				} elseif ( isset( $var ) ) {
-					throw new Exception(
-						'Kint has encountered an error, '
-							. 'please paste this report to https://github.com/raveren/kint/issues<br>'
-							. 'Error encountered at ' . basename( __FILE__ ) . ':' . __LINE__ . '<br>'
-							. ' variables: '
-							. htmlspecialchars( var_export( $kintVar->alternatives, true ), ENT_QUOTES )
-					);
-				}
-
-				$output .= "</li>";
-			}
-
-			$output .= "</ul>";
-		}
-		if ( $extendedPresent ) {
-			$output .= '</dd>';
-		}
-
-		$output .= '</dl>';
-
-		return $output;
-	}
-
-	private static function _drawHeader( kintVariableData $kintVar, $verbose = true )
-	{
-		$output = '';
-		if ( $verbose ) {
-			if ( $kintVar->access !== null ) {
-				$output .= "<var>" . $kintVar->access . "</var> ";
-			}
-
-			if ( $kintVar->name !== null && $kintVar->name !== '' ) {
-				$output .= "<dfn>" . $kintVar->name . "</dfn> ";
-			}
-
-			if ( $kintVar->operator !== null ) {
-				$output .= $kintVar->operator . " ";
-			}
-		}
-
-		if ( $kintVar->type !== null ) {
-			$output .= "<var>" . $kintVar->type;
-			if ( $kintVar->subtype !== null ) {
-				$output .= " " . $kintVar->subtype;
-			}
-			$output .= "</var> ";
-		}
-
-
-		if ( $kintVar->size !== null ) {
-			$output .= "(" . $kintVar->size . ") ";
-		}
-
-		return $output;
-	}
-
-
-	/**
-	 * produces css and js required for display. May be called multiple times, will only produce output once per
-	 * pageload or until `-` or `@` modifier is used
-	 *
-	 * @return string
-	 */
-	protected static function _css()
-	{
-		if ( !self::$_firstRun ) return '';
-		self::$_firstRun = false;
-
-		$baseDir = KINT_DIR . 'view/inc/';
-
-		if ( !is_readable( $cssFile = $baseDir . self::$theme . '.css' ) ) {
-			$cssFile = $baseDir . 'original.css';
-		}
-
-		return '<script>' . file_get_contents( $baseDir . 'kint.js' ) . '</script>'
-			. '<style>' . file_get_contents( $cssFile ) . "</style>\n";
-	}
-
-
-	/**
-	 * called for each dump, opens the html tag
-	 *
-	 * @param array $callee caller information taken from debug backtrace
-	 *
-	 * @return string
-	 */
-	protected static function _wrapStart( $callee )
-	{
-		// colors looping outputs the same (i.e. if same line in code dumps variables multiple time,
-		// we assume it's in a loop)
-
-		$uid = isset( $callee['file'] ) ? crc32( $callee['file'] . $callee['line'] ) : 'no-file';
-
-		if ( isset( self::$_usedColors[$uid] ) ) {
-			$class = self::$_usedColors[$uid];
-		} else {
-			$class                   = sizeof( self::$_usedColors );
-			self::$_usedColors[$uid] = $class;
-		}
-
-		$class = "kint_{$class}";
-
-
-		return "<div class=\"kint {$class}\">";
-	}
-
-
-	/**
-	 * closes Kint::_wrapStart() started html tags and displays callee information
-	 *
-	 * @param array $callee caller information taken from debug backtrace
-	 * @param array $prevCaller previous caller information taken from debug backtrace
-	 *
-	 * @return string
-	 */
-	protected static function _wrapEnd( $callee, $prevCaller )
-	{
-		if ( !Kint::$displayCalledFrom ) {
-			return '</div>';
-		}
-
-		$callingFunction = '';
-		if ( isset( $prevCaller['class'] ) ) {
-			$callingFunction = $prevCaller['class'];
-		}
-		if ( isset( $prevCaller['type'] ) ) {
-			$callingFunction .= $prevCaller['type'];
-		}
-		if ( isset( $prevCaller['function'] ) && !in_array( $prevCaller['function'], Kint::$_statements ) ) {
-			$callingFunction .= $prevCaller['function'] . '()';
-		}
-		$callingFunction and $callingFunction = " in ({$callingFunction})";
-
-
-		$calleeInfo = isset( $callee['file'] )
-			? 'Called from ' . self::shortenPath( $callee['file'], $callee['line'] )
-			: '';
-
-
-		return $calleeInfo || $callingFunction
-			? "<footer>{$calleeInfo}{$callingFunction}</footer></div>"
-			: "</div>";
-	}
-
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/arrayobject.php b/kint/kint-0.9/parsers/custom/arrayobject.php
deleted file mode 100644
index 4c15e29..0000000
--- a/kint/kint-0.9/parsers/custom/arrayobject.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-class Kint_Parsers_ArrayObject extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		if ( !is_object( $variable ) ) return false;
-
-		$reflection  = new ReflectionClass( $variable );
-		$parentClass = $reflection->getParentClass();
-
-		if ( $parentClass !== false && $parentClass->name === 'ArrayObject' ) {
-			$arrayCopy = $variable->getArrayCopy();
-			foreach ( $arrayCopy as $k => $var ) {
-				$t             = kintParser::factory( $var );
-				$t->name       = "'{$k}'";
-				$t->operator   = '=>';
-				$this->value[] = $t;
-			}
-
-			$this->type = 'ArrayObject contents';
-			$this->size = count( $arrayCopy );
-		} else {
-			return false;
-		}
-	}
-}
diff --git a/kint/kint-0.9/parsers/custom/classmethods.php b/kint/kint-0.9/parsers/custom/classmethods.php
deleted file mode 100644
index 58c7f4c..0000000
--- a/kint/kint-0.9/parsers/custom/classmethods.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-class Kint_Parsers_ClassMethods extends kintParser
-{
-    private static $cache = array();
-
-    protected function _parse(&$variable)
-    {
-        if(!is_object($variable)) {
-            return false;
-        }
-
-        $className = get_class($variable);
-
-        // Assuming class definition will not change inside one request
-        if(!isset(self::$cache[$className])) {
-            $reflection = new \ReflectionClass($variable);
-
-            $public = $private = $protected = array();
-
-            // Class methods
-            foreach($reflection->getMethods() as $method) {
-                $params = array();
-
-                // Access type
-                $access = implode(' ', \Reflection::getModifierNames($method->getModifiers()));
-
-                // Method parameters
-                foreach($method->getParameters() as $param) {
-                    $paramString = '';
-
-                    if ( $param->isArray() ) {
-                        $paramString .= 'array ';
-                    } else {
-                        try {
-                            if (( $paramClassName = $param->getClass() )) {
-                                $paramString .= $paramClassName->name . ' ';
-                            }
-                        } catch ( ReflectionException $e ) {
-                            preg_match( '/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches );
-                            $paramClassName = isset( $matches[1] ) ? $matches[1] : '';
-
-                            $paramString .= ' UNDEFINED CLASS (' . $paramClassName . ') ';
-                        }
-                    }
-
-                    $paramString .= ($param->isPassedByReference() ? '&' : '') . '$' . $param->getName();
-
-                    if($param->isDefaultValueAvailable()) {
-                        if(is_array($param->getDefaultValue())) {
-                            $arrayValues = array();
-                            foreach($param->getDefaultValue() as $key => $value) {
-                                $arrayValues[] = $key . ' => ' . $value;
-                            }
-
-                            $defaultValue = 'array(' . implode(', ', $arrayValues) . ')';
-                        } elseif($param->getDefaultValue() === null){
-                            $defaultValue = 'NULL';
-                        } elseif($param->getDefaultValue() === false){
-                            $defaultValue = 'false';
-                        } elseif($param->getDefaultValue() === true){
-                            $defaultValue = 'true';
-                        } elseif($param->getDefaultValue() === ''){
-                            $defaultValue = '""';
-                        } else {
-                            $defaultValue = $param->getDefaultValue();
-                        }
-
-                        $paramString .= ' = ' . $defaultValue;
-                    }
-
-                    $params[] = $paramString;
-                }
-
-                $output = new \kintVariableData();
-
-                // Simple DocBlock parser, look for @return
-                if(($docBlock = $method->getDocComment())) {
-                    $matches = array();
-                    if(preg_match_all('/@(\w+)\s+(.*)\r?\n/m', $docBlock, $matches)) {
-                        $lines = array_combine($matches[1], $matches[2]);
-                        if(isset($lines['return'])) {
-                            $output->operator = '->';
-                            # since we're outputting code, assumption that the string is utf8 is most likely correct
-                            # and saves resources
-                            $output->type = self::_escape( $lines['return'], 'UTF-8' );
-                        }
-                    }
-                }
-
-                $output->name = ($method->returnsReference() ? '&' : '') . $method->getName() . '('
-                    . implode(', ', $params) . ')';
-                $output->access = $access;
-
-                if(is_string($docBlock)) {
-                    $lines = array();
-                    foreach(explode("\n", $docBlock) as $line) {
-                        $line = trim($line);
-
-                        if(in_array($line, array('/**', '/*', '*/'))) {
-                            continue;
-                        }elseif(strpos($line, '*') === 0) {
-                            $line = substr($line, 1);
-                        }
-
-                        $lines[] = self::_escape( trim( $line ), 'UTF-8' );
-                    }
-
-                    $output->extendedValue = implode("\n", $lines) . "\n\n";
-                }
-
-                $declaringClass = $method->getDeclaringClass();
-                $declaringClassName = $declaringClass->getName();
-
-                if($declaringClassName !== $className) {
-                    $output->extendedValue .= "<small>Inherited from <i>{$declaringClassName}</i></small>\n";
-                }
-
-                $fileName = \Kint::shortenPath($method->getFileName(), $method->getStartLine());
-
-                if($fileName) {
-                    $output->extendedValue .= "<small>Defined in {$fileName}</small>";
-                }
-
-                $sortName = $access . $method->getName();
-
-                if($method->isPrivate()) {
-                    $private[$sortName] = $output;
-                } elseif($method->isProtected()) {
-                    $protected[$sortName] = $output;
-                } else {
-                    $public[$sortName] = $output;
-                }
-            }
-
-            if(!$private && !$protected && !$public) {
-                self::$cache[$className] = false;
-            }
-
-            ksort($public);
-            ksort($protected);
-            ksort($private);
-
-            self::$cache[$className] = $public + $protected + $private;
-        }
-
-        $this->value = self::$cache[$className];
-        $this->type = 'Available methods';
-        $this->size = count(self::$cache[$className]);
-    }
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/classstatics.php b/kint/kint-0.9/parsers/custom/classstatics.php
deleted file mode 100644
index 1c6d0e4..0000000
--- a/kint/kint-0.9/parsers/custom/classstatics.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-class Kint_Parsers_ClassStatics extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		if ( !is_object( $variable ) ) return false;
-
-		$extendedValue = array();
-
-		$reflection = new ReflectionClass( $variable );
-		// first show static values
-		foreach ( $reflection->getProperties( ReflectionProperty::IS_STATIC ) as $property ) {
-			if ( $property->isPrivate() ) {
-				if ( !method_exists( $property, 'setAccessible' ) ) {
-					break;
-				}
-				$property->setAccessible( true );
-				$access = "private";
-			} elseif ( $property->isProtected() ) {
-				$property->setAccessible( true );
-				$access = "protected";
-			} else {
-				$access = 'public';
-			}
-
-			if ( Kint::$keyFilterCallback
-				&& call_user_func( Kint::$keyFilterCallback, $property->getName(), $property->getValue() ) === false
-			) {
-				continue;
-			}
-
-			$_      = $property->getValue();
-			$output = kintParser::factory( $_, '$' . $property->getName() );
-
-			$output->access   = $access;
-			$output->operator = '::';
-			$extendedValue[]  = $output;
-		}
-
-		foreach ( $reflection->getConstants() as $constant => $val ) {
-			$output = kintParser::factory( $val, $constant );
-
-			$output->access   = 'constant';
-			$output->operator = '::';
-			$extendedValue[]  = $output;
-		}
-
-		if ( empty( $extendedValue ) ) return false;
-
-		$this->value = $extendedValue;
-		$this->type  = 'Static class properties';
-		$this->size  = count( $extendedValue );
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/color.php b/kint/kint-0.9/parsers/custom/color.php
deleted file mode 100644
index 21d1f39..0000000
--- a/kint/kint-0.9/parsers/custom/color.php
+++ /dev/null
@@ -1,400 +0,0 @@
-<?php
-class Kint_Parsers_Color extends kintParser
-{
-	private static $_css3Named = array(
-		'aliceblue'=>'#f0f8ff','antiquewhite'=>'#faebd7','aqua'=>'#00ffff','aquamarine'=>'#7fffd4','azure'=>'#f0ffff',
-		'beige'=>'#f5f5dc','bisque'=>'#ffe4c4','black'=>'#000000','blanchedalmond'=>'#ffebcd','blue'=>'#0000ff',
-		'blueviolet'=>'#8a2be2','brown'=>'#a52a2a','burlywood'=>'#deb887','cadetblue'=>'#5f9ea0','chartreuse'=>'#7fff00',
-		'chocolate'=>'#d2691e','coral'=>'#ff7f50','cornflowerblue'=>'#6495ed','cornsilk'=>'#fff8dc','crimson'=>'#dc143c',
-		'cyan'=>'#00ffff','darkblue'=>'#00008b','darkcyan'=>'#008b8b','darkgoldenrod'=>'#b8860b','darkgray'=>'#a9a9a9',
-		'darkgrey'=>'#a9a9a9','darkgreen'=>'#006400','darkkhaki'=>'#bdb76b','darkmagenta'=>'#8b008b',
-		'darkolivegreen'=>'#556b2f','darkorange'=>'#ff8c00','darkorchid'=>'#9932cc','darkred'=>'#8b0000',
-		'darksalmon'=>'#e9967a','darkseagreen'=>'#8fbc8f','darkslateblue'=>'#483d8b','darkslategray'=>'#2f4f4f',
-		'darkslategrey'=>'#2f4f4f','darkturquoise'=>'#00ced1','darkviolet'=>'#9400d3','deeppink'=>'#ff1493',
-		'deepskyblue'=>'#00bfff','dimgray'=>'#696969','dimgrey'=>'#696969','dodgerblue'=>'#1e90ff',
-		'firebrick'=>'#b22222','floralwhite'=>'#fffaf0','forestgreen'=>'#228b22','fuchsia'=>'#ff00ff',
-		'gainsboro'=>'#dcdcdc','ghostwhite'=>'#f8f8ff','gold'=>'#ffd700','goldenrod'=>'#daa520','gray'=>'#808080',
-		'grey'=>'#808080','green'=>'#008000','greenyellow'=>'#adff2f','honeydew'=>'#f0fff0','hotpink'=>'#ff69b4',
-		'indianred'=>'#cd5c5c','indigo'=>'#4b0082','ivory'=>'#fffff0','khaki'=>'#f0e68c','lavender'=>'#e6e6fa',
-		'lavenderblush'=>'#fff0f5','lawngreen'=>'#7cfc00','lemonchiffon'=>'#fffacd','lightblue'=>'#add8e6',
-		'lightcoral'=>'#f08080','lightcyan'=>'#e0ffff','lightgoldenrodyellow'=>'#fafad2','lightgray'=>'#d3d3d3',
-		'lightgrey'=>'#d3d3d3','lightgreen'=>'#90ee90','lightpink'=>'#ffb6c1','lightsalmon'=>'#ffa07a',
-		'lightseagreen'=>'#20b2aa','lightskyblue'=>'#87cefa','lightslategray'=>'#778899','lightslategrey'=>'#778899',
-		'lightsteelblue'=>'#b0c4de','lightyellow'=>'#ffffe0','lime'=>'#00ff00','limegreen'=>'#32cd32','linen'=>'#faf0e6',
-		'magenta'=>'#ff00ff','maroon'=>'#800000','mediumaquamarine'=>'#66cdaa','mediumblue'=>'#0000cd',
-		'mediumorchid'=>'#ba55d3','mediumpurple'=>'#9370d8','mediumseagreen'=>'#3cb371','mediumslateblue'=>'#7b68ee',
-		'mediumspringgreen'=>'#00fa9a','mediumturquoise'=>'#48d1cc','mediumvioletred'=>'#c71585',
-		'midnightblue'=>'#191970','mintcream'=>'#f5fffa','mistyrose'=>'#ffe4e1','moccasin'=>'#ffe4b5',
-		'navajowhite'=>'#ffdead','navy'=>'#000080','oldlace'=>'#fdf5e6','olive'=>'#808000','olivedrab'=>'#6b8e23',
-		'orange'=>'#ffa500','orangered'=>'#ff4500','orchid'=>'#da70d6','palegoldenrod'=>'#eee8aa','palegreen'=>'#98fb98',
-		'paleturquoise'=>'#afeeee','palevioletred'=>'#d87093','papayawhip'=>'#ffefd5','peachpuff'=>'#ffdab9',
-		'peru'=>'#cd853f','pink'=>'#ffc0cb','plum'=>'#dda0dd','powderblue'=>'#b0e0e6','purple'=>'#800080',
-		'red'=>'#ff0000','rosybrown'=>'#bc8f8f','royalblue'=>'#4169e1','saddlebrown'=>'#8b4513','salmon'=>'#fa8072',
-		'sandybrown'=>'#f4a460','seagreen'=>'#2e8b57','seashell'=>'#fff5ee','sienna'=>'#a0522d','silver'=>'#c0c0c0',
-		'skyblue'=>'#87ceeb','slateblue'=>'#6a5acd','slategray'=>'#708090','slategrey'=>'#708090','snow'=>'#fffafa',
-		'springgreen'=>'#00ff7f','steelblue'=>'#4682b4','tan'=>'#d2b48c','teal'=>'#008080','thistle'=>'#d8bfd8',
-		'tomato'=>'#ff6347','turquoise'=>'#40e0d0','violet'=>'#ee82ee','wheat'=>'#f5deb3','white'=>'#ffffff',
-		'whitesmoke'=>'#f5f5f5','yellow'=>'#ffff00','yellowgreen'=>'#9acd32'
-	);
-
-
-	protected function _parse( & $variable )
-	{
-		if ( !self::_fits( $variable ) ) return false;
-
-		$this->type  = 'CSS color';
-		$variants     = self::_convert( $variable );
-		$this->value =
-			"<div style=\"background:$variable;\" class=\"kint-color-preview\">{$variable}</div>" .
-				"<strong>hex :</strong> {$variants['hex']}\n" .
-				"<strong>rgb :</strong> {$variants['rgb']}\n" .
-				( isset( $variants['name'] ) ? "<strong>name:</strong> {$variants['name']}\n" : '' ) .
-				"<strong>hsl :</strong> {$variants['hsl']}";
-	}
-
-
-	private static function _fits( $variable )
-	{
-		if ( !is_string( $variable ) ) return false;
-
-		$var = strtolower( trim( $variable ) );
-
-		return isset( self::$_css3Named[$var] )
-			|| preg_match(
-				'/^(?:#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}|(?:rgb|hsl)a?\s*\((?:\s*[0-9.%]+\s*,?){3,4}\))$/',
-				$var
-			);
-	}
-
-	private static function _convert( $color )
-	{
-		$color         = strtolower( $color );
-		$decimalColors = array();
-		$variants      = array(
-			'hex'   => null,
-			'rgb'   => null,
-			'name'  => null,
-			'hsl'   => null,
-		);
-
-		if ( isset( self::$_css3Named[$color] ) ) {
-			$variants['name'] = $color;
-			$color            = self::$_css3Named[$color];
-		}
-
-		if ( $color{0} === '#' ) {
-			$variants['hex'] = $color;
-			$color           = substr( $color, 1 );
-			if ( strlen( $color ) === 6 ) {
-				$colors = str_split( $color, 2 );
-			} else {
-				$colors = array(
-					$color{0} . $color{0},
-					$color{1} . $color{1},
-					$color{2} . $color{2},
-				);
-			}
-
-			$decimalColors = array_map( 'hexdec', $colors );
-		} elseif ( substr( $color, 0, 3 ) === 'rgb' ) {
-			$variants['rgb'] = $color;
-			preg_match_all( '#([0-9.%]+)#', $color, $matches );
-			$decimalColors = $matches[1];
-			foreach ( $decimalColors as &$color ) {
-				if ( strpos( $color, '%' ) !== false ) {
-					$color = str_replace( '%', '', $color ) * 2.55;
-				}
-			}
-
-
-		} elseif ( substr( $color, 0, 3 ) === 'hsl' ) {
-			$variants['hsl'] = $color;
-			preg_match_all( '#([0-9.%]+)#', $color, $matches );
-
-			$colors = $matches[1];
-			$colors[0] /= 360;
-			$colors[1] = str_replace( '%', '', $colors[1] ) / 100;
-			$colors[2] = str_replace( '%', '', $colors[2] ) / 100;
-
-			$decimalColors = self::_HSLtoRGB( $colors );
-			if ( isset( $colors[3] ) ) {
-				$decimalColors[] = $colors[3];
-			}
-		}
-
-		if ( isset( $decimalColors[3] ) ) {
-			$alpha = $decimalColors[3];
-			unset( $decimalColors[3] );
-		} else {
-			$alpha = null;
-		}
-		foreach ( $variants as $type => &$variant ) {
-			if ( isset( $variant ) ) continue;
-
-			switch ( $type ) {
-				case 'hex':
-					$variant = '#';
-					foreach ( $decimalColors as &$color ) {
-						$variant .= str_pad( dechex( $color ), 2, "0", STR_PAD_LEFT );
-					}
-					$variant .= isset( $alpha ) ? ' (alpha omitted)' : '';
-					break;
-				case 'rgb':
-					$rgb = $decimalColors;
-					if ( isset( $alpha ) ) {
-						$rgb[] = $alpha;
-						$a     = 'a';
-					} else {
-						$a = '';
-					}
-					$variant = "rgb{$a}( " . implode( ', ', $rgb ) . " )";
-					break;
-				case 'hsl':
-					$rgb = self::_RGBtoHSL( $decimalColors );
-					if ( $rgb === null ) {
-						unset( $variants[$type] );
-						break;
-					}
-					if ( isset( $alpha ) ) {
-						$rgb[] = $alpha;
-						$a     = 'a';
-					} else {
-						$a = '';
-					}
-
-					$variant = "hsl{$a}( " . implode( ', ', $rgb ) . " )";
-					break;
-				case 'name':
-					// [!] name in initial variants array must go after hex
-					if ( ( $key = array_search( $variants['hex'], self::$_css3Named, true ) ) !== false ) {
-						$variant = $key;
-					} else {
-						unset( $variants[$type] );
-					}
-					break;
-			}
-
-		}
-
-		return $variants;
-	}
-
-
-	private static function _HSLtoRGB( array $hsl )
-	{
-		list( $h, $s, $l ) = $hsl;
-		$m2 = ( $l <= 0.5 ) ? $l * ( $s + 1 ) : $l + $s - $l * $s;
-		$m1 = $l * 2 - $m2;
-		return array(
-			round( self::_hue2rgb( $m1, $m2, $h + 0.33333 ) * 255 ),
-			round( self::_hue2rgb( $m1, $m2, $h ) * 255 ),
-			round( self::_hue2rgb( $m1, $m2, $h - 0.33333 ) * 255 ),
-		);
-	}
-
-
-	/**
-	 * Helper function for _color_hsl2rgb().
-	 */
-	private static function _hue2rgb( $m1, $m2, $h )
-	{
-		$h = ( $h < 0 ) ? $h + 1 : ( ( $h > 1 ) ? $h - 1 : $h );
-		if ( $h * 6 < 1 ) return $m1 + ( $m2 - $m1 ) * $h * 6;
-		if ( $h * 2 < 1 ) return $m2;
-		if ( $h * 3 < 2 ) return $m1 + ( $m2 - $m1 ) * ( 0.66666 - $h ) * 6;
-		return $m1;
-	}
-
-
-	private static function _RGBtoHSL( array $rgb )
-	{
-		list( $clrR, $clrG, $clrB ) = $rgb;
-
-		$clrMin   = min( $clrR, $clrG, $clrB );
-		$clrMax   = max( $clrR, $clrG, $clrB );
-		$deltaMax = $clrMax - $clrMin;
-
-		$L = ( $clrMax + $clrMin ) / 510;
-
-		if ( 0 == $deltaMax ) {
-			$H = 0;
-			$S = 0;
-		} else {
-			if ( 0.5 > $L ) {
-				$S = $deltaMax / ( $clrMax + $clrMin );
-			} else {
-				$S = $deltaMax / ( 510 - $clrMax - $clrMin );
-			}
-
-			if ( $clrMax == $clrR ) {
-				$H = ( $clrG - $clrB ) / ( 6.0 * $deltaMax );
-			} else if ( $clrMax == $clrG ) {
-				$H = 1 / 3 + ( $clrB - $clrR ) / ( 6.0 * $deltaMax );
-			} else {
-				$H = 2 / 3 + ( $clrR - $clrG ) / ( 6.0 * $deltaMax );
-			}
-
-			if ( 0 > $H ) $H += 1;
-			if ( 1 < $H ) $H -= 1;
-		}
-		return array(
-			round( $H * 360 ),
-			round( $S * 100 ) . '%',
-			round( $L * 100 ) . '%'
-		);
-
-	}
-}
-
-/* *************
- * TEST DATA
- *
-dd(array(
-'hsl(0,  100%,50%)',
-'hsl(30, 100%,50%)',
-'hsl(60, 100%,50%)',
-'hsl(90, 100%,50%)',
-'hsl(120,100%,50%)',
-'hsl(150,100%,50%)',
-'hsl(180,100%,50%)',
-'hsl(210,100%,50%)',
-'hsl(240,100%,50%)',
-'hsl(270,100%,50%)',
-'hsl(300,100%,50%)',
-'hsl(330,100%,50%)',
-'hsl(360,100%,50%)',
-'hsl(120,100%,25%)',
-'hsl(120,100%,50%)',
-'hsl(120,100%,75%)',
-'hsl(120,100%,50%)',
-'hsl(120, 67%,50%)',
-'hsl(120, 33%,50%)',
-'hsl(120,  0%,50%)',
-'hsl(120, 60%,70%)',
-'#f03',
-'#F03',
-'#ff0033',
-'#FF0033',
-'rgb(255,0,51)',
-'rgb(255, 0, 51)',
-'rgb(100%,0%,20%)',
-'rgb(100%, 0%, 20%)',
-'hsla(240,100%,50%,0.05)',
-'hsla(240,100%,50%, 0.4)',
-'hsla(240,100%,50%, 0.7)',
-'hsla(240,100%,50%,   1)',
-'rgba(255,0,0,0.1)',
-'rgba(255,0,0,0.4)',
-'rgba(255,0,0,0.7)',
-'rgba(255,0,0,  1)',
-'black',
-'silver',
-'gray',
-'white',
-'maroon',
-'red',
-'purple',
-'fuchsia',
-'green',
-'lime',
-'olive',
-'yellow',
-'navy',
-'blue',
-'teal',
-'aqua',
-'orange',
-'aliceblue',
-'antiquewhite',
-'aquamarine',
-'azure',
-'beige',
-'bisque',
-'blanchedalmond',
-'blueviolet',
-'brown',
-'burlywood',
-'cadetblue',
-'chartreuse',
-'chocolate',
-'coral',
-'cornflowerblue',
-'cornsilk',
-'crimson',
-'darkblue',
-'darkcyan',
-'darkgoldenrod',
-'darkgray',
-'darkgreen',
-'darkgrey',
-'darkkhaki',
-'darkmagenta',
-'darkolivegreen',
-'darkorange',
-'darkorchid',
-'darkred',
-'darksalmon',
-'darkseagreen',
-'darkslateblue',
-'darkslategray',
-'darkslategrey',
-'darkturquoise',
-'darkviolet',
-'deeppink',
-'deepskyblue',
-'dimgray',
-'dimgrey',
-'dodgerblue',
-'firebrick',
-'floralwhite',
-'forestgreen',
-'gainsboro',
-'ghostwhite',
-'gold',
-'goldenrod',
-'greenyellow',
-'grey',
-'honeydew',
-'hotpink',
-'indianred',
-'indigo',
-'ivory',
-'khaki',
-'lavender',
-'lavenderblush',
-'lawngreen',
-'lemonchiffon',
-'lightblue',
-'lightcoral',
-'lightcyan',
-'lightgoldenrodyellow',
-'lightgray',
-'lightgreen',
-'lightgrey',
-'lightpink',
-'lightsalmon',
-'lightseagreen',
-'lightskyblue',
-'lightslategray',
-'lightslategrey',
-'lightsteelblue',
-'lightyellow',
-'limegreen',
-'linen',
-'mediumaquamarine',
-'mediumblue',
-'mediumorchid',
-'mediumpurple',
-'mediumseagreen',
-'mediumslateblue',
-'mediumspringgreen',
-'mediumturquoise',
-'mediumvioletred',
-'midnightblue',
-'mintcream',
-'mistyrose',
-'moccasin',
-'navajowhite',
-'oldlace',
-'olivedrab',
-));*/
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/json.php b/kint/kint-0.9/parsers/custom/json.php
deleted file mode 100644
index 0327468..0000000
--- a/kint/kint-0.9/parsers/custom/json.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-class Kint_Parsers_Json extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		if ( !is_string( $variable )
-			|| !isset( $variable{0} ) || ( $variable{0} !== '{' && $variable{0} !== '[' )
-			|| ( $json = json_decode( $variable ) ) === null
-		) return false;
-
-		$val = (array)$json;
-		if ( empty( $val ) ) return false;
-
-		$this->value = kintParser::factory( $val )->extendedValue;
-		$this->type  = 'JSON';
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/microtime.php b/kint/kint-0.9/parsers/custom/microtime.php
deleted file mode 100644
index a51a051..0000000
--- a/kint/kint-0.9/parsers/custom/microtime.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-class Kint_Parsers_Microtime extends kintParser
-{
-	private static $_times = array();
-	private static $_laps = array();
-
-	protected function _parse( & $variable )
-	{
-		if ( !is_string( $variable ) || !preg_match( '[0\.[0-9]{8} [0-9]{10}]', $variable ) ) {
-			return false;
-		}
-
-		list( $usec, $sec ) = explode( " ", microtime() );
-
-		$time = (float)$usec + (float)$sec;
-		$size = memory_get_usage( true );
-
-		$this->value = @date( 'Y-m-d H:i:s', $sec ) . '.' . substr( $usec, 2, 4 );
-
-		$numberOfCalls = count( self::$_times );
-		if ( $numberOfCalls > 0 ) { # meh, faster than count($times) > 1
-			$lap           = $time - end( self::$_times );
-			self::$_laps[] = $lap;
-
-			$this->value .= "\n<strong>SINCE LAST CALL:</strong> " . round( $lap, 4 ) . 's.';
-			if ( $numberOfCalls > 1 ) {
-				$this->value .= "\n<strong>SINCE START:</strong> " . round( $time - self::$_times[0], 4 ) . 's.';
-				$this->value .= "\n<strong>AVERAGE DURATION:</strong> "
-					. round( array_sum( self::$_laps ) / $numberOfCalls, 4 ) . 's.';
-			}
-		}
-
-		$unit = array( 'B', 'KB', 'MB', 'GB', 'TB' );
-		$this->value .= "\n<strong>MEMORY USAGE:</strong> " . $size . " bytes ("
-			. round( $size / pow( 1024, ( $i = floor( log( $size, 1024 ) ) ) ), 3 ) . ' ' . $unit[$i] . ")";
-
-		self::$_times[] = $time;
-		$this->type     = 'Stats';
-	}
-
-	/*
-	function test() {
-		$x = '';
-		d( microtime() );
-		for ( $i = 0; $i < 10; $i++ ) {
-			$x .= str_repeat( 'x', mt_rand( 128 * 1024, 5 * 1024 * 1024 ) );
-			usleep( mt_rand( 0, 1000 * 1000 ) );
-			d( microtime() );
-		}
-		unset( $x );
-		dd( microtime() );
-	}
-	 */
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/splfileinfo.php b/kint/kint-0.9/parsers/custom/splfileinfo.php
deleted file mode 100644
index 6b14f67..0000000
--- a/kint/kint-0.9/parsers/custom/splfileinfo.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-class Kint_Parsers_SplFileInfo extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		if ( !is_object( $variable ) || !$variable instanceof SplFileInfo ) return false;
-
-		$this->type    = 'object';
-		$this->subtype = 'SplFileInfo';
-		$this->value   = Kint::shortenPath( $variable->getRealPath() );
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/splobjectstorage.php b/kint/kint-0.9/parsers/custom/splobjectstorage.php
deleted file mode 100644
index c355771..0000000
--- a/kint/kint-0.9/parsers/custom/splobjectstorage.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-class Kint_Parsers_SplObjectStorage extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		if ( !is_object( $variable ) || get_class( $variable ) !== 'SplObjectStorage' ) return false;
-
-		/** @var $variable SplObjectStorage */
-
-		$variable->rewind();
-		while ( $variable->valid() ) {
-			$current       = $variable->current();
-			$this->value[] = kintParser::factory( $current );
-			$variable->next();
-		}
-
-		$this->type = 'Storage contents';
-		$this->size = $variable->count();
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/timestamp.php b/kint/kint-0.9/parsers/custom/timestamp.php
deleted file mode 100644
index 4c5f487..0000000
--- a/kint/kint-0.9/parsers/custom/timestamp.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-class Kint_Parsers_Timestamp extends kintParser
-{
-	private static function _fits( $variable )
-	{
-		if ( !is_string( $variable ) && !is_int( $variable ) ) return false;
-
-		$len = strlen( (int)$variable );
-		return ( $len === 9 || $len === 10 ) // a little naive
-			&& ( (string)(int)$variable == $variable );
-	}
-
-
-	protected function _parse( & $variable )
-	{
-		if ( !self::_fits( $variable ) ) return false;
-
-		$this->type = 'timestamp';
-		# avoid dreaded "Timezone must be set" error
-		$this->value = @date( 'Y-m-d H:i:s', $variable );
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/custom/xml.php b/kint/kint-0.9/parsers/custom/xml.php
deleted file mode 100644
index 50d0def..0000000
--- a/kint/kint-0.9/parsers/custom/xml.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-class Kint_Parsers_Xml extends kintParser
-{
-	protected function _parse( & $variable )
-	{
-		try {
-			if ( !is_string( $variable )
-				|| substr( $variable, 0, 5 ) !== '<?xml'
-				|| ( $xml = simplexml_load_string( $variable ) ) === null
-			) return false;
-		} catch ( Exception $e ) {
-			return false;
-		}
-
-		$this->value = kintParser::factory( $xml )->extendedValue;
-		$this->type  = 'XML';
-	}
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/parsers/parser.class.php b/kint/kint-0.9/parsers/parser.class.php
deleted file mode 100644
index 6dd4ef6..0000000
--- a/kint/kint-0.9/parsers/parser.class.php
+++ /dev/null
@@ -1,571 +0,0 @@
-<?php
-abstract class kintParser extends kintVariableData
-{
-	private static $_level = 0;
-	private static $_customDataTypes;
-	private static $_objects;
-	private static $_marker;
-
-	private static $_skipAlternatives = false;
-
-
-
-	private static function _init()
-	{
-		$fh = opendir( KINT_DIR . 'parsers/custom/' );
-		while ( $fileName = readdir( $fh ) ) {
-			if ( substr( $fileName, -4 ) !== '.php' ) continue;
-
-			require KINT_DIR . 'parsers/custom/' . $fileName;
-			self::$_customDataTypes[] = substr( $fileName, 0, -4 );
-		}
-	}
-
-	public static function reset()
-	{
-		self::$_level   = 0;
-		self::$_objects = self::$_marker = null;
-	}
-
-	/**
-	 * main and usually single method a custom parser must implement
-	 *
-	 * @param mixed $variable
-	 *
-	 * @return mixed [!!!] false is returned if the variable is not of current type
-	 */
-	abstract protected function _parse( & $variable );
-
-
-	/**
-	 * the only public entry point to return a parsed representation of a variable
-	 *
-	 * @static
-	 *
-	 * @param      $variable
-	 * @param null $name
-	 *
-	 * @throws Exception
-	 * @return \kintParser
-	 */
-	public final static function factory( & $variable, $name = null )
-	{
-		isset( self::$_customDataTypes ) or self::_init();
-
-		# save internal data to revert after dumping to properly handle recursions etc
-		$revert = array(
-			'level'   => self::$_level,
-			'objects' => self::$_objects,
-		);
-
-		self::$_level++;
-
-		$name          = self::_escape( $name );
-		$varData       = new kintVariableData;
-		$varData->name = $name;
-
-		# first parse the variable based on its type
-		$varType = gettype( $variable );
-		$varType === 'unknown type' and $varType = 'unknown'; # PHP 5.4 inconsistency
-		$methodName = '_parse_' . $varType;
-
-		# base type parser returning false means "stop processing further": e.g. recursion
-		if ( self::$methodName( $variable, $varData ) === false ) {
-			self::$_level--;
-			return $varData;
-		}
-
-		if ( !self::$_skipAlternatives) {
-			# if an alternative returns something that can be represented in an alternative way, don't :)
-			self::$_skipAlternatives = true;
-
-			# now check whether the variable can be represented in a different way
-			foreach ( self::$_customDataTypes as $parserClass ) {
-				$className = 'Kint_Parsers_' . $parserClass;
-
-				/** @var $object kintParser */
-				$object       = new $className;
-				$object->name = $name; # the parser may overwrite the name value, so set it first
-
-				if ( $object->_parse( $variable ) !== false ) {
-					$varData->alternatives[] = $object;
-				}
-			}
-
-
-			# combine extended values with alternative representations if applicable
-			if ( !empty( $varData->alternatives ) && isset( $varData->extendedValue ) ) {
-				$a = new kintVariableData;
-
-				$a->value = $varData->extendedValue;
-				$a->type  = $varData->type;
-				$a->size  = $varData->size;
-
-				array_unshift( $varData->alternatives, $a );
-				$varData->extendedValue = null;
-			}
-
-			self::$_skipAlternatives = false;
-		}
-
-		self::$_level   = $revert['level'];
-		self::$_objects = $revert['objects'];
-		return $varData;
-	}
-
-	private static function _checkDepth()
-	{
-		return Kint::$maxLevels != 0 && self::$_level > Kint::$maxLevels;
-	}
-
-	private static function _isArrayTabular( $variable )
-	{
-		foreach ( $variable as $row ) {
-			if ( is_array( $row ) && !empty( $row ) ) {
-				if ( isset( $keys ) ) {
-					if ( $keys === array_keys( $row ) ) { // two rows have same keys in a row? Close enough.
-						return true;
-					}
-				} else {
-
-					foreach ( $row as $col ) {
-						if ( !is_scalar( $col ) && $col !== null ) {
-							break 2;
-						}
-					}
-
-					$keys = array_keys( $row );
-				}
-			} else {
-				break;
-			}
-		}
-
-		return false;
-	}
-
-	private static $_dealingWithGlobals = false;
-
-	private static function _parse_array( &$variable, kintVariableData $variableData )
-	{
-		isset( self::$_marker ) or self::$_marker = "\x00" . uniqid();
-
-		# naturally, $GLOBALS variable is an intertwined recursion nightmare, use black magic
-		$globalsDetector = false;
-		if ( array_key_exists( 'GLOBALS', $variable ) && is_array( $variable['GLOBALS'] ) ) {
-			$globalsDetector = "\x01" . uniqid();
-
-			$variable['GLOBALS'][$globalsDetector] = true;
-			if ( isset( $variable[$globalsDetector] ) ) {
-				unset( $variable[$globalsDetector] );
-				self::$_dealingWithGlobals = true;
-			} else {
-				unset( $variable['GLOBALS'][$globalsDetector] );
-				$globalsDetector = false;
-			}
-		}
-
-		$variableData->type = 'array';
-		$variableData->size = count( $variable );
-
-		if ( $variableData->size === 0 ) {
-			return;
-		}
-		if ( isset( $variable[self::$_marker] ) ) { # recursion; todo mayhaps show from where
-			if ( self::$_dealingWithGlobals ) {
-				$variableData->value = '*RECURSION*';
-			} else {
-				unset( $variable[self::$_marker] );
-				$variableData->value = self::$_marker;
-			}
-			return false;
-		}
-		if ( self::_checkDepth() ) {
-			$variableData->extendedValue = "*DEPTH TOO GREAT*";
-			return false;
-		}
-
-		$isSequential = self::_isSequential( $variable );
-
-		$tabular = self::_isArrayTabular( $variable );
-		if ( $tabular ) {
-
-			$firstRow      = true;
-			$extendedValue = '<table class="kint-report">';
-			$arrayKeys     = array();
-
-
-			// assure no values are unreported if an extra key appears in one of the lines
-			foreach ( $variable as $row ) {
-				// todo process all keys in _isArrayTabular()
-				if ( !is_array( $row ) ) {
-					$tabular = false;
-					break;
-				}
-				$arrayKeys = array_unique( array_merge( $arrayKeys, array_keys( $row ) ) );
-
-				if ( Kint::$keyFilterCallback ) {
-					foreach ( $arrayKeys as $k => $key ) {
-						if ( call_user_func( Kint::$keyFilterCallback, $key ) === false ) {
-							unset( $arrayKeys[$k] );
-						}
-					}
-				}
-			}
-		}
-
-
-		if ( $tabular ) {
-			$variable[self::$_marker] = true;
-			foreach ( $variable as $rowIndex => &$row ) {
-				if ( $rowIndex === self::$_marker ) continue;
-
-				if ( isset( $row[self::$_marker] ) ) {
-					$variableData->value = "*RECURSION*";
-					return false;
-				}
-
-
-				$extendedValue .= '<tr>';
-				$output = '<td>' . ( $isSequential ? '#' . ( $rowIndex + 1 ) : $rowIndex ) . '</td>';
-				if ( $firstRow ) {
-					$extendedValue .= '<th></th>';
-				}
-
-				foreach ( $arrayKeys as $key ) {
-					if ( $firstRow ) {
-						$extendedValue .= '<th>' . htmlspecialchars( $key ) . '</th>';
-					}
-
-					if ( !array_key_exists( $key, $row ) ) {
-						$output .= '<td class="kint-empty"></td>';
-						continue;
-					}
-
-					# display strings in their full length so as not to trigger rich decoration
-					$maxStrLength       = kint::$maxStrLength;
-					kint::$maxStrLength = false;
-					$var                = kintParser::factory( $row[$key] );
-					kint::$maxStrLength = $maxStrLength;
-
-					if ( $var->value === self::$_marker ) {
-						$variableData->value = '*RECURSION*';
-						return false;
-					} elseif ( $var->value === '*RECURSION*' ) {
-						$output .= '<td class="kint-empty">' . Kint_Decorators_Concise::decorate( $var ) . '</td>';
-					} else {
-						$output .= '<td>' . Kint_Decorators_Concise::decorate( $var ) . '</td>';
-					}
-					unset( $var );
-				}
-
-				if ( $firstRow ) {
-					$extendedValue .= '</tr><tr>';
-					$firstRow = false;
-				}
-
-				$extendedValue .= $output . '</tr>';
-			}
-
-			$variableData->extendedValue = $extendedValue . '</table>';
-
-		} else {
-			$variable[self::$_marker] = true;
-			$extendedValue            = array();
-
-			foreach ( $variable as $key => & $val ) {
-				if ( $key === self::$_marker
-					|| ( Kint::$keyFilterCallback && call_user_func( Kint::$keyFilterCallback, $key, $val ) === false )
-				) {
-					continue;
-				}
-
-
-				$output = kintParser::factory( $val, $isSequential ? null : "'{$key}'" );
-				if ( $output->value === self::$_marker ) {
-					$variableData->value = "*RECURSION*"; // recursion occurred on a higher level, thus $this is recursion
-					return false;
-				}
-				if ( !$isSequential ) {
-					$output->operator = '=>';
-				}
-				$extendedValue[] = $output;
-			}
-			$variableData->extendedValue = $extendedValue;
-		}
-
-		if ( $globalsDetector ) {
-			self::$_dealingWithGlobals = false;
-		}
-
-		unset( $variable[self::$_marker] );
-	}
-
-
-	private static function _parse_object( &$variable, kintVariableData $variableData )
-	{
-
-		// copy the object as an array
-		$array = (array)$variable;
-		$hash  = spl_object_hash( $variable );
-
-
-		$variableData->type    = 'object';
-		$variableData->subtype = get_class( $variable );
-		$variableData->size    = count( $array );
-
-		if ( isset( self::$_objects[$hash] ) ) {
-			$variableData->value = '*RECURSION*';
-			return false;
-		}
-		if ( self::_checkDepth() ) {
-			$variableData->extendedValue = "*DEPTH TOO GREAT*";
-			return false;
-		}
-
-		self::$_objects[$hash] = true;
-
-
-		if ( empty( $array ) ) return;
-
-
-		$extendedValue = array();
-		foreach ( $array as $key => & $value ) {
-			if ( Kint::$keyFilterCallback
-				&& call_user_func_array( Kint::$keyFilterCallback, array( $key, $value ) ) === false
-			) {
-				continue;
-			}
-
-			/* casting object to array:
-			 * integer properties are inaccessible;
-			 * private variables have the class name prepended to the variable name;
-			 * protected variables have a '*' prepended to the variable name.
-			 * These prepended values have null bytes on either side.
-			 * http://www.php.net/manual/en/language.types.array.php#language.types.array.casting
-			 */
-			if ( $key[0] === "\x00" ) {
-
-				$access = $key[1] === "*" ? "protected" : "private";
-
-				// Remove the access level from the variable name
-				$key = substr( $key, strrpos( $key, "\x00" ) + 1 );
-			} else {
-				$access = "public";
-			}
-
-			$key              = self::_escape( $key );
-			$output           = kintParser::factory( $value, $key );
-			$output->access   = $access;
-			$output->operator = '->';
-			$extendedValue[]  = $output;
-		}
-
-		$variableData->extendedValue = $extendedValue;
-	}
-
-
-	private static function _parse_boolean( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type  = 'bool';
-		$variableData->value = $variable ? 'TRUE' : 'FALSE';
-	}
-
-	private static function _parse_double( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type  = 'float';
-		$variableData->value = $variable;
-	}
-
-	private static function _parse_integer( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type  = 'integer';
-		$variableData->value = $variable;
-	}
-
-	private static function _parse_null( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type = 'NULL';
-	}
-
-	private static function _parse_resource( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type    = 'resource';
-		$variableData->subtype = get_resource_type( $variable );
-
-		if ( $variableData->subtype === 'stream' && $meta = stream_get_meta_data( $variable ) ) {
-
-			if ( isset( $meta['uri'] ) ) {
-				$file = $meta['uri'];
-
-				if ( function_exists( 'stream_is_local' ) ) {
-					// Only exists on PHP >= 5.2.4
-					if ( stream_is_local( $file ) ) {
-						$file = Kint::shortenPath( $file );
-					}
-				}
-
-				$variableData->value = $file;
-			}
-		}
-	}
-
-	private static function _parse_string( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type = 'string';
-
-		$encoding = self::_detectEncoding( $variable );
-		if ( $encoding !== 'ASCII' ) {
-			$variableData->subtype = $encoding;
-		}
-
-		$variableData->size = self::_strlen( $variable, $encoding );
-		$strippedString     = self::_stripWhitespace( $variable );
-		if ( Kint::$maxStrLength && $variableData->size > Kint::$maxStrLength ) {
-
-			// encode and truncate
-			$variableData->value         = '&quot;'
-				. self::_escape( self::_substr( $strippedString, Kint::$maxStrLength, $encoding ), $encoding )
-				. '&nbsp;&hellip;&quot;';
-			$variableData->extendedValue = self::_escape( $variable, $encoding );
-
-		} elseif ( $variable !== $strippedString ) { // omit no data from display
-
-			$variableData->value         = '&quot;' . self::_escape( $variable, $encoding ) . '&quot;';
-			$variableData->extendedValue = self::_escape( $variable, $encoding );
-		} else {
-			$variableData->value = '&quot;' . self::_escape( $variable, $encoding ) . '&quot;';
-		}
-	}
-
-	private static function _parse_unknown( &$variable, kintVariableData $variableData )
-	{
-		$variableData->type    = "UNKNOWN";
-		$variableData->subtype = gettype( $variable );
-		$variableData->value   = var_export( $variable, true );
-	}
-
-}
-
-
-class kintVariableData
-{
-	/** @var string */
-	public $type;
-	/** @var string */
-	public $access;
-	/** @var string */
-	public $name;
-	/** @var string */
-	public $operator;
-	/** @var string */
-	public $subtype;
-	/** @var int */
-	public $size;
-	/**
-	 * @var kintVariableData[] array of kintVariableData objects or strings; displayed collapsed, each element from
-	 * the array is a separate possible representation of the dumped var
-	 */
-	public $extendedValue;
-	/** @var kintVariableData[] array of alternative representations for same variable */
-	public $alternatives;
-	/** @var string inline value */
-	public $value;
-
-
-	/* *******************************************
-	 * HELPERS
-	 */
-
-	protected static function _escape( $value, $encoding = null )
-	{
-		$encoding or $encoding = self::_detectEncoding( $value );
-
-		if ( $encoding === 'UTF-8' ) {
-			# when possible force invisible characters to have some sort of display
-			$value = preg_replace( '/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]/u', '�', $value );
-		}
-
-		$value = htmlspecialchars( $value, ENT_QUOTES );
-		if ( function_exists( 'mb_encode_numericentity' ) ) {
-			return mb_encode_numericentity(
-				$value,
-				array( 0x80, 0xffff, 0, 0xffff, ),
-				$encoding
-			);
-		} else {
-			return $value;
-		}
-	}
-
-	protected static function _detectEncoding( $value )
-	{
-		if ( function_exists( 'mb_detect_encoding' ) ) {
-			$mbDetected = mb_detect_encoding( $value );
-			if ( $mbDetected === 'ASCII' ) {
-				return 'ASCII';
-			}
-		}
-
-		if ( empty( Kint::$charEncodings ) || !function_exists( 'iconv' ) ) {
-			return !empty( $mbDetected ) ? $mbDetected : 'UTF-8';
-		}
-
-		$md5 = md5( $value );
-		foreach ( array_merge( array( 'UTF-8' ), Kint::$charEncodings ) as $encoding ) {
-			# fuck knows why, //IGNORE and //TRANSLIT still throw notice
-			if ( md5( @iconv( $encoding, $encoding, $value ) ) === $md5 ) {
-				return $encoding;
-			}
-		}
-
-		return 'ASCII';
-	}
-
-	/**
-	 * zaps all excess whitespace from string, compacts it but hurts readability
-	 *
-	 * @param string $string
-	 *
-	 * @return string
-	 */
-	protected static function _stripWhitespace( $string )
-	{
-		return preg_replace( '[\s+]', ' ', $string );
-	}
-
-
-	/**
-	 * returns whether the array:
-	 *  1) is numeric and
-	 *  2) in sequence starting from zero
-	 *
-	 * @param array $array
-	 *
-	 * @return bool
-	 */
-	protected static function _isSequential( array $array )
-	{
-		return Kint::$hideSequentialKeys
-			? array_keys( $array ) === range( 0, count( $array ) - 1 )
-			: false;
-	}
-
-	protected static function _strlen( $string, $encoding = null )
-	{
-		$encoding or $encoding = self::_detectEncoding( $string );
-
-		return function_exists( 'mb_strlen' )
-			? mb_strlen( $string, $encoding )
-			: strlen( $string );
-	}
-
-	protected static function _substr( $string, $end, $encoding = null )
-	{
-		$encoding or $encoding = self::_detectEncoding( $string );
-
-		return function_exists( 'mb_substr' )
-			? mb_substr( $string, 0, $end, $encoding )
-			: substr( $string, 0, $end );
-	}
-}
diff --git a/kint/kint-0.9/scripts/source.reg b/kint/kint-0.9/scripts/source.reg
deleted file mode 100644
index 6b32890..0000000
--- a/kint/kint-0.9/scripts/source.reg
+++ /dev/null
@@ -1,12 +0,0 @@
-REGEDIT4
-
-[HKEY_CLASSES_ROOT\source]
-@="URL:source Protocol"
-"URL Protocol"=""
-
-[HKEY_CLASSES_ROOT\source\shell]
-
-[HKEY_CLASSES_ROOT\source\shell\open]
-
-[HKEY_CLASSES_ROOT\source\shell\open\command]
-@="wscript.exe \"C:\\Program Files\\bin\\source.vbs\" \"%1\"" 
\ No newline at end of file
diff --git a/kint/kint-0.9/scripts/source.vbs b/kint/kint-0.9/scripts/source.vbs
deleted file mode 100644
index 56733b5..0000000
--- a/kint/kint-0.9/scripts/source.vbs
+++ /dev/null
@@ -1,80 +0,0 @@
-'INSTALLATION:
-'set editor link format to 'source:<filename>:<line>'
-'move this file to C:\Program Files\bin\source.vbs and run source.reg
-'customize directory mappings and editor command below
-
-'*****************
-'start of settings
-'*****************
-Dim command, protocol, change_slashes, debug
-Set dirmap = CreateObject("Scripting.Dictionary")
-
-'list of server paths (as regular expressions) 
-'and matching local paths (as regexp replace strings)
-'use this to replace the beginning of the path
-'if none of the regular expressions match, the script will show an error
-
-'local setup, when PHP and editor runs from the same machine
-dirmap.Add "^([C-Z]:\\)", "$1"
-
-'a typical remote Linux setup
-'dirmap.Add "^/var/www/", "C:\Projects\"
-'dirmap.Add "^/usr/share/php5/",  "C:\Projects\debug-source"
-
-'command to execute; %f is the file name, %l is the line number
-'dont forget to quote file names (quotes can be escaped by writing twice)
-command = """C:\Program Files\Notepad++\notepad++.exe"" -n%l ""%f"""
-
-'if true, forward slashes will be changed to backslashes in the filename
-'(after the regex replacements)
-change_slashes = True
-
-'protocol name used in the source edit links
-protocol = "source"
-
-'if true, alerts the command before executing it
-debug = False
-
-'***************
-'end of settings
-'***************
-
-Select Case WScript.Arguments.Count
-	Case 0
-		WScript.Echo "Wrong source link"
-		WScript.Quit
-End Select
-
-Dim link, split, file, line, found, strArgs
-
-link = Mid(WScript.Arguments.Item(0), Len(protocol) + 2)
-split = InStrRev(link, ":")
-file = Left(link, split - 1)
-line = Mid(link, split + 1)
-
-found = False
-For Each serverPath In dirmap
-	Set regexp = New RegExp
-	regexp.Pattern = serverPath
-	If regexp.Test(file) Then
-		found = True
-		Exit For
-	End If
-Next
-If Not found Then
-	WScript.Echo "don't know where to find " & file & " locally"
-	WScript.Quit
-End If
-file = regexp.Replace(file, dirmap.Item(serverPath))
-if change_slashes Then
-	file = Replace(file, "/", "\")
-End If
-
-strArgs = command
-strArgs = Replace(strArgs, "%l", line)
-strArgs = Replace(strArgs, "%f", file)
-If debug Then
-	WScript.Echo strArgs
-End If
-Set oShell = CreateObject ("Wscript.Shell") 
-oShell.Run strArgs, 0, false
\ No newline at end of file
diff --git a/kint/kint-0.9/view/inc/kint.js b/kint/kint-0.9/view/inc/kint.js
deleted file mode 100644
index 753740f..0000000
--- a/kint/kint-0.9/view/inc/kint.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function(){var e=!1;
-if("undefined"===typeof kintInitialized){kintInitialized=1;var f=[],g=-1,h=function(b,a){"undefined"===typeof a&&(a="kint-show");return RegExp("(\\s|^)"+a+"(\\s|$)").test(b.className)},k=function(b,a){"undefined"===typeof a&&(a="kint-show");j(b,a).className+=" "+a},j=function(b,a){"undefined"===typeof a&&(a="kint-show");b.className=b.className.replace(RegExp("(\\s|^)"+a+"(\\s|$)")," ");return b},l=function(b){do b=b.nextElementSibling;while("dd"!==b.nodeName.toLowerCase());return b},m=function(b,a){var c=
-l(b);"undefined"===typeof a&&(a=h(b));a?j(b):k(b);1===c.childNodes.length&&(c=c.childNodes[0].childNodes[0],h(c,"kint-parent")&&m(c,a))},n=function(b,a){var c=l(b).getElementsByClassName("kint-parent"),d=c.length;for("undefined"===typeof a&&(a=h(b));d--;)m(c[d],a);m(b,a)},p=function(b){var a=b,c=0;b.parentNode.getElementsByClassName("kint-active-tab")[0].className="";for(b.className="kint-active-tab";a=a.previousSibling;)1===a.nodeType&&c++;b=b.parentNode.nextSibling.childNodes;for(var d=0;d<b.length;d++)d===
-c?(b[d].style.display="block",1===b[d].childNodes.length&&(a=b[d].childNodes[0].childNodes[0],h(a,"kint-parent")&&m(a,e))):b[d].style.display="none"},q=function(b){for(;!(b=b.parentNode,!b||h(b,"kint")););return!!b},r=function(){f=[];Array.prototype.slice.call(document.querySelectorAll(".kint nav, .kint-tabs>li:not(.kint-active-tab)"),0).forEach(function(b){(0!==b.offsetWidth||0!==b.offsetHeight)&&f.push(b)})},s=function(b){var a=document.querySelector(".kint-focused");a&&j(a,"kint-focused");if(-1!==
-b){a=f[b];k(a,"kint-focused");var c=function(a){return a.offsetTop+(a.offsetParent?c(a.offsetParent):0)};window.scrollTo(0,c(a)-window.innerHeight/2)}g=b},t=function(b,a){b?0>--a&&(a=f.length-1):++a>=f.length&&(a=0);s(a);return e};window.addEventListener("click",function(b){var a=b.target,c=a.nodeName.toLowerCase();if(q(a)){if("dfn"===c){var d=a,u=window.getSelection(),v=document.createRange();v.selectNodeContents(d);u.removeAllRanges();u.addRange(v);a=a.parentNode}else"var"===c&&(a=a.parentNode,
-c=a.nodeName.toLowerCase());if("li"===c&&"kint-tabs"===a.parentNode.className)return"kint-active-tab"!==a.className&&(p(a),-1!==g&&r()),e;if("nav"===c)return setTimeout(function(){0<parseInt(a.a,10)?a.a--:(n(a.parentNode),-1!==g&&r())},300),b.stopPropagation(),e;if(h(a,"kint-parent"))return m(a),-1!==g&&r(),e;if(h(a,"kint-ide-link"))return b.preventDefault(),b=new XMLHttpRequest,b.open("GET",a.href),b.send(null),e}},e);window.addEventListener("dblclick",function(b){var a=b.target;if(q(a)&&"nav"===
-a.nodeName.toLowerCase()){a.a=2;for(var c=document.getElementsByClassName("kint-parent"),d=c.length,a=h(a.parentNode);d--;)m(c[d],a);-1!==g&&r();b.stopPropagation()}},e);window.onkeydown=function(b){if(!(b.target!==document.body||b.altKey)){var a=b.keyCode,c=b.shiftKey;b=g;if(68===a){if(-1===b)return r(),t(e,b);s(-1);return e}if(-1!==b){if(9===a)return t(c,b);if(38===a)return t(!0,b);if(40===a)return t(e,b);if(-1!==b){c=f[b];if("li"===c.nodeName.toLowerCase()){if(32===a||13===a)return p(c),r(),t(!0,
-b);if(39===a)return t(e,b);if(37===a)return t(!0,b)}c=c.parentNode;if(32===a||13===a)return m(c),r(),e;if(39===a||37===a){var d=h(c),a=37===a;if(d)n(c,a);else{if(a){do c=c.parentNode;while(c&&"dd"!==c.nodeName.toLowerCase());if(c){c=c.previousElementSibling;b=-1;for(d=c.querySelector("nav");d!==f[++b];);s(b)}else c=f[b].parentNode}m(c,a)}r();return e}}}}}};})()
diff --git a/kint/kint-0.9/view/inc/original.css b/kint/kint-0.9/view/inc/original.css
deleted file mode 100644
index af3a8b1..0000000
--- a/kint/kint-0.9/view/inc/original.css
+++ /dev/null
@@ -1 +0,0 @@
-.kint::selection{background:#0092db;color:#1d1e1e}.kint::-moz-selection{background:#0092db;color:#1d1e1e}.kint::-webkit-selection{background:#0092db;color:#1d1e1e}.kint{font-family:Consolas,"Courier New",monospace;color:#1d1e1e;padding:0;margin:10px 0;font-size:10pt;line-height:15px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;padding:0;margin:0}.kint dt{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;padding:4px}.kint dt:hover{border-color:#0092db}.kint>dl dl{padding:0 0 0 15px;border-left:1px dashed #b6cedb}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none}.kint dt.kint-parent.kint-show+dd{display:block}.kint var{color:#0092db;font-style:normal}.kint dt:hover var{color:#5cb730}.kint dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint pre{color:#1d1e1e;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block}.kint footer{padding:0 3px 3px;font-size:.7em}.kint a{color:#1d1e1e;text-shadow:none}.kint a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint ul{list-style:none;padding-left:12px}.kint ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint ul.kint-tabs li{background:#c1d4df;cursor:pointer;display:inline-block;height:23px;line-height:23px;margin:0 4px 4px;padding:0 10px 2px;border:1px solid #b6cedb}.kint ul.kint-tabs li:hover{border:1px solid #0092db}.kint ul.kint-tabs li:hover var{color:#5cb730}.kint ul.kint-tabs li.kint-active-tab{background:#e0eaef;border:1px solid #b6cedb;border-top:0;font-weight:bold;margin-top:-1px;padding-bottom:2px;padding-top:4px;border-right:1px solid #b6cedb}.kint ul.kint-tabs li+li{margin-left:0}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db}.kint dt:hover+dd>ul>li.kint-active-tab var{color:#5cb730}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;padding:0;margin:0;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#1d1e1e}.kint-report dt{padding:0;border:0;background:0}.kint-report dt.kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt.kint-parent.kint-show{border-bottom:1px solid #b6cedb}.kint-report td,.kint-report th{border:1px solid #b6cedb;vertical-align:top}.kint-report td{background:#e0eaef;white-space:pre}.kint-report td>dl{border:0;padding:0}.kint-report dl,.kint-report pre,.kint-report label{padding:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report label[for]:before{display:none}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-report tr:hover var{color:#5cb730}.kint-trace .kint-source{line-height:1.08em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #0092db}.kint-trace .kint-source .kint-highlight{background:#c1d4df}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}.kint-trace var{margin-right:5px}.kint-focused{box-shadow:0 0 3px 2px #5cb730}.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}.kint>dl>dt{background:-webkit-linear-gradient(top,#e3ecf0 0,#c0d4df 100%);background:linear-gradient(to bottom,#e3ecf0 0,#c0d4df 100%)}.kint ul.kint-tabs{background:-webkit-linear-gradient(top,#9dbed0 0,#b2ccda 100%);background:linear-gradient(to bottom,#9dbed0 0,#b2ccda 100%)}.kint:not(.kint-trace)>dl>dd>ul.kint-tabs li{background:#e0eaef}.kint:not(.kint-trace)>dl>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint.kint-trace>dl>dt{background:-webkit-linear-gradient(top,#c0d4df 0,#e3ecf0 100%);background:linear-gradient(to bottom,#c0d4df 0,#e3ecf0 100%)}.kint .kint-source .kint-highlight{background:#f0eb96}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/inc/solarized-dark.css b/kint/kint-0.9/view/inc/solarized-dark.css
deleted file mode 100644
index 58c2958..0000000
--- a/kint/kint-0.9/view/inc/solarized-dark.css
+++ /dev/null
@@ -1 +0,0 @@
-.kint::selection{background:#268bd2;color:#839496}.kint::-moz-selection{background:#268bd2;color:#839496}.kint::-webkit-selection{background:#268bd2;color:#839496}.kint{font-family:Consolas,"Courier New",monospace;color:#839496;padding:0;margin:10px 0;font-size:10pt;line-height:15px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;padding:0;margin:0}.kint dt{background:#002b36;border:1px solid #586e75;color:#839496;display:block;font-weight:bold;list-style:none outside none;padding:5px}.kint dt:hover{border-color:#268bd2}.kint>dl dl{padding:0 0 0 15px;border-left:1px dashed #586e75}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none}.kint dt.kint-parent.kint-show+dd{display:block}.kint var{color:#268bd2;font-style:normal}.kint dt:hover var{color:#2aa198}.kint dfn{font-style:normal;font-family:monospace;color:#93a1a1}.kint pre{color:#839496;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block}.kint footer{padding:0 3px 3px;font-size:.7em}.kint a{color:#839496;text-shadow:none}.kint a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}.kint ul{list-style:none;padding-left:15px}.kint ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}.kint ul.kint-tabs li{background:#073642;cursor:pointer;display:inline-block;height:24px;line-height:24px;margin:0 5px 5px;padding:0 12px 3px;border:1px solid #586e75}.kint ul.kint-tabs li:hover{border:1px solid #268bd2}.kint ul.kint-tabs li:hover var{color:#2aa198}.kint ul.kint-tabs li.kint-active-tab{background:#002b36;border:1px solid #586e75;border-top:0;font-weight:bold;margin-top:-1px;padding-bottom:3px;padding-top:4px;border-right:1px solid #586e75}.kint ul.kint-tabs li+li{margin-left:0}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2}.kint dt:hover+dd>ul>li.kint-active-tab var{color:#2aa198}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;padding:0;margin:0;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#839496}.kint-report dt{padding:0;border:0;background:0}.kint-report dt.kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt.kint-parent.kint-show{border-bottom:1px solid #586e75}.kint-report td,.kint-report th{border:1px solid #586e75;vertical-align:top}.kint-report td{background:#002b36;white-space:pre}.kint-report td>dl{border:0;padding:0}.kint-report dl,.kint-report pre,.kint-report label{padding:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report label[for]:before{display:none}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#073642;color:#93a1a1}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-report tr:hover var{color:#2aa198}.kint-trace .kint-source{line-height:1.1em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #268bd2}.kint-trace .kint-source .kint-highlight{background:#073642}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#93a1a1}.kint-trace var{margin-right:5px}.kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}body{background:#073642;color:#fff}.kint{background:#073642;box-shadow:0 0 5px 3px #073642}.kint>dl>dt,.kint ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/inc/solarized.css b/kint/kint-0.9/view/inc/solarized.css
deleted file mode 100644
index 1519cba..0000000
--- a/kint/kint-0.9/view/inc/solarized.css
+++ /dev/null
@@ -1 +0,0 @@
-.kint::selection{background:#268bd2;color:#657b83}.kint::-moz-selection{background:#268bd2;color:#657b83}.kint::-webkit-selection{background:#268bd2;color:#657b83}.kint{font-family:Consolas,"Courier New",monospace;color:#657b83;padding:0;margin:10px 0;font-size:10pt;line-height:15px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;padding:0;margin:0}.kint dt{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;padding:5px}.kint dt:hover{border-color:#268bd2}.kint>dl dl{padding:0 0 0 15px;border-left:1px dashed #93a1a1}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none}.kint dt.kint-parent.kint-show+dd{display:block}.kint var{color:#268bd2;font-style:normal}.kint dt:hover var{color:#2aa198}.kint dfn{font-style:normal;font-family:monospace;color:#586e75}.kint pre{color:#657b83;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block}.kint footer{padding:0 3px 3px;font-size:.7em}.kint a{color:#657b83;text-shadow:none}.kint a:hover{color:#586e75;border-bottom:1px dotted #586e75}.kint ul{list-style:none;padding-left:15px}.kint ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}.kint ul.kint-tabs li{background:#eee8d5;cursor:pointer;display:inline-block;height:24px;line-height:24px;margin:0 5px 5px;padding:0 12px 3px;border:1px solid #93a1a1}.kint ul.kint-tabs li:hover{border:1px solid #268bd2}.kint ul.kint-tabs li:hover var{color:#2aa198}.kint ul.kint-tabs li.kint-active-tab{background:#fdf6e3;border:1px solid #93a1a1;border-top:0;font-weight:bold;margin-top:-1px;padding-bottom:3px;padding-top:4px;border-right:1px solid #93a1a1}.kint ul.kint-tabs li+li{margin-left:0}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2}.kint dt:hover+dd>ul>li.kint-active-tab var{color:#2aa198}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;padding:0;margin:0;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#657b83}.kint-report dt{padding:0;border:0;background:0}.kint-report dt.kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt.kint-parent.kint-show{border-bottom:1px solid #93a1a1}.kint-report td,.kint-report th{border:1px solid #93a1a1;vertical-align:top}.kint-report td{background:#fdf6e3;white-space:pre}.kint-report td>dl{border:0;padding:0}.kint-report dl,.kint-report pre,.kint-report label{padding:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report label[for]:before{display:none}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#eee8d5;color:#586e75}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-report tr:hover var{color:#2aa198}.kint-trace .kint-source{line-height:1.1em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #268bd2}.kint-trace .kint-source .kint-highlight{background:#eee8d5}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#586e75}.kint-trace var{margin-right:5px}.kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}.kint>dl>dt,.kint ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/js/_kint.js b/kint/kint-0.9/view/js/_kint.js
deleted file mode 100644
index b272062..0000000
--- a/kint/kint-0.9/view/js/_kint.js
+++ /dev/null
@@ -1,344 +0,0 @@
-/**
-java -jar compiler.jar --js $FileName$ --js_output_file ../inc/kint.js --compilation_level ADVANCED_OPTIMIZATIONS --output_wrapper "(function(){%output%})()"
-*/
-
-if ( typeof kintInitialized === 'undefined' ) {
-	kintInitialized = 1;
-	var kint = {
-		visiblePluses : [], // all visible toggle carets
-		currentPlus   : -1, // currently selected caret
-
-		selectText : function( element ) {
-			var selection = window.getSelection(),
-				range = document.createRange();
-
-			range.selectNodeContents(element);
-			selection.removeAllRanges();
-			selection.addRange(range);
-		},
-
-		hasClass : function( target, className ) {
-			if ( typeof className === 'undefined' ) {
-				className = 'kint-show';
-			}
-
-			return new RegExp('(\\s|^)' + className + '(\\s|$)').test(target.className);
-		},
-
-		addClass : function( ele, className ) {
-			if ( typeof className === 'undefined' ) {
-				className = 'kint-show';
-			}
-
-			kint.removeClass(ele, className).className += (" " + className);
-		},
-
-		removeClass : function( ele, className ) {
-			if ( typeof className === 'undefined' ) {
-				className = 'kint-show';
-			}
-
-			ele.className = ele.className.replace(
-				new RegExp('(\\s|^)' + className + '(\\s|$)'), ' '
-			);
-			return ele;
-		},
-
-		next : function( element ) {
-			do {
-				element = element.nextElementSibling;
-			} while ( element.nodeName.toLowerCase() !== 'dd' );
-
-			return element;
-		},
-
-		toggle : function( element, hide ) {
-			var parent = kint.next(element);
-
-			if ( typeof hide === 'undefined' ) {
-				hide = kint.hasClass(element);
-			}
-
-			if ( hide ) {
-				kint.removeClass(element);
-			} else {
-				kint.addClass(element);
-			}
-
-			if ( parent.childNodes.length === 1 ) {
-				parent = parent.childNodes[0].childNodes[0]; // reuse variable cause I can
-
-				if ( kint.hasClass(parent, 'kint-parent') ) {
-					kint.toggle(parent, hide)
-				}
-			}
-		},
-
-		toggleChildren : function( element, hide ) {
-			var parent = kint.next(element)
-				, nodes = parent.getElementsByClassName('kint-parent')
-				, i = nodes.length;
-
-			if ( typeof hide === 'undefined' ) {
-				hide = kint.hasClass(element);
-			}
-
-			while ( i-- ) {
-				kint.toggle(nodes[i], hide);
-			}
-			kint.toggle(element, hide);
-		},
-
-		toggleAll : function( caret ) {
-			var elements = document.getElementsByClassName('kint-parent'),
-				i = elements.length,
-				visible = kint.hasClass(caret.parentNode);
-
-			while ( i-- ) {
-				kint.toggle(elements[i], visible);
-			}
-		},
-
-		switchTab : function( target ) {
-			var lis, el = target, index = 0;
-
-			target.parentNode.getElementsByClassName('kint-active-tab')[0].className = '';
-			target.className = 'kint-active-tab';
-
-			// take the index of clicked title tab and make the same n-th content tab visible
-			while ( el = el.previousSibling ) el.nodeType === 1 && index++;
-			lis = target.parentNode.nextSibling.childNodes;
-			for ( var i = 0; i < lis.length; i++ ) {
-				if ( i === index ) {
-					lis[i].style.display = 'block';
-
-					if ( lis[i].childNodes.length === 1 ) {
-						el = lis[i].childNodes[0].childNodes[0];
-
-						if ( kint.hasClass(el, 'kint-parent') ) {
-							kint.toggle(el, false)
-						}
-					}
-				} else {
-					lis[i].style.display = 'none';
-				}
-			}
-		},
-
-		isSibling : function( el ) {
-			for ( ; ; ) {
-				el = el.parentNode;
-				if ( !el || kint.hasClass(el, 'kint') ) {
-					break;
-				}
-			}
-
-			return !!el;
-		},
-
-		fetchVisiblePluses : function() {
-			kint.visiblePluses = [];
-			Array.prototype.slice.call(document.querySelectorAll('.kint nav, .kint-tabs>li:not(.kint-active-tab)'), 0)
-				.forEach(
-				function( el ) {
-					if ( el.offsetWidth !== 0 || el.offsetHeight !== 0 ) {
-						kint.visiblePluses.push(el)
-					}
-				}
-			);
-		},
-
-		keyCallBacks : {
-			cleanup : function( i ) {
-				var focusedClass = 'kint-focused';
-				var prevElement = document.querySelector('.' + focusedClass);
-				prevElement && kint.removeClass(prevElement, focusedClass);
-
-				if ( i !== -1 ) {
-					var el = kint.visiblePluses[i];
-					kint.addClass(el, focusedClass);
-
-
-					var offsetTop = function( el ) {
-						return el.offsetTop + ( el.offsetParent ? offsetTop(el.offsetParent) : 0 );
-					};
-
-					var top = offsetTop(el) - (window.innerHeight / 2 );
-					window.scrollTo(0, top);
-				}
-
-				kint.currentPlus = i;
-			},
-
-			moveCursor : function( up, i ) {
-				// todo make the first VISIBLE plus active
-				if ( up ) {
-					if ( --i < 0 ) {
-						i = kint.visiblePluses.length - 1;
-					}
-				} else {
-					if ( ++i >= kint.visiblePluses.length ) {
-						i = 0;
-					}
-				}
-
-				kint.keyCallBacks.cleanup(i);
-				return false;
-			}
-		}
-	};
-
-	window.addEventListener("click", function( e ) {
-		var target = e.target
-			, nodeName = target.nodeName.toLowerCase();
-
-		if ( !kint.isSibling(target) ) return;
-
-		// auto-select name of variable
-		if ( nodeName === 'dfn' ) {
-			kint.selectText(target);
-			target = target.parentNode;
-		} else if ( nodeName === 'var' ) { // stupid workaround for misc elements
-			target = target.parentNode;    // to not stop event from further propagating
-			nodeName = target.nodeName.toLowerCase()
-		}
-
-		// switch tabs
-		if ( nodeName === 'li' && target.parentNode.className === 'kint-tabs' ) {
-			if ( target.className !== 'kint-active-tab' ) {
-				kint.switchTab(target);
-				if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
-			}
-			return false;
-		}
-
-		// handle clicks on the navigation caret
-		if ( nodeName === 'nav' ) {
-			// ensure doubleclick has different behaviour, see below
-			setTimeout(function() {
-				var timer = parseInt(target.kintTimer, 10);
-				if ( timer > 0 ) {
-					target.kintTimer--;
-				} else {
-					kint.toggleChildren(target.parentNode); // <dt>
-					if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
-				}
-			}, 300);
-			e.stopPropagation();
-			return false;
-		} else if ( kint.hasClass(target, 'kint-parent') ) {
-			kint.toggle(target);
-			if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
-			return false;
-		} else if ( kint.hasClass(target, 'kint-ide-link') ) {
-			e.preventDefault();
-			var ajax = new XMLHttpRequest(); // add ajax call to contact editor but prevent link default action
-			ajax.open('GET', target.href);
-			ajax.send(null);
-			return false;
-		}
-	}, false);
-
-	window.addEventListener("dblclick", function( e ) {
-		var target = e.target;
-		if ( !kint.isSibling(target) ) return;
-
-
-		if ( target.nodeName.toLowerCase() === 'nav' ) {
-			target.kintTimer = 2;
-			kint.toggleAll(target);
-			if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
-			e.stopPropagation();
-		}
-	}, false);
-
-	// keyboard navigation
-	window.onkeydown = function( e ) {
-
-		// do nothing if alt key is pressed or if we're actually typing somewhere
-		if ( e.target !== document.body || e.altKey ) return;
-
-		var keyCode = e.keyCode
-			, shiftKey = e.shiftKey
-			, i = kint.currentPlus;
-
-
-		if ( keyCode === 68 ) { // 'd' : toggles navigation on/off
-			if ( i === -1 ) {
-				kint.fetchVisiblePluses();
-				return kint.keyCallBacks.moveCursor(false, i);
-			} else {
-				kint.keyCallBacks.cleanup(-1);
-				return false;
-			}
-		} else {
-			if ( i === -1 ) return;
-
-			if ( keyCode === 9 ) { // TAB : moves up/down depending on shift key
-				return kint.keyCallBacks.moveCursor(shiftKey, i);
-			} else if ( keyCode === 38 ) { // ARROW UP : moves up
-				return kint.keyCallBacks.moveCursor(true, i);
-			} else if ( keyCode === 40 ) { // ARROW DOWN : down
-				return kint.keyCallBacks.moveCursor(false, i);
-			} else {
-				if ( i === -1 ) {
-					return;
-				}
-			}
-		}
-
-
-		var kintNode = kint.visiblePluses[i];
-		if ( kintNode.nodeName.toLowerCase() === 'li' ) { // we're on a trace tab
-			if ( keyCode === 32 || keyCode === 13 ) { // SPACE/ENTER
-				kint.switchTab(kintNode);
-				kint.fetchVisiblePluses();
-				return kint.keyCallBacks.moveCursor(true, i);
-			} else if ( keyCode === 39 ) { // arrows
-				return kint.keyCallBacks.moveCursor(false, i);
-			} else if ( keyCode === 37 ) {
-				return kint.keyCallBacks.moveCursor(true, i);
-			}
-		}
-
-		kintNode = kintNode.parentNode; // simple dump
-		if ( keyCode === 32 || keyCode === 13 ) { // SPACE/ENTER : toggles
-			kint.toggle(kintNode);
-			kint.fetchVisiblePluses();
-			return false;
-		} else if ( keyCode === 39 || keyCode === 37 ) { // ARROW LEFT/RIGHT : respectively hides/shows and traverses
-			var visible = kint.hasClass(kintNode);
-			var hide = keyCode === 37;
-
-			if ( visible ) {
-				kint.toggleChildren(kintNode, hide); // expand/collapse all children if immediate ones are showing
-			} else {
-				if ( hide ) { // LEFT
-					// traverse to parent and THEN hide
-					do {kintNode = kintNode.parentNode} while ( kintNode && kintNode.nodeName.toLowerCase() !== 'dd' );
-
-					if ( kintNode ) {
-						kintNode = kintNode.previousElementSibling;
-
-						i = -1;
-						var parentPlus = kintNode.querySelector('nav');
-						while ( parentPlus !== kint.visiblePluses[++i] ) {}
-						kint.keyCallBacks.cleanup(i)
-					} else { // we are at root
-						kintNode = kint.visiblePluses[i].parentNode;
-					}
-				}
-				kint.toggle(kintNode, hide);
-			}
-			kint.fetchVisiblePluses();
-			return false;
-		}
-	};
-}
-
-// debug purposes only, removed in minified source
-function clg( i ) {
-	if ( !window.console )return;
-	var l = arguments.length, o = 0;
-	while ( o < l )console.log(arguments[o++])
-}
diff --git a/kint/kint-0.9/view/less/_kint.less b/kint/kint-0.9/view/less/_kint.less
deleted file mode 100644
index 7fed5d0..0000000
--- a/kint/kint-0.9/view/less/_kint.less
+++ /dev/null
@@ -1,340 +0,0 @@
-@border: 1px solid @border-color;
-
-.selection() {
-  background : @border-color-hover;
-  color      : @text-color;
-}
-
-//
-// BASE STYLES
-// --------------------------------------------------
-
-.kint::selection { .selection() }
-
-.kint::-moz-selection { .selection() }
-
-.kint::-webkit-selection { .selection() }
-
-.kint {
-  font-family : @default-font;
-  color       : @text-color;
-  padding     : 0;
-  margin      : 10px 0;
-  font-size   : 10pt;
-  line-height : 15px;
-  white-space : nowrap;
-  overflow-x  : auto;
-  text-align  : left;
-
-  * {
-    float   : none !important;
-    padding : 0;
-    margin  : 0;
-  }
-
-  dt {
-    background  : @main-background;
-    border      : @border;
-    color       : @text-color;
-    display     : block;
-    font-weight : bold;
-    list-style  : none outside none;
-    padding     : @spacing * 1px;
-
-    &:hover {
-      border-color : @border-color-hover;
-    }
-  }
-
-  > dl dl {
-    padding     : 0 0 0 15px;
-    border-left : 1px dashed @border-color;
-  }
-
-//
-// DROPDOWN CARET
-// --------------------------------------------------
-
-  nav {
-    display        : inline-block;
-    height         : 15px;
-    width          : 15px;
-    margin-right   : 3px;
-    vertical-align : middle;
-    content        : ' ';
-    cursor         : pointer;
-    background     : @caret-image no-repeat scroll 0 0 transparent;
-  }
-
-  dt.kint-parent:hover nav {
-    background-position : 0 -15px;
-  }
-
-  dt.kint-parent.kint-show:hover > nav {
-    background-position : 0 -45px;
-  }
-
-  dt.kint-show > nav {
-    background-position : 0 -30px;
-  }
-
-  dt.kint-parent + dd {
-    display : none;
-  }
-
-  dt.kint-parent.kint-show + dd {
-    display : block;
-  }
-
-//
-// INDIVIDUAL ITEMS
-// --------------------------------------------------
-
-  var {
-    color      : @variable-type-color;
-    font-style : normal;
-  }
-
-  dt:hover var {
-    color : @variable-type-color-hover;
-  }
-
-  dfn {
-    font-style  : normal;
-    font-family : monospace;
-    color       : @variable-name-color;
-  }
-
-  pre {
-    color      : @text-color;
-    margin     : 0 0 0 15px;
-    padding    : 5px;
-    overflow-y : hidden;
-    border-top : 0;
-    border     : @border;
-    background : @main-background;
-    display    : block;
-  }
-
-  footer {
-    padding   : 0 3px 3px;
-    font-size : .7em
-  }
-
-  a {
-    color       : @text-color;
-    text-shadow : none;
-
-    &:hover {
-      color         : @variable-name-color;
-      border-bottom : 1px dotted @variable-name-color;
-    }
-  }
-
-//
-// TABS
-// --------------------------------------------------
-
-  ul {
-    list-style   : none;
-    padding-left : @spacing * 3px;
-  }
-
-  ul.kint-tabs {
-    margin       : 0 0 0 @spacing * 3px;
-    padding-left : 0;
-    background   : @main-background;
-    border       : @border;
-    border-top   : 0;
-
-    li {
-      background  : @secondary-background;
-      cursor      : pointer;
-      display     : inline-block;
-      height      : 16px + ceil(8px * (@spacing / 5));
-      line-height : 16px + ceil(8px * (@spacing / 5));
-      margin      : 0 @spacing * 1px @spacing * 1px;
-      padding     : 0 2px + @spacing * 2px floor(3px * (@spacing / 5));
-      border      : @border;
-
-      &:hover {
-        border : 1px solid @border-color-hover;
-      }
-
-      &:hover var {
-        color : @variable-type-color-hover;
-      }
-
-      &.kint-active-tab {
-        background     : @main-background;
-        border         : @border;
-        border-top     : 0;
-        font-weight    : bold;
-        margin-top     : -1px;
-        padding-bottom : floor(3px * (@spacing / 5));
-        padding-top    : 1px + ceil(3px * (@spacing / 5));
-        border-right   : @border;
-      }
-    }
-
-    li+li {
-      margin-left : 0
-    }
-  }
-
-  dt:hover + dd > ul > li.kint-active-tab {
-    border-color : @border-color-hover;
-  }
-
-  dt:hover + dd > ul > li.kint-active-tab var {
-    color : @variable-type-color-hover;
-  }
-
-  ul:not(.kint-tabs)>li:not(:first-child) {
-    display : none;
-  }
-}
-
-//
-// REPORT
-// --------------------------------------------------
-
-.kint-report {
-  border-collapse : collapse;
-  empty-cells     : show;
-  border-spacing  : 0;
-
-  * {
-    text-align  : left;
-    padding     : 0;
-    margin      : 0;
-    font-size   : 9pt;
-    overflow    : hidden;
-    font-family : @default-font;
-    color       : @text-color;
-  }
-
-  dt {
-    padding : 0;
-    border  : 0;
-    background: none;
-  }
-
-  dt.kint-parent {
-    max-width     : 180px;
-    min-width     : 100%;
-    overflow      : hidden;
-    text-overflow : ellipsis;
-    white-space   : nowrap;
-  }
-
-  dt.kint-parent.kint-show {
-    border-bottom: @border;
-  }
-
-  td,
-  th {
-    border         : @border;
-    vertical-align : top;
-  }
-
-  td {
-    background  : @main-background;
-    white-space : pre;
-  }
-
-  td > dl {
-    border  : 0;
-    padding : 0;
-  }
-
-  dl,
-  pre,
-  label {
-    padding : 0;
-  }
-
-  pre {
-    border-top    : 0;
-    border-bottom : 0;
-    border-right  : 0;
-  }
-
-  label[for]:before {
-    display : none;
-  }
-
-  th:first-child {
-    background : 0;
-    border     : 0;
-  }
-
-  td:first-child,
-  th {
-    font-weight : bold;
-    background  : @secondary-background;
-    color       : @variable-name-color;
-  }
-
-  td.kint-empty {
-    background : #d33682 !important;
-  }
-
-  tr:hover {
-    > td {
-      box-shadow : 0px 0px 1px 0px @border-color-hover inset;
-    }
-
-    var {
-      color: @variable-type-color-hover;
-    }
-
-  }
-}
-
-//
-// TRACE
-// --------------------------------------------------
-.kint-trace {
-  .kint-source {
-    line-height : 1em + 0.02 * @spacing
-  }
-
-  .kint-source span {
-    padding-right : 1px;
-    border-right  : 3px inset @variable-type-color;
-  }
-
-  .kint-source .kint-highlight {
-    background : @secondary-background;
-  }
-
-  .kint-parent > b {
-    min-width  : 18px;
-    display    : inline-block;
-    text-align : right;
-    color      : @variable-name-color;
-  }
-
-  var {
-    margin-right : 5px;
-  }
-}
-
-//
-// MISC
-// --------------------------------------------------
-
-// keyboard navigation caret
-.kint-focused {
-  .keyboard-caret
-}
-
-.kint-color-preview {
-  box-shadow  : 0 0 2px 0 #b6cedb;
-  height      : 16px;
-  text-align  : center;
-  text-shadow : -1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;
-  width       : 230px;
-  color       : #fdf6e3;
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/less/original.less b/kint/kint-0.9/view/less/original.less
deleted file mode 100644
index 9da7ba9..0000000
--- a/kint/kint-0.9/view/less/original.less
+++ /dev/null
@@ -1,49 +0,0 @@
-@import "_kint.less";
-
-@default-font: Consolas, "Courier New", monospace;
-@spacing : 4;
-
-@main-background: #e0eaef;
-@secondary-background : #c1d4df;
-
-@text-color: #1d1e1e;
-@variable-name-color: #1d1e1e;
-@variable-type-color: #0092db;
-@variable-type-color-hover: #5cb730;
-
-@border-color: #b6cedb;
-@border-color-hover: #0092db;
-
-@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC");
-
-.keyboard-caret() {
-  box-shadow : 0 0 3px 2px #5cb730;
-}
-
-.kint {
-  > dl > dt {
-    background : -webkit-linear-gradient(top, #e3ecf0 0, #c0d4df 100%);
-    background : linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%);
-  }
-
-  ul.kint-tabs {
-    background : -webkit-linear-gradient(top, #9dbed0 0px, #b2ccda 100%);
-    background : linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%);
-  }
-
-  &:not(.kint-trace) > dl > dd > ul.kint-tabs li {
-    background : @main-background;
-    &.kint-active-tab {
-      background : @secondary-background;
-    }
-  }
-
-  &.kint-trace > dl > dt {
-    background : -webkit-linear-gradient(top, #c0d4df 0px, #e3ecf0 100%);
-    background : linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%);
-  }
-
-  .kint-source .kint-highlight {
-    background : #f0eb96;
-  }
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/less/solarized-dark.less b/kint/kint-0.9/view/less/solarized-dark.less
deleted file mode 100644
index 0d1dc23..0000000
--- a/kint/kint-0.9/view/less/solarized-dark.less
+++ /dev/null
@@ -1,37 +0,0 @@
-@import "_kint.less";
-
-@default-font: Consolas, "Courier New", monospace;
-@spacing : 5;
-
-@main-background: #002b36; // base 03
-@secondary-background : #073642; // base 02
-
-@text-color: #839496; // base 0
-@variable-name-color: #93a1a1; // base 1
-@variable-type-color: #268bd2; // blue
-@variable-type-color-hover: #2aa198; // cyan
-
-@border-color: #586e75; // base 01
-@border-color-hover: #268bd2; // blue
-
-@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==");
-
-.keyboard-caret() {
-  box-shadow    : 0 0 3px 2px #859900 inset; // green
-  border-radius : 7px;
-}
-
-body {
-  background : @secondary-background;
-  color      : #fff; // for non-kint elements to remain at least semi-readable
-}
-
-.kint {
-  background : @secondary-background;
-  box-shadow : 0 0 5px 3px @secondary-background;
-
-  > dl > dt,
-  ul.kint-tabs {
-    box-shadow : 4px 0 2px -3px @variable-type-color inset;
-  }
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/less/solarized.less b/kint/kint-0.9/view/less/solarized.less
deleted file mode 100644
index 9a76181..0000000
--- a/kint/kint-0.9/view/less/solarized.less
+++ /dev/null
@@ -1,27 +0,0 @@
-@import "_kint.less";
-
-@default-font: Consolas, "Courier New", monospace;
-@spacing : 5;
-
-@main-background: #fdf6e3; // base 3
-@secondary-background : #eee8d5; // base 2
-
-@text-color: #657b83; // base 00
-@variable-name-color: #586e75; // base 01
-@variable-type-color: #268bd2; // blue
-@variable-type-color-hover: #2aa198; // cyan
-
-@border-color: #93a1a1; // base 1
-@border-color-hover: #268bd2; // blue
-
-@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==");
-
-.keyboard-caret() {
-  box-shadow    : 0 0 3px 2px #859900 inset; // green
-  border-radius : 7px;
-}
-
-.kint > dl > dt,
-.kint ul.kint-tabs {
-  box-shadow : 4px 0 2px -3px @variable-type-color inset;
-}
\ No newline at end of file
diff --git a/kint/kint-0.9/view/trace.phtml b/kint/kint-0.9/view/trace.phtml
deleted file mode 100644
index 3641862..0000000
--- a/kint/kint-0.9/view/trace.phtml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-$settings                = array(
-	'enabled'           => Kint::$enabled,
-	'displayCalledFrom' => Kint::$displayCalledFrom,
-);
-Kint::$enabled           = true;
-Kint::$displayCalledFrom = false;
-
-echo '<div class="kint kint-trace"><dl>';
-
-foreach ( $output as $i => $step ) {
-	echo '<dt class="kint-parent">'
-		. '<b>' . ( $i + 1 ) . '</b> '
-		. '<nav></nav>'
-		. '<var>';
-
-	if ( isset( $step['file'] ) ) {
-		echo Kint::shortenPath( $step['file'], $step['line'] );
-	} else {
-		echo 'PHP internal call';
-	}
-
-	echo '</var>';
-
-	echo $step['function'];
-
-	if ( isset( $step['args'] ) ) {
-		echo '(' . implode( ', ', array_keys( $step['args'] ) ) . ')';
-	}
-	echo '</dt><dd>';
-	$firstTab = ' class="kint-active-tab"';
-	echo '<ul class="kint-tabs">';
-
-	if ( !empty( $step['source'] ) ) {
-		echo "<li{$firstTab}>Source</li>";
-		$firstTab = '';
-	}
-
-	if ( !empty( $step['args'] ) ) {
-		echo "<li{$firstTab}>Arguments</li>";
-		$firstTab = '';
-	}
-
-	if ( !empty( $step['object'] ) ) {
-		kintParser::reset();
-		$calleDump = kintParser::factory( $step['object'] );
-
-		echo "<li{$firstTab}>Callee object [{$calleDump->subtype}]</li>";
-		$firstTab = '';
-	}
-
-
-	echo '</ul><ul>';
-
-
-	if ( !empty( $step['source'] ) ) {
-		echo "<li><pre class=\"kint-source\">{$step['source']}</pre></li>";
-	}
-
-	if ( !empty( $step['args'] ) ) {
-		echo "<li>";
-		foreach ( $step['args'] as $k => $arg ) {
-			kintParser::reset();
-			echo Kint_Decorators_Rich::decorate( kintParser::factory( $arg, $k ) );
-		}
-		echo "</li>";
-	}
-	if ( !empty( $step['object'] ) ) {
-		echo "<li>" . Kint_Decorators_Rich::decorate( $calleDump ) . "</li>";
-	}
-
-	echo '</ul></dd>';
-}
-echo '</dl></div>';
-Kint::$enabled           = $settings['enabled'];
-Kint::$displayCalledFrom = $settings['displayCalledFrom'];
-unset( $settings );
diff --git a/kint/kint.info.yml b/kint/kint.info.yml
index d6df8b2..2553238 100644
--- a/kint/kint.info.yml
+++ b/kint/kint.info.yml
@@ -1,6 +1,6 @@
+name: 'Devel Kint'
 type: module
-name: Kint
-description: 'Debug wrapper functions'
+description: 'Wrapper for Kint debugging tool'
 package: Development
 core: 8.x
 tags:
diff --git a/kint/kint.module b/kint/kint.module
index ffb1fb3..4a2d353 100644
--- a/kint/kint.module
+++ b/kint/kint.module
@@ -1,13 +1,13 @@
 <?php
 
 /**
- * Alias of Kint::dump(). Prints data using Kint debug tool.
+ * Alias of Kint::dump().
  *
- * Pass as many arguments as you wish.
+ * Prints passed argument(s) using Kint debug tool.
  */
 function kint() {
   kint_require();
-  if (Kint::enabled() && \Drupal::currentUser()->hasPermission('access kint')) {
+  if (\Drupal::currentUser()->hasPermission('access kint')) {
     $args = func_get_args();
     call_user_func_array(drupal_is_cli() ? 's' : array('Kint', 'dump'), $args);
   }
@@ -15,25 +15,35 @@ function kint() {
 
 /**
  * Alias of Kint::trace().
- * Print backtrace in Kint debug tool.
+ *
+ * Prints backtrace in Kint debug tool.
  */
 function kint_trace() {
   kint_require();
-  if (Kint::enabled() && \Drupal::currentUser()->hasPermission('access kint')) {
+  if (\Drupal::currentUser()->hasPermission('access kint')) {
     call_user_func_array(array('Kint', 'trace'), array());
   }
 }
 
+/**
+ * Alias of Kint::kintLite().
+ *
+ * Prints with lightweight formatting, using whitespace for formatting instead
+ * of HTML.
+ */
 function kint_lite() {
-  if (Kint::enabled() && \Drupal::currentUser()->hasPermission('access kint')) {
+  if (\Drupal::currentUser()->hasPermission('access kint')) {
     $args = func_get_args();
     call_user_func_array('kintLite', $args);
   }
 }
 
+/**
+ * Prints passed argument(s) to the 'message' area of the page.
+ */
 function ksm() {
   kint_require();
-  if (Kint::enabled() && \Drupal::currentUser()->hasPermission('access kint')) {
+  if (\Drupal::currentUser()->hasPermission('access kint')) {
     $args = func_get_args();
     $msg = @Kint::dump($args);
     drupal_set_message($msg);
@@ -53,11 +63,9 @@ function kint_permission() {
   );
 }
 
+/**
+ * Load the Kint class.
+ */
 function kint_require() {
-  require_once drupal_get_path('module', 'kint') . '/kint-0.9/Kint.class.php';
+  require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'kint') . '/kint/Kint.class.php';
 }
-
-
-
-
-
diff --git a/kint/kint/.gitignore b/kint/kint/.gitignore
new file mode 100644
index 0000000..21a6284
--- /dev/null
+++ b/kint/kint/.gitignore
@@ -0,0 +1,3 @@
+
+/config.php
+/.idea
\ No newline at end of file
diff --git a/kint/kint/Kint.class.php b/kint/kint/Kint.class.php
new file mode 100644
index 0000000..9827db2
--- /dev/null
+++ b/kint/kint/Kint.class.php
@@ -0,0 +1,855 @@
+<?php
+/**
+ * Kint is a zero-setup debugging tool to output information about variables and stack traces prettily and comfortably.
+ *
+ * https://github.com/raveren/kint
+ */
+define( 'KINT_DIR', dirname( __FILE__ ) . '/' );
+
+require KINT_DIR . 'config.default.php';
+require KINT_DIR . 'parsers/parser.class.php';
+require KINT_DIR . 'decorators/cli.php';
+require KINT_DIR . 'decorators/rich.php';
+require KINT_DIR . 'decorators/plain.php';
+require KINT_DIR . 'decorators/whitespace.php';
+require KINT_DIR . 'decorators/concise.php';
+
+if ( is_readable( KINT_DIR . 'config.php' ) ) {
+	require KINT_DIR . 'config.php';
+}
+
+# init settings
+if ( !empty( $GLOBALS['_kint_settings'] ) ) {
+	foreach ( $GLOBALS['_kint_settings'] as $key => $val ) {
+		property_exists( 'Kint', $key ) and Kint::$$key = $val;
+	}
+
+	unset( $GLOBALS['_kint_settings'] );
+}
+
+if ( PHP_SAPI === 'cli' ) {
+	Kint::$_detected = 'cli';
+} elseif ( Kint::$ajaxDetection && isset( $_SERVER['HTTP_X_REQUESTED_WITH'] )
+	&& strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) === 'xmlhttprequest'
+) {
+	Kint::$_detected = 'ajax';
+}
+
+if ( Kint::$ajaxDetection && Kint::$_detected !== 'ajax' && Kint::$_detected !== 'cli' ) {
+	register_shutdown_function( 'Kint::_ajaxHandler' );
+}
+
+class Kint
+{
+	// these are all public and 1:1 config array keys so you can switch them easily
+	public static $traceCleanupCallback;
+	public static $fileLinkFormat;
+	public static $hideSequentialKeys;
+	public static $showClassConstants;
+	public static $keyFilterCallback;
+	public static $displayCalledFrom;
+	public static $charEncodings;
+	public static $maxStrLength;
+	public static $appRootDirs;
+	public static $maxLevels;
+	public static $enabled;
+	public static $theme;
+	public static $expandedByDefault;
+
+	public static $cliDetection;
+	public static $cliColors;
+	public static $ajaxDetection;
+
+	private static $_isAjax;
+	public static $_detected;
+
+	/** @var  string cli|plain|whitespace|rich */
+	public static $mode = 'rich';
+
+	public static $aliases = array(
+		'methods'   => array(
+			array( 'kint', 'dump' ),
+			array( 'kint', 'trace' ),
+		),
+		'functions' => array(
+			'd',
+			'dd',
+			's',
+			'sd',
+		)
+	);
+
+	protected static $_firstRun = true;
+	protected static $_headerNo = 0;
+
+	# non-standard function calls
+	protected static $_statements = array( 'include', 'include_once', 'require', 'require_once' );
+
+	/**
+	 * getter/setter for the enabled parameter, called at the beginning of every public function as getter, also
+	 * initializes the settings if te first time it's run.
+	 *
+	 * @param null $value
+	 *
+	 * @return void|bool
+	 */
+	public static function enabled( $value = null )
+	{
+		# act both as a setter...
+		if ( func_num_args() > 0 ) {
+			self::$enabled = $value;
+			return;
+		}
+
+		# ...and a getter
+		return self::$enabled;
+	}
+
+	/**
+	 * Prints a debug backtrace, same as `Kint::dump(1)`
+	 *
+	 * @param array $trace [OPTIONAL] you can pass your own trace, otherwise, `debug_backtrace` will be called
+	 *
+	 * @return void
+	 */
+	public static function trace( $trace = null )
+	{
+		if ( !Kint::enabled() ) return;
+
+		return self::dump( isset( $trace ) ? $trace : debug_backtrace( true ) );
+	}
+
+
+	/**
+	 * Dump information about variables, accepts any number of parameters, supports modifiers:
+	 *
+	 *  clean up any output before kint and place the dump at the top of page:
+	 *   - Kint::dump()
+	 *  *****
+	 *  expand all nodes on display:
+	 *   ! Kint::dump()
+	 *  *****
+	 *  dump variables disregarding their depth:
+	 *   + Kint::dump()
+	 *  *****
+	 *  return output instead of displaying it (also disables ajax/cli detection):
+	 *   @ Kint::dump()
+	 *  *****
+	 *  disable ajax and cli auto-detection and just output as requested (plain/rich):
+	 *   ~ Kint::dump()
+	 *
+	 * Modifiers are supported by all dump wrapper functions, including Kint::trace(). Space is optional.
+	 *
+	 *
+	 * You can also use the following shorthand to display debug_backtrace():
+	 *   Kint::dump( 1 );
+	 *
+	 * Passing the result from debug_backtrace() to kint::dump() as a single parameter will display it as trace too:
+	 *   $trace = debug_backtrace( true );
+	 *   Kint::dump( $trace );
+	 *  Or simply:
+	 *   Kint::dump( debug_backtrace() );
+	 *
+	 *
+	 * @param mixed $data
+	 *
+	 * @return void|string
+	 */
+	public static function dump( $data = null )
+	{
+		if ( !Kint::enabled() ) return '';
+
+		# find caller information
+		list( $names, $modifiers, $callee, $previousCaller, $miniTrace ) = self::_getPassedNames(
+			defined( 'DEBUG_BACKTRACE_IGNORE_ARGS' )
+				? debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS )
+				: debug_backtrace()
+		);
+
+		# process modifiers: @, +, !, ~ and -
+		if ( strpos( $modifiers, '-' ) !== false ) {
+			self::$_firstRun = true;
+			while ( ob_get_level() ) {
+				ob_end_clean();
+			}
+		}
+		if ( strpos( $modifiers, '!' ) !== false ) {
+			$expandedByDefaultOldValue = self::$expandedByDefault;
+			self::$expandedByDefault   = true;
+		}
+		if ( strpos( $modifiers, '+' ) !== false ) {
+			$maxLevelsOldValue = self::$maxLevels;
+			self::$maxLevels   = false;
+		}
+		if ( strpos( $modifiers, '@' ) !== false ) {
+			$firstRunOldValue = self::$_firstRun;
+			self::$_firstRun  = true;
+		}
+		# disable mode detection
+		if ( strpos( $modifiers, '@' ) !== false || strpos( $modifiers, '~' ) === false ) {
+			$modeOldValue   = self::$mode;
+			$isAjaxOldValue = self::$_isAjax;
+			if ( self::$_detected === 'ajax' ) {
+				self::$_isAjax = true;
+			} elseif ( self::$_detected === 'cli' && self::$cliDetection ) {
+				# cli detection is checked here as you can toggle the feature for individual dumps
+				self::$mode = self::$cliColors ? 'cli' : 'whitespace';
+			}
+		}
+
+
+		$decoratorsMap = array(
+			'cli'        => 'Kint_Decorators_Cli',
+			'plain'      => 'Kint_Decorators_Plain',
+			'rich'       => 'Kint_Decorators_Rich',
+			'whitespace' => 'Kint_Decorators_Whitespace',
+		);
+		$decorator     = $decoratorsMap[self::$mode];
+		$output        = $decorator::wrapStart( $callee );
+
+		$trace = false;
+		if ( $names === array( null ) && func_num_args() === 1 && $data === 1 ) {
+			$trace = debug_backtrace( true ); # Kint::dump(1) shorthand
+		} elseif ( func_num_args() === 1 && is_array( $data ) ) {
+			$trace = $data; # test if the single parameter is result of debug_backtrace()
+		}
+		$trace and $trace = self::_parseTrace( $trace );
+
+		if ( $trace ) {
+			$output .= $decorator::decorateTrace( $trace );
+		} else {
+			$data = func_num_args() === 0
+				? array( "[[no arguments passed]]" )
+				: func_get_args();
+
+			foreach ( $data as $k => $argument ) {
+				kintParser::reset();
+				$output .= $decorator::decorate( kintParser::factory( $argument, $names[$k] ) );
+			}
+		}
+
+
+		$output .= $decorator::wrapEnd( $callee, $miniTrace, $previousCaller );
+
+		if ( strpos( $modifiers, '~' ) === false ) {
+			self::$mode = $modeOldValue;
+		}
+		if ( strpos( $modifiers, '!' ) !== false ) {
+			self::$expandedByDefault = $expandedByDefaultOldValue;
+		}
+		if ( strpos( $modifiers, '+' ) !== false ) {
+			self::$maxLevels = $maxLevelsOldValue;
+		}
+		if ( strpos( $modifiers, '@' ) !== false ) {
+			self::$_firstRun = $firstRunOldValue;
+			return $output;
+		}
+
+		if ( self::$_isAjax ) {
+			$data   = rawurlencode( $output );
+			$chunks = array();
+
+			while ( strlen( $data ) > 4096 ) {
+				$chunks[] = substr( $data, 0, 4096 );
+				$data     = substr( $data, 4096 );
+			}
+			$chunks[] = $data;
+
+			for ( $i = 0, $c = count( $chunks ); $i < $c; $i++ ) {
+				$index = self::$_headerNo++;
+				$name  = 'kint' . ( $index > 0 ? "-$index" : '' );
+				header( "$name: {$chunks[$i]}" );
+			}
+
+			if ( strpos( $modifiers, '~' ) === false ) {
+				self::$_isAjax = $isAjaxOldValue;
+			}
+			return '';
+		}
+
+		echo $output;
+		return '';
+	}
+
+
+	/**
+	 * generic path display callback, can be configured in the settings; purpose is to show relevant path info and hide
+	 * as much of the path as possible.
+	 *
+	 * @param string $file
+	 * @param int    $line [OPTIONAL]
+	 * @param bool   $wrapInHtml
+	 *
+	 * @return string
+	 */
+	public static function shortenPath( $file, $line = null, $wrapInHtml = true )
+	{
+		$file          = str_replace( '\\', '/', $file );
+		$shortenedName = $file;
+		$replaced      = false;
+		if ( is_array( self::$appRootDirs ) ) foreach ( self::$appRootDirs as $path => $replaceString ) {
+			if ( empty( $path ) ) continue;
+
+			$path = str_replace( '\\', '/', $path );
+
+			if ( strpos( $file, $path ) === 0 ) {
+				$shortenedName = $replaceString . substr( $file, strlen( $path ) );
+				$replaced      = true;
+				break;
+			}
+		}
+
+		if ( !$replaced ) {
+			$pathParts = explode( '/', str_replace( '\\', '/', KINT_DIR ) );
+			$fileParts = explode( '/', $file );
+			$i         = 0;
+			foreach ( $fileParts as $i => $filePart ) {
+				if ( !isset( $pathParts[$i] ) || $pathParts[$i] !== $filePart ) break;
+			}
+			$shortenedName = '.../' . implode( '/', array_slice( $fileParts, $i ) );
+		}
+
+
+		if ( !$line ) { # means this is called from resource type dump
+			return $shortenedName;
+		}
+
+		if ( !self::$fileLinkFormat ) {
+			return "{$shortenedName}:{$line}";
+		}
+
+		$url = str_replace( array( '%f', '%l' ), array( $file, $line ), self::$fileLinkFormat );
+
+		if ( $wrapInHtml ) {
+			$class = ( strpos( $url, 'http://' ) === 0 ) ? 'class="kint-ide-link" ' : '';
+			return "<a {$class}href=\"{$url}\">{$shortenedName}:{$line}</a>";
+		} else {
+			return array( $url, $shortenedName . ':' . $line );
+		}
+	}
+
+	/**
+	 * trace helper, shows the place in code inline
+	 *
+	 * @param string $file full path to file
+	 * @param int    $lineNumber the line to display
+	 * @param int    $padding surrounding lines to show besides the main one
+	 *
+	 * @return bool|string
+	 */
+	private static function _showSource( $file, $lineNumber, $padding = 7 )
+	{
+		if ( !$file OR !is_readable( $file ) ) {
+			# continuing will cause errors
+			return false;
+		}
+
+		# open the file and set the line position
+		$file = fopen( $file, 'r' );
+		$line = 0;
+
+		# Set the reading range
+		$range = array(
+			'start' => $lineNumber - $padding,
+			'end'   => $lineNumber + $padding
+		);
+
+		# set the zero-padding amount for line numbers
+		$format = '% ' . strlen( $range['end'] ) . 'd';
+
+		$source = '';
+		while ( ( $row = fgets( $file ) ) !== false ) {
+			# increment the line number
+			if ( ++$line > $range['end'] ) {
+				break;
+			}
+
+			if ( $line >= $range['start'] ) {
+				# make the row safe for output
+				$row = htmlspecialchars( $row, ENT_NOQUOTES, 'UTF-8' );
+
+				# trim whitespace and sanitize the row
+				$row = '<span>' . sprintf( $format, $line ) . '</span> ' . $row;
+
+				if ( $line === $lineNumber ) {
+					# apply highlighting to this row
+					$row = '<div class="kint-highlight">' . $row . '</div>';
+				} else {
+					$row = '<div>' . $row . '</div>';
+				}
+
+				# add to the captured source
+				$source .= $row;
+			}
+		}
+
+		# close the file
+		fclose( $file );
+
+		return $source;
+	}
+
+
+	/**
+	 * returns parameter names that the function was passed, as well as any predefined symbols before function
+	 * call (modifiers)
+	 *
+	 * @param array $trace
+	 *
+	 * @return array( $parameters, $modifier, $callee, $previousCaller )
+	 */
+	private static function _getPassedNames( $trace )
+	{
+		list( $previousCaller, $miniTrace, $callee ) = self::_getCallerInfo( $trace );
+
+		if ( !isset( $callee['file'] ) || !is_readable( $callee['file'] ) ) {
+			return false;
+		}
+
+		# open the file and read it up to the position where the function call expression ended
+		$file   = fopen( $callee['file'], 'r' );
+		$line   = 0;
+		$source = '';
+		while ( ( $row = fgets( $file ) ) !== false ) {
+			if ( ++$line > $callee['line'] ) break;
+			$source .= $row;
+		}
+		fclose( $file );
+		$source = self::_removeAllButCode( $source );
+
+
+		$codePattern = empty( $callee['class'] )
+			? $callee['function']
+			: $callee['class'] . "\x07*" . $callee['type'] . "\x07*" . $callee['function'];
+
+
+		# get the position of the last call to the function
+		preg_match_all(
+			$r = "~
+			# beginning of statement
+			[\x07{(]
+
+			# search for modifiers (group 1)
+			([-+!@\\~]*)?
+
+			# spaces, spaces everywhere
+			\x07*
+
+			# check if output is assigned to a variable (group 2)
+			(
+				\\$[a-z0-9_]+ # variable
+				\x07*\\.?=\x07*  # assignment
+			)?
+
+			# possibly a namespace symbol
+			\\\\?
+
+			\x07*
+
+			# main call to Kint
+			{$codePattern}
+
+			\x07*
+
+			# find the character where kint's opening bracket resides (group 3)
+			(\\()
+
+			~ix",
+			$source,
+			$matches,
+			PREG_OFFSET_CAPTURE
+		);
+
+		$modifiers  = end( $matches[1] );
+		$assignment = end( $matches[2] );
+		$bracket    = end( $matches[3] );
+
+		$modifiers = $modifiers[0];
+		if ( $assignment[1] !== -1 ) {
+			$modifiers .= '@';
+		}
+
+		$passedParameters = preg_replace( "[\x07+]", ' ', substr( $source, $bracket[1] + 1 ) );
+		# we now have a string like this:
+		# <parameters passed>); <the rest of the last read line>
+
+		# remove everything in brackets and quotes, we don't need nested statements nor literal strings which would
+		# only complicate separating individual arguments
+		$c          = strlen( $passedParameters );
+		$inString   = $escaped = false;
+		$i          = 0;
+		$inBrackets = 0;
+		while ( $i < $c ) {
+			$letter = $passedParameters[$i];
+			if ( $inString === false ) {
+				if ( $letter === '\'' || $letter === '"' ) {
+					$inString = $letter;
+				} elseif ( $letter === '(' ) {
+					$inBrackets++;
+				} elseif ( $letter === ')' ) {
+					$inBrackets--;
+					if ( $inBrackets === -1 ) { # this means we are out of the brackets that denote passed parameters
+						$passedParameters = substr( $passedParameters, 0, $i );
+						break;
+					}
+				}
+			} elseif ( $letter === $inString && !$escaped ) {
+				$inString = false;
+			}
+
+			# place an untype-able character instead of whatever was inside quotes or brackets, we don't
+			# need that info. We'll later replace it with '...'
+			if ( $inBrackets > 0 ) {
+				if ( $inBrackets > 1 || $letter !== '(' ) {
+					$passedParameters[$i] = "\x07";
+				}
+			}
+			if ( $inString !== false ) {
+				if ( $letter !== $inString || $escaped ) {
+					$passedParameters[$i] = "\x07";
+				}
+			}
+
+			$escaped = !$escaped && ( $letter === '\\' );
+			$i++;
+		}
+
+		# by now we have an unnested arguments list, lets make it to an array for processing further
+		$arguments = explode( ',', preg_replace( "~\x07+~", '...', $passedParameters ) );
+
+		# test each argument whether it was passed literary or was it an expression or a variable name
+		$parameters = array();
+		$blacklist  = array( 'null', 'true', 'false', 'array(...)', 'array()', '"..."', 'b"..."', );
+		foreach ( $arguments as $argument ) {
+			$argument = trim( $argument );
+
+			if ( is_numeric( $argument )
+				|| in_array( str_replace( "'", '"', strtolower( $argument ) ), $blacklist, true )
+			) {
+				$parameters[] = null;
+			} else {
+				$parameters[] = $argument;
+			}
+		}
+
+		return array( $parameters, $modifiers, $callee, $previousCaller, $miniTrace );
+	}
+
+	/**
+	 * removes comments and zaps whitespace & <?php tags from php code, makes for easier further parsing
+	 *
+	 * @param string $source
+	 *
+	 * @return string
+	 */
+	private static function _removeAllButCode( $source )
+	{
+		$newStr        = '';
+		$tokens        = token_get_all( $source );
+		$commentTokens = array( T_COMMENT => true, T_INLINE_HTML => true, T_DOC_COMMENT => true );
+
+		defined( 'T_NS_SEPARATOR' ) or define( 'T_NS_SEPARATOR', 380 );
+
+		$whiteSpaceTokens = array(
+			T_WHITESPACE => true, T_CLOSE_TAG => true,
+			T_OPEN_TAG   => true, T_OPEN_TAG_WITH_ECHO => true,
+		);
+
+		foreach ( $tokens as $token ) {
+			if ( is_array( $token ) ) {
+				if ( isset( $commentTokens[$token[0]] ) ) continue;
+
+				if ( $token[0] === T_NEW ) {
+					$token = 'new ';
+				} elseif ( $token[0] === T_NS_SEPARATOR ) {
+					$token = "\\\x07";
+				} elseif ( isset( $whiteSpaceTokens[$token[0]] ) ) {
+					$token = "\x07";
+				} else {
+					$token = $token[1];
+				}
+			} elseif ( $token === ';' ) {
+				$token = "\x07";
+			}
+
+			$newStr .= $token;
+		}
+		return $newStr;
+	}
+
+	/**
+	 * @param $trace
+	 *
+	 * @return array
+	 */
+	private static function _getCallerInfo( $trace )
+	{
+		$previousCaller = array();
+		$miniTrace      = array();
+		$prevStep       = array();
+
+		# go from back of trace to find first occurrence of call to Kint or its wrappers
+		while ( $step = array_pop( $trace ) ) {
+
+			if ( self::_stepIsInternal( $step ) ) {
+				$previousCaller = $prevStep;
+				break;
+			} elseif ( isset( $step['file'], $step['line'] ) ) {
+				unset( $step['object'], $step['args'] );
+				array_unshift( $miniTrace, $step );
+			}
+
+			$prevStep = $step;
+		}
+
+		return array( $previousCaller, $miniTrace, $step );
+	}
+
+	/**
+	 * returns whether current trace step belongs to Kint or its wrappers
+	 *
+	 * @param $step
+	 *
+	 * @return array
+	 */
+	private static function _stepIsInternal( $step )
+	{
+		if ( isset( $step['class'] ) ) {
+			foreach ( self::$aliases['methods'] as $alias ) {
+				if ( $alias[0] === strtolower( $step['class'] ) && $alias[1] === strtolower( $step['function'] ) ) {
+					return true;
+				}
+			}
+			return false;
+		} else {
+			return in_array( strtolower( $step['function'] ), self::$aliases['functions'], true );
+		}
+	}
+
+	private static function _parseTrace( array $data )
+	{
+		$trace          = array();
+		$tracePrototype = array( 'file', 'line', 'args', 'class' );
+		while ( $step = array_pop( $data ) ) {
+			if ( !is_array( $step ) ) return false;
+
+			$valid = false; # this method also validates whether a trace was indeed passed
+			if ( sizeof( $step ) <= 7 ) {
+				$found = 0;
+				foreach ( $tracePrototype as $element ) {
+					if ( isset( $step[$element] ) ) {
+						if ( ++$found === 2 ) {
+							$valid = true;
+							break;
+						}
+					}
+				}
+
+				if ( !$valid && isset( $step['function'] )
+					&& substr( $step['function'], -9, 9 ) === '{closure}'
+				) {
+					$valid = true;
+				}
+			}
+
+			if ( !$valid ) return false;
+
+			if ( self::_stepIsInternal( $step ) ) {
+				$step = array(
+					'file'     => $step['file'],
+					'line'     => $step['line'],
+					'function' => '',
+				);
+				array_unshift( $trace, $step );
+				break;
+			}
+			array_unshift( $trace, $step );
+		}
+
+		$output = array();
+		foreach ( $trace as $step ) {
+			if ( isset( self::$traceCleanupCallback ) ) {
+				$step = call_user_func( self::$traceCleanupCallback, $step );
+
+				# if the user defined trace cleanup function returns null, skip this line
+				if ( $step === null ) {
+					continue;
+				}
+			}
+
+			if ( isset( $step['file'] ) ) {
+				$file = $step['file'];
+
+				if ( isset( $step['line'] ) ) {
+					$line = $step['line'];
+					# include the source of this step
+					if ( self::$mode === 'rich' ) {
+						$source = self::_showSource( $file, $line );
+					}
+				}
+			}
+
+			# still, might be not a trace
+			if ( !isset( $step['function'] ) ) return false;
+
+
+			$function = $step['function'];
+
+			if ( in_array( $function, self::$_statements ) ) { # include, require
+				if ( empty( $step['args'] ) ) {
+					# no arguments
+					$args = array();
+				} else {
+					# sanitize the file path
+					$args = array( self::shortenPath( $step['args'][0] ) );
+				}
+			} elseif ( isset( $step['args'] ) ) {
+				if ( empty( $step['class'] ) && !function_exists( $function ) ) {
+					# introspection on closures or language constructs in a stack trace is impossible before PHP 5.3
+					$params = null;
+				} else {
+					try {
+						if ( isset( $step['class'] ) ) {
+							if ( method_exists( $step['class'], $function ) ) {
+								$reflection = new ReflectionMethod( $step['class'], $function );
+							} else if ( isset( $step['type'] ) && $step['type'] == '::' ) {
+								$reflection = new ReflectionMethod( $step['class'], '__callStatic' );
+							} else {
+								$reflection = new ReflectionMethod( $step['class'], '__call' );
+							}
+						} else {
+							$reflection = new ReflectionFunction( $function );
+						}
+
+						# get the function parameters
+						$params = $reflection->getParameters();
+					} catch ( Exception $e ) { # avoid various PHP version incompatibilities
+						$params = null;
+					}
+				}
+
+				$args = array();
+				foreach ( $step['args'] as $i => $arg ) {
+					if ( isset( $params[$i] ) ) {
+						# assign the argument by the parameter name
+						$args[$params[$i]->name] = $arg;
+					} else {
+						# assign the argument by number
+						$args['#' . ( $i + 1 )] = $arg;
+					}
+				}
+			}
+
+			if ( isset( $step['class'] ) ) {
+				# Class->method() or Class::method()
+				$function = $step['class'] . $step['type'] . $function;
+			}
+
+			$output[] = array(
+				'function' => $function,
+				'args'     => isset( $args ) ? $args : null,
+				'file'     => isset( $file ) ? $file : null,
+				'line'     => isset( $line ) ? $line : null,
+				'source'   => isset( $source ) ? $source : null,
+				'object'   => isset( $step['object'] ) ? $step['object'] : null,
+			);
+
+			unset( $function, $args, $file, $line, $source );
+		}
+
+		return $output;
+	}
+
+	public static function _ajaxHandler()
+	{
+		if ( !Kint::$enabled ) return;
+
+		# if content type is not HTML (e.g. csv export) and/or is downloaded - skip
+		foreach ( headers_list() as $header ) {
+			if ( substr( strtolower( $header ), 0, 13 ) === "content-type:" ) {
+				if ( strpos( $header, 'text/html' ) === false ) {
+					return;
+				}
+			} elseif ( substr( strtolower( $header ), 0, 20 ) === "content-disposition:" ) {
+				return;
+			}
+		}
+
+		$baseDir = KINT_DIR . 'view/compiled/modular-window/';
+
+		if ( !is_readable( $cssFile = $baseDir . Kint::$theme . '.css' ) ) {
+			$cssFile = $baseDir . 'original.css';
+		}
+
+		echo '<script>' . file_get_contents( $baseDir . 'kint.js' ) . '</script>'
+			. '<style>' . file_get_contents( $cssFile ) . "</style>";
+	}
+}
+
+
+if ( !function_exists( 'd' ) ) {
+	/**
+	 * Alias of Kint::dump()
+	 *
+	 * @return string
+	 */
+	function d()
+	{
+		if ( !Kint::enabled() ) return null;
+
+		$args = func_get_args();
+		return call_user_func_array( array( 'Kint', 'dump' ), $args );
+	}
+}
+
+if ( !function_exists( 'dd' ) ) {
+	/**
+	 * Alias of Kint::dump()
+	 * [!!!] IMPORTANT: execution will halt after call to this function
+	 *
+	 * @return string
+	 */
+	function dd()
+	{
+		if ( !Kint::enabled() ) return;
+
+		$args = func_get_args();
+		call_user_func_array( array( 'Kint', 'dump' ), $args );
+		die;
+	}
+}
+
+if ( !function_exists( 's' ) ) {
+
+	/**
+	 * Alias of kintLite()
+	 *
+	 * @return string
+	 */
+	function s()
+	{
+		if ( !Kint::enabled() ) return;
+		$mode       = Kint::$mode;
+		Kint::$mode = 'plain';
+		$o          = call_user_func_array( 'Kint::dump', func_get_args() );
+		Kint::$mode = $mode;
+		return $o;
+	}
+
+	/**
+	 * Alias of kintLite()
+	 * [!!!] IMPORTANT: execution will halt after call to this function
+	 *
+	 * @return string
+	 */
+	function sd()
+	{
+		if ( !Kint::enabled() ) return;
+		$mode       = Kint::$mode;
+		Kint::$mode = 'plain';
+		call_user_func_array( 'Kint::dump', func_get_args() );
+		Kint::$mode = $mode;
+		die;
+	}
+
+}
diff --git a/kint/kint/LICENCE b/kint/kint/LICENCE
new file mode 100644
index 0000000..936fe1f
--- /dev/null
+++ b/kint/kint/LICENCE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 Rokas Šleinius (raveren@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/kint/kint/README.md b/kint/kint/README.md
new file mode 100644
index 0000000..9fa5b48
--- /dev/null
+++ b/kint/kint/README.md
@@ -0,0 +1,62 @@
+# Kint - debugging helper for PHP developers
+
+[![Total Downloads](https://poser.pugx.org/raveren/kint/downloads.png)](https://packagist.org/packages/raveren/kint)
+
+http://raveren.github.com/kint/
+
+![Screenshot](http://raveren.github.com/kint/img/preview.png)
+
+Kint for PHP is a powerful and modern, zero-setup replacement for **[var_dump()](http://php.net/manual/en/function.var-dump.php)**, **[print_r()](http://php.net/manual/en/function.print-r.php)** and **[debug_backtrace()](http://php.net/manual/en/function.debug-backtrace.php)**. You'll wonder how you developed without it.
+
+
+----
+
+
+## Installation and usage
+```php
+<?php
+require '/kint/Kint.class.php';
+
+########## DUMP VARIABLE ###########################
+Kint::dump($GLOBALS, $_SERVER); // any nuber of parameters
+// or simply use d() as a shorthand:
+d($_SERVER);
+
+
+########## DEBUG BACKTRACE #########################
+Kint::trace();
+// or via shorthand:
+d(1);
+
+
+########## TEXT-ONLY OUTPUT ########################
+s($GLOBALS);
+
+
+########## MISCELLANEOUS ###########################
+// to disable all output
+Kint::enabled(false);
+// further calls, this one included, will not yield any output
+d('Get off my lawn!'); // no effect
+
+```
+
+### Furthermore
+
+* `sd()` and `dd()` are shorthands for `s();die;` and `d();die;` respectively.
+* `!Kint::dump()` and `!dd()` will display the dump expanded by default.
+
+----
+
+
+[Visit the project page](http://raveren.github.com/kint/) for documentation, configuration, and more advanced usage examples.
+
+### Author
+
+**Rokas Šleinius** (Raveren)
+
+![](http://img199.yfrog.com/img199/4323/imageda.png)
+
+### License
+
+Licensed under the MIT License
\ No newline at end of file
diff --git a/kint/kint/composer.json b/kint/kint/composer.json
new file mode 100644
index 0000000..cbed1f5
--- /dev/null
+++ b/kint/kint/composer.json
@@ -0,0 +1,24 @@
+{
+    "name": "raveren/kint",
+    "description": "Kint - debugging helper for PHP developers",
+    "keywords": ["kint", "php", "debug"],
+    "type": "library",
+    "homepage": "https://github.com/raveren/kint",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Rokas Šleinius",
+            "homepage": "https://github.com/raveren"
+        },
+        {
+            "name": "Contributors",
+            "homepage": "https://github.com/raveren/kint/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.2.0"
+    },
+    "autoload": {
+        "files": ["Kint.class.php"]
+    }
+}
\ No newline at end of file
diff --git a/kint/kint/config.default.php b/kint/kint/config.default.php
new file mode 100644
index 0000000..bcb6825
--- /dev/null
+++ b/kint/kint/config.default.php
@@ -0,0 +1,148 @@
+<?php
+isset( $GLOBALS['_kint_settings'] ) or $GLOBALS['_kint_settings'] = array();
+$_kintSettings = &$GLOBALS['_kint_settings'];
+
+
+/** @var bool if set to false, kint will become silent, same as Kint::enabled(false) or Kint::$enabled = false */
+$_kintSettings['enabled'] = true;
+
+
+/**
+ * @var bool whether to display where kint was called from
+ */
+$_kintSettings['displayCalledFrom'] = true;
+
+
+/**
+ * @var string format of the link to the source file in trace entries. Use %f for file path, %l for line number.
+ * Defaults to xdebug.file_link_format if not set.
+ *
+ * [!] EXAMPLE (works with for phpStorm and RemoteCall Plugin):
+ *
+ * $_kintSettings['fileLinkFormat'] = 'http://localhost:8091/?message=%f:%l';
+ *
+ */
+$_kintSettings['fileLinkFormat'] = ini_get( 'xdebug.file_link_format' );
+
+
+/**
+ * @var array base directories of your application that will be displayed instead of the full path. Keys are paths,
+ * values are replacement strings
+ *
+ * Defaults to array( $_SERVER['DOCUMENT_ROOT'] => '&lt;ROOT&gt;' )
+ *
+ * [!] EXAMPLE (for Kohana framework):
+ *
+ * $_kintSettings['appRootDirs'] = array(
+ *      APPPATH => 'APPPATH', // make sure the constants are already defined at the time of including this config file
+ *      SYSPATH => 'SYSPATH',
+ *      MODPATH => 'MODPATH',
+ *      DOCROOT => 'DOCROOT',
+ * );
+ *
+ * [!] EXAMPLE #2 (for a semi-universal approach)
+ *
+ * $_kintSettings['appRootDirs'] = array(
+ *      realpath( __DIR__ . '/../../..' ) => 'ROOT', // go up as many levels as needed in the realpath() param
+ * );
+ *
+ * $_kintSettings['fileLinkFormat'] = 'http://localhost:8091/?message=%f:%l';
+ *
+ */
+$_kintSettings['appRootDirs'] = isset( $_SERVER['DOCUMENT_ROOT'] )
+	? array( $_SERVER['DOCUMENT_ROOT'] => '&lt;ROOT&gt;' )
+	: array();
+
+
+/**
+ * @var callable|null
+ *
+ * @param array $step each step of the backtrace is passed to this callback to clean it up or skip it entirely
+ *
+ * @return array|null you can return null if you want to bypass outputting this step
+ *
+ * [!] EXAMPLE:
+ *
+ * $_kintSettings['traceCleanupCallback'] = function( $traceStep ) {
+ *      if ( isset( $traceStep['class'] ) && strtolower( $traceStep['class'] ) === 'errorHandler' ) {
+ *           return null;
+ *      }
+ *
+ *      if ( isset( $traceStep['function'] ) && strtolower( $traceStep['function'] ) === '__tostring' ) {
+ *          $traceStep['function'] = "[object converted to string]";
+ *      }
+ *
+ *       return $traceStep;
+ * };
+ */
+$_kintSettings['traceCleanupCallback'] = null;
+
+
+/** @var int max length of string before it is truncated and displayed separately in full. Zero or false to disable */
+$_kintSettings['maxStrLength'] = 60;
+
+/** @var array possible alternative char encodings in order of probability, eg. array('windows-1251') */
+$_kintSettings['charEncodings'] = array();
+
+
+/** @var int max array/object levels to go deep, if zero no limits are applied */
+$_kintSettings['maxLevels'] = 5;
+
+
+/** @var bool whether dumped indexed arrays that are in ideal sequence are displayed */
+$_kintSettings['hideSequentialKeys'] = true;
+
+
+/** @var string name of theme for rich view */
+$_kintSettings['theme'] = 'original';
+
+
+
+/** @var bool enable detection when a Kint dump was outputted in a (background) ajax request. The output with some
+ * additional features is then presented to the user on-screen.
+ *
+ * CAVEATS:
+ * 1) you must use jQuery and/or always append HTTP_X_REQUESTED_WITH header to ajax requests
+ * 2) if not outputting HTML source, you must denote that in the headers (content-type and/or content-disposition)
+ * 3) some js&css is always outputted after page HTML. It's not displayed and has no side effects, but it's there unless
+ *    content-type is not HTML, or a content-disposition header is sent
+ *
+ * Basically, the caveats boil down to that you have to adhere to general best practice guidelines in your code.
+ */
+$_kintSettings['ajaxDetection'] = false;
+
+/** @var bool enable detection when Kint is command line. Formats output with whitespace only; does not HTML-escape it */
+$_kintSettings['cliDetection'] = true;
+
+/** @var bool in addition to above setting, enable detection when Kint is run in *UNIX* command line.
+ * Attempts to add coloring, but if seen as plain text, the color information is visible as gibberish
+ */
+$_kintSettings['cliColors'] = false;
+
+
+/**
+ * @var callback filters array/object keys before outputting; return false if you do not wish to see it in the output
+ *
+ * @param string $key the key being output
+ * @param mixed  $val the contents of the dumped element in case you need it
+ *
+ * @return bool return false to skip displaying
+ *
+ * [!] EXAMPLE:
+ *
+ * $_kintSettings['keyFilterCallback'] = function( $key, $val ) {
+ *     if ( preg_match( '#_mt$#', $key ) ) {
+ *         return false;
+ *     }
+ *
+ *     if ( $val === '--testing--' ) {
+ *         return false;
+ *     }
+ *
+ *     // no need to return true to continue output
+ * };
+ *
+ */
+$_kintSettings['keyFilterCallback'] = null;
+
+unset( $_kintSettings );
\ No newline at end of file
diff --git a/kint/kint/decorators/cli.php b/kint/kint/decorators/cli.php
new file mode 100644
index 0000000..36992a2
--- /dev/null
+++ b/kint/kint/decorators/cli.php
@@ -0,0 +1,187 @@
+<?php
+class Kint_Decorators_Cli extends Kint
+{
+	private static $_enableColors;
+
+	public static function decorate( kintVariableData $kintVar, $level = 0 )
+	{
+		self::_init();
+
+		$output = '';
+		if ( $level === 0 ) {
+			$name = $kintVar->name ? $kintVar->name : 'literal';
+			if ( self::$_enableColors ) {
+				$output .= "\033[0;32m#-----------------{$name}#-----------------#\033[0m\n";
+			} else {
+				$output .= "#-----------------{$name}#-----------------#\n";
+			}
+			$kintVar->name = null;
+		}
+
+		$space = str_repeat( $s = '    ', $level );
+		$output .= $space . self::_drawHeader( $kintVar );
+
+
+		if ( $kintVar->extendedValue !== null ) {
+			$output .= " [\n";
+
+			if ( is_array( $kintVar->extendedValue ) ) {
+				foreach ( $kintVar->extendedValue as $v ) {
+					$output .= self::decorate( $v, $level + 1 );
+				}
+			} elseif ( is_string( $kintVar->extendedValue ) ) {
+				$output .= $space . $s . $kintVar->extendedValue . "\n"; # depth too great or similar
+			} else {
+				$output .= self::decorate( $kintVar->extendedValue, $level + 1 ); //it's kint's container
+			}
+			$output .= $space . "]\n";
+		} else {
+			$output .= "\n";
+		}
+
+		return $output;
+	}
+
+	public static function decorateTrace( $traceData )
+	{
+		$output = '';
+		foreach ( $traceData as $i => $step ) {
+			$output .= $i + 1 . ': ';
+
+			if ( isset( $step['file'] ) ) {
+				$output .= self::_buildCalleeString( $step );
+			} else {
+				$output .= 'PHP internal call';
+			}
+
+			$output .= ' ' . $step['function'];
+
+			if ( isset( $step['args'] ) ) {
+				$output .= '(' . implode( ', ', array_keys( $step['args'] ) ) . ')';
+			}
+			$output .= "\n";
+
+
+			if ( !empty( $step['object'] ) ) {
+				$calleeDump = kintParser::factory( $step['object'] );
+				$output .= "## Callee object ##\n";
+				$output .= self::decorate( $calleeDump, 1 );
+			}
+			if ( !empty( $step['args'] ) ) {
+				$output .= "## Arguments ##\n";
+				foreach ( $step['args'] as $k => $arg ) {
+					kintParser::reset();
+					$output .= self::decorate( kintParser::factory( $arg, $k ), 1 );
+				}
+			}
+		}
+
+		return $output;
+	}
+
+
+	/**
+	 * called for each dump, opens the html tag
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapStart( $callee )
+	{
+		return "";
+	}
+
+
+	/**
+	 * closes Kint::_wrapStart() started html tags and displays callee information
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 * @param array $miniTrace full path to kint call
+	 * @param array $prevCaller previous caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapEnd( $callee, $miniTrace, $prevCaller )
+	{
+		if ( !Kint::$displayCalledFrom ) {
+			return "\n";
+		}
+
+		$callingFunction = '';
+		if ( isset( $prevCaller['class'] ) ) {
+			$callingFunction = $prevCaller['class'];
+		}
+		if ( isset( $prevCaller['type'] ) ) {
+			$callingFunction .= $prevCaller['type'];
+		}
+		if ( isset( $prevCaller['function'] ) && !in_array( $prevCaller['function'], Kint::$_statements ) ) {
+			$callingFunction .= $prevCaller['function'] . '()';
+		}
+		$callingFunction and $callingFunction = " in {$callingFunction}";
+
+		$calleeInfo = null;
+		if ( isset( $callee['file'] ) ) {
+			$calleeInfo = self::_buildCalleeString( $callee );
+		}
+
+
+		return $calleeInfo || $callingFunction
+			? "\033[0;32mCalled from {$calleeInfo}{$callingFunction}\033[0m\n"
+			: "\n";
+	}
+
+
+	private static function _drawHeader( kintVariableData $kintVar )
+	{
+		$output = '';
+
+		if ( $kintVar->access ) {
+			$output .= ' ' . $kintVar->access;
+		}
+
+		if ( $kintVar->name !== null && $kintVar->name !== '' ) {
+			$output .= ' ' . $kintVar->name;
+		}
+
+		if ( $kintVar->operator ) {
+			$output .= ' ' . $kintVar->operator;
+		}
+
+		if ( self::$_enableColors ) {
+			$output .= " \033[1;35m" . $kintVar->type . "\033[0m";
+		} else {
+			$output .= $kintVar->type;
+		}
+
+		if ( $kintVar->subtype ) {
+			$output .= ' ' . $kintVar->subtype;
+		}
+
+
+		if ( $kintVar->size !== null ) {
+			$output .= ' (' . $kintVar->size . ')';
+		}
+
+
+		if ( $kintVar->value !== null && $kintVar->value !== '' ) {
+			$output .= ' ' . $kintVar->value;
+		}
+
+		return ltrim( $output );
+	}
+
+	private static function _buildCalleeString( $callee )
+	{
+		list( , $shortenedName ) = self::shortenPath( $callee['file'], $callee['line'], false );
+
+		return $shortenedName;
+	}
+
+	private static function _init()
+	{
+		if ( !isset( self::$_enableColors ) ) {
+			self::$_enableColors = strtoupper( substr( PHP_OS, 0, 3 ) ) !== 'WIN' || getenv( 'ANSICON' );
+		}
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/decorators/concise.php b/kint/kint/decorators/concise.php
new file mode 100644
index 0000000..74c3db6
--- /dev/null
+++ b/kint/kint/decorators/concise.php
@@ -0,0 +1,58 @@
+<?php
+class Kint_Decorators_Concise extends Kint
+{
+	/**
+	 * output:
+	 *
+	 * [value]
+	 *
+	 * value [title="[access] [name] [operator *] [subtype] [size] "]
+	 * OR
+	 * type [title="[access] [name] type [operator *] [subtype] [size] "]
+	 * <ul>extendedValue
+	 *
+	 * @param kintVariableData $kintVar
+	 *
+	 * @return string
+	 */
+	public static function decorate( kintVariableData $kintVar )
+	{
+		if ( $kintVar->extendedValue !== null || !empty( $kintVar->_alternatives ) ) {
+			return Kint_Decorators_Rich::decorate( $kintVar );
+		}
+
+		if ( $kintVar->value !== null ) {
+			$output = '<p title="';
+
+			if ( $kintVar->access !== null ) {
+				$output .= $kintVar->access . " ";
+			}
+
+			if ( $kintVar->name !== null ) {
+				$output .= $kintVar->name . " ";
+			}
+
+			if ( $kintVar->type !== null ) {
+				$output .= $kintVar->type;
+				if ( $kintVar->subtype !== null ) {
+					$output .= " " . $kintVar->subtype;
+				}
+				$output .= " ";
+			}
+
+			if ( $kintVar->operator !== null ) {
+				$output .= $kintVar->operator . "";
+			}
+
+			if ( $kintVar->size !== null ) {
+				$output .= "(" . $kintVar->size . ") ";
+			}
+
+			$output = trim( $output ) . '">' . $kintVar->value . '</p>';
+		} else {
+			$output = '<u>NULL</u>';
+		}
+
+		return $output;
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/decorators/plain.php b/kint/kint/decorators/plain.php
new file mode 100644
index 0000000..fb19fe8
--- /dev/null
+++ b/kint/kint/decorators/plain.php
@@ -0,0 +1,178 @@
+<?php
+// todo make cli, plain and whitespace decorators DRY
+class Kint_Decorators_Plain extends Kint
+{
+	public static function decorate( kintVariableData $kintVar, $level = 0 )
+	{
+		$output = '';
+		if ( $level === 0 ) {
+			$name = $kintVar->name ? $kintVar->name : 'literal';
+			$output .= "#-----------------$name-----------------#\n";
+			$kintVar->name = null;
+		}
+
+		$space = str_repeat( $s = '    ', $level );
+		$output .= $space . self::_drawHeader( $kintVar );
+
+
+		if ( $kintVar->extendedValue !== null ) {
+			$output .= " [\n";
+
+			if ( is_array( $kintVar->extendedValue ) ) {
+				foreach ( $kintVar->extendedValue as $v ) {
+					$output .= self::decorate( $v, $level + 1 );
+				}
+			} elseif ( is_string( $kintVar->extendedValue ) ) {
+				$output .= $space . $s . $kintVar->extendedValue . "\n"; # depth too great or similar
+			} else {
+				$output .= self::decorate( $kintVar->extendedValue, $level + 1 ); //it's kint's container
+			}
+			$output .= $space . "]\n";
+		} else {
+			$output .= "\n";
+		}
+
+		return $output;
+	}
+
+	public static function decorateTrace( $traceData )
+	{
+		$output = '';
+		foreach ( $traceData as $i => $step ) {
+			$output .= $i + 1 . ': ';
+
+			if ( isset( $step['file'] ) ) {
+				$output .= self::_buildCalleeString( $step );
+			} else {
+				$output .= 'PHP internal call';
+			}
+
+			$output .= ' ' . $step['function'];
+
+			if ( isset( $step['args'] ) ) {
+				$output .= '(' . implode( ', ', array_keys( $step['args'] ) ) . ')';
+			}
+			$output .= "\n";
+
+
+			if ( !empty( $step['object'] ) ) {
+				$calleeDump = kintParser::factory( $step['object'] );
+				$output .= "## Callee object ##\n";
+				$output .= self::decorate( $calleeDump, 1 );
+			}
+			if ( !empty( $step['args'] ) ) {
+				$output .= "## Arguments ##\n";
+				foreach ( $step['args'] as $k => $arg ) {
+					kintParser::reset();
+					$output .= self::decorate( kintParser::factory( $arg, $k ), 1 );
+				}
+			}
+		}
+
+		return $output;
+	}
+
+
+	/**
+	 * called for each dump, opens the html tag
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapStart( $callee )
+	{
+		return "<pre>\n";
+	}
+
+
+	/**
+	 * closes Kint::_wrapStart() started html tags and displays callee information
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 * @param array $miniTrace full path to kint call
+	 * @param array $prevCaller previous caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapEnd( $callee, $miniTrace, $prevCaller )
+	{
+		if ( !Kint::$displayCalledFrom ) {
+			return '</pre>';
+		}
+
+		$callingFunction = '';
+		if ( isset( $prevCaller['class'] ) ) {
+			$callingFunction = $prevCaller['class'];
+		}
+		if ( isset( $prevCaller['type'] ) ) {
+			$callingFunction .= $prevCaller['type'];
+		}
+		if ( isset( $prevCaller['function'] ) && !in_array( $prevCaller['function'], Kint::$_statements ) ) {
+			$callingFunction .= $prevCaller['function'] . '()';
+		}
+		$callingFunction and $callingFunction = " in {$callingFunction}";
+
+		$calleeInfo = null;
+		if ( isset( $callee['file'] ) ) {
+			$calleeInfo = self::_buildCalleeString( $callee );
+		}
+
+
+		return $calleeInfo || $callingFunction
+			? "Called from {$calleeInfo}{$callingFunction}</pre>"
+			: "</pre>";
+	}
+
+
+	private static function _drawHeader( kintVariableData $kintVar )
+	{
+		$output = '';
+
+		if ( $kintVar->access ) {
+			$output .= ' ' . $kintVar->access;
+		}
+
+		if ( $kintVar->name !== null && $kintVar->name !== '' ) {
+			$output .= ' ' . $kintVar->name;
+		}
+
+		if ( $kintVar->operator ) {
+			$output .= ' ' . $kintVar->operator;
+		}
+
+
+		$output .= ' <b>' . $kintVar->type . '</b>';
+		if ( $kintVar->subtype ) {
+			$output .= ' ' . $kintVar->subtype;
+		}
+
+
+		if ( $kintVar->size !== null ) {
+			$output .= ' (' . $kintVar->size . ')';
+		}
+
+
+		if ( $kintVar->value !== null && $kintVar->value !== '' ) {
+			$output .= ' ' . $kintVar->value;
+		}
+
+		return ltrim( $output );
+	}
+
+	private static function _buildCalleeString( $callee )
+	{
+		list( $url, $shortenedName ) = self::shortenPath( $callee['file'], $callee['line'], false );
+
+		if ( strpos( $url, 'http://' ) === 0 ) {
+			return
+				"<a href=\"#\"onclick=\""
+				. "X=new XMLHttpRequest;"
+				. "X.open('GET','{$url}');"
+				. "X.send();"
+				. "return!1\">{$shortenedName}</a>";
+		} else {
+			return "<a href=\"{$url}\">{$shortenedName}</a>";
+		}
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/decorators/rich.php b/kint/kint/decorators/rich.php
new file mode 100644
index 0000000..538c736
--- /dev/null
+++ b/kint/kint/decorators/rich.php
@@ -0,0 +1,325 @@
+<?php
+class Kint_Decorators_Rich extends Kint
+{
+	# make calls to Kint::dump() from different places in source coloured differently.
+	private static $_usedColors = array();
+
+	public static function decorate( kintVariableData $kintVar )
+	{
+		$output = '<dl>';
+
+		$extendedPresent = $kintVar->extendedValue !== null || $kintVar->_alternatives !== null;
+
+		if ( $extendedPresent ) {
+			$class = 'kint-parent';
+			if ( Kint::$expandedByDefault ) {
+				$class .= ' kint-show';
+			}
+			$output .= '<dt class="' . $class . '">';
+		} else {
+			$output .= '<dt>';
+		}
+
+		if ( $extendedPresent ) {
+			$output .= '<span class="kint-popup-trigger" title="Open in new window">&rarr;</span><nav></nav>';
+		}
+
+		$output .= self::_drawHeader( $kintVar ) . $kintVar->value . '</dt>';
+
+
+		if ( $extendedPresent ) {
+			$output .= '<dd>';
+		}
+
+		if ( isset( $kintVar->extendedValue ) ) {
+
+			if ( is_array( $kintVar->extendedValue ) ) {
+				foreach ( $kintVar->extendedValue as $v ) {
+					$output .= self::decorate( $v );
+				}
+			} elseif ( is_string( $kintVar->extendedValue ) ) {
+				$output .= '<pre>' . $kintVar->extendedValue . '</pre>';
+			} else {
+				$output .= self::decorate( $kintVar->extendedValue ); //it's kint's container
+			}
+
+		} elseif ( isset( $kintVar->_alternatives ) ) {
+			$output .= "<ul class=\"kint-tabs\">";
+
+			foreach ( $kintVar->_alternatives as $k => $var ) {
+				$active = $k === 0 ? ' class="kint-active-tab"' : '';
+				$output .= "<li{$active}>" . self::_drawHeader( $var, false ) . '</li>';
+			}
+
+			$output .= "</ul><ul>";
+
+			foreach ( $kintVar->_alternatives as $var ) {
+				$output .= "<li>";
+
+				$var = $var->value;
+
+				if ( is_array( $var ) ) {
+					foreach ( $var as $v ) {
+						$output .= is_string( $v )
+							? '<pre>' . $v . '</pre>'
+							: self::decorate( $v );
+					}
+				} elseif ( is_string( $var ) ) {
+					$output .= '<pre>' . $var . '</pre>';
+				} elseif ( isset( $var ) ) {
+					throw new Exception(
+						'Kint has encountered an error, '
+						. 'please paste this report to https://github.com/raveren/kint/issues<br>'
+						. 'Error encountered at ' . basename( __FILE__ ) . ':' . __LINE__ . '<br>'
+						. ' variables: '
+						. htmlspecialchars( var_export( $kintVar->_alternatives, true ), ENT_QUOTES )
+					);
+				}
+
+				$output .= "</li>";
+			}
+
+			$output .= "</ul>";
+		}
+		if ( $extendedPresent ) {
+			$output .= '</dd>';
+		}
+
+		$output .= '</dl>';
+
+		return $output;
+	}
+
+	public static function decorateTrace( $traceData )
+	{
+		$output = '<dl class="kint-trace">';
+
+		foreach ( $traceData as $i => $step ) {
+			$class = 'kint-parent';
+			if ( Kint::$expandedByDefault ) {
+				$class .= ' kint-show';
+			}
+
+			$output .= '<dt class="' . $class . '">'
+				. '<b>' . ( $i + 1 ) . '</b> '
+				. '<nav></nav>'
+				. '<var>';
+
+			if ( isset( $step['file'] ) ) {
+				$output .= Kint::shortenPath( $step['file'], $step['line'] );
+			} else {
+				$output .= 'PHP internal call';
+			}
+
+			$output .= '</var>';
+
+			$output .= $step['function'];
+
+			if ( isset( $step['args'] ) ) {
+				$output .= '(' . implode( ', ', array_keys( $step['args'] ) ) . ')';
+			}
+			$output .= '</dt><dd>';
+			$firstTab = ' class="kint-active-tab"';
+			$output .= '<ul class="kint-tabs">';
+
+			if ( !empty( $step['source'] ) ) {
+				$output .= "<li{$firstTab}>Source</li>";
+				$firstTab = '';
+			}
+
+			if ( !empty( $step['args'] ) ) {
+				$output .= "<li{$firstTab}>Arguments</li>";
+				$firstTab = '';
+			}
+
+			if ( !empty( $step['object'] ) ) {
+				kintParser::reset();
+				$calleeDump = kintParser::factory( $step['object'] );
+
+				$output .= "<li{$firstTab}>Callee object [{$calleeDump->subtype}]</li>";
+			}
+
+
+			$output .= '</ul><ul>';
+
+
+			if ( !empty( $step['source'] ) ) {
+				$output .= "<li><pre class=\"kint-source\">{$step['source']}</pre></li>";
+			}
+
+			if ( !empty( $step['args'] ) ) {
+				$output .= "<li>";
+				foreach ( $step['args'] as $k => $arg ) {
+					kintParser::reset();
+					$output .= self::decorate( kintParser::factory( $arg, $k ) );
+				}
+				$output .= "</li>";
+			}
+			if ( !empty( $step['object'] ) ) {
+				$output .= "<li>" . self::decorate( $calleeDump ) . "</li>";
+			}
+
+			$output .= '</ul></dd>';
+		}
+		$output .= '</dl>';
+
+		return $output;
+	}
+
+
+	/**
+	 * called for each dump, opens the html tag
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapStart( $callee )
+	{
+		// colors looping outputs the same (i.e. if same line in code dumps variables multiple time,
+		// we assume it's in a loop)
+
+		$uid = isset( $callee['file'] ) ? crc32( $callee['file'] . $callee['line'] ) : 'no-file';
+
+		if ( isset( self::$_usedColors[$uid] ) ) {
+			$class = self::$_usedColors[$uid];
+		} else {
+			$class                   = sizeof( self::$_usedColors );
+			self::$_usedColors[$uid] = $class;
+		}
+
+		$class = "kint_{$class}";
+
+
+		return self::_css() . "<div class=\"kint {$class}\">";
+	}
+
+
+	/**
+	 * closes Kint::_wrapStart() started html tags and displays callee information
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 * @param array $miniTrace full path to kint call
+	 * @param array $prevCaller previous caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapEnd( $callee, $miniTrace, $prevCaller )
+	{
+		if ( !Kint::$displayCalledFrom ) {
+			return '</div>';
+		}
+
+		$callingFunction = '';
+		$calleeInfo      = '';
+		$traceDisplay    = '';
+		if ( isset( $prevCaller['class'] ) ) {
+			$callingFunction = $prevCaller['class'];
+		}
+		if ( isset( $prevCaller['type'] ) ) {
+			$callingFunction .= $prevCaller['type'];
+		}
+		if ( isset( $prevCaller['function'] ) && !in_array( $prevCaller['function'], Kint::$_statements ) ) {
+			$callingFunction .= $prevCaller['function'] . '()';
+		}
+		$callingFunction and $callingFunction = " [{$callingFunction}]";
+
+
+		if ( isset( $callee['file'] ) ) {
+			$calleeInfo .= 'Called from ' . self::shortenPath( $callee['file'], $callee['line'], true );
+		}
+
+		if ( !empty( $miniTrace ) ) {
+			$traceDisplay = '<ol>';
+			foreach ( $miniTrace as $step ) {
+				$traceDisplay .= '<li>' . self::shortenPath( $step['file'], $step['line'], true ); // closing tag not required
+				if ( isset( $step['function'] ) && !in_array( $step['function'], Kint::$_statements ) ) {
+					$classString = ' [';
+					if ( isset( $step['class'] ) ) {
+						$classString .= $step['class'];
+					}
+					if ( isset( $step['type'] ) ) {
+						$classString .= $step['type'];
+					}
+					$classString .= $step['function'] . '()]';
+					$traceDisplay .= $classString;
+				}
+			}
+			$traceDisplay .= '</ol>';
+
+			$calleeInfo = '<nav></nav>' . $calleeInfo;
+		}
+
+
+		return "<footer>"
+		. '<span class="kint-popup-trigger" title="Open in new window">&rarr;</span> '
+		. "{$calleeInfo}{$callingFunction}{$traceDisplay}"
+		. "</footer></div>";
+	}
+
+
+	private static function _drawHeader( kintVariableData $kintVar, $verbose = true )
+	{
+		$output = '';
+		if ( $verbose ) {
+			if ( $kintVar->access !== null ) {
+				$output .= "<var>" . $kintVar->access . "</var> ";
+			}
+
+			if ( $kintVar->name !== null && $kintVar->name !== '' ) {
+				$output .= "<dfn>" . $kintVar->name . "</dfn> ";
+			}
+
+			if ( $kintVar->operator !== null ) {
+				$output .= $kintVar->operator . " ";
+			}
+		}
+
+		if ( $kintVar->type !== null ) {
+			if ( $verbose ) {
+				$output .= "<var>";
+			}
+
+			$output .= $kintVar->type;
+			if ( $kintVar->subtype !== null ) {
+				$output .= " " . $kintVar->subtype;
+			}
+
+			if ( $verbose ) {
+				$output .= "</var>";
+			} else {
+				$output .= " ";
+			}
+		}
+
+
+		if ( $kintVar->size !== null ) {
+			$output .= "(" . $kintVar->size . ") ";
+		}
+
+		return $output;
+	}
+
+
+	/**
+	 * produces css and js required for display. May be called multiple times, will only produce output once per
+	 * pageload or until `-` or `@` modifier is used
+	 *
+	 * @return string
+	 */
+	private static function _css()
+	{
+		if ( !Kint::$_firstRun ) return '';
+		Kint::$_firstRun = false;
+
+		$baseDir = KINT_DIR . 'view/compiled/main/';
+
+		if ( !is_readable( $cssFile = $baseDir . self::$theme . '.css' ) ) {
+			$cssFile = $baseDir . 'original.css';
+		}
+
+		return
+			'<script class="-kint-js">' . file_get_contents( $baseDir . 'kint.js' ) . '</script>'
+			. '<style class="-kint-css">' . file_get_contents( $cssFile ) . "</style>\n";
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/decorators/whitespace.php b/kint/kint/decorators/whitespace.php
new file mode 100644
index 0000000..da3f8c6
--- /dev/null
+++ b/kint/kint/decorators/whitespace.php
@@ -0,0 +1,168 @@
+<?php
+class Kint_Decorators_Whitespace extends Kint
+{
+	public static function decorate( kintVariableData $kintVar, $level = 0 )
+	{
+		$output = '';
+		if ( $level === 0 ) {
+			$name = $kintVar->name ? $kintVar->name : 'literal';
+			$output .= "#-----------------$name-----------------#\n";
+			$kintVar->name = null;
+		}
+
+		$space = str_repeat( $s = '    ', $level );
+		$output .= $space . self::_drawHeader( $kintVar );
+
+
+		if ( $kintVar->extendedValue !== null ) {
+			$output .= " [\n";
+
+			if ( is_array( $kintVar->extendedValue ) ) {
+				foreach ( $kintVar->extendedValue as $v ) {
+					$output .= self::decorate( $v, $level + 1 );
+				}
+			} elseif ( is_string( $kintVar->extendedValue ) ) {
+				$output .= $space . $s . $kintVar->extendedValue . "\n"; # depth too great or similar
+			} else {
+				$output .= self::decorate( $kintVar->extendedValue, $level + 1 ); //it's kint's container
+			}
+			$output .= $space . "]\n";
+		} else {
+			$output .= "\n";
+		}
+
+		return $output;
+	}
+
+	public static function decorateTrace( $traceData )
+	{
+		$output = '';
+		foreach ( $traceData as $i => $step ) {
+			$output .= $i + 1 . ': ';
+
+			if ( isset( $step['file'] ) ) {
+				$output .= self::_buildCalleeString( $step );
+			} else {
+				$output .= 'PHP internal call';
+			}
+
+			$output .= ' ' . $step['function'];
+
+			if ( isset( $step['args'] ) ) {
+				$output .= '(' . implode( ', ', array_keys( $step['args'] ) ) . ')';
+			}
+			$output .= "\n";
+
+
+			if ( !empty( $step['object'] ) ) {
+				$calleeDump = kintParser::factory( $step['object'] );
+				$output .= "## Callee object ##\n";
+				$output .= self::decorate( $calleeDump, 1 );
+			}
+			if ( !empty( $step['args'] ) ) {
+				$output .= "## Arguments ##\n";
+				foreach ( $step['args'] as $k => $arg ) {
+					kintParser::reset();
+					$output .= self::decorate( kintParser::factory( $arg, $k ), 1 );
+				}
+			}
+		}
+
+		return $output;
+	}
+
+
+	/**
+	 * called for each dump, opens the html tag
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapStart( $callee )
+	{
+		return "\n";
+	}
+
+
+	/**
+	 * closes Kint::_wrapStart() started html tags and displays callee information
+	 *
+	 * @param array $callee caller information taken from debug backtrace
+	 * @param array $miniTrace full path to kint call
+	 * @param array $prevCaller previous caller information taken from debug backtrace
+	 *
+	 * @return string
+	 */
+	public static function wrapEnd( $callee, $miniTrace, $prevCaller )
+	{
+		if ( !Kint::$displayCalledFrom ) {
+			return "\n";
+		}
+
+		$callingFunction = '';
+		if ( isset( $prevCaller['class'] ) ) {
+			$callingFunction = $prevCaller['class'];
+		}
+		if ( isset( $prevCaller['type'] ) ) {
+			$callingFunction .= $prevCaller['type'];
+		}
+		if ( isset( $prevCaller['function'] ) && !in_array( $prevCaller['function'], Kint::$_statements ) ) {
+			$callingFunction .= $prevCaller['function'] . '()';
+		}
+		$callingFunction and $callingFunction = " in {$callingFunction}";
+
+		$calleeInfo = null;
+		if ( isset( $callee['file'] ) ) {
+			$calleeInfo = self::_buildCalleeString( $callee );
+		}
+
+
+		return $calleeInfo || $callingFunction
+			? "Called from {$calleeInfo}{$callingFunction}\n"
+			: "\n";
+	}
+
+
+	private static function _drawHeader( kintVariableData $kintVar )
+	{
+		$output = '';
+
+		if ( $kintVar->access ) {
+			$output .= ' ' . $kintVar->access;
+		}
+
+		if ( $kintVar->name !== null && $kintVar->name !== '' ) {
+			$output .= ' ' . $kintVar->name;
+		}
+
+		if ( $kintVar->operator ) {
+			$output .= ' ' . $kintVar->operator;
+		}
+
+
+		$output .= $kintVar->type;
+		if ( $kintVar->subtype ) {
+			$output .= ' ' . $kintVar->subtype;
+		}
+
+
+		if ( $kintVar->size !== null ) {
+			$output .= ' (' . $kintVar->size . ')';
+		}
+
+
+		if ( $kintVar->value !== null && $kintVar->value !== '' ) {
+			$output .= ' ' . $kintVar->value;
+		}
+
+		return ltrim( $output );
+	}
+
+	private static function _buildCalleeString( $callee )
+	{
+		list( , $shortenedName ) = self::shortenPath( $callee['file'], $callee['line'], false );
+
+		return $shortenedName;
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/examples/overview.php b/kint/kint/examples/overview.php
new file mode 100644
index 0000000..8c222bd
--- /dev/null
+++ b/kint/kint/examples/overview.php
@@ -0,0 +1,181 @@
+<html>
+<?php
+require('../Kint.class.php');
+
+$selectedTheme = isset($_GET['theme']) ? $_GET['theme'] : 'original';
+$allowedThemes = array();
+$dh  = opendir('../view/inc');
+while(($filename = readdir($dh)) !== false) {
+     if(strpos($filename, '.css') !== false) {
+         $allowedThemes[] = str_replace('.css', '', $filename);
+     }
+}
+
+sort($allowedThemes);
+
+if(in_array($selectedTheme, $allowedThemes)) {
+    Kint::$theme = $selectedTheme;
+}
+
+class BaseUser
+{
+    /**
+     * @return string
+     */
+    public function getFullName() {}
+}
+
+class User extends BaseUser
+{
+    CONST DEFAULT_PATH = 'some/default/path';
+    CONST ROLE_DISALLOWED = 1;
+    CONST ROLE_ALLOWED = 2;
+    CONST ROLE_FORBIDDEN = 3;
+
+    public $additionalData;
+    private $username = 'demo_username';
+    private $password = 'demo_password';
+    private $createdDate;
+
+    public function __construct() {}
+
+    /**
+     * Check is user is equal to another user
+     */
+    public function isEqualTo(BaseUser $user) {}
+
+    /**
+     * Get data from this demo class
+     *
+     * @param string $username
+     * @return array
+     */
+    public function setUsername($username) {}
+
+    /**
+     * Set additional data
+     *
+     * @array $data
+     */
+    public function setAdditionalData(array $data) { $this->additionalData = $data; }
+
+    /**
+     * @return \DateTime date object
+     */
+    public function getCreatedDate() {}
+
+    /**
+     * @param \DateTime $date
+     */
+    public function setCreatedDate(DateTime $date) { $this->createdDate = $date; }
+
+    /**
+     * Dummy method that triggers trace
+     */
+    public function ensure() { Kint::trace(); }
+}
+
+class UserManager
+{
+    private $user;
+
+    /**
+     * Get user from manager
+     */
+    public function getUser() { return $this->user; }
+
+    /**
+     * Debug specific user
+     *
+     * @param \User $user
+     */
+    public function debugUser($user) {
+        $this->user = $user;
+        d($this->getUser());
+    }
+
+    /**
+     * Ensure user (triggers ensure() method on \User object that trace)
+     *
+     * @void
+     */
+    public function ensureUser() { $this->user->ensure(); }
+}
+
+$user = new User;
+$user->setAdditionalData(array(
+    'last_login' => new DateTime(),
+    'current_unix_timestamp' => time(),
+    'random_rgb_color_code' => '#FF9900',
+    'impressions' => 60,
+    'nickname' => 'Someuser',
+));
+$user->setCreatedDate(new DateTime('2013-10-10'));
+$userManager = new UserManager();
+
+for($i = 1; $i < 6; $i ++) {
+    $tabularData[] = array(
+        'date' => "2013-01-0{$i}",
+        'allowed' => $i % 3 == 0,
+        'action' => "action {$i}",
+        'clicks' => rand(100, 50000),
+        'impressions' => rand(10000, 500000),
+    );
+
+    if($i % 2 == 0) {
+        unset($tabularData[$i - 1]['clicks']);
+    }
+}
+
+$nestedArray = array();
+
+for($i = 1; $i < 6; $i ++) {
+    $nestedArray["user group {$i}"] = array(
+        "user {$i}" => array(
+            'name' => "Name {$i}",
+            'surname' => "Surname {$i}"
+        ),
+
+        'data' => array(
+            'conversions' => rand(100, 5000),
+            'spent' => array('currency' => 'EUR', 'amount' => rand(10000, 500000))
+        ),
+    );
+}
+?>
+<head>
+	<title>Kint PHP debugging tool - overview</title>
+	<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
+	<script>
+		$(function() {
+			$('#themeSelect').val('<?php echo isset($_GET['theme']) ? $_GET['theme'] : 'original' ?>');
+
+			$('#themeSelect').change(function(e) {
+				window.location = '?theme=' + $(this).val();
+			});
+		});
+	</script>
+</head>
+<body>
+<div>
+    <div style="float: right">Switch theme:
+        <select id="themeSelect">
+            <?php foreach($allowedThemes as $theme) : ?>
+                <option value="<?php echo $theme ?>">
+                    <?php echo ucfirst(str_replace('-', ' ', $theme)) ?>
+                </option>
+            <?php endforeach ?>
+        </select>
+    </div>
+    <h2>Kint PHP debugging tool - overview</h2>
+</div>
+<h3>Debug variables</h3>
+<?php
+    $userManager->debugUser($user);
+    d($userManager, $tabularData);
+    d($nestedArray);
+?>
+<h3>Trace</h3>
+<?php $userManager->ensureUser(); ?>
+</body>
+</html>
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/classmethods.php b/kint/kint/parsers/custom/classmethods.php
new file mode 100644
index 0000000..7b6e949
--- /dev/null
+++ b/kint/kint/parsers/custom/classmethods.php
@@ -0,0 +1,153 @@
+<?php
+
+class Kint_Parsers_ClassMethods extends kintParser
+{
+	private static $cache = array();
+
+	protected function _parse( &$variable )
+	{
+		if ( !is_object( $variable ) ) return false;
+
+		$className = get_class( $variable );
+
+		# assuming class definition will not change inside one request
+		if ( !isset( self::$cache[$className] ) ) {
+			$reflection = new \ReflectionClass( $variable );
+
+			$public = $private = $protected = array();
+
+			// Class methods
+			foreach ( $reflection->getMethods() as $method ) {
+				$params = array();
+
+				// Access type
+				$access = implode( ' ', \Reflection::getModifierNames( $method->getModifiers() ) );
+
+				// Method parameters
+				foreach ( $method->getParameters() as $param ) {
+					$paramString = '';
+
+					if ( $param->isArray() ) {
+						$paramString .= 'array ';
+					} else {
+						try {
+							if ( $paramClassName = $param->getClass() ) {
+								$paramString .= $paramClassName->name . ' ';
+							}
+						} catch ( ReflectionException $e ) {
+							preg_match( '/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches );
+							$paramClassName = isset( $matches[1] ) ? $matches[1] : '';
+
+							$paramString .= ' UNDEFINED CLASS (' . $paramClassName . ') ';
+						}
+					}
+
+					$paramString .= ( $param->isPassedByReference() ? '&' : '' ) . '$' . $param->getName();
+
+					if ( $param->isDefaultValueAvailable() ) {
+						if ( is_array( $param->getDefaultValue() ) ) {
+							$arrayValues = array();
+							foreach ( $param->getDefaultValue() as $key => $value ) {
+								$arrayValues[] = $key . ' => ' . $value;
+							}
+
+							$defaultValue = 'array(' . implode( ', ', $arrayValues ) . ')';
+						} elseif ( $param->getDefaultValue() === null ) {
+							$defaultValue = 'NULL';
+						} elseif ( $param->getDefaultValue() === false ) {
+							$defaultValue = 'false';
+						} elseif ( $param->getDefaultValue() === true ) {
+							$defaultValue = 'true';
+						} elseif ( $param->getDefaultValue() === '' ) {
+							$defaultValue = '""';
+						} else {
+							$defaultValue = $param->getDefaultValue();
+						}
+
+						$paramString .= ' = ' . $defaultValue;
+					}
+
+					$params[] = $paramString;
+				}
+
+				$output = new kintVariableData;
+
+				// Simple DocBlock parser, look for @return
+				if ( ( $docBlock = $method->getDocComment() ) ) {
+					$matches = array();
+					if ( preg_match_all( '/@(\w+)\s+(.*)\r?\n/m', $docBlock, $matches ) ) {
+						$lines = array_combine( $matches[1], $matches[2] );
+						if ( isset( $lines['return'] ) ) {
+							$output->operator = '->';
+							# since we're outputting code, assumption that the string is utf8 is most likely correct
+							# and saves resources
+							$output->type = self::_escape( $lines['return'], 'UTF-8' );
+						}
+					}
+				}
+
+				$output->name   = ( $method->returnsReference() ? '&' : '' ) . $method->getName() . '('
+					. implode( ', ', $params ) . ')';
+				$output->access = $access;
+
+				if ( is_string( $docBlock ) ) {
+					$lines = array();
+					foreach ( explode( "\n", $docBlock ) as $line ) {
+						$line = trim( $line );
+
+						if ( in_array( $line, array( '/**', '/*', '*/' ) ) ) {
+							continue;
+						} elseif ( strpos( $line, '*' ) === 0 ) {
+							$line = substr( $line, 1 );
+						}
+
+						$lines[] = self::_escape( trim( $line ), 'UTF-8' );
+					}
+
+					$output->extendedValue = implode( "\n", $lines ) . "\n\n";
+				}
+
+				$declaringClass     = $method->getDeclaringClass();
+				$declaringClassName = $declaringClass->getName();
+
+				if ( $declaringClassName !== $className ) {
+					$output->extendedValue .= "<small>Inherited from <i>{$declaringClassName}</i></small>\n";
+				}
+
+				$fileName = \Kint::shortenPath( $method->getFileName(), $method->getStartLine() );
+
+				if ( $fileName ) {
+					$output->extendedValue .= "<small>Defined in {$fileName}</small>";
+				}
+
+				$sortName = $access . $method->getName();
+
+				if ( $method->isPrivate() ) {
+					$private[$sortName] = $output;
+				} elseif ( $method->isProtected() ) {
+					$protected[$sortName] = $output;
+				} else {
+					$public[$sortName] = $output;
+				}
+			}
+
+			if ( !$private && !$protected && !$public ) {
+				self::$cache[$className] = false;
+			}
+
+			ksort( $public );
+			ksort( $protected );
+			ksort( $private );
+
+			self::$cache[$className] = $public + $protected + $private;
+		}
+
+		if ( count( self::$cache[$className] ) === 0 ) {
+			return false;
+		}
+
+		$this->value = self::$cache[$className];
+		$this->type  = 'Available methods';
+		$this->size  = count( self::$cache[$className] );
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/classstatics.php b/kint/kint/parsers/custom/classstatics.php
new file mode 100644
index 0000000..1c6d0e4
--- /dev/null
+++ b/kint/kint/parsers/custom/classstatics.php
@@ -0,0 +1,54 @@
+<?php
+class Kint_Parsers_ClassStatics extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_object( $variable ) ) return false;
+
+		$extendedValue = array();
+
+		$reflection = new ReflectionClass( $variable );
+		// first show static values
+		foreach ( $reflection->getProperties( ReflectionProperty::IS_STATIC ) as $property ) {
+			if ( $property->isPrivate() ) {
+				if ( !method_exists( $property, 'setAccessible' ) ) {
+					break;
+				}
+				$property->setAccessible( true );
+				$access = "private";
+			} elseif ( $property->isProtected() ) {
+				$property->setAccessible( true );
+				$access = "protected";
+			} else {
+				$access = 'public';
+			}
+
+			if ( Kint::$keyFilterCallback
+				&& call_user_func( Kint::$keyFilterCallback, $property->getName(), $property->getValue() ) === false
+			) {
+				continue;
+			}
+
+			$_      = $property->getValue();
+			$output = kintParser::factory( $_, '$' . $property->getName() );
+
+			$output->access   = $access;
+			$output->operator = '::';
+			$extendedValue[]  = $output;
+		}
+
+		foreach ( $reflection->getConstants() as $constant => $val ) {
+			$output = kintParser::factory( $val, $constant );
+
+			$output->access   = 'constant';
+			$output->operator = '::';
+			$extendedValue[]  = $output;
+		}
+
+		if ( empty( $extendedValue ) ) return false;
+
+		$this->value = $extendedValue;
+		$this->type  = 'Static class properties';
+		$this->size  = count( $extendedValue );
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/color.php b/kint/kint/parsers/custom/color.php
new file mode 100644
index 0000000..7e5c211
--- /dev/null
+++ b/kint/kint/parsers/custom/color.php
@@ -0,0 +1,400 @@
+<?php
+class Kint_Parsers_Color extends kintParser
+{
+	private static $_css3Named = array(
+		'aliceblue'=>'#f0f8ff','antiquewhite'=>'#faebd7','aqua'=>'#00ffff','aquamarine'=>'#7fffd4','azure'=>'#f0ffff',
+		'beige'=>'#f5f5dc','bisque'=>'#ffe4c4','black'=>'#000000','blanchedalmond'=>'#ffebcd','blue'=>'#0000ff',
+		'blueviolet'=>'#8a2be2','brown'=>'#a52a2a','burlywood'=>'#deb887','cadetblue'=>'#5f9ea0','chartreuse'=>'#7fff00',
+		'chocolate'=>'#d2691e','coral'=>'#ff7f50','cornflowerblue'=>'#6495ed','cornsilk'=>'#fff8dc','crimson'=>'#dc143c',
+		'cyan'=>'#00ffff','darkblue'=>'#00008b','darkcyan'=>'#008b8b','darkgoldenrod'=>'#b8860b','darkgray'=>'#a9a9a9',
+		'darkgrey'=>'#a9a9a9','darkgreen'=>'#006400','darkkhaki'=>'#bdb76b','darkmagenta'=>'#8b008b',
+		'darkolivegreen'=>'#556b2f','darkorange'=>'#ff8c00','darkorchid'=>'#9932cc','darkred'=>'#8b0000',
+		'darksalmon'=>'#e9967a','darkseagreen'=>'#8fbc8f','darkslateblue'=>'#483d8b','darkslategray'=>'#2f4f4f',
+		'darkslategrey'=>'#2f4f4f','darkturquoise'=>'#00ced1','darkviolet'=>'#9400d3','deeppink'=>'#ff1493',
+		'deepskyblue'=>'#00bfff','dimgray'=>'#696969','dimgrey'=>'#696969','dodgerblue'=>'#1e90ff',
+		'firebrick'=>'#b22222','floralwhite'=>'#fffaf0','forestgreen'=>'#228b22','fuchsia'=>'#ff00ff',
+		'gainsboro'=>'#dcdcdc','ghostwhite'=>'#f8f8ff','gold'=>'#ffd700','goldenrod'=>'#daa520','gray'=>'#808080',
+		'grey'=>'#808080','green'=>'#008000','greenyellow'=>'#adff2f','honeydew'=>'#f0fff0','hotpink'=>'#ff69b4',
+		'indianred'=>'#cd5c5c','indigo'=>'#4b0082','ivory'=>'#fffff0','khaki'=>'#f0e68c','lavender'=>'#e6e6fa',
+		'lavenderblush'=>'#fff0f5','lawngreen'=>'#7cfc00','lemonchiffon'=>'#fffacd','lightblue'=>'#add8e6',
+		'lightcoral'=>'#f08080','lightcyan'=>'#e0ffff','lightgoldenrodyellow'=>'#fafad2','lightgray'=>'#d3d3d3',
+		'lightgrey'=>'#d3d3d3','lightgreen'=>'#90ee90','lightpink'=>'#ffb6c1','lightsalmon'=>'#ffa07a',
+		'lightseagreen'=>'#20b2aa','lightskyblue'=>'#87cefa','lightslategray'=>'#778899','lightslategrey'=>'#778899',
+		'lightsteelblue'=>'#b0c4de','lightyellow'=>'#ffffe0','lime'=>'#00ff00','limegreen'=>'#32cd32','linen'=>'#faf0e6',
+		'magenta'=>'#ff00ff','maroon'=>'#800000','mediumaquamarine'=>'#66cdaa','mediumblue'=>'#0000cd',
+		'mediumorchid'=>'#ba55d3','mediumpurple'=>'#9370d8','mediumseagreen'=>'#3cb371','mediumslateblue'=>'#7b68ee',
+		'mediumspringgreen'=>'#00fa9a','mediumturquoise'=>'#48d1cc','mediumvioletred'=>'#c71585',
+		'midnightblue'=>'#191970','mintcream'=>'#f5fffa','mistyrose'=>'#ffe4e1','moccasin'=>'#ffe4b5',
+		'navajowhite'=>'#ffdead','navy'=>'#000080','oldlace'=>'#fdf5e6','olive'=>'#808000','olivedrab'=>'#6b8e23',
+		'orange'=>'#ffa500','orangered'=>'#ff4500','orchid'=>'#da70d6','palegoldenrod'=>'#eee8aa','palegreen'=>'#98fb98',
+		'paleturquoise'=>'#afeeee','palevioletred'=>'#d87093','papayawhip'=>'#ffefd5','peachpuff'=>'#ffdab9',
+		'peru'=>'#cd853f','pink'=>'#ffc0cb','plum'=>'#dda0dd','powderblue'=>'#b0e0e6','purple'=>'#800080',
+		'red'=>'#ff0000','rosybrown'=>'#bc8f8f','royalblue'=>'#4169e1','saddlebrown'=>'#8b4513','salmon'=>'#fa8072',
+		'sandybrown'=>'#f4a460','seagreen'=>'#2e8b57','seashell'=>'#fff5ee','sienna'=>'#a0522d','silver'=>'#c0c0c0',
+		'skyblue'=>'#87ceeb','slateblue'=>'#6a5acd','slategray'=>'#708090','slategrey'=>'#708090','snow'=>'#fffafa',
+		'springgreen'=>'#00ff7f','steelblue'=>'#4682b4','tan'=>'#d2b48c','teal'=>'#008080','thistle'=>'#d8bfd8',
+		'tomato'=>'#ff6347','turquoise'=>'#40e0d0','violet'=>'#ee82ee','wheat'=>'#f5deb3','white'=>'#ffffff',
+		'whitesmoke'=>'#f5f5f5','yellow'=>'#ffff00','yellowgreen'=>'#9acd32'
+	);
+
+
+	protected function _parse( & $variable )
+	{
+		if ( !self::_fits( $variable ) ) return false;
+
+		$this->type  = 'CSS color';
+		$variants    = self::_convert( $variable );
+		$this->value =
+			"<div style=\"background:{$variable}\" class=\"kint-color-preview\">{$variable}</div>"
+			. "<strong>hex :</strong> {$variants['hex']}\n"
+			. "<strong>rgb :</strong> {$variants['rgb']}\n"
+			. ( isset( $variants['name'] ) ? "<strong>name:</strong> {$variants['name']}\n" : '' )
+			. "<strong>hsl :</strong> {$variants['hsl']}";
+	}
+
+
+	private static function _fits( $variable )
+	{
+		if ( !is_string( $variable ) ) return false;
+
+		$var = strtolower( trim( $variable ) );
+
+		return isset( self::$_css3Named[$var] )
+			|| preg_match(
+				'/^(?:#[0-9A-Fa-f]{3}|#[0-9A-Fa-f]{6}|(?:rgb|hsl)a?\s*\((?:\s*[0-9.%]+\s*,?){3,4}\))$/',
+				$var
+			);
+	}
+
+	private static function _convert( $color )
+	{
+		$color         = strtolower( $color );
+		$decimalColors = array();
+		$variants      = array(
+			'hex'   => null,
+			'rgb'   => null,
+			'name'  => null,
+			'hsl'   => null,
+		);
+
+		if ( isset( self::$_css3Named[$color] ) ) {
+			$variants['name'] = $color;
+			$color            = self::$_css3Named[$color];
+		}
+
+		if ( $color{0} === '#' ) {
+			$variants['hex'] = $color;
+			$color           = substr( $color, 1 );
+			if ( strlen( $color ) === 6 ) {
+				$colors = str_split( $color, 2 );
+			} else {
+				$colors = array(
+					$color{0} . $color{0},
+					$color{1} . $color{1},
+					$color{2} . $color{2},
+				);
+			}
+
+			$decimalColors = array_map( 'hexdec', $colors );
+		} elseif ( substr( $color, 0, 3 ) === 'rgb' ) {
+			$variants['rgb'] = $color;
+			preg_match_all( '#([0-9.%]+)#', $color, $matches );
+			$decimalColors = $matches[1];
+			foreach ( $decimalColors as &$color ) {
+				if ( strpos( $color, '%' ) !== false ) {
+					$color = str_replace( '%', '', $color ) * 2.55;
+				}
+			}
+
+
+		} elseif ( substr( $color, 0, 3 ) === 'hsl' ) {
+			$variants['hsl'] = $color;
+			preg_match_all( '#([0-9.%]+)#', $color, $matches );
+
+			$colors = $matches[1];
+			$colors[0] /= 360;
+			$colors[1] = str_replace( '%', '', $colors[1] ) / 100;
+			$colors[2] = str_replace( '%', '', $colors[2] ) / 100;
+
+			$decimalColors = self::_HSLtoRGB( $colors );
+			if ( isset( $colors[3] ) ) {
+				$decimalColors[] = $colors[3];
+			}
+		}
+
+		if ( isset( $decimalColors[3] ) ) {
+			$alpha = $decimalColors[3];
+			unset( $decimalColors[3] );
+		} else {
+			$alpha = null;
+		}
+		foreach ( $variants as $type => &$variant ) {
+			if ( isset( $variant ) ) continue;
+
+			switch ( $type ) {
+				case 'hex':
+					$variant = '#';
+					foreach ( $decimalColors as &$color ) {
+						$variant .= str_pad( dechex( $color ), 2, "0", STR_PAD_LEFT );
+					}
+					$variant .= isset( $alpha ) ? ' (alpha omitted)' : '';
+					break;
+				case 'rgb':
+					$rgb = $decimalColors;
+					if ( isset( $alpha ) ) {
+						$rgb[] = $alpha;
+						$a     = 'a';
+					} else {
+						$a = '';
+					}
+					$variant = "rgb{$a}( " . implode( ', ', $rgb ) . " )";
+					break;
+				case 'hsl':
+					$rgb = self::_RGBtoHSL( $decimalColors );
+					if ( $rgb === null ) {
+						unset( $variants[$type] );
+						break;
+					}
+					if ( isset( $alpha ) ) {
+						$rgb[] = $alpha;
+						$a     = 'a';
+					} else {
+						$a = '';
+					}
+
+					$variant = "hsl{$a}( " . implode( ', ', $rgb ) . " )";
+					break;
+				case 'name':
+					// [!] name in initial variants array must go after hex
+					if ( ( $key = array_search( $variants['hex'], self::$_css3Named, true ) ) !== false ) {
+						$variant = $key;
+					} else {
+						unset( $variants[$type] );
+					}
+					break;
+			}
+
+		}
+
+		return $variants;
+	}
+
+
+	private static function _HSLtoRGB( array $hsl )
+	{
+		list( $h, $s, $l ) = $hsl;
+		$m2 = ( $l <= 0.5 ) ? $l * ( $s + 1 ) : $l + $s - $l * $s;
+		$m1 = $l * 2 - $m2;
+		return array(
+			round( self::_hue2rgb( $m1, $m2, $h + 0.33333 ) * 255 ),
+			round( self::_hue2rgb( $m1, $m2, $h ) * 255 ),
+			round( self::_hue2rgb( $m1, $m2, $h - 0.33333 ) * 255 ),
+		);
+	}
+
+
+	/**
+	 * Helper function for _color_hsl2rgb().
+	 */
+	private static function _hue2rgb( $m1, $m2, $h )
+	{
+		$h = ( $h < 0 ) ? $h + 1 : ( ( $h > 1 ) ? $h - 1 : $h );
+		if ( $h * 6 < 1 ) return $m1 + ( $m2 - $m1 ) * $h * 6;
+		if ( $h * 2 < 1 ) return $m2;
+		if ( $h * 3 < 2 ) return $m1 + ( $m2 - $m1 ) * ( 0.66666 - $h ) * 6;
+		return $m1;
+	}
+
+
+	private static function _RGBtoHSL( array $rgb )
+	{
+		list( $clrR, $clrG, $clrB ) = $rgb;
+
+		$clrMin   = min( $clrR, $clrG, $clrB );
+		$clrMax   = max( $clrR, $clrG, $clrB );
+		$deltaMax = $clrMax - $clrMin;
+
+		$L = ( $clrMax + $clrMin ) / 510;
+
+		if ( 0 == $deltaMax ) {
+			$H = 0;
+			$S = 0;
+		} else {
+			if ( 0.5 > $L ) {
+				$S = $deltaMax / ( $clrMax + $clrMin );
+			} else {
+				$S = $deltaMax / ( 510 - $clrMax - $clrMin );
+			}
+
+			if ( $clrMax == $clrR ) {
+				$H = ( $clrG - $clrB ) / ( 6.0 * $deltaMax );
+			} else if ( $clrMax == $clrG ) {
+				$H = 1 / 3 + ( $clrB - $clrR ) / ( 6.0 * $deltaMax );
+			} else {
+				$H = 2 / 3 + ( $clrR - $clrG ) / ( 6.0 * $deltaMax );
+			}
+
+			if ( 0 > $H ) $H += 1;
+			if ( 1 < $H ) $H -= 1;
+		}
+		return array(
+			round( $H * 360 ),
+			round( $S * 100 ) . '%',
+			round( $L * 100 ) . '%'
+		);
+
+	}
+}
+
+/* *************
+ * TEST DATA
+ *
+dd(array(
+'hsl(0,  100%,50%)',
+'hsl(30, 100%,50%)',
+'hsl(60, 100%,50%)',
+'hsl(90, 100%,50%)',
+'hsl(120,100%,50%)',
+'hsl(150,100%,50%)',
+'hsl(180,100%,50%)',
+'hsl(210,100%,50%)',
+'hsl(240,100%,50%)',
+'hsl(270,100%,50%)',
+'hsl(300,100%,50%)',
+'hsl(330,100%,50%)',
+'hsl(360,100%,50%)',
+'hsl(120,100%,25%)',
+'hsl(120,100%,50%)',
+'hsl(120,100%,75%)',
+'hsl(120,100%,50%)',
+'hsl(120, 67%,50%)',
+'hsl(120, 33%,50%)',
+'hsl(120,  0%,50%)',
+'hsl(120, 60%,70%)',
+'#f03',
+'#F03',
+'#ff0033',
+'#FF0033',
+'rgb(255,0,51)',
+'rgb(255, 0, 51)',
+'rgb(100%,0%,20%)',
+'rgb(100%, 0%, 20%)',
+'hsla(240,100%,50%,0.05)',
+'hsla(240,100%,50%, 0.4)',
+'hsla(240,100%,50%, 0.7)',
+'hsla(240,100%,50%,   1)',
+'rgba(255,0,0,0.1)',
+'rgba(255,0,0,0.4)',
+'rgba(255,0,0,0.7)',
+'rgba(255,0,0,  1)',
+'black',
+'silver',
+'gray',
+'white',
+'maroon',
+'red',
+'purple',
+'fuchsia',
+'green',
+'lime',
+'olive',
+'yellow',
+'navy',
+'blue',
+'teal',
+'aqua',
+'orange',
+'aliceblue',
+'antiquewhite',
+'aquamarine',
+'azure',
+'beige',
+'bisque',
+'blanchedalmond',
+'blueviolet',
+'brown',
+'burlywood',
+'cadetblue',
+'chartreuse',
+'chocolate',
+'coral',
+'cornflowerblue',
+'cornsilk',
+'crimson',
+'darkblue',
+'darkcyan',
+'darkgoldenrod',
+'darkgray',
+'darkgreen',
+'darkgrey',
+'darkkhaki',
+'darkmagenta',
+'darkolivegreen',
+'darkorange',
+'darkorchid',
+'darkred',
+'darksalmon',
+'darkseagreen',
+'darkslateblue',
+'darkslategray',
+'darkslategrey',
+'darkturquoise',
+'darkviolet',
+'deeppink',
+'deepskyblue',
+'dimgray',
+'dimgrey',
+'dodgerblue',
+'firebrick',
+'floralwhite',
+'forestgreen',
+'gainsboro',
+'ghostwhite',
+'gold',
+'goldenrod',
+'greenyellow',
+'grey',
+'honeydew',
+'hotpink',
+'indianred',
+'indigo',
+'ivory',
+'khaki',
+'lavender',
+'lavenderblush',
+'lawngreen',
+'lemonchiffon',
+'lightblue',
+'lightcoral',
+'lightcyan',
+'lightgoldenrodyellow',
+'lightgray',
+'lightgreen',
+'lightgrey',
+'lightpink',
+'lightsalmon',
+'lightseagreen',
+'lightskyblue',
+'lightslategray',
+'lightslategrey',
+'lightsteelblue',
+'lightyellow',
+'limegreen',
+'linen',
+'mediumaquamarine',
+'mediumblue',
+'mediumorchid',
+'mediumpurple',
+'mediumseagreen',
+'mediumslateblue',
+'mediumspringgreen',
+'mediumturquoise',
+'mediumvioletred',
+'midnightblue',
+'mintcream',
+'mistyrose',
+'moccasin',
+'navajowhite',
+'oldlace',
+'olivedrab',
+));*/
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/fspath.php b/kint/kint/parsers/custom/fspath.php
new file mode 100644
index 0000000..0425cc7
--- /dev/null
+++ b/kint/kint/parsers/custom/fspath.php
@@ -0,0 +1,67 @@
+<?php
+class Kint_Parsers_FsPath extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_string( $variable )
+			|| strlen( $variable ) > 2048
+			|| preg_match( '[[:?<>"*|]]', $variable )
+			|| !@is_readable( $variable ) # f@#! PHP and its random warnings
+		) return false;
+
+		try {
+			$fileInfo = new \SplFileInfo( $variable );
+			$flags    = array();
+			$perms    = $fileInfo->getPerms();
+
+			if ( ( $perms & 0xC000 ) === 0xC000 ) {
+				$type    = 'File socket';
+				$flags[] = 's';
+			} elseif ( ( $perms & 0xA000 ) === 0xA000 ) {
+				$type    = 'File symlink';
+				$flags[] = 'l';
+			} elseif ( ( $perms & 0x8000 ) === 0x8000 ) {
+				$type    = 'File';
+				$flags[] = '-';
+			} elseif ( ( $perms & 0x6000 ) === 0x6000 ) {
+				$type    = 'Block special file';
+				$flags[] = 'b';
+			} elseif ( ( $perms & 0x4000 ) === 0x4000 ) {
+				$type    = 'Directory';
+				$flags[] = 'd';
+			} elseif ( ( $perms & 0x2000 ) === 0x2000 ) {
+				$type    = 'Character special file';
+				$flags[] = 'c';
+			} elseif ( ( $perms & 0x1000 ) === 0x1000 ) {
+				$type    = 'FIFO pipe file';
+				$flags[] = 'p';
+			} else {
+				$type    = 'Unknown file';
+				$flags[] = 'u';
+			}
+
+			// owner
+			$flags[] = ( ( $perms & 0x0100 ) ? 'r' : '-' );
+			$flags[] = ( ( $perms & 0x0080 ) ? 'w' : '-' );
+			$flags[] = ( ( $perms & 0x0040 ) ? ( ( $perms & 0x0800 ) ? 's' : 'x' ) : ( ( $perms & 0x0800 ) ? 'S' : '-' ) );
+
+			// group
+			$flags[] = ( ( $perms & 0x0020 ) ? 'r' : '-' );
+			$flags[] = ( ( $perms & 0x0010 ) ? 'w' : '-' );
+			$flags[] = ( ( $perms & 0x0008 ) ? ( ( $perms & 0x0400 ) ? 's' : 'x' ) : ( ( $perms & 0x0400 ) ? 'S' : '-' ) );
+
+			// world
+			$flags[] = ( ( $perms & 0x0004 ) ? 'r' : '-' );
+			$flags[] = ( ( $perms & 0x0002 ) ? 'w' : '-' );
+			$flags[] = ( ( $perms & 0x0001 ) ? ( ( $perms & 0x0200 ) ? 't' : 'x' ) : ( ( $perms & 0x0200 ) ? 'T' : '-' ) );
+
+			$this->type  = $type;
+			$this->size  = sprintf( '%.2fK', $fileInfo->getSize() / 1024 );
+			$this->value = implode( $flags );
+
+		} catch ( Exception $e ) {
+			return false;
+		}
+
+	}
+}
diff --git a/kint/kint/parsers/custom/json.php b/kint/kint/parsers/custom/json.php
new file mode 100644
index 0000000..0327468
--- /dev/null
+++ b/kint/kint/parsers/custom/json.php
@@ -0,0 +1,17 @@
+<?php
+class Kint_Parsers_Json extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_string( $variable )
+			|| !isset( $variable{0} ) || ( $variable{0} !== '{' && $variable{0} !== '[' )
+			|| ( $json = json_decode( $variable ) ) === null
+		) return false;
+
+		$val = (array)$json;
+		if ( empty( $val ) ) return false;
+
+		$this->value = kintParser::factory( $val )->extendedValue;
+		$this->type  = 'JSON';
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/microtime.php b/kint/kint/parsers/custom/microtime.php
new file mode 100644
index 0000000..3251b7d
--- /dev/null
+++ b/kint/kint/parsers/custom/microtime.php
@@ -0,0 +1,55 @@
+<?php
+class Kint_Parsers_Microtime extends kintParser
+{
+	private static $_times = array();
+	private static $_laps = array();
+
+	protected function _parse( & $variable )
+	{
+		if ( !is_string( $variable ) || !preg_match( '[0\.[0-9]{8} [0-9]{10}]', $variable ) ) {
+			return false;
+		}
+
+		list( $usec, $sec ) = explode( " ", $variable );
+
+		$time = (float) $usec + (float) $sec;
+		$size = memory_get_usage( true );
+
+		# '@' is used to prevent the dreaded timezone not set error
+		$this->value = @date( 'Y-m-d H:i:s', $sec ) . '.' . substr( $usec, 2, 4 );
+
+		$numberOfCalls = count( self::$_times );
+		if ( $numberOfCalls > 0 ) { # meh, faster than count($times) > 1
+			$lap           = $time - end( self::$_times );
+			self::$_laps[] = $lap;
+
+			$this->value .= "\n<b>SINCE LAST CALL:</b> <b class=\"kint-microtime\">" . round( $lap, 4 ) . '</b>s.';
+			if ( $numberOfCalls > 1 ) {
+				$this->value .= "\n<b>SINCE START:</b> " . round( $time - self::$_times[0], 4 ) . 's.';
+				$this->value .= "\n<b>AVERAGE DURATION:</b> "
+					. round( array_sum( self::$_laps ) / $numberOfCalls, 4 ) . 's.';
+			}
+		}
+
+		$unit = array( 'B', 'KB', 'MB', 'GB', 'TB' );
+		$this->value .= "\n<b>MEMORY USAGE:</b> " . $size . " bytes ("
+			. round( $size / pow( 1024, ( $i = floor( log( $size, 1024 ) ) ) ), 3 ) . ' ' . $unit[$i] . ")";
+
+		self::$_times[] = $time;
+		$this->type     = 'Stats';
+	}
+
+	/*
+	function test() {
+		d( 'start', microtime() );
+		for ( $i = 0; $i < 10; $i++ ) {
+			d(
+				$duration = mt_rand( 0, 200000 ), // the reported duration will be larger because of Kint overhead
+				usleep( $duration ),
+				microtime()
+	        );
+		}
+		dd(  );
+	}
+	 */
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/objectiterateable.php b/kint/kint/parsers/custom/objectiterateable.php
new file mode 100644
index 0000000..d307e94
--- /dev/null
+++ b/kint/kint/parsers/custom/objectiterateable.php
@@ -0,0 +1,15 @@
+<?php
+
+class Kint_Parsers_objectIterateable extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_object( $variable ) || !$variable instanceof Traversable ) return false;
+
+
+		$arrayCopy   = iterator_to_array( $variable, true );
+		$this->value = kintParser::factory( $arrayCopy )->extendedValue;
+		$this->type  = 'Iterator contents';
+		$this->size  = count( $arrayCopy );
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/splfileinfo.php b/kint/kint/parsers/custom/splfileinfo.php
new file mode 100644
index 0000000..6338141
--- /dev/null
+++ b/kint/kint/parsers/custom/splfileinfo.php
@@ -0,0 +1,13 @@
+<?php
+class Kint_Parsers_SplFileInfo extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_object( $variable ) || !$variable instanceof SplFileInfo ) return false;
+
+		$this->type    = 'object';
+		$this->subtype = 'SplFileInfo';
+		$realPath      = $variable->getRealPath();
+		$this->value   = Kint::shortenPath( $realPath ) . " ( {$realPath} )";
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/splobjectstorage.php b/kint/kint/parsers/custom/splobjectstorage.php
new file mode 100644
index 0000000..c355771
--- /dev/null
+++ b/kint/kint/parsers/custom/splobjectstorage.php
@@ -0,0 +1,20 @@
+<?php
+class Kint_Parsers_SplObjectStorage extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		if ( !is_object( $variable ) || get_class( $variable ) !== 'SplObjectStorage' ) return false;
+
+		/** @var $variable SplObjectStorage */
+
+		$variable->rewind();
+		while ( $variable->valid() ) {
+			$current       = $variable->current();
+			$this->value[] = kintParser::factory( $current );
+			$variable->next();
+		}
+
+		$this->type = 'Storage contents';
+		$this->size = $variable->count();
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/timestamp.php b/kint/kint/parsers/custom/timestamp.php
new file mode 100644
index 0000000..4c5f487
--- /dev/null
+++ b/kint/kint/parsers/custom/timestamp.php
@@ -0,0 +1,22 @@
+<?php
+class Kint_Parsers_Timestamp extends kintParser
+{
+	private static function _fits( $variable )
+	{
+		if ( !is_string( $variable ) && !is_int( $variable ) ) return false;
+
+		$len = strlen( (int)$variable );
+		return ( $len === 9 || $len === 10 ) // a little naive
+			&& ( (string)(int)$variable == $variable );
+	}
+
+
+	protected function _parse( & $variable )
+	{
+		if ( !self::_fits( $variable ) ) return false;
+
+		$this->type = 'timestamp';
+		# avoid dreaded "Timezone must be set" error
+		$this->value = @date( 'Y-m-d H:i:s', $variable );
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/custom/xml.php b/kint/kint/parsers/custom/xml.php
new file mode 100644
index 0000000..50d0def
--- /dev/null
+++ b/kint/kint/parsers/custom/xml.php
@@ -0,0 +1,18 @@
+<?php
+class Kint_Parsers_Xml extends kintParser
+{
+	protected function _parse( & $variable )
+	{
+		try {
+			if ( !is_string( $variable )
+				|| substr( $variable, 0, 5 ) !== '<?xml'
+				|| ( $xml = simplexml_load_string( $variable ) ) === null
+			) return false;
+		} catch ( Exception $e ) {
+			return false;
+		}
+
+		$this->value = kintParser::factory( $xml )->extendedValue;
+		$this->type  = 'XML';
+	}
+}
\ No newline at end of file
diff --git a/kint/kint/parsers/objects/smarty.php b/kint/kint/parsers/objects/smarty.php
new file mode 100644
index 0000000..b30937c
--- /dev/null
+++ b/kint/kint/parsers/objects/smarty.php
@@ -0,0 +1,32 @@
+<?php
+class Kint_Objects_Smarty extends KintObject
+{
+	public function parse( & $variable )
+	{
+		if ( !$variable instanceof Smarty
+			|| !defined( 'Smarty::SMARTY_VERSION' ) # lower than 3.x
+		) return false;
+
+
+		$this->name = 'object Smarty (v' . substr( Smarty::SMARTY_VERSION, 7 ) . ')'; # trim 'Smarty-'
+
+		$assigned = $globalAssigns = array();
+		foreach ( $variable->tpl_vars as $name => $var ) {
+			$assigned[$name] = $var->value;
+		}
+		foreach ( Smarty::$global_tpl_vars as $name => $var ) {
+			if ( $name === 'SCRIPT_NAME' ) continue;
+
+			$globalAssigns[$name] = $var->value;
+		}
+
+		return array(
+			'Assigned'          => $assigned,
+			'Assigned globally' => $globalAssigns,
+			'Configuration'     => array(
+				'Compiled files stored in' => $variable->compile_dir,
+			)
+		);
+
+	}
+}
diff --git a/kint/kint/parsers/parser.class.php b/kint/kint/parsers/parser.class.php
new file mode 100644
index 0000000..5a83691
--- /dev/null
+++ b/kint/kint/parsers/parser.class.php
@@ -0,0 +1,698 @@
+<?php
+abstract class kintParser extends kintVariableData
+{
+	private static $_level = 0;
+	private static $_customDataTypes;
+	private static $_objectParsers;
+	private static $_objects;
+	private static $_marker;
+
+	private static $_skipAlternatives = false;
+
+
+	private static function _init()
+	{
+		$fh = opendir( KINT_DIR . 'parsers/custom/' );
+		while ( $fileName = readdir( $fh ) ) {
+			if ( substr( $fileName, -4 ) !== '.php' ) continue;
+
+			require KINT_DIR . 'parsers/custom/' . $fileName;
+			self::$_customDataTypes[] = substr( $fileName, 0, -4 );
+		}
+		$fh = opendir( KINT_DIR . 'parsers/objects/' );
+		while ( $fileName = readdir( $fh ) ) {
+			if ( substr( $fileName, -4 ) !== '.php' ) continue;
+
+			require KINT_DIR . 'parsers/objects/' . $fileName;
+			self::$_objectParsers[] = substr( $fileName, 0, -4 );
+		}
+	}
+
+	public static function reset()
+	{
+		self::$_level   = 0;
+		self::$_objects = self::$_marker = null;
+	}
+
+	/**
+	 * main and usually single method a custom parser must implement
+	 *
+	 * @param mixed $variable
+	 *
+	 * @return mixed [!!!] false is returned if the variable is not of current type
+	 */
+	abstract protected function _parse( & $variable );
+
+
+	/**
+	 * the only public entry point to return a parsed representation of a variable
+	 *
+	 * @static
+	 *
+	 * @param      $variable
+	 * @param null $name
+	 *
+	 * @throws Exception
+	 * @return \kintParser
+	 */
+	public final static function factory( & $variable, $name = null )
+	{
+		isset( self::$_customDataTypes ) or self::_init();
+
+		# save internal data to revert after dumping to properly handle recursions etc
+		$revert = array(
+			'level'   => self::$_level,
+			'objects' => self::$_objects,
+		);
+
+		self::$_level++;
+
+		$name          = self::_escape( $name );
+		$varData       = new kintVariableData;
+		$varData->name = $name;
+
+		# first parse the variable based on its type
+		$varType = gettype( $variable );
+		$varType === 'unknown type' and $varType = 'unknown'; # PHP 5.4 inconsistency
+		$methodName = '_parse_' . $varType;
+
+		# objects can be presented in a different way altogether, INSTEAD, not ALONGSIDE the generic parser
+		if ( $varType === 'object' ) {
+			foreach ( self::$_objectParsers as $parserClass ) {
+				$className = 'Kint_Objects_' . $parserClass;
+
+				/** @var $object KintObject */
+				$object = new $className;
+				if ( ( $alternatives = $object->parse( $variable ) ) !== false ) {
+					self::$_skipAlternatives  = true;
+					$alternativeDisplay       = new kintVariableData;
+					$alternativeDisplay->type = $object->name;
+
+					foreach ( $alternatives as $name => $values ) {
+						$alternative       = kintParser::factory( $values );
+						$alternative->type = $name;
+						if ( Kint::$mode === 'text' || Kint::$mode === 'cli' ) {
+							$alternativeDisplay->extendedValue[] = $alternative;
+						} else {
+							empty( $alternative->value ) and $alternative->value = $alternative->extendedValue;
+							$alternativeDisplay->_alternatives[] = $alternative;
+						}
+					}
+
+					self::$_skipAlternatives = false;
+					return $alternativeDisplay;
+				}
+			}
+		}
+
+		# base type parser returning false means "stop processing further": e.g. recursion
+		if ( self::$methodName( $variable, $varData ) === false ) {
+			self::$_level--;
+			return $varData;
+		}
+
+		if ( Kint::$mode === 'rich' && !self::$_skipAlternatives ) {
+			# if an alternative returns something that can be represented in an alternative way, don't :)
+			self::$_skipAlternatives = true;
+
+			# now check whether the variable can be represented in a different way
+			foreach ( self::$_customDataTypes as $parserClass ) {
+				$className = 'Kint_Parsers_' . $parserClass;
+
+				/** @var $parser kintParser */
+				$parser       = new $className;
+				$parser->name = $name; # the parser may overwrite the name value, so set it first
+
+				if ( $parser->_parse( $variable ) !== false ) {
+					$varData->_alternatives[] = $parser;
+				}
+			}
+
+
+			# if alternatives exist, push extendedValue to their front and display it as one of alternatives
+			if ( !empty( $varData->_alternatives ) && isset( $varData->extendedValue ) ) {
+				$_ = new kintVariableData;
+
+				$_->value = $varData->extendedValue;
+				$_->type  = $varData->type;
+				$_->size  = $varData->size;
+
+				array_unshift( $varData->_alternatives, $_ );
+				$varData->extendedValue = null;
+			}
+
+			self::$_skipAlternatives = false;
+		}
+
+		self::$_level   = $revert['level'];
+		self::$_objects = $revert['objects'];
+		return $varData;
+	}
+
+	private static function _checkDepth()
+	{
+		return Kint::$maxLevels != 0 && self::$_level > Kint::$maxLevels;
+	}
+
+	private static function _isArrayTabular( $variable )
+	{
+		if ( Kint::$mode === 'plain' || Kint::$mode === 'cli' ) return false;
+
+		foreach ( $variable as $row ) {
+			if ( is_array( $row ) && !empty( $row ) ) {
+				if ( isset( $keys ) ) {
+					if ( $keys === array_keys( $row ) ) { // two rows have same keys in a row? Close enough.
+						return true;
+					}
+				} else {
+
+					foreach ( $row as $col ) {
+						if ( !is_scalar( $col ) && $col !== null ) {
+							break 2;
+						}
+					}
+
+					$keys = array_keys( $row );
+				}
+			} else {
+				break;
+			}
+		}
+
+		return false;
+	}
+
+	private static $_dealingWithGlobals = false;
+
+	private static function _parse_array( &$variable, kintVariableData $variableData )
+	{
+		isset( self::$_marker ) or self::$_marker = "\x00" . uniqid();
+
+		# naturally, $GLOBALS variable is an intertwined recursion nightmare, use black magic
+		$globalsDetector = false;
+		if ( array_key_exists( 'GLOBALS', $variable ) && is_array( $variable['GLOBALS'] ) ) {
+			$globalsDetector = "\x01" . uniqid();
+
+			$variable['GLOBALS'][$globalsDetector] = true;
+			if ( isset( $variable[$globalsDetector] ) ) {
+				unset( $variable[$globalsDetector] );
+				self::$_dealingWithGlobals = true;
+			} else {
+				unset( $variable['GLOBALS'][$globalsDetector] );
+				$globalsDetector = false;
+			}
+		}
+
+		$variableData->type = 'array';
+		$variableData->size = count( $variable );
+
+		if ( $variableData->size === 0 ) {
+			return;
+		}
+		if ( isset( $variable[self::$_marker] ) ) { # recursion; todo mayhaps show from where
+			if ( self::$_dealingWithGlobals ) {
+				$variableData->value = '*RECURSION*';
+			} else {
+				unset( $variable[self::$_marker] );
+				$variableData->value = self::$_marker;
+			}
+			return false;
+		}
+		if ( self::_checkDepth() ) {
+			$variableData->extendedValue = "*DEPTH TOO GREAT*";
+			return false;
+		}
+
+		$isSequential = self::_isSequential( $variable );
+
+		$tabular = self::_isArrayTabular( $variable );
+		if ( $tabular ) {
+
+			$firstRow      = true;
+			$extendedValue = '<table class="kint-report">';
+			$arrayKeys     = array();
+
+
+			// assure no values are unreported if an extra key appears in one of the lines
+			foreach ( $variable as $row ) {
+				// todo process all keys in _isArrayTabular()
+				if ( !is_array( $row ) ) {
+					$tabular = false;
+					break;
+				}
+				$arrayKeys = array_unique( array_merge( $arrayKeys, array_keys( $row ) ) );
+
+				if ( Kint::$keyFilterCallback ) {
+					foreach ( $arrayKeys as $k => $key ) {
+						if ( call_user_func( Kint::$keyFilterCallback, $key ) === false ) {
+							unset( $arrayKeys[$k] );
+						}
+					}
+				}
+			}
+		}
+
+
+		if ( $tabular ) {
+			$variable[self::$_marker] = true;
+			foreach ( $variable as $rowIndex => &$row ) {
+				if ( $rowIndex === self::$_marker ) continue;
+
+				if ( isset( $row[self::$_marker] ) ) {
+					$variableData->value = "*RECURSION*";
+					return false;
+				}
+
+
+				$extendedValue .= '<tr>';
+				$output = '<td>' . ( $isSequential ? '#' . ( $rowIndex + 1 ) : $rowIndex ) . '</td>';
+				if ( $firstRow ) {
+					$extendedValue .= '<th>&nbsp;</th>';
+				}
+
+				foreach ( $arrayKeys as $key ) {
+					if ( $firstRow ) {
+						$extendedValue .= '<th>' . self::_escape( $key ) . '</th>';
+					}
+
+					if ( !array_key_exists( $key, $row ) ) {
+						$output .= '<td class="kint-empty"></td>';
+						continue;
+					}
+
+					# display strings in their full length so as not to trigger rich decoration
+					$maxStrLength       = kint::$maxStrLength;
+					kint::$maxStrLength = false;
+					$var                = kintParser::factory( $row[$key] );
+					kint::$maxStrLength = $maxStrLength;
+
+					if ( $var->value === self::$_marker ) {
+						$variableData->value = '*RECURSION*';
+						return false;
+					} elseif ( $var->value === '*RECURSION*' ) {
+						$output .= '<td class="kint-empty">' . Kint_Decorators_Concise::decorate( $var ) . '</td>';
+					} else {
+						$output .= '<td>' . Kint_Decorators_Concise::decorate( $var ) . '</td>';
+					}
+					unset( $var );
+				}
+
+				if ( $firstRow ) {
+					$extendedValue .= '</tr><tr>';
+					$firstRow = false;
+				}
+
+				$extendedValue .= $output . '</tr>';
+			}
+
+			$variableData->extendedValue = $extendedValue . '</table>';
+
+		} else {
+			$variable[self::$_marker] = true;
+			$extendedValue            = array();
+
+			foreach ( $variable as $key => & $val ) {
+				if ( $key === self::$_marker
+					|| ( Kint::$keyFilterCallback && call_user_func( Kint::$keyFilterCallback, $key, $val ) === false )
+				) {
+					continue;
+				}
+
+
+				$output = kintParser::factory( $val );
+				if ( $output->value === self::$_marker ) {
+					$variableData->value = "*RECURSION*"; // recursion occurred on a higher level, thus $this is recursion
+					return false;
+				}
+				if ( !$isSequential ) {
+					$output->operator = '=>';
+				}
+				$output->name    = $isSequential ? null : "'" . self::_escape( $key ) . "'";
+				$extendedValue[] = $output;
+			}
+			$variableData->extendedValue = $extendedValue;
+		}
+
+		if ( $globalsDetector ) {
+			self::$_dealingWithGlobals = false;
+		}
+
+		unset( $variable[self::$_marker] );
+	}
+
+
+	private static function _parse_object( &$variable, kintVariableData $variableData )
+	{
+		if ( function_exists( 'spl_object_hash' ) ) {
+			$hash = spl_object_hash( $variable );
+		} else {
+			ob_start();
+			var_dump( $variable );
+			preg_match( '[#(\d+)]', ob_get_clean(), $match );
+			$hash = $match[1];
+		}
+
+		$castedArray           = (array) $variable;
+		$variableData->type    = 'object';
+		$variableData->subtype = get_class( $variable );
+		$variableData->size    = count( $castedArray );
+
+		if ( isset( self::$_objects[$hash] ) ) {
+			$variableData->value = '*RECURSION*';
+			return false;
+		}
+		if ( self::_checkDepth() ) {
+			$variableData->extendedValue = "*DEPTH TOO GREAT*";
+			return false;
+		}
+
+
+		# ArrayObject (and maybe ArrayIterator, did not try yet) unsurprisingly consist of mainly dark magic.
+		# What bothers me most, var_dump sees no problem with it, and ArrayObject also uses a custom,
+		# undocumented serialize function, so you can see the properties in internal functions, but
+		# can never iterate some of them if the flags are not STD_PROP_LIST. Fun stuff.
+		if ( $variableData->subtype === 'ArrayObject' || is_subclass_of( $variable, 'ArrayObject' ) ) {
+			$arrayObjectFlags = $variable->getFlags();
+			$variable->setFlags( ArrayObject::STD_PROP_LIST );
+		}
+
+		self::$_objects[$hash] = true; // todo store reflectorObject here for alternatives cache
+		$reflector             = new \ReflectionObject( $variable );
+
+		if ( Kint::$mode !== 'cli' && Kint::$mode !== 'whitespace' && Kint::$fileLinkFormat && $reflector->isUserDefined() ) {
+			list( $url ) = Kint::shortenPath(
+				$reflector->getFileName(),
+				$reflector->getStartLine(),
+				false
+			);
+
+			$_                     = ( strpos( $url, 'http://' ) === 0 ) ? 'class="kint-ide-link" ' : '';
+			$variableData->subtype = "<a {$_}href=\"{$url}\">{$variableData->subtype}</a>";
+		}
+		$variableData->size = 0;
+
+		$extendedValue = array();
+		$encountered   = array();
+
+		# copy the object as an array as it provides more info than Reflection (depends)
+		foreach ( $castedArray as $key => $value ) {
+			if ( Kint::$keyFilterCallback
+				&& call_user_func_array( Kint::$keyFilterCallback, array( $key, $value ) ) === false
+			) {
+				continue;
+			}
+
+			/* casting object to array:
+			 * integer properties are inaccessible;
+			 * private variables have the class name prepended to the variable name;
+			 * protected variables have a '*' prepended to the variable name.
+			 * These prepended values have null bytes on either side.
+			 * http://www.php.net/manual/en/language.types.array.php#language.types.array.casting
+			 */
+			if ( $key{0} === "\x00" ) {
+
+				$access = $key{1} === "*" ? "protected" : "private";
+
+				// Remove the access level from the variable name
+				$key = substr( $key, strrpos( $key, "\x00" ) + 1 );
+			} else {
+				$access = "public";
+			}
+
+			$encountered[$key] = true;
+
+			$output           = kintParser::factory( $value, self::_escape( $key ) );
+			$output->access   = $access;
+			$output->operator = '->';
+			$extendedValue[]  = $output;
+			$variableData->size++;
+		}
+
+		foreach ( $reflector->getProperties() as $property ) {
+			$name = $property->name;
+			if ( $property->isStatic() || isset( $encountered[$name] ) ) continue;
+
+			if ( $property->isProtected() ) {
+				$property->setAccessible( true );
+				$access = "protected";
+			} elseif ( $property->isPrivate() ) {
+				$property->setAccessible( true );
+				$access = "private";
+			} else {
+				$access = "public";
+			}
+
+			$value = $property->getValue( $variable );
+
+			if ( Kint::$keyFilterCallback
+				&& call_user_func_array( Kint::$keyFilterCallback, array( $name, $value ) ) === false
+			) {
+				continue;
+			}
+
+			$output           = kintParser::factory( $value, self::_escape( $name ) );
+			$output->access   = $access;
+			$output->operator = '->';
+			$extendedValue[]  = $output;
+			$variableData->size++;
+		}
+
+		if ( isset( $arrayObjectFlags ) ) {
+			$variable->setFlags( $arrayObjectFlags );
+		}
+
+		if ( $variableData->size ) {
+			$variableData->extendedValue = $extendedValue;
+		}
+	}
+
+
+	private static function _parse_boolean( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type  = 'bool';
+		$variableData->value = $variable ? 'TRUE' : 'FALSE';
+	}
+
+	private static function _parse_double( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type  = 'float';
+		$variableData->value = $variable;
+	}
+
+	private static function _parse_integer( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type  = 'integer';
+		$variableData->value = $variable;
+	}
+
+	private static function _parse_null( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type = 'NULL';
+	}
+
+	private static function _parse_resource( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type    = 'resource';
+		$variableData->subtype = get_resource_type( $variable );
+
+		if ( $variableData->subtype === 'stream' && $meta = stream_get_meta_data( $variable ) ) {
+
+			if ( isset( $meta['uri'] ) ) {
+				$file = $meta['uri'];
+
+				if ( function_exists( 'stream_is_local' ) ) {
+					// Only exists on PHP >= 5.2.4
+					if ( stream_is_local( $file ) ) {
+						$file = Kint::shortenPath( $file );
+					}
+				}
+
+				$variableData->value = $file;
+			}
+		}
+	}
+
+	private static function _parse_string( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type = 'string';
+
+		if ( Kint::$mode === 'cli' || Kint::$mode === 'whitespace' ) {
+			$variableData->value = '"' . $variable . '"';
+			return;
+		}
+
+
+		$encoding = self::_detectEncoding( $variable );
+		if ( $encoding !== 'ASCII' ) {
+			$variableData->subtype = $encoding;
+		}
+
+		$variableData->size = self::_strlen( $variable, $encoding );
+		$strippedString     = Kint::$mode === 'rich' ? self::_stripWhitespace( $variable ) : $variable;
+		if ( Kint::$mode === 'rich' && Kint::$maxStrLength && $variableData->size > Kint::$maxStrLength ) {
+
+			// encode and truncate
+			$variableData->value         = '"'
+				. self::_escape( self::_substr( $strippedString, Kint::$maxStrLength, $encoding ), $encoding )
+				. '&nbsp;&hellip;"';
+			$variableData->extendedValue = self::_escape( $variable, $encoding );
+
+		} elseif ( $variable !== $strippedString ) { // omit no data from display
+
+			$variableData->value         = '"' . self::_escape( $variable, $encoding ) . '"';
+			$variableData->extendedValue = self::_escape( $variable, $encoding );
+		} else {
+			$variableData->value = '"' . self::_escape( $variable, $encoding ) . '"';
+		}
+	}
+
+	private static function _parse_unknown( &$variable, kintVariableData $variableData )
+	{
+		$variableData->type    = "UNKNOWN";
+		$variableData->subtype = gettype( $variable );
+		$variableData->value   = var_export( $variable, true );
+	}
+
+}
+
+# todo separate classes into separate files
+
+class kintVariableData
+{
+	/** @var string */
+	public $type;
+	/** @var string */
+	public $access;
+	/** @var string */
+	public $name;
+	/** @var string */
+	public $operator;
+	/** @var string */
+	public $subtype;
+	/** @var int */
+	public $size;
+	/**
+	 * @var kintVariableData[] array of kintVariableData objects or strings; displayed collapsed, each element from
+	 * the array is a separate possible representation of the dumped var
+	 */
+	public $extendedValue;
+	/** @var string inline value */
+	public $value;
+
+	/** @var kintVariableData[] array of alternative representations for same variable, don't use in custom parsers */
+	public $_alternatives;
+
+	/* *******************************************
+	 * HELPERS
+	 */
+
+	protected static function _escape( $value, $encoding = null )
+	{
+		if ( Kint::$mode === 'cli' || Kint::$mode === 'whitespace' || empty( $value ) ) return $value;
+
+		$value = htmlspecialchars( $value, ENT_QUOTES );
+		if ( function_exists( 'mb_encode_numericentity' ) ) {
+			$encoding or $encoding = self::_detectEncoding( $value );
+			$value = mb_encode_numericentity(
+				$value,
+				array( 0x80, 0xffff, 0, 0xffff, ),
+				$encoding
+			);
+		}
+
+		# when possible force invisible characters to have some sort of display (experimental)
+		// todo we could make the symbols hover-title show the code for the invisible symbol
+		return preg_replace( '/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]/u', '�', $value );
+	}
+
+	protected static function _detectEncoding( $value )
+	{
+		$ret = null;
+		if ( function_exists( 'mb_detect_encoding' ) ) {
+			$mbDetected = mb_detect_encoding( $value );
+			if ( $mbDetected === 'ASCII' ) {
+				return 'ASCII';
+			}
+		}
+
+		if ( empty( Kint::$charEncodings ) || !function_exists( 'iconv' ) ) {
+			return !empty( $mbDetected ) ? $mbDetected : 'UTF-8';
+		}
+
+		$md5 = md5( $value );
+		foreach ( array_merge( array( 'UTF-8' ), Kint::$charEncodings ) as $encoding ) {
+			if ( empty( $encoding ) ) continue;
+
+			# fuck knows why, //IGNORE and //TRANSLIT still throw notice
+			if ( md5( @iconv( $encoding, $encoding, $value ) ) === $md5 ) {
+				return $encoding;
+			}
+		}
+
+		return 'ASCII';
+	}
+
+	/**
+	 * zaps all excess whitespace from string, compacts it but hurts readability
+	 *
+	 * @param string $string
+	 *
+	 * @return string
+	 */
+	protected static function _stripWhitespace( $string )
+	{
+		return preg_replace( '[\s+]', ' ', $string );
+	}
+
+
+	/**
+	 * returns whether the array:
+	 *  1) is numeric and
+	 *  2) in sequence starting from zero
+	 *
+	 * @param array $array
+	 *
+	 * @return bool
+	 */
+	protected static function _isSequential( array $array )
+	{
+		return Kint::$hideSequentialKeys
+			? array_keys( $array ) === range( 0, count( $array ) - 1 )
+			: false;
+	}
+
+	protected static function _strlen( $string, $encoding = null )
+	{
+		if ( function_exists( 'mb_strlen' ) ) {
+			$encoding or $encoding = self::_detectEncoding( $string );
+			return mb_strlen( $string, $encoding );
+		} else {
+			return strlen( $string );
+		}
+	}
+
+	protected static function _substr( $string, $end, $encoding = null )
+	{
+		if ( function_exists( 'mb_substr' ) ) {
+			$encoding or $encoding = self::_detectEncoding( $string );
+			return mb_substr( $string, 0, $end, $encoding );
+		} else {
+			return substr( $string, 0, $end );
+		}
+	}
+}
+
+abstract class KintObject
+{
+	/** @var string type of variable, can be set in inherited object or in static::parse() method */
+	public $name = 'NOT SET';
+
+	/**
+	 * returns false or associative array - each key represents a tab in default view, values may be anything
+	 *
+	 * @param $variable
+	 *
+	 * @return mixed
+	 */
+	abstract public function parse( & $variable );
+}
\ No newline at end of file
diff --git a/kint/kint/scripts/source.reg b/kint/kint/scripts/source.reg
new file mode 100644
index 0000000..6b32890
--- /dev/null
+++ b/kint/kint/scripts/source.reg
@@ -0,0 +1,12 @@
+REGEDIT4
+
+[HKEY_CLASSES_ROOT\source]
+@="URL:source Protocol"
+"URL Protocol"=""
+
+[HKEY_CLASSES_ROOT\source\shell]
+
+[HKEY_CLASSES_ROOT\source\shell\open]
+
+[HKEY_CLASSES_ROOT\source\shell\open\command]
+@="wscript.exe \"C:\\Program Files\\bin\\source.vbs\" \"%1\"" 
\ No newline at end of file
diff --git a/kint/kint/scripts/source.vbs b/kint/kint/scripts/source.vbs
new file mode 100644
index 0000000..56733b5
--- /dev/null
+++ b/kint/kint/scripts/source.vbs
@@ -0,0 +1,80 @@
+'INSTALLATION:
+'set editor link format to 'source:<filename>:<line>'
+'move this file to C:\Program Files\bin\source.vbs and run source.reg
+'customize directory mappings and editor command below
+
+'*****************
+'start of settings
+'*****************
+Dim command, protocol, change_slashes, debug
+Set dirmap = CreateObject("Scripting.Dictionary")
+
+'list of server paths (as regular expressions) 
+'and matching local paths (as regexp replace strings)
+'use this to replace the beginning of the path
+'if none of the regular expressions match, the script will show an error
+
+'local setup, when PHP and editor runs from the same machine
+dirmap.Add "^([C-Z]:\\)", "$1"
+
+'a typical remote Linux setup
+'dirmap.Add "^/var/www/", "C:\Projects\"
+'dirmap.Add "^/usr/share/php5/",  "C:\Projects\debug-source"
+
+'command to execute; %f is the file name, %l is the line number
+'dont forget to quote file names (quotes can be escaped by writing twice)
+command = """C:\Program Files\Notepad++\notepad++.exe"" -n%l ""%f"""
+
+'if true, forward slashes will be changed to backslashes in the filename
+'(after the regex replacements)
+change_slashes = True
+
+'protocol name used in the source edit links
+protocol = "source"
+
+'if true, alerts the command before executing it
+debug = False
+
+'***************
+'end of settings
+'***************
+
+Select Case WScript.Arguments.Count
+	Case 0
+		WScript.Echo "Wrong source link"
+		WScript.Quit
+End Select
+
+Dim link, split, file, line, found, strArgs
+
+link = Mid(WScript.Arguments.Item(0), Len(protocol) + 2)
+split = InStrRev(link, ":")
+file = Left(link, split - 1)
+line = Mid(link, split + 1)
+
+found = False
+For Each serverPath In dirmap
+	Set regexp = New RegExp
+	regexp.Pattern = serverPath
+	If regexp.Test(file) Then
+		found = True
+		Exit For
+	End If
+Next
+If Not found Then
+	WScript.Echo "don't know where to find " & file & " locally"
+	WScript.Quit
+End If
+file = regexp.Replace(file, dirmap.Item(serverPath))
+if change_slashes Then
+	file = Replace(file, "/", "\")
+End If
+
+strArgs = command
+strArgs = Replace(strArgs, "%l", line)
+strArgs = Replace(strArgs, "%f", file)
+If debug Then
+	WScript.Echo strArgs
+End If
+Set oShell = CreateObject ("Wscript.Shell") 
+oShell.Run strArgs, 0, false
\ No newline at end of file
diff --git a/kint/kint/view/compiled/main/aante-light.css b/kint/kint/view/compiled/main/aante-light.css
new file mode 100644
index 0000000..c3d4a2e
--- /dev/null
+++ b/kint/kint/view/compiled/main/aante-light.css
@@ -0,0 +1 @@
+.kint::selection{background:#aaa;color:#1d1e1e}.kint::-moz-selection{background:#aaa;color:#1d1e1e}.kint::-webkit-selection{background:#aaa;color:#1d1e1e}.kint{font-family:Consolas,"Courier New",monospace;color:#1d1e1e;padding:0;margin:8px 0;font-size:10pt;line-height:150px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;line-height:15px;padding:0;margin:0}.kint dt{background:#f8f8f8;border:1px solid #d7d7d7;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;padding:4px}.kint dt:hover{border-color:#aaa}.kint dt>var{margin-right:5px}.kint>dl dl{padding:0 0 0 12px}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAYAAAC5OOBJAAAAvklEQVR42mNgGMFAS0uLLSQk5HxoaOh/XDg4OLgdpwEBAQEGQAN+YtMIFH/i4ODAg9cFQNMbsWkOCgrKJMv5ID5Qipko/6M7PzAw0ImkAIQ5H0hvISv0gZpP+fn5qZAVfcBAkmEYBaNZcjRLjmbJUUCvqAIlDlAiASUWkjWDkiU0eTaSpBGUEZBy1E9QRiFWLzO2LEmU80GZHkcRhN/5oGIGVNzgKIbwOx9UwOErAIl2/igYzZKjWXI0S9IHAAASJijo0Ypj8AAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none;border-left:1px dashed #d7d7d7}.kint dt.kint-parent.kint-show+dd{display:block}.kint var,.kint var a{color:#06f;font-style:normal}.kint dt:hover var,.kint dt:hover var a{color:#f00}.kint dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}.kint .kint-popup-trigger{float:right!important;cursor:pointer;color:#aaa}.kint .kint-popup-trigger:hover{color:#d7d7d7}.kint dt.kint-parent>.kint-popup-trigger{font-size:15pt}.kint footer{padding:0 3px 3px;font-size:.7em}.kint footer>.kint-popup-trigger{font-size:12px}.kint footer nav{background-size:10px;height:10px;width:10px}.kint footer nav:hover{background-position:0 -10px}.kint footer>ol{display:none;margin-left:32px}.kint footer.kint-show>ol{display:block}.kint footer.kint-show nav{background-position:0 -20px}.kint footer.kint-show nav:hover{background-position:0 -30px}.kint a{color:#1d1e1e;text-shadow:none}.kint a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint ul{list-style:none;padding-left:12px}.kint ul:not(.kint-tabs) li{border-left:1px dashed #d7d7d7}.kint ul:not(.kint-tabs) li>dl{border-left:none}.kint ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}.kint ul.kint-tabs li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:23px;line-height:23px;margin:0 4px 4px;padding:0 10px 2px}.kint ul.kint-tabs li:hover,.kint ul.kint-tabs li.kint-active-tab:hover{border-color:#aaa;color:#f00}.kint ul.kint-tabs li.kint-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;padding-bottom:2px;padding-top:4px}.kint ul.kint-tabs li+li{margin-left:0}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#aaa;color:#f00}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;margin:0!important;padding:0!important;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#1d1e1e}.kint-report dt{border:0;background:0}.kint-report dt .kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt .kint-parent.kint-show{border-bottom:1px solid #d7d7d7}.kint-report td,.kint-report th{border:1px solid #d7d7d7;vertical-align:top}.kint-report td{background:#f8f8f8;white-space:pre}.kint-report td>dl{border:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}.kint-report tr:hover var{color:#f00}.kint-trace .kint-source{line-height:1.08em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #06f}.kint-trace .kint-source .kint-highlight{background:#f8f8f8}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}.kint-trace .kint-parent>var>a{color:#06f}.kint-focused{box-shadow:0 0 3px 2px #f00}.kint-microtime,.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}.kint dt{font-weight:normal}.kint dt.kint-parent{margin-top:4px}.kint dl dl{margin-top:4px;padding-left:25px;border-left:none}.kint>dl>dt{background:#f8f8f8}.kint ul{margin:0;padding-left:0}.kint ul:not(.kint-tabs)>li{border-left:0}.kint ul.kint-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}.kint ul.kint-tabs li,.kint ul.kint-tabs li+li{margin:0 0 0 4px}.kint ul.kint-tabs li{border-bottom-width:0}.kint ul.kint-tabs li:first-child{margin-left:0}.kint ul.kint-tabs li.kint-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff!important;margin-bottom:-1px}.kint ul.kint-tabs li.kint-active-tab:hover{border-bottom:1px solid #fff}.kint ul>li>pre{border:1px solid #d7d7d7}.kint dt:hover+dd>ul{border-color:#aaa}.kint pre{background:#fff;margin-top:4px;margin-left:25px}.kint .kint-popup-trigger:hover{color:#f00}.kint .kint-source .kint-highlight{background:#cfc}.kint-report td{background:#fff;padding:1px 2px!important}.kint-report td:first-child,.kint-report th{padding:0 2px!important}.kint-report td.kint-empty{background:#d7d7d7!important}.kint-report tr:hover>td{box-shadow:none;background:#cfc}
\ No newline at end of file
diff --git a/kint/kint/view/compiled/main/kint.js b/kint/kint/view/compiled/main/kint.js
new file mode 100644
index 0000000..cfd5dbf
--- /dev/null
+++ b/kint/kint/view/compiled/main/kint.js
@@ -0,0 +1,9 @@
+(function(){if("undefined"===typeof kintInitialized){kintInitialized=1;var e=[],f=-1,g=function(b){var a=window.getSelection(),c=document.createRange();c.selectNodeContents(b);a.removeAllRanges();a.addRange(c)},h=function(b){Array.prototype.slice.call(document.querySelectorAll(".kint nav, .kint-tabs>li:not(.kint-active-tab)"),0).forEach(b)},k=function(b,a){"undefined"===typeof a&&(a="kint-show");return RegExp("(\\s|^)"+a+"(\\s|$)").test(b.className)},m=function(b,a){"undefined"===typeof a&&(a="kint-show");l(b,
+a).className+=" "+a},l=function(b,a){"undefined"===typeof a&&(a="kint-show");b.className=b.className.replace(RegExp("(\\s|^)"+a+"(\\s|$)")," ");return b},n=function(b){do b=b.nextElementSibling;while("dd"!==b.nodeName.toLowerCase());return b},p=function(b,a){var c=n(b);"undefined"===typeof a&&(a=k(b));a?l(b):m(b);1===c.childNodes.length&&(c=c.childNodes[0].childNodes[0],k(c,"kint-parent")&&p(c,a))},r=function(b,a){var c=n(b).getElementsByClassName("kint-parent"),d=c.length;for("undefined"===typeof a&&
+(a=k(b));d--;)p(c[d],a);p(b,a)},s=function(b){var a=b,c=0;b.parentNode.getElementsByClassName("kint-active-tab")[0].className="";for(b.className="kint-active-tab";a=a.previousSibling;)1===a.nodeType&&c++;b=b.parentNode.nextSibling.childNodes;for(var d=0;d<b.length;d++)d===c?(b[d].style.display="block",1===b[d].childNodes.length&&(a=b[d].childNodes[0].childNodes[0],k(a,"kint-parent")&&p(a,!1))):b[d].style.display="none"},t=function(b){for(;b=b.parentNode,b&&!k(b,"kint"););return!!b},u=function(){e=
+[];h(function(b){0===b.offsetWidth&&0===b.offsetHeight||e.push(b)})},v=function(b){var a;if(a=window.open())a.document.open(),a.document.write("<html><head><title>Kint ("+(new Date).toISOString()+')</title><meta charset="utf-8">'+document.getElementsByClassName("-kint-js")[0].outerHTML+document.getElementsByClassName("-kint-css")[0].outerHTML+'</head><body><input style="width: 100%" placeholder="Take some notes!"><div class="kint">'+b.parentNode.outerHTML+"</div></body>"),a.document.close()},w=function(b){var a=
+document.querySelector(".kint-focused");a&&l(a,"kint-focused");if(-1!==b){a=e[b];m(a,"kint-focused");var c=function(a){return a.offsetTop+(a.offsetParent?c(a.offsetParent):0)};window.scrollTo(0,c(a)-window.innerHeight/2)}f=b},x=function(b,a){b?0>--a&&(a=e.length-1):++a>=e.length&&(a=0);w(a);return!1};window.addEventListener("click",function(b){var a=b.target,c=a.nodeName.toLowerCase();if(t(a)){"dfn"===c?(g(a),a=a.parentNode):"var"===c&&(a=a.parentNode,c=a.nodeName.toLowerCase());if("li"===c&&"kint-tabs"===
+a.parentNode.className)return"kint-active-tab"!==a.className&&(s(a),-1!==f&&u()),!1;if("nav"===c)return"footer"===a.parentNode.nodeName.toLowerCase()?(a=a.parentNode,k(a)?l(a):m(a)):setTimeout(function(){0<parseInt(a.a,10)?a.a--:(r(a.parentNode),-1!==f&&u())},300),b.stopPropagation(),!1;if(k(a,"kint-parent"))return p(a),-1!==f&&u(),!1;if(k(a,"kint-ide-link"))return b.preventDefault(),b=new XMLHttpRequest,b.open("GET",a.href),b.send(null),!1;if(k(a,"kint-popup-trigger")){b=a.parentNode;if("footer"===
+b.nodeName.toLowerCase())b=b.previousSibling;else for(;b&&!k(b,"kint-parent");)b=b.parentNode;v(b)}}},!1);window.addEventListener("dblclick",function(b){var a=b.target;if(t(a)&&"nav"===a.nodeName.toLowerCase()){a.a=2;for(var c=document.getElementsByClassName("kint-parent"),d=c.length,a=k(a.parentNode);d--;)p(c[d],a);-1!==f&&u();b.stopPropagation()}},!1);window.onkeydown=function(b){if(b.target===document.body&&!b.altKey){var a=b.keyCode,c=b.shiftKey;b=f;if(68===a){if(-1===b)return u(),x(!1,b);w(-1);
+return!1}if(-1!==b){if(9===a)return x(c,b);if(38===a)return x(!0,b);if(40===a)return x(!1,b);if(-1!==b){c=e[b];if("li"===c.nodeName.toLowerCase()){if(32===a||13===a)return s(c),u(),x(!0,b);if(39===a)return x(!1,b);if(37===a)return x(!0,b)}c=c.parentNode;if(32===a||13===a)return p(c),u(),!1;if(39===a||37===a){var d=k(c),a=37===a;if(d)r(c,a);else{if(a){do c=c.parentNode;while(c&&"dd"!==c.nodeName.toLowerCase());if(c){c=c.previousElementSibling;b=-1;for(d=c.querySelector("nav");d!==e[++b];);w(b)}else c=
+e[b].parentNode}p(c,a)}u();return!1}}}}};var y=function(){var b=Array.prototype.slice.call(document.querySelectorAll(".kint-microtime"),0);b.forEach(function(a){var c=parseFloat(a.innerHTML),d=Infinity,q=-Infinity;b.forEach(function(a){a=parseFloat(a.innerHTML);d>a&&(d=a);q<a&&(q=a)});a.style.background="hsl("+Math.round(120*(1-(c-d)/(q-d)))+",60%,70%)"})};window.addEventListener("load",y);window.addEventListener("kint-load",y)};})()
diff --git a/kint/kint/view/compiled/main/original.css b/kint/kint/view/compiled/main/original.css
new file mode 100644
index 0000000..5937fc1
--- /dev/null
+++ b/kint/kint/view/compiled/main/original.css
@@ -0,0 +1 @@
+.kint::selection{background:#0092db;color:#1d1e1e}.kint::-moz-selection{background:#0092db;color:#1d1e1e}.kint::-webkit-selection{background:#0092db;color:#1d1e1e}.kint{font-family:Consolas,"Courier New",monospace;color:#1d1e1e;padding:0;margin:8px 0;font-size:10pt;line-height:150px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;line-height:15px;padding:0;margin:0}.kint dt{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;padding:4px}.kint dt:hover{border-color:#0092db}.kint dt>var{margin-right:5px}.kint>dl dl{padding:0 0 0 12px}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none;border-left:1px dashed #b6cedb}.kint dt.kint-parent.kint-show+dd{display:block}.kint var,.kint var a{color:#0092db;font-style:normal}.kint dt:hover var,.kint dt:hover var a{color:#5cb730}.kint dfn{font-style:normal;font-family:monospace;color:#1d1e1e}.kint pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}.kint .kint-popup-trigger{float:right!important;cursor:pointer;color:#0092db}.kint .kint-popup-trigger:hover{color:#b6cedb}.kint dt.kint-parent>.kint-popup-trigger{font-size:15pt}.kint footer{padding:0 3px 3px;font-size:.7em}.kint footer>.kint-popup-trigger{font-size:12px}.kint footer nav{background-size:10px;height:10px;width:10px}.kint footer nav:hover{background-position:0 -10px}.kint footer>ol{display:none;margin-left:32px}.kint footer.kint-show>ol{display:block}.kint footer.kint-show nav{background-position:0 -20px}.kint footer.kint-show nav:hover{background-position:0 -30px}.kint a{color:#1d1e1e;text-shadow:none}.kint a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}.kint ul{list-style:none;padding-left:12px}.kint ul:not(.kint-tabs) li{border-left:1px dashed #b6cedb}.kint ul:not(.kint-tabs) li>dl{border-left:none}.kint ul.kint-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}.kint ul.kint-tabs li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:23px;line-height:23px;margin:0 4px 4px;padding:0 10px 2px}.kint ul.kint-tabs li:hover,.kint ul.kint-tabs li.kint-active-tab:hover{border-color:#0092db;color:#5cb730}.kint ul.kint-tabs li.kint-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;padding-bottom:2px;padding-top:4px}.kint ul.kint-tabs li+li{margin-left:0}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#0092db;color:#5cb730}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;margin:0!important;padding:0!important;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#1d1e1e}.kint-report dt{border:0;background:0}.kint-report dt .kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt .kint-parent.kint-show{border-bottom:1px solid #b6cedb}.kint-report td,.kint-report th{border:1px solid #b6cedb;vertical-align:top}.kint-report td{background:#e0eaef;white-space:pre}.kint-report td>dl{border:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#c1d4df;color:#1d1e1e}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}.kint-report tr:hover var{color:#5cb730}.kint-trace .kint-source{line-height:1.08em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #0092db}.kint-trace .kint-source .kint-highlight{background:#c1d4df}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}.kint-trace .kint-parent>var>a{color:#0092db}.kint-focused{box-shadow:0 0 3px 2px #5cb730}.kint-microtime,.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}.kint>dl>dt{background:linear-gradient(to bottom,#e3ecf0 0,#c0d4df 100%)}.kint ul.kint-tabs{background:linear-gradient(to bottom,#9dbed0 0,#b2ccda 100%)}.kint>dl:not(.kint-trace)>dd>ul.kint-tabs li{background:#e0eaef}.kint>dl:not(.kint-trace)>dd>ul.kint-tabs li.kint-active-tab{background:#c1d4df}.kint>dl.kint-trace>dt{background:linear-gradient(to bottom,#c0d4df 0,#e3ecf0 100%)}.kint .kint-source .kint-highlight{background:#f0eb96}
\ No newline at end of file
diff --git a/kint/kint/view/compiled/main/solarized-dark.css b/kint/kint/view/compiled/main/solarized-dark.css
new file mode 100644
index 0000000..7cf6cd5
--- /dev/null
+++ b/kint/kint/view/compiled/main/solarized-dark.css
@@ -0,0 +1 @@
+.kint::selection{background:#268bd2;color:#839496}.kint::-moz-selection{background:#268bd2;color:#839496}.kint::-webkit-selection{background:#268bd2;color:#839496}.kint{font-family:Consolas,"Courier New",monospace;color:#839496;padding:0;margin:10px 0;font-size:10pt;line-height:150px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;line-height:15px;padding:0;margin:0}.kint dt{background:#002b36;border:1px solid #586e75;color:#839496;display:block;font-weight:bold;list-style:none outside none;padding:5px}.kint dt:hover{border-color:#268bd2}.kint dt>var{margin-right:5px}.kint>dl dl{padding:0 0 0 15px}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none;border-left:1px dashed #586e75}.kint dt.kint-parent.kint-show+dd{display:block}.kint var,.kint var a{color:#268bd2;font-style:normal}.kint dt:hover var,.kint dt:hover var a{color:#2aa198}.kint dfn{font-style:normal;font-family:monospace;color:#93a1a1}.kint pre{color:#839496;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}.kint .kint-popup-trigger{float:right!important;cursor:pointer;color:#268bd2}.kint .kint-popup-trigger:hover{color:#586e75}.kint dt.kint-parent>.kint-popup-trigger{font-size:15pt}.kint footer{padding:0 3px 3px;font-size:.7em}.kint footer>.kint-popup-trigger{font-size:12px}.kint footer nav{background-size:10px;height:10px;width:10px}.kint footer nav:hover{background-position:0 -10px}.kint footer>ol{display:none;margin-left:32px}.kint footer.kint-show>ol{display:block}.kint footer.kint-show nav{background-position:0 -20px}.kint footer.kint-show nav:hover{background-position:0 -30px}.kint a{color:#839496;text-shadow:none}.kint a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}.kint ul{list-style:none;padding-left:15px}.kint ul:not(.kint-tabs) li{border-left:1px dashed #586e75}.kint ul:not(.kint-tabs) li>dl{border-left:none}.kint ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}.kint ul.kint-tabs li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:24px;line-height:24px;margin:0 5px 5px;padding:0 12px 3px}.kint ul.kint-tabs li:hover,.kint ul.kint-tabs li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint ul.kint-tabs li.kint-active-tab{background:#002b36;border-top:0;margin-top:-1px;padding-bottom:3px;padding-top:4px}.kint ul.kint-tabs li+li{margin-left:0}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;margin:0!important;padding:0!important;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#839496}.kint-report dt{border:0;background:0}.kint-report dt .kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt .kint-parent.kint-show{border-bottom:1px solid #586e75}.kint-report td,.kint-report th{border:1px solid #586e75;vertical-align:top}.kint-report td{background:#002b36;white-space:pre}.kint-report td>dl{border:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#073642;color:#93a1a1}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-report tr:hover var{color:#2aa198}.kint-trace .kint-source{line-height:1.1em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #268bd2}.kint-trace .kint-source .kint-highlight{background:#073642}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#93a1a1}.kint-trace .kint-parent>var>a{color:#268bd2}.kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-microtime,.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}body{background:#073642;color:#fff}.kint{background:#073642;box-shadow:0 0 5px 3px #073642}.kint>dl>dt,.kint ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}
\ No newline at end of file
diff --git a/kint/kint/view/compiled/main/solarized.css b/kint/kint/view/compiled/main/solarized.css
new file mode 100644
index 0000000..882442b
--- /dev/null
+++ b/kint/kint/view/compiled/main/solarized.css
@@ -0,0 +1 @@
+.kint::selection{background:#268bd2;color:#657b83}.kint::-moz-selection{background:#268bd2;color:#657b83}.kint::-webkit-selection{background:#268bd2;color:#657b83}.kint{font-family:Consolas,"Courier New",monospace;color:#657b83;padding:0;margin:10px 0;font-size:10pt;line-height:150px;white-space:nowrap;overflow-x:auto;text-align:left}.kint *{float:none!important;line-height:15px;padding:0;margin:0}.kint dt{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;padding:5px}.kint dt:hover{border-color:#268bd2}.kint dt>var{margin-right:5px}.kint>dl dl{padding:0 0 0 15px}.kint nav{display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle;content:' ';cursor:pointer;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent}.kint dt.kint-parent:hover nav{background-position:0 -15px}.kint dt.kint-parent.kint-show:hover>nav{background-position:0 -45px}.kint dt.kint-show>nav{background-position:0 -30px}.kint dt.kint-parent+dd{display:none;border-left:1px dashed #93a1a1}.kint dt.kint-parent.kint-show+dd{display:block}.kint var,.kint var a{color:#268bd2;font-style:normal}.kint dt:hover var,.kint dt:hover var a{color:#2aa198}.kint dfn{font-style:normal;font-family:monospace;color:#586e75}.kint pre{color:#657b83;margin:0 0 0 15px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}.kint .kint-popup-trigger{float:right!important;cursor:pointer;color:#268bd2}.kint .kint-popup-trigger:hover{color:#93a1a1}.kint dt.kint-parent>.kint-popup-trigger{font-size:15pt}.kint footer{padding:0 3px 3px;font-size:.7em}.kint footer>.kint-popup-trigger{font-size:12px}.kint footer nav{background-size:10px;height:10px;width:10px}.kint footer nav:hover{background-position:0 -10px}.kint footer>ol{display:none;margin-left:32px}.kint footer.kint-show>ol{display:block}.kint footer.kint-show nav{background-position:0 -20px}.kint footer.kint-show nav:hover{background-position:0 -30px}.kint a{color:#657b83;text-shadow:none}.kint a:hover{color:#586e75;border-bottom:1px dotted #586e75}.kint ul{list-style:none;padding-left:15px}.kint ul:not(.kint-tabs) li{border-left:1px dashed #93a1a1}.kint ul:not(.kint-tabs) li>dl{border-left:none}.kint ul.kint-tabs{margin:0 0 0 15px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}.kint ul.kint-tabs li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:24px;line-height:24px;margin:0 5px 5px;padding:0 12px 3px}.kint ul.kint-tabs li:hover,.kint ul.kint-tabs li.kint-active-tab:hover{border-color:#268bd2;color:#2aa198}.kint ul.kint-tabs li.kint-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;padding-bottom:3px;padding-top:4px}.kint ul.kint-tabs li+li{margin-left:0}.kint ul:not(.kint-tabs)>li:not(:first-child){display:none}.kint dt:hover+dd>ul>li.kint-active-tab{border-color:#268bd2;color:#2aa198}.kint-report{border-collapse:collapse;empty-cells:show;border-spacing:0}.kint-report *{text-align:left;margin:0!important;padding:0!important;font-size:9pt;overflow:hidden;font-family:Consolas,"Courier New",monospace;color:#657b83}.kint-report dt{border:0;background:0}.kint-report dt .kint-parent{max-width:180px;min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kint-report dt .kint-parent.kint-show{border-bottom:1px solid #93a1a1}.kint-report td,.kint-report th{border:1px solid #93a1a1;vertical-align:top}.kint-report td{background:#fdf6e3;white-space:pre}.kint-report td>dl{border:0}.kint-report pre{border-top:0;border-bottom:0;border-right:0}.kint-report th:first-child{background:0;border:0}.kint-report td:first-child,.kint-report th{font-weight:bold;background:#eee8d5;color:#586e75}.kint-report td.kint-empty{background:#d33682!important}.kint-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}.kint-report tr:hover var{color:#2aa198}.kint-trace .kint-source{line-height:1.1em}.kint-trace .kint-source span{padding-right:1px;border-right:3px inset #268bd2}.kint-trace .kint-source .kint-highlight{background:#eee8d5}.kint-trace .kint-parent>b{min-width:18px;display:inline-block;text-align:right;color:#586e75}.kint-trace .kint-parent>var>a{color:#268bd2}.kint-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}.kint-microtime,.kint-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}.kint>dl>dt,.kint ul.kint-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}
\ No newline at end of file
diff --git a/kint/kint/view/compiled/modular-window/kint.js b/kint/kint/view/compiled/modular-window/kint.js
new file mode 100644
index 0000000..9c0bfb9
--- /dev/null
+++ b/kint/kint/view/compiled/modular-window/kint.js
@@ -0,0 +1,4 @@
+(function(){if("undefined"!==typeof jQuery){document.body.insertAdjacentHTML("beforeend",'<div id="kint-backdrop">Ajax output</div><div id="kint-modular"></div><div id="kint-modular-placeholder">[Debug output]</div>');var c=document.getElementById("kint-modular"),d=document.getElementById("kint-modular-placeholder"),f=document.getElementById("kint-backdrop"),h=window.getComputedStyle(document.body),h={a:h.backgroundColor,b:h.color},l=function(a){var b=a?"none":"block";a?(document.body.style.backgroundColor=h.a,
+document.body.style.color=h.b,a="block",window.addEventListener("mousedown",k)):(a="none",window.removeEventListener("mousedown",k));c.style.display=a;f.style.display=a;d.style.display=b},k=function(a){for(a=a.target;a&&a!==c;)a=a.parentNode;a||l();return!1},n=!1;jQuery(document).ajaxComplete(function(a,b,e){a=b.getResponseHeader("kint");var g;if(a){for(var m=1;;m++){g=b.getResponseHeader("kint-"+m);if(!g)break;a+=g}b=document.createElement("a");b.setAttribute("href",e.url);b.innerHTML=e.url+" ["+
+(new Date).toLocaleTimeString()+"]";b.title="Click to resend";e.complete=function(){c.style.opacity=1};b.onclick=function(){c.style.opacity=0.7;jQuery.ajax(e);return!1};c.appendChild(b);c.insertAdjacentHTML("beforeend",decodeURIComponent(a));n||(b=c.querySelectorAll(".-kint-js"),b.length&&(n=!0,a=document.createElement("script"),a.appendChild(document.createTextNode(b[0].innerHTML)),document.body.appendChild(a),b=document.createEvent("Event"),b.initEvent("kint-load",!0,!0),window.dispatchEvent(b)));
+l(!0)}});d.addEventListener("click",l)};})()
diff --git a/kint/kint/view/compiled/modular-window/original.css b/kint/kint/view/compiled/modular-window/original.css
new file mode 100644
index 0000000..d88c760
--- /dev/null
+++ b/kint/kint/view/compiled/modular-window/original.css
@@ -0,0 +1 @@
+#kint-modular{background:#fff;border:1px solid #b6cedb;display:none;font-family:Consolas,"Courier New",monospace;left:calc(50% - 450px);line-height:15px;overflow-y:scroll;padding:8px;position:fixed;top:30px;bottom:30px;width:900px;z-index: 2147483647}#kint-modular pre{background:#e0eaef;border-radius:0;color:#1d1e1e;margin:8px 0;padding:5px;overflow-y:hidden;border:1px solid #b6cedb;display:block;word-break:normal}#kint-modular pre:last-child{margin-bottom:0}#kint-backdrop{cursor:pointer;opacity:.8;height:100%;position:fixed;width:100%;left:0;overflow:hidden;top:0;background:radial-gradient(ellipse at center,#e0eaef 0,#c1d4df 100%);z-index: 2147483647;display:none;text-align:center;font-size:15pt;text-shadow:0 0 5px #5cb730;color:#0092db}#kint-modular-placeholder{border:1px solid #b6cedb;display:none;position:fixed;bottom:0;left:0;background:#e0eaef;color:#1d1e1e;z-index:2147483647;cursor:move}
\ No newline at end of file
diff --git a/kint/kint/view/js/main.js b/kint/kint/view/js/main.js
new file mode 100644
index 0000000..512c8ff
--- /dev/null
+++ b/kint/kint/view/js/main.js
@@ -0,0 +1,411 @@
+/**
+ java -jar compiler.jar --js $FileName$ --js_output_file ../inc/kint.js --compilation_level ADVANCED_OPTIMIZATIONS --output_wrapper "(function(){%output%})()"
+ */
+
+if ( typeof kintInitialized === 'undefined' ) {
+	kintInitialized = 1;
+	var kint = {
+		visiblePluses : [], // all visible toggle carets
+		currentPlus   : -1, // currently selected caret
+
+		selectText : function( element ) {
+			var selection = window.getSelection(),
+				range = document.createRange();
+
+			range.selectNodeContents(element);
+			selection.removeAllRanges();
+			selection.addRange(range);
+		},
+
+		each : function( selector, callback ) {
+			Array.prototype.slice.call(document.querySelectorAll(selector), 0).forEach(callback)
+		},
+
+		hasClass : function( target, className ) {
+			if ( typeof className === 'undefined' ) {
+				className = 'kint-show';
+			}
+
+			return new RegExp('(\\s|^)' + className + '(\\s|$)').test(target.className);
+		},
+
+		addClass : function( ele, className ) {
+			if ( typeof className === 'undefined' ) {
+				className = 'kint-show';
+			}
+
+			kint.removeClass(ele, className).className += (" " + className);
+		},
+
+		removeClass : function( ele, className ) {
+			if ( typeof className === 'undefined' ) {
+				className = 'kint-show';
+			}
+
+			ele.className = ele.className.replace(
+				new RegExp('(\\s|^)' + className + '(\\s|$)'), ' '
+			);
+			return ele;
+		},
+
+		next : function( element ) {
+			do {
+				element = element.nextElementSibling;
+			} while ( element.nodeName.toLowerCase() !== 'dd' );
+
+			return element;
+		},
+
+		toggle : function( element, hide ) {
+			var parent = kint.next(element);
+
+			if ( typeof hide === 'undefined' ) {
+				hide = kint.hasClass(element);
+			}
+
+			if ( hide ) {
+				kint.removeClass(element);
+			} else {
+				kint.addClass(element);
+			}
+
+			if ( parent.childNodes.length === 1 ) {
+				parent = parent.childNodes[0].childNodes[0]; // reuse variable cause I can
+
+				if ( kint.hasClass(parent, 'kint-parent') ) {
+					kint.toggle(parent, hide)
+				}
+			}
+		},
+
+		toggleChildren : function( element, hide ) {
+			var parent = kint.next(element)
+				, nodes = parent.getElementsByClassName('kint-parent')
+				, i = nodes.length;
+
+			if ( typeof hide === 'undefined' ) {
+				hide = kint.hasClass(element);
+			}
+
+			while ( i-- ) {
+				kint.toggle(nodes[i], hide);
+			}
+			kint.toggle(element, hide);
+		},
+
+		toggleAll : function( caret ) {
+			var elements = document.getElementsByClassName('kint-parent'),
+				i = elements.length,
+				visible = kint.hasClass(caret.parentNode);
+
+			while ( i-- ) {
+				kint.toggle(elements[i], visible);
+			}
+		},
+
+		switchTab : function( target ) {
+			var lis, el = target, index = 0;
+
+			target.parentNode.getElementsByClassName('kint-active-tab')[0].className = '';
+			target.className = 'kint-active-tab';
+
+			// take the index of clicked title tab and make the same n-th content tab visible
+			while ( el = el.previousSibling ) el.nodeType === 1 && index++;
+			lis = target.parentNode.nextSibling.childNodes;
+			for ( var i = 0; i < lis.length; i++ ) {
+				if ( i === index ) {
+					lis[i].style.display = 'block';
+
+					if ( lis[i].childNodes.length === 1 ) {
+						el = lis[i].childNodes[0].childNodes[0];
+
+						if ( kint.hasClass(el, 'kint-parent') ) {
+							kint.toggle(el, false)
+						}
+					}
+				} else {
+					lis[i].style.display = 'none';
+				}
+			}
+		},
+
+		isSibling : function( el ) {
+			for ( ; ; ) {
+				el = el.parentNode;
+				if ( !el || kint.hasClass(el, 'kint') ) break;
+			}
+
+			return !!el;
+		},
+
+		fetchVisiblePluses : function() {
+			kint.visiblePluses = [];
+			kint.each('.kint nav, .kint-tabs>li:not(.kint-active-tab)', function( el ) {
+				if ( el.offsetWidth !== 0 || el.offsetHeight !== 0 ) {
+					kint.visiblePluses.push(el)
+				}
+			});
+		},
+
+		openInNewWindow : function( kintContainer ) {
+			var newWindow;
+
+			if ( newWindow = window.open() ) {
+				newWindow.document.open();
+				newWindow.document.write(
+					'<html>'
+						+ '<head>'
+						+ '<title>Kint (' + new Date().toISOString() + ')</title>'
+						+ '<meta charset="utf-8">'
+						+ document.getElementsByClassName('-kint-js')[0].outerHTML
+						+ document.getElementsByClassName('-kint-css')[0].outerHTML
+						+ '</head>'
+						+ '<body>'
+						+ '<input style="width: 100%" placeholder="Take some notes!">'
+						+ '<div class="kint">'
+						+ kintContainer.parentNode.outerHTML
+						+ '</div></body>'
+				);
+				newWindow.document.close();
+			}
+		},
+
+		keyCallBacks : {
+			cleanup : function( i ) {
+				var focusedClass = 'kint-focused';
+				var prevElement = document.querySelector('.' + focusedClass);
+				prevElement && kint.removeClass(prevElement, focusedClass);
+
+				if ( i !== -1 ) {
+					var el = kint.visiblePluses[i];
+					kint.addClass(el, focusedClass);
+
+
+					var offsetTop = function( el ) {
+						return el.offsetTop + ( el.offsetParent ? offsetTop(el.offsetParent) : 0 );
+					};
+
+					var top = offsetTop(el) - (window.innerHeight / 2 );
+					window.scrollTo(0, top);
+				}
+
+				kint.currentPlus = i;
+			},
+
+			moveCursor : function( up, i ) {
+				// todo make the first VISIBLE plus active
+				if ( up ) {
+					if ( --i < 0 ) {
+						i = kint.visiblePluses.length - 1;
+					}
+				} else {
+					if ( ++i >= kint.visiblePluses.length ) {
+						i = 0;
+					}
+				}
+
+				kint.keyCallBacks.cleanup(i);
+				return false;
+			}
+		}
+	};
+
+	window.addEventListener("click", function( e ) {
+		var target = e.target
+			, nodeName = target.nodeName.toLowerCase();
+
+		if ( !kint.isSibling(target) ) return;
+
+		// auto-select name of variable
+		if ( nodeName === 'dfn' ) {
+			kint.selectText(target);
+			target = target.parentNode;
+		} else if ( nodeName === 'var' ) { // stupid workaround for misc elements
+			target = target.parentNode;    // to not stop event from further propagating
+			nodeName = target.nodeName.toLowerCase()
+		}
+
+		// switch tabs
+		if ( nodeName === 'li' && target.parentNode.className === 'kint-tabs' ) {
+			if ( target.className !== 'kint-active-tab' ) {
+				kint.switchTab(target);
+				if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
+			}
+			return false;
+		}
+
+		// handle clicks on the navigation caret
+		if ( nodeName === 'nav' ) {
+			if ( target.parentNode.nodeName.toLowerCase() === 'footer' ) {
+				target = target.parentNode;
+				if ( kint.hasClass(target) ) {
+					kint.removeClass(target)
+				} else {
+					kint.addClass(target)
+				}
+			} else {
+				// ensure doubleclick has different behaviour, see below
+				setTimeout(function() {
+					var timer = parseInt(target.kintTimer, 10);
+					if ( timer > 0 ) {
+						target.kintTimer--;
+					} else {
+						kint.toggleChildren(target.parentNode); // <dt>
+						if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
+					}
+				}, 300);
+			}
+
+			e.stopPropagation();
+			return false;
+		} else if ( kint.hasClass(target, 'kint-parent') ) {
+			kint.toggle(target);
+			if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
+			return false;
+		} else if ( kint.hasClass(target, 'kint-ide-link') ) {
+			e.preventDefault();
+			var ajax = new XMLHttpRequest(); // add ajax call to contact editor but prevent link default action
+			ajax.open('GET', target.href);
+			ajax.send(null);
+			return false;
+		} else if ( kint.hasClass(target, 'kint-popup-trigger') ) {
+			var kintContainer = target.parentNode;
+			if ( kintContainer.nodeName.toLowerCase() === 'footer' ) {
+				kintContainer = kintContainer.previousSibling;
+			} else {
+				while ( kintContainer && !kint.hasClass(kintContainer, 'kint-parent') ) {
+					kintContainer = kintContainer.parentNode;
+				}
+			}
+
+			kint.openInNewWindow(kintContainer);
+		}
+	}, false);
+
+	window.addEventListener("dblclick", function( e ) {
+		var target = e.target;
+		if ( !kint.isSibling(target) ) return;
+
+
+		if ( target.nodeName.toLowerCase() === 'nav' ) {
+			target.kintTimer = 2;
+			kint.toggleAll(target);
+			if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses();
+			e.stopPropagation();
+		}
+	}, false);
+
+	// keyboard navigation
+	window.onkeydown = function( e ) { // direct assignment is used to have priority over ex FAYT
+
+		// do nothing if alt key is pressed or if we're actually typing somewhere
+		if ( e.target !== document.body || e.altKey ) return;
+
+		var keyCode = e.keyCode
+			, shiftKey = e.shiftKey
+			, i = kint.currentPlus;
+
+
+		if ( keyCode === 68 ) { // 'd' : toggles navigation on/off
+			if ( i === -1 ) {
+				kint.fetchVisiblePluses();
+				return kint.keyCallBacks.moveCursor(false, i);
+			} else {
+				kint.keyCallBacks.cleanup(-1);
+				return false;
+			}
+		} else {
+			if ( i === -1 ) return;
+
+			if ( keyCode === 9 ) { // TAB : moves up/down depending on shift key
+				return kint.keyCallBacks.moveCursor(shiftKey, i);
+			} else if ( keyCode === 38 ) { // ARROW UP : moves up
+				return kint.keyCallBacks.moveCursor(true, i);
+			} else if ( keyCode === 40 ) { // ARROW DOWN : down
+				return kint.keyCallBacks.moveCursor(false, i);
+			} else {
+				if ( i === -1 ) {
+					return;
+				}
+			}
+		}
+
+
+		var kintNode = kint.visiblePluses[i];
+		if ( kintNode.nodeName.toLowerCase() === 'li' ) { // we're on a trace tab
+			if ( keyCode === 32 || keyCode === 13 ) { // SPACE/ENTER
+				kint.switchTab(kintNode);
+				kint.fetchVisiblePluses();
+				return kint.keyCallBacks.moveCursor(true, i);
+			} else if ( keyCode === 39 ) { // arrows
+				return kint.keyCallBacks.moveCursor(false, i);
+			} else if ( keyCode === 37 ) {
+				return kint.keyCallBacks.moveCursor(true, i);
+			}
+		}
+
+		kintNode = kintNode.parentNode; // simple dump
+		if ( keyCode === 32 || keyCode === 13 ) { // SPACE/ENTER : toggles
+			kint.toggle(kintNode);
+			kint.fetchVisiblePluses();
+			return false;
+		} else if ( keyCode === 39 || keyCode === 37 ) { // ARROW LEFT/RIGHT : respectively hides/shows and traverses
+			var visible = kint.hasClass(kintNode);
+			var hide = keyCode === 37;
+
+			if ( visible ) {
+				kint.toggleChildren(kintNode, hide); // expand/collapse all children if immediate ones are showing
+			} else {
+				if ( hide ) { // LEFT
+					// traverse to parent and THEN hide
+					do {kintNode = kintNode.parentNode} while ( kintNode && kintNode.nodeName.toLowerCase() !== 'dd' );
+
+					if ( kintNode ) {
+						kintNode = kintNode.previousElementSibling;
+
+						i = -1;
+						var parentPlus = kintNode.querySelector('nav');
+						while ( parentPlus !== kint.visiblePluses[++i] ) {}
+						kint.keyCallBacks.cleanup(i)
+					} else { // we are at root
+						kintNode = kint.visiblePluses[i].parentNode;
+					}
+				}
+				kint.toggle(kintNode, hide);
+			}
+			kint.fetchVisiblePluses();
+			return false;
+		}
+	};
+
+	var microtimePrettifier = function( e ) {
+		var elements = Array.prototype.slice.call(document.querySelectorAll('.kint-microtime'), 0);
+		elements.forEach(function( el ) {
+			var value = parseFloat(el.innerHTML)
+				, min = Infinity
+				, max = -Infinity
+				, ratio;
+
+			elements.forEach(function( el ) {
+				var val = parseFloat(el.innerHTML);
+
+				if ( min > val ) min = val;
+				if ( max < val ) max = val;
+			});
+
+			ratio = 1 - (value - min) / (max - min);
+
+			el.style.background = 'hsl(' + Math.round(ratio * 120) + ',60%,70%)';
+		});
+	};
+
+	window.addEventListener("load", microtimePrettifier)
+	window.addEventListener("kint-load", microtimePrettifier)
+}
+
+// debug purposes only, removed in minified source
+function clg( i ) {
+	if ( !window.console )return;
+	var l = arguments.length, o = 0;
+	while ( o < l )console.log(arguments[o++])
+}
\ No newline at end of file
diff --git a/kint/kint/view/js/modular-window.js b/kint/kint/view/js/modular-window.js
new file mode 100644
index 0000000..eb79a2c
--- /dev/null
+++ b/kint/kint/view/js/modular-window.js
@@ -0,0 +1,107 @@
+if ( typeof jQuery !== 'undefined' ) {
+	// this code is written in vanilla JS to future-proof it if we want to add other adapters like YUI
+	document.body.insertAdjacentHTML(
+		'beforeend',
+		'<div id="kint-backdrop">Ajax output</div><div id="kint-modular"></div>'
+			+ '<div id="kint-modular-placeholder">[Debug output]</div>'
+	);
+
+	var kintModular = document.getElementById("kint-modular");
+	var kintPlaceholder = document.getElementById("kint-modular-placeholder");
+	var kintBackdrop = document.getElementById("kint-backdrop");
+	var bodyStyle = window.getComputedStyle(document.body);
+	bodyStyle = {bg : bodyStyle.backgroundColor, clr : bodyStyle.color};
+
+	var toggleModular = function( show ) {
+		var hide = show ? 'none' : 'block';
+
+		if ( show ) {
+			// disregard body styles set by some skins
+			document.body.style.backgroundColor = bodyStyle.bg;
+			document.body.style.color = bodyStyle.clr;
+
+			show = 'block';
+			window.addEventListener('mousedown', kintCloseListener)
+		} else {
+			show = 'none';
+			window.removeEventListener('mousedown', kintCloseListener)
+		}
+
+		kintModular.style.display = show;
+		kintBackdrop.style.display = show;
+
+		kintPlaceholder.style.display = hide;
+	};
+
+	var kintCloseListener = function( e ) {
+		var el = e.target;
+
+		// are we clicking on the kint modular?
+		for ( ; ; ) {
+			if ( !el || el === kintModular ) break;
+			el = el.parentNode;
+		}
+
+		if ( !el ) toggleModular();
+
+		return false;
+	};
+
+
+	var scriptsInitialized = false;
+	jQuery(document)['ajaxComplete'](function( e, xhr, settings ) {
+		// todo display called url, post, timestamp
+		var data = xhr.getResponseHeader('kint')
+			, header
+			, returnedScript;
+
+		if ( !data ) return;
+
+		for ( var i = 1; ; i++ ) {
+			header = xhr.getResponseHeader('kint' + '-' + i);
+			if ( !header ) break;
+			data += header;
+		}
+
+		var a = document.createElement('a');
+		a.setAttribute('href', settings.url);
+		a.innerHTML = settings.url + " [" + (new Date()).toLocaleTimeString() + "]";
+		a.title = "Click to resend";
+
+		// jQuery specific part follows
+		settings.complete = function() {
+			kintModular.style.opacity = 1;
+		};
+		a.onclick = function() {
+			kintModular.style.opacity = .7;
+			jQuery['ajax'](settings);
+			return false;
+		};
+		// end jQuery specific
+
+		kintModular.appendChild(a);
+		kintModular.insertAdjacentHTML('beforeend', decodeURIComponent(data));
+
+		// exec script block from returned html once
+		if ( !scriptsInitialized ) {
+			returnedScript = kintModular.querySelectorAll(".-kint-js");
+			if ( returnedScript.length ) {
+
+				scriptsInitialized = true;
+
+				var script = document.createElement("script");
+				script.appendChild(document.createTextNode(returnedScript[0].innerHTML));
+
+				document.body.appendChild(script);
+
+				var evt = document.createEvent("Event");
+				evt.initEvent('kint-load', true, true);
+				window.dispatchEvent(evt);
+			}
+		}
+
+		toggleModular(true);
+	});
+
+	kintPlaceholder.addEventListener("click", toggleModular)
+}
\ No newline at end of file
diff --git a/kint/kint/view/less/main.less b/kint/kint/view/less/main.less
new file mode 100644
index 0000000..46c2643
--- /dev/null
+++ b/kint/kint/view/less/main.less
@@ -0,0 +1,408 @@
+//
+// VARIABLES FOR THEMES TO OVERRIDE
+// --------------------------------------------------
+
+@default-font: Consolas, "Courier New", monospace;
+
+@spacing : 4;
+
+// caret taken from solarized
+@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==");
+
+//
+// SET UP HELPER VARIABLES
+// --------------------------------------------------
+
+@border: 1px solid @border-color;
+
+.selection() {
+  background : @border-color-hover;
+  color      : @text-color;
+}
+
+//
+// BASE STYLES
+// --------------------------------------------------
+
+.kint::selection { .selection() }
+
+.kint::-moz-selection { .selection() }
+
+.kint::-webkit-selection { .selection() }
+
+.kint {
+  font-family : @default-font;
+  color       : @text-color;
+  padding     : 0;
+  margin      : @spacing * 2px 0;
+  font-size   : 10pt;
+  line-height : 15px;
+  white-space : nowrap;
+  overflow-x  : auto;
+  text-align  : left;
+
+  * {
+    float       : none !important;
+    line-height : 15px;
+    padding     : 0;
+    margin      : 0;
+  }
+
+  dt {
+    background  : @main-background;
+    border      : @border;
+    color       : @text-color;
+    display     : block;
+    font-weight : bold;
+    list-style  : none outside none;
+    padding     : @spacing * 1px;
+
+    &:hover {
+      border-color : @border-color-hover;
+    }
+
+    > var {
+      margin-right : 5px;
+    }
+  }
+
+  > dl dl {
+    padding : 0 0 0 @spacing * 3px;
+  }
+
+  //
+  // DROPDOWN CARET
+  // --------------------------------------------------
+
+  nav {
+    display        : inline-block;
+    height         : 15px;
+    width          : 15px;
+    margin-right   : 3px;
+    vertical-align : middle;
+    content        : ' ';
+    cursor         : pointer;
+    background     : @caret-image no-repeat scroll 0 0 transparent;
+  }
+
+  dt.kint-parent:hover nav {
+    background-position : 0 -15px;
+  }
+
+  dt.kint-parent.kint-show:hover > nav {
+    background-position : 0 -45px;
+  }
+
+  dt.kint-show > nav {
+    background-position : 0 -30px;
+  }
+
+  dt.kint-parent + dd {
+    display     : none;
+    border-left : 1px dashed @border-color;
+  }
+
+  dt.kint-parent.kint-show + dd {
+    display : block;
+  }
+
+  //
+  // INDIVIDUAL ITEMS
+  // --------------------------------------------------
+
+  var,
+  var a {
+    color      : @variable-type-color;
+    font-style : normal;
+  }
+
+  dt:hover var,
+  dt:hover var a {
+    color : @variable-type-color-hover;
+  }
+
+  dfn {
+    font-style  : normal;
+    font-family : monospace;
+    color       : @variable-name-color;
+  }
+
+  pre {
+    color      : @text-color;
+    margin     : 0 0 0 @spacing * 3px;
+    padding    : 5px;
+    overflow-y : hidden;
+    border-top : 0;
+    border     : @border;
+    background : @main-background;
+    display    : block;
+    word-break : normal;
+  }
+
+  .kint-popup-trigger {
+    float  : right !important;
+    cursor : pointer;
+    color  : @border-color-hover;
+
+    &:hover {
+      color : @border-color;
+    }
+  }
+
+  dt.kint-parent > .kint-popup-trigger {
+    font-size : 15pt;
+  }
+
+  footer {
+    padding   : 0 3px 3px;
+    font-size : .7em;
+
+    > .kint-popup-trigger {
+      font-size : 12px;
+    }
+
+    nav {
+      background-size : 10px;
+      height          : 10px;
+      width           : 10px;
+
+      &:hover {
+        background-position : 0 -10px;
+      }
+    }
+
+    > ol {
+      display     : none;
+      margin-left : 32px;
+    }
+
+    &.kint-show {
+      > ol {
+        display : block;
+      }
+
+      nav {
+        background-position : 0 -20px;
+
+        &:hover {
+          background-position : 0 -30px;
+        }
+      }
+    }
+  }
+
+  a {
+    color       : @text-color;
+    text-shadow : none;
+
+    &:hover {
+      color         : @variable-name-color;
+      border-bottom : 1px dotted @variable-name-color;
+    }
+  }
+
+  //
+  // TABS
+  // --------------------------------------------------
+
+  ul {
+    list-style   : none;
+    padding-left : @spacing * 3px;
+
+    &:not(.kint-tabs) {
+      li {
+        border-left : 1px dashed @border-color;
+
+        > dl {
+          border-left : none;
+        }
+      }
+    }
+
+    &.kint-tabs {
+      margin       : 0 0 0 @spacing * 3px;
+      padding-left : 0;
+      background   : @main-background;
+      border       : @border;
+      border-top   : 0;
+
+      li {
+        background  : @secondary-background;
+        border      : @border;
+        cursor      : pointer;
+        display     : inline-block;
+        height      : 16px + ceil(8px * (@spacing / 5));
+        line-height : 16px + ceil(8px * (@spacing / 5));
+        margin      : 0 @spacing * 1px @spacing * 1px;
+        padding     : 0 2px + @spacing * 2px floor(3px * (@spacing / 5));
+
+        &:hover,
+        &.kint-active-tab:hover {
+          border-color : @border-color-hover;
+          color        : @variable-type-color-hover;
+        }
+
+        &.kint-active-tab {
+          background     : @main-background;
+          border-top     : 0;
+          margin-top     : -1px;
+          padding-bottom : floor(3px * (@spacing / 5));
+          padding-top    : 1px + ceil(3px * (@spacing / 5));
+        }
+      }
+
+      li + li {
+        margin-left : 0
+      }
+    }
+
+    &:not(.kint-tabs) > li:not(:first-child) {
+      display : none;
+    }
+  }
+
+  dt:hover + dd > ul > li.kint-active-tab {
+    border-color : @border-color-hover;
+    color        : @variable-type-color-hover;
+  }
+}
+
+//
+// REPORT
+// --------------------------------------------------
+
+.kint-report {
+  border-collapse : collapse;
+  empty-cells     : show;
+  border-spacing  : 0;
+
+  * {
+    text-align  : left;
+    padding     : 0 !important;
+    margin      : 0 !important;
+    font-size   : 9pt;
+    overflow    : hidden;
+    font-family : @default-font;
+    color       : @text-color;
+  }
+
+  dt {
+    border     : 0;
+    background : none;
+
+    .kint-parent {
+      max-width     : 180px;
+      min-width     : 100%;
+      overflow      : hidden;
+      text-overflow : ellipsis;
+      white-space   : nowrap;
+      &.kint-show {
+        border-bottom : @border;
+      }
+    }
+  }
+
+  td,
+  th {
+    border         : @border;
+    vertical-align : top;
+  }
+
+  td {
+    background  : @main-background;
+    white-space : pre;
+
+    > dl {
+      border : 0;
+    }
+  }
+
+  pre {
+    border-top    : 0;
+    border-bottom : 0;
+    border-right  : 0;
+  }
+
+  th:first-child {
+    background : none;
+    border     : 0;
+  }
+
+  td:first-child,
+  th {
+    font-weight : bold;
+    background  : @secondary-background;
+    color       : @variable-name-color;
+  }
+
+  td.kint-empty {
+    background : #d33682 !important;
+  }
+
+  tr:hover {
+    > td {
+      box-shadow : 0px 0px 1px 0px @border-color-hover inset;
+    }
+
+    var {
+      color : @variable-type-color-hover;
+    }
+  }
+}
+
+//
+// TRACE
+// --------------------------------------------------
+.kint-trace {
+  .kint-source {
+    line-height : 1em + 0.02 * @spacing
+  }
+
+  .kint-source span {
+    padding-right : 1px;
+    border-right  : 3px inset @variable-type-color;
+  }
+
+  .kint-source .kint-highlight {
+    background : @secondary-background;
+  }
+
+  .kint-parent {
+    > b {
+      min-width  : 18px;
+      display    : inline-block;
+      text-align : right;
+      color      : @variable-name-color;
+    }
+
+    > var {
+      > a {
+        color : @variable-type-color;
+      }
+    }
+  }
+}
+
+//
+// MISC
+// --------------------------------------------------
+
+// keyboard navigation caret
+.kint-focused {
+  .keyboard-caret
+}
+
+.kint-microtime,
+.kint-color-preview {
+  box-shadow  : 0 0 2px 0 #b6cedb;
+  height      : 16px;
+  text-align  : center;
+  text-shadow : -1px 0 #839496, 0 1px #839496, 1px 0 #839496, 0 -1px #839496;
+  width       : 230px;
+  color       : #fdf6e3;
+}
+
+// mini trace
+.kint footer li {
+  color: #ddd;
+}
\ No newline at end of file
diff --git a/kint/kint/view/less/modular-window.less b/kint/kint/view/less/modular-window.less
new file mode 100644
index 0000000..336b910
--- /dev/null
+++ b/kint/kint/view/less/modular-window.less
@@ -0,0 +1,63 @@
+@border: 1px solid @border-color;
+
+#kint-modular {
+  background  : #fff;
+  border      : @border;
+  display     : none;
+  font-family : @default-font;
+  left        : calc(~"50% - 450px");
+  line-height : 15px;
+  overflow-y  : scroll;
+  padding     : @spacing * 2px;
+  position    : fixed;
+  top         : 30px;
+  bottom      : 30px;
+  width       : 900px;
+  z-index     : 2147483647; /*I'm a debugger, GTFO!*/
+}
+
+#kint-modular pre {
+  background    : @main-background;
+  border-radius : 0;
+  color         : @text-color;
+  margin        : @spacing * 2px 0;
+  padding       : 5px;
+  overflow-y    : hidden;
+  border        : @border;
+  display       : block;
+  word-break    : normal;
+}
+
+#kint-modular pre:last-child {
+  margin-bottom : 0;
+}
+
+#kint-backdrop {
+  cursor      : pointer;
+  opacity     : 0.8;
+  height      : 100%;
+  position    : fixed;
+  width       : 100%;
+  left        : 0;
+  overflow    : hidden;
+  top         : 0;
+  background  : radial-gradient(ellipse at center, @main-background 0, @secondary-background 100%);
+  z-index     : 2147483647;
+  display     : none;
+  text-align  : center;
+  font-size   : 15pt;
+  text-shadow : 0 0 5px @variable-type-color-hover;
+  color       : @variable-type-color;
+}
+
+#kint-modular-placeholder {
+  border     : @border;
+  display    : none;
+  position   : fixed;
+  bottom     : 0;
+  left       : 0;
+  background : @main-background;
+  color      : @text-color;
+  z-index    : 2147483647;
+  cursor     : move;
+}
\ No newline at end of file
diff --git a/kint/kint/view/themes/main/aante-light.less b/kint/kint/view/themes/main/aante-light.less
new file mode 100644
index 0000000..25702d5
--- /dev/null
+++ b/kint/kint/view/themes/main/aante-light.less
@@ -0,0 +1,136 @@
+/**
+ * @author Ante Aljinovic https://github.com/aljinovic
+ */
+@import "../../less/main";
+
+@main-background: #f8f8f8;
+@secondary-background : #f8f8f8;
+
+@text-color: #1d1e1e;
+@variable-name-color: #1d1e1e;
+@variable-type-color: #06f;
+@variable-type-color-hover: #f00;
+
+@border-color: #d7d7d7;
+@border-color-hover: #aaa;
+
+@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAYAAAC5OOBJAAAAvklEQVR42mNgGMFAS0uLLSQk5HxoaOh/XDg4OLgdpwEBAQEGQAN+YtMIFH/i4ODAg9cFQNMbsWkOCgrKJMv5ID5Qipko/6M7PzAw0ImkAIQ5H0hvISv0gZpP+fn5qZAVfcBAkmEYBaNZcjRLjmbJUUCvqAIlDlAiASUWkjWDkiU0eTaSpBGUEZBy1E9QRiFWLzO2LEmU80GZHkcRhN/5oGIGVNzgKIbwOx9UwOErAIl2/igYzZKjWXI0S9IHAAASJijo0Ypj8AAAAABJRU5ErkJggg==");
+
+.keyboard-caret() {
+  box-shadow : 0 0 3px 2px @variable-type-color-hover;
+}
+
+.kint {
+  dt {
+    font-weight : normal;
+
+    &.kint-parent {
+      margin-top : 4px;
+    }
+  }
+
+  dl dl {
+    margin-top   : 4px;
+    padding-left : 25px;
+    border-left  : none;
+  }
+
+  > dl > dt {
+    background : @secondary-background;
+  }
+
+  //
+  // TABS
+  // --------------------------------------------------
+
+  ul {
+    margin       : 0;
+    padding-left : 0;
+
+    &:not(.kint-tabs) > li {
+      border-left : 0;
+    }
+
+    &.kint-tabs {
+      background   : @secondary-background;
+      border       : @border;
+      border-width : 0px 1px 1px 1px;
+      padding      : 4px 0 0 12px;
+      margin-left  : -1px;
+      margin-top   : -1px;
+
+      li,
+      li + li {
+        margin : 0 0 0 4px;
+      }
+
+      li {
+        border-bottom-width : 0;
+
+        &:first-child {
+          margin-left : 0;
+        }
+
+        &.kint-active-tab {
+          border-top    : @border;
+          background    : #fff;
+          font-weight   : bold;
+          padding-top   : 0;
+          border-bottom : 1px solid #fff !important;
+          margin-bottom : -1px;
+        }
+
+        &.kint-active-tab:hover {
+          border-bottom : 1px solid #fff;
+        }
+      }
+    }
+
+    > li > pre {
+      border : @border;
+    }
+  }
+
+  dt:hover + dd > ul {
+    border-color : @border-color-hover;
+  }
+
+  pre {
+    background  : #fff;
+    margin-top  : 4px;
+    margin-left : 25px;
+  }
+
+  .kint-popup-trigger:hover {
+    color : @variable-type-color-hover;
+  }
+
+  .kint-source .kint-highlight {
+    background : #cfc;
+  }
+}
+
+//
+// REPORT
+// --------------------------------------------------
+
+.kint-report {
+  td {
+    background : #fff;
+    padding    : 1px 2px !important;
+  }
+
+  td:first-child,
+  th {
+    padding : 0 2px !important;
+  }
+
+  td.kint-empty {
+    background : @border-color !important;
+  }
+
+  tr:hover > td {
+    box-shadow : none;
+    background : #cfc;
+  }
+}
\ No newline at end of file
diff --git a/kint/kint/view/themes/main/original.less b/kint/kint/view/themes/main/original.less
new file mode 100644
index 0000000..e730919
--- /dev/null
+++ b/kint/kint/view/themes/main/original.less
@@ -0,0 +1,43 @@
+@import "../../less/main";
+
+@main-background: #e0eaef;
+@secondary-background: #c1d4df;
+
+@text-color: #1d1e1e;
+@variable-name-color: #1d1e1e;
+@variable-type-color: #0092db;
+@variable-type-color-hover: #5cb730;
+
+@border-color: #b6cedb;
+@border-color-hover: #0092db;
+
+@caret-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC");
+
+.keyboard-caret() {
+  box-shadow : 0 0 3px 2px #5cb730;
+}
+
+.kint {
+  > dl > dt {
+    background : linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%);
+  }
+
+  ul.kint-tabs {
+    background : linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%);
+  }
+
+  & > dl:not(.kint-trace) > dd > ul.kint-tabs li {
+    background : @main-background;
+    &.kint-active-tab {
+      background : @secondary-background;
+    }
+  }
+
+  & > dl.kint-trace > dt {
+    background : linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%);
+  }
+
+  .kint-source .kint-highlight {
+    background : #f0eb96;
+  }
+}
\ No newline at end of file
diff --git a/kint/kint/view/themes/main/solarized-dark.less b/kint/kint/view/themes/main/solarized-dark.less
new file mode 100644
index 0000000..c6c5b70
--- /dev/null
+++ b/kint/kint/view/themes/main/solarized-dark.less
@@ -0,0 +1,34 @@
+@import "../../less/main";
+
+@spacing : 5;
+
+@main-background: #002b36; // base 03
+@secondary-background : #073642; // base 02
+
+@text-color: #839496; // base 0
+@variable-name-color: #93a1a1; // base 1
+@variable-type-color: #268bd2; // blue
+@variable-type-color-hover: #2aa198; // cyan
+
+@border-color: #586e75; // base 01
+@border-color-hover: #268bd2; // blue
+
+.keyboard-caret() {
+  box-shadow    : 0 0 3px 2px #859900 inset; // green
+  border-radius : 7px;
+}
+
+body {
+  background : @secondary-background;
+  color      : #fff; // for non-kint elements to remain at least semi-readable
+}
+
+.kint {
+  background : @secondary-background;
+  box-shadow : 0 0 5px 3px @secondary-background;
+
+  > dl > dt,
+  ul.kint-tabs {
+    box-shadow : 4px 0 2px -3px @variable-type-color inset;
+  }
+}
\ No newline at end of file
diff --git a/kint/kint/view/themes/main/solarized.less b/kint/kint/view/themes/main/solarized.less
new file mode 100644
index 0000000..9ec8aba
--- /dev/null
+++ b/kint/kint/view/themes/main/solarized.less
@@ -0,0 +1,24 @@
+@import "../../less/main";
+
+@spacing : 5;
+
+@main-background: #fdf6e3; // base 3
+@secondary-background : #eee8d5; // base 2
+
+@text-color: #657b83; // base 00
+@variable-name-color: #586e75; // base 01
+@variable-type-color: #268bd2; // blue
+@variable-type-color-hover: #2aa198; // cyan
+
+@border-color: #93a1a1; // base 1
+@border-color-hover: #268bd2; // blue
+
+.keyboard-caret() {
+  box-shadow    : 0 0 3px 2px #859900 inset; // green
+  border-radius : 7px;
+}
+
+.kint > dl > dt,
+.kint ul.kint-tabs {
+  box-shadow : 4px 0 2px -3px @variable-type-color inset;
+}
\ No newline at end of file
diff --git a/kint/kint/view/themes/modular-window/original.less b/kint/kint/view/themes/modular-window/original.less
new file mode 100644
index 0000000..fac5f6a
--- /dev/null
+++ b/kint/kint/view/themes/modular-window/original.less
@@ -0,0 +1,15 @@
+@import "../../less/modular-window";
+
+@default-font: Consolas, "Courier New", monospace;
+@spacing : 4;
+
+@main-background: #e0eaef;
+@secondary-background: #c1d4df;
+
+@text-color: #1d1e1e;
+@variable-name-color: #1d1e1e;
+@variable-type-color: #0092db;
+@variable-type-color-hover: #5cb730;
+
+@border-color: #b6cedb;
+@border-color-hover: #0092db;
\ No newline at end of file
