\section{KRun Class Reference}
\label{classKRun}\index{KRun@{KRun}}
To open files with their associated applications in {\bf KDE}, use KRun. Opens files with their associated applications in {\bf KDE}.  


{\tt \#include $<$krun.h$>$}

Inheritance diagram for KRun:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=43pt]{classKRun__inherit__graph}
\end{center}
\end{figure}
Collaboration diagram for KRun:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=200pt]{classKRun__coll__graph}
\end{center}
\end{figure}
\subsection*{Signals}
\begin{CompactItemize}
\item 
void {\bf finished} ()\label{classKRun_l0}

\item 
void {\bf error} ()\label{classKRun_l1}

\end{CompactItemize}
\subsection*{Public Member Functions}
\begin{CompactItemize}
\item 
{\bf KRun} (const  {\bf KURL} \&url, mode\_\-t mode=0, bool is\-Local\-File=false, bool show\-Progress\-Info=true)
\begin{CompactList}\small\item\em Create a KRun object to run the preferred application for a file/URL. \item\end{CompactList}\item 
virtual {\bf $\sim$KRun} ()
\begin{CompactList}\small\item\em Destructor. \item\end{CompactList}\item 
void {\bf abort} ()
\begin{CompactList}\small\item\em Abort this KRun. \item\end{CompactList}\item 
bool {\bf has\-Error} () const \label{classKRun_a3}

\item 
bool {\bf has\-Finished} () const \label{classKRun_a4}

\item 
bool {\bf auto\-Delete} () const 
\begin{CompactList}\small\item\em By default auto deletion is on. \item\end{CompactList}\item 
void {\bf set\-Auto\-Delete} (bool b)\label{classKRun_a6}

\item 
void {\bf set\-Preferred\-Service} (const  {\bf QString} \&desktop\-Entry\-Name)
\begin{CompactList}\small\item\em Set the preferred service for opening this URL, after its mimetype will have been found by KRun. \item\end{CompactList}\end{CompactItemize}
\subsection*{Static Public Member Functions}
\begin{CompactItemize}
\item 
pid\_\-t {\bf run} (const  {\bf KService} \&\_\-service, const  {\bf KURL::List} \&\_\-urls, bool temp\-Files)
\begin{CompactList}\small\item\em Open a list of URLs with a certain service (application). \item\end{CompactList}\item 
pid\_\-t {\bf run} (const  {\bf KService} \&\_\-service, const  {\bf KURL::List} \&\_\-urls)\label{classKRun_e1}

\item 
pid\_\-t {\bf run} (const  {\bf QString} \&\_\-exec, const  {\bf KURL::List} \&\_\-urls, const  {\bf QString} \&\_\-name=QString::null, const  {\bf QString} \&\_\-icon=QString::null, const  {\bf QString} \&\_\-obsolete1=QString::null, const  {\bf QString} \&\_\-obsolete2=QString::null)
\begin{CompactList}\small\item\em Open a list of URLs with. \item\end{CompactList}\item 
pid\_\-t {\bf run\-URL} (const  {\bf KURL} \&\_\-url, const  {\bf QString} \&\_\-mimetype, bool temp\-File)
\begin{CompactList}\small\item\em Open the given URL. \item\end{CompactList}\item 
pid\_\-t {\bf run\-URL} (const  {\bf KURL} \&\_\-url, const  {\bf QString} \&\_\-mimetype)\label{classKRun_e4}

\item 
pid\_\-t {\bf run\-Command} ({\bf QString} cmd)
\begin{CompactList}\small\item\em Run the given shell command and notifies kicker of the starting of the application. \item\end{CompactList}\item 
pid\_\-t {\bf run\-Command} (const  {\bf QString} \&cmd, const  {\bf QString} \&exec\-Name, const  {\bf QString} \&icon)
\begin{CompactList}\small\item\em Same as the other run\-Command, but it also takes the name of the binary, to display an error message in case it couldn't find it. \item\end{CompactList}\item 
bool {\bf display\-Open\-With\-Dialog} (const  {\bf KURL::List} \&lst, bool temp\-Files)
\begin{CompactList}\small\item\em Display the Open-With dialog for those URLs, and run the chosen application. \item\end{CompactList}\item 
bool {\bf display\-Open\-With\-Dialog} (const  {\bf KURL::List} \&lst)\label{classKRun_e8}

