new: [a.12-workflow-short] Added a short version (30min) of the workflow feature
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
rm *.aux *.listing *.log *.nav *.out *.snm *.toc *.vrb *.upa
|
|
@ -0,0 +1,523 @@
|
|||
% DO NOT COMPILE THIS FILE DIRECTLY!
|
||||
% This is included by the other .tex files.
|
||||
|
||||
\begin{frame}[t,plain]
|
||||
\titlepage
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Content of the presentation}
|
||||
\huge
|
||||
\begin{enumerate}
|
||||
\item Automation in MISP
|
||||
\vspace{0.5em}
|
||||
\item MISP Workflows
|
||||
\begin{itemize}
|
||||
\Large
|
||||
\item Fundamentals
|
||||
\item Demo with examples
|
||||
\item Using the system
|
||||
\item How it can be extended
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Automation in MISP: What already exists?}
|
||||
\includegraphics[valign=m,width=16px]{pictures/python-logo.png}\hspace*{0.5em} \textbf{MISP API / PyMISP}
|
||||
\hspace*{0.25em}
|
||||
\begin{itemize}
|
||||
\small
|
||||
\item Needs CRON Jobs in place
|
||||
\item Potentially heavy for the server
|
||||
\item Not realtime
|
||||
\end{itemize}
|
||||
\vspace*{1em}
|
||||
\includegraphics[valign=m,width=16px]{pictures/zeromq.png}\hspace*{0.5em} \textbf{PubSub channels}
|
||||
\hspace*{0.25em}
|
||||
\begin{itemize}
|
||||
\small
|
||||
\item After the actions happen: No feedback to MISP
|
||||
\item Tougher to put in place \& to share
|
||||
\item Full integration amounts to develop a new tool
|
||||
\end{itemize}
|
||||
\vspace*{1.5em}
|
||||
\begin{large}
|
||||
$\rightarrow$ No way to \textbf{prevent} behavior\\
|
||||
$\rightarrow$ Difficult to setup \textbf{hooks} to execute callbacks
|
||||
\end{large}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Simple automation in MISP made easy}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.3\linewidth]{pictures/automation.png}
|
||||
\end{center}
|
||||
\begin{itemize}
|
||||
\item \textbf{Visual} dataflow programming
|
||||
\item \textbf{Drag \& Drop} editor
|
||||
\item Flexible \textbf{Plug \& Play} system
|
||||
\item \textbf{Share} workflows, \textbf{debug} and \textbf{replay}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Example of use-cases}
|
||||
\begin{itemize}
|
||||
\item \textbf{Notification} on specifc actions
|
||||
\begin{itemize}
|
||||
\item New events matching criteria
|
||||
\item New users
|
||||
\item Automated alerts for high-priority IOCs
|
||||
\end{itemize}
|
||||
\item \textbf{Extend} existing MISP behavior
|
||||
\begin{itemize}
|
||||
\item Push data to another system
|
||||
\item Automatic enrichment
|
||||
\item Sanity check to block publishing / sharing
|
||||
\item Curation pipelines
|
||||
\end{itemize}
|
||||
\item \textbf{Hook} capabilities
|
||||
\begin{itemize}
|
||||
\item Assign tasks and notify incident response team members
|
||||
\end{itemize}
|
||||
\item ...
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
% \section{Workflow - Fundamentals}
|
||||
\begin{frame}
|
||||
\frametitle{
|
||||
\huge
|
||||
Workflow - Fundamentals
|
||||
\vspace{1em}
|
||||
}
|
||||
\textbf{Objective:} Start with the foundation to understand the basics
|
||||
\begin{center}
|
||||
\includegraphics[width=0.07\linewidth]{pictures/fundation}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{How does it work}
|
||||
\begin{center}
|
||||
\frame{\includegraphics[width=0.6\linewidth]{pictures/event-condition-action.png}}
|
||||
\end{center}
|
||||
\begin{enumerate}
|
||||
\item An \textbf{event} happens in MISP
|
||||
\item \textit{\scriptsize (optional)} Check if all \textbf{conditions} are satisfied
|
||||
\item Execute all \textbf{actions}
|
||||
\begin{itemize}
|
||||
\item May prevent MISP to complete its original event
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{What kind of events?}
|
||||
\includegraphics[width=60px]{pictures/sc-event.png}
|
||||
\vspace*{0.5em}
|
||||
\begin{itemize}
|
||||
\item New MISP Event
|
||||
\item Attribute has been saved
|
||||
\item New discussion post
|
||||
\item New user created
|
||||
\item Query against third-party services
|
||||
\item ...
|
||||
\end{itemize}
|
||||
\vspace*{1em}
|
||||
{\Large \faIcon{question-circle}} Supported events in MISP are called \textbf{Triggers}\\
|
||||
{\Large \faIcon{question-circle}} A \textbf{Trigger} is associated with \textbf{1-and-only-1 Workflow}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Triggers currently available}
|
||||
Currently 11 triggers can be hooked. 3 being \includegraphics[width=36px]{pictures/blocking-workflow.png}.
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/triggers.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{What kind of conditions?}
|
||||
\vspace*{0.25em}
|
||||
\includegraphics[width=70px]{pictures/sc-condition.png}
|
||||
\vspace*{0.25em}
|
||||
\begin{itemize}
|
||||
% \colorbox{red!100}{\textcolor{white}{\texttt{tlp:red}}}
|
||||
\item A MISP Event is tagged with \texttt{tlp:red}
|
||||
\item The distribution of an Attribute is a sharing group
|
||||
\item The creator organisation is \texttt{circl.lu}
|
||||
\item Or any other \textbf{generic} conditions
|
||||
\end{itemize}
|
||||
|
||||
\vspace*{0.5em}
|
||||
{\Large \faIcon{question-circle}} These are also called \textbf{Logic modules}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.43\textwidth]{pictures/logic-module.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Workflow - Logic modules}
|
||||
\begin{itemize}
|
||||
\item \includegraphics[width=12px]{pictures/sc-condition-icon.png} \textbf{logic} modules: Allow to redirect the execution flow.
|
||||
\begin{itemize}
|
||||
\item IF conditions
|
||||
\item Delay execution
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/logic-module-index.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{What kind of actions?}
|
||||
\vspace*{0.25em}
|
||||
\includegraphics[width=60px]{pictures/sc-action.png}
|
||||
\vspace*{0.25em}
|
||||
\begin{itemize}
|
||||
\item Send an email notification
|
||||
\item Perform enrichments
|
||||
\item Send a chat message on MS Teams
|
||||
\item Attach a local tag
|
||||
\item ...
|
||||
\end{itemize}
|
||||
|
||||
\vspace*{0.5em}
|
||||
{\Large \faIcon{question-circle}} These are also called \textbf{Action modules}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.43\textwidth]{pictures/action-module.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Workflow - Action modules}
|
||||
\begin{itemize}
|
||||
\item \includegraphics[width=12px]{pictures/sc-action-icon.png} \textbf{action} modules: Allow to executes operations
|
||||
\begin{itemize}
|
||||
\item Tag operations
|
||||
\item Send notifications
|
||||
\item Webhooks \& Custom scripts
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.95\linewidth]{pictures/action-module-index.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{What is a MISP Workflow?}
|
||||
\begin{itemize}
|
||||
\item Sequence of all nodes to be executed in a specific order
|
||||
\item Workflows can be enabled / disabled
|
||||
\item A Workflow is associated to \textbf{1-and-only-1 trigger}
|
||||
\end{itemize}
|
||||
\vspace*{0.5em}
|
||||
\begin{center}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/simple-workflow.png}}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Sources of Workflow modules (0)}
|
||||
Currently 36 built-in modules.
|
||||
\vspace{1em}
|
||||
\begin{itemize}
|
||||
\item \textbf{Trigger} module (11): built-in \textbf{only}
|
||||
\begin{itemize}
|
||||
\item Get in touch if you want more
|
||||
\end{itemize}
|
||||
\item \textbf{Logic} module (10): built-in \& \textbf{custom}
|
||||
\item \textbf{Action} module (20): built-in \& \textbf{custom}
|
||||
\end{itemize}
|
||||
\vspace*{2.0em}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Sources of Workflow modules (1)}
|
||||
\begin{itemize}
|
||||
\item Built-in \textbf{default} modules
|
||||
\begin{itemize}
|
||||
\item Part of the MISP codebase
|
||||
\item Get in touch if you want us to increase the selection (or merge PR!)
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\vspace*{0.5em}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.8\linewidth]{pictures/module-buffet.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Sources of Workflow modules (2)}
|
||||
User-defined \textbf{custom} modules
|
||||
\vspace*{0.5em}
|
||||
\begin{columns}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\begin{itemize}
|
||||
\item Written in PHP
|
||||
\item Extend existing modules
|
||||
\item MISP code reuse
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/php-joke.jpg}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Sources of Workflow modules (3)}
|
||||
Modules from the \includegraphics[width=0.20\linewidth]{pictures/misp-module-icon.png} \textbf{enrichment service}
|
||||
\vspace*{0.5em}
|
||||
\begin{columns}
|
||||
\begin{column}{0.50\textwidth}
|
||||
\begin{itemize}
|
||||
\item Written in Python
|
||||
\item Can use any python libraries
|
||||
\item Plug \& Play
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\begin{column}{0.50\textwidth}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/python-joke.png}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Demo by examples}
|
||||
\begin{enumerate}
|
||||
\item[WF-1.] Send an email to \textbf{all admins} when a new event has been pulled
|
||||
\vspace*{2em}
|
||||
\item[WF-2.] Block queries on 3rd party services when \textbf{tlp:red} or \textbf{PAP:red}
|
||||
\begin{itemize}
|
||||
\item \textbf{tlp:red}: For the eyes and ears of individual recipients only
|
||||
\item \textbf{PAP:RED}: Only passive actions that are not detectable from the outside
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Demo WF-1: Send an email to \textbf{all admins} when a new event has been pulled}
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/demo-wf1.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Demo WF-2: Block queries on 3rd party services when \textbf{tlp:red} or \textbf{PAP:red}}
|
||||
\begin{itemize}
|
||||
\small
|
||||
\item \textbf{tlp:red}: For the eyes and ears of individual recipients only
|
||||
\item \textbf{PAP:RED}: Only passive actions that are not detectable from the outside
|
||||
\end{itemize}
|
||||
\vspace*{1em}
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/demo-wf2.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Getting started with workflows}
|
||||
\centering
|
||||
{\Large Everything is ready?}\\
|
||||
\vspace*{3em}
|
||||
{\LARGE Let's see how to build a workflow!}
|
||||
\begin{center}
|
||||
\includegraphics[width=24px]{pictures/build-icon.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Creating a workflow with the editor}
|
||||
\begin{enumerate}
|
||||
\item \underline{Prevent} event publication \texttt{\bf \large if tlp:red} tag
|
||||
\begin{itemize}
|
||||
\item \underline{Send a mail} to \texttt{\scriptsize admin@admin.test} about potential data leak
|
||||
\end{itemize}
|
||||
\item \texttt{\bf \large else}, \underline{send a notification} on Mattermost
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
% \section{Considerations when working with workflows}
|
||||
\begin{frame}
|
||||
\frametitle{
|
||||
\huge
|
||||
Considerations when working with workflows
|
||||
\vspace{1em}
|
||||
}
|
||||
\textbf{Objective:} Overview of some common pitfalls
|
||||
\begin{center}
|
||||
\includegraphics[width=24px]{pictures/radar.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Working with the editor - Operations not allowed}
|
||||
Execution loop are not authorized
|
||||
\vspace*{1em}
|
||||
\begin{columns}
|
||||
\begin{column}{0.7\textwidth}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/editor-not-allowed-1.png}}
|
||||
\end{column}
|
||||
\begin{column}{0.3\textwidth}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/infinite-loop.jpg}}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Recursive workflows}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/recursive-workflow.png}}
|
||||
\danger Recursion: If an action re-run the workflow
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Working with the editor - Operations not allowed}
|
||||
Multiple connections from the same output
|
||||
\vspace*{1em}
|
||||
\begin{columns}
|
||||
\begin{column}{0.7\textwidth}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/editor-not-allowed-2.png}}
|
||||
\end{column}
|
||||
\begin{column}{0.3\textwidth}
|
||||
\frame{\includegraphics[width=1.0\linewidth]{pictures/two-paths.jpeg}}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\begin{itemize}
|
||||
\item Execution order not guaranted
|
||||
\item Confusing for users
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
% \section{Advanced usage}
|
||||
\begin{frame}
|
||||
\frametitle{
|
||||
\huge
|
||||
Advanced usage
|
||||
\vspace{1em}
|
||||
}
|
||||
\textbf{Objective:} Overview of Blueprints, Data format and Filtering
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Workflow blueprints}
|
||||
\begin{enumerate}
|
||||
\item Blueprints allow to \textbf{re-use parts} of a workflow in another one
|
||||
\item Blueprints can be saved, exported and \textbf{shared}
|
||||
\end{enumerate}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.5\linewidth]{pictures/blueprint-debugging.png}
|
||||
\end{center}
|
||||
Blueprints sources: \texttt{\scriptsize MISP/misp-workflow-blueprints} repository\footnote{\scriptsize https://github.com/MISP/misp-workflow-blueprints}
|
||||
\begin{itemize}
|
||||
\small
|
||||
\item Block actions if any attributes have the \texttt{PAP:RED} or \texttt{tlp:red} tag
|
||||
\item Curation pipeline
|
||||
\item Enrich data from 3rd-party
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Fitlering data on which to apply a module}
|
||||
What is the outcome of executing this workflow?
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{pictures/remove-ids-1.png}
|
||||
\end{center}
|
||||
\pause
|
||||
\vspace{1em}
|
||||
All Attributes get their \texttt{to\_ids} turned off.\\
|
||||
\vspace{1em}
|
||||
How could we force that action only on Attribute of type \texttt{comment}?
|
||||
\begin{center}
|
||||
$\rightarrow$ Hash path filtering!
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Fitlering data on which to apply a module}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.5\textwidth]{pictures/remove-ids-3.png}
|
||||
\end{center}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.9\textwidth]{pictures/remove-ids-2.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Fitlering data on which to apply a module}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.5\textwidth]{pictures/remove-ids-3.png}
|
||||
\end{center}
|
||||
\begin{center}
|
||||
\includegraphics[width=0.9\textwidth]{pictures/remove-ids-2-details.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Fitlering data on which to apply on multiple modules}
|
||||
New feature as of \textbf{v2.4.171} allows setting filters on a path.
|
||||
\begin{center}
|
||||
\includegraphics[width=1.0\textwidth]{pictures/remove-ids-generic.png}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Should I migrate to MISP Workflows}
|
||||
I have automation in place using the API/ZMQ. Should I move to Workflows?
|
||||
\vspace{1em}
|
||||
\begin{itemize}
|
||||
\item I have a curation pipeline using the API, should I port it to workflows?
|
||||
\begin{itemize}
|
||||
\item \textbf{No} in general, but WF can be used to start the curation process or perform simple pre-processing
|
||||
\end{itemize}
|
||||
\item What if I want to \textbf{block} some actions
|
||||
\begin{itemize}
|
||||
\item Put the blocking logic in the WF, keep the remaining outside
|
||||
\end{itemize}
|
||||
\item Bottom line is \textbf{Keep it simple} for you to maintain
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Future works}
|
||||
\begin{columns}
|
||||
\begin{column}{0.55\textwidth}
|
||||
\begin{itemize}
|
||||
\item More \includegraphics[width=12px]{pictures/sc-action-icon.png} modules
|
||||
\item More \includegraphics[width=12px]{pictures/sc-condition-icon.png} modules
|
||||
\item More \includegraphics[width=12px]{pictures/sc-event-icon.png} triggers
|
||||
\item Recursion prevention system
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\begin{column}{0.45\textwidth}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/future-works.jpeg}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Final words}
|
||||
\begin{columns}
|
||||
\begin{column}{0.6\textwidth}
|
||||
\begin{itemize}
|
||||
\item Designed to \textbf{quickly} and \textbf{cheaply} integrate MISP in CTI pipelines
|
||||
\item \underline{\textbf{Beta}} Feature unlikely to change. But still..
|
||||
\item Waiting for feedback!
|
||||
\begin{itemize}
|
||||
\item New triggers?
|
||||
\item New modules?
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{column}
|
||||
\begin{column}{0.4\textwidth}
|
||||
\includegraphics[width=1.0\linewidth]{pictures/feeling-of-power.jpg}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\vspace*{0.5em}
|
||||
\end{frame}
|
||||
|
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 163 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 545 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 272 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 688 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 654 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 142 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 206 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 816 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 759 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 827 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 155 KiB |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 167 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 247 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 14 KiB |