protected function breakUpTheStacks()
    {
        $this->brokenStackTrace = explode("\n", $this->stacktrace);

        $stack = array_values(array_filter($this->brokenStackTrace, function ($input) {
            return stripos($input, '#') !== false;
        }));

        $newMessage = array_values(array_filter(array_diff($this->brokenStackTrace, $stack), function ($input) {
            return stripos($input, 'stack trace') === false;
        }));

        if (empty($newMessage)) {
            $this->message = '';
        } else {
            $newMessage = $newMessage[0];
            preg_match_all(static::REGEX_STACK_MESSAGE, $newMessage, $match);

            $this->message = $match[1][0] ?? $newMessage;
        }

        $this->brokenMap = array_map(function ($frame) {
            preg_match_all(static::REGEX_STACK_PART, $frame, $matches);

            $parts = array_filter(array_map(function ($match) {
                return $match[0] ?? null;
            }, $matches));

            return array_splice($parts, 1, count($parts));
        }, $stack);

        return $this;
    }