\item 
void {\bf shell\-Quote} ({\bf QString} \&\_\-str)
\begin{CompactList}\small\item\em Quotes a string for the shell. \item\end{CompactList}\item 
{\bf QString\-List} {\bf process\-Desktop\-Exec} (const  {\bf KService} \&\_\-service, const  {\bf KURL::List} \&\_\-urls, bool has\_\-shell, bool temp\-Files)
\begin{CompactList}\small\item\em Processes a Exec= line as found in .desktop files. \item\end{CompactList}\item 
{\bf QString\-List} {\bf process\-Desktop\-Exec} (const  {\bf KService} \&\_\-service, const  {\bf KURL::List} \&\_\-urls, bool has\_\-shell)\label{classKRun_e11}

\item 
{\bf QString} {\bf binary\-Name} (const  {\bf QString} \&exec\-Line, bool remove\-Path)
\begin{CompactList}\small\item\em Given a full command line (e.g. \item\end{CompactList}\end{CompactItemize}
\subsection*{Protected Slots}
\begin{CompactItemize}
\item 
void {\bf slot\-Timeout} ()\label{classKRun_j0}

\item 
void {\bf slot\-Scan\-Finished} ({\bf KIO::Job} $\ast$)\label{classKRun_j1}

\item 
void {\bf slot\-Scan\-Mime\-Type} ({\bf KIO::Job} $\ast$, const  {\bf QString} \&type)\label{classKRun_j2}

\item 
virtual void {\bf slot\-Stat\-Result} ({\bf KIO::Job} $\ast$)\label{classKRun_j3}

\end{CompactItemize}
\subsection*{Protected Member Functions}
\begin{CompactItemize}
\item 
virtual void {\bf init} ()\label{classKRun_b0}

\item 
virtual void {\bf scan\-File} ()\label{classKRun_b1}

\item 
virtual void {\bf found\-Mime\-Type} (const  {\bf QString} \&\_\-type)
\begin{CompactList}\small\item\em Called if the mimetype has been detected. \item\end{CompactList}\item 
virtual void {\bf kill\-Job} ()\label{classKRun_b3}

\item 
virtual void {\bf virtual\_\-hook} (int id, void $\ast$data)\label{classKRun_b4}

\end{CompactItemize}
\subsection*{Protected Attributes}
\begin{CompactItemize}
\item 
{\bf KURL} {\bf m\_\-str\-URL}\label{classKRun_p0}

\item 
bool {\bf m\_\-b\-Fault}\label{classKRun_p1}

\item 
bool {\bf m\_\-b\-Auto\-Delete}\label{classKRun_p2}

\item 
bool {\bf m\_\-b\-Progress\-Info}\label{classKRun_p3}

\item 
bool {\bf m\_\-b\-Finished}\label{classKRun_p4}

\item 
{\bf KIO::Job} $\ast$ {\bf m\_\-job}\label{classKRun_p5}

\item 
{\bf QTimer} {\bf m\_\-timer}\label{classKRun_p6}

\item 
bool {\bf m\_\-b\-Scan\-File}
\begin{CompactList}\small\item\em Used to indicate that the next action is to scan the file. \item\end{CompactList}\item 
bool {\bf m\_\-b\-Is\-Directory}\label{classKRun_p8}

\item 
bool {\bf m\_\-b\-Init}
\begin{CompactList}\small\item\em USed to indicate that the next action is to initialize. \item\end{CompactList}\item 
bool {\bf m\_\-b\-Is\-Local\-File}\label{classKRun_p10}

\item 
mode\_\-t {\bf m\_\-mode}\label{classKRun_p11}

\end{CompactItemize}


\subsection{Detailed Description}
To open files with their associated applications in {\bf KDE}, use KRun. Opens files with their associated applications in {\bf KDE}. 

It can execute any desktop entry, as well as any file, using the default application or another application \char`\"{}bound\char`\"{} to the file type.

In that example, the mimetype of the file is not known by the application, so a KRun instance must be created. It will determine the mimetype by itself. If the mimetype is known, or if you even know the service (application) to use for this file, use one of the static methods.



Definition at line 52 of file krun.h.

\subsection{Constructor \& Destructor Documentation}
\index{KRun@{KRun}!KRun@{KRun}}
\index{KRun@{KRun}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}KRun::KRun (const {\bf KURL} \& {\em url}, mode\_\-t {\em mode} = 0, bool {\em is\-Local\-File} = false, bool {\em show\-Progress\-Info} = true)}\label{classKRun_a0}


Create a KRun object to run the preferred application for a file/URL. 

KRun will first determine the type of the file, and will then run the associated application.

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em url}]the URL of the file or directory to 'run'\item[{\em mode}]The {\tt st\_\-mode} field of {\tt struct stat}. If you don't know this set it to 0.\item[{\em is\-Local\-File}]If this parameter is set to {\tt false} then {\tt url} is examined to find out whether it is a local URL or not. This flag is just used to improve speed, since the function {\bf KURL::is\-Local\-File} is a bit slow.\item[{\em show\-Progress\-Info}]Whether to show progress information when determining the type of the file (i.e. when using {\bf KIO::stat}{\rm (p.\,\pageref{namespaceKIO_a203})} and {\bf KIO::mimetype}{\rm (p.\,\pageref{namespaceKIO_a209})}) Before you set this to false to avoid a dialog box, think about a very slow FTP server... It is always better to provide progress info in such cases. \end{description}
\end{Desc}


Definition at line 737 of file krun.cpp.

References QObject::connect(), m\_\-b\-Init, m\_\-b\-Scan\-File, and QTimer::start().\index{KRun@{KRun}!~KRun@{$\sim$KRun}}
\index{~KRun@{$\sim$KRun}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}KRun::$\sim${\bf KRun} ()\hspace{0.3cm}{\tt  [virtual]}}\label{classKRun_a1}


Destructor. 

Don't call it yourself, since a KRun object auto-deletes itself. 

Definition at line 857 of file krun.cpp.

References QTimer::stop().

\subsection{Member Function Documentation}
\index{KRun@{KRun}!abort@{abort}}
\index{abort@{abort}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void KRun::abort ()}\label{classKRun_a2}


Abort this KRun. 

This kills any jobs launched by it, and leads to deletion if auto-deletion is on. This is much safer than deleting the KRun (in case it's currently showing an error dialog box, for instance) 

Definition at line 1119 of file krun.cpp.

References QTimer::start().\index{KRun@{KRun}!autoDelete@{autoDelete}}
\index{autoDelete@{autoDelete}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool KRun::auto\-Delete () const\hspace{0.3cm}{\tt  [inline]}}\label{classKRun_a5}


By default auto deletion is on. 



Definition at line 102 of file krun.h.\index{KRun@{KRun}!setPreferredService@{setPreferredService}}
\index{setPreferredService@{setPreferredService}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void KRun::set\-Preferred\-Service (const {\bf QString} \& {\em desktop\-Entry\-Name})}\label{classKRun_a7}


Set the preferred service for opening this URL, after its mimetype will have been found by KRun. 

IMPORTANT: the service is only used if its configuration says it can handle this mimetype. This is used for instance for the X-KDE-Last\-Opened\-With key, for the recent documents list. \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em desktop\-Entry\-Name}]the desktop\-Entry\-Name of the service, e.g. \char`\"{}kate\char`\"{}. \end{description}
\end{Desc}


Definition at line 1134 of file krun.cpp.\index{KRun@{KRun}!run@{run}}
\index{run@{run}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}pid\_\-t KRun::run (const {\bf KService} \& {\em \_\-service}, const {\bf KURL::List} \& {\em \_\-urls}, bool {\em temp\-Files})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e0}


Open a list of URLs with a certain service (application). 

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em \_\-service}]the service to run \item[{\em \_\-urls}]the list of URLs, can be empty (app launched without argument) \item[{\em temp\-Files}]if true and \_\-urls are local files, they will be deleted when the application exits. \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]the process id, or 0 on error \end{Desc}


Definition at line 664 of file krun.cpp.

References KRecent\-Document::add(), QValue\-List$<$ KURL $>$::begin(), QValue\-List$<$ KURL $>$::Const\-Iterator(), KService::desktop\-Entry\-Name(), KService::desktop\-Entry\-Path(), QValue\-List$<$ KURL $>$::end(), QValue\-List$<$ KURL $>$::first(), KDesktop\-File::is\-Authorized\-Desktop\-File(), QValue\-List$<$ KURL $>$::is\-Empty(), QString::is\-Empty(), KMessage\-Box::sorry(), KApplication::start\-Service\-By\-Desktop\-Path(), and KURL::List::to\-String\-List().

Referenced by display\-Open\-With\-Dialog(), KFile\-Open\-With\-Handler::display\-Open\-With\-Dialog(), KDEDesktop\-Mime\-Type::execute\-Service(), found\-Mime\-Type(), run(), and run\-URL().\index{KRun@{KRun}!run@{run}}
\index{run@{run}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}pid\_\-t KRun::run (const {\bf QString} \& {\em \_\-exec}, const {\bf KURL::List} \& {\em \_\-urls}, const {\bf QString} \& {\em \_\-name} = QString::null, const {\bf QString} \& {\em \_\-icon} = QString::null, const {\bf QString} \& {\em \_\-obsolete1} = QString::null, const {\bf QString} \& {\em \_\-obsolete2} = QString::null)\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e2}


Open a list of URLs with. 

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em \_\-exec}]The name of the executable, for example \char`\"{}/usr/bin/netscape\char`\"{}. \item[{\em \_\-name}]The logical name of the application, for example \char`\"{}Netscape 4.06\char`\"{}. \item[{\em \_\-icon}]The icon which should be used by the application. \item[{\em \_\-obsolete1}]Do not use! \item[{\em \_\-obsolete2}]Do not use! \end{description}
\end{Desc}


Definition at line 713 of file krun.cpp.

References run().\index{KRun@{KRun}!runURL@{runURL}}
\index{runURL@{runURL}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}pid\_\-t KRun::run\-URL (const {\bf KURL} \& {\em \_\-url}, const {\bf QString} \& {\em \_\-mimetype}, bool {\em temp\-File})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e3}


Open the given URL. 

This function is used after the mime type is found out. It will search for all services which can handle the mime type and call {\bf run}{\rm (p.\,\pageref{classKRun_e0})}() afterwards. \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em \_\-url}]the URL to open \item[{\em \_\-mimetype}]the mime type of the resource \item[{\em temp\-File}]if true and \_\-url is a local file, it will be deleted when the launched application exits. \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]the process id, or 0 on error \end{Desc}


Definition at line 68 of file krun.cpp.

References QValue\-List$<$ KURL $>$::append(), display\-Open\-With\-Dialog(), KMessage\-Box::error(), KURL::html\-URL(), KURL::is\-Local\-File(), KURL::path(), KService\-Type\-Profile::preferred\-Service(), run(), KDEDesktop\-Mime\-Type::run(), run\-Command(), shell\-Quote(), and KGlobal::static\-QString().

Referenced by found\-Mime\-Type().\index{KRun@{KRun}!runCommand@{runCommand}}
\index{runCommand@{runCommand}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}pid\_\-t KRun::run\-Command ({\bf QString} {\em cmd})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e5}


Run the given shell command and notifies kicker of the starting of the application. 

If the program to be called doesn't exist, an error box will be displayed.

{\tt \_\-cmd} must be a shell command. You must not append \char`\"{}\&\char`\"{} to it, since the function will do that for you.

\begin{Desc}
\item[Returns:]PID of running command, 0 if it could not be started, 0 - (PID of running command) if command was unsafe for map notification.\end{Desc}
Use only when you know the full command line. Otherwise use the other static methods, or KRun's constructor. 

Definition at line 721 of file krun.cpp.

Referenced by run\-URL().\index{KRun@{KRun}!runCommand@{runCommand}}
\index{runCommand@{runCommand}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}pid\_\-t KRun::run\-Command (const {\bf QString} \& {\em cmd}, const {\bf QString} \& {\em exec\-Name}, const {\bf QString} \& {\em icon})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e6}


Same as the other run\-Command, but it also takes the name of the binary, to display an error message in case it couldn't find it. 

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em icon}]icon for app starting notification \end{description}
\end{Desc}


Definition at line 726 of file krun.cpp.

References binary\-Name(), KShared\-Ptr$<$ T $>$::data(), KService::service\-By\-Desktop\-Name(), and KProcess::set\-Use\-Shell().\index{KRun@{KRun}!displayOpenWithDialog@{displayOpenWithDialog}}
\index{displayOpenWithDialog@{displayOpenWithDialog}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool KRun::display\-Open\-With\-Dialog (const {\bf KURL::List} \& {\em lst}, bool {\em temp\-Files})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e7}


Display the Open-With dialog for those URLs, and run the chosen application. 

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em lst}]the list of applications to run \item[{\em temp\-Files}]if true and lst are local files, they will be deleted when the application exits. \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]false if the dialog was canceled \end{Desc}


Definition at line 123 of file krun.cpp.

References QDialog::exec(), run(), KOpen\-With\-Dlg::service(), and KOpen\-With\-Dlg::text().

Referenced by run\-URL().\index{KRun@{KRun}!shellQuote@{shellQuote}}
\index{shellQuote@{shellQuote}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void KRun::shell\-Quote ({\bf QString} \& {\em \_\-str})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e9}


Quotes a string for the shell. 



Definition at line 138 of file krun.cpp.

References QString::is\-Empty(), and QString::replace().

Referenced by process\-Desktop\-Exec(), and run\-URL().\index{KRun@{KRun}!processDesktopExec@{processDesktopExec}}
\index{processDesktopExec@{processDesktopExec}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf QString\-List} KRun::process\-Desktop\-Exec (const {\bf KService} \& {\em \_\-service}, const {\bf KURL::List} \& {\em \_\-urls}, bool {\em has\_\-shell}, bool {\em temp\-Files})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e10}


Processes a Exec= line as found in .desktop files. 

\begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em \_\-service}]the service to extract information from. \item[{\em \_\-urls}]The urls the service should open. \item[{\em has\_\-shell}]If true, the arguments are going to be fed into a shell e.g by using system(). If false, the arguments are going to be fed into a exec() kind call. If the arguments are intended for an exec() kind of call and the Exec line contains shell commands then \char`\"{}/bin/sh -c\char`\"{} is added. \item[{\em temp\-Files}]if true and \_\-urls are local files, they will be deleted when the application exits. \end{description}
\end{Desc}
\begin{Desc}
\item[Returns:]a list of arguments suitable for either system() or exec(). \end{Desc}


Definition at line 417 of file krun.cpp.

References QString::arg(), QValue\-List$<$ KURL $>$::begin(), KGlobal::config(), QValue\-List$<$ KURL $>$::Const\-Iterator(), QValue\-List$<$ KURL $>$::end(), KService::exec(), QString::find(), QString::is\-Empty(), QString\-List::join(), KConfig\-Base::read\-Path\-Entry(), shell\-Quote(), KService::substitute\-Uid(), KService::terminal(), KService::terminal\-Options(), and KService::username().\index{KRun@{KRun}!binaryName@{binaryName}}
\index{binaryName@{binaryName}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}{\bf QString} KRun::binary\-Name (const {\bf QString} \& {\em exec\-Line}, bool {\em remove\-Path})\hspace{0.3cm}{\tt  [static]}}\label{classKRun_e12}


Given a full command line (e.g. 

the Exec= line from a .desktop file), extract the name of the binary being run. \begin{Desc}
\item[Parameters:]
\begin{description}
\item[{\em exec\-Line}]the full command line \item[{\em remove\-Path}]if true, remove a (relative or absolute) path. E.g. /usr/bin/ls becomes ls. \end{description}
\end{Desc}
\begin{Desc}
\item[Since:]3.1 \end{Desc}


Definition at line 535 of file krun.cpp.

References QString::contains(), QString::find\-Rev(), and QString::mid().

Referenced by run\-Command().\index{KRun@{KRun}!foundMimeType@{foundMimeType}}
\index{foundMimeType@{foundMimeType}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}void KRun::found\-Mime\-Type (const {\bf QString} \& {\em \_\-type})\hspace{0.3cm}{\tt  [protected, virtual]}}\label{classKRun_b2}


Called if the mimetype has been detected. 

The function checks whether the document and appends the gzip protocol to the URL. Otherwise {\bf run\-URL}{\rm (p.\,\pageref{classKRun_e3})} is called to finish the job. 

Definition at line 1016 of file krun.cpp.

References QValue\-List$<$ KURL $>$::append(), QObject::inherits(), KIO::Scheduler::publish\-Slave\-On\-Hold(), KIO::Simple\-Job::put\-On\-Hold(), run(), run\-URL(), KService::service\-By\-Desktop\-Name(), and QTimer::start().

\subsection{Member Data Documentation}
\index{KRun@{KRun}!m_bScanFile@{m\_\-bScanFile}}
\index{m_bScanFile@{m\_\-bScanFile}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool {\bf KRun::m\_\-b\-Scan\-File}\hspace{0.3cm}{\tt  [protected]}}\label{classKRun_p7}


Used to indicate that the next action is to scan the file. 

This action is invoked from slot\-Timeout. 

Definition at line 264 of file krun.h.

Referenced by KRun().\index{KRun@{KRun}!m_bInit@{m\_\-bInit}}
\index{m_bInit@{m\_\-bInit}!KRun@{KRun}}
\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool {\bf KRun::m\_\-b\-Init}\hspace{0.3cm}{\tt  [protected]}}\label{classKRun_p9}


USed to indicate that the next action is to initialize. 

This action is invoked from slot\-Timeout 

Definition at line 271 of file krun.h.

Referenced by KRun().

The documentation for this class was generated from the following files:\begin{CompactItemize}
\item 
krun.h\item 
krun.cpp\end{CompactItemize}
