{srtD6z:aMvFE]gJua] UE=2t 4xf`yĔl56֟x"Qy>2LD[J(OH_NOa sgdgεGZP=uU%h% `ִu:ѣ-z$xP:JT2nnUmi:X_\]4TDB7;p_ YV?nM6'~[|`y*hn렞 MkEqMM;Vmt7[Ugbp[iNv&,qn,w6:.N9 0ft*|1;7D[bMRY\f6p{ 0 ;O2WlEܴ~+U7GW)q9y @jM(5mU(g4[zd9Nͭu9(;u[Ҡ}L Fزq62u EOn^/"FM |i戁7YZjȊ nEӦa_WpN:Kc:|m-qd+ x~:P{/WY ي8?="}7: LY^aYm (]}ӧwu b^\\vvid˽9 i̒SiSNA»yЅk˘OIiCib"p٘mrC;ojntO[6&]nm >mh1iiS[Kk@mh;6֢fmnY B8ܗb.vWWl&+v5-! MXw~*w ;ELi ]L"(ސYp*>LKܻggѳKi8 -lU>.\QÔ-czq 83΄m:dv^P+4#EcFkST߲@"Q#ZYx,Ւ`*5^tvWTq0]Mt_ff!&].A)w^=TceJ{J=J~բFDDJ7KH2B]h Aj-b^@8O#֋  . (M&vz^VS] l!+ģO˧U&6Q_ӓOWR ~>RvRMy;^(6>uB(=dVtC|n(Jnƒn θ:3 C.yOkވn5']^/l:<:;{~pɧ#^_RLmfJ?ap.`د~HʟLˣV̶pU}ڒ p2gHیMT}}3M#îL-V42ֺIqӯCF? CVnXRY ue[qB2Q5?J޺X瓑\a z6 uS ~? 7H~5TЊo|.gY3e;]2< |XWUFBeqB.`h3R2w]w R%I{'qLj :SVޚ"KL5Gt Uc Yg}˟F%O艕tihvA] Ӫ//-;Qwk7c1FBşZ ^Q.'͔J"q07-r^^DOy]>?Wn 3nf&/ /O>eçc;L=O!OsJ4C >0&Ơ5f 6RI%o.gJ)Ju |7'Gq ĪZxk1˸G+LltI""9AfyhLEOS 1BYK@PG=X@;Y3A©8g6w<JO~ Υ)"o :efTծ<@3LME J\41' !FҾdb)"SZt>8ׂ^v  6"-Kkq*f0VuansnAu^'BO sZr^ i#8bt i $N&a 7+GbЮӲR@v0 D'z.#Ku><< ieyJ]rɵcW`}(^͚푂B?kLǬsPIsV뉪S KՂeb6l)"wIX CJ//cUlWDSٔ`%Kfe62ZT"yt~_}'yX8}}JiŊM ZcJI~ nŐO(M c4*%n $t?59iUF<yҐkS>c ;d% /Og{U̷Y`)S ksAaW栂&XpC#I1;zMsL^; տZgX>Mz*I>R',"rx-rw-r--r--Doxyfile2
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--addon/doxywizard/doxywizard.qrc1
-rw-r--r--addon/doxywizard/wizard.cpp40
-rw-r--r--addon/doxywizard/wizard.h17
-rwxr-xr-xconfigure2
-rw-r--r--doc/commands.doc9
-rw-r--r--doc/config.doc10
-rw-r--r--doc/maintainers.txt1
-rw-r--r--qtools/Doxyfile16
-rw-r--r--src/classdef.cpp34
-rw-r--r--src/code.l10
-rw-r--r--src/config.l1
-rw-r--r--src/config.xml18
-rw-r--r--src/configoptions.cpp19
-rw-r--r--src/defargs.l23
-rw-r--r--src/definition.cpp40
-rw-r--r--src/dirdef.cpp74
-rw-r--r--src/dot.cpp4
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp72
-rw-r--r--src/doxygen.css74
-rw-r--r--src/doxygen_css.h74
-rw-r--r--src/eclipsehelp.cpp10
-rw-r--r--src/filedef.cpp49
-rw-r--r--src/fortranscanner.l199
-rw-r--r--src/ftvhelp.cpp573
-rw-r--r--src/ftvhelp.h37
-rw-r--r--src/groupdef.cpp17
-rw-r--r--src/htmlgen.cpp535
-rw-r--r--src/htmlgen.h12
-rw-r--r--src/htmlhelp.cpp2
-rw-r--r--src/index.cpp592
-rw-r--r--src/index.h4
-rw-r--r--src/instdox.cpp8
-rw-r--r--src/jquery.js50
-rw-r--r--src/jquery_js.h50
-rw-r--r--src/latexgen.cpp4
-rw-r--r--src/latexgen.h2
-rw-r--r--src/layout.cpp4
-rw-r--r--src/libdoxygen.pro.in4
-rw-r--r--src/libdoxygen.t15
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp26
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/memberlist.cpp20
-rw-r--r--src/namespacedef.cpp25
-rw-r--r--src/navtree.css123
-rw-r--r--src/navtree.js245
-rw-r--r--src/navtree_css.h123
-rw-r--r--src/navtree_js.h245
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.h4
-rw-r--r--src/pagedef.cpp25
-rw-r--r--src/resize.js81
-rw-r--r--src/resize_js.h81
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/search.php13
-rw-r--r--src/search_php.h13
-rw-r--r--src/translator_cn.h77
-rw-r--r--src/util.cpp349
-rw-r--r--src/util.h12
63 files changed, 3190 insertions, 998 deletions
diff --git a/Doxyfile b/Doxyfile
index c56f940..c214224 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -190,7 +190,7 @@ ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
USE_INLINE_TREES = YES
TREEVIEW_WIDTH = 250
-EXT_LINKS_IN_WINDOW = YES
+EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
diff --git a/INSTALL b/INSTALL
index 7adabd1..ef7908f 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.7.2-20101118
+DOXYGEN Version 1.7.2-20101224
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (18 November 2010)
+Dimitri van Heesch (24 December 2010)
diff --git a/README b/README
index 79dbd9c..213685f 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.7.2_20101118
+DOXYGEN Version 1.7.2_20101224
Please read INSTALL for compilation instructions.
@@ -26,4 +26,4 @@ forum.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (18 November 2010)
+Dimitri van Heesch (dimitri@stack.nl) (24 December 2010)
diff --git a/addon/doxywizard/doxywizard.qrc b/addon/doxywizard/doxywizard.qrc
index dd23c5d..88316ed 100644
--- a/addon/doxywizard/doxywizard.qrc
+++ b/addon/doxywizard/doxywizard.qrc
@@ -6,5 +6,6 @@
<file>images/file.png</file>
<file>images/folder.png</file>
<file>images/refresh.png</file>
+ <file>images/tunecolor.png</file>
</qresource>
</RCC>
diff --git a/addon/doxywizard/wizard.cpp b/addon/doxywizard/wizard.cpp
index b756d0f..bdccd81 100644
--- a/addon/doxywizard/wizard.cpp
+++ b/addon/doxywizard/wizard.cpp
@@ -117,6 +117,32 @@ static void updateStringOption(
//==========================================================================
+TuneColorDialog::TuneColorDialog(QWidget *parent) : QDialog(parent)
+{
+ setWindowTitle(tr("Tune the color of the HTML output"));
+ QGridLayout *layout = new QGridLayout(this);
+ m_image = new QImage(QString::fromAscii(":/images/tunecolor.png"));
+ m_imageLab = new QLabel;
+ m_imageLab->setPixmap(QPixmap::fromImage(*m_image));
+ layout->addWidget(new QLabel(tr("Example output: use the sliders to change")),0,0);
+ layout->addWidget(m_imageLab,1,0);
+ QHBoxLayout *buttonsLayout = new QHBoxLayout;
+
+ QPushButton *okButton = new QPushButton(tr("Ok"));
+ connect(okButton,SIGNAL(clicked()),SLOT(accept()));
+ okButton->setDefault(true);
+ QPushButton *cancelButton = new QPushButton(tr("Cancel"));
+ connect(cancelButton,SIGNAL(clicked()),SLOT(reject()));
+
+ buttonsLayout->addStretch();
+ buttonsLayout->addWidget(okButton);
+ buttonsLayout->addWidget(cancelButton);
+ layout->addLayout(buttonsLayout,5,0);
+
+}
+
+//==========================================================================
+
Step1::Step1(Wizard *wizard,const QHash<QString,Input*> &modelData) : m_wizard(wizard), m_modelData(modelData)
{
QVBoxLayout *layout = new QVBoxLayout(this);
@@ -477,9 +503,14 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
m_htmlOptionsGroup->addButton(r, 2);
// GENERATE_HTMLHELP
vbox->addWidget(r);
- m_searchEnabled=new QCheckBox(tr("With search function (requires PHP enabled web server)"));
+ m_searchEnabled=new QCheckBox(tr("With search function"));
vbox->addWidget(m_searchEnabled);
// SEARCH_ENGINE
+ QHBoxLayout *hbox = new QHBoxLayout;
+ m_tuneColor=new QPushButton(tr("Change color..."));
+ hbox->addWidget(m_tuneColor);
+ hbox->addStretch(1);
+ vbox->addLayout(hbox);
m_htmlOptions->setLayout(vbox);
m_htmlOptions->setChecked(true);
}
@@ -531,6 +562,13 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
SLOT(setHtmlOptions(int)));
connect(m_texOptionsGroup,SIGNAL(buttonClicked(int)),
SLOT(setLatexOptions(int)));
+ connect(m_tuneColor,SIGNAL(clicked()),SLOT(tuneColorDialog()));
+}
+
+void Step3::tuneColorDialog()
+{
+ TuneColorDialog tuneColor(this);
+ tuneColor.exec();
}
void Step3::setHtmlEnabled(bool b)
diff --git a/addon/doxywizard/wizard.h b/addon/doxywizard/wizard.h
index d482db9..94cccc2 100644
--- a/addon/doxywizard/wizard.h
+++ b/addon/doxywizard/wizard.h
@@ -17,6 +17,7 @@
#include <QSplitter>
#include <QHash>
+#include <QDialog>
class Input;
class QTreeWidget;
@@ -29,12 +30,26 @@ class QRadioButton;
class QGroupBox;
class QButtonGroup;
class Wizard;
+class QImage;
+class QLabel;
enum OptLang { Lang_Cpp, Lang_C, Lang_Java, Lang_CS };
enum HtmlStyle { HS_Plain, HS_TreeView, HS_CHM };
enum TexStyle { TS_PDFHyper, TS_PDF, TS_PS };
enum DiagramMode { DM_None, DM_Builtin, DM_Dot };
+class TuneColorDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ TuneColorDialog(QWidget *parent=0);
+
+ private:
+ QImage *m_image;
+ QLabel *m_imageLab;
+};
+
class Step1 : public QWidget
{
Q_OBJECT
@@ -103,6 +118,7 @@ class Step3 : public QWidget
void setSearchEnabled(int);
void setHtmlOptions(int);
void setLatexOptions(int);
+ void tuneColorDialog();
private:
QGroupBox *m_texOptions;
@@ -115,6 +131,7 @@ class Step3 : public QWidget
QCheckBox *m_rtfEnabled;
QCheckBox *m_xmlEnabled;
QCheckBox *m_searchEnabled;
+ QPushButton *m_tuneColor;
Wizard *m_wizard;
const QHash<QString,Input *> &m_modelData;
};
diff --git a/configure b/configure
index f2e9d00..c76413f 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=20101118
+doxygen_version_mmn=20101224
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
diff --git a/doc/commands.doc b/doc/commands.doc
index a954d1a..40b800d 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -189,6 +189,7 @@ documentation:
\refitem cmdhash \\\#
\refitem cmdperc \\\%
\refitem cmdquot \\\"
+\refitem cmddcolon \\\::
\endsecreflist
The following subsections provide a list of all commands that are recognized by
@@ -2702,6 +2703,14 @@ class Receiver
to indicate an unformatted text fragment.
<hr>
+\section cmddcolon \\::
+
+ \addindex \\\::
+ This command write a double colon (\::) to the output. This
+ character sequence has to be escaped in some cases, because it is used
+ to ref to documented entities.
+
+<hr>
\htmlonly <center> \endhtmlonly
<h2>
\htmlonly --- \endhtmlonly
diff --git a/doc/config.doc b/doc/config.doc
index 23d3b54..e9bd647 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -801,6 +801,16 @@ function's detailed documentation block.
putting \ref cmddeprecated "\\deprecated"
commands in the documentation.
+\anchor cfg_strict_proto_matching
+<dt>\c STRICT_PROTO_MATCHING <dd>
+ \addindex STRICT_PROTO_MATCHING
+ If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+ do proper type resolution of all parameters of a function it will reject a
+ match between the prototype and the implementation of a member function even
+ if there is only one candidate or it is obvious which candidate to choose
+ by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen
+ will still accept a match between prototype and implementation in such cases.
+
\anchor cfg_generate_todolist
<dt>\c GENERATE_TODOLIST <dd>
\addindex GENERATE_TODOLIST
diff --git a/doc/maintainers.txt b/doc/maintainers.txt
index 2205119..f909ba3 100644
--- a/doc/maintainers.txt
+++ b/doc/maintainers.txt
@@ -30,6 +30,7 @@ Maximiliano Pin: max dot pin at bitroit dot com
Albert Mora: [unreachable] amora at iua dot upf dot es
TranslatorChinese
+Lang Yang: lian dot yang dot cn at gmail dot com
Li Daobing: lidaobing at gmail dot com
Wei Liu: liuwei at asiainfo dot com
diff --git a/qtools/Doxyfile b/qtools/Doxyfile
index bf28583..9e2a9f4 100644
--- a/qtools/Doxyfile
+++ b/qtools/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.6.3
+# Doxyfile 1.7.2
#---------------------------------------------------------------------------
# Project related configuration options
@@ -62,6 +62,7 @@ SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
@@ -104,6 +105,7 @@ IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
@@ -131,9 +133,9 @@ HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_COLORSTYLE_HUE = 220
-HTML_COLORSTYLE_SAT = 80
+HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
-HTML_TIMESTAMP = NO
+HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = YES
@@ -165,6 +167,9 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_RELPATH = http://www.mathjax.org/mathjax
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
@@ -241,10 +246,10 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
+CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = YES
+HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = FreeSans.ttf
DOT_FONTSIZE = 10
@@ -263,6 +268,7 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
+MSCFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = YES
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a924dd6..355763d 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1434,6 +1434,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
// write all documentation for this class
void ClassDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString pageType = " ";
@@ -1459,12 +1460,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
m_impl->tempArgs != 0);
}
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,TRUE);
- if (getOuterScope()!=Doxygen::globalScope)
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);
+ if (!generateTreeView)
{
- writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
@@ -1621,8 +1625,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
}
+
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
- endFile(ol);
+ endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
@@ -1730,14 +1741,23 @@ void ClassDef::writeMemberList(OutputList &ol)
{
static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
if (m_impl->allMemberNameInfoSDict==0 || cOpt) return;
// only for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString memListFile = getMemberListFileName();
- startFile(ol,memListFile,memListFile,
- theTranslator->trMemberList(),HLI_ClassVisible);
+ startFile(ol,memListFile,memListFile,theTranslator->trMemberList(),
+ HLI_ClassVisible,!generateTreeView,getOutputFileBase());
+ if (!generateTreeView)
+ {
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
+ }
startTitle(ol,0);
ol.parseText(displayName()+" "+theTranslator->trMemberList());
endTitle(ol,0,0);
diff --git a/src/code.l b/src/code.l
index 82f807e..b69f216 100644
--- a/src/code.l
+++ b/src/code.l
@@ -1890,8 +1890,14 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
bool ambig;
bool found=FALSE;
FileDef *fd=0;
- //printf("looking for include %s\n",yytext);
- if ((fd=findFileDef(Doxygen::inputNameDict,yytext,ambig)) &&
+ QCString absPath = yytext;
+ if (g_sourceFileDef && QDir::isRelativePath(absPath))
+ {
+ absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
+ }
+
+ //printf("looking for include %s -> %s\n",yytext,absPath.data());
+ if ((fd=findFileDef(Doxygen::inputNameDict,absPath,ambig)) &&
fd->isLinkable())
{
if (ambig) // multiple input files match the name
diff --git a/src/config.l b/src/config.l
index 532b1c4..30ed8dc 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1303,6 +1303,7 @@ void Config::check()
filePatternList.append("*.py");
filePatternList.append("*.f90");
filePatternList.append("*.f");
+ filePatternList.append("*.for");
filePatternList.append("*.vhd");
filePatternList.append("*.vhdl");
if (portable_fileSystemIsCaseSensitive())
diff --git a/src/config.xml b/src/config.xml
index d7d4669..e9cd4a7 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -15,6 +15,17 @@ The PROJECT_NUMBER tag can be used to enter a project or revision number.
This could be handy for archiving the generated documentation or
if some version control system is used.
' defval=''/>
+ <option type='string' id='PROJECT_BRIEF' format='string' docs='
+Using the PROJECT_BRIEF tag one can provide an optional one line description
+for a project that appears at the top of each page and should give viewer
+a quick idea about the purpose of the project. Keep the description short.
+' defval=''/>
+ <option type='string' id='PROJECT_LOGO' format='file' docs='
+With the PROJECT_LOGO tag one can specify an logo or icon that is
+included in the documentation. The maximum height of the logo should not
+exceed 55 pixels and the maximum width should not exceed 200 pixels.
+Doxygen will copy the logo to the output directory.
+' defval=''/>
<option type='string' id='OUTPUT_DIRECTORY' format='dir' docs='
The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
base path where the generated documentation will be put.
@@ -565,7 +576,7 @@ and *.h) to filter out the source-files in the directories. If left
blank the following patterns are tested:
*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-*.f90 *.f *.vhd *.vhdl
+*.f90 *.f *.for *.vhd *.vhdl
'>
<value name='*.c'/>
<value name='*.cc'/>
@@ -596,6 +607,7 @@ blank the following patterns are tested:
<value name='*.py'/>
<value name='*.f90'/>
<value name='*.f'/>
+ <value name='*.for'/>
<value name='*.vhd'/>
<value name='*.vhdl'/>
</option>
@@ -666,7 +678,7 @@ input file. Doxygen will then use the output that the filter program writes
to standard output. If FILTER_PATTERNS is specified, this tag will be
ignored.
' defval=''/>
- <option type='list' id='FILTER_PATTERNS' format='file' docs='
+ <option type='list' id='FILTER_PATTERNS' format='string' docs='
The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
basis. Doxygen will compare the file name with each pattern and apply the
filter if there is a match. The filters are a list of the form:
@@ -680,7 +692,7 @@ If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
INPUT_FILTER) will be used to filter the input files when producing source
files to browse (i.e. when SOURCE_BROWSER is set to YES).
' defval='0'/>
- <option type='list' id='FILTER_SOURCE_PATTERNS' format='file' docs='
+ <option type='list' id='FILTER_SOURCE_PATTERNS' format='string' docs='
The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
pattern. A pattern will override the setting for FILTER_PATTERN (if any)
and it is also possible to disable source filtering for a specific pattern
diff --git a/src/configoptions.cpp b/src/configoptions.cpp
index d3d4aa4..99c33c3 100644
--- a/src/configoptions.cpp
+++ b/src/configoptions.cpp
@@ -44,6 +44,20 @@ void addConfigOptions(Config *cfg)
);
//----
cs = cfg->addString(
+ "PROJECT_BRIEF",
+ "Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short."
+ );
+ //----
+ cs = cfg->addString(
+ "PROJECT_LOGO",
+ "With the PROJECT_LOGO tag one can specify an logo or icon that is\n"
+ "included in the documentation. The maximum height of the logo should not\n"
+ "exceed 55 pixels and the maximum width should not exceed 200 pixels.\n"
+ "Doxygen will copy the logo to the output directory."
+ );
+ cs->setWidgetType(ConfigString::File);
+ //----
+ cs = cfg->addString(
"OUTPUT_DIRECTORY",
"The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)\n"
"base path where the generated documentation will be put.\n"
@@ -811,7 +825,7 @@ void addConfigOptions(Config *cfg)
"blank the following patterns are tested:\n"
"*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh\n"
"*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py\n"
- "*.f90 *.f *.vhd *.vhdl"
+ "*.f90 *.f *.for *.vhd *.vhdl"
);
cl->addValue("*.c");
cl->addValue("*.cc");
@@ -842,6 +856,7 @@ void addConfigOptions(Config *cfg)
cl->addValue("*.py");
cl->addValue("*.f90");
cl->addValue("*.f");
+ cl->addValue("*.for");
cl->addValue("*.vhd");
cl->addValue("*.vhdl");
//----
@@ -945,7 +960,6 @@ void addConfigOptions(Config *cfg)
"info on how filters are used. If FILTER_PATTERNS is empty or if\n"
"non of the patterns match the file name, INPUT_FILTER is applied."
);
- cl->setWidgetType(ConfigList::File);
//----
cb = cfg->addBool(
"FILTER_SOURCE_FILES",
@@ -964,7 +978,6 @@ void addConfigOptions(Config *cfg)
"FILTER_SOURCE_FILES is enabled."
);
cl->addDependency("FILTER_SOURCE_FILES");
- cl->setWidgetType(ConfigList::File);
//---------------------------------------------------------------------------
cfg->addInfo("Source Browser","configuration options related to source browsing");
//---------------------------------------------------------------------------
diff --git a/src/defargs.l b/src/defargs.l
index 048fafd..048d6f6 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -275,11 +275,10 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
int i=l-1;
while (i>=0 && (isspace((uchar)g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
- //printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
- // a->type.data(),a->name.data(),i,l);
+ // a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
@@ -300,24 +299,28 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
- a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
+ a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
// if the type becomes a type specifier only then we make a mistake
// and need to correct it to avoid seeing a nameless parameter
// "struct A" as a parameter with type "struct" and name "A".
int sv=0;
- if (a->type.left(6)=="const ") sv=6;
- else if (a->type.left(8)=="volatile ") sv=9;
- if (a->type.mid(sv)=="struct" ||
- a->type.mid(sv)=="union" ||
- a->type.mid(sv)=="class" ||
- a->type.mid(sv)=="typename" ||
- a->type=="const" || a->type=="volatile")
+ if (a->type.left(6)=="const ") sv=6;
+ else if (a->type.left(9)=="volatile ") sv=9;
+
+ if (a->type.mid(sv)=="struct" ||
+ a->type.mid(sv)=="union" ||
+ a->type.mid(sv)=="class" ||
+ a->type.mid(sv)=="typename" ||
+ a->type=="const" ||
+ a->type=="volatile"
+ )
{
a->type = a->type + " " + a->name;
a->name.resize(0);
}
+ //printf(" --> a->type='%s'\n",a->type.data());
}
else // assume only the type was specified, try to determine name later
{
diff --git a/src/definition.cpp b/src/definition.cpp
index e4cf2c8..5c62632 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -575,6 +575,7 @@ static bool readCodeFragment(const char *fileName,
char cn=0;
while (lineNr<=endLine && !feof(f) && !found)
{
+ int pc=0;
while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
{
//printf("parsing char `%c'\n",c);
@@ -586,10 +587,24 @@ static bool readCodeFragment(const char *fileName,
{
col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
}
+ else if (pc=='/' && c=='/') // skip single line comment
+ {
+ while ((c=fgetc(f))!='\n' && c!=EOF) pc=c;
+ if (c=='\n') lineNr++,col=0;
+ }
+ else if (pc=='/' && c=='*') // skip C style comment
+ {
+ while (((c=fgetc(f))!='/' || pc!='*') && c!=EOF)
+ {
+ if (c=='\n') lineNr++,col=0;
+ pc=c;
+ }
+ }
else
{
col++;
}
+ pc = c;
}
if (c==':')
{
@@ -1291,7 +1306,7 @@ void Definition::writePathFragment(OutputList &ol) const
{
m_impl->outerScope->writePathFragment(ol);
}
- ol.writeString(" <li>");
+ ol.writeString(" <li class=\"navelem\">");
if (isLinkable())
{
if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
@@ -1327,14 +1342,31 @@ void Definition::writePathFragment(OutputList &ol) const
void Definition::writeNavigationPath(OutputList &ol) const
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool hasCustomFooter = !Config_getString("HTML_FOOTER").isEmpty();
+
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- ol.writeString(" <div class=\"navpath\">\n");
+ if (generateTreeView)
+ {
+ ol.writeString("</div>\n");
+ }
+
+ ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
ol.writeString(" <ul>\n");
writePathFragment(ol);
- ol.writeString(" </ul>\n");
- ol.writeString(" </div>\n");
+ if (!hasCustomFooter)
+ {
+ if (generateTreeView) // write the doxygen logo as part of the navigation bar
+ {
+ ol.writeString(" <li class=\"footer\">");
+ ol.writeLogo();
+ ol.writeString("</li>\n");
+ }
+ ol.writeString(" </ul>\n");
+ ol.writeString(" </div>\n");
+ }
ol.popGeneratorState();
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 333513b..2a88c06 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -191,12 +191,12 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
{
msg("Generating dependency graph for directory %s\n",displayName().data());
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
+ //ol.startParagraph();
ol.startDirDepGraph();
//TODO: ol.parseText(theTranslator->trDirDepGraph());
ol.parseText((QCString)"Directory dependency graph for "+displayName()+":");
ol.endDirDepGraph(dirDep);
- ol.endParagraph();
+ //ol.endParagraph();
ol.enableAll();
}
}
@@ -318,16 +318,19 @@ void DirDef::endMemberDeclarations(OutputList &ol)
void DirDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
QCString shortTitle=theTranslator->trDirReference(m_shortName);
QCString title=theTranslator->trDirReference(m_dispName);
- startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
+ startFile(ol,getOutputFileBase(),name(),title,HLI_None,!generateTreeView);
- // write navigation path
- writeNavigationPath(ol);
-
- ol.endQuickIndices();
+ if (!generateTreeView)
+ {
+ // write navigation path
+ writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
@@ -422,35 +425,18 @@ void DirDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
- endFile(ol);
- ol.popGeneratorState();
-
-
-}
+ ol.endContents();
-#if 0
-void DirDef::writePathFragment(OutputList &ol) const
-{
- if (m_parent)
+ if (generateTreeView)
{
- m_parent->writePathFragment(ol);
- ol.writeString("&#160;/&#160;");
+ writeNavigationPath(ol);
}
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,shortName());
-}
-void DirDef::writeNavigationPath(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
+ endFile(ol,TRUE);
+ ol.popGeneratorState();
- ol.writeString("<div class=\"nav\">\n");
- writePathFragment(ol);
- ol.writeString("</div>\n");
- ol.popGeneratorState();
}
-#endif
void DirDef::setLevel()
{
@@ -701,6 +687,7 @@ static void writePartialFilePath(OutputList &ol,const DirDef *root,const FileDef
void DirRelation::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
@@ -710,28 +697,24 @@ void DirRelation::writeDocumentation(OutputList &ol)
QCString title=theTranslator->trDirRelation(
m_src->displayName()+" -> "+
m_dst->dir()->shortName());
- startFile(ol,getOutputFileBase(),getOutputFileBase(),title);
+ startFile(ol,getOutputFileBase(),getOutputFileBase(),
+ title,HLI_None,!generateTreeView,m_src->getOutputFileBase());
- // write navigation path
- m_src->writeNavigationPath(ol);
+ if (!generateTreeView)
+ {
+ // write navigation path
+ m_src->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
ol.startContents();
- //startTitle(ol,getOutputFileBase());
- // ol.parseText(shortTitle);
- //endTitle(ol,getOutputFileBase(),title);
ol.writeString("<h3>"+shortTitle+"</h3>");
-
ol.writeString("<table class=\"dirtab\">");
ol.writeString("<tr class=\"dirtab\">");
- // TODO: translate me! "File in %s"
ol.writeString("<th class=\"dirtab\">");
ol.parseText(theTranslator->trFileIn(m_src->pathFragment()));
- //m_src->writePathFragment(ol);
ol.writeString("</th>");
- // TODO: translate me! "Includes file in %s"
ol.writeString("<th class=\"dirtab\">");
- //ol.writeString("Includes file in ");
- //m_dst->dir()->writePathFragment(ol);
ol.parseText(theTranslator->trIncludesFileIn(m_dst->dir()->pathFragment()));
ol.writeString("</th>");
ol.writeString("</tr>");
@@ -750,8 +733,15 @@ void DirRelation::writeDocumentation(OutputList &ol)
ol.writeString("</tr>");
}
ol.writeString("</table>");
+
+ ol.endContents();
- endFile(ol);
+ if (generateTreeView)
+ {
+ m_src->writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
ol.popGeneratorState();
}
diff --git a/src/dot.cpp b/src/dot.cpp
index 423e45d..134f51a 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -453,7 +453,7 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
out << "<iframe src=\""
<< relPath << baseName << ".svg\" width=\""
<< ((width*96+48)/72) << "\" height=\""
- << ((height*96+48)/72) << "\">";
+ << ((height*96+48)/72) << "\" frameborder=\"0\" scrolling=\"no\">";
writeSVGNotSupported(out);
// out << "</object>";
out << "</iframe>";
@@ -1744,7 +1744,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
QCString baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
- baseName = convertNameToFile(baseName);
+ //baseName = convertNameToFile(baseName);
QCString imgName = baseName+"."+ imgExt;
QCString mapName = baseName+".map";
QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
diff --git a/src/dot.h b/src/dot.h
index 0b45af5..be243e9 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -144,7 +144,7 @@ class DotGfxHierarchyTable
public:
DotGfxHierarchyTable();
~DotGfxHierarchyTable();
- void writeGraph(FTextStream &t,const char *path,const char *fileName) const;
+ void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
private:
void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index f229ded..124c980 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -672,6 +672,7 @@ static void buildFileList(EntryNav *rootNav)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{
gd->addFile(fd);
+ fd->makePartOfGroup(gd);
//printf("File %s: in group %s\n",fd->name().data(),s->data());
}
}
@@ -8554,34 +8555,66 @@ static void readTagFile(Entry *root,const char *tl)
}
//----------------------------------------------------------------------------
+static void copyFile(const QCString &src,const QCString &dest)
+{
+ QFile sf(src);
+ if (sf.open(IO_ReadOnly))
+ {
+ QFileInfo fi(src);
+ QFile df(dest);
+ if (df.open(IO_WriteOnly))
+ {
+ char *buffer = new char[fi.size()];
+ sf.readBlock(buffer,fi.size());
+ df.writeBlock(buffer,fi.size());
+ df.flush();
+ delete[] buffer;
+ }
+ else
+ {
+ err("error: could not write to file %s\n",dest.data());
+ }
+ }
+ else
+ {
+ err("error: could not open user specified file %s\n",src.data());
+ }
+}
+
static void copyStyleSheet()
{
QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
if (!htmlStyleSheet.isEmpty())
{
- QFile cssf(htmlStyleSheet);
- QFileInfo cssfi(htmlStyleSheet);
- if (cssf.open(IO_ReadOnly))
+ QFileInfo fi(htmlStyleSheet);
+ if (!fi.exists())
{
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+cssfi.fileName().data();
- QFile df(destFileName);
- if (df.open(IO_WriteOnly))
- {
- char *buffer = new char[cssf.size()];
- cssf.readBlock(buffer,cssf.size());
- df.writeBlock(buffer,cssf.size());
- df.flush();
- delete[] buffer;
- }
- else
- {
- err("error: could not write to style sheet %s\n",destFileName.data());
- }
+ err("Style sheet '%s' specified by HTML_STYLESHEET does not exist!\n",htmlStyleSheet.data());
+ htmlStyleSheet.resize(0); // revert to the default
}
else
{
- err("error: could not open user specified style sheet %s\n",Config_getString("HTML_STYLESHEET").data());
- htmlStyleSheet.resize(0); // revert to the default
+ QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
+ copyFile(htmlStyleSheet,destFileName);
+ }
+ }
+}
+
+static void copyLogo()
+{
+ QCString &projectLogo = Config_getString("PROJECT_LOGO");
+ if (!projectLogo.isEmpty())
+ {
+ QFileInfo fi(projectLogo);
+ if (!fi.exists())
+ {
+ err("Project logo '%s' specified by PROJECT_LOGO does not exist!\n",projectLogo.data());
+ projectLogo.resize(0); // revert to the default
+ }
+ else
+ {
+ QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
+ copyFile(projectLogo,destFileName);
}
}
}
@@ -10340,6 +10373,7 @@ void generateOutput()
#endif
//if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages();
copyStyleSheet();
+ copyLogo();
if (!generateTreeView && Config_getBool("USE_INLINE_TREES"))
{
FTVHelp::generateTreeViewImages();
diff --git a/src/doxygen.css b/src/doxygen.css
index 3a07205..226cefd 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -636,14 +636,14 @@ table.doxtable th {
list-style-type:none;
float:left;
padding-left:10px;
- padding-right: 15px;
+ padding-right:15px;
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:##45;
}
-.navpath a
+.navpath li.navelem a
{
height:32px;
display:block;
@@ -651,11 +651,25 @@ table.doxtable th {
outline: none;
}
-.navpath a:hover
+.navpath li.navelem a:hover
{
color:##80;
}
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:##45;
+ font-size: 8pt;
+}
+
+
div.summary
{
float: right;
@@ -670,6 +684,19 @@ div.summary a
white-space: nowrap;
}
+div.ingroups
+{
+ font-size: 8pt;
+ padding-left: 5px;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
div.header
{
background-image:url('nav_h.png');
@@ -724,3 +751,44 @@ dl.bug
border-color: #C08050;
}
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectname
+{
+ font: 300% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectbrief
+{
+ font: 120% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid ##70;
+}
+
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index 63bcd89..f00828b 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -636,14 +636,14 @@
" list-style-type:none;\n"
" float:left;\n"
" padding-left:10px;\n"
-" padding-right: 15px;\n"
+" padding-right:15px;\n"
" background-image:url('bc_s.png');\n"
" background-repeat:no-repeat;\n"
" background-position:right;\n"
" color:##45;\n"
"}\n"
"\n"
-".navpath a\n"
+".navpath li.navelem a\n"
"{\n"
" height:32px;\n"
" display:block;\n"
@@ -651,11 +651,25 @@
" outline: none;\n"
"}\n"
"\n"
-".navpath a:hover\n"
+".navpath li.navelem a:hover\n"
"{\n"
" color:##80;\n"
"}\n"
"\n"
+".navpath li.footer\n"
+"{\n"
+" list-style-type:none;\n"
+" float:right;\n"
+" padding-left:10px;\n"
+" padding-right:15px;\n"
+" background-image:none;\n"
+" background-repeat:no-repeat;\n"
+" background-position:right;\n"
+" color:##45;\n"
+" font-size: 8pt;\n"
+"}\n"
+"\n"
+"\n"
"div.summary\n"
"{\n"
" float: right;\n"
@@ -670,6 +684,19 @@
" white-space: nowrap;\n"
"}\n"
"\n"
+"div.ingroups\n"
+"{\n"
+" font-size: 8pt;\n"
+" padding-left: 5px;\n"
+" width: 50%;\n"
+" text-align: left;\n"
+"}\n"
+"\n"
+"div.ingroups a\n"
+"{\n"
+" white-space: nowrap;\n"
+"}\n"
+"\n"
"div.header\n"
"{\n"
" background-image:url('nav_h.png');\n"
@@ -724,3 +751,44 @@
" border-color: #C08050;\n"
"}\n"
"\n"
+"#projectlogo\n"
+"{\n"
+" text-align: center;\n"
+" vertical-align: bottom;\n"
+" border-collapse: separate;\n"
+"}\n"
+" \n"
+"#projectlogo img\n"
+"{ \n"
+" border: 0px none;\n"
+"}\n"
+" \n"
+"#projectname\n"
+"{\n"
+" font: 300% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+" \n"
+"#projectbrief\n"
+"{\n"
+" font: 120% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+"\n"
+"#projectnumber\n"
+"{\n"
+" font: 50% arial,sans-serif;\n"
+" margin: 0px;\n"
+" padding: 0px;\n"
+"}\n"
+"\n"
+"#titlearea\n"
+"{\n"
+" padding: 0px;\n"
+" margin: 0px;\n"
+" width: 100%;\n"
+" border-bottom: 1px solid ##70;\n"
+"}\n"
+"\n"
diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp
index 8669530..fe7d4f1 100644
--- a/src/eclipsehelp.cpp
+++ b/src/eclipsehelp.cpp
@@ -84,7 +84,9 @@ void EclipseHelp::initialize()
{
title = "Doxygen generated documentation";
}
- m_tocstream << "<toc label=\"" << convertToXML(title) << "\">" << endl;
+ m_tocstream << "<toc label=\"" << convertToXML(title)
+ << "\" topic=\"" << convertToXML(m_pathprefix)
+ << "index" << Doxygen::htmlFileExtension << "\">" << endl;
++ m_depth;
}
@@ -155,7 +157,7 @@ void EclipseHelp::decContentsDepth()
* @param anchor Name of an anchor of the item.
*/
void EclipseHelp::addContentsItem(
- bool isDir,
+ bool /* isDir */,
const char *name,
const char * /* ref */,
const char *file,
@@ -165,8 +167,8 @@ void EclipseHelp::addContentsItem(
closedTag();
indent();
m_tocstream << "<topic label=\"" << convertToXML(name) << "\"";
- if (!isDir && file)
- { // -- Eclipse help cannot handle directories
+ if (file)
+ {
m_tocstream << " href=\"" << convertToXML(m_pathprefix)
<< file << Doxygen::htmlFileExtension;
if (anchor)
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 1cc840b..d049376 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -497,6 +497,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
*/
void FileDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
//funcList->countDecMembers();
//QCString fn = name();
@@ -517,9 +518,12 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE);
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
+ if (!generateTreeView)
+ {
+ getDirDef()->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
QCString pageTitleShort=theTranslator->trFileReference(name());
startTitle(ol,getOutputFileBase(),this);
ol.pushGeneratorState();
@@ -534,7 +538,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
else
{
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
+ if (!generateTreeView)
+ {
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
@@ -672,7 +680,14 @@ void FileDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
- endFile(ol);
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
@@ -746,6 +761,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
/*! Write a source listing of this file to the output */
void FileDef::writeSource(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
QCString title = docname;
@@ -760,16 +776,21 @@ void FileDef::writeSource(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
+ startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
+ !generateTreeView,getOutputFileBase());
+ if (!generateTreeView)
+ {
+ getDirDef()->writeNavigationPath(ol);
+ ol.endQuickIndices();
+ }
startTitle(ol,getOutputFileBase());
ol.parseText(name());
endTitle(ol,getOutputFileBase(),title);
}
else
{
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
+ startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
+ !generateTreeView,getOutputFileBase());
startTitle(ol,getSourceFileBase());
ol.parseText(title);
endTitle(ol,getSourceFileBase(),0);
@@ -795,7 +816,15 @@ void FileDef::writeSource(OutputList &ol)
);
ol.endCodeFragment();
ol.endContents();
- endFile(ol);
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ endFile(ol,TRUE);
+ }
+ else
+ {
+ endFile(ol);
+ }
ol.enableAll();
}
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index 3156eb1..03f75d4 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -66,6 +66,7 @@
#define YY_NEVER_INTERACTIVE 1
enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
+enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
// {{{ ----- Helper structs -----
//! Holds modifiers (ie attributes) for one symbol (variable, function, etc)
@@ -86,11 +87,15 @@ struct SymbolModifiers {
bool pointer;
bool target;
bool save;
+ bool nopass;
+ bool pass;
+ QCString passVar;
SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
optional(FALSE), dimension(), allocatable(FALSE),
external(FALSE), intrinsic(FALSE), parameter(FALSE),
- pointer(FALSE), target(FALSE), save(FALSE) {}
+ pointer(FALSE), target(FALSE), save(FALSE),
+ nopass(FALSE), pass(FALSE), passVar() {}
SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
SymbolModifiers& operator|=(QCString mdfrString);
@@ -158,6 +163,7 @@ static int initializerArrayScope; // number if nested array scope
static int initializerScope; // number if nested function calls in initializer
static QCString useModuleName; // name of module in the use statement
static Protection defaultProtection;
+static InterfaceType ifType = IF_NONE;
static char stringStartSymbol; // single or double quote
@@ -174,7 +180,7 @@ static void handleCommentBlock(const QCString &doc,bool brief);
static void addCurrentEntry();
static void addModule(const char *name, bool isModule=FALSE);
static void addSubprogram(const char *text);
-static void addInterface(QCString name);
+static void addInterface(QCString name, InterfaceType type);
static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs);
static void scanner_abort();
@@ -205,7 +211,7 @@ SEPARATE [:, \t]
ID [a-z_A-Z%]+{IDSYM}*
PP_ID {ID}
LABELID [a-z_A-Z]+[a-z_A-Z0-9\-]*
-SUBPROG (subroutine|function|block)
+SUBPROG (subroutine|function)
B [ \t]
BS [ \t]*
BS_ [ \t]+
@@ -220,11 +226,12 @@ NOARGS {BS}"\n"
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
+TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}|PROCEDURE{ARGS})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET)
+ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS})
ACCESS_SPEC (PRIVATE|PUBLIC)
+LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
/* Assume that attribute statements are almost the same as attributes. */
ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
@@ -403,38 +410,52 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_pop_state();
}
- /*------ ignore special fortran statements */
-<Start,ModuleBody,SubprogBody>^[ \t]*interface({BS_}{ID}({ARGS}?)?)?/{BS}(!|\n) { // handle interface block
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
+ /* INTERFACE definitions */
+<Start,ModuleBody,SubprogBody>{
+^{BS}interface { ifType = IF_SPECIFIC;
+ yy_push_state(InterfaceBody);
+ // do not start a scope here, every
+ // interface body is a scope of its own
+ }
- QCString name = yytext;
- int index = name.find("interface", 0, FALSE);
- index = name.find(QRegExp("[^ \\t]"), index+9);
- //printf(stderr,"%s,%d\n",name.data(),index);
- if (index!=-1)
- name = name.right(name.length()-index);
- else // interface without name, must be inside subprog
- name = "interface";
- addInterface(name);
- yy_push_state(InterfaceBody);
- startScope(last_entry);
+^{BS}abstract{BS_}interface { ifType = IF_ABSTRACT;
+ yy_push_state(InterfaceBody);
+ // do not start a scope here, every
+ // interface body is a scope of its own
}
-<InterfaceBody>^{BS}"end"({BS}"interface"({BS_}{ID}{ARGS}?)?)?{BS}/(\n|!) {
- if (!endScope(current_root))
- yyterminate();
- yy_pop_state();
+
+^{BS}interface{BS_}{ID} { ifType = IF_GENERIC;
+ yy_push_state(InterfaceBody);
+
+ // extract generic name
+ QCString name = QCString(yytext).stripWhiteSpace();
+ name = name.right(name.length() - 9).stripWhiteSpace();
+ addInterface(name, ifType);
+
+ startScope(last_entry);
+ }
+}
+
+<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
+ // end scope only if GENERIC interface
+ if (ifType == IF_GENERIC && !endScope(current_root))
+ yyterminate();
+
+ ifType = IF_NONE;
+ yy_pop_state();
}
<InterfaceBody>module{BS}procedure { yy_push_state(YY_START);
BEGIN(ModuleProcedure);
}
-<ModuleProcedure>{ID} {
+<ModuleProcedure>{ID} { if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface(yytext, ifType);
+ startScope(last_entry);
+ }
+
current->section = Entry::FUNCTION_SEC ;
current->name = yytext;
- moduleProcedures.append(current);
+ moduleProcedures.append(current);
addCurrentEntry();
}
<ModuleProcedure>"\n" { unput(*yytext);
@@ -485,7 +506,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- type definition -------------------------------------------------------------------------------*/
-<Start,ModuleBody>"type"({BS_}|({COMMA}{ACCESS_SPEC})) { /* type definition found : TYPE , access-spec::type-name |*/
+<Start,ModuleBody>"type"({BS_}|({COMMA}{ACCESS_SPEC}|{COMMA}{LANGUAGE_BIND_SPEC})) {
if(YY_START == Start)
{
addModule(NULL);
@@ -498,6 +519,9 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
<Typedef>{ACCESS_SPEC} {
QCString type= yytext;
}
+<Typedef>{LANGUAGE_BIND_SPEC} {
+ /* ignored for now */
+ }
<Typedef>{ID} { /* type name found */
//cout << "=========> got typedef " << yytext << ": " << yyLineNr << endl;
current->section = Entry::CLASS_SEC; // was Entry::STRUCT_SEC;
@@ -528,12 +552,14 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------- module/global/typedef variable ---------------------------------------------------*/
<SubprogBody,SubprogBodyContains>^{BS}[0-9]*{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) {
- //fprintf(stderr,"1e=========> got end subprog: %s\n", yytext);
+ //
+ // ABSTRACT and specific interfaces are stored
+ // in a scope of their own, even if multiple
+ // are group in one INTERFACE/END INTERFACE block.
+ //
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ endScope(current_root);
- /* args is used for parameters in list of functions, argList for
- parameters in detailed function descripttion */
- //current->args = argListToString(current->argList);
- //current->endBodyLine = yyLineNr; // ??? what ist endBodyLine for
if (!endScope(current_root))
yyterminate();
yy_pop_state() ;
@@ -692,15 +718,18 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------ fortran subroutine/function handling ------------------------------------------------------------*/
/* Start is initial condition */
-<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} {
- // TYPE_SPEC is for old function style function result
- result= yytext;
- result= result.stripWhiteSpace();
- //extractPrefix(result);
- //fprintf(stderr, "===%s\n", (const char*)result);
- current->type = result;
- yy_push_state(SubprogPrefix);
- }
+<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} {
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface(yytext, ifType);
+ startScope(last_entry);
+ }
+
+ // TYPE_SPEC is for old function style function result
+ result = QCString(yytext).stripWhiteSpace();
+ current->type = result;
+ yy_push_state(SubprogPrefix);
+ }
<SubprogPrefix>{BS}{SUBPROG}{BS_} {
// Fortran subroutine or function found
@@ -710,20 +739,30 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{SUBPROG}{BS_} {
// Fortran subroutine or function found
- result= yytext;
- result= result.stripWhiteSpace();
- //extractPrefix(result);
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ addInterface("$interface$", ifType);
+ startScope(last_entry);
+ }
+
+ result = QCString(yytext).stripWhiteSpace();
addSubprogram(result);
yy_push_state(Subprog);
}
<Subprog>{BS} { /* ignore white space */ }
-<Subprog>{ID} { current->name = yytext;
- //cout << "1a==========> got " << current->type << " " << yytext << " " << yyLineNr << endl;
- modifiers[current_root][current->name.lower()].returnName = current->name;
- BEGIN(Parameterlist);
- }
-<Parameterlist>{ARGS} {
+<Subprog>{ID} { current->name = yytext;
+ //cout << "1a==========> got " << current->type << " " << yytext << " " << yyLineNr << endl;
+ modifiers[current_root][current->name.lower()].returnName = current->name;
+
+ if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
+ {
+ current_root->name.replace(QRegExp("\\$interface\\$"), yytext);
+ }
+
+ BEGIN(Parameterlist);
+ }
+<Parameterlist>{ARGS} {
//current->type not yet available
QCString arglist= yytext;
//cout << "3=========> got parameterlist " << yytext << endl;
@@ -735,6 +774,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->args = removeRedundantWhiteSpace(current->args);
stringToArgumentList(current->args, current->argList);
addCurrentEntry();
+
startScope(last_entry);
BEGIN(SubprogBody);
}
@@ -1168,6 +1208,9 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
pointer |= mdfs.pointer;
target |= mdfs.target;
save |= mdfs.save;
+ nopass |= mdfs.nopass;
+ pass |= mdfs.pass;
+ passVar = mdfs.passVar;
return *this;
}
@@ -1230,6 +1273,15 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
{
newMdf.save = TRUE;
}
+ else if (mdfString=="nopass")
+ {
+ newMdf.nopass = TRUE;
+ }
+ else if (mdfString.contains("pass"))
+ {
+ newMdf.pass = TRUE;
+ newMdf.passVar = extractFromParens(mdfString);
+ }
(*this) |= newMdf;
return *this;
@@ -1336,6 +1388,16 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
typeName += ",";
typeName += "save";
}
+ if (mdfs.nopass)
+ {
+ typeName += ",";
+ typeName += "nopass";
+ }
+ if (mdfs.pass)
+ {
+ typeName += ",";
+ typeName += "pass(" + mdfs.passVar + ")";
+ }
if (mdfs.protection == SymbolModifiers::PUBLIC)
{
typeName += ",";
@@ -1570,23 +1632,40 @@ static void addSubprogram(const char *text)
* \note Code was brought to this procedure from the parser,
* because there was/is idea to use it in several parts of the parser.
*/
-static void addInterface(QCString name)
+static void addInterface(QCString name, InterfaceType type)
{
+ if (YY_START == Start)
+ {
+ addModule(NULL);
+ yy_push_state(ModuleBody); //anon program
+ }
+
current->section = Entry::CLASS_SEC; // was Entry::INTERFACE_SEC;
current->spec = Entry::Interface;
current->name = name;
+ switch (type)
+ {
+ case IF_ABSTRACT:
+ current->type = "abstract";
+ break;
+
+ case IF_GENERIC:
+ current->type = "generic";
+ break;
+
+ case IF_SPECIFIC:
+ case IF_NONE:
+ default:
+ current->type = "";
+ }
+
/* if type is part of a module, mod name is necessary for output */
if ((current_root) &&
(current_root->section == Entry::CLASS_SEC ||
current_root->section == Entry::NAMESPACE_SEC))
{
- current->name= current_root->name+"::"+current->name;
- }
- if ((current_root) &&
- (current_root->section == Entry::FUNCTION_SEC))
- {
- current->name = getFullName(current_root) + "__" + QCString(current->name);
+ current->name= current_root->name + "::" + current->name;
}
current->fileName = yyFileName;
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 95ff514..754ea25 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -30,9 +30,29 @@
#include "doxygen.h"
#include "language.h"
#include "htmlgen.h"
+#include "layout.h"
#define MAX_INDENT 1024
+
+static const char navtree_script[]=
+#include "navtree_js.h"
+;
+
+static const char resize_script[]=
+#include "resize_js.h"
+;
+
+static const char jquery_script[]=
+#include "jquery_js.h"
+;
+
+static const char navtree_css[]=
+#include "navtree_css.h"
+;
+
+
+#if 0
unsigned char ftv2blank_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x16,
@@ -301,23 +321,415 @@ unsigned char ftv2vertline_png[] = {
0x3a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82
};
+#endif
-FTVImageInfo image_info[] =
-{
- { "&#160;", "ftv2blank.png",ftv2blank_png,174,16,22 },
- { "*", "ftv2doc.png",ftv2doc_png,255,24,22 },
- { "+", "ftv2folderclosed.png",ftv2folderclosed_png,259,24,22 },
- { "-", "ftv2folderopen.png",ftv2folderopen_png,261,24,22 },
- { "\\", "ftv2lastnode.png",ftv2lastnode_png,233,16,22 },
- { "-", "ftv2link.png",ftv2link_png,358,24,22 },
- { "\\", "ftv2mlastnode.png",ftv2mlastnode_png,160,16,22 },
- { "o", "ftv2mnode.png",ftv2mnode_png,194,16,22 },
- { "o", "ftv2node.png",ftv2node_png,235,16,22 },
- { "\\", "ftv2plastnode.png",ftv2plastnode_png,165,16,22 },
- { "o", "ftv2pnode.png",ftv2pnode_png,200,16,22 },
- { "|", "ftv2vertline.png",ftv2vertline_png,229,16,22 },
- { 0,0,0,0,0,0 }
+static unsigned char blank_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char folderopen_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
+ 255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
+ 255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
+ 255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
+ 255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
+ 255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
+ 255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
+ 255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
+ 255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
+ 255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
+ 255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
+ 255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
+ 255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char folderopen_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char folderclosed_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
+ 255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
+ 255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
+ 255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
+ 255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
+ 255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
+ 255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
+ 255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
+ 255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
+ 255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
+ 255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
+ 255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
+ 255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char folderclosed_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
+ 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char doc_png[528] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
+ 255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
+ 255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
+ 255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
+ 255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
+ 255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
+ 255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
+ 255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
+ 255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
+ 255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
+ 255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
+ 255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
+ 255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
+ 255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
+ 255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char doc_a_png[528] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char arrow_right_png[352] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char arrow_right_a_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,255,255, 77, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static unsigned char arrow_down_png[352] =
+{
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
+ 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
+ 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
+ 255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
+ 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
+
+static unsigned char arrow_down_a_png[352] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,231,255,255,255,255,255,255,255,216, 0, 0, 0, 0,
+ 0, 0, 0, 87,255,255,255,255,255,255,255, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0,186,255,255,255,255,255,164, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 38,251,255,255,255,241, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,127,255,255,255,107, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,221,255,204, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 72,253, 52, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#define SPLITBAR_LINE 170,242,224,202,183,170
+#define SPLITBAR_BLOCK2 SPLITBAR_LINE , SPLITBAR_LINE
+#define SPLITBAR_BLOCK4 SPLITBAR_BLOCK2 , SPLITBAR_BLOCK2
+#define SPLITBAR_BLOCK8 SPLITBAR_BLOCK4 , SPLITBAR_BLOCK4
+#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8 , SPLITBAR_BLOCK8
+#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
+
+#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
+#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
+#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1 , SPLITBAR_ALTLINE2
+#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2
+#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
+
+static unsigned char splitbar_png[32*32*6] =
+{
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_ALTBLOCK8,
+ SPLITBAR_BLOCK8,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32,
+ SPLITBAR_BLOCK32
+};
+
+struct FTVImageInfo
+{
+ const char *alt;
+ const char *name;
+ const unsigned char *data;
+ unsigned int len;
+ unsigned short width, height;
+};
+
+//extern FTVImageInfo image_info[];
+
+#define FTVIMG_blank 0
+#define FTVIMG_doc 1
+#define FTVIMG_folderclosed 2
+#define FTVIMG_folderopen 3
+#define FTVIMG_lastnode 4
+#define FTVIMG_link 5
+#define FTVIMG_mlastnode 6
+#define FTVIMG_mnode 7
+#define FTVIMG_node 8
+#define FTVIMG_plastnode 9
+#define FTVIMG_pnode 10
+#define FTVIMG_vertline 11
+
+#define FTV_S(name) #name
+#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
+#define FTVIMG_INDEX(name) FTVIMG_ ## name
+#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
+#define FTV_IMGATTRIBS(name) \
+ "src=\"" FTV_ICON_FILE(name) "\" " \
+ "alt=\"" << FTV_INFO(name).alt << "\" " \
+ "width=\"" << FTV_INFO(name).width << "\" " \
+ "height=\"" << FTV_INFO(name).height << "\" "
+
+
+static FTVImageInfo image_info[] =
+{
+ { "&#160;", "ftv2blank.png", 0 /*ftv2blank_png*/ ,174,16,22 },
+ { "*", "ftv2doc.png", 0 /*ftv2doc_png*/ ,255,24,22 },
+ { "+", "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ ,259,24,22 },
+ { "-", "ftv2folderopen.png", 0 /*ftv2folderopen_png*/ ,261,24,22 },
+ { "\\", "ftv2lastnode.png", 0 /*ftv2lastnode_png*/ ,233,16,22 },
+ { "-", "ftv2link.png", 0 /*ftv2link_png*/ ,358,24,22 },
+ { "\\", "ftv2mlastnode.png", 0 /*ftv2mlastnode_png*/ ,160,16,22 },
+ { "o", "ftv2mnode.png", 0 /*ftv2mnode_png*/ ,194,16,22 },
+ { "o", "ftv2node.png", 0 /*ftv2node_png*/ ,235,16,22 },
+ { "\\", "ftv2plastnode.png", 0 /*ftv2plastnode_png*/ ,165,16,22 },
+ { "o", "ftv2pnode.png", 0 /*ftv2pnode_png*/ ,200,16,22 },
+ { "|", "ftv2vertline.png", 0 /*ftv2vertline_png*/ ,229,16,22 },
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+static ColoredImgDataItem ftv_image_data[] =
+{
+ { "ftv2blank.png", 16, 22, blank_png, blank_png },
+ { "ftv2doc.png", 24, 22, doc_png, doc_a_png },
+ { "ftv2folderclosed.png", 24, 22, folderclosed_png, folderclosed_a_png },
+ { "ftv2folderopen.png", 24, 22, folderopen_png, folderopen_a_png },
+ { "ftv2lastnode.png", 16, 22, blank_png, blank_png },
+ { "ftv2link.png", 24, 22, doc_png, doc_a_png },
+ { "ftv2mlastnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
+ { "ftv2mnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
+ { "ftv2node.png", 16, 22, blank_png, blank_png },
+ { "ftv2plastnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
+ { "ftv2pnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
+ { "ftv2vertline.png", 16, 22, blank_png, blank_png },
+ { "ftv2splitbar.png", 6,1024, splitbar_png, 0 },
+ { 0, 0, 0, 0, 0 }
};
struct FTVNode
@@ -514,6 +926,24 @@ void FTVHelp::generateLink(FTextStream &t,FTVNode *n)
}
}
+void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
+{
+ if (n->file.isEmpty()) // no link
+ {
+ t << "\"" << n->name << "\", null, ";
+ }
+ else // link into other page
+ {
+ // TODO: external links with installdox
+ // TODO: use m_topLevelIndex
+ t << "\"" << n->name << "\", \"";
+ t << externalRef("",n->ref,TRUE);
+ t << n->file << Doxygen::htmlFileExtension;
+ if (!n->anchor.isEmpty()) t << "#" << n->anchor;
+ t << "\", ";
+ }
+}
+
void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
{
QCString spaces;
@@ -543,6 +973,40 @@ void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
}
}
+bool FTVHelp::generateJSTree(FTextStream &t, const QList<FTVNode> &nl,int level,bool &first)
+{
+ QCString indentStr;
+ indentStr.fill(' ',level*2);
+ bool found=FALSE;
+ QListIterator<FTVNode> nli(nl);
+ FTVNode *n;
+ for (nli.toFirst();(n=nli.current());++nli)
+ {
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first=FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found=TRUE;
+
+ bool firstChild=TRUE;
+ t << indentStr << " [ ";
+ generateJSLink(t,n);
+ bool emptySection = !generateJSTree(t,n->children,level+1,firstChild);
+ if (emptySection)
+ t << "null ]";
+ else
+ t << endl << indentStr << " ] ]";
+ }
+ return found;
+}
+
+
+#if 0
void FTVHelp::generateTreeViewImages()
{
static bool done=FALSE;
@@ -567,7 +1031,78 @@ void FTVHelp::generateTreeViewImages()
p++;
}
}
+#endif
+
+// new style images
+void FTVHelp::generateTreeViewImages()
+{
+ QCString dname=Config_getString("HTML_OUTPUT");
+ writeColoredImgData(dname,ftv_image_data);
+}
+
+// new style scripts
+void FTVHelp::generateTreeViewScripts()
+{
+ // generate navtree.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/navtree.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << "var NAVTREE =" << endl;
+ t << "[" << endl;
+ t << " [ ";
+ QCString &projName = Config_getString("PROJECT_NAME");
+ if (projName.isEmpty())
+ {
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::MainPage);
+ t << "\"" << lne->title() << "\", ";
+ }
+ else
+ {
+ t << "\"" << projName << "\", ";
+ }
+ t << "\"index" << Doxygen::htmlFileExtension << "\", ";
+
+ bool first=TRUE;
+ generateJSTree(t,m_indentNodes[0],1,first);
+ if (first) t << "]";
+
+ t << endl << " ] ]" << endl;
+ t << "];" << endl;
+ t << endl << navtree_script;
+ }
+ }
+ // generate resize.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/resize.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << resize_script;
+ }
+ }
+ // generate jquery.js
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/jquery.js");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << jquery_script;
+ }
+ }
+ // generate navtree.css
+ {
+ QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css");
+ if (f.open(IO_WriteOnly))
+ {
+ FTextStream t(&f);
+ t << replaceColorMarkers(navtree_css);
+ }
+ }
+}
+// old style script (used for inline trees)
void FTVHelp::generateScript(FTextStream &t)
{
t << " <script type=\"text/javascript\">\n";
@@ -630,6 +1165,7 @@ void FTVHelp::generateScript(FTextStream &t)
t << " </script>\n";
}
+// write tree inside page
void FTVHelp::generateTreeViewInline(FTextStream &t)
{
generateScript(t);
@@ -643,14 +1179,16 @@ void FTVHelp::generateTreeViewInline(FTextStream &t)
t << " </div>\n";
}
-
+// write old style index.html and tree.html
void FTVHelp::generateTreeView()
{
+ generateTreeViewImages();
+ generateTreeViewScripts();
+#if 0
QCString fileName;
QFile f;
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- generateTreeViewImages();
fileName=Config_getString("HTML_OUTPUT")+"/index"+Doxygen::htmlFileExtension;
f.setName(fileName);
@@ -811,5 +1349,6 @@ void FTVHelp::generateTreeView()
f.close();
}
+#endif
}
diff --git a/src/ftvhelp.h b/src/ftvhelp.h
index a857f16..cdac6c8 100644
--- a/src/ftvhelp.h
+++ b/src/ftvhelp.h
@@ -33,40 +33,6 @@ class QFile;
struct FTVNode;
class FTextStream;
-struct FTVImageInfo
-{
- const char *alt;
- const char *name;
- const unsigned char *data;
- unsigned int len;
- unsigned short width, height;
-};
-
-extern FTVImageInfo image_info[];
-
-#define FTVIMG_blank 0
-#define FTVIMG_doc 1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen 3
-#define FTVIMG_lastnode 4
-#define FTVIMG_link 5
-#define FTVIMG_mlastnode 6
-#define FTVIMG_mnode 7
-#define FTVIMG_node 8
-#define FTVIMG_plastnode 9
-#define FTVIMG_pnode 10
-#define FTVIMG_vertline 11
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
- "src=\"" FTV_ICON_FILE(name) "\" " \
- "alt=\"" << FTV_INFO(name).alt << "\" " \
- "width=\"" << FTV_INFO(name).width << "\" " \
- "height=\"" << FTV_INFO(name).height << "\" "
-
/*! A class that generates a dynamic tree view side panel.
*/
class FTVHelp : public IndexIntf
@@ -93,11 +59,14 @@ class FTVHelp : public IndexIntf
void generateTreeView();
void generateTreeViewInline(FTextStream &t);
static void generateTreeViewImages();
+ void generateTreeViewScripts();
private:
void generateScript(FTextStream &t);
void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level);
+ bool generateJSTree(FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
void generateIndent(FTextStream &t,FTVNode *n,int level);
void generateLink(FTextStream &t,FTVNode *n);
+ void generateJSLink(FTextStream &t,FTVNode *n);
QList<FTVNode> *m_indentNodes;
int m_indent;
bool m_topLevelIndex;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 7d7ea6c..9150395 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -589,11 +589,11 @@ void GroupDef::writeGroupGraph(OutputList &ol)
msg("Generating dependency graph for group %s\n",qualifiedName().data());
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- ol.startParagraph();
+ //ol.startParagraph();
ol.startGroupCollaboration();
ol.parseText(theTranslator->trCollaborationDiagram(title));
ol.endGroupCollaboration(graph);
- ol.endParagraph();
+ //ol.endParagraph();
ol.popGeneratorState();
}
}
@@ -848,12 +848,20 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
void GroupDef::writeDocumentation(OutputList &ol)
{
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
startFile(ol,getOutputFileBase(),name(),title);
- startTitle(ol,getOutputFileBase(),this);
+
+ ol.startHeaderSection();
+ writeSummaryLinks(ol);
+ ol.startTitleHead(getOutputFileBase());
+ ol.pushGeneratorState();
+ ol.disable(OutputGenerator::Man);
ol.parseText(title);
+ ol.popGeneratorState();
+ ol.endTitleHead(getOutputFileBase(),title);
addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
+ ol.endHeaderSection();
ol.startContents();
if (Doxygen::searchIndex)
@@ -989,6 +997,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
endFile(ol);
+
ol.popGeneratorState();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 1c0596c..4e916fc 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -16,7 +16,7 @@
*/
#include <stdlib.h>
-#include <math.h>
+//#include <math.h>
#include "qtbc.h"
#include <qdir.h>
@@ -43,8 +43,8 @@
#include "image.h"
-#define DBG_HTML(x) x;
-//#define DBG_HTML(x)
+//#define DBG_HTML(x) x;
+#define DBG_HTML(x)
static const char defaultStyleSheet[] =
#include "doxygen_css.h"
@@ -657,15 +657,6 @@ struct img_data_item
unsigned int len;
};
-struct colored_img_data_item
-{
- const char *name;
- unsigned short width;
- unsigned short height;
- unsigned char *content;
- unsigned char *alpha;
-};
-
static void writeImgData(const char *dir,img_data_item *data)
{
@@ -688,32 +679,7 @@ static void writeImgData(const char *dir,img_data_item *data)
}
}
-static void writeColoredImgData(const char *dir,colored_img_data_item *data)
-{
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- while (data->name)
- {
- QCString fileName;
- fileName=(QCString)dir+"/"+data->name;
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- ColoredImage img(data->width,data->height,data->content,data->alpha,
- sat,hue,gamma);
- img.save(fileName);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
- }
- Doxygen::indexList.addImageFile(data->name);
- data++;
- }
-}
-
-static colored_img_data_item colored_tab_data[] =
+static ColoredImgDataItem colored_tab_data[] =
{
{ "tab_a.png", 1, 36, tab_a_png, 0 },
{ "tab_b.png", 1, 36, tab_b_png, 0 },
@@ -749,50 +715,114 @@ static img_data_item search_server_data[] =
//------------------------------------------------------------------------
-static QCString replaceColorMarkers(const char *str)
+static void writeClientSearchBox(FTextStream &t,const char *relPath)
{
- QCString result;
- QCString s=str;
- if (s.isEmpty()) return result;
- static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
- static const char hex[] = "0123456789ABCDEF";
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- int i,l,sl=s.length(),p=0;
- while ((i=re.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- QCString lumStr = s.mid(i+2,l-2);
-#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \
- ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \
- ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
-
- double r,g,b;
- int red,green,blue;
- int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
- ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
- pow(level/255.0,gamma/100.0),&r,&g,&b);
- red = (int)(r*255.0);
- green = (int)(g*255.0);
- blue = (int)(b*255.0);
- char colStr[8];
- colStr[0]='#';
- colStr[1]=hex[red>>4];
- colStr[2]=hex[red&0xf];
- colStr[3]=hex[green>>4];
- colStr[4]=hex[green&0xf];
- colStr[5]=hex[blue>>4];
- colStr[6]=hex[blue&0xf];
- colStr[7]=0;
- //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
- result+=colStr;
- p=i+l;
- }
- result+=s.right(sl-p);
- return result;
+ t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
+ t << " <span class=\"left\">\n";
+ t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
+ t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
+ t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
+ t << " alt=\"\"/>\n";
+ t << " <input type=\"text\" id=\"MSearchField\" value=\""
+ << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
+ t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
+ t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
+ t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
+ t << " </span><span class=\"right\">\n";
+ t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
+ << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
+ t << " </span>\n";
+ t << " </div>\n";
+}
+
+static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch)
+{
+ t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
+ t << " <span class=\"left\">\n";
+ t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
+ t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
+ if (!highlightSearch)
+ {
+ t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
+ << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
+ t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
+ t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
+ t << " </form>\n";
+ t << " </span><span class=\"right\"></span>\n";
+ t << " </div>\n";
+ }
}
+static QCString getLogoName()
+{
+ static QCString projectLogo = Config_getString("PROJECT_LOGO");
+ QFileInfo fi(projectLogo);
+ if (fi.exists())
+ {
+ return fi.fileName().data();
+ }
+ return "";
+}
+
+static void writeTitleArea(FTextStream &t,const char *relPath)
+{
+ QCString logoName = getLogoName();
+ static QCString projectName = Config_getString("PROJECT_NAME");
+ static QCString projectBrief = Config_getString("PROJECT_BRIEF");
+ static QCString projectNumber = Config_getString("PROJECT_NUMBER");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+ static bool searchEngine = Config_getBool("SEARCHENGINE");
+ static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
+ if (!(logoName.isEmpty() && projectName.isEmpty() && projectBrief.isEmpty()) ||
+ (disableIndex && searchEngine))
+ {
+ t << "<div id=\"titlearea\">" << endl;
+ t << "<table cellspacing=\"0\" cellpadding=\"0\">" << endl;
+ t << " <tbody>" << endl;
+ t << " <tr style=\"height: 56px;\">" << endl;
+ if (!logoName.isEmpty())
+ {
+ t << " <td id=\"projectlogo\"><img alt=\"Logo\" src=\"" << relPath << logoName << "\"></td>" << endl;
+ }
+ if (!(projectName.isEmpty() && projectBrief.isEmpty()))
+ {
+ t << " <td style=\"padding-left: 0.5em;\">" << endl;
+ if (!projectName.isEmpty())
+ {
+ t << " <div id=\"projectname\">" << projectName;
+ if (!projectNumber.isEmpty())
+ {
+ t << "&#160;<span id=\"projectnumber\">" << projectNumber << "</span>";
+ }
+ t << "</div>" << endl;
+ }
+ if (!projectBrief.isEmpty())
+ {
+ t << " <div id=\"projectbrief\">" << projectBrief << "</div>" << endl;
+ }
+ t << " </td>" << endl;
+ }
+ if (disableIndex && searchEngine)
+ {
+ t << " <td>" << endl;
+ if (serverBasedSearch)
+ {
+ writeServerSearchBox(t,relPath,FALSE);
+ }
+ else
+ {
+ writeClientSearchBox(t,relPath);
+ }
+ t << " </td>" << endl;
+ }
+ t << " </tr>" << endl;
+ t << " </tbody>" << endl;
+ t << "</table>" << endl;
+ t << "</div>" << endl;
+ }
+}
+
+
//------------------------- Pictures for the Tabs ------------------------
HtmlGenerator::HtmlGenerator() : OutputGenerator()
@@ -871,6 +901,21 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file)
t << replaceColorMarkers(defaultStyleSheet);
}
+static void writeDefaultNavTree(FTextStream &t,const char *relPathStr)
+{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ if (generateTreeView)
+ {
+ t << "<link href=\"" << relPathStr << "navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "jquery.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "navtree.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "resize.js\"></script>\n";
+ t << "<script type=\"text/javascript\">" << endl;
+ t << "$(document).ready(initResizable);" << endl;
+ t << "</script>" << endl;
+ }
+}
+
static void writeDefaultHeaderFile(FTextStream &t, const char *title,
const char *relPath,bool usePathCmd,
bool searchPage=FALSE)
@@ -881,7 +926,6 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
else
relPathStr=relPath;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
//if (searchEngine && !generateTreeView)
@@ -897,11 +941,14 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
t << convertToHtml(title);
t << "</title>\n";
t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView*/ )
{
t << "<link href=\"" << relPathStr << "search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
- t << "<script type=\"text/javaScript\" src=\"" << relPathStr << "search/search.js\"></script>\n";
+ t << "<script type=\"text/javascript\" src=\"" << relPathStr << "search/search.js\"></script>\n";
}
+
+ writeDefaultNavTree(t,relPathStr);
+
if (Config_getBool("USE_MATHJAX"))
{
QCString path = Config_getString("MATHJAX_RELPATH");
@@ -939,7 +986,7 @@ static void writeDefaultHeaderFile(FTextStream &t, const char *title,
t << "\" rel=\"stylesheet\" type=\"text/css\"/>\n";
t << "</head>\n";
- if (searchEngine && !generateTreeView && !serverBasedSearch)
+ if (searchEngine && /*!generateTreeView &&*/ !serverBasedSearch)
{
// for the javascript based search select the default filter
t << "<body onload='searchBox.OnSelectItem(0);'>\n";
@@ -963,18 +1010,35 @@ void HtmlGenerator::writeHeaderFile(QFile &file)
{
FTextStream t(&file);
writeDefaultHeaderFile(t,"$title",relativePathToRoot(0),TRUE);
+ t << "<div id=\"top\"><!-- do not remove this div! -->" << endl;
+ writeTitleArea(t,"$relpath$");
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
FTextStream t(&file);
- t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n";
- t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
- t << "&#160;<a href=\"http://www.doxygen.org/index.html\">"
- << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>"
- << "</a> $doxygenversion";
- t << "</small></address>\n"
- << "</body>\n"
+
+ if (generateTreeView)
+ {
+ t << " <li class=\"footer\">";
+ t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ) << endl;
+ t << " <a href=\"http://www.doxygen.org/index.html\">\n";
+ t << " <img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n";
+ t << " </ul>\n";
+ t << " </div>\n";
+ }
+ else
+ {
+ t << "<hr class=\"footer\"/><address class=\"footer\"><small>\n";
+ t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
+ t << "&#160;<a href=\"http://www.doxygen.org/index.html\">"
+ << "<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>"
+ << "</a> $doxygenversion";
+ t << "</small></address>\n";
+ }
+
+ t << "</body>\n"
<< "</html>\n";
}
@@ -1104,9 +1168,9 @@ void HtmlGenerator::startFile(const char *name,const char *,
}
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /*&& !generateTreeView*/)
{
t << "<script type=\"text/javascript\"><!--\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
@@ -1137,44 +1201,61 @@ void HtmlGenerator::writeSearchFooter(FTextStream &t,const QCString &relPath)
t << "\n";
}
-static void writePageFooter(FTextStream &t,const QCString &lastTitle,
- const QCString relPath)
+QCString HtmlGenerator::writeLogoAsString(const char *path)
+{
+ static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
+ QCString result;
+ if (timeStamp)
+ {
+ result += theTranslator->trGeneratedAt(
+ dateToString(TRUE),
+ Config_getString("PROJECT_NAME")
+ );
+ }
+ else
+ {
+ result += theTranslator->trGeneratedBy();
+ }
+ result += "&#160;\n<a href=\"http://www.doxygen.org/index.html\">\n"
+ "<img class=\"footer\" src=\"";
+ result += path;
+ result += "doxygen.png\" alt=\"doxygen\"/></a> ";
+ result += versionString;
+ result += " ";
+ return result;
+}
+
+void HtmlGenerator::writeLogo()
+{
+ t << writeLogoAsString(relPath);
+}
+
+void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,const QCString &relPath)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
- if (searchEngine && !generateTreeView && !serverBasedSearch)
+ if (searchEngine /*&& !generateTreeView*/ && !serverBasedSearch)
{
HtmlGenerator::writeSearchFooter(t,relPath);
}
if (g_footer.isEmpty())
{
- t << "<hr class=\"footer\"/><address class=\"footer\"><small>";
- if (timeStamp)
- {
- t << theTranslator->trGeneratedAt(
- dateToString(TRUE),
- Config_getString("PROJECT_NAME")
- );
- }
- else
- {
- t << theTranslator->trGeneratedBy();
- }
- t << "&#160;" << endl << "<a href=\"http://www.doxygen.org/index.html\">";
- t << endl << "<img class=\"footer\" src=\"" << relPath << "doxygen.png\" alt=\"doxygen\"/>"
- << "</a> " << versionString << " ";
- t << "</small></address>";
- if (Debug::isFlagSet(Debug::Validate))
+ if (!generateTreeView)
{
- t << "<p><a href=\"http://validator.w3.org/check/referer\">"
- "<img class=\"footer\" src=\"http://www.w3.org/Icons/valid-html401\""
- " height=\"31\" width=\"88\" alt=\"This page is Valid HTML 4.01 "
- "Transitional!\"></a><a href=\"http://jigsaw.w3.org/css-validator/\">"
- "<img class=\"footer\" style=\"border:0;width:88px;height:31px\" "
- "src=\"http://jigsaw.w3.org/css-validator/images/vcss\" "
- "alt=\"This page uses valid CSS!\"/></a></p>";
+ t << "<hr class=\"footer\"/><address class=\"footer\"><small>";
+ t << writeLogoAsString(relPath);
+ t << "</small></address>";
+ if (Debug::isFlagSet(Debug::Validate))
+ {
+ t << "<p><a href=\"http://validator.w3.org/check/referer\">"
+ "<img class=\"footer\" src=\"http://www.w3.org/Icons/valid-html401\""
+ " height=\"31\" width=\"88\" alt=\"This page is Valid HTML 4.01 "
+ "Transitional!\"></a><a href=\"http://jigsaw.w3.org/css-validator/\">"
+ "<img class=\"footer\" style=\"border:0;width:88px;height:31px\" "
+ "src=\"http://jigsaw.w3.org/css-validator/images/vcss\" "
+ "alt=\"This page uses valid CSS!\"/></a></p>";
+ }
}
t << "\n</body>\n</html>\n";
}
@@ -1552,7 +1633,7 @@ void HtmlGenerator::writeChar(char c)
static void startSectionHeader(FTextStream &t,
const QCString &relPath,int sectionCount)
{
- t << "<!-- startSectionHeader -->";
+ //t << "<!-- startSectionHeader -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1571,13 +1652,13 @@ static void startSectionHeader(FTextStream &t,
static void endSectionHeader(FTextStream &t)
{
- t << "<!-- endSectionHeader -->";
+ //t << "<!-- endSectionHeader -->";
t << "</div>" << endl;
}
static void startSectionSummary(FTextStream &t,int sectionCount)
{
- t << "<!-- startSectionSummary -->";
+ //t << "<!-- startSectionSummary -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1589,7 +1670,7 @@ static void startSectionSummary(FTextStream &t,int sectionCount)
static void endSectionSummary(FTextStream &t)
{
- t << "<!-- endSectionSummary -->";
+ //t << "<!-- endSectionSummary -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1599,7 +1680,7 @@ static void endSectionSummary(FTextStream &t)
static void startSectionContent(FTextStream &t,int sectionCount)
{
- t << "<!-- startSectionContent -->";
+ //t << "<!-- startSectionContent -->";
static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
if (dynamicSections)
{
@@ -1615,7 +1696,7 @@ static void startSectionContent(FTextStream &t,int sectionCount)
static void endSectionContent(FTextStream &t)
{
- t << "<!-- endSectionContent -->";
+ //t << "<!-- endSectionContent -->";
t << "</div>" << endl;
}
@@ -1961,7 +2042,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
{
if (emptyList)
{
- if (closeBracket) t << "&#160;)";
+ if (closeBracket) t << "</td><td>)";
t << "</td>" << endl;
t << " <td>";
}
@@ -2233,11 +2314,11 @@ static void startQuickIndexList(FTextStream &t,bool compact,bool topLevel=TRUE)
{
if (topLevel)
{
- t << " <div class=\"tabs\">\n";
+ t << " <div id=\"navrow1\" class=\"tabs\">\n";
}
else
{
- t << " <div class=\"tabs2\">\n";
+ t << " <div id=\"navrow2\" class=\"tabs2\">\n";
}
t << " <ul class=\"tablist\">\n";
}
@@ -2264,7 +2345,16 @@ static void startQuickIndexItem(FTextStream &t,const char *l,
bool hl,bool /*compact*/,
const QCString &relPath)
{
- t << " <li"; if (hl) t << " class=\"current\"";
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ t << " <li";
+ if (hl)
+ {
+ t << " class=\"current\"";
+ //if (generateTreeView)
+ //{
+ // t << " onmouseover=\"return navShow('" << l << "')\"";
+ //}
+ }
t << "><a ";
t << "href=\"" << relPath << l << "\">";
t << "<span>";
@@ -2323,9 +2413,9 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
FALSE,FALSE,relPath);
t << fixSpaces(entry->title());
- endQuickIndexItem(t);
// recursive into child list
renderQuickLinksAsTree(t,relPath,entry);
+ endQuickIndexItem(t);
}
}
endQuickIndexList(t,FALSE);
@@ -2337,6 +2427,7 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
bool highlightParent,bool highlightSearch)
{
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
{
renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
@@ -2360,7 +2451,10 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
if (entry->visible() && quickLinkVisible(entry->kind()))
{
startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension,
- entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent)),
+ entry==hlEntry &&
+ (entry->children().count()>0 ||
+ (entry->kind()==kind && !highlightParent)
+ ),
TRUE,relPath);
t << fixSpaces(entry->title());
endQuickIndexItem(t);
@@ -2368,80 +2462,29 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
}
if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry())
{
-#if 0 // old PHP based search engine
- // last item of the top row -> special case for search engine
- if (Config_getBool("SEARCHENGINE"))
- {
- QCString searchFor = fixSpaces(theTranslator->trSearchForIndex());
- if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1);
- t << " <li>\n";
- t << " <form action=\"" << relPath << "search.php\" method=\"get\">\n";
- t << " <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
- t << " <tr>\n";
- t << " <td><label>&#160;" << searchFor << "&#160;</label></td>\n";
- if (!highlightSearch)
- {
- t << " <td><input type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/></td>\n";
- t << " </tr>\n";
- t << " </table>\n";
- t << " </form>\n";
- t << " </li>\n";
- }
- }
- if (!highlightSearch) // on the search page the page will be ended by the
- // page itself
- {
- endQuickIndexList(t,TRUE);
- }
-#endif
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView */)
{
if (!serverBasedSearch) // pure client side search
{
t << " <li id=\"searchli\">\n";
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <span class=\"left\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
- t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
- t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
- t << " alt=\"\"/>\n";
- t << " <input type=\"text\" id=\"MSearchField\" value=\""
- << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
- t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
- t << " </span><span class=\"right\">\n";
- t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
- << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
- t << " </span>\n";
- t << " </div>\n";
+ writeClientSearchBox(t,relPath);
t << " </li>\n";
}
- else if (!generateTreeView) // server based search
+ else // if (!generateTreeView) // server based search
{
t << " <li id=\"searchli\">\n";
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <span class=\"left\">\n";
- t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
+ writeServerSearchBox(t,relPath,highlightSearch);
if (!highlightSearch)
{
- t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
- << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
- t << " </form>\n";
- t << " </span><span class=\"right\"></span>\n";
- t << " </div>\n";
t << " </li>\n";
}
}
}
if (!highlightSearch) // on the search page the page will be ended by the
- // page itself
+ // page itself
{
endQuickIndexList(t,TRUE);
}
@@ -2451,6 +2494,18 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
endQuickIndexList(t,TRUE);
}
}
+#if 0
+ if (generateTreeView)
+ {
+ // add empty rows for the dynamic menus (max 4 levels)
+ t << " <div id=\"navrow2\" class=\"tabs2\">\n";
+ t << " </div>\n";
+ t << " <div id=\"navrow3\" class=\"tabs3\">\n";
+ t << " </div>\n";
+ t << " <div id=\"navrow4\" class=\"tabs3\">\n";
+ t << " </div>\n";
+ }
+#endif
}
}
@@ -2505,18 +2560,56 @@ static void writeDefaultQuickLinks(FTextStream &t,bool compact,
void HtmlGenerator::startQuickIndices()
{
- if (!Config_getBool("DISABLE_INDEX"))
+ static bool customHeader = !Config_getString("HTML_HEADER").isEmpty();
+
+ if (!customHeader)
{
- t << "<div class=\"navigation\" id=\"top\">" << endl;
+ t << "<div id=\"top\"";
+ //if (generateTreeView)
+ //{
+ // t << " onmouseout=\"return navLeave()\" onmouseover=\"navEnter()\"";
+ //}
+ t << ">" << endl;
+ writeTitleArea(t,relPath);
}
}
void HtmlGenerator::endQuickIndices()
{
- if (!Config_getBool("DISABLE_INDEX"))
- {
- t << "</div>" << endl;
+ t << "</div>" << endl;
+}
+
+QCString HtmlGenerator::writeSplitBarAsString(const char *name,const char *relpath)
+{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ QCString result;
+ // write split bar
+ if (generateTreeView)
+ {
+ result = QCString(
+ "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n"
+ " <div id=\"nav-tree\">\n"
+ " <div id=\"nav-tree-contents\">\n"
+ " </div>\n"
+ " </div>\n"
+ " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
+ " class=\"ui-resizable-handle\">\n"
+ " </div>\n"
+ "</div>\n"
+ "<script type=\"text/javascript\">\n"
+ " initNavTree('") +
+ QCString(name) + Doxygen::htmlFileExtension +
+ QCString("','") + relpath +
+ QCString("');\n"
+ "</script>\n"
+ "<div id=\"doc-content\">\n");
}
+ return result;
+}
+
+void HtmlGenerator::writeSplitBar(const char *name)
+{
+ t << writeSplitBarAsString(name,relPath);
}
void HtmlGenerator::startContents()
@@ -2537,6 +2630,7 @@ void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli)
// PHP based search script
void HtmlGenerator::writeSearchPage()
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
QFile f(fileName);
if (f.open(IO_WriteOnly))
@@ -2553,24 +2647,27 @@ void HtmlGenerator::writeSearchPage()
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
<< versionString << " -->" << endl;
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine && !generateTreeView)
+ if (searchEngine /* && !generateTreeView*/)
{
t << "<script type=\"text/javascript\"><!--\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
<< "search\",false,'" << theTranslator->trSearch() << "');\n";
t << "--></script>\n";
}
+ t << "<div id=\"top\">" << endl;
+ writeTitleArea(t,"");
if (!Config_getBool("DISABLE_INDEX"))
{
writeDefaultQuickLinks(t,TRUE,HLI_Search,"");
}
else
{
- t << "&#160;\n<div class=\"qindex\">\n";
- t << " <form class=\"search\" action=\"search.php\" "
- << "method=\"get\">\n";
+ //t << "&#160;\n<div class=\"qindex\">\n";
+ //t << " <form class=\"search\" action=\"search.php\" "
+ // << "method=\"get\">\n";
+ t << "</div>" << endl;
}
t << "\n<script language=\"php\">\n\n";
@@ -2601,10 +2698,10 @@ void HtmlGenerator::writeSearchPage()
t << "}\n";
t << "function end_form($value)\n";
t << "{\n";
- if (!generateTreeView)
- {
- t << " echo \""
- << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
+ t << " echo \"";
+ if (!Config_getBool("DISABLE_INDEX"))
+ {
+ t << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" "
<< "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" "
<< "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n"
<< " </form>\\n"
@@ -2612,16 +2709,34 @@ void HtmlGenerator::writeSearchPage()
<< " </div>\\n"
<< " </li>\\n"
<< " </ul>\\n"
- << " </div>\\n"
- << "\";\n";
+ << " </div>\\n";
+ t << "</div>\\n";
}
- else
+ if (generateTreeView)
{
- t << " echo \""
- << " </ul>\\n"
- << " </div>\\n"
- << "\";\n";
+ t << substitute(substitute(writeSplitBarAsString("",""),
+ "\"","\\\""),
+ "\n","\\n");
+ }
+ t << "\";\n";
+ t << "}\n";
+ t << "function end_page()\n";
+ t << "{\n";
+ t << " echo \"";
+ if (generateTreeView)
+ {
+ t << "</div>\\n";
+ t << "<div id=\\\"nav-path\\\" class=\\\"navpath\\\">\\n";
+ t << " <ul>\\n";
+ t << " <li class=\\\"footer\\\">";
+ t << substitute(substitute(writeLogoAsString(""),
+ "\"","\\\""),
+ "\n","\\n");
+ t << "</li>\\n";
+ t << " </ul>\\n";
+ t << "</div>\\n";
}
+ t << "</body></html>\";\n";
t << "}\n";
t << "\n";
t << search_script;
diff --git a/src/htmlgen.h b/src/htmlgen.h
index c4b9da4..bacb947 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -36,8 +36,12 @@ class HtmlGenerator : public OutputGenerator
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
- static void writeSearchPage();
static void writeTabData();
+ static void writeSearchFooter(FTextStream &t,const QCString &relPath);
+ static void writeSearchData(const char *dir);
+ static void writeSearchPage();
+ static QCString writeLogoAsString(const char *path);
+ static QCString writeSplitBarAsString(const char *name,const char *relpath);
void enable()
{ if (genStack->top()) active=*genStack->top(); else active=TRUE; }
@@ -188,6 +192,8 @@ class HtmlGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices();
void endQuickIndices();
+ void writeSplitBar(const char *name);
+ void writeLogo();
void writeQuickLinks(bool compact,HighlightedItem hli);
void startContents();
void endContents();
@@ -245,15 +251,15 @@ class HtmlGenerator : public OutputGenerator
void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
void endFontClass() { t << "</span>"; }
+
void writeCodeAnchor(const char *anchor)
{ t << "<a name=\"" << anchor << "\"></a>"; }
void linkableSymbol(int,const char *,Definition *,Definition *) {}
- static void writeSearchFooter(FTextStream &t,const QCString &relPath);
- static void writeSearchData(const char *dir);
//static void generateSectionImages();
private:
+ static void writePageFooter(FTextStream &t,const QCString &,const QCString &);
QCString lastTitle;
QCString lastFile;
QCString relPath;
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index c4d4e9e..fb84938 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -447,7 +447,7 @@ void HtmlHelp::createProjectFile()
FTextStream t(&f);
QCString indexName="index"+Doxygen::htmlFileExtension;
- if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
+ //if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
t << "[OPTIONS]\n";
if (!Config_getString("CHM_FILE").isEmpty())
{
diff --git a/src/index.cpp b/src/index.cpp
index a049a3f..a60f5be 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -51,6 +51,10 @@ static const char search_script[]=
#include "search_js.h"
;
+//static const char navindex_script[]=
+//#include "navindex_js.h"
+//;
+
int annotatedClasses;
int hierarchyClasses;
int documentedFiles;
@@ -199,11 +203,11 @@ static void startQuickIndexList(OutputList &ol,bool letterTabs=FALSE)
{
if (letterTabs)
{
- ol.writeString(" <div class=\"tabs3\">\n");
+ ol.writeString(" <div id=\"navrow4\" class=\"tabs3\">\n");
}
else
{
- ol.writeString(" <div class=\"tabs2\">\n");
+ ol.writeString(" <div id=\"navrow3\" class=\"tabs2\">\n");
}
ol.writeString(" <ul class=\"tablist\">\n");
}
@@ -288,33 +292,51 @@ void endTitle(OutputList &ol,const char *fileName,const char *name)
}
void startFile(OutputList &ol,const char *name,const char *manName,
- const char *title,HighlightedItem hli,bool additionalIndices)
+ const char *title,HighlightedItem hli,bool additionalIndices,
+ const char *altSidebarName)
{
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.startFile(name,manName,title);
- if (!Config_getBool("DISABLE_INDEX"))
+ ol.startQuickIndices();
+ if (!disableIndex)
{
- ol.startQuickIndices();
ol.writeQuickLinks(TRUE,hli);
- if (!additionalIndices)
- {
- ol.endQuickIndices();
- //ol.startContents();
- }
}
- else
+ if (!additionalIndices)
{
- if (!additionalIndices)
- {
- // ol.startContents();
- }
+ ol.endQuickIndices();
+ }
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(altSidebarName ? altSidebarName : name);
}
}
-void endFile(OutputList &ol,bool)
+void endFile(OutputList &ol,bool skipNavIndex)
{
- ol.endContents();
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool hasCustomFooter = !Config_getString("HTML_FOOTER").isEmpty();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
+ if (!skipNavIndex)
+ {
+ ol.endContents();
+ if (generateTreeView)
+ {
+ ol.writeString("</div>\n");
+ ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
+ ol.writeString(" <ul>\n");
+ if (!hasCustomFooter)
+ {
+ ol.writeString(" <li class=\"footer\">");
+ ol.writeLogo();
+ ol.writeString("</li>\n");
+ ol.writeString(" </ul>\n");
+ ol.writeString(" </div>\n");
+ }
+ }
+ }
ol.writeFooter(); // write the footer
ol.popGeneratorState();
ol.endFile();
@@ -685,10 +707,10 @@ void writeHierarchicalIndex(OutputList &ol)
if (hierarchyClasses==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"hierarchy",0, theTranslator->trHierarchicalIndex().data(),
- HLI_Hierarchy);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
+ QCString title = lne->title();
+ startFile(ol,"hierarchy",0, title, HLI_Hierarchy);
startTitle(ol,0);
- QCString title = theTranslator->trClassHierarchy();
if (vhdlOpt) title = VhdlDocGen::trDesignUnitHierarchy();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -744,8 +766,9 @@ void writeGraphicalClassHierarchy(OutputList &ol)
{
if (hierarchyClasses==0) return;
ol.disableAllBut(OutputGenerator::Html);
- QCString title = theTranslator->trGraphicalHierarchy();
- startFile(ol,"inherits",0,title.data(),HLI_Hierarchy);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
+ QCString title = lne->title();
+ startFile(ol,"inherits",0,title,HLI_Hierarchy,FALSE,"hierarchy");
startTitle(ol,0);
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -755,7 +778,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0);
+ //Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0);
ol.startParagraph();
ol.startTextLink("hierarchy",0);
ol.parseText(theTranslator->trGotoTextualHierarchy());
@@ -810,9 +833,10 @@ void writeFileIndex(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"files",0,theTranslator->trFileIndex().data(),HLI_Files);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files);
+ QCString title = lne->title();
+ startFile(ol,"files",0,title,HLI_Files);
startTitle(ol,0);
- QCString title = theTranslator->trFileList();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -821,7 +845,7 @@ void writeFileIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trFileList(),0,"files",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
ol.endTextBlock();
@@ -981,29 +1005,15 @@ void writeNamespaceIndex(OutputList &ol)
if (documentedNamespaces==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title;
- if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
- {
- startFile(ol,"namespaces",0,theTranslator->trPackageList().data(),HLI_Namespaces);
- title = theTranslator->trPackageList();
- }
- else if (fortranOpt)
- {
- startFile(ol,"namespaces",0,theTranslator->trModulesIndex().data(),HLI_Namespaces);
- title = theTranslator->trModulesList();
- }
- else
- {
- startFile(ol,"namespaces",0,theTranslator->trNamespaceIndex().data(),HLI_Namespaces);
- title = theTranslator->trNamespaceList();
- }
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces);
+ QCString title = lne->title();
+ startFile(ol,"namespaces",0,title,HLI_Namespaces);
startTitle(ol,0);
- QCString longTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// longTitle.prepend(Config_getString("PROJECT_NAME")+" ");
//}
- ol.parseText(longTitle);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
@@ -1438,18 +1448,22 @@ void writeAlphabeticalClassList(OutputList &ol)
void writeAlphabeticalIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (annotatedClasses==0) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"classes"+Doxygen::htmlFileExtension,0,theTranslator->trAlphabeticalList().data(),HLI_Classes);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes);
+ QCString title = lne->title();
+ startFile(ol,"classes",0,title,HLI_Classes);
startTitle(ol,0);
- ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/
- (fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
- theTranslator->trCompoundIndex()
- ));
+ ol.parseText(title);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0);
+ //ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/
+ // (fortranOpt ? theTranslator->trCompoundIndexFortran() :
+ // vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
+ // theTranslator->trCompoundIndex()
+ // ));
endTitle(ol,0,0);
ol.startContents();
writeAlphabeticalClassList(ol);
@@ -1467,17 +1481,16 @@ void writeAnnotatedIndex(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title = fortranOpt ? theTranslator->trCompoundListFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitList() :
- theTranslator->trCompoundList() ;
- startFile(ol,"annotated",0,title.data(),HLI_Annotated);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassAnnotated);
+ QCString title = lne->title();
+ startFile(ol,"annotated",0,title,HLI_Annotated);
startTitle(ol,0);
- QCString longTitle = title;
+ //QCString longTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// longTitle.prepend(Config_getString("PROJECT_NAME")+" ");
//}
- ol.parseText(longTitle);
+ ol.parseText(title);
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
@@ -1913,8 +1926,10 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
if (documentedClassMembers[hl]==0) return;
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
int numPages=1;
@@ -1924,36 +1939,12 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
numPages=127;
}
-#if 0
- struct CmhlInfo
- {
- CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } cmhlInfo[] =
- {
- CmhlInfo("functions", theTranslator->trAll()),
- CmhlInfo("functions_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- CmhlInfo("functions_vars",theTranslator->trVariables()),
- CmhlInfo("functions_type",theTranslator->trTypedefs()),
- CmhlInfo("functions_enum",theTranslator->trEnumerations()),
- CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
- CmhlInfo("functions_prop",theTranslator->trProperties()),
- CmhlInfo("functions_evnt",theTranslator->trEvents()),
- CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
- };
-#endif
-
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt ? theTranslator->trCompoundMembersFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitMembers() :
- theTranslator->trCompoundMembers() ;
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
+ QCString title = lne->title();
if (hl!=CMHL_All) title+=(QCString)" - "+getCmhlInfo(hl)->title;
int page;
@@ -1967,9 +1958,14 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title,HLI_Functions,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_Functions);
+ }
startQuickIndexList(ol);
// index item for global member list
@@ -1995,14 +1991,18 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
endQuickIndexList(ol);
// quick alphabetical index
- bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
- getCmhlInfo(hl)->fname,multiPageIndex);
+ getCmhlInfo(hl)->fname,multiPageIndex);
}
-
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getCmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==CMHL_All)
@@ -2032,7 +2032,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h
void writeClassMemberIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
writeClassMemberIndexFiltered(ol,CMHL_All);
writeClassMemberIndexFiltered(ol,CMHL_Functions);
writeClassMemberIndexFiltered(ol,CMHL_Variables);
@@ -2045,33 +2045,25 @@ void writeClassMemberIndex(OutputList &ol)
if (documentedClassMembers[CMHL_All]>0)
{
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"functions",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"functions",0);
}
}
//----------------------------------------------------------------------------
-static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
+struct FmhlInfo
{
- if (documentedFileMembers[hl]==0) return;
-
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- bool multiPageIndex=FALSE;
- int numPages=1;
- if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
- {
- multiPageIndex=TRUE;
- numPages=127;
- }
+ FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
+ const char *fname;
+ QCString title;
+};
- struct FmhlInfo
- {
- FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } fmhlInfo[] =
+static const FmhlInfo *getFmhlInfo(int hl)
+{
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static FmhlInfo fmhlInfo[] =
{
FmhlInfo("globals", theTranslator->trAll()),
FmhlInfo("globals_func",
@@ -2084,12 +2076,31 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
FmhlInfo("globals_defs",theTranslator->trDefines())
};
+ return &fmhlInfo[hl];
+}
+
+static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
+{
+ if (documentedFileMembers[hl]==0) return;
+
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
+
+ bool multiPageIndex=FALSE;
+ int numPages=1;
+ if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
+ {
+ multiPageIndex=TRUE;
+ numPages=127;
+ }
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
+ QCString title = lne->title();
int page;
bool first=TRUE;
@@ -2097,20 +2108,25 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
{
if (!multiPageIndex || g_fileIndexLetterUsed[hl][page].count()>0)
{
- QCString fileName = fmhlInfo[hl].fname;
+ QCString fileName = getFmhlInfo(hl)->fname;
if (multiPageIndex && !first)
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title.data(),HLI_Globals,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_Globals);
+ }
startQuickIndexList(ol);
// index item for all member lists
startQuickIndexItem(ol,
- fmhlInfo[0].fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
- ol.writeString(fixSpaces(fmhlInfo[0].title));
+ getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
+ ol.writeString(fixSpaces(getFmhlInfo(0)->title));
endQuickIndexItem(ol);
int i;
@@ -2120,22 +2136,26 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
if (documentedFileMembers[i]>0)
{
startQuickIndexItem(ol,
- fmhlInfo[i].fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(fmhlInfo[i].title));
+ getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+ ol.writeString(fixSpaces(getFmhlInfo(i)->title));
endQuickIndexItem(ol);
}
}
endQuickIndexList(ol);
- bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
- fmhlInfo[hl].fname,multiPageIndex);
+ getFmhlInfo(hl)->fname,multiPageIndex);
}
-
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getFmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==FMHL_All)
@@ -2151,9 +2171,9 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
//ol.newParagraph(); // FIXME:PARA
//writeFileMemberList(ol,quickIndex,hl,page);
writeMemberList(ol,quickIndex,
- multiPageIndex?page:-1,
- g_fileIndexLetterUsed[hl],
- Definition::TypeFile);
+ multiPageIndex?page:-1,
+ g_fileIndexLetterUsed[hl],
+ Definition::TypeFile);
endFile(ol);
first=FALSE;
}
@@ -2173,11 +2193,38 @@ void writeFileMemberIndex(OutputList &ol)
if (documentedFileMembers[FMHL_All]>0)
{
- QCString title = theTranslator->trFileMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"globals",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"globals",0);
}
}
+//----------------------------------------------------------------------------
+
+struct NmhlInfo
+{
+ NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
+ const char *fname;
+ QCString title;
+};
+
+static const NmhlInfo *getNmhlInfo(int hl)
+{
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static NmhlInfo nmhlInfo[] =
+ {
+ NmhlInfo("namespacemembers", theTranslator->trAll()),
+ NmhlInfo("namespacemembers_func",
+ fortranOpt ? theTranslator->trSubprograms() :
+ vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
+ theTranslator->trFunctions()),
+ NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
+ NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
+ NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
+ NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
+ };
+ return &nmhlInfo[hl];
+}
//----------------------------------------------------------------------------
@@ -2186,8 +2233,9 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
if (documentedNamespaceMembers[hl]==0) return;
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool disableIndex = Config_getBool("DISABLE_INDEX");
bool multiPageIndex=FALSE;
int numPages=1;
@@ -2197,29 +2245,12 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
numPages=127;
}
- struct NmhlInfo
- {
- NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
- } nmhlInfo[] =
- {
- NmhlInfo("namespacemembers", theTranslator->trAll()),
- NmhlInfo("namespacemembers_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
- NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
- NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
- NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
- };
-
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString extension=Doxygen::htmlFileExtension;
- QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers();
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
+ QCString title = lne->title();
int page;
bool first=TRUE;
@@ -2227,19 +2258,24 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
{
if (!multiPageIndex || g_namespaceIndexLetterUsed[hl][page].count()>0)
{
- QCString fileName = nmhlInfo[hl].fname;
+ QCString fileName = getNmhlInfo(hl)->fname;
if (multiPageIndex && !first)
{
fileName+=QCString().sprintf("_0x%02x",page);
}
+ bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
- startFile(ol,fileName+extension,0,title,HLI_NamespaceMembers,TRUE);
-
+ ol.startFile(fileName+extension,0,title);
+ ol.startQuickIndices();
+ if (!disableIndex)
+ {
+ ol.writeQuickLinks(TRUE,HLI_NamespaceMembers);
+ }
startQuickIndexList(ol);
startQuickIndexItem(ol,
- nmhlInfo[0].fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
- ol.writeString(fixSpaces(nmhlInfo[0].title));
+ getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
+ ol.writeString(fixSpaces(getNmhlInfo(0)->title));
endQuickIndexItem(ol);
int i;
@@ -2248,22 +2284,27 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
if (documentedNamespaceMembers[i]>0)
{
startQuickIndexItem(ol,
- nmhlInfo[i].fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(nmhlInfo[i].title));
+ getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
+ ol.writeString(fixSpaces(getNmhlInfo(i)->title));
endQuickIndexItem(ol);
}
}
endQuickIndexList(ol);
- bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
if (quickIndex)
{
writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
- nmhlInfo[hl].fname,multiPageIndex);
+ getNmhlInfo(hl)->fname,multiPageIndex);
}
ol.endQuickIndices();
+
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(getNmhlInfo(0)->fname);
+ }
+
ol.startContents();
if (hl==NMHL_All)
@@ -2291,7 +2332,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
void writeNamespaceMemberIndex(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
writeNamespaceMemberIndexFiltered(ol,NMHL_All);
writeNamespaceMemberIndexFiltered(ol,NMHL_Functions);
writeNamespaceMemberIndexFiltered(ol,NMHL_Variables);
@@ -2301,8 +2342,8 @@ void writeNamespaceMemberIndex(OutputList &ol)
if (documentedNamespaceMembers[NMHL_All]>0)
{
- QCString title = fortranOpt?theTranslator->trModulesMembers():theTranslator->trNamespaceMembers();
- Doxygen::indexList.addContentsItem(FALSE,title,0,"namespacemembers",0);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
+ Doxygen::indexList.addContentsItem(FALSE,lne->title(),0,"namespacemembers",0);
}
}
@@ -2538,7 +2579,7 @@ class SearchIndexCategoryMapping
void writeJavascriptSearchIndex()
{
if (!Config_getBool("GENERATE_HTML")) return;
- static bool treeView = Config_getBool("GENERATE_TREEVIEW");
+ //static bool treeView = Config_getBool("GENERATE_TREEVIEW");
ClassSDict::Iterator cli(*Doxygen::classSDict);
ClassDef *cd;
@@ -2690,7 +2731,7 @@ void writeJavascriptSearchIndex()
if (!extLinksInWindow || d->getReference().isEmpty())
{
t << " target=\"";
- if (treeView) t << "basefrm"; else t << "_parent";
+ /*if (treeView) t << "basefrm"; else*/ t << "_parent";
t << "\"";
}
t << ">";
@@ -2771,7 +2812,7 @@ void writeJavascriptSearchIndex()
if (!extLinksInWindow || d->getReference().isEmpty())
{
t << " target=\"";
- if (treeView) t << "basefrm"; else t << "_parent";
+ /*if (treeView) t << "basefrm"; else*/ t << "_parent";
t << "\"";
}
t << ">";
@@ -2968,8 +3009,9 @@ void writeExampleIndex(OutputList &ol)
if (Doxygen::exampleSDict->count()==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- QCString title = theTranslator->trExamples();
- startFile(ol,"examples",0,title.data(),HLI_Examples);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Examples);
+ QCString title = lne->title();
+ startFile(ol,"examples",0,title,HLI_Examples);
startTitle(ol,0);
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
@@ -2979,7 +3021,7 @@ void writeExampleIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trExamples(),0,"examples",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trExamplesDescription());
//ol.newParagraph();
@@ -3013,52 +3055,158 @@ void writeExampleIndex(OutputList &ol)
//----------------------------------------------------------------------------
-void writeFullNavIndex(QTextStream &t, LayoutNavEntry *root,int indent)
+template<typename T>
+bool writeMemberNavIndex(FTextStream &t,
+ int indent,
+ int n,
+ int documentedMembers[],
+ MemberIndexList indexLetterUsed[][MEMBER_INDEX_ENTRIES],
+ const T *(*getInfo)(int),
+ bool &first
+ )
+
{
+ bool found=FALSE;
QCString indentStr;
indentStr.fill(' ',indent*2);
- if (root->children().count()>0)
+ // index items per category member lists
+ int i;
+ for (i=0;i<n;i++)
{
- t << indentStr << "<ul>" << endl;
- QListIterator<LayoutNavEntry> li(root->children());
- LayoutNavEntry *entry;
- for (li.toFirst();(entry=li.current());++li)
+ bool hasIndex = documentedMembers[i]>0;
+ bool quickIndex = documentedMembers[i]>maxItemsBeforeQuickIndex;
+ bool multiIndexPage = documentedMembers[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX;
+ if (hasIndex)
{
- t << indentStr << "<li>";
- t << "<a href=\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\">";
- t << fixSpaces(entry->title());
- t << "</a>";
- t << "</li>" << endl;
- writeFullNavIndex(t,entry,indent+1);
- if (entry->kind()==LayoutNavEntry::ClassMembers)
- {
- t << indentStr << " <ul>" << endl;
- // index items per category member lists
- int i;
- for (i=0;i<CMHL_Total;i++)
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first = FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found = TRUE;
+
+ t << indentStr << " [ ";
+ t << "\"" << fixSpaces(getInfo(i)->title) << "\", ";
+ t << "\"" << getInfo(i)->fname << Doxygen::htmlFileExtension << "\", ";
+ bool firstPage=TRUE;
+ if (quickIndex)
+ {
+ t << "[ " << endl;
+ int j;
+ for (j=33;j<127;j++)
{
- if (documentedClassMembers[i]>0)
+ if (indexLetterUsed[i][j].count()>0)
{
- t << indentStr << " <li>";
- t << "<a href=\"" << getCmhlInfo(i)->fname << Doxygen::htmlFileExtension << "\">";
- t << fixSpaces(getCmhlInfo(i)->title);
- t << "</a>";
- t << "</li>" << endl;
+ if (!firstPage) t << "," << endl;
+ QCString fullName = getInfo(i)->fname;
+ QCString extension = Doxygen::htmlFileExtension;
+ QCString anchor;
+ if (firstPage || !multiIndexPage)
+ anchor=fullName+extension+"#index_";
+ else
+ anchor=fullName+QCString().sprintf("_0x%02x",j)+extension+"#index_";
+ char is[2];is[0]=(char)j;is[1]='\0';
+ QCString ci = letterToLabel((char)j);
+ t << indentStr << " [ ";
+ t << "\"" << is << "\", ";
+ t << "\"" << anchor << ci << "\", null ]";
+ firstPage=FALSE;
}
}
- t << indentStr << " </ul>" << endl;
+ t << endl << indentStr << " ] ]";
}
- else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
+ else
{
- t << indentStr << " <namespacemembers>" << endl;
+ t << "null" << " ]";
}
- else if (entry->kind()==LayoutNavEntry::FileGlobals)
+ }
+ }
+ return found;
+}
+
+//----------------------------------------------------------------------------
+
+bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
+{
+ static struct NavEntryCountMap
+ {
+ LayoutNavEntry::Kind kind;
+ bool hasItems;
+ } navEntryCountMap[] =
+ {
+ { LayoutNavEntry::MainPage, TRUE },
+ { LayoutNavEntry::Pages, indexedPages>0 },
+ { LayoutNavEntry::Modules, documentedGroups>0 },
+ { LayoutNavEntry::Namespaces, documentedNamespaces>0 },
+ { LayoutNavEntry::NamespaceMembers, documentedNamespaceMembers[NMHL_All]>0 },
+ { LayoutNavEntry::Classes, annotatedClasses>0 },
+ { LayoutNavEntry::ClassAnnotated, annotatedClasses>0 },
+ { LayoutNavEntry::ClassHierarchy, hierarchyClasses>0 },
+ { LayoutNavEntry::ClassMembers, documentedClassMembers[CMHL_All]>0 },
+ { LayoutNavEntry::Files, documentedFiles>0 },
+ { LayoutNavEntry::FileGlobals, documentedFileMembers[FMHL_All]>0 },
+ { LayoutNavEntry::Dirs, documentedDirs>0 },
+ { LayoutNavEntry::Examples, Doxygen::exampleSDict->count()>0 }
+ };
+
+ QCString indentStr;
+ indentStr.fill(' ',indent*2);
+ bool found=FALSE;
+ if (root->children().count()>0)
+ {
+ QListIterator<LayoutNavEntry> li(root->children());
+ LayoutNavEntry *entry;
+ for (li.toFirst();(entry=li.current());++li)
+ {
+ if (navEntryCountMap[entry->kind()].hasItems && entry->visible())
{
- t << indentStr << " <fileglobals>" << endl;
+ // terminate previous entry
+ if (!first) t << "," << endl;
+ first = FALSE;
+
+ // start entry
+ if (!found)
+ {
+ t << "[" << endl;
+ }
+ found = TRUE;
+
+ bool emptySection=TRUE;
+ t << indentStr << " [ ";
+ t << "\"" << fixSpaces(entry->title()) << "\", ";
+ t << "\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\", ";
+
+ // write children (if any)
+ bool firstChild=TRUE;
+ if (entry->kind()==LayoutNavEntry::ClassMembers)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,CMHL_Total,documentedClassMembers,g_memberIndexLetterUsed,&getCmhlInfo,firstChild);
+ }
+ else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,NMHL_Total,documentedNamespaceMembers,g_namespaceIndexLetterUsed,&getNmhlInfo,firstChild);
+ }
+ else if (entry->kind()==LayoutNavEntry::FileGlobals)
+ {
+ emptySection = !writeMemberNavIndex(t,indent+1,FMHL_Total,documentedFileMembers,g_fileIndexLetterUsed,&getFmhlInfo,firstChild);
+ }
+ else
+ {
+ emptySection = !writeFullNavIndex(t,entry,indent+1,firstChild);
+ }
+ // end entry
+ if (emptySection) // entry without children
+ t << "null ]";
+ else // entry with children
+ t << endl << indentStr << " ] ]";
}
}
- t << indentStr << "</ul>" << endl;
}
+ return found;
}
//----------------------------------------------------------------------------
@@ -3117,9 +3265,10 @@ void writePageIndex(OutputList &ol)
if (indexedPages==0) return;
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,"pages",0,theTranslator->trPageIndex().data(),HLI_Pages);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Pages);
+ QCString title = lne->title();
+ startFile(ol,"pages",0,title,HLI_Pages);
startTitle(ol,0);
- QCString title = theTranslator->trRelatedPages();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3128,8 +3277,8 @@ void writePageIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- //Doxygen::indexList.addContentsItem(TRUE,theTranslator->trRelatedPages(),0,"pages",0);
- //Doxygen::indexList.incContentsDepth();
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0);
+ Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trRelatedPagesDescription());
ol.endTextBlock();
startIndexHierarchy(ol,0);
@@ -3165,7 +3314,7 @@ void writePageIndex(OutputList &ol)
}
}
endIndexHierarchy(ol,0);
- //Doxygen::indexList.decContentsDepth();
+ Doxygen::indexList.decContentsDepth();
endFile(ol);
ol.popGeneratorState();
}
@@ -3588,9 +3737,11 @@ void writeGroupIndex(OutputList &ol)
if (documentedGroups==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"modules",0,theTranslator->trModuleIndex().data(),HLI_Modules);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Modules);
+ QCString title = lne->title();
+ startFile(ol,"modules",0,title,HLI_Modules);
startTitle(ol,0);
- QCString title = theTranslator->trModules();
+ //QCString title = theTranslator->trModules();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3599,7 +3750,7 @@ void writeGroupIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trModules(),0,"modules",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trModulesDescription());
ol.endTextBlock();
@@ -3636,9 +3787,10 @@ void writeDirIndex(OutputList &ol)
if (documentedDirs==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
- startFile(ol,"dirs",0,theTranslator->trDirIndex().data(),HLI_Directories);
+ LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Dirs);
+ QCString title = lne->title();
+ startFile(ol,"dirs",0,title,HLI_Directories);
startTitle(ol,0);
- QCString title = theTranslator->trDirectories();
//if (!Config_getString("PROJECT_NAME").isEmpty())
//{
// title.prepend(Config_getString("PROJECT_NAME")+" ");
@@ -3647,7 +3799,7 @@ void writeDirIndex(OutputList &ol)
endTitle(ol,0,0);
ol.startContents();
ol.startTextBlock();
- Doxygen::indexList.addContentsItem(TRUE,theTranslator->trDirIndex(),0,"dirs",0);
+ Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0);
Doxygen::indexList.incContentsDepth();
ol.parseText(theTranslator->trDirDescription());
ol.endTextBlock();
@@ -3704,12 +3856,16 @@ void writeIndex(OutputList &ol)
#if 0
{
- QFile f("navindex.html");
+ QFile f(Config_getString("HTML_OUTPUT")+"/navindex.js");
if (f.open(IO_WriteOnly))
{
- QTextStream t(&f);
+ FTextStream t(&f);
+ t << "var NAVINDEX =" << endl;
LayoutNavEntry *layout = LayoutDocManager::instance().rootNavEntry();
- writeFullNavIndex(t,layout,0);
+ bool first=TRUE;
+ writeFullNavIndex(t,layout,0,first);
+ t << endl << "];" << endl;
+ t << endl << navindex_script;
}
}
#endif
@@ -3734,7 +3890,9 @@ void writeIndex(OutputList &ol)
title = filterTitle(Doxygen::mainPage->title());
}
- QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+ //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString indexName="index";
ol.startFile(indexName,0,title);
if (Doxygen::mainPage)
@@ -3747,11 +3905,15 @@ void writeIndex(OutputList &ol)
}
}
+ ol.startQuickIndices();
if (!Config_getBool("DISABLE_INDEX"))
{
- ol.startQuickIndices();
ol.writeQuickLinks(TRUE,HLI_Main);
- ol.endQuickIndices();
+ }
+ ol.endQuickIndices();
+ if (generateTreeView)
+ {
+ ol.writeSplitBar(indexName);
}
bool headerWritten=FALSE;
if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty())
@@ -3782,6 +3944,7 @@ void writeIndex(OutputList &ol)
ol.endHeaderSection();
}
ol.startContents();
+#if 0
// ol.newParagraph(); // FIXME:PARA
if (!Config_getString("PROJECT_NUMBER").isEmpty())
{
@@ -3793,6 +3956,7 @@ void writeIndex(OutputList &ol)
TRUE,FALSE);
ol.endProjectNumber();
}
+#endif
if (Config_getBool("DISABLE_INDEX") && Doxygen::mainPage==0)
{
ol.writeQuickLinks(FALSE,HLI_Main);
diff --git a/src/index.h b/src/index.h
index 986b72c..26947a6 100644
--- a/src/index.h
+++ b/src/index.h
@@ -261,8 +261,8 @@ void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
void endTitle(OutputList &ol,const char *fileName,const char *name);
void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,HighlightedItem hli=HLI_None,
- bool additionalIndices=FALSE);
-void endFile(OutputList &ol,bool external=FALSE);
+ bool additionalIndices=FALSE,const char *altSidebarName=0);
+void endFile(OutputList &ol,bool skipNavIndex=FALSE);
void initClassMemberIndices();
void initFileMemberIndices();
diff --git a/src/instdox.cpp b/src/instdox.cpp
index 648a5c7..6ad0ea7 100644
--- a/src/instdox.cpp
+++ b/src/instdox.cpp
@@ -59,12 +59,6 @@ void writeInstallScript()
t << ");\n";
t << "$quiet = 0;\n";
t << "\n";
- t << "if (open(F,\"search.cfg\"))\n";
- t << "{\n";
- t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_doc\"} = $_;\n";
- t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_cgi\"} = $_;\n";
- t << "}\n";
- t << "\n";
t << "while ( @ARGV ) {\n";
t << " $_ = shift @ARGV;\n";
t << " if ( s/^-// ) {\n";
@@ -120,7 +114,7 @@ void writeInstallScript()
t << " next if ( $file =~ /^\\.\\.?$/ );\n";
t << " ($file =~ /$match/) && (push @files, $file);\n";
t << " ($file =~ /\\.svg/) && (push @files, $file);\n";
- t << " ($file =~ \"tree.js\") && (push @files, $file);\n";
+ t << " ($file =~ \"navtree.js\") && (push @files, $file);\n";
t << " }\n";
t << " closedir(D);\n";
t << " }\n";
diff --git a/src/jquery.js b/src/jquery.js
new file mode 100644
index 0000000..2724efb
--- /dev/null
+++ b/src/jquery.js
@@ -0,0 +1,50 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
+ * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
+ * Date: 2/8/2008
+ * @author Ariel Flesler
+ * @version 1.3.2
+ */
+;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+
diff --git a/src/jquery_js.h b/src/jquery_js.h
new file mode 100644
index 0000000..b09267f
--- /dev/null
+++ b/src/jquery_js.h
@@ -0,0 +1,50 @@
+"/*\n"
+" * jQuery JavaScript Library v1.3.2\n"
+" * http://jquery.com/\n"
+" *\n"
+" * Copyright (c) 2009 John Resig\n"
+" * Dual licensed under the MIT and GPL licenses.\n"
+" * http://docs.jquery.com/License\n"
+" *\n"
+" * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)\n"
+" * Revision: 6246\n"
+" */\n"
+"(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\\s)+>)[^>]*$|^#([\\w-]+)$/,f=/^.[^:#\\[\\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E===\"string\"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:\"\",jquery:\"1.3.2\",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H===\"find\"){G.selector=this.selector+(this.selector?\" \":\"\")+E}else{if(H){G.selector=this.selector+\".\"+H+\"(\"+E+\")\"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F===\"string\"){if(H===g){return this[0]&&o[G||\"attr\"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E==\"width\"||E==\"height\")&&parseFloat(F)<0){F=g}return this.attr(E,F,\"curCSS\")},text:function(F){if(typeof F!==\"object\"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E=\"\";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],\"find\",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),\"find\",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement(\"div\");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\").replace(/^\\s*/,\"\")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find(\"*\").andSelf(),F=0;E.find(\"*\").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],\"events\");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),\"filter\",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,\"closest\",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E===\"string\"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),\"not\",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E===\"string\"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is(\".\"+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,\"option\")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,\"select\")){var I=E.selectedIndex,L=[],M=E.options,H=E.type==\"select-one\";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||\"\").replace(/\\r/g,\"\")}return g}if(typeof K===\"number\"){K+=\"\"}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,\"select\")){var N=o.makeArray(K);o(\"option\",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\"):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),\"slice\",Array.prototype.slice.call(arguments).join(\",\"))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,\"table\")&&o.nodeName(O,\"tr\")?(N.getElementsByTagName(\"tbody\")[0]||N.appendChild(N.ownerDocument.createElement(\"tbody\"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:\"script\"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||\"\")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J===\"boolean\"){E=J;J=arguments[1]||{};H=2}if(typeof J!==\"object\"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L===\"object\"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)===\"[object Function]\"},isArray:function(E){return s.call(E)===\"[object Array]\"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!==\"HTML\"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\\S/.test(G)){var F=document.getElementsByTagName(\"head\")[0]||document.documentElement,E=document.createElement(\"script\");E.type=\"text/javascript\";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I===\"number\"&&G==\"curCSS\"&&!b.test(E)?I+\"px\":I},className:{add:function(E,F){o.each((F||\"\").split(/\\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?\" \":\"\")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\\s+/),function(G){return !o.className.has(F,G)}).join(\" \"):\"\"}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F==\"width\"||F==\"height\"){var L,G={position:\"absolute\",visibility:\"hidden\",display:\"block\"},K=F==\"width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"];function I(){L=F==\"width\"?H.offsetWidth:H.offsetHeight;if(E===\"border\"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,\"padding\"+this,true))||0}if(E===\"margin\"){L+=parseFloat(o.curCSS(H,\"margin\"+this,true))||0}else{L-=parseFloat(o.curCSS(H,\"border\"+this+\"Width\",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F==\"opacity\"&&!o.support.opacity){L=o.attr(E,\"opacity\");return L==\"\"?\"1\":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F=\"float\"}F=F.replace(/([A-Z])/g,\"-$1\").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F==\"opacity\"&&L==\"\"){L=\"1\"}}else{if(I.currentStyle){var J=F.replace(/\\-(\\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\\d+(px)?$/i.test(L)&&/^\\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+\"px\";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement===\"undefined\"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]===\"string\"){var H=/^<(\\w+)\\s*\\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement(\"div\");o.each(F,function(P,S){if(typeof S===\"number\"){S+=\"\"}if(!S){return}if(typeof S===\"string\"){S=S.replace(/(<(\\w+)[^>]*?)\\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+\"></\"+T+\">\"});var O=S.replace(/^\\s+/,\"\").substring(0,10).toLowerCase();var Q=!O.indexOf(\"<opt\")&&[1,\"<select multiple='multiple'>\",\"</select>\"]||!O.indexOf(\"<leg\")&&[1,\"<fieldset>\",\"</fieldset>\"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,\"<table>\",\"</table>\"]||!O.indexOf(\"<tr\")&&[2,\"<table><tbody>\",\"</tbody></table>\"]||(!O.indexOf(\"<td\")||!O.indexOf(\"<th\"))&&[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"]||!O.indexOf(\"<col\")&&[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"]||!o.support.htmlSerialize&&[1,\"div<div>\",\"</div>\"]||[0,\"\",\"\"];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf(\"<table\")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]==\"<table>\"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],\"tbody\")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],\"script\")&&(!G[J].type||G[J].type.toLowerCase()===\"text/javascript\")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName(\"script\"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G==\"selected\"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G==\"type\"&&o.nodeName(J,\"input\")&&J.parentNode){throw\"type property can't be changed\"}J[G]=K}if(o.nodeName(J,\"form\")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G==\"tabIndex\"){var I=J.getAttributeNode(\"tabIndex\");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G==\"style\"){return o.attr(J.style,\"cssText\",K)}if(L){J.setAttribute(G,\"\"+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G==\"opacity\"){if(L){J.zoom=1;J.filter=(J.filter||\"\").replace(/alpha\\([^)]*\\)/,\"\")+(parseInt(K)+\"\"==\"NaN\"?\"\":\"alpha(opacity=\"+K*100+\")\")}return J.filter&&J.filter.indexOf(\"opacity=\")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+\"\":\"\"}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||\"\").replace(/^\\s+|\\s+$/g,\"\")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G===\"string\"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/)||[0,\"0\"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,\"parentNode\")},next:function(E){return o.nth(E,2,\"nextSibling\")},prev:function(E){return o.nth(E,2,\"previousSibling\")},nextAll:function(E){return o.dir(E,\"nextSibling\")},prevAll:function(E){return o.dir(E,\"previousSibling\")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,\"iframe\")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G==\"string\"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,\"\");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!==\"boolean\"){E=!o.className.has(this,F)}o.className[E?\"add\":\"remove\"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o(\"*\",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h=\"jQuery\"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E=\"\";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||\"fx\")+\"queue\";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G===\"fx\"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(\".\");H[1]=H[1]?\".\"+H[1]:\"\";if(G===g){var F=this.triggerHandler(\"getData\"+H[1]+\"!\",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger(\"setData\"+H[1]+\"!\",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!==\"string\"){F=E;E=\"fx\"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E==\"fx\"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});\n"
+"/*\n"
+" * Sizzle CSS Selector Engine - v0.9.3\n"
+" * Copyright 2009, The Dojo Foundation\n"
+" * Released under the MIT, BSD, and GPL Licenses.\n"
+" * More information: http://sizzlejs.com/\n"
+" */\n"
+"(function(){var R=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^[\\]]*\\]|['\"][^'\"]*['\"]|[^[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!==\"string\"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=\"\"}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw\"Syntax error, unrecognized expression: \"+(ah||Y)}if(H.call(ai)===\"[object Array]\"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!==\"\\\\\"){X[1]=(X[1]||\"\").replace(/\\\\/g,\"\");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],\"\");break}}}}if(!Z){Z=T.getElementsByTagName(\"*\")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],\"\");if(!T){return[]}break}}}if(ad==V){if(T==null){throw\"Syntax error, unrecognized expression: \"+ad}else{break}}V=ad}return aa};var I=F.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(['\"]*)(.*?)\\3|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*_-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\((even|odd|[\\dn+-]*)\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)(?:\\((['\"]*)((?:\\([^\\)]+\\)|[^\\2\\(\\)]*)+)\\2\\))?/},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(T){return T.getAttribute(\"href\")}},relative:{\"+\":function(aa,T,Z){var X=typeof T===\"string\",ab=X&&!/\\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},\">\":function(Z,U,aa){var X=typeof U===\"string\";if(X&&!/\\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},\"\":function(W,U,Y){var V=L++,T=S;if(!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"parentNode\",U,V,W,X,Y)},\"~\":function(W,U,Y){var V=L++,T=S;if(typeof U===\"string\"&&!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"previousSibling\",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!==\"undefined\"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!==\"undefined\"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute(\"name\")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=\" \"+W[1].replace(/\\\\/g,\"\")+\" \";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(\" \"+Y.className+\" \").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\\\/g,\"\")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]==\"nth\"){var U=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(T[2]==\"even\"&&\"2n\"||T[2]==\"odd\"&&\"2n+1\"||!/\\D/.test(T[2])&&\"0n+\"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\\\/g,\"\");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]===\"~=\"){X[4]=\" \"+X[4]+\" \"}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]===\"not\"){if(X[3].match(R).length>1||/^\\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!==\"hidden\"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\\d/i.test(T.nodeName)},text:function(T){return\"text\"===T.type},radio:function(T){return\"radio\"===T.type},checkbox:function(T){return\"checkbox\"===T.type},file:function(T){return\"file\"===T.type},password:function(T){return\"password\"===T.type},submit:function(T){return\"submit\"===T.type},image:function(T){return\"image\"===T.type},reset:function(T){return\"reset\"===T.type},button:function(T){return\"button\"===T.type||T.nodeName.toUpperCase()===\"BUTTON\"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U===\"contains\"){return(Z.textContent||Z.innerText||\"\").indexOf(V[3])>=0}else{if(U===\"not\"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case\"only\":case\"first\":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z==\"first\"){return true}U=T;case\"last\":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case\"nth\":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute(\"id\")===T},TAG:function(U,T){return(T===\"*\"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(\" \"+(U.className||U.getAttribute(\"class\"))+\" \").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+\"\",X=W[2],U=W[4];return T==null?X===\"!=\":X===\"=\"?Z===U:X===\"*=\"?Z.indexOf(U)>=0:X===\"~=\"?(\" \"+Z+\" \").indexOf(U)>=0:!U?Z&&T!==false:X===\"!=\"?Z!=U:X===\"^=\"?Z.indexOf(U)===0:X===\"$=\"?Z.substr(Z.length-U.length)===U:X===\"|=\"?Z===U||Z.substr(0,U.length+1)===U+\"-\":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)===\"[object Array]\"){Array.prototype.push.apply(U,X)}else{if(typeof X.length===\"number\"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if(\"sourceIndex\" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement(\"form\"),V=\"script\"+(new Date).getTime();U.innerHTML=\"<input name='\"+V+\"'/>\";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!==\"undefined\"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!==\"undefined\"&&W.getAttributeNode(\"id\").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!==\"undefined\"&&Y.getAttributeNode(\"id\");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement(\"div\");T.appendChild(document.createComment(\"\"));if(T.getElementsByTagName(\"*\").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]===\"*\"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML=\"<a href='#'></a>\";if(T.firstChild&&typeof T.firstChild.getAttribute!==\"undefined\"&&T.firstChild.getAttribute(\"href\")!==\"#\"){I.attrHandle.href=function(U){return U.getAttribute(\"href\",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement(\"div\");U.innerHTML=\"<p class='TEST'></p>\";if(U.querySelectorAll&&U.querySelectorAll(\".TEST\").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement(\"div\");T.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(T.getElementsByClassName(\"e\").length===0){return}T.lastChild.className=\"e\";if(T.getElementsByClassName(\"e\").length===1){return}I.order.splice(1,0,\"CLASS\");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!==\"undefined\"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!==\"string\"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!==\"HTML\"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X=\"\",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,\"\")}T=I.relative[T]?T+\"*\":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[\":\"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=\":not(\"+V+\")\"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,\"events\")||o.data(I,\"events\",{}),J=o.data(I,\"handle\")||o.data(I,\"handle\",function(){return typeof o!==\"undefined\"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\\s+/),function(M,N){var O=N.split(\".\");N=O.shift();H.type=O.slice().sort().join(\".\");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent(\"on\"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,\"events\"),F,E;if(G){if(H===g||(typeof H===\"string\"&&H.charAt(0)==\".\")){for(var I in G){this.remove(K,I+(H||\"\"))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\\s+/),function(M,O){var Q=O.split(\".\");O=Q.shift();var N=RegExp(\"(^|\\\\.)\"+Q.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,\"handle\"),false)}else{if(K.detachEvent){K.detachEvent(\"on\"+O,o.data(K,\"handle\"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,\"handle\");if(L){L.elem=null}o.removeData(K,\"events\");o.removeData(K,\"handle\")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I===\"object\"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf(\"!\")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,\"handle\");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,\"a\")&&G==\"click\"))&&H[\"on\"+G]&&H[\"on\"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,\"a\")&&G==\"click\")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(\".\");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp(\"(^|\\\\.)\"+L.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");E=(o.data(this,\"events\")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:\"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which\".split(\" \"),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp(\"(^|\\\\.)\"+G[0]+\"(\\\\.|$)\");o.each((o.data(this,\"events\").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:\"mouseenter\",mouseout:\"mouseleave\"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F==\"unload\"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp(\"(^|\\\\.)\"+H.type+\"(\\\\.|$)\"),G=true,F=[];o.each(o.data(this,\"events\").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,\"closest\")-o.data(I.elem,\"closest\")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return[\"live\",F,E.replace(/\\./g,\"`\").replace(/ /g,\"|\")].join(\".\")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler(\"ready\")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener(\"DOMContentLoaded\",function(){document.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent(\"onreadystatechange\",function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll(\"left\")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,\"load\",o.ready)}o.each((\"blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error\").split(\",\"),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind(\"unload\",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement(\"script\"),K=document.createElement(\"div\"),J=\"script\"+(new Date).getTime();K.style.display=\"none\";K.innerHTML=' <link/><table></table><a href=\"/a\" style=\"color:red;float:left;opacity:.5;\">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName(\"*\"),E=K.getElementsByTagName(\"a\")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName(\"tbody\").length,objectAll:!!K.getElementsByTagName(\"object\")[0].getElementsByTagName(\"*\").length,htmlSerialize:!!K.getElementsByTagName(\"link\").length,style:/red/.test(E.getAttribute(\"style\")),hrefNormalized:E.getAttribute(\"href\")===\"/a\",opacity:E.style.opacity===\"0.5\",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type=\"text/javascript\";try{G.appendChild(document.createTextNode(\"window.\"+J+\"=1;\"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent(\"onclick\",function(){o.support.noCloneEvent=false;K.detachEvent(\"onclick\",arguments.callee)});K.cloneNode(true).fireEvent(\"onclick\")}o(function(){var L=document.createElement(\"div\");L.style.width=L.style.paddingLeft=\"1px\";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display=\"none\"})})();var w=o.support.cssFloat?\"cssFloat\":\"styleFloat\";o.props={\"for\":\"htmlFor\",\"class\":\"className\",\"float\":w,cssFloat:w,styleFloat:w,readonly:\"readOnly\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",rowspan:\"rowSpan\",tabindex:\"tabIndex\"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!==\"string\"){return this._load(G)}var I=G.indexOf(\" \");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H=\"GET\";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J===\"object\"){J=o.param(J);H=\"POST\"}}}var F=this;o.ajax({url:G,type:H,dataType:\"html\",data:J,complete:function(M,L){if(L==\"success\"||L==\"notmodified\"){F.html(E?o(\"<div/>\").append(M.responseText.replace(/<script(.|\\s)*?\\/script>/g,\"\")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each(\"ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend\".split(\",\"),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:\"GET\",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,\"script\")},getJSON:function(E,F,G){return o.get(E,F,G,\"json\")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:\"POST\",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject(\"Microsoft.XMLHTTP\"):new XMLHttpRequest()},accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",script:\"text/javascript, application/javascript\",json:\"application/json, text/javascript\",text:\"text/plain\",_default:\"*/*\"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!==\"string\"){M.data=o.param(M.data)}if(M.dataType==\"jsonp\"){if(G==\"GET\"){if(!M.url.match(F)){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+(M.jsonp||\"callback\")+\"=?\"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+\"&\":\"\")+(M.jsonp||\"callback\")+\"=?\"}}M.dataType=\"json\"}if(M.dataType==\"json\"&&(M.data&&M.data.match(F)||M.url.match(F))){W=\"jsonp\"+r++;if(M.data){M.data=(M.data+\"\").replace(F,\"=\"+W+\"$1\")}M.url=M.url.replace(F,\"=\"+W+\"$1\");M.dataType=\"script\";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType==\"script\"&&M.cache==null){M.cache=false}if(M.cache===false&&G==\"GET\"){var E=e();var U=M.url.replace(/(\\?|&)_=.*?(&|$)/,\"$1_=\"+E+\"$2\");M.url=U+((U==M.url)?(M.url.match(/\\?/)?\"&\":\"?\")+\"_=\"+E:\"\")}if(M.data&&G==\"GET\"){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger(\"ajaxStart\")}var Q=/^(\\w+:)?\\/\\/([^\\/?#]+)/.exec(M.url);if(M.dataType==\"script\"&&G==\"GET\"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName(\"head\")[0];var T=document.createElement(\"script\");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState==\"loaded\"||this.readyState==\"complete\")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader(\"Content-Type\",M.contentType)}if(M.ifModified){J.setRequestHeader(\"If-Modified-Since\",o.lastModified[M.url]||\"Thu, 01 Jan 1970 00:00:00 GMT\")}J.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");J.setRequestHeader(\"Accept\",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+\", */*\":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}J.abort();return false}if(M.global){o.event.trigger(\"ajaxSend\",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}}else{if(!K&&J&&(J.readyState==4||X==\"timeout\")){K=true;if(P){clearInterval(P);P=null}R=X==\"timeout\"?\"timeout\":!o.httpSuccess(J)?\"error\":M.ifModified&&o.httpNotModified(J,M.url)?\"notmodified\":\"success\";if(R==\"success\"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R=\"parsererror\"}}if(R==\"success\"){var Y;try{Y=J.getResponseHeader(\"Last-Modified\")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N(\"timeout\")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger(\"ajaxSuccess\",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger(\"ajaxComplete\",[J,M])}if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger(\"ajaxError\",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol==\"file:\"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader(\"Last-Modified\");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader(\"content-type\"),E=H==\"xml\"||!H&&F&&F.indexOf(\"xml\")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName==\"parsererror\"){throw\"parsererror\"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I===\"string\"){if(H==\"script\"){o.globalEval(I)}if(H==\"json\"){I=l[\"eval\"](\"(\"+I+\")\")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+\"=\"+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join(\"&\").replace(/%20/g,\"+\")}});var m={},n,d=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t(\"show\",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],\"olddisplay\");this[H].style.display=E||\"\";if(o.css(this[H],\"display\")===\"none\"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o(\"<\"+G+\" />\").appendTo(\"body\");K=I.css(\"display\");if(K===\"none\"){K=\"block\"}I.remove();m[G]=K}o.data(this[H],\"olddisplay\",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],\"olddisplay\")||\"\"}return this}},hide:function(H,I){if(H){return this.animate(t(\"hide\",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],\"olddisplay\");if(!E&&E!==\"none\"){o.data(this[G],\"olddisplay\",o.css(this[G],\"display\"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display=\"none\"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G===\"boolean\";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(\":hidden\");o(this)[H?\"show\":\"hide\"]()}):this.animate(t(\"toggle\",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?\"each\":\"queue\"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(\":hidden\"),J=this;for(M in I){if(I[M]==\"hide\"&&L||I[M]==\"show\"&&!L){return K.complete.call(this)}if((M==\"height\"||M==\"width\")&&this.style){K.display=o.css(this,\"display\");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow=\"hidden\"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S==\"toggle\"?L?\"show\":\"hide\":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||\"px\";if(P!=\"px\"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]==\"-=\"?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,\"\")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t(\"show\",1),slideUp:t(\"hide\",1),slideToggle:t(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G===\"object\"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration===\"number\"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop==\"height\"||this.prop==\"width\")&&this.elem.style){this.elem.style.display=\"block\"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||\"px\";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop==\"width\"||this.prop==\"height\"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,\"display\")==\"none\"){this.elem.style.display=\"block\"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?\"swing\":\"linear\")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,\"opacity\",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!==\"visible\"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position===\"relative\"||E.position===\"static\"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position===\"fixed\"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement(\"div\"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\"><div></div></div><table style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\" cellpadding=\"0\" cellspacing=\"0\"><tr><td></td></tr></table>';M={position:\"absolute\",top:0,left:0,margin:0,border:0,width:\"1px\",height:\"1px\",visibility:\"hidden\"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow=\"hidden\",H.style.position=\"relative\";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop=\"1px\";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,\"marginTop\",true),10)||0,F+=parseInt(o.curCSS(E,\"marginLeft\",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,\"marginTop\");J.left-=j(this,\"marginLeft\");E.top+=j(G,\"borderTopWidth\");E.left+=j(G,\"borderLeftWidth\");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,\"position\")==\"static\")){E=E.offsetParent}return o(E)}});o.each([\"Left\",\"Top\"],function(F,E){var G=\"scroll\"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?\"pageYOffset\":\"pageXOffset\"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each([\"Height\",\"Width\"],function(I,G){var E=I?\"Left\":\"Top\",H=I?\"Right\":\"Bottom\",F=G.toLowerCase();o.fn[\"inner\"+G]=function(){return this[0]?o.css(this[0],F,false,\"padding\"):null};o.fn[\"outer\"+G]=function(K){return this[0]?o.css(this[0],F,false,K?\"margin\":\"border\"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode==\"CSS1Compat\"&&document.documentElement[\"client\"+G]||document.body[\"client\"+G]:this[0]==document?Math.max(document.documentElement[\"client\"+G],document.body[\"scroll\"+G],document.documentElement[\"scroll\"+G],document.body[\"offset\"+G],document.documentElement[\"offset\"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K===\"string\"?K:K+\"px\")}})})();\n"
+"/*\n"
+" * jQuery UI 1.7.2\n"
+" *\n"
+" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
+" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
+" * and GPL (GPL-LICENSE.txt) licenses.\n"
+" *\n"
+" * http://docs.jquery.com/UI\n"
+" */\n"
+"jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:\"1.7.2\",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css(\"overflow\")==\"hidden\"){return false}var j=(k&&k==\"left\")?\"scrollLeft\":\"scrollTop\",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h=\"http://www.w3.org/2005/07/aaa\",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j==\"role\"?(m?f.call(this,k,j,\"wairole:\"+l):(f.apply(this,arguments)||\"\").replace(b,\"\")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,\"aaa:\"),l):f.call(this,k,j.replace(a,\"aaa:\"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,\"\"))}):e.call(this,j))}}c.fn.extend({remove:function(){c(\"*\",this).add(this).each(function(){c(this).triggerHandler(\"remove\")});return i.apply(this,arguments)},enableSelection:function(){return this.attr(\"unselectable\",\"off\").css(\"MozUserSelect\",\"\").unbind(\"selectstart.ui\")},disableSelection:function(){return this.attr(\"unselectable\",\"on\").css(\"MozUserSelect\",\"none\").bind(\"selectstart.ui\",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!j.length?c(document):j}});c.extend(c.expr[\":\"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,\"tabindex\");return(/input|select|textarea|button|object/.test(l)?!k.disabled:\"a\"==l||\"area\"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)[\"area\"==l?\"parents\":\"closest\"](\":hidden\").length},tabbable:function(k){var j=c.attr(k,\"tabindex\");return(isNaN(j)||j>=0)&&c(k).is(\":focusable\")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p==\"string\"?p.split(/,?\\s+/):p)}var j=k(\"getter\");if(l.length==1&&typeof l[0]==\"string\"){j=j.concat(k(\"getterSetter\"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(\".\")[0];k=k.split(\".\")[1];c.fn[k]=function(p){var n=(typeof p==\"string\"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)==\"_\"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+\"-\"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind(\"setData.\"+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind(\"getData.\"+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind(\"remove\",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter=\"option\"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").removeAttr(\"aria-disabled\")},option:function(l,m){var k=l,j=this;if(typeof l==\"string\"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j==\"disabled\"){this.element[k?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").attr(\"aria-disabled\",k)}},enable:function(){this._setData(\"disabled\",false)},disable:function(){this._setData(\"disabled\",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind(\"mousedown.\"+this.widgetName,function(k){return j._mouseDown(k)}).bind(\"click.\"+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr(\"unselectable\");this.element.attr(\"unselectable\",\"on\")}this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName);(c.browser.msie&&this.element.attr(\"unselectable\",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel==\"string\"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2\n"
+" *\n"
+" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
+" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
+" * and GPL (GPL-LICENSE.txt) licenses.\n"
+" *\n"
+" * http://docs.jquery.com/UI/Resizables\n"
+" *\n"
+" * Depends:\n"
+" * ui.core.js\n"
+" */\n"
+"(function(c){c.widget(\"ui.resizable\",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css(\"position\"))&&c.browser.opera){this.element.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=j.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var k=this.handles.split(\",\");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d=\"ui-resizable-\"+h;var g=c('<div class=\"ui-resizable-handle '+d+'\"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if(\"se\"==h){g.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[h]=\".ui-resizable-\"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=[\"padding\",/ne|nw|n/.test(m)?\"Top\":/se|sw|s/.test(m)?\"Bottom\":/^e$/.test(m)?\"Right\":\"Left\"].join(\"\");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:\"se\"}});if(j.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){c(this).removeClass(\"ui-resizable-autohide\");e._handles.show()},function(){if(!e.resizing){c(this).addClass(\"ui-resizable-autohide\");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")})).end().remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(\".ui-draggable\")||(/absolute/).test(d.css(\"position\"))){d.css({position:\"absolute\",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css(\"position\"))){d.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this._renderProxy();var j=b(this.helper.css(\"left\")),g=b(this.helper.css(\"top\"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio==\"number\")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",h==\"auto\"?this.axis+\"-resize\":h);d.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate(\"resize\",d);g.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger(\"resize\",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],\"left\")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css(\"left\"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css(\"top\"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d==\"sw\"){g.left=i.left+(e.width-g.width);g.top=null}if(d==\"nw\"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css(\"borderTopWidth\"),g.css(\"borderRightWidth\"),g.css(\"borderBottomWidth\"),g.css(\"borderLeftWidth\")],h=[g.css(\"paddingTop\"),g.css(\"paddingRight\"),g.css(\"paddingBottom\"),g.css(\"paddingLeft\")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(\":hidden\")||c(f).parents(\":hidden\").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:\"absolute\",left:this.elementOffset.left-f+\"px\",top:this.elementOffset.top-f+\"px\",zIndex:++h.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!=\"resize\"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:\"1.7.2\",eventPrefix:\"resize\",defaults:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,cancel:\":input,option\",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;_store=function(h){c(h).each(function(){c(this).data(\"resizable-alsoresize\",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css(\"left\"),10),top:parseInt(c(this).css(\"top\"),10)})})};if(typeof(g.alsoResize)==\"object\"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data(\"resizable\"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data(\"resizable-alsoresize\"),o={},n=m&&m.length?m:[\"width\",\"height\",\"top\",\"left\"];c.each(n||[\"width\",\"height\",\"top\",\"left\"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css(\"position\"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:\"absolute\",top:\"auto\",left:\"auto\"})}p.css(o)})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data(\"resizable\");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:\"relative\"})}c(this).removeData(\"resizable-alsoresize-start\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(h,m){var n=c(this).data(\"resizable\"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],\"left\")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css(\"left\"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css(\"top\"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css(\"width\"),10),height:parseInt(n.element.css(\"height\"),10),top:parseInt(n.element.css(\"top\"),10),left:parseInt(n.element.css(\"left\"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate(\"resize\",h)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(e,q){var s=c(this).data(\"resizable\"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){h[p]=b(m.css(\"padding\"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,\"left\")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data(\"resizable\"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css(\"position\"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css(\"position\"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data(\"resizable\"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(f,g){var d=c(this).data(\"resizable\"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof h.ghost==\"string\"?h.ghost:\"\");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost){d.ghost.css({position:\"relative\",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(d,l){var n=c(this).data(\"resizable\"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid==\"number\"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;\n"
+"/**\n"
+" * jQuery.ScrollTo - Easy element scrolling using jQuery.\n"
+" * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com\n"
+" * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).\n"
+" * Date: 2/8/2008\n"
+" * @author Ariel Flesler\n"
+" * @version 1.3.2\n"
+" */\n"
+";(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);\n"
+"\n"
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 4c5ae50..8002743 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -161,11 +161,7 @@ void LatexGenerator::init()
t << endl
<< "clean:" << endl
-#if defined(_MSC_VER)
- << "\tdel "
-#else
<< "\trm -f "
-#endif
<< "*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf" << endl;
createSubDirs(d);
diff --git a/src/latexgen.h b/src/latexgen.h
index f846ca3..e9af96d 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -180,6 +180,8 @@ class LatexGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/layout.cpp b/src/layout.cpp
index f2b3b4a..36c5d26 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -759,7 +759,7 @@ class LayoutParser : public QXmlDefaultHandler
{
// no MainPage node... add one the first item of the root node...
new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE,
- Config_getBool("GENERATE_TREEVIEW") ? "main" : "index",
+ /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index",
theTranslator->trMainPage(),TRUE);
}
}
@@ -780,7 +780,7 @@ class LayoutParser : public QXmlDefaultHandler
QCString baseFile; // base name of the file containing the index page
} mapping[] =
{
- { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), Config_getBool("GENERATE_TREEVIEW") ? "main" : "index" },
+ { "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index" },
{ "pages", LayoutNavEntry::Pages, theTranslator->trRelatedPages(), QCString(), "pages" },
{ "modules", LayoutNavEntry::Modules, theTranslator->trModules(), QCString(), "modules" },
{ "namespaces", LayoutNavEntry::Namespaces, javaOpt ? theTranslator->trPackages() :
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 52adf17..a02fabf 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -61,6 +61,7 @@ HEADERS = bufstr.h \
index.h \
index_xsd.h \
instdox.h \
+ jquery_js.h \
language.h \
latexdocvisitor.h \
latexgen.h \
@@ -78,6 +79,8 @@ HEADERS = bufstr.h \
message.h \
msc.h \
namespacedef.h \
+ navtree_css.h \
+ navtree_js.h \
objcache.h \
outputgen.h \
outputlist.h \
@@ -95,6 +98,7 @@ HEADERS = bufstr.h \
qhpxmlwriter.h \
qtbc.h \
reflist.h \
+ resize_js.h \
rtfdocvisitor.h \
rtfgen.h \
rtfstyle.h \
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
index 29c6fb7..5ee344a 100644
--- a/src/libdoxygen.t
+++ b/src/libdoxygen.t
@@ -120,3 +120,18 @@ search_css.h: search.css
doxygen_css.h: doxygen.css
cat doxygen.css | $(TO_C_CMD) >doxygen_css.h
+navtree_js.h: navtree.js
+ cat navtree.js | $(TO_C_CMD) >navtree_js.h
+
+navindex_js.h: navindex.js
+ cat navindex.js | $(TO_C_CMD) >navindex_js.h
+
+resize_js.h: resize.js
+ cat resize.js | $(TO_C_CMD) >resize_js.h
+
+jquery_js.h: jquery.js
+ cat jquery.js | $(TO_C_CMD) >jquery_js.h
+
+navtree_css.h: navtree.css
+ cat navtree.css | $(TO_C_CMD) >navtree_css.h
+
diff --git a/src/mangen.h b/src/mangen.h
index e855942..8a997de 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -178,6 +178,8 @@ class ManGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 098c58e..be6a3a3 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -143,7 +143,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
- //if (!md->isDefine()) ol.startParameter(TRUE); else ol.docify(" ");
bool first=TRUE;
bool paramTypeStarted=FALSE;
bool isDefine = md->isDefine();
@@ -166,10 +165,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
// use the following to put the function pointer type before the name
bool hasFuncPtrType=FALSE;
- // or use the following to put the function pointer as it appears in
- // the prototype.
- //bool hasFuncPtrType=vp!=-1 && wp!=-1 && wp<vp;
-
if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{
ol.docify(a->attrib+" ");
@@ -208,10 +203,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
{
- if (!hasFuncPtrType)
- {
- ol.docify(" ");
- }
+ //if (!hasFuncPtrType)
+ //{
+ // ol.docify(" ");
+ //}
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex);
ol.startEmphasis();
@@ -277,21 +272,12 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Latex);
- //if (!first) ol.writeString("&#160;");
if (!md->isObjCMethod()) ol.docify(")"); // end argument list
ol.enableAll();
if (htmlOn) ol.enable(OutputGenerator::Html);
if (latexOn) ol.enable(OutputGenerator::Latex);
- //if (!isDefine)
- {
- if (first) ol.startParameterName(defArgList->count()<2);
- ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
- }
- //else // isDefine
- //{
- // if (first) ol.startParameterName(TRUE);
- // ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
- //}
+ if (first) ol.startParameterName(defArgList->count()<2);
+ ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
ol.popGeneratorState();
if (md->extraTypeChars())
{
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 3e0f4e0..fefcc95 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -107,7 +107,7 @@ void MemberGroup::setAnchors(ClassDef *context)
void MemberGroup::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{
- printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
+ //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
QCString ldoc = doc;
if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\"></a>");
memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc/*,TRUE,TRUE*/);
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index ca034d7..8aeb42a 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -515,14 +515,19 @@ void MemberList::writeDocumentation(OutputList &ol,
void MemberList::writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
MemberListIterator mli(*this);
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
QCString diskName=md->getOutputFileBase();
QCString title=md->qualifiedName();
- startFile(ol,diskName,md->name(),title);
- container->writeNavigationPath(ol);
+ startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,
+ container->getOutputFileBase());
+ if (!generateTreeView)
+ {
+ container->writeNavigationPath(ol);
+ }
ol.startContents();
ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
@@ -539,8 +544,15 @@ void MemberList::writeDocumentationPage(OutputList &ol,
ol.writeString(" </td>\n");
ol.writeString(" </tr>\n");
ol.writeString("</table>\n");
-
- endFile(ol);
+
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ container->writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
}
if (memberGroupList)
{
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 337403d..d31ed1a 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -411,7 +411,8 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
void NamespaceDef::writeDocumentation(OutputList &ol)
{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString pageTitle;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
@@ -426,12 +427,17 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
pageTitle = theTranslator->trNamespaceReference(displayName());
}
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,TRUE);
- if (getOuterScope()!=Doxygen::globalScope)
+ startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
+
+ if (!generateTreeView)
{
- writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope)
+ {
+ writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
+
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
@@ -544,7 +550,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
- endFile(ol);
+ ol.endContents();
+
+ if (generateTreeView)
+ {
+ writeNavigationPath(ol);
+ }
+
+ endFile(ol,TRUE);
if (generateTagFile)
{
diff --git a/src/navtree.css b/src/navtree.css
new file mode 100644
index 0000000..a87fa62
--- /dev/null
+++ b/src/navtree.css
@@ -0,0 +1,123 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ padding:2px;
+ margin:0px;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 300px;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background:url("ftv2splitbar.png") repeat scroll right center transparent;
+ cursor:e-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: ##FA;
+}
+
+
+
diff --git a/src/navtree.js b/src/navtree.js
new file mode 100644
index 0000000..1301083
--- /dev/null
+++ b/src/navtree.js
@@ -0,0 +1,245 @@
+function createIndent(o,domNode,node,level)
+{
+ if (node.parentNode && node.parentNode.parentNode)
+ {
+ createIndent(o,domNode,node.parentNode,level+1);
+ }
+ var imgNode = document.createElement("img");
+ if (level==0 && node.childrenData)
+ {
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function()
+ {
+ if (node.expanded)
+ {
+ $(node.getChildrenUL()).slideUp("fast");
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2pnode.png";
+ }
+ node.expanded = false;
+ }
+ else
+ {
+ expandNode(o, node, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ }
+ else
+ {
+ domNode.appendChild(imgNode);
+ }
+ if (level==0)
+ {
+ if (node.isLast)
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2lastnode.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ else
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2pnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2node.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ }
+ else
+ {
+ if (node.isLast)
+ {
+ imgNode.src = node.relpath+"ftv2blank.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2vertline.png";
+ }
+ }
+ imgNode.border = "0";
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ a.appendChild(node.label);
+ if (link)
+ {
+ a.href = node.relpath+link;
+ }
+ else
+ {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ node.expanded = false;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function()
+ {
+ if (!node.childrenUL)
+ {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+}
+
+function expandNode(o, node, imm)
+{
+ if (node.childrenData && !node.expanded)
+ {
+ if (!node.childrenVisited)
+ {
+ getNode(o, node);
+ }
+ if (imm)
+ {
+ $(node.getChildrenUL()).show();
+ }
+ else
+ {
+ $(node.getChildrenUL()).slideDown("fast",showRoot);
+ }
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2mnode.png";
+ }
+ node.expanded = true;
+ }
+}
+
+function getNode(o, po)
+{
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData)
+ {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+}
+
+function findNavTreePage(url, data)
+{
+ var nodes = data;
+ var result = null;
+ for (var i in nodes)
+ {
+ var d = nodes[i];
+ if (d[1] == url)
+ {
+ return new Array(i);
+ }
+ else if (d[2] != null) // array of children
+ {
+ result = findNavTreePage(url, d[2]);
+ if (result != null)
+ {
+ return (new Array(i).concat(result));
+ }
+ }
+ }
+ return null;
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+
+ getNode(o, o.node);
+
+ o.breadcrumbs = findNavTreePage(toroot, NAVTREE);
+ if (o.breadcrumbs == null)
+ {
+ o.breadcrumbs = findNavTreePage("index.html",NAVTREE);
+ }
+ if (o.breadcrumbs != null && o.breadcrumbs.length>0)
+ {
+ var p = o.node;
+ for (var i in o.breadcrumbs)
+ {
+ var j = o.breadcrumbs[i];
+ p = p.children[j];
+ expandNode(o,p,true);
+ }
+ p.itemDiv.className = p.itemDiv.className + " selected";
+ p.itemDiv.id = "selected";
+ $(window).load(showRoot);
+ }
+}
+
diff --git a/src/navtree_css.h b/src/navtree_css.h
new file mode 100644
index 0000000..57f119f
--- /dev/null
+++ b/src/navtree_css.h
@@ -0,0 +1,123 @@
+"#nav-tree .children_ul {\n"
+" margin:0;\n"
+" padding:4px;\n"
+"}\n"
+"\n"
+"#nav-tree ul {\n"
+" list-style:none outside none;\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree li {\n"
+" white-space:nowrap;\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .plus {\n"
+" margin:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .selected {\n"
+" background-image: url('tab_a.png');\n"
+" background-repeat:repeat-x;\n"
+" color: #fff;\n"
+" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
+"}\n"
+"\n"
+"#nav-tree img {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+" border:0px;\n"
+" vertical-align: middle;\n"
+"}\n"
+"\n"
+"#nav-tree a {\n"
+" text-decoration:none;\n"
+" padding:0px;\n"
+" margin:0px;\n"
+" outline:none;\n"
+"}\n"
+"\n"
+"#nav-tree .label {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .label a {\n"
+" padding:2px;\n"
+"}\n"
+"\n"
+"#nav-tree .selected a {\n"
+" text-decoration:none;\n"
+" padding:2px;\n"
+" margin:0px;\n"
+" color:#fff;\n"
+"}\n"
+"\n"
+"#nav-tree .children_ul {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree .item {\n"
+" margin:0px;\n"
+" padding:0px;\n"
+"}\n"
+"\n"
+"#nav-tree {\n"
+" padding: 0px 0px;\n"
+" background-color: #FAFAFF; \n"
+" font-size:14px;\n"
+" overflow:auto;\n"
+"}\n"
+"\n"
+"#doc-content {\n"
+" overflow:auto;\n"
+" display:block;\n"
+" padding:0px;\n"
+" margin:0px;\n"
+"}\n"
+"\n"
+"#side-nav {\n"
+" padding:0 6px 0 0;\n"
+" margin: 0px;\n"
+" display:block;\n"
+" position: absolute;\n"
+" left: 0px;\n"
+" width: 300px;\n"
+"}\n"
+"\n"
+".ui-resizable .ui-resizable-handle {\n"
+" display:block;\n"
+"}\n"
+"\n"
+".ui-resizable-e {\n"
+" background:url(\"ftv2splitbar.png\") repeat scroll right center transparent;\n"
+" cursor:e-resize;\n"
+" height:100%;\n"
+" right:0;\n"
+" top:0;\n"
+" width:6px;\n"
+"}\n"
+"\n"
+".ui-resizable-handle {\n"
+" display:none;\n"
+" font-size:0.1px;\n"
+" position:absolute;\n"
+" z-index:1;\n"
+"}\n"
+"\n"
+"#nav-tree-contents {\n"
+" margin: 6px 0px 0px 0px;\n"
+"}\n"
+"\n"
+"#nav-tree {\n"
+" background-image:url('nav_h.png');\n"
+" background-repeat:repeat-x;\n"
+" background-color: ##FA;\n"
+"}\n"
+"\n"
+"\n"
+"\n"
diff --git a/src/navtree_js.h b/src/navtree_js.h
new file mode 100644
index 0000000..8e81d55
--- /dev/null
+++ b/src/navtree_js.h
@@ -0,0 +1,245 @@
+"function createIndent(o,domNode,node,level)\n"
+"{\n"
+" if (node.parentNode && node.parentNode.parentNode)\n"
+" {\n"
+" createIndent(o,domNode,node.parentNode,level+1);\n"
+" }\n"
+" var imgNode = document.createElement(\"img\");\n"
+" if (level==0 && node.childrenData)\n"
+" {\n"
+" node.plus_img = imgNode;\n"
+" node.expandToggle = document.createElement(\"a\");\n"
+" node.expandToggle.href = \"javascript:void(0)\";\n"
+" node.expandToggle.onclick = function() \n"
+" {\n"
+" if (node.expanded) \n"
+" {\n"
+" $(node.getChildrenUL()).slideUp(\"fast\");\n"
+" if (node.isLast)\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2plastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2pnode.png\";\n"
+" }\n"
+" node.expanded = false;\n"
+" } \n"
+" else \n"
+" {\n"
+" expandNode(o, node, false);\n"
+" }\n"
+" }\n"
+" node.expandToggle.appendChild(imgNode);\n"
+" domNode.appendChild(node.expandToggle);\n"
+" }\n"
+" else\n"
+" {\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" if (level==0)\n"
+" {\n"
+" if (node.isLast)\n"
+" {\n"
+" if (node.childrenData)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2plastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2lastnode.png\";\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" }\n"
+" else\n"
+" {\n"
+" if (node.childrenData)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2pnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2node.png\";\n"
+" domNode.appendChild(imgNode);\n"
+" }\n"
+" }\n"
+" }\n"
+" else\n"
+" {\n"
+" if (node.isLast)\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2blank.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" imgNode.src = node.relpath+\"ftv2vertline.png\";\n"
+" }\n"
+" }\n"
+" imgNode.border = \"0\";\n"
+"}\n"
+"\n"
+"function newNode(o, po, text, link, childrenData, lastNode)\n"
+"{\n"
+" var node = new Object();\n"
+" node.children = Array();\n"
+" node.childrenData = childrenData;\n"
+" node.depth = po.depth + 1;\n"
+" node.relpath = po.relpath;\n"
+" node.isLast = lastNode;\n"
+"\n"
+" node.li = document.createElement(\"li\");\n"
+" po.getChildrenUL().appendChild(node.li);\n"
+" node.parentNode = po;\n"
+"\n"
+" node.itemDiv = document.createElement(\"div\");\n"
+" node.itemDiv.className = \"item\";\n"
+"\n"
+" node.labelSpan = document.createElement(\"span\");\n"
+" node.labelSpan.className = \"label\";\n"
+"\n"
+" createIndent(o,node.itemDiv,node,0);\n"
+" node.itemDiv.appendChild(node.labelSpan);\n"
+" node.li.appendChild(node.itemDiv);\n"
+"\n"
+" var a = document.createElement(\"a\");\n"
+" node.labelSpan.appendChild(a);\n"
+" node.label = document.createTextNode(text);\n"
+" a.appendChild(node.label);\n"
+" if (link) \n"
+" {\n"
+" a.href = node.relpath+link;\n"
+" } \n"
+" else \n"
+" {\n"
+" if (childrenData != null) \n"
+" {\n"
+" a.className = \"nolink\";\n"
+" a.href = \"javascript:void(0)\";\n"
+" a.onclick = node.expandToggle.onclick;\n"
+" node.expanded = false;\n"
+" }\n"
+" }\n"
+"\n"
+" node.childrenUL = null;\n"
+" node.getChildrenUL = function() \n"
+" {\n"
+" if (!node.childrenUL) \n"
+" {\n"
+" node.childrenUL = document.createElement(\"ul\");\n"
+" node.childrenUL.className = \"children_ul\";\n"
+" node.childrenUL.style.display = \"none\";\n"
+" node.li.appendChild(node.childrenUL);\n"
+" }\n"
+" return node.childrenUL;\n"
+" };\n"
+"\n"
+" return node;\n"
+"}\n"
+"\n"
+"function showRoot()\n"
+"{\n"
+" var headerHeight = $(\"#top\").height();\n"
+" var footerHeight = $(\"#nav-path\").height();\n"
+" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
+" navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
+"}\n"
+"\n"
+"function expandNode(o, node, imm)\n"
+"{\n"
+" if (node.childrenData && !node.expanded) \n"
+" {\n"
+" if (!node.childrenVisited) \n"
+" {\n"
+" getNode(o, node);\n"
+" }\n"
+" if (imm)\n"
+" {\n"
+" $(node.getChildrenUL()).show();\n"
+" } \n"
+" else \n"
+" {\n"
+" $(node.getChildrenUL()).slideDown(\"fast\",showRoot);\n"
+" }\n"
+" if (node.isLast)\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
+" }\n"
+" else\n"
+" {\n"
+" node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
+" }\n"
+" node.expanded = true;\n"
+" }\n"
+"}\n"
+"\n"
+"function getNode(o, po)\n"
+"{\n"
+" po.childrenVisited = true;\n"
+" var l = po.childrenData.length-1;\n"
+" for (var i in po.childrenData) \n"
+" {\n"
+" var nodeData = po.childrenData[i];\n"
+" po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],\n"
+" i==l);\n"
+" }\n"
+"}\n"
+"\n"
+"function findNavTreePage(url, data)\n"
+"{\n"
+" var nodes = data;\n"
+" var result = null;\n"
+" for (var i in nodes) \n"
+" {\n"
+" var d = nodes[i];\n"
+" if (d[1] == url) \n"
+" {\n"
+" return new Array(i);\n"
+" }\n"
+" else if (d[2] != null) // array of children\n"
+" {\n"
+" result = findNavTreePage(url, d[2]);\n"
+" if (result != null) \n"
+" {\n"
+" return (new Array(i).concat(result));\n"
+" }\n"
+" }\n"
+" }\n"
+" return null;\n"
+"}\n"
+"\n"
+"function initNavTree(toroot,relpath)\n"
+"{\n"
+" var o = new Object();\n"
+" o.toroot = toroot;\n"
+" o.node = new Object();\n"
+" o.node.li = document.getElementById(\"nav-tree-contents\");\n"
+" o.node.childrenData = NAVTREE;\n"
+" o.node.children = new Array();\n"
+" o.node.childrenUL = document.createElement(\"ul\");\n"
+" o.node.getChildrenUL = function() { return o.node.childrenUL; };\n"
+" o.node.li.appendChild(o.node.childrenUL);\n"
+" o.node.depth = 0;\n"
+" o.node.relpath = relpath;\n"
+"\n"
+" getNode(o, o.node);\n"
+"\n"
+" o.breadcrumbs = findNavTreePage(toroot, NAVTREE);\n"
+" if (o.breadcrumbs == null)\n"
+" {\n"
+" o.breadcrumbs = findNavTreePage(\"index.html\",NAVTREE);\n"
+" }\n"
+" if (o.breadcrumbs != null && o.breadcrumbs.length>0)\n"
+" {\n"
+" var p = o.node;\n"
+" for (var i in o.breadcrumbs) \n"
+" {\n"
+" var j = o.breadcrumbs[i];\n"
+" p = p.children[j];\n"
+" expandNode(o,p,true);\n"
+" }\n"
+" p.itemDiv.className = p.itemDiv.className + \" selected\";\n"
+" p.itemDiv.id = \"selected\";\n"
+" $(window).load(showRoot);\n"
+" }\n"
+"}\n"
+"\n"
diff --git a/src/outputgen.h b/src/outputgen.h
index b3e7745..6d7e672 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -379,6 +379,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0;
virtual void startQuickIndices() = 0;
virtual void endQuickIndices() = 0;
+ virtual void writeSplitBar(const char *) = 0;
+ virtual void writeLogo() = 0;
virtual void writeQuickLinks(bool compact,HighlightedItem hli) = 0;
virtual void startContents() = 0;
virtual void endContents() = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index fd5b5d7..5572004 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -328,6 +328,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startQuickIndices); }
void endQuickIndices()
{ forall(&OutputGenerator::endQuickIndices); }
+ void writeSplitBar(const char *name)
+ { forall(&OutputGenerator::writeSplitBar,name); }
+ void writeLogo()
+ { forall(&OutputGenerator::writeLogo); }
void writeQuickLinks(bool compact,HighlightedItem hli)
{ forall(&OutputGenerator::writeQuickLinks,compact,hli); }
void startContents()
diff --git a/src/pagedef.cpp b/src/pagedef.cpp
index e7bcc1a..8563ec0 100644
--- a/src/pagedef.cpp
+++ b/src/pagedef.cpp
@@ -69,13 +69,15 @@ bool PageDef::hasParentPage() const
void PageDef::writeDocumentation(OutputList &ol)
{
+ static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
+
//outputList->disable(OutputGenerator::Man);
QCString pageName;
pageName=escapeCharsInString(name(),FALSE,TRUE);
//printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
- startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,TRUE);
+ startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,!generateTreeView);
ol.pushGeneratorState();
//1.{
@@ -92,13 +94,15 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.enable(OutputGenerator::Html);
}
- if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ if (!generateTreeView)
{
- getOuterScope()->writeNavigationPath(ol);
+ if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ {
+ getOuterScope()->writeNavigationPath(ol);
+ }
+ ol.endQuickIndices();
}
- ol.endQuickIndices();
-
// save old generator state and write title only to Man generator
ol.pushGeneratorState();
//2.{
@@ -135,7 +139,16 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
//1.}
- endFile(ol);
+ if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
+ {
+ ol.endContents();
+ getOuterScope()->writeNavigationPath(ol);
+ endFile(ol,TRUE);
+ }
+ else
+ {
+ endFile(ol);
+ }
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
diff --git a/src/resize.js b/src/resize.js
new file mode 100644
index 0000000..04fa95c
--- /dev/null
+++ b/src/resize.js
@@ -0,0 +1,81 @@
+var cookie_namespace = 'doxygen';
+var sidenav,navtree,content,header;
+
+function readCookie(cookie)
+{
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie)
+ {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1)
+ {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1)
+ {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+}
+
+function writeCookie(cookie, val, expiration)
+{
+ if (val==undefined) return;
+ if (expiration == null)
+ {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+}
+
+function resizeWidth()
+{
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).width();
+ content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+ writeCookie('width',sidenavWidth, null);
+}
+
+function restoreWidth(navWidth)
+{
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+6+"px"});
+ sidenav.css({width:navWidth + "px"});
+}
+
+function resizeHeight()
+{
+ var headerHeight = header.height();
+ var footerHeight = footer.height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
+}
+
+function initResizable()
+{
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(window).resize(function() { resizeHeight(); });
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+}
+
+
diff --git a/src/resize_js.h b/src/resize_js.h
new file mode 100644
index 0000000..7e627cc
--- /dev/null
+++ b/src/resize_js.h
@@ -0,0 +1,81 @@
+"var cookie_namespace = 'doxygen'; \n"
+"var sidenav,navtree,content,header;\n"
+"\n"
+"function readCookie(cookie) \n"
+"{\n"
+" var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
+" if (document.cookie) \n"
+" {\n"
+" var index = document.cookie.indexOf(myCookie);\n"
+" if (index != -1) \n"
+" {\n"
+" var valStart = index + myCookie.length;\n"
+" var valEnd = document.cookie.indexOf(\";\", valStart);\n"
+" if (valEnd == -1) \n"
+" {\n"
+" valEnd = document.cookie.length;\n"
+" }\n"
+" var val = document.cookie.substring(valStart, valEnd);\n"
+" return val;\n"
+" }\n"
+" }\n"
+" return 0;\n"
+"}\n"
+"\n"
+"function writeCookie(cookie, val, expiration) \n"
+"{\n"
+" if (val==undefined) return;\n"
+" if (expiration == null) \n"
+" {\n"
+" var date = new Date();\n"
+" date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
+" expiration = date.toGMTString();\n"
+" }\n"
+" document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
+"}\n"
+" \n"
+"function resizeWidth() \n"
+"{\n"
+" var windowWidth = $(window).width() + \"px\";\n"
+" var sidenavWidth = $(sidenav).width();\n"
+" content.css({marginLeft:parseInt(sidenavWidth)+6+\"px\"}); //account for 6px-wide handle-bar\n"
+" writeCookie('width',sidenavWidth, null);\n"
+"}\n"
+"\n"
+"function restoreWidth(navWidth)\n"
+"{\n"
+" var windowWidth = $(window).width() + \"px\";\n"
+" content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
+" sidenav.css({width:navWidth + \"px\"});\n"
+"}\n"
+"\n"
+"function resizeHeight() \n"
+"{\n"
+" var headerHeight = header.height();\n"
+" var footerHeight = footer.height();\n"
+" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
+" content.css({height:windowHeight + \"px\"});\n"
+" navtree.css({height:windowHeight + \"px\"});\n"
+" sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
+"}\n"
+"\n"
+"function initResizable()\n"
+"{\n"
+" header = $(\"#top\");\n"
+" sidenav = $(\"#side-nav\");\n"
+" content = $(\"#doc-content\");\n"
+" navtree = $(\"#nav-tree\");\n"
+" footer = $(\"#nav-path\");\n"
+" $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
+" $(window).resize(function() { resizeHeight(); });\n"
+" var width = readCookie('width');\n"
+" if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
+" resizeHeight();\n"
+" var url = location.href;\n"
+" var i=url.indexOf(\"#\");\n"
+" if (i>=0) window.location.hash=url.substr(i);\n"
+" var _preventDefault = function(evt) { evt.preventDefault(); };\n"
+" $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
+"}\n"
+"\n"
+"\n"
diff --git a/src/rtfgen.h b/src/rtfgen.h
index ce92d53..f534505 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -173,6 +173,8 @@ class RTFGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
+ void writeSplitBar(const char *) {}
+ void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
diff --git a/src/search.php b/src/search.php
index bddb487..bc848c1 100644
--- a/src/search.php
+++ b/src/search.php
@@ -140,7 +140,7 @@ function combine_results($results,&$docs)
{
$key=$di["url"];
$rank=$di["rank"];
- if (in_array($key, array_keys($docs)))
+ if ($docs[$key])
{
$docs[$key]["rank"]+=$rank;
}
@@ -219,10 +219,13 @@ function sort_results($docs,&$sorted)
function report_results(&$docs)
{
+ echo "<div class=\"header\">";
+ echo " <div class=\"headertitle\">\n";
+ echo " <h1>".search_results()."</h1>\n";
+ echo " </div>\n";
+ echo "</div>\n";
+ echo "<div class=\"searchresults\">\n";
echo "<table cellspacing=\"2\">\n";
- echo " <tr>\n";
- echo " <td colspan=\"2\"><h2>".search_results()."</h2></td>\n";
- echo " </tr>\n";
$numDocs = sizeof($docs);
if ($numDocs==0)
{
@@ -279,7 +282,6 @@ function main()
$query=$_GET["query"];
}
end_form(preg_replace("/[^a-zA-Z0-9\-\_\.]/i", " ", $query ));
- echo "&#160;\n<div class=\"searchresults\">\n";
$results = array();
$requiredWords = array();
$forbiddenWords = array();
@@ -307,6 +309,7 @@ function main()
// report results to the user
report_results($sorted);
echo "</div>\n";
+ end_page();
fclose($file);
}
diff --git a/src/search_php.h b/src/search_php.h
index 3380cee..d75a95c 100644
--- a/src/search_php.h
+++ b/src/search_php.h
@@ -140,7 +140,7 @@
" {\n"
" $key=$di[\"url\"];\n"
" $rank=$di[\"rank\"];\n"
-" if (in_array($key, array_keys($docs)))\n"
+" if ($docs[$key])\n"
" {\n"
" $docs[$key][\"rank\"]+=$rank;\n"
" }\n"
@@ -219,10 +219,13 @@
"\n"
"function report_results(&$docs)\n"
"{\n"
+" echo \"<div class=\\\"header\\\">\";\n"
+" echo \" <div class=\\\"headertitle\\\">\\n\";\n"
+" echo \" <h1>\".search_results().\"</h1>\\n\";\n"
+" echo \" </div>\\n\";\n"
+" echo \"</div>\\n\";\n"
+" echo \"<div class=\\\"searchresults\\\">\\n\";\n"
" echo \"<table cellspacing=\\\"2\\\">\\n\";\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td colspan=\\\"2\\\"><h2>\".search_results().\"</h2></td>\\n\";\n"
-" echo \" </tr>\\n\";\n"
" $numDocs = sizeof($docs);\n"
" if ($numDocs==0)\n"
" {\n"
@@ -279,7 +282,6 @@
" $query=$_GET[\"query\"];\n"
" }\n"
" end_form(preg_replace(\"/[^a-zA-Z0-9\\-\\_\\.]/i\", \" \", $query ));\n"
-" echo \"&#160;\\n<div class=\\\"searchresults\\\">\\n\";\n"
" $results = array();\n"
" $requiredWords = array();\n"
" $forbiddenWords = array();\n"
@@ -307,6 +309,7 @@
" // report results to the user\n"
" report_results($sorted);\n"
" echo \"</div>\\n\";\n"
+" end_page();\n"
" fclose($file);\n"
"}\n"
"\n"
diff --git a/src/translator_cn.h b/src/translator_cn.h
index a296daa..f48c66e 100644
--- a/src/translator_cn.h
+++ b/src/translator_cn.h
@@ -24,7 +24,7 @@
*/
#define CN_SPC
-class TranslatorChinese : public TranslatorAdapter_1_6_0
+class TranslatorChinese : public Translator
{
public:
/*! Used for identification of the language. The identification
@@ -1787,6 +1787,81 @@ class TranslatorChinese : public TranslatorAdapter_1_6_0
{
return "";
}
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0
+//////////////////////////////////////////////////////////////////////////
+ virtual QCString trDirRelation(const char *name)
+ {
+ // return QCString(name)+" Relation";
+ // unsure
+ return QCString(name)+CN_SPC"ϵ";
+ }
+
+ virtual QCString trLoading()
+ {
+ return "...";
+ }
+
+ virtual QCString trGlobalNamespace()
+ {
+ return "ȫռ";
+ }
+
+ virtual QCString trSearching()
+ {
+ return "...";
+ }
+
+ virtual QCString trNoMatches()
+ {
+ return "δҵ";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDirDependency(const char *name)
+ {
+ // return (QCString)"Directory dependency graph for "+name;
+ // unsure
+ return QCString(name)+CN_SPC"Ŀ¼ϵͼ";
+ }
+
+ virtual QCString trFileIn(const char *name)
+ {
+ // return (QCString)"File in "+name;
+ // unsure
+ return (QCString)"ļ"+CN_SPC+name;
+ }
+
+ virtual QCString trIncludesFileIn(const char *name)
+ {
+ // return (QCString)"Includes file in "+name;
+ // unsure
+ return (QCString)""CN_SPC+name+CN_SPC"";
+ }
+
+ virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+ int hour,int minutes,int seconds,
+ bool includeTime)
+ {
+ static const char *days[] = { "һ","","","","","","" };
+ static const char *months[] = { "һ","","","","","","","","","ʮ","ʮһ","ʮ" };
+
+ QCString sdate;
+
+ sdate.sprintf("%d%s%d %s",year, months[month-1], day, days[dayOfWeek-1]);
+
+ if (includeTime)
+ {
+ QCString stime;
+ stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+ sdate+=stime;
+ }
+ return sdate;
+ }
};
#endif
diff --git a/src/util.cpp b/src/util.cpp
index e22df70..4b25ecb 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -18,6 +18,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
+#include <math.h>
#include <md5.h>
@@ -50,6 +51,7 @@
#include "portable.h"
#include "parserintf.h"
#include "bufstr.h"
+#include "image.h"
#define ENABLE_TRACINGSUPPORT 0
@@ -1520,13 +1522,10 @@ static bool findOperator2(const QCString &s,int i)
return TRUE;
}
-static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
+static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
-//#define ADD_CHAR(c) if (resultPos>=resultLen) { resultLen+=1024; result.resize(resultLen); }
-// result[resultPos++]=(c)
-
class StrBuf
{
public:
@@ -1551,14 +1550,7 @@ class StrBuf
int len;
};
-#define CLR_BUF() g_strBuf.clear()
-#define ADD_CHAR(c) g_strBuf.addChar(c)
-#define ADD_STR(s) g_strBuf.addStr(s)
-#define GET_STR() g_strBuf.get()
-#define STR_POS() g_strBuf.getPos()
-#define STR_AT(i) g_strBuf.at(i)
-
-// Not this function is not reentrant due to the use of static buffer!
+// Note: this function is not reentrant due to the use of static buffer!
QCString removeRedundantWhiteSpace(const QCString &s)
{
static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
@@ -2099,7 +2091,6 @@ static QCString getFilterFromList(const char *name,const QStrList &filterList,bo
{
QCString fs = filterStr;
int i_equals=fs.find('=');
-
if (i_equals!=-1)
{
QCString filterPattern = fs.left(i_equals);
@@ -2141,7 +2132,7 @@ QCString getFileFilter(const char* name,bool isSourceCode)
{ // first look for source filter pattern list
filterName = getFilterFromList(name,filterSrcList,found);
}
- if (!found && !filterName.isEmpty())
+ if (!found && filterName.isEmpty())
{ // then look for filter pattern list
filterName = getFilterFromList(name,filterList,found);
}
@@ -2155,45 +2146,6 @@ QCString getFileFilter(const char* name,bool isSourceCode)
}
}
-#if 0
-QCString recodeString(const QCString &str,const char *fromEncoding,const char *toEncoding)
-{
- QCString inputEncoding = fromEncoding;
- QCString outputEncoding = toEncoding;
- if (inputEncoding.isEmpty() || outputEncoding.isEmpty() ||
- inputEncoding==outputEncoding) return str;
- int inputSize=str.length();
- int outputSize=inputSize*4+1;
- QCString output(outputSize);
- void *cd = portable_iconv_open(outputEncoding,inputEncoding);
- if (cd==(void *)(-1))
- {
- err("error: unsupported character conversion: '%s'->'%s'\n",
- inputEncoding.data(),outputEncoding.data());
- exit(1);
- }
- size_t iLeft=inputSize;
- size_t oLeft=outputSize;
- const char *inputPtr = str.data();
- char *outputPtr = output.data();
- if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
- {
- outputSize-=oLeft;
- output.resize(outputSize+1);
- output.at(outputSize)='\0';
- //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
- }
- else
- {
- err("error: failed to translate characters from %s to %s: %s\n",
- inputEncoding.data(),outputEncoding.data(),strerror(errno));
- exit(1);
- }
- portable_iconv_close(cd);
- return output;
-}
-#endif
-
QCString transcodeCharacterStringToUTF8(const QCString &input)
{
@@ -2343,22 +2295,6 @@ QCString dateToString(bool includeTime)
current.time().minute(),
current.time().second(),
includeTime);
-#if 0
- if (includeTime)
- {
- return convertToQCString(QDateTime::currentDateTime().toString());
- }
- else
- {
- const QDate &d=QDate::currentDate();
- QCString result;
- result.sprintf("%d %s %d",
- d.day(),
- convertToQCString(d.monthName(d.month())).data(),
- d.year());
- return result;
- }
-#endif
}
QCString yearToString()
@@ -4692,7 +4628,6 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
path=name.left(slashPos+1);
name=name.right(name.length()-slashPos-1);
}
- //printf("findFileDef path=`%s' name=`%s'\n",path.data(),name.data());
if (name.isEmpty()) goto exit;
if ((fn=(*fnDict)[name]))
{
@@ -4730,6 +4665,10 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
return lastMatch;
}
}
+ else
+ {
+ //printf("not found!\n");
+ }
exit:
g_findFileDefCache.insert(key,cachedResult);
return 0;
@@ -5981,215 +5920,21 @@ void addGroupListToTitle(OutputList &ol,Definition *d)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
- ol.lineBreak();
- ol.startSmall();
- ol.docify("[");
+ ol.writeString("<div class=\"ingroups\">");
GroupListIterator gli(*groups);
GroupDef *gd;
bool first=TRUE;
for (gli.toFirst();(gd=gli.current());++gli)
{
- if (!first) { ol.docify(","); ol.writeNonBreakableSpace(1); } else first=FALSE;
+ if (!first) { ol.writeString(" &#124; "); } else first=FALSE;
ol.writeObjectLink(gd->getReference(),
gd->getOutputFileBase(),0,gd->groupTitle());
}
- ol.docify("]");
- ol.endSmall();
+ ol.writeString("</div>");
ol.popGeneratorState();
}
}
-#if 0
-/*!
- * Function converts Latin1 character to latex string representing the same
- * character.
- */
-static void latin1ToLatex(QTextStream &t,unsigned char c)
-{
- switch (c)
- {
- // the Latin-1 characters
- case 161: t << "!`"; break;
- case 181: t << "$\\mu$"; break;
- case 191: t << "?`"; break;
- case 192: t << "\\`{A}"; break;
- case 193: t << "\\'{A}"; break;
- case 194: t << "\\^{A}"; break;
- case 195: t << "\\~{A}"; break;
- case 196: t << "\\\"{A}"; break;
- case 197: t << "\\AA{}"; break;
- case 198: t << "\\AE{}"; break;
- case 199: t << "\\c{C}"; break;
- case 200: t << "\\`{E}"; break;
- case 201: t << "\\'{E}"; break;
- case 202: t << "\\^{E}"; break;
- case 203: t << "\\\"{E}"; break;
- case 204: t << "\\`{I}"; break;
- case 205: t << "\\'{I}"; break;
- case 206: t << "\\^{I}"; break;
- case 207: t << "\\\"{I}"; break;
- case 208: t << "D "; break; // anyone know the real code?
- case 209: t << "\\~{N}"; break;
- case 210: t << "\\`{O}"; break;
- case 211: t << "\\'{O}"; break;
- case 212: t << "\\^{O}"; break;
- case 213: t << "\\~{O}"; break;
- case 214: t << "\\\"{O}"; break;
- case 215: t << "$\\times$"; break;
- case 216: t << "\\O"; break;
- case 217: t << "\\`{U}"; break;
- case 218: t << "\\'{U}"; break;
- case 219: t << "\\^{U}"; break;
- case 220: t << "\\\"{U}"; break;
- case 221: t << "\\'{Y}"; break;
- case 223: t << "\\ss{}"; break;
- case 224: t << "\\`{a}"; break;
- case 225: t << "\\'{a}"; break;
- case 226: t << "\\^{a}"; break;
- case 227: t << "\\~{a}"; break;
- case 228: t << "\\\"{a}"; break;
- case 229: t << "\\aa{}"; break;
- case 230: t << "\\ae{}"; break;
- case 231: t << "\\c{c}"; break;
- case 232: t << "\\`{e}"; break;
- case 233: t << "\\'{e}"; break;
- case 234: t << "\\^{e}"; break;
- case 235: t << "\\\"{e}"; break;
- case 236: t << "\\`{\\i}"; break;
- case 237: t << "\\'{\\i}"; break;
- case 238: t << "\\^{\\i}"; break;
- case 239: t << "\\\"{\\i}"; break;
- case 241: t << "\\~{n}"; break;
- case 242: t << "\\`{o}"; break;
- case 243: t << "\\'{o}"; break;
- case 244: t << "\\^{o}"; break;
- case 245: t << "\\~{o}"; break;
- case 246: t << "\\\"{o}"; break;
- case 248: t << "\\o{}"; break;
- case 249: t << "\\`{u}"; break;
- case 250: t << "\\'{u}"; break;
- case 251: t << "\\^{u}"; break;
- case 252: t << "\\\"{u}"; break;
- case 253: t << "\\'{y}"; break;
- case 255: t << "\\\"{y}"; break;
- default: t << (char)c;
- }
-}
-
-/*!
- * Function converts Latin2 character to latex string representing the same
- * character.
- */
-static void latin2ToLatex(QTextStream &t,unsigned char c)
-{
- switch (c)
- {
- case 0xA1: t << "\\k{A}"; break;
- case 0xA2: t << (char)c; break;
- case 0xA3: t << "\\L{}"; break;
- case 0xA4: t << (char)c; break;
- case 0xA5: t << (char)c; break;
- case 0xA6: t << "\\'{S}"; break;
- case 0xA7: t << (char)c; break;
- case 0xA8: t << (char)c; break;
- case 0xA9: t << "\\v{S}"; break;
- case 0xAA: t << "\\c{S}"; break;
- case 0xAB: t << "\\v{T}"; break;
- case 0xAC: t << "\\'{Z}"; break;
- case 0xAD: t << (char)c; break;
- case 0xAE: t << "\\v{Z}"; break;
- case 0xAF: t << "\\.{Z}"; break;
-
- case 0xB0: t << (char)c; break;
- case 0xB1: t << "\\k{a}"; break;
- case 0xB2: t << (char)c; break;
- case 0xB3: t << "\\l{}"; break;
- case 0xB4: t << (char)c; break;
- case 0xB5: t << (char)c; break;
- case 0xB6: t << "\\'{s}"; break;
- case 0xB7: t << (char)c; break;
- case 0xB8: t << (char)c; break;
- case 0xB9: t << "\\v{s}"; break;
- case 0xBA: t << "\\c{s}"; break;
- case 0xBB: t << "\\v{t}"; break;
- case 0xBC: t << "\\'{z}"; break;
- case 0xBD: t << (char)c; break;
- case 0xBE: t << "\\v{z}"; break;
- case 0xBF: t << "\\.{z}"; break;
-
- case 0xC0: t << "\\'{R}"; break;
- case 0xC1: t << "\\'{A}"; break;
- case 0xC2: t << "\\^{A}"; break;
- case 0xC3: t << "\\u{A}"; break;
- case 0xC4: t << "\\\"{A}"; break;
- case 0xC5: t << "\\'{L}"; break;
- case 0xC6: t << "\\'{C}"; break;
- case 0xC7: t << "\\c{C}"; break;
- case 0xC8: t << "\\v{C}"; break;
- case 0xC9: t << "\\'{E}"; break;
- case 0xCA: t << "\\k{E}"; break;
- case 0xCB: t << "\\\"{E}"; break;
- case 0xCC: t << "\\v{E}"; break;
- case 0xCD: t << "\\'{I}"; break;
- case 0xCE: t << "\\^{I}"; break;
- case 0xCF: t << "\\v{D}"; break;
-
- case 0xD0: t << "\\DJ "; break;
- case 0xD1: t << "\\'{N}"; break;
- case 0xD2: t << "\\v{N}"; break;
- case 0xD3: t << "\\'{O}"; break;
- case 0xD4: t << "\\^{O}"; break;
- case 0xD5: t << "\\H{O}"; break;
- case 0xD6: t << "\\\"{O}"; break;
- case 0xD7: t << (char)c; break;
- case 0xD8: t << "\\v{R}"; break;
- case 0xD9: t << (char)c; break;
- case 0xDA: t << "\\'{U}"; break;
- case 0xDB: t << "\\H{U}"; break;
- case 0xDC: t << "\\\"{U}"; break;
- case 0xDD: t << "\\'{Y}"; break;
- case 0xDE: t << "\\c{T}"; break;
- case 0xDF: t << "\\ss"; break;
-
- case 0xE0: t << "\\'{r}"; break;
- case 0xE1: t << "\\'{a}"; break;
- case 0xE2: t << "\\^{a}"; break;
- case 0xE3: t << (char)c; break;
- case 0xE4: t << "\\\"{a}"; break;
- case 0xE5: t << "\\'{l}"; break;
- case 0xE6: t << "\\'{c}"; break;
- case 0xE7: t << "\\c{c}"; break;
- case 0xE8: t << "\\v{c}"; break;
- case 0xE9: t << "\\'{e}"; break;
- case 0xEA: t << "\\k{e}"; break;
- case 0xEB: t << "\\\"{e}"; break;
- case 0xEC: t << "\\v{e}"; break;
- case 0xED: t << "\\'{\\i}"; break;
- case 0xEE: t << "\\^{\\i}"; break;
- case 0xEF: t << "\\v{d}"; break;
-
- case 0xF0: t << "\\dj "; break;
- case 0xF1: t << "\\'{n}"; break;
- case 0xF2: t << "\\v{n}"; break;
- case 0xF3: t << "\\'{o}"; break;
- case 0xF4: t << "\\^{o}"; break;
- case 0xF5: t << "\\H{o}"; break;
- case 0xF6: t << "\\\"{o}"; break;
- case 0xF7: t << (char)c; break;
- case 0xF8: t << "\\v{r}"; break;
- case 0xF9: t << (char)c; break;
- case 0xFA: t << "\\'{u}"; break;
- case 0xFB: t << "\\H{u}"; break;
- case 0xFC: t << "\\\"{u}"; break;
- case 0xFD: t << "\\'{y}"; break;
- case 0xFE: t << (char)c; break;
- case 0xFF: t << (char)c; break;
-
- default: t << (char)c;
- }
-}
-#endif
-
void filterLatexString(FTextStream &t,const char *str,
bool insideTabbing,bool insidePre,bool insideItem)
{
@@ -6519,6 +6264,7 @@ void initDefaultExtensionMapping()
updateLanguageMapping(".mm", "objective-c");
updateLanguageMapping(".py", "python");
updateLanguageMapping(".f", "fortran");
+ updateLanguageMapping(".for", "fortran");
updateLanguageMapping(".f90", "fortran");
updateLanguageMapping(".vhd", "vhdl");
updateLanguageMapping(".vhdl", "vhdl");
@@ -7137,3 +6883,72 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
return result;
}
+void writeColoredImgData(const char *dir,ColoredImgDataItem data[])
+{
+ static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
+ static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
+ static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
+ while (data->name)
+ {
+ QCString fileName;
+ fileName=(QCString)dir+"/"+data->name;
+ QFile f(fileName);
+ if (f.open(IO_WriteOnly))
+ {
+ ColoredImage img(data->width,data->height,data->content,data->alpha,
+ sat,hue,gamma);
+ img.save(fileName);
+ }
+ else
+ {
+ fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
+ }
+ Doxygen::indexList.addImageFile(data->name);
+ data++;
+ }
+}
+
+QCString replaceColorMarkers(const char *str)
+{
+ QCString result;
+ QCString s=str;
+ if (s.isEmpty()) return result;
+ static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
+ static const char hex[] = "0123456789ABCDEF";
+ static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
+ static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
+ static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
+ int i,l,sl=s.length(),p=0;
+ while ((i=re.match(s,p,&l))!=-1)
+ {
+ result+=s.mid(p,i-p);
+ QCString lumStr = s.mid(i+2,l-2);
+#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \
+ ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \
+ ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
+
+ double r,g,b;
+ int red,green,blue;
+ int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
+ ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
+ pow(level/255.0,gamma/100.0),&r,&g,&b);
+ red = (int)(r*255.0);
+ green = (int)(g*255.0);
+ blue = (int)(b*255.0);
+ char colStr[8];
+ colStr[0]='#';
+ colStr[1]=hex[red>>4];
+ colStr[2]=hex[red&0xf];
+ colStr[3]=hex[green>>4];
+ colStr[4]=hex[green&0xf];
+ colStr[5]=hex[blue>>4];
+ colStr[6]=hex[blue&0xf];
+ colStr[7]=0;
+ //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
+ result+=colStr;
+ p=i+l;
+ }
+ result+=s.right(sl-p);
+ return result;
+}
+
diff --git a/src/util.h b/src/util.h
index ed3750a..5720343 100644
--- a/src/util.h
+++ b/src/util.h
@@ -382,5 +382,17 @@ QCString externalLinkTarget();
QCString externalRef(const QCString &relPath,const QCString &ref,bool href);
int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos);
+struct ColoredImgDataItem
+{
+ const char *name;
+ unsigned short width;
+ unsigned short height;
+ unsigned char *content;
+ unsigned char *alpha;
+};
+
+void writeColoredImgData(const char *dir,ColoredImgDataItem data[]);
+QCString replaceColorMarkers(const char *str);
+
#endif
K2BpE fϊbdlY džFbLKUpuk _}9Hڵbȉ]>UzFӷ?DOvӝ Inbtnfo6nnh:pmp}WHwBbx9fA㮔>[CX[ݯ6n#ߊ8ν{^X << rh- H,qOS4<s</‹;Sh¿74/dWUaKw5_~^7Mx ކw]xCu(;7y,ډ??s)ʓOp~_ >\S*ϔ|%|klۆ7>i<;-ǜ"7Hm~b+ ~?O _ Hq7q삛fawn=n[V5>0 ac b,CnS9 JBnS5V@ z^OeuXm4^~^#j(C$>'#n2G&lvy1Fp,6-8[Jnv8 'Tp*s N؝t'3p&qG9spG w]pW w=q9\lŹ̯dXBfVr"g5~?PょNFx <4[xx$r~LJp&)E,vTY1>$\1+ ;Tҧ%75YgH;{)!<ד401f<%oi\<7>y}W)ԹD5<5uUplu.Պs/ZX+qeO1 ZV۴G<!| މGqgF;O]s,dF;aA>OQizWiEz[6O{ė3p|nѺatɏ'3VoM $#ZN{+q *ڐ m}?K8.3OO5:o½NXoۘۘ:ʌX2H;.k}?ď]X{>1?óK* V5~2+gv|]S_>Z7d2x}? R%2ѺH7]kLmK{M͆/IΜuCh|@M:b㒉&3=\>'MW~*sI@;/h|foxـ&?gCZ_lD7$JǍi*lb)߅v ¯b7fԹ>KDTWڕI}qӾOMEFQ(i-nsHwK436ϐx1' "ʞQ݂nI[ތXCsiڗr#1{q]q ħ}욅`{kNU_!͌Xzk!>EQ(a3#o f ~(唷v<-ckЂ),\4մ BI(r2r}MkWBVm6E.L@ji]#U2`@Сtm:Mc(/;N+74i-iPF( pb ~%Ǵ\*˟8c>C&Q{S/3֐ tOG*f~DZs"݆n^Q%3x-Fpj LZ/j@Lg6&?': _i!Htv`lCf1{W"}jwǵ%dm)Mos莴`5|tsɎb5SőZ6;ѝ.tWtS/{rWY{t,Y:Ξ]>{!Xtv;̥Yڿ;sLE+7qǾ>xatqwb'XoO;,mGX_Hm.M s=!1zvV:-nu$Ry$^:ܶG[I?voEJo== m2Y-*O@z=BιYU :}ed`$Z:5>Vr\jt &&nfcDY%5DKJtJ#+0*>f}.#g{yk-ܮsww>sZF^+i#nϹu{č>+5#]?*G7FGB sVH,5`%r6k:l!j-4-EYI``cJq%q|$(Y&^\311iuMa);r1Vr]KImǍs#G,k&X`_G aj 0l0(*Y&@/#AYSu(fW-F%12 2ߤc&}p]V&n Zk5̠@٣1hGnիy,}[:}Vt9(hGFy;lU (WeQ Ρn4|Cr9] 5cf?ja_Oe 'P'[c67N6J`+ *Q~g(}kAnv 5(}ʙa_|Lu бmXjnH!ʙz ask/~Ϊ?T.CB_Ob+0UOJz=Qעi,)k7FUl{; ⛴=lFXfޙ,̎v;՟jǁm}f3,6ݟni4`Nl?Œb[&oN'ZrOOYl??-Xl?!q&bնl9aꓷrQSr; z$'GUvrW`8uU$7[= ߺ-&s=K{ A.Kf~OF?> H}w?P:`FT˽s~ފYY-o&{mP1 _}"OQ *hԼ|LDߣ绺dJ_L_Ms1Ƿx wQ¬чa4X ƅu#S3Ƿu [ -+:l]NĦQ8ki:ɭ6Fh)To6{`o,AIyK,M ,O+rMY)í2Wr{YrIR1 漎E}P㪥b>%)cƴfZ^MYi)E콌RԌO[1Ia#,WMYyl;/)#l:(2`J fN"BE?!"PCb(BE_䆱._ƪe{/ȡ9& ĒH0.;kQh9?CZ\ɒL˼tT~q tk }soN $Nf˙C}#F9ss] ~kT%uPhaya*}*ӈ2:`Q{h҇.muy꜆}] JWb̪y:9UkB ?6m:(j& !Xf-D|-ԡ0K,K" V&X+#R%l9hM{DЃgw|vu׎b3``?L46B#kh mːSὛ7lfsWj`1yHf J,;kk <'O %Y\F, ,Qiڇ4#X`E5LV'] 86m1t8f`{DHϳK<`GrmY{.%K)kEmSϱ5O| F9a,K" V&X+#7b&9`+`ela?V\ 0;O9)eavr!{``Q=N',m}u7{`}{`q=aHSD>&س[F`~Ox`l#J=O%`l`MMw%`l`MMwLA_}jd9_/,vr9O-6Ҳ_F6n޸f|38w9f?Uo!o!Jf ϕٯ3u^᰿V30Uq+踵񜘛ϓa3ܳl1a&l߮OB6zil>u;ú'Qst#g9輷_i[aŚM`9g4gR[|ghV?w f VMgq>z'fe,>>,$ [ %G/ZD>l9ȹ0뙒}VDCE9kbxCż.IgKKM,ӬHf JIga@L%28H9t6k-Zvj׎CCI`Ok!רɕ9eU9{"co l8Vpv&訞Bc##$Te_6'D$Z٬`*[kV*ls55#HXhf~DM7A߄~uBP7JpW _ A%)؅`1yHf Jch\h!Yko1ʈv3:b%smfSGUQлi`+[fYPKd3 ⼭ ǀ$Ҭ:,F0`Y{d#"98+C0 rc˽`-Ă38,Fif^˼{cv2 " ,K" V&X+#m-`a7,v~rz UN<]wE}Wp] iʟ?&rǂ>3a? dN d.pTl dLm'05bӥ~6ﳄ(вm|;k{.M 1}}ظʏ? ~ 4'?~?i_E_ KB?9n&Mr&J+ f_-o k  { `vemw;Nv{^w+;^mG;Ѯhw'jЫ!Zѡpԋcmv:c]ڭz_o&Ub1!4Xx[ܖz=ޡ4w{ޝW:0-aR_}Dw'ћK'*C~Ȋ2v%IU>׏#ٙJv'{*dRm 9Nz^kڽ7 yÞ*RTg+՝IRJj 5Nyr-M#ݙJ7tw{ҽtH_^FվL6umtd:յ+ӝQ෾ڟٽ|V2p˖mlGv.]Ʈ]7݊7$՗V١p˕sm\G3ו@\ ᜗/yUA.]|O7ߗχUp+ mBGU.z }B0P* bVl/v;]bOW/VFܟkUi*cxjFܮ\ʸJO͈v{W۸w/GHE[y,rFfZ>:Mfml;Pwj5x ;NOd(6Vv.p>aJv5e؍&v3aNv[{A=AbgR`j^fثlٻl}>mKq(OG2$>OZv:?#X~d~*? ~B]ů'|>__!)4/yȭ+|ow1o_8R".<y$EI;.VN~ &ɢMLq8B%ljĉ1K!q8_\(KU+Z1W-7͢G"nw;]nq_<("yL,KDxF, JkċeA*6bP+ć&ʄLɬ,Qr,K8 a$ȩr("^\$/r\%WkZ|Yn׉ސۊooHHgrXdڄEcNRݧVtrJ(N+ĝh9ӜAbs\sprqsNSYΙN'ܟ\q.u.wtvu:vfvΝZ.n^~$_ Kg} f K~gYrV ]AIHmJà3ٶt{FQm3nvlzdw)l˶[w !%z ("6D, ]DDT#"#].(*{NQΙ)&1说-mࠐ?#p[:*(鄠ٚ9/<2qV褭^PYmGo^u^jզZ;Α+oP; c+yժZUacȄɿ;yӁ,ߞ(1J=4]âA/+AKZ&hmкA6"MA=hg> 8@С#AǂN :A.],jA_}]~ 9藠[AZRj:TPGcq?W¿8Vj:ENWYjڥV{~u:WLnWQSwPwRwQwSPTVUS E!a(uzzzzzz,y'OS/R~Ezzz M-Gէԟϫ/?SJgj1Xl NN 6[Ӄ3`op vpMn!spໂ{\<0xp#˃G <%?Hǃ?l_^|1_|- 4JZ5HM&^cԘ4)4Mc׸4_SKS5u5 45M5yV6N^B MfTSԌLLLܫOalc'4 4hj^мYYYYy]^{54;5{4ikijNhNkj.h.kh|NGM-Bhu0m6ZM&k-Tm6Kfk}mm}m#mVZj[ki;jhk{jhihCô%Q x$TtL*vQ\<퓔~ZvE+W+koh7hnnn~====D{^{IsWo׵7?kՊ!V_h!$*$6$!$kHzHf# 6Ph4 i"$?mH!B rwHA!CCF )26dBȤ!/Y! y"dA3! C^y)dIȲ!kB^YV;!-dgȞB 9r"tِ !C|uw!߇r3VBt0].ZK%,T].Ke|:<ruu-tN^8_W+ ӕFuutuStfX_={X7[ ={NHݫUtto6mֽۦ۩M>:;;;;Lwy_}^wCWW+D%Ko;"ߴz>7G#yN>ʨ7U{X㟩w>q57777׷зҷַշwwwwߥ[_?@?P?H?D?T?\_e hXѪ|xt};K?[8 g /_//C **u7oQm&Pۀ.`~~~?AaQqIi's KH\kk^C ՄC ѡIдPg'Z'Ah桭Bۅv -ghоB B C ZZ::tBЩC } ЇC/F;yЧCXT^$e_Ez,ouZև=y<6vm%v!ֱ/@c'sC?j藔&?*)a0}XxXdXLX|1%SReGlaYa0WXv7V;^Xð&aZ凵 9[]a} 6<$|dxYxE'O~O30|V#?DO?\/rW× _ZoV%m;wyq\v/?~9_Mw1_o!ltPC!e1 FClH1 6Cap ^ߐcmkohhhl543Z m  ] = = } BCa00Pje(7T&&f3<`xQcy ^2bXjXfXaXeXcXkXgXo`hxǰɰaaaaCG  G ' g g  0|eÏ neDPDp6BaH0GDFG""o?"'vD݈ #GF4ȋh&]DN]"E;oDˆ"FDF(1.bBĤ)"G̈/⁈"x4o|ȄX< E+ `5xMml1##N~q6K>"Þ^Ǒ' BF I9R^52H;  [/m~M(,Ed~d[~Cdgn="{F/ 0(rpdq"#+#D9)rJ3"| ȇ#X "|6raő/E4rYUk"F\!rc;"7G5r{ݑF~qCG"E<y&lȋ#?EWD~y=#%V FB£qDDEEDE%DQ)QQQ(G+U7aTnT^T~TNQݢzF**UU5.jr5?ꙨEQ/G-Z&~QE:u"LQW.ꇨnE)uQqhstj-폮]?qtm:Dw3OtECED=>zR{}ѳ=7'~*/D$zY5ѯG~+ߏ'cz0p'OG}.BODeF_>FO7b1u&&$FcII1Xb1i111g; Ԋ qLӘV1mbt#WLߘ11bcǔƔTƌ39枘1<3''cy&湘c^y1%1,Y:浘cވy3歘cލy/fK1bv7f_1c9s:擘s1b.|s%/c6Z c~bbaI)YX_lcƶm1KlbƎ;!vJbg΍tű/.]*vmwb7n/@ؓgc/^&Z؛B*NgKˊsyj5k*]\q+744,nlĸ)q͈?G=7?^{9ոqŽVܻq[?pSq]w%o݈981^LJGM)xW'_+n|[Ʒ9[]/?8~hQc'O7<~~ ǿ"oſ^w(~'Oǟ9JW_KJNIM0$D%&$$$%R2\ ބ@B݄ M%HOh)kB^ }'& J(N02"alĄ &ܟ0+av O&<|‹ K'Nx=̈́K λHؕ'ao¾ 'M8p2t' .$\J4J _&|mµn$p3!QJT'jCaĤDS%њhOt&=@b:$6Jl4ybV&O9kbĻ{%I;ā$MX82,"qt''NM'ę'>8+ىsO|"ħI|._L|9qI⫉W&N|-7L|+wKܒA$Mܗ?`ģO&N$\K&^I<įM}ğo&(FQmCzc`4FcDcd4c1h7:n3u MM͍-m]ݍw{67042157GˌƱƉƩ{g7>he|88 Ƨ3>o|eƕ׌0i|]{-ی;{{GǍ'{ԧ+ύ_6~kfxoq!I$)U:IB)}RX!)2):)6)>)1))ɔdI&%e$e&ٓI$O/)T+NRI$5Mj"UR뤶I:&uN=鮤^I}N4 i`Ҡ!IC'$L*KH46i|ĤISj=I&L?YI$NxIO&=LsI'bIK^MZ2iukI'f[Io'^Җ%Hڕ'ioҾI'M:t2t'I.$]J4JI_&}mҵn$t3$!YJV'kCaɆdS%ٚlOv&=ɾ@r:$7Jn,Er~rv;'wK+W?yI< (8yD? {"4 ɗ$uw'|3VhRL&Ig 5"LQS)d4%̦S)d3e&)5M9ڦƦ\S3S)T`*4ML#LQrSiiiiiiii>L51=fgoZ`ziii%+eU5u wLLM,ojnimc!1 )YyEeg/L_1]3`I0+j֬7#1xl26sav>s9<\dbf.12WǘǛ'g02?jkg~9"W̯WWך0o0mdbjamk||||3ߚo6j-*K%j1X,KlZ-mZږz&f|K;K'K7KOK_Keeeee2222re~CG,s,[[\|jjO_,B2EMѧDĤħSL)))i){+œOR7AJ㔦)y)RڤO5GJ)S S O)M)KL2!erʴ{SKy0)< 噔)/$eYʔ5)Oy+坔ROٖ3eOG)SM9r:lʅ)WRH:廔S~Lr+Ea j:k5gM&[-Tk5f[}kk}k#ku::ZbeNNNδ>`e}::isEX_a`}ۺɺźպúۺy%gϭ_Y'VE:5$5,525651ՔjMHS}R6Jm"ujΩS{ޝ: uPԒԲѩS'ޓ:3GR>Ts/jRH}+-RwMݟz8xsR~J}H>_Si괐ȴش4S5-#͞NJ(iZi:uOvwڀAiCJFOvO̴IDSiϥrګi+^K{#wӶmKϯoO;v2lڥi_]O1M''-t{/6w'ݗH^'^zFMқ7Oo*uz;wMNޕ+OL>$}h^^>:}lӧߓ~oLH'ӟJϥ/JWWWN_F7oIߚ#}WL?~4x韤K~)+韧uҿOS_Ӆ E*Cge2"33b3332L kFZFFFf=Ùd22dh(IFӌ-2Zeh>cF献3'2f 14cxFIȌc3gL̘15㞌{3ffܟ`ƬG2fgx<㉌'3x&㹌3^x1%f,X:㵌uoflx7cs3WHƞ2g8q4xɌd˸q)ӌ+g|uƷ2ϸS͌_3¦m[Mo lh[-ޖhKlՖf˰e6m|.[/[ݶA!H[666666v^Lmlf=a{sm/^l[b{նܶҶu7mo޶k{϶mmmmmmm9%ۧ+m_ھ}kfvWTe35!̰LCfdftflf|fbfR)ӒiL̴g:3ݙL_f Vfz 2e6l;́2Pzh^vdfYfE̱3'"or{2͜y惙Lo9'̧3|)ƺ* fp?(2d>>>>>>>~CϳϷ/?m־оȾR2 *Z:zF;Mf4?A1 )YyE/?_a;u?߲#:tPG#q9FG-#őH9ˑ uHkqvuw4t4F^#ґhh(p:ŎaR(G11111111qC:8ssw,pr|888888888q+7?8~tq!: gS9Cg3LpN3řLwڜYNvz~g3̙lwqsvpvrvqvsptvus8 Eb0gsY!Gs99;8v>\\\|ssssssssss&fέΝ9?vprqsprquw^t^v~w?:v]JW+إu\pW+s%dٕJul,re.+UUUؕjstڸڹ::zzz \"`Wkk5UtqsMpMrMqMsMwpzaף9\\] \Ou-t-r-vzŵԵ̵µʵƵֵε޵kk}VvNnׇ\NNθκλ..u+7\]?~tu% w[ֹCw;Npn;ŝNwYnv{~w;̝nwqswpwrwqwsptvus Eb0w{]!Gs܏v?^^^~{{{{{{{{{{&f?vprqsprquw_t_vw?vAl]vhvxvDvTvLv\vB1;9ۜmvdug7n,;/ev~vv;ew#gv gg]=*<2{L ٓdO˞=#~89ُe˞ gf/^R+Ke^&{m7f){s[gޝaGg>}$XSgfϾ}9_dMw׳1_oe'ztPO'y}Qcyާxzy{_]]]]]]]}m[[۽z?~========{+7k7?yoz >OS43"}ѾX_/ї3R|tg9}n||u|| ||M||y|__;__'__7__O_o___?_W+*|c||||S||}3|={77߷YB |K|VV66mm};;;;;;;;w+߷k|?n~ ~?p?'dٟOm,{~-}#?_/GS3?_y /WWݿӿ3_ (A6  @t 6H $LKH d2; 9ځF@@^UM]CSK[Ggwo_ P( FJс񁉁Ɂi{3 <x,0/0? tKWV^x3V큝݁}#cS3sˁW_|!cf׀Qs49!9999Q919q9 9I9[NV#Ǖ?)E`PXR+RA觔4o+!ߋR!B[}`?EE.}[.J1 $! 5<#<#|ϧ|ϧTO:ځvx>FGnt:Z,[!<ȳ<ȧ)))t|SIG+h%q3GE=QVV$I"ii`mNv ~=IM'7ɞ7@ 6(ٖTj06d>dR"2ϫd׋\֥K`vƎNV@+٭s6%{_=)&#H3G9Ed(l>ͧb(l)%ۙrv2(l7ʩ$EȠ5A2%(JCZ)Jadϫ`nl=8 gB+'Ӏ1,Mw)5ݡɆ$$C=r`,0O! IQܠ`yPOT,!;k<. Kdŏj(5zl%rݩd׀7Oio-:`1bTYVkSN$OGSUj!C9'둮CGg XʩE@õz"Q9F6l-qdkWEi ifMdgd]dۑMRȦRN3#ͬrZumkP.jf¶"kSwm mmEv;ְX乙~ZDl XqdȦu&].#oþ@vY_HDl,8Idd[mDl\mwaF9-XC۸=Lv .i(umX.LA.fP|첰d)E]h-NdMI:Qed+`_ nZң1* Ed_&l-6hœQd1`Z:d##ۀl#6Պĺ<Q+@-ht.uw݀{G>uZq"'z}HFEtz2qH+J R kׁmveX,:'>!'>Z E=/@0(fnvF{ςG3G#2*=t`A ƣ9\M٦tW@J:4~lsH9y$ۜ<mNwd .F;"l$@Kk\ttf6SYd[P3Z &ۊrmE=B= !ۊz2?oI3OF6dqJ:4m)g8Z&֓dEvT#ȶFmO9%dSN vfv!um)ȶ#ۑ4dJ-PYDV S(nT,B=Gv -tQfy" VBԒ֒VʪlRD6Z)"zu. ]yԫ &/;ZL6Z)&ہl)ZV=H\#{^>JV>$OXDy")b*TZ{$%*m5UTjբ$$J:֏@k@ JZג֒Vfv VvhXJdHZ$ݔ4skSKVCZԒ]G@d Av#x:@6&g(BGSZh Y Bv>'L"IYd33@9Q80ɯ#,BBl^`)\ّ a`e!_sBu:f;UφKťJ.nE^SWBd=`蛸/ ~ )W+܅c@UO |*}Y:s0pfks8tW3-7 .'JfTw3,.$<'Rq'2!#J6֠pXVYmu#Ŭ**_3yd[m(0[@ӈ@)"[FhcȎ';=dI>/]Bv)ed'Dvٹd_#d1+j~9dkMٺte=99s-ε9,e <8rȹ ΃9\y(ass)瑜Gq.\ιs%ќpy` 4́<h6@[t:.@W'g\4bOP @0 0`80(J( (YFlkFU]; X U2WS:]aqB(7@-1b b0 xX|\iG AL@xt7]< @q*pc@k/ew+g@Ph`@ " F b6v@p a# m@K'X[nNVK@|%d!`.0zA6_'sw@qM]b<ODZS b'A@j@$+wM@A4f(fb|@qO ~@x ֞e[݀ H`- xQX̙ | 5$=l>:7wb`7 >i'3 `9)x8?|@pXbl>>~~pD> < <в{ BtVpVrYYY9s8gΑӖQZ)UPRWjVjVa*ZUD-a*W(Xj))e1j/,Z'K8Ocx/OvX3ɟK?#$sF$ʟ$^4ˏY<b]yGz"+$(OKGO6@6l-!>1ӆUEW \%4JhpuʠAW \4*hli JAddjɆ 'k AM;>BШETP),D5o0p_pn pO`5xәO@>hF 2h"zgx\ϧ=,;w$u=wЈ W8LWW#~x&Ώֈ"O"^^ll4OS)@9P Pa Ovufdds"[luW{9y'\YO'`EX "2xXVk:`=l6ۀ.`7 |Gi p8\.WW7p =7q/eg<=/x•/Uٍyg)Tx*x2 \*m  O-|;<=ንHD8Z(V'1/2QW3}qJjG=$A}^#ԢZ{!<׀Y.⛞SXUT:;H"G1k=vz؝UgP+UYϳl-XyAZs,}y\貲W0pUAZ=WaS>F֊A6d f}ddds"[lu^>~9kq͹g>|>"t pEH6W`ok.C]#B:>G}Z3E݆ נY]a6WهKh#~%dV2;0mȶdVY UPC  T`Vx&H܎sK]%FVفdFFBh# %VHa=ȧHziXU8m*EU#e3|;VV+*\Q,|!ێڨN1Ύ*K@+f\J#2\5OxHu:H0%f"v2' Cd됭,{9898pŹ6:|>|>|>S}8?ع#fAQq(ڋ.B z"( bhQ1Eŷ⣳Eh!FrQlx(Eo=L](kzN;ū Q( Gu[yeDq}'Y?(Ц.OTQT>Wc,EiQYQ5V'cH♻''d1'Gq%F='bߏ!Qh_^]roQ쏸"N#+1Ng [gpQ[$V>ߍ~cD1q}X~T߯=_((_ A{[)G0']E<V+eGVC̟^in: :ST%T n( -E<2%ykxǡ;hwȖqD}1 J}D\.` ?vbISX-F`.$b s$[>1(3ƘE\EbD'cߏqQsw@.Zy2`wq2~^ccj8 y&|Po8_jE̡C05>$>Isf1xFb森hS?-Dq.b.ZXЏ`e~3ʿ~Gۢv!c}ׁ^X9څ6@GwQ;K$:/WM ׅqnĜ]Fڱ>]:aϢ-5m."n%!#@9`5q$"^VˁX9F_>  vӀ&HkY<(X@|#֎yߺ\744-ģ>Ɯ8S1Oq8NW *> 7ezjaMo~Lv?d=D0٣d=NٓdOY^ {e&sڄ :,R`qxZd'#=HOEz*Sx#=HOAz S8!=qHHHHHߋHߋHOGz:ӑLg"=H߇}H߇}H?YYG~$xxx)x)/EHBzҫ^Z"HAz k^[Hވ߈{H ތߌHH~WW _vwwwww}q>8_PjL"}t+ҭHo'6H >Ҩ,ɧ|A[aރl/lkL:IG3nyd2;N>v򱓏||;(I"i7i7uSrVC99kO-ʩE>(6&]l]KzsI.Րɲ>7M))7f4ͨfӌjhnN6l>Yߜɧ9OOO ӂ|ZO iA>-ɧ%巤ߚ[ST5&QgViڪ;ܞs9w?[^>yd[uZ#ۂl>Yc';N>v򱓏| 8A>sI7%ݔt3:|i4_j/5͎fGMFmdY~ jۂ OS4ZgklMɳ5yTYɬlٖt4fL:IGtNGtNGtAIG]"&&''O?ɡʩE(עڔSt]KzsIg.ͥӔt3iF9ȇ͑HE瑊#G*)fxhͣyt巠߂R-hKiYSљ3EEgٖ |E>",~~l\A4 E*zD-I-*9Ǹg:|O5]ɶ+g>Y]]ʜO5]ɶ+m>tu'+$"&GKmyM6uI%]t=~~..NNnn9sH"]$"&GKmy{=@gGK-iK$"9uue9gjѦnh0RsyJv:)]ynyvtU89||~[j˷qho >ּ|k>>vhMYUni'O;yN9<^ε,o[*ojf2*i dC1ozT݊=3+ yG)E"Ty[jol=uSЉG'*z18 âӁh 'H $ 1B€p7 b#'T! CD7>Ph і0! }C7Hp F@CM`EhmҲVfۑmOIw ݁tGIw"݉tgҝ *S Ntp82)+i<'b&8D: ,lGvH;v @@"4`X@b6Xy~xE??H @:t9H t-k!] ZHF6ҵt ]:HE.ut=!]zH"t.ҹH7E)Mnt3! fHPA@sPA@g@bKqg``|VO"e@g1+=[IN%N:M:ՋV Hҁ dYpNlx@P @!h 4r@39Z|5h @'3 t=@/7  # ʀrFc8`<0L&3̬P\Bq u'בPg[`x xX . U`X`# |lvC`/8N3'Yp| |\__ P ?rZ@mP F@c 4́<h6@[t:.@Wz>@_n(^u1X ,`C)`.ۀ`'@;_o?y'S]@P  Da{QMZOb{EGQ,(7\@TwZz+0Ӊ&(FÔ9zvwH);nc]Ū4;A]DQEz9f/LQ'8r(B)<#Wc! (v {9{ˀ hw^]B^`]"腓-R?ꞢX=% (߬/SJ0`"p8d_wcͰAuDEQb"FZ}zŐsw3nEuۑobw=Z op=8L/bR]z#W " DmN*׀Ui*D  ۚza!⋜!: XV,'cwQ`#ucV*P_zcXϹXa(>SEXeS.Ym| 93CcE##Hb=Ӧ`P:1TaWP0D 9e܍tl-N1ʶ.*:}e6 ǼX#7X`mŒ. }q>#RQ;Rz#F~=Q=k@?< x c=g_I+Tt=.]tQћ>SBy; vst8wBsa}%U8yo_?rN##.S~(sX6΁\ 8ޖ~| wEŀ?yX~(<:\B'0︿gyMKZhUL=qRz!Ij: r+W`oQ1~gp/ETϲ^x-SA ;as8a_iۗ;OfxgrV!_Nw(>5J^rO߯_wM 0ŭ[RewFuV:H[%/5Qu{-3TUgTT_ZA $t7aʋPcm1h^uGǰoֶV?]ۻQAm֝} =;JO~&פ {BCbaM8&z ߚ O"SX\(~KoJGa04NδD¼ExٴKxtPo:) Mׄ&)FS[xҴH t: ].B/p?%ƉYPτuXB&xMÅzDhN)t3 rX)YYE/3[M[mMq,kHpc mMG_œK%m2}%dc?6]ڙněQJ*d,f2334Dk*aFcFO`F?Ō~_9_rAB,KGK*(+)W(+W*7(W)7)(*?TTURV}t2JT%*fUY ¬1hj f5 YMìcVUf5Y66Ĭ6ǬaVbVaVbVaVbVbV01#0{1}.jJHZ AxX!F8w ף`!B:fKaٻ& }1k?c*qq0iiiM6vQӇc$}oLA83u]usǙXKoR:bq0 kGUæs2VB|ss ,KW&'Z0H`Av-8qExa,04V9T슓!px]p)axUBP|"gE£Vxspù58?ƹ~:JU}s+U-SSmS]S/SSoS_% Dۣq>)֌pdR$cOj-~b6bTU͸$0G10GTT[ГݪMo`֛A05BB)O[&b5cE= 4UVt*pUj!4%<}KPЉH fj!jg*jT.*a1}CGMㅉb/qXd/2MSħMLCLbS-B+!0I{ѣYXUa`ì5P!7U 7g-nt0 ǛL _|8*ժ`Aߓ8iʤ8*sb 1?g:Fˈ76U]CuOT'T>S]Ucd/`¨v {M݄K8c#1Ge)KplrgR)L935)kqƙrg8S0VĪsT#<H#VHNXqTշwt55{ +Ĥ@6§b[!XX!O Q\]&bUmھaV ġ03qׂVh}DX!'qk1\׏/Ź0vγX3K΂AMf绢HbOIQ*[bѪJ{dJd$JƲ1J_DE(S sqWV(^oނ3у{}fqo6%P2 %dys=QC1jQCjHA ^Ԑ.N¼v-'0R#R):wBH(Ny*en)LٗaRMQZUVUkYTk5ݚam`͵66Y[Z[Y#ց֑"(kZnNNNN~bd=kzuuu~}ss/X[XWXZWZYWY_^^nܺ5YX"l~zVaKX/OFx2 ÓQ82$dÓOBx'xj'x'x'Ax'<#<17ƹ6γ=8n+_7T~^E/Gߙ*hyt<݋'L>~ҧ<ߝ~5 ahBHT˚Iݣ͒g2!pȩUNznqRQcAh۴Ys<-Zo/oq5[wmб9ycd%&%~7q}wUH˩S/Roޟ|$Um5Y5yٸK&[e1)qԷm?VO:-oo7T~(ϻZyJu)jh ,H.2ǚrUu*UJ!!! (%ԝPdd|e y]M1H6%);o=p P}jXv*VURnUJV[h(Bܱ]r;M:@m;6N VNdp6!\cp[ UUɅpgxͱ`?i o򥲒:^Sj<sbBu!ڻ-3o-*JUY,)mEK~HP?ݢ/T DRԫ?݄*[KY׏?bwB$lԝQNBp<ۤM^3϶?_٤ϟ +h7?-7ZYtuoEA-̤_&˿?߿[Sko)q-0(1R3?8{?úc¿^?Փ;kh S36 g`>*ܵ),-+^+ʊK G4jhX22,L7 e -eE+ 4J /*qmkx.TzeYrW(*(./gٖr'~K+auV'UfZ R뻪5VtB!Wh*D 1B3Xx.ViC-B!L  p =%ph4~=$\*Qo0H XX G?aEe%E]PV\PRA3&ʋʺYTU>kڂv.e"Sĭ ʇ@TWtȂz TaIh,VR:RQjrKrVh$P jҚ\bt"KƖ\c-F r ʄ꼂 XWc @i`aDeyQ%Y[Ëa*@c%JYT `"8 @p8: *P<^Xg 8 f,[s\[\o.qSwq n*{Ϲ\|>k?z?->\p\np} O\~$pS/\_3@9vĪ VrN `5`-!`zp(ap #Q\GcqN:l: ̵ lN N: uu&8k; .i[%;œ뇠gqG~řfqz\?Ŗ'X ='ϰg˸^Ћ \~S+KxRz_bWAkנz-g ׳8p77pxz;x';dzx׻eC^?c~r}|#\$קg|s\__2ן? *ןKW\ *z w<[y\ \_k\7c\A\\kZC:P\\Gp :u"u8k̵:私ӹ۸gqm;v]\\{^}`?y g=Jy\?^U\\? ljKs5<.5q\ \I\/)[\? 3ʚggp]7q<=7s>/?%V_ovwpW^jSYd1X>AYd};,#Ht\4 ןr}| \__Sg\__s\ e,pM65>uDp'\+]f/u:܍k5;\kwq:܋k7zpC}u8H(hppױZ\ǁksu.׉z\N7:ܐkfpc-&\sr nu9<3-[r nu8k;5p\vs up\q= >'\"חWW_k7\ k\5{mW?\U\ےVր\u\\ù pr:\u- ks]x׭nu[Dہ'q<)\wOxםp<{uwLyMX3&)_VrqskփCsmGp :u,8xp׉`#IdM`3p Vp*it363Y\`np6kuu-pmr]\\77 8f\7qܒV|[p܎\ww3 ]ݸ]\/wq\p!E\za\\H(\W+ X8ǃ'p=<)\OOtz&>?~Gr=<Ǹ~<'C/=Yχ4dBH/`)s],σqx1/_e+\//U2Wp5\^u\^ \w~~[Nwws!{q1>>aq}|S\Yρs}|K\ +\/_q55u \k0fIk"!`:k=Xu(80pp0` \Q\'Np pNrrqsgp q].u=`? snucpm[p5)m͸n nu;p QtwHu;M{Bwe{p܍~\\P p%A\s=֛i$}7IO&{iIz7s3Zo֛e?$e?"QYiJzCIϥu(hJqZGPO:|Z~RVYOZV3"_I@+4~W/Je_IB+%UV2YeտRV*YAzlSүQ%7%kvM|n`\EuJz#xo\s-E%V(_vّerwQ zf|?`aR[Gx>K9\Y'g5Km]>,)'gU?_[Dgff?Ӗ/ 豼I\ߔտĂ+H\%j N?;-"KafҦP6Su t ױu !z$Oŵ1Yڒd:Y-):GNIaύEԞ=g<Iip g>Nyw/p|=K\^\Q~vg̭}JRa4~{Ig$~$}aI -ܙ#s /܇~IϢ%=)%sN)5cTNKeJeTV˩_'i?~#TVoR Cz##鷩IC~&Y{/]-6Sktgׄ0b;R~vKqIc'>N~骳t8BH#IKW~vݓ{>#Z$͝HZ+HKWb%aGT\#A?:+G-Q?J?&-D3S؟$8ʗ~*r YMN7: ܜtp\-: ϵܚk Np[]v\wȵ܉k3~p\瀻q] ܝ\u]pO{q^(R)Ut(~u0tZ]uB:>w롫kU0Ráxt:ݤ( +u,r=x@YjV[:Օŭ,neqk [CYX&Tf5-Oŭ,nŭ,nmeqk'Y܊eq*0Y܆6BYJeq)(Ydq+ŭBJYF6Fm,ndq($Y&6EMYܞj,V/bl/ƾT6Wec\&rWƵJ6ղq5ٸl\d'Dz_61CpX6#pTbr\pRNbuZ3X}"Yz8'yY.vQK]SY>Mu&nAj|&VC5UȡXIءPML"$PML$PMLb!PM!PMx&IjPG6חl eco${C5k#W84š,-dco-cN61vlec!cɡT6ޑ񎒍L6C5El앲}lcec'[eq [ek`ҡb,VSd*4Yj,Vb5Py,ndq{AŲ(K,+-m,nL岸m,ndq[-Y^m,nN7dq[/ۛm,ndq;,Y܎vL㲸,ndq;-Y>,ndq;/Y.vI˲}*g],n,n5q[ᚸM&nkv&nkf8\5q<\5q>\5q=\5q?\5qK<\7ᚸ%[ᚸ|&n5qK9\5ŭ,neqk"[,nMeqk&[sYdqk![KYZ/[kYVvŭ,neq$[gYܺUnm,neV![,neq#XY6^ Mm,neq"TYܦv,neqW͔>YYܖ@W}W~v U߮zg{%t;۫] ]k} Ul]:w߀zg{=tr߄zgxݷ]UN]Uooz=誟WyN],ndq,ۧ}&Yܮ,n_,n_,n,nڽ&uYܾYn,n?zΤ#5qK>R7ӑr&n)Gjf=R#5O;R#5q8R7ۑe[ُ֑q&n#5qsuƘ}&n#5qHMGj8R:Cdq)[/YzG-[?YV Y eq([,ndq,kwlŲ m,neq![,nduΖm,nseq{Leq'͗IY,nO,n,n eq{^Ev_q,n/,n/,nKdq(3%-Öɾ~Cᮆ@G- h4u@&Xx 0z@e>>.'=r@֧zw^;ӍfYTXQ4RT2R:ҭs[:IKyᐢh vߴX4ݧ'L$tJX]e7Nݷ&~u?W'ZLϾW|}9ϾR5}g%}aɒf diKr;fdiY&K7aqesY&K7s xŏOy,ܧ!i Luo:œk/?Б-+3Ya;iu7^OG6|ub3[y3I]Ϲ|2I;$i\S$ao{Փ8`dq>IR|g+du$ńa܇Ts.$Aڋ~yߘk6:Mٹ9g^D(0a0{W%[3hV(\7Z^ܱǵX'o俱Ozߧ(Ǵt\$0{/<~lX U\ qýY>xP}JE4MjXar]E>bfu1(ǾMCmKj\EXJj[?5Qѷ~SPYnoj(y5yMRL,d}s6Eu! \ 򘄳i V x"(Xj/9 k?u:γqw+'{D ewuA|_6~nׅoo@W}Jdv+~=/T}+j`DxDxJX& <#<+, ERaRxUxBXRDž|aaR sF3 S -Әڵ '$ i;Q3%/r<[B9,.eP9CϛAbCJY߸z p w >z UGn\q6/v  faExG@&> #pH8(E^ W(6@ pdz$vXz \uqe$Vz1DԉZYuL3s;Y=')GM|煋k1pB8#;)DOq+SSFu{^'d![[!s"bP?F3'nOKc/T85t- Zgy5vz{Nұj~rpnu;aܓ;VR3ӱ>`u>hVCXcm/jkE荘0٢[b'ƈ#XE#FXcx:o`\)Kq~-<1_|D|TauG?~+)[ov/3kTn ܕ`=j Ez_W9]'UݽPZ=~ \ rp*/oN~9\!0;C`ig8WnyQ^g$c2`P]Xq.3W7x!?QzKH*Y+|+NL>Z_]+*}AQlȋ1 gkЕfM\%PYw+M IY" @5F;Ol:'yn;zQD}B Iq&haCQu'`/b?~kp/`}K}Xxi߃.{{^&B?9ǂƖ߲͞HRNJ-7 Oܸg+y*W'˷ ;~q`p >j#^u?rpOOMfO Uzm^ȷ[=~{\ R׸8 [47za:V+osAT[ŮsR:oTpVTJ#$>-<~q89)qX[xX-V>S'xg7 > 6w3[hOw|! j, 0l-xN%W*ƍ"C-=+ dW'lywt >gx}GwM=c“_8|r;)YV8&T[$v( ǧ/:<WxZ;Nk5c&v/[MkfbƱg<~{g"|-$ xw;$7~l|f#'fZ( 넥HCaX.V}5aR) *|Fy\3[lX,LU>qۈ1G$LZ b]DPh}?R dG+#{uDxDxP"b8PdAJd _&:/s8G,>(>'WqX$ow 'G`$#o6jQ/R'-a;Q|[c6l,v俷~Q|A\",.Z_Z϶DDPDPyZZDN)'T,V~~ 3/)\"zdum: ƺ1T<Ζcґ4Nx,GroDpRNyIm&U4FVBOh^$58Cq"0u+]g fne YNF֭p j)Z#vL#*r6->36ay~7VmقG > k>!˻σ<ߚaLb>=ju[H&D?RnhwlQkwx[Q^Qw4Z T&w+Lǫ<$[ "x =ؽZN9.)QĬq`O!tEmEGa1@rTS<3JCV[ V / ""Jcu`ѽ=f)V`R )݄ m;?׬Zw7鹱}iaE%B~.eK y%5^TuJC +ʅf#(y(׹hPQ۱h^~IyEYeaEDŽBSt o),-֊ A~n(1mZ >hppK1*K#F +j+ ">oeuQ35 @}P?X4 zkZK5Tm*KF Se;,*a++uL(.ǩX87*żjf=J/\`T 7uI;N'iT+Q&!_y=TPr^B0^xO8,n'zŀH[T}Ckx]IStT,QlTlVTTޯ|P9 #Eʽ}Ob?)E^꣺[5M5[jjjjjKu Տ*oP f uзA)z\uk(z[wa6~@;C;Kv1װݠ====Z6($$$<bB!9!B 'ne!!3B y!sB YjBֆ OpAuO5GWOW{Pnnnn)3؟--ֽ[{URN^A}>So9 ,#%Wk? ՇB#C3CuCa0v_?IX^ش{~_aba- [8%`5lY؊a6}$ex~xq󆭆}#q"BŮGEDF4{m{׈n=((^}0b#"J""#*?} eWFXf[ߎq.6=o$cdŜgnengha7'_7a~.-{̇'̟?7kf|ӜbOqOM'%g'O/>",{=), (骙9AmN&웃}z$S3Oԗ՟PZcI*>f"(rA-АB,{Ҵ`MӤ MrKJP}, />R~.aMyQ3sob̽g3g̜g !V!D,ɓJtI):=NÒzɇ㒳$%MM*X!N:H"MK3UґI):=҃#ǥMdd*XY,E*Ke dCdeSd{ded㲳MDyʍ8j0=ZzCRRB#&bEjPFʅZFcT^9LetPYO|!h!#o?9d+UMHHȝ#RvvyI4Zm y`=Xǟtl5ȠxPv},bc(/L/`DpZk,ے9^g9<+Ξ!(qx .e[>_>S-tZ пf!W˨“jh?]Yh㸳۫}Z ۪V5wj pBԔ [щ'dul+>馆KjW?,B}T= |vx:Lޓg u=F KΚ4hVňlf l &St5V  RP R0槁+ a*,HW: W&g+Ks0 `Q<\s`\Mp&ǿ0&n5z }#}'oLGahS e@j S%t  }up5 !!X}yĢU %V+O!ثpMlWVA}^ h7;'>.gXwO@C,&:A" Ķc9NJd&;WB:y 2o¨m xF)418_nc4 H$yQbg۳5JMp2}z+e(DSNp}~<dPca }i&7PB)^2VbI&eP09$ &p(p=+/Ltӣ $g> ^({`H :@*栫Q#'%4+鮩]fhLΒїU8F ZK4SkfjkawkU:{7*Q# \nn}Z+n9yW ?G/!{߃}XIC;.g?zN+Фj$MCBGέyB?ly-~҄b'MKSʫg|Y}Ϳ̛`[/Yl^f;ᄋn6nڼe;v]=νpG~x8ѩ3g?}ŗ.^|嫫_7nǝ~~>4i~-%R< 0(Oj&mh'jtcg:wTTF٘P e㴥:WGTjfw]3U\q'?(!1)9%5M38W_0p0H(KLt3rY&JʋJa%@'dgd%Q|F#Yd࿽D / 0Z_NK*jfŊ0p*̵j(.\d $qd @7CGQd.Q j Sty];ñȂ.Spd'm~MKJJjN>Jj!LߜTiA,K*J™Zh1yߟLm܂Rl(oC &޿f5YO_FȱmzzWzRnVRFobuXFѓ52l g3iҲRn!1;3>-Ix l7 Bkc2=YBnjtaI`V1b}Y–F!16=ݩbl_Z3c@͜sdw4o Áigj2Rʙ1 +kͥa6 +d|({&/#ፖ2Bc2p7 &N͎͜ec8Xd30:o\S"u3ԙaw)b,$^ٻeZSCIhsh'2 NI?_rӝRלɽ#VJĈ˜Q ^KU,lcōJ^m  =وBgX*0Z ~>Iؾ>j ']ڞ)H{% Өr6`g ݻ{wz$BU+b{!Rin5mexg_????˟ՙy[l9{l[RKI\mb딭6vXO{CͥN~#[[zZ)_6Ã?fc8u_¸i{{5-*qwx/y%yo9\ 8|?2݃e{_;ϴtqG{ݼfQ %ˮP|Ӆ]lau7ƇXwOqe:v[PwE&P/vn6F7Fy;%{3{ue?ub?4Cu΍E?Wz)ux9=闿壕3?;^ˊ[,B|G|?#@N;>PN>)C>)?CBa}X)_Gu[$N!~QN!^DSWB})CNByw K~x"s <_O|Q=E퇦G?۟/jOگ^Q?(C__bS?q+濸ן׿xˏx˟x˯x˿x+n[~|ztqzMͶ[9CLژ8}X)Gq| %[g lp~Xڪ)^ Õ(U-M3MWcyNhgELqB{W喀gG#}瑾HyҍOW߻mWldLE8Q5.ndq/+ޙ&`fTй^jmbV.8Nm(_W{qKhV; lf%u JϚe9mY<K,x*[6^};˶cǍ=>Z\-sczmC[eA?T.[BNJEIxGf]'Tgkn]Z{*H^u;BcO Ʊ66c1#.Uv7n/@׸3WKo*U'¶C+|m\3A-gΞ;Hb{Yv=vnc*8yU] q +v=.YK`K`?詛5[|un{Ky;E.<3Ww__~|M^;;_ > NV'uߨ Vn0UpEz 0]w;gY*?CjYՙS֞W}[&_.6ktLKxabzZCb]Ueޕ2+ץlsuNd-xf}CZh||q.Ľ[q/;&XxEi䰪'.tQl]h.Z_ܴEq'櫳4j- /m5.Y~LبWqM*S.-zXg,|[Z\)RǰG.;$|_&F8z^1ѭJmԟ;(Fć _姗mWzp;J?bXZ1Vq_W"/q)/VllB)hzyXaYSzΪ+sQ(m[Ɖ/^Wٞ9u`!qbE {lXugm;FfWJ߿WqÊsar.\]wXR!(GWD=f{#6SM~t'+¢_sKx|7U?~C\I[nHdUap7*_f\K6ߑ[&YUkׄCցUgܸw5Q㯿_{#o !S*Q|nźONTSv|u.0W\\0^*Rrd)ssB\-H=bDQdumf1W{T z,xcE\idvТt<^Up7A8tu{k^^\YvuQ姪=dy4|],khJfnV^}MW}L1HexC<_eA4>Rޏ!S}B\6~C7ČvB6x~oQ_*.52WZm0:Q(vI7*jbD^׹ʜo52Qlopʣ{(Fսm>XrS\X_:ewZ/<릈8gV{-$ߤi!uOoXP{|qsC%[bBbgJѢCVV5uݽ%JzN_Eor٧ڷŜ5o:T\Ke7W0?#Ji-&s3fa^ulE{y֬VIx̕Klk>Gŷ5)2ItyV;;kl-rG^y-w|pGF;yҨ}3EKۼ!cu -݇mθn}*69l:jׯ@;yœ$oK@l}k?3Z"4?,~ t;$eRSEU'C$,L[ܸk{'bPZǜQ榊nW: "Fw5;j4i:0ڝ^kP^r_|M:?Vt{sCq-Dc:G_|(zYZ/g=$aDz+ZpHʮy4j˽><S#I}FˣVVU4W2شXgէW F ?TFibPɎ_?i0l4Qk>_8x-MI?SmD8Tns抎ycNnKQLԹ'b 괦~YfǩgB_k^Qd|_6W:$dSDr{/DO۔#Qkz! wHh߼ xH bWL=cZbǼ;Rk+#f2;^?2ĐUJUQible>o[mϮgJW:ɴ~w3"{\zOXnoզi4kQ]|o.T^#)j;;uZ/\?pո#.a4V2KD}?3˘y~CƟ>qlHߣ:tݙh~m^f3֝PEV/Jx(S-VhӂhѦmԢf5KlIZŠ/i0Z`p hrť1zUՉoԞ/IzO4U7/n}#ެlUh1OlpGbJ͕MR߻=V:g}D8V8JABAmj4qϾ"T{uvb,SG/S+n/M]mZ"3>ϽZTNVۃ#.cW;j+0I-~[-LxbwZ?]RE8޶iǛjqn󨲞jjȉbn%d;=8^-n.5rU=Y[%h~wjQsW jQCjѸ_cCjQVg K(k3% Z14")fynqrxGբm֖EMTq+|G>EJw9AVSCy}|Zt1h<|JoQ\^Q-vMUZ<`rfZ702jP<5oZ_͛jݠ|%xcZؐ~؎ҵM d7[TL3m7}|RUURi)ᥘZ²}_W.HR,e⏗BQ; dRt뿹KeB/DO6B4(BeV/DtZ/-3[~.*vs1w3߳ [FK=SxWG5x.^q)aWz"JOshD8y|H_w:i6 ϛ8XMҎɗx$^s`#T;~Zĺ=FG=մ3؝SO"jYܸ.KRELm5L } Xo}~ۚOŎ\"vhVԳ>Ӓ˖+˞u#z7l@cJryK*}M=ur5^ǼUz0Q_7kKbUﺷy(9TϤfͭ?}c$륢#e}v'o_̡vEɹN`8}aN?gť15 W ؋!!!U3Oߏy d*ֹL퓭\U+PϬ{!r, ݠ`3PM&Pe' k3SMeHz}" g_/P U|4s?箸{i,o,pvd"EH)8Q)||:j>Q[GEho쏿{?r; #[GN;wtsw ==}5:44?t nP/{?_MC0$t^Iz5 SG{toƐR Ё9#@ ܝGg' OXъלu5xN q|;Լ[6 2p rtHMwM{dc㮩Jp:VK8/Msw l#Wc}'{|r‚Cast>sV򤑯$㜫R4Vylh|CNyΏ0ʁƞs:{:{uvY#58N%kίMO'ـ{27O>'o_]ƒI0RP/&yjI@.xsIJsw|a.~2y !"#|D!4KF r r r10`R*C37A5[4.\YԪ 7>w_9r=FѽM7OZ9r {MpύF璦܂fN 㗏aPwɷF9Sǻ t ='LSѰrnTM9ʩ[f𓰜RDQk~Zp6a'%Ӯѻ(n֊6@bk Fk ^[;*E8"R?ZC;%age6< {(aV<5tP4tT,5쮘"_CPحogE[.[ENIAKpV];)QvQvihApDGşسW_e(haOň۱RC;8(* ;+_%)R5J װTîHvW5VjhiSiba'EOJq *Y$)R4DwSqEpj]S ~Jb}E.=ْ~==DkJoS@K7 (*)ʼnԞoDc/M}ey2~zB}Ujm/V\]SWJ'?Ϟ?T.~4܃ zrw 2 hv 4rx+@/D+Yl) y|aմ|+ZL4yNsFN23U 㹹q>96O!ur4_/ynٕ_.a~ O^GF~A r۱gUGFmHh#Jkj[!XRZ'O}?\6_#-6OO+ɜ 9vxiϛ*OHϕ/|sU˷y 96䱺geǏ+J(܉733W,,̕wK$MIHPi(eRѼiKiBvMM%ϟG-^7M?ƧflJ#%KLjP\dP@Sw<s`+#FGs ra,9oWbmlG7͋T:JqJI*I"I4IApvJBđDl$YvR"}y$IBHHz+DKvH)1NѧMI"mI6 %#&$1"Q'.頤đ"N2ĔD$,d IQ naa3æ)na3iiuuƌZbd;l6j{@RRtwr)3 &Ǯvq޷==4t7|b}"AI~09Şru_H':wkҪ|g_ ͏~#]KbLb$k/9_1uxV1> g_7{q>=;MaZi kDTsPn=]GehY|ۥ7!$Ks&'Yξ%LWCGڼqyiӎҧ -"u6(Gs\nnuǟ'LwқI?ohVݮrIztVn AvuPtsE^RwTtHnnH74#Elv?kEਤYg#L|#ӬEQYHV M;f)HGX/_T lK*OIg}T /UEG~ynY!ʛN~ οB #}6dώϿ@>dw@>Ѥ#-O?]|򦑟-dg]1 $ݭbn EvK 䵅􈊹+R E<ǘR %Ƕ[!Q0m=GQ/0[^4S k.#򷫴Z@~dQ /*ֿ/@~dgV)~vy"iG2RZKzx5Y˒ .󩔻Z"y9]Ӕtv?;μi' 7 E~A 'k"$_cWX@~cؐt#)_NwS|d?I6d;-poRo ҳα޿R G0?ۑn0ɛO4cW)yr$m~VN5(D7,D<(lQt:J$gHސԋ8)$$;N(OI N($IʟQHDdF(IIIQN]Q]Q2H\QeRR*NG #I"z#@*G"(!$$#tVɞ$DIQڑx,"9JN! # 'iDGy^GiQG*R^UP)-TJFd*EmRvZ]Un*弍JRI%U)(丽JRHR){ڎ$I~*='JhUJ7$IU$_I$Q>$U-!*ŋd%sT/a*$I*e12#T $(->$*e>$.* Yl`7#H],"I!9A$]G$=~$$IT<3$EGc$$F,t\$>*Œ$$*ŁdIIJiG_ $i0ڕI$3I@207 2KzT9$cU"$$-QlhR!TW$ƫ$/I'P$H^4R S)HB;$FS HNS)IdOv %)1I4g3) l$$$+IIg!FrMnJ iXđd.|If#L/ #(It$$IܖQIIGII4I&&yOt%1J$uVQYMu Edx-ٓ yMbt}$IR\H ZOe !M@Ru1Ii\Dcd -$I:o&9J$$vS$oH<é>$v|%#G3>]7fhe7pL{h. yLښd]$ HI}dI~IIH='*!$ӺqQǨID(ǩ^$N$zt<$IO($NHlӔ($3TTgHIsxT#hl̸R^]ADMiH˴t# "HrIJC2d.ul*ł$dɥXR9UjUUw"Fd+?6H#VG9y҄&ny*$M*Iϓ&7iDz9h|#]ܽ˜zH 5~7qЏ̭g22bS Iu:FagV7iME_$篜eeD'j;!܆(JQσ z΋2xp ,q*p#Q+{2X,=L,wA[w?mG0ǧN}N%5T8#۩x}#Q蒲ݢNq?E` Kyle>=m3r(. ms0ۯ(t<69aC)Lwiinާszz!u:7mVޅDچVWH~Fq?F|Ǚ}%e/ #B?B>Y 1XY %Q(T>E/uɪ>X V`9P*am5&DyoQkƜ(u+Qn=Q ]?b3NDuD+>}{A~>|G1^/Qj|a*|a9qQA|@'z$#a/G_(x$A;~u禜)FmyNF_yfeBOG|:ӑ^R^湘:Ԧ bx}0> eb$o,KhB|Xn 6%eDr嶉.)&:&LScmEۤ=8.]u;2@Kj8qO/-.x܅.q=y"U0[lQٚ|Lcޜm' fx$'$wx}.qL3H 袀޿>>~\@]@׾[M%t:`4+@ K$n"wGE7x>f7-zP?}z[$oz'| Q踠%'DF#띅~%}$L#X&X ln7yɾЛێ>?p\n%:xL߀Rz`m $j~z&ʟ}*18(d^I@܌=P1k`2?%n3˃5Fyp=oܶ;Ԭ=9qin瞋66 io&e]~kr4}}%80>ԴURnVs:"ΣΉsD:,:vjgNaa2SlSƯ)o*܈Ed$9e2S&O1(}S'9zZ2;ٗ_~dO$u9Gg%/-.]êÆwks0߇%ke?l:tIǾ @~vw~VtICOV S7˪`}D Ma6č%O+@]gSx tI?>6>G>E9|N=)KFخ=cQ~zFBIا]R?S߾W~֫{>x}%~XCT^8TWҧpύ]NDg у(x Q>rf嵫%%^^pS%~e|aB"Qg? ^ })Kt(!ʇ1A>ESt&N$?`b ]YP_)ąW?JN~8xzQ~wI JGNe"X l Xp 8\nwGsUOC.Xlf`w/8 ?9R>z~N| "FcK%"#>3'#[$ Q(h#o'%ZAƑt޷8 & ߃E0T`.lv{@7km`$x 77 Xl-A[? z|p%σd ~KdkV9h :A/0 0 >_` fY*Xl v!8 gKu`8x<^ bꀕ:`3-/8.W[xLSgWP;Y6MANhZs6ψ׉"+1Q[YLm5mP/@xǂSy p< w4K*_ Z.QMzu @|+}#;AAdDDJLCX5S {>b ⿶J bbI3Qe&"%&"Uol2D[bYbqQ ~*doY6MANh Omʯ5%֥НI>7$} G4$}1q q7)(9*ҧHWZ8^hJz[A/0؎@?K@f҇$G=)N-W[ ]Ͼ%v(~eIx#xkόJz'~ߒU؝[qx+o|}OP@/_[@o_@/C ǡ_JV`(ߓs|ׄGy "]̪`|ͬ1t#y{uT;-;M~%J.›hrϳw]Ry3YO=;I,;{sؽ;f ׻'Q>Dy]u/(8B(@uܻ!ʵ! v"ʹ(,t4kCG\\t !#ӈrmIkCQ ٰ+b%{.ޅ׆Dy=dV[T6UpKkW ˰]u^,BGaexmT׆exm)kClR׆D'b0Q^YKG*x(IFGt)ӭ0۹~p kY> lWlk. uyOa6\~kC:77b*ϺX8›@o Z[Ag >JGC_ n&.=ЏK(d q\KTSVu5F5Ŀ)pЋQ's[:}q;~#UX^1g;*i9mgGE^]+ZeD駭]Cy->I~V}_~M^Ey-~wDCzi; 1z|%uYpOD|*:`e l v+  V0<^/Ԯ̬{@'p48WQxjU VƠ =@p\Q`,x |f2>Xl^`'3Zp;< F7s-,]Y 4Ve N]U> .);.U'>i§n %ǫyQ^G])Q^MA՘!hZ6#8arp# <Ic0,VF`G Il/opx< ƀ7T%,Ru`; ~Dy]~18x(˯!#n#C>C}o%F㈗K=k{Dg7Dg^rض&@?p1IO)blG3/ZʀDA|@ i0 '2}m;LO|&f1`(q3Q3dz37`z` bQodzSc|rϼQ]aY.U'%r|&H;͞h3O{{aw@{ψrϼT=;͞yS3vAW3A{滈rQV};͈Dg>"bWL'n#ʛ4#awXCkkӉr h`3##&=& خ5Q[kDgDgM{r|*QχJp3Qk78[[S|{bOĶ^LlO;Q;'"~&Q}/&Zq;;~ؙM"]INF|KNҍ4{效=ؐ}lޣ yƐO1d_z!3d;ҐO\{=C͐Oj̺diP vcNWl-A[? z7潝qЧ彯fpx <^'yod{@'p48WQxjՔ VƠ =@p\Q`,x |f͘e@}lZ;Ngvp?xoxoG94ozo(A4S{H .`Op"p F=0|CKNة%Ŀ". -aK KNY'ǙqF Ǚ'n㌸Y/ &n㌸M3O$qF!ň%Qo'㎸W;bwDy >wH(uN6JDyQzSKF彯W;cb>1!f>*o!{_ǡG/O5~y %[1+5[nHI4!"Z6c+Gb{f+wCߍݰ>Vc.xVcLt &cmf>vwi>v =(CYJ7a{ ؇Lǎ2a;I/ &c0a)| Jg@ߔ}zc0e)V\^`SM7e{)3Dy_ZSߔ}쓦cGKΔ}c?'IΔ}ҭǮԚ}lc7m>vbuӵfۮ5ZҚ}l15Z5ثZ5c/Dy_ʇ{BgІ}/6ٿ ^۰%u1mxo6 V۰5Kum6{GqQ^s~ >.)r_j_Kʽm1wuj%9mt:Ď0p2--_W Q>wsm[zvvkڱn6ۀ@;p!4p& oo``  4Ap8CYpO0| ~;0+)tNhp,879*xLJtd4-@|]m4%:0</a~5j~t|!0ތ׆%fv7yt'ߌ7qgQv ⯣l9" )[1= NU42k 9Ocs{sV\tGp9cy[Hs^Λ:gX"D'^R^J1u, zc`X lYz7'n!=Zpk' np0Lz%eܦK{aWm*?w|n^.MGrj}U}wL= d{. >7ȏdIzz+KΧ%zBo\8C zYԩ+͖|cK"3Kr4O*o'\a'_֝xL> `/yonwwyv<׉N<:ЙM;z@cQޣԙO}}gG~$w"\~$@O~H>Fh#Y mAхuvp"j[.) хÙمb/)Yۅ.|~G8)y^w> ߇݅Q8\L*z3-V|hp߇3ŊÙ}ߣފǮɅGt1DQWصc׺ݏw{\p^Е٪f >B]_tOkn[tw,pa7mE7W<};%1uqJ! 1Yv2Gtc;O6t?ݝ1ٝcw>"^ ,[| !5OBa&`+{9zm6v?=rj!n6FZIͻ&zpjzx?Gt!y}[mD[i\c#sJc#QĖ-3.ϖR[lylqЖF-[k{lms[[/qqq9'·e}A0Ҏ.C:ꐅp@o;_޼n湢ՇuIyNp>ܞ p{vj=^RYaWn}=ݡ#((k`H4 rlA/}{ >3``;C.pk ׀l#w+;}u7vM ρK}ŁK ]Rߗ~Kwғ'!> |_Koo'yv4? +&$OBlp̝aئ"yUH~bV5{ض+6*[!YK=E1}f'BrI49 |H;>DuS~|!{-p3`䶃il>ࠁv?hZHaHj`n!IμBGQy=S"0aʭG~c#=|q= _> ǶAð>_؏~`;y`0v!<9 ZT\8 790v02$wlM]~G!m7E>C]d< w+ FZ?\HZݡL/2molsqQwC_ w7T%</WRØE`y1Xl6`'8hjذ]ȱ"~676u7;}xS[m4"wdbVi!]R3\r39Ɗߗؕ?g]\~_vstW|EEW\v}{= k;+H܍[*$m;wNk~ܗBG!# yΓBqy\D ygd}C ; yAc|<>-oj+լYK7Muܫ[lkX]]` 2(@wPPADd?(#bY?ky'`sw}s@9xy>;{y4,y 6anR!ϰ2Q>^ihL|AP}B>2~ o"ʒx'O)~_tF_tm:fFd hWhmhd/"oIDs$CN<'&a$QG F M؋|%9G#t{I7dXcQF>95ԗiN5'&6W29.aYi,k?ˆr_1yѿ.갆kׅFc"ia]<0m2c}`U+D_+bFhWra4"o+p>JyhR:f֐X(GBWFuFssn4ix YSY4ULN}_XF[0~NeLDؔNe4ix 2ZttnQ#WRZ+E1#4 %Ac4-nIg4Hs*)4 $M >0,w`=ρ_߀7l$  Uz0,C|^?A= (8Op17`xlY"~D{.0 48/po[2l+gq=\/C9jW>͏Z_֟/leL(.cl-un2z69ha[(36uJNƶw [">b| Dzz//&flm,.BZ)BBOv2'3>J_atMl#ڙ6l3^ 6f{ne4fU{%#L沤hE"OVXg%E¿$}qLfBThB-*qSLw&hi&&  ڐOmO>+ȫ~y ߡ} &}vܛoǾv HO/'4+wzX3}%}%.agab"hlU[2\rpΖPb-JR11ycS:qW*=alGDIޔ?Fcfʕ*Ic%IhtrOԄ!;DvD)XB:B錦~)36 Fc)]cklúԶx>ShtvYvNq m]gWh4}_V vm<^23p8L_SA{Gc{s J F s.<I4F[SW0~V8x p_NaCO[ľͬ'wU9 ˱Y=rAc{؃,d9 RXb=]-d4{qrtCc4~|$3?& xG xh} CsI ڢh5{̾24 g4}#I MZtk}8 @:܇9m1FǙ8뾟/H|,/1Z;ĔIhtD}&+lCsv px9hk=Yav;W{TOwJ}M\ mor8րWk|y*vkWii6w3R:QcjX[ ;h-V>du|3N:H_ľA50v;#*alc^=,Fc<,Q؆Kc/5Ff@m5*d;^5ۺ3~p]*?#xfqD*%&KZ#uB9!;"FƇuP8Cf|y Η|-n&ƀ:h 4!1^ Q>(h3L^곉>CQ[}h#Q? `4u>Z>q G;|8@'}>i:;zfll_bl83?BMt(4Ϝ )Y|_ >1}/%>/`~uGܛƀ9a~-n hR~=j7t mdWNخlM.q~%2ZN7c;-i}TWΗl16֢~~@?8¥S<24{Xf?!o5?GzhoXߪW:M?_ۜ=>Yu=w#o>{:YP^T׼ůHQݩWgZ|uvj\U/md}8]vBz<|Y->(><4p?vmn]7+t'F'~R~υq q5oIU3oBߎCqC#qZFA=|#F?mWu2H:i:~ Q'Ϟ~i"׷:;yjz;Nww:?Gtp^o;aÇfboLC㇏Fqءr/vĄgOTt=/OK~.s0{;ct ߊE{n=N=FwJ>-?5 |nqL|~, |,OA+q>χ?ocu+7! OctDPTξt7D;E&Vo 2>牸2" |>*2x8 **6 *OU&y~zϹ9sϽ}4`6p=p7XlπL  x >Y@_`0PL,`Xl#@l (ʀB`9 ]@V%z2*`0 X<lvw#@vxuF`xp4`!Xgݜ%ElRFɐDYt.ҥ ^膨ʼ(/$lo(U,Bq5O8626b\AdF@Εr%jQѐT}EU55u,93]]n3bvj(.2I(G₩RU!?q\R#*!rv& 9E%CA dbyV4Uٜ& RrjE(S54ȼ~llV**Q@B v ,ĚIZ[ 2a4Jѹa1.z]fQM6;"ؘ,+ F?k:gVLͰ3>7Ttv{;)'dcD[B4g/ikBi;L-~PTZ3ZV#w4vIU9fQP1R0%PnىY ?@G5'lҔ v~ a[ժ\61b21V vq<ŜUFkm8xPUUS,Sm{=<<\vT t~-/y;Nr6JA^b*?&g5 ѤFy{ɔ-utc$>@:MśuvhQ3fو;Fi7+V ҈JX4lcv9]Vy\/Xkz'm FDcHPlE9~{,;K14Z?4Gle^ⓙ][; F&w?1tY.FB3*CP1u74piʿZdKK̩5ζ\ 7{\}V5˷yd+^Sf U 4YU9c0ȘhK ){q5'[aqQ⑶joYQԫZvE)l\FzV٢ڴ㒜=QbPܟ()9\iɃir"dCacXmI3$R6e&d{WJȏUYa/>M4UJ褐ba+MYbQzΝU&em%Œ s#lUmp_HU܀T ԪeWvنw`cM5L) f,:8ݖ*zGjoC# ęm,GMvj ))VzMt 5D|d+}3[JvdpxReX*'yIbzmWYyHWcoΜZf2a!/ٯvЧ6(ӫ4`JyҺ'b;uEΐߦ:=N6uxDtBVij;Nbu0vs N ;oPۃi)t9`R4ݘY?LG6^d4ոQ4: 'e>ٻ\]cYh m^ek]iu{mðl7#P=5\OBWzN+ChRC/ )_TPP"7 yW ղ@?ARtLGg$O0ByB >Y|Ȗǽzў<وJ8餖Kmzȣ?=9=R3~c:}JKZg?>WZ ՞jȺH'=22Y"ľ2J{_RC!d'zG!a;lJg_t1MdS]/iemmklbn;]j6>;oZI6oΏ@UzHeboekyv||W]%vz- *; [vn.:/mbF>C3g۝>6mPz|fKNO7ӭQ?3$Oߔl[. |dc7Xl`;޼Ea)m>so%sNvZv;V?lo J~g J-%v(6B=}[ J~u6eW&#fC>Qsi5܂4+Tdy"c|!` oVo+7Di娢fho<*w*xF)rlE帪>fBIrnvȬ윮+H<";]Ew\si1j ; l)wt꿰ٛ-qs8;moщ_޳αZ|0f$' 8I0f e9v&p2z@% 6\Orka}|vtSϑl{zievvڕrδY4D%\6,[03u.H!>¥X&ꇑF<tR.fz0p5z0p8v; q@p(ʀh@|QNlAg"tgb_bQ$"G}־,y.Ji(n 3=uhE9==J;j/ J% @w@=O uX4ObPzFZJ/E (NlޠM{ 1PfZ}"N[4(YQ.x'm.Zdp4k3ٮd|KTɸ3N{-osqu}O+aJ(m;.xq.cW~{%Ωyw͸c?|e/q}an;]a /lze?lmݭ^s;0{TE?w_7}tYx枷Co<3ϻv}w_r/x-egΌϽ.޸uLQW6d؀'r՛SGG_X}[V(0)LzfΣݞs .oO>8{;.}՗;Y`khv}5#eŁ2w- 9+اpF$;{؟GqN6/:cݯ^Znĉv䫤 Ņb(8pH8TR2~Hh%EC  矾m 4Ԍ X\A "Xjj|Yg;N$CjPT*%aI*(aߊ9]Qr௮~k8=q_4`@/XPB u.*t, j\{JC"RCD6/37.Յ%QOIti+Cd)hBz?ATBBLSxhdDD6"FlT;HZPp17HS"6Y)JZ Ȉ$ʦ;v0@iI4C4Fn @ qP *Qz.uKa)&Sf_  n FB?P"\kLHW?@ ]hVY!5!%Fu^2,KlH(Ki,HbhMhZzh'GqRZԇZԓhFI4~1?1f1e80PL.J`UBPu$,CUedB_aTlW/)"z zg06D:ߛ>q:=tWc\w)Ct5y3@ώTϢ* :"j0mL4"nk&3#4 񇥆C֐k)BRM d\w!;bhuJ[YBVLلոб`FI:R0bVX K$Xp tWDKټua_rX{.NaIxE~x6?<uR'9 :W\X4߷U5R_bQń&s{H?WDIY7}=l#%J\(^e QIJHURh%#TR)ƽ;>}{ys-T ?eR t~>;Pn=|{nD%R B1ҝ0T`wK%f9ފSd@:WvI BAU )'t^nSxa@PqrrtD+gs| #ӂ2xynޮ~I"p`.LIf IB(@+:0`V|%0psiql?,~Z>  ښd f t40-5  '솦tӊ<16v?jY78,"c,3lxa.掽B,5 @ ,,Jcm}\N...ιsr> XTBd2a$%HIHIK@8<<[$%$ $_U"qppr pp ppzsGý.3/9s8Y @ @J~J8p.p]@F"8(-?4=T^~{hRw%x9) ==>dGaK%d2fGb2׌$6pĔ[Oj/{q=O5;Ѫ',Vz$eEeK$b~QNY4X){-+㗭Oj j(rtvZ̒T7Rhx)C|4 Y!x#r!ζKQSK}s rMNeHפUJ/VW^X/k7JpQ+ٱ]#݇yuQka 8wEZ ɗV}l,{;׵(Kz`G/sÜQr^ӞΤW[K'7Z`pGq^k^HRl Ȝ_]y(/೹q{yF,)xW7m{JuncS:`8-Z& {# -/LYI]|*k6c_tYVw''..Jﵦ %I-1W`_σ;"כ9Z HgYܲ71h(qb4=g1#v]_ }kNL )7J7n;z^U}ws嘄 )Jn M~_;xOخ+\@\)#z{d{-&ϰ,$N$9ѤW{z Nݚ뼫(A0Ҷ0%ŽF3^w>{?/ڲ?DLlĶ*J|F^)j.Cd0ZQf?5х+e{ɢBF~1NbV*i }&i˵O#Nf9Xån5GOWG?O{n|qF۸z!rnK<.#m.D[ŋw?qW*{#\q.臦*΍]8Ya -\vGCO-ۓZoQJ My)w4=mK;v<>xRg&_4HGuk;!]Qz>Mn W_;'rSs|"u_+|y/[΀ufͤ 4-^3&&ife4F% w _%g6~E/lú:wk<-nf95B' އ8yI^x|u}9QԄ ;c]:Ym!u?=(Y=t[nn!/NvMsKE#N 1kF}ơr&k$7)M{cyRV_5}Jzo2]2/ ݷ*/QH&c=x8_g¦V-hhC6W;ŤV櫶)OqFXRd®o5/W}roog76 I40G<ٽ f{%qF>6Eްq;W֙{'m;01?}$r.}=~;ޮUo+TqVSҊB\>:HO`:"C<=wU={'yPM-0b':l8ôNGXr]teU<g%U2qÿ$u ԹK9c9CҿIэtʺM'd]v~ UsUp {fes4 ĭ7ziY y/RElyy4Ssk]Pt0UHQsχwk{g y> /h>7F'Koon5* T ;% ^EC>[F~kt).H#O/~eJ;I$[U)ʕߧ,#RU);aC=~ߞKPHzb,q? G~88pc1w/Zm#lVI|`&Mpi~N;)NT\yOˉ } W{XvG^ * @}7MLUn:"Ӆm]*z}!v޶!: wL0Z7߻bܹd=\]!wҬIUn cǯώƘY7HI. T{( Sg#Q'ۗ aw 4ִ=-^pߙ]r;w>aF{Rh|g&Gk:/׽O+حz& "Ǣ#YzaɆޥRER[e|-OAM_4^ gܮ )1L&d-'pB$*dK\Ǿ;'M?{fɚwRx}1sP՚$[p  !L"лH=%ΡJ9}:Չ+8о,>ޡ4tʨ",WE{G[5ƭ?h"} %qCii.^6-@~^Q+VQ5]ėʗ4SV y\zߔP(6nwt>[|[Dk|PMa + ?b>2} :{.d=5s;JAr->*3*\ޱ) K|=QN 㒱lfI ?='г궝zW$lyh>Aʙ~2\emKh.xyi7_c$D{M$EO5|(,/Po*0S]\\.R[a}{]xdb\]aAq܅o}ejmt7!?$O~xsF+ 3e{=h̷Hф}oMC>r8Xh=Cy5 _v~#m[z *=4k ?\kULʷ߫ÅSC\Y2ѭYzI{{Nj`fqx솾\C I?s-y=A< Kv$J<}k^ʡvb:d\]RiG!?.|•ɚO;!k/n{c{ Kz+1~걜_8o/=$'ᬭ+ŇFɢ^U<H=\7$V젲5k^uWY <dW8ZV 15v-28sG_Q\kwdMiiB_w {$?plt<*Z.Fegҷ(rZb%??)uTRoW}^c#'jr7XvONDɰ%Avuw%[. v؟:q_wR[~Av[w\w:;!ӕBjǿi ү4^!pQDն ] T&2X]ҺGEĵ#bu<]Yy긘\{J`jGTĔԀHvý^iP)c w-(*KE ]ZwjVvIȢˎ~'~=nՖ}Z:S"v izˣm;11- w\[ұީUG?c [\/}m]%" E2麢H!^t )ٽOiin;}W?puY+׷0ͅ.l3>xg}ˑOD=m}E5kY˟~Z'^Xw"M:Œ*ţ}mrHF΀ƅ-Oȴ jfF L]AΫ %j j<ân9w*\i+2G i z.WTcw#Y:嬹~ W1/M4w@n7|< I͂RUvJE5,1mID̳$۝iV%lYչK5W3b-5=(oL2#Q8NgƷSC2j  -/L|%[tgNk#3ۋ<:8_4_n:{99ݩݕْg;̵O5y .%vy' y\^24R3;(e>=aVb&l-nx۹ũ ߛN} /SO<$RqT7h?N<|rU mcSJab~ ;u"MlAϦHVWK{c?;zqynM,eu})o551`cH 7TjxAh_76Uk+޵Y=5.˗/y:vwuVcn-3Pt|1FzDUo޿[BE֕6|7N -քl13w[ݰq̧j|mZ"Rn1WMA .圳XlEJuO7{mk؜yKaR߶mOڢ'W$bT9f󀎨em?#5EE3.Q%fn`k%ߕ~jyÝqx$vE:}K9wZC|xITE}% k3/ܱ1~*gV1+mP߅`[^|dv@L9*Ljf^\c :qjCG4nTD;UhmWZI7Z6 h6MSCOS/ 7[ĥf E]);{rUSm}~,Z8ܳ;6\&*^A*'TIHK86]OU(ܙhtW9+-bx`Q5Ӆ28?.4=!J57񘒇\zJMGjlNB֖W9>:[`FcPpO֢s:{)o`P cCjk٦nDkU~:5Q9w #?xsE!7 1ZtU@.zݔr,6ls7ѥtF&jT=Ԩ~R 7 8vj[SN@kG]앹m]+.?حcJJ"agW/sl-#to骁J􆔬XyIl|Iҽ*q >{"s$rF=Hx7N{7G Z pOZ;?Ú^v͚2Nrg5HR]g_HEw'(c4n}2iWPuhӬH<|j1W.}~AFq[z܇*r)܈sD_iRU7(˨gtviy|zKK[|ƒN=iǘ$Rm*deiQC;WzuL]QS)s<cY<ЯXNܦդMOVq64\um34IxY{*}Jh˳ڜ^ r|ѭ:1}iIoWt ŗ-{+S@Z=?QboPRڤ׾&FY9%^b}űd[|<5?m]ãW;ջNvj2.wbض@@0RBb㦚GL"ti+tb$nދ sJS|*w9F:_Ug<Sz*jEGX-6_//IyZ gz979_g s#]P3)!|Er۳V#XiV|'9ʭܠ=Ѵrzx|LSȢ}t^\B\$bru&JOހCoUoMxHP/qj+_hg(6'7O ?;sW+lj)(zcW&ܜ{6ga|Vg`s\8iDeM?ޘҸ#Y<~J/00OgmYgL~Yh)rom)#k[#//Ա6{N:kM)$K4x>jIRWzSHrepWw?͏)A8#lIfE. ;Pʧ2E?e3~X&1U jSflg6ßp ?>v\g~dѶ|3Q U[=Qs03C:D_[INhl۠R촙c[-1"~l_B{LvziتޕMmE@ǺExߌ!23W˟k}n[!yOʛǎ#9Fo/C_=݄^u.Sg|6ϳ ŭ`hݫK v>{+E$#P^Uo,q8L* YHȊU)Z7oN|e]碮&t~: i:X C5()Xyk;[h.{bͫцUWmRV^`֯ N]~.Gv_ S/B )ǝ|M9+u{+m 4i3,C5.Խj穄}l(?k:/=t֊Zyl(jF:ߟrLvs )FJS('z͎c#|B?rbJۛwK`d%Ho+&*"Z=]K1XR=LRǥ?&!#k+=ŋL%^X|obWߛ z^gSq5݈nֶ*^qscV؝IťJ$GCK7TasG9,ne$8~VwgSѦM}Fk&͚%fũʾeJ?"s| HB N/\4֪־vcl}YcD_ܞ1 |-\[Mө1T"ybgLsa[ DeZqrME%RN?2 +/q DOy*[]Dk}8|$Raua ~(4@ten}NaϖMu"i9si)ӖNhjz2oNTlݑÃW~leVL5H_keDr)yzM+tVa+> &*%K1X[&Τp۲~恅W [o,_[`[UҽQv+SNtiѫMNo=|@V\7V-ewrdTtԈ\_m1B;xO+~->ji_ǖn\ Ьi￸,T۔˖\qbu 7^6 ,#{{!v|CFʚD=y H̱ӉW: yeZ߸BaE{EĢYnS'?rZl5%;*}+Olˣ2YU(tFx6Fa!I尲s8uq Y2ƅ2/ :W^gw7ps/&rO3*߉{?UP߳5F7L}a4CŧF #KGg*+TVVzI -pw/bAaX/*lՓ 7qA4gpwh4 %J9z/ZFʕ~F}g+EjY*Ms29Ӷ2}T8u뒌oQߴwzɀ-,Ee^P?ݿso'.֬yB ߛs}{Wuvύ/VܾjT\y]+©{c劶)GIwwj|s6?OؼLmٽ!3).fEՈu؍!,n+({-|5KƝjXg%5ξSrFB?=:`vSCTtn)Pv 5 ˵^z9KNTkVVY~v tu…Hb1IJoOB7sBJkl5T$bi9LpohgGN~\V9&..R}wEnv1o9qvx$u3c{5D#G9ĺ:ܺ^qQp⅟ߦ,~AM.($ wO չ* (7\@"e&Nӛ7v:k2 t-I='|5Eyw.߿~*Mm CiO JV9 O䚃\mQ[#oul΍zq6LQ'qUuu2| FM,BrryΑ #kL^< 6;/DeCܨrF\j`;6ir&+0zҪRuS7[H\psX&}]'ɧviǁ1)x-}fSs?Rzum{v_{t߫Ї:w:3"[]j{]i[Sm!ͻoޒ-;IBYt6Kށ _\ey/_]\zhPɪ7yўG)'ke(46Rv(FF!1f_]w1 $jKmTd/2۶k:PS2Hk(W/ܒk,%2BR#z]a1ߜ#J/6.ߕ-N޲"EGYayRh6).RP=j(wP*%r痠xnʜqXw(wmG3H[4.ydx,ՏֶPpc:)w݆Z5=3x+h~0 z7'+&c{O_2 U)$J ۃ(sI0 }&ze~9yK/Vo(8f{MګH;\l#y׬=XY*Oik϶ Fl =(}Tވެ/T|ɿ&AzϭhG[<=dI '=ZKSLc0ʡN2HQߪ>ɷ ;[<62r@DOؼyeP֯¯I`FBJ,p*/9^ᶭwZmMA_qZuG,z60(Yl"0tp'OgWYQ\Fm|,|+GA'W|pK#𣽻n{'{c'}6 LGFFPA}xr{C+f: WXl~hΐ8)͔WK>3SAH-?7~7p8%qӯ؂j!Mɛ4ov7kyn~`ށb7IK}5a|qܢ7.uv{$b_ۜܡg R_.xKJo-_^d<+Ԓչl{к)>\=w/M.CSeWWRxZuYφnjy 2:Eu9*_OrX| :_oSԭگ51z#'b#M K49ԱŔXġF.g>-"x!!>S3}j! ͈+z8#m_̨|]ɑ$n~b@ϗڦ>ÚFa֗ $ QcPB|(7/M6U9j"L;4S-D S6ƋQ[iˊgE}a!(;8n87_++B빾!on*nJΈӠb?^(a{B,?u)d v*-akC}b&tAרpY,fIj) !y,: WP#1ĭ[.cݴ7e($Kc-l nR5[O>yk+0TP)+ ~0Z;.$UV'gJ,[gogmgR %&θ]d/,$%0xs(C4'a Mqu;'f" YwǮ+X(cW_ZyX[skok|k>/^qY\΀u6{]N_]\~M@l y[3 <2舏㓪tly%9׿1}*jkݲj%#;WNzٺJ9^)[d+<늓57xLZRrް;```iGs*/,aP1ăUr4z:W ZTj(uB%2_eVdfUy:Vi"]rb~W[J Y,3Z+vJѰ/)5;OaJ(o^唁*eiND IνRgt);/;l1ׁ/?TU=<'cEqs1jxԷr bn,1OfSIt%~_?~?{t-!ax.\m/vSۇ_ \$FrK3Rocj{R+x=dk?|փו~Ry ~{kי?6ƯdR`^;lZV6٤oyYύ˦jk4mw;:Vwd~io[}$yxO ~Kj 1`dFp۲BC'G.EjBX>8zǻh$5Wj FOm}q֏DL̚Z#RJ{;ҭL#(= @pp;3_<8}fdŋMg/#M}R8}cU>|"x_+pKQ[uCGoJ_t8Rg yT5;֬PO wsכ}pz"[j4Š./p8[bҶ!Mnh"3?i<\edC[Y2?^\j+v uykإ̓"H ' l*i@$'H&ْJoXnMlNSbMy/҅ 2%(VK!%^h9Kۗ\GT(G3nQ?Ts–5MS޷ =bKo˫ڮӸ繅JV m+N!_l~Ј&*m S0O+W@zA7HХ+Ӣ3Wg~s:q_y ŵK7 '}}ry_yoM07*k2$Xv˨vr Kc򝝜"?Hұ^l[@aQe3\5 O}Hbg6@K<7x=3^\+yH.rQ$Zu"Iԭ9./څK^O|t/C#~ 1&& |⑟귆`GYBNL VwTəW)< KCI_qe!)vrԔWCIdjby72aT!~[xCƏS7.%,=K9; ng+('frBͧ\OeP~銽1(9rsoQU}Z8 d˻ڸ%-Yx'1UOI%*b^WHJyg@FTSP-ge[Gu5UK8<}R~_gH/ӺqOD\ʨ۳ec-gҞvXjNrl(㖐A$mDR]yY˦ц W.rV" J7޿r|Bq8JaHO'kUDUYS?vIU#ˮPw t-{VUXJ#WyQSkE8rC:w۵]ҕti^[NuC ۮ5ϙ? y߰h,6_Хň4;[l:<}}b|@BµvPW-S"_O}z֛o_&G^N̆݉';Qh8̪gG>TVZe#y-[k5|xlѥ,Osc=:Q~[BZM'4lݠUhW d_#Sru'M'uO.O&kt', M'9RJS/j[:ߕD.z@Ƥdm?Cmkm;[*D%~k]*T.`~ɨ'MV/-?b {orkz|-ȆVRze|B,@&} ~졞 )Ηꗳ?{ʮ'V aoz@o-r}n׶,hp`7Mo~^Ivy gVٹ-Fgxeug5"OM疹 <'}9/>w%56g:șVp6 jSC%ե~ֵ#D9m7-5n9W"a~ῇt՞ͽX@V[Hy)Yn*5)LM'ϧ,.=VZ=uu:M뵣GJ_UGsG7~{.4$eգ]#lL]p(:}źp`5Y)ȜFYGE3x$Awj?3d57bxp,2u.9/en-q_뮩Ӆ_*μw}+{~kͶ|Ιͻv-#Fe%GnvL0ÛهRj؎!Nm={kƪqwGZ~Qkie'_&5\m+5S|shbN<3On@c)G)T5Jẜ(ţcH#*|D+v^n5Y`3  /O^+!V񷪋^nq|"ByNئ\?hnq 1='R}T@]r;VOTxlSxZW]ҋ~l<-H*۷dړ;*Nx3=̕)b#QO s|sšOr<8X}-bQq6A2kȷ||D{lD~ ko0XzL(h5gl:d÷%Ew8EwؖہL|.栵}z%_߱1nmkLV pzǞ_[(xpޯHA=BG>m/M w~ȩ9\RR?vv>\&vg{6{eI- ¾=v;v.o&mucU҃uJkz!vmh,@sWYpQ׽Aѯ?XRU^' WcR5_\7j-<&0\i^ڵѷ jWeW9SY!(J"OKFUz럾^(}q#i~f3ptɫ/kt0#uճ:A>+L+쮇) 2RI)y^ĕOJ4ذ_hhpϚO&HmՕ@ryeo[|2<Gzosaw5Z&4u"hm 5y-eV%.~W^gw'.vQQZ.Є)W.mC6s+*;3#F[ХEҖN6 '=Dȭ}Yhe]3;fp#[4sV FxfŤy!;A+Q9ޕqϣUO|lVu?9T0QvM[UNQ%+O̻Q_E=NKpyV5h{Y|a:ҫvyxRm"YqNoZ43!)v_ۢnj,HDk?Var oh%Qh-@eg .sqhmHi\v{k{o" LUV6m?eüpae~5Yf s+#[ʇΐ#jzi/;7UA^9_V+GDVoNJ_rkU C,9zʫJaZgTGGP% tjh=ʿ(I5X$sQ[R5'/۶-cje)Al'm /JPtRr.S͎5Oo?ќہqG?/T[W}bk~>~}|&ԤݎgvQ9(N!'.&85$\ZuAءz^:(>GGWBATu/F-ڙ'[QrQqiťv;w+b|4l/"#aN|ۻpm\ϫU42ަ}͞K>]v:}U.ttsz9ls@^5FH#N2<V}p2ʰ8!*Q]}|^۴[dxI%.TJ_7i;d^Yf v%t[у;u^I˘ߵ}gDb T5;esd`ª8 /^G3Yju:_`ںA8V)|2r|~=ړK"F]B~<םG?R+{hTҵQ+'6ҭdv먐ͧvԂXeqжYLϢ.&\MmV+sӓ_j~oOm*uo$ó,xV^Vc*r~t7[ψ쿳lmGme:j4W F}ev]~?5$G|#lkF̓#>xxc͹bUZ~^Pٗ|stqSmWo};r|ն?/In+9^ʚE?NjҫMۢC={GK)c=jx>ϫS=s0.صKޥ8dԊ^IO^D|O ?ןu亘θ wl&"FXl2wqm p6rJ-x"z-k! NM8soՠ~t)F`ȏW~ݮY4AtF1_skeS!o-M$ߵQ  $nnBސ[~HOkB^L]jˏxpO6;_qrU:721x&=¨:W|<5.?3s\){tr4?!ȅ[ku$,IeT_`{eˣjS~6nDf9_I꾨a[(=`U. 5*ZVvqa$:LbQSMs3c8h:>I㳭OEc?gcl9 oOZl~1#LvmUt_|zwd΂kjorn'zeZ ._-lFJtd`-^ W8S3֥ -2iJ?Yn5u*bR5R-eJ)rArԷ{v)o9ruwᬠg{qZ5|KNQM..iyf}=eJrww*[Q:yfsӻ<䑴_[Lz5.?ti9^ڕF/{jU]l-݅6߇)4Z_ż" \w4x}"qer>qiQ)Ov?;9睵%?DH|{kޢ?W6~*fMޟ\֗㹅&f _Bϼ4Vv >8|~Nu2CoN/e-Aβg#9p0?o{Oo\`dGW+CNs+߬{~XH|wU*њ8>>}жAÇ.W <=RW'} (J}$mbYmջgfakX-m:}˸`}(y?U.=dcyC:緢FW*./Ιk;Xn5ߺ/a+j%Gf}ňᾉYwRܶ.ekm~1~>ύz=e~^JW<l=yTCJM^屣^!"g9clt_._teC&_c_4 tŇ@ ;o< /183DQS?CӡBX4 AH xI#ەMc(@ z>>HI1h@_+5H} A~~`t xx_x$PS/eװ BlB1)246t1773T776,T5 WO+TT4+y!x xxea;C ƉWiSA^Pht_NL74=H{3iMA{Si~=O:^. a p o@/Wdr ғ4譃bN =?!4p)7~j;>e,ɘD!$t K^Pp00GP+xW\@sע29(p/֚l9(i O2<Px1: yq4:R:-0؛4סހW F=|` 5wՉ>>8讞5 HQWQ?0*-~'0%T䵉> (X3 ؝Ơ ?ɛ0@@ c¨s6. M,QAaApt5BCiqA:*ȀqɅ,`w]ӔӌA`\}xyeB0aLfyAE W'UIr#!p6..)>/\7YeГuP h.(FiW0Ho(-.r_RմaUd^ބNMr p&:hbfj*恟PU k W RW_Gy?e3vUL(zG7q>? ~!o?G^1o ҞQ@ gzf i /W9|O|t "Ũ3]<#/Mavf,鱧 LSu =F5ȟn/DOTWLyhZgaCk蛂UWb0;yj"D*S{ө>4;/dS50XZ('B8> v;_ A%EZPVу^ 6SARXqƖ4? KFl89Spڭ80@cxex j& RSE7GqCP4POigjlg˕'OD~`3W MFLD Y{Sf$ rPD0MABNyʎ"e1C X L j m :'-,qePoR؃`3u儺B.)Lp 7!IOc3l }G*Mь(?T!L?Jq33΋S45+@ q T"G^[LmxޮImv@$`#$_xx2#w*h'͆]C'+L4-͙5| OOoO3 s9_GL?3㌗Q>? D`s?vGƃMT{ה B,Tm9ؼI}Lm+OgIboʸsUUIםBi8I)555|ENavh}*Zg5vΙ,uOX / @T%B;&Ӹ@?k<d@ˀt_W?`AvOuzLہki4p%@/:f<$axLH/`P& 336@z*x;JY65l?^U (0RL/'`&zA@ĜU;~j|@33ĢQ$H-韧BFQ0xVQ>_Zj( Eoa@U&| 8xş%@ }*8 Xx l ;S6AH@6I8"@ãF.PQBdOe*0 "*,bXz,0#a*B* LG(Nij`j5dk PZx59Y905(׌$S` ƇEB0Q )Hm2ؿPb YN9J, g`hػC ,5$@f7X`!-v1G3; t z<󏪍%IHC>2kJ`@H,2 2rdgk [@` `Pvd~XK< z(hMj5XLPdS2P ,Z `etXO(-<3`G?9YTP.@@4R0c(d8 c0,:00qx |ҟ6 D Ka:p o?Ƞ$82L?J!p@/frH7hVL8?x  ЏB4 A҃D( ء%l8*pHT,2ߟdPEf@QXJf|Agw,&@!5@ZB&'i  nϪj DA*uCa%1x{&(L? g, dDZYPn `,68<[e2l9N< Qs` 8 &b)=?H[!Ϣp(賓dLs$A,dYHKcHc&U0qd9L`h(Ig@LǂaD%hXМH;BL}"1@"brN=ٴCt' ª,$i`=s$"[t82 t'fʿ {럥P`pX,{Q<4l\$pA+$W%ql)q` hYF]X\0a˩B(c ٌ# F$hكq<d4 AxĨP`$W&@i[YFϒ^j@o^!<"k Y0e?ECl&9^rxIoE@I.1fV 'M8  LП`[<SШ!0[܄ :8 A\h4< YVy@ 2gP⟀k )F h"`X@7( ,̓_DCm;seY /Aj=OG9W"{0xXcԬ/ `:!񀕙MQf'a<0gJkL>A*F UcHC~+kbp b:.4qb?j:Il>4P̮\,a;68AES8<%B@bߑ,f.9B""kRx"S0O C hx5\& RxWeK03xEfKa ?`n 0q%`&L1k&fLKX5 4dh, !!5ʶ<[d:€;XU7h!L,Uz7s~f.-;&'9ր) h/f4es\@#K4dO2.Kon*ChH(l˟DxJ#TxQ07BP$Vq!͆);6AJSfhSs dŒ)Lb[%@vB24@%<0̸°mƂbYItĶ&b"+j ;g3wFhT(]p1<{̍hX06,4m3lΰ~ohi˾kc.Z3ޓugP]x%JB~ ǎM,L ͌|1Qy:1g Dk )$Yw#ǐuo@YenjYrpmޫ!vbNc# sKƧ暈,L-5'fϺ':2$p_ t;NbX#c6?<+a(̣0 28Xɇ@DYiN\C:kz\3=/,ÂΧP{6yT1enry 0JsRݬӻX/@L x-!#xɳ$ 5x>8d,>0=y`5Ǐ2ҀP;ƒ j3`g /Hϖl$☡-00S-;00n1ѳcjI- ӊc[gtA`zNѡ/Hd}x(f[s :`DfbM5pvrl^<8qQ-9 {f0'A`d֔L<ŕľ '} $hT0WoaOÀa[Yu(35 =n4&3W $&`JA6s z<Î̠ \j"y v0Vf>*NfY Cp$v3<f_? Xjz<,`aa2@60Sl.Hm2s ySHxvn|3&12$K ~45>3,aM|17Za$ȑeos-a5"uY cA!N?#wdY㛃aQ)gqV°mOsA)f1k3>`OOgpp66:Ovd+X6A5Z%%Rf{9X,M2̢l筘Gƙw6Y# 0 BfU0h9ZmX> -l`f?|WLaBQ`fCA:$$,,b#!kBC91y7~7DE=ąr@ǃۈ5ٶž6s}Q?joG)Ps'0p&x$$+QV>wEC hYC!߭2S 87!RM X\Xpa-YSKhc`yF3cc+ǃ<ˑ 2kW5  "΁xs@İ/EĿF'gL48uo4DD@0_M} 44~>q%j<;V] 3σa$(C,KR4KքvPT8="P2g#_Ja I`S,a;p*c"&vc a!K,/A#񰯹S(_wk$aC i;7DA{;ge! E8β/BSE1<(U4:*Shֳ?`ۏXm*~ x&)Xߵ_jkaU_ |'0☾( þWBv*1˴:yX˪䉐n[PpC,PPbY\<,%X$.$`{˔5 ^]hQ08{zwf;#a͐4n428"D3WHFL '8XӀd<{L7ځW- 2>X2E9:2h!U@|J]+"e1{f^,kU$u*v=:`ꑅB`meO\@'#ic Ȗ se |(nU Xam&> b[ ' "|srt}b _%8Qm=k% f ؘB^20ս\'k@ c@/M1H^A {5Zg-P(@:? ] $;WTUݝ送OXa`SO}O>”VSN f9i^N30^oFO&ڌ&?cl-XwB^wR^w\]+Sw`FL?R]ZL篿4TvƖz !>SVLP̭P-M` *1 rRAB7d9)  J6PLuZ&5_rQ4@/Lܷ<; OOx7E$:3@h <' rƚׅ_ΜN6 pgdɃYoXX}Fx7rfd]bC`1D7(3/K4#W. ]ȼ@2M5>ge' ULԇ叆ft7>d#>p+0+S N5 `j&SXj6^A>2Ę)4341MjHC&9cRi@x0&SF R]1՝Jx$Fqa$2ރ`HXjJ?H}pWRA_EcHK-ޮ@=?@2ޮpUoCAB@PBsG\A3T RPT_Ef@%7@yѐ K1?F1^7&bT*CcSKsS}CK;Cuscks9萯/NvAazXS{4U:͇@zB8?t蕷[ps؎Pq0P?hr4@T D2 >@ 0`E{3iMAKTDϓN ~ဣBq`t41\41yBht`n1'MC@OʔF&'œI4ҙ1M, tz ;-b iJzdJ 815P@ v#& +sP($d&y!x>>0IFL oFJ{ӡ: 4@VBCCQ~( :3GY5 HQW$#q8-J * H*DKW,Uh Q` kn 8&1( \0g hbNO\S^!4d`0 ?Jw YUAK.`fR&D~ :~ǹńWO㿁 0 2f B KfJ*W7nS[{iR}\ ɤ @VP\kg0e5nbA -LjK ?Tsi.VV33k.ֶ7mkAV|P\sR|@o59v"V N8׉PZpÉ_m9 HHZ1~Kf6I Fpjt7c~hWojhnr>y:4`_dmE:LIXOٌRۙ01 4 2%c4YGЬu'2?TZE2?&`AOre.#NbT` 8> DYvd)bTb ';xX%dzǃ@̀fQAӮl7E07u BYuDžee- ŒL%ڸCDZZq*CN0Elʦd SJ  :KX3E^Al݇90Q&4rӳ^m"W dOlYbv ߙa|%aZM{%H\Lg*ײex{ɘ!#:#سiǞ$^ } ^HȘRm?MCh4f!8iD'؂:13(0O,t>MH|]@1a_X@X L ٤SA4S\1pցnajX <ոUsNp wc> L, ?-Ð7|4 бjϼiSS (Tɫmʌ@@NMy sndC b E@]1JS-F$ oPÑ[<^T!wP`8ݛ ' ,4 71TxL63;2x" C]qF"5} 讞&hGS2:iT/hFk@tw 0w3({&4Ȩ#a0T{n4&txMpDA!}C1 LM15ݴ፺jnڀбtt6 x{SiƜ M,2<'`-%A}>O C?\_@:u&4}h'\n`ohmgWd0( gaZ2jB/n/R̐jybP<5ՠ_=.rM6V# `,%`O a-!rz[}C{[CC^^}+K#Sc\Y \bpxy - >n0@`owuC L֘@` q@4\U*ˆU`Gw؏g؃pu-Rcx. /sBa yy -\\`jN#Ldeƶz@ -Am̦4K!&}+ k+;SpjtyyM-Zٛ#c0ɔn2tlJOzPb;+LI y\jg55cךD#xf:u\xYPp7> uf ad3Ԝy\`E^[e+ Dt'-ǟ?8gX'bj#S#bbaaaP*cmC#rrqqq̝;o_`>"K .]&))--DDFNFJNBJZ 4Y4o")!!g!0CCC1GScB b9 #bP1xv1%0Wp9F{k`T *a[G^9,A pb91\z2sбQ)c>NBGpbGG,M;׹yF#] 1^lp B@ϲo}u9R YG5#!=I 91%V%}iƷi^(}Vs{]V*]#^˜TPLh_d|Gyb)-!T vyX*ZxwL03F}_%/-rYjI}K5CDO_U&pPrg3Ⱦ>u? ),OC09֩QC9ERA7)Zrs~ՕHf!ޭ.i7^An qjn2ĥ7SDG8)5bK^WWYWߓs ig[3,wS#CoorS]Y#1|~&~C'B8a>7A2T,c9bLVB?HG[&r^,lrbuQr9[+l*_ m=@{gvtʍT WPNJ]ff23333kfl4J_· eByNdͫ8Hc_K>7od?ס Ml89p2I CJlt!d1nM Za/Є.^8M.WGQL&Jn - dXےh @;;첱tFG%)7̭!9jwy\_ U ڸI4YaEiM$y(\n@}%"'h~Ρ /fK d`́dDi AZ܅!cYw{X(Ag@qd18gLR!=$:.~Ͻp2I|)%h" }pn:al6XiNvOS#2~VNh=Mn,E}io#?D]Y|T=AV ^-?SUev #|X$fe,WgH4 "-|I2`<g pC%dxm?HCzĔۊ?QcCq 2PBYyaP%(a$t+ C-N wvy219¯>"J퓝H0;I:i-Gkژ: y qFAEEs#H/ȿhXR´{J _D1g g,ze$aj-j(jɸ.Z>&iòڑb 42xLV][ fG.iZgV<&ijb z-+;vrHB*+&ENJ7"4ڨķqZFeDryV鍇Zly/FdqaQHP9fݼ@&A{raKCC|0kPR/ۭ`,x@oHduH cbgVsQR-#%Jփ+Dy e:h%A?Jờȶ$"# %ϒ$:i;: EbFiH̓4 y"S!y xܙcyA+ e :x.=BɳøذrTr' j"b]CW8%V6Gms~_v&"z_& '5 zp-! <>}gB"͠f!ϳFa~#Tx°J(fa[AR]Z!Jt& s}E}[D%]mh4= VHdRXJO;UP{n-;wӵ$"/`0J8 )I oHPb7Al/z5x(0eQrܶ5Ab0>0Rϓu [-Af p-5k膒4Әkl}.R!wF̐Z8g c^tLAsam:^ >*f&Dm>I7$ ?wɖ@v2?6D D ?j' y~ʣ/@]п-Lx!M3+c% kzw%;YK99qdW`Γ^@li Z=Iz[xdyR1[#Hp_ ~8'"Cc><;?ؔ\P 9#e7ɀؓqx͐*tH.OlBUq78klqO@/{ǏtKG06=' Z'E72b6?ӕ^ b7!n?󿅷=#$C~?ʓ:2MImPfG90ڹL=V,{ L>S[WU+7>܃;N9a=04/\Mͷ<Ġb:S%q,T:WL!;l#gA՚At,}[֓|U>5$w&S@A "Kϗu+qot%߹!X* DݧG%e(߯q*oOj!IRL%,zSs#X'nsx@%ٟ˞rB.2ƄAҵ-"L0ܻHY&Q t&SQV3*Pgiodmez$B'U5{y$:-1n^vOkҲ/Vr=?px-M D 4mOkdGuYDC/x6%x'C}E9c$5rXy6N#B8lektn-IU,WLt|[pA [|ml"nz@G^R~Xh?\TG ēY kǮ̝_m8KɓL 6u@IS3=8_ГM2lXk̚٪yq6~@qЉOR7(+C!]wfRqOr4,x o d'8p l^NWoqE}{XBҌNk*Pp3QW9oߧhB[f\`بm!Fw&bSHXyu-_pQ>Ya@=ص0[\LF|x}/:~щF^azU'y ⊔_h&?)iBٜ$\3qr®\di뿐|쮿*`.`cct1Rn.d 5ɏ _2N_ouۊm;c[/} n N+m%Sӥ3H #{ wqD wj%uW {qb{{ %dJ hw'˦*I7PʏZ2Z"áLEQ:G 9PNYGv>)UQ7O=/8h r1x&_Ty8Kz10ÁKy)~[-^ըI>35&ƩeRQ,kĆoH ~Wgj2_)3p[`.u'l>bI'QH:;ZGuKD&b 3M` IRJ Q=14:t@m]n+_ݔt]?>&Awsl~~O=HCRχclR3/M1bUFY\ yFE/{t&82EБ>1 NQ-댤=j[{Gk|f\)'ko%֑<< k4]ŋ 0`ss""&ƙZ"ucžJ-9t ΌJvX/2վ]}k1h_ߧWAQ G:|hH&_+D8}{[6 {'DF/-V9aՕ'-̸4ȌBlgA1ЯvG8*,=NSMQ:ʐ'#]"K-iR|16DƯ?]n3htz\u@'H4FEIV9MgwpÚ*b}PH|]t⥙jF^?a?܎~~*@Ǔ;Oq[`­=>#u'IWEή9Ew- FM,W0%c{G%s)7s->dDDQ)\/ԎPQ.8uycmCMC)&fT02x7lph3H2!{O "YuhyoS87;{6NkRJ&y5 @&`"']?%#֝1{WࣷW72Ҫ&GC((q-q^6(j~=z3to@?z !:Ua"7o1"(@);$^{KtņH97QdX(uYzO=es|#7XǸ)ةg|?"slTE,0H&#!b, -LU#d@TY;Og:ù캗sIi?ypT6 ARc+3lx~BILMSűRFA UNOJXbr."+9#4^zRE4^^?Ǥi"FAgf_eGc֭FadlFrɢiVN1԰Ӗd`_8c\"ze\.0e7(_F[^uke"U!Г(8-"ݻ,1쐕%Pk>ڏ'B]קӵpራg&;ݜ3$xPwbP}cE+2R`jK)2n1 %NѾMBs9"5;ϵ>UO#|1Oj9$MWX^JqG<2b@`U =+>l Z3nLn>yYwb]^]2:¹2}ٲ2+~9Q%ǚK+m1Ā/>D?Od o4mCpDdl/ jPq UQo`CG՚:G]NY!Ab<="iOZ]ErGJnEk o%jN=scpoܯ=1i :Ff%1aO1)'';9nkOesjR%Z⹁ soPVz4L ` D~[[5+`EQKl9`TXV͹/=9ydp7!֫[[Qb] óٍA qqWuZlQ9[mXlйx^ [6CčϢy'0wx]F`nшg.iMGt[LT0cW-͏ ;f/Lρ:qڨnIII@ GpOl2\3kzLD8l_ 9BDȾB[b(Z[8:ƹ%0spM)D"0fU媺'?w0CGAFNLJ Νܺҽ Ҡ{;ZŰ9qHmLi?iXY'$#o%vU{K08=7:RJ!i~Nm?o?y#&qOY/׺Iqn&\;`Z+Q; I$d%s>k2"~'I`*%|&f)k#a5M#b+Oâk{"J/3qbniGEJif^5w 3}sıCI.zAgu1se6{rz ֋$A"ԐRx9Dv`ydRnHz(Dc5m@ $t!v§8UqL:xL|[ϵe|X鐙VxPPS/>f<"O!5y;kK;Y7p2xBh/6v&J>5<*J-G[FYҞdˎJTp'- TZ!OoءQ uzJ_/wx_1(SC|:vHS Qn o0Gfz eS@S?9Xr~7}LT|RkӽW+2 X_k +N fuc:XhM gϟ!YCćnnbEur ʟo4;^̸TpCKh-1%6wgHw+v=TDGmڊH5_amqc_, "HFYfg r $@,~G/=Eӧ7c$ O1Y fQ,^"wWTol < ҞV* j1pp({1HOHTfua.)?w'm[aBpؓJK*KU~,;m7|T3݂rD6)Jg6a"zB*ky|)?8D]4Kq"> ~IoEJD. iv휝lQM@I1~'W7m,͇ԥsӯQ_#)u)Ӂqܤ`ի42ln7`ݐ*ơUAYg# âC3ν^?}w :ȝ~Rp$]aKU\o2 9$kԫZŧpjv8 d ĠUwZaǥ#H:S*f\JW/'#/(,m=~ c8p28:%!AaUTzUr#pT`n;QYYnvµb} #D櫅|Yfd)Rk*-;R9 V3уIt3SᗻyKͤ+6t2=S}+5S}5]5I;| 08k,W$uHL ))j\ MЎ)Ԯ=mX$>ڕrhouS?\k30'"8ZLo\3`$:1;-d @3̧YS15 0QJ)1A_>/C_Dw[ׂ!G}Th(.5mlyYmgpXJ52H)&.VMb7+RٳSB'T hεTJ6Ymv:[ˋno=MByF ‡(x}fIj/^]25ǍD v:y)۳1"EnR \wӺ'_bb&X]pnY J5R.4=[hRiu+ϩ}ޣ9z ӖKM3rv_v.e-%RlCrki-C2^/agyM~W(1,64q5RʣF+CHS4]:bCzFә XҎ@aZfH+F2צuq _Ujc?V'oT][tkeg4|z?^pv?s&tE+Né@plP.ZM7|rLR!| A?Ou^Ъ+Q,*=Hiy8hIwmiѨ6ee-ugə) ~u蛍Q1yI8"Q7C}sa(M*k?ނ]!3ͩ0犧)p|06 " 0)ywgsT *"RNJ1O+DY1fϮLR>Xx]r\,ܜ^$DkLʮ^sa/Xdi|JI1\ex{.TK烳X J 1̀ޭ't-ro?2 q_ʭXg]]҃fHir[b zi8чV34:u+ k'nN~`g9Qm5J"ydCӽ׏c=rb&1;./YQ:pvu[nd1躑Y)bCYM''* VPyjLW6o߅#i`>k[#:3^-Ú&b>iev|fF5P=F J=McnttU|px)uSu64uS/3 g6#mh&:dI,a!A;ߕ=Q{X@KyK n&2?k rps2!;<2~M܆c :L.uo٭sLKk1x:\Izq%gnKy# T%OKiAQ쉡>2XN"9^D)qψŅUl\j|.m\0nήCh~c}0ZWٔfo Zn5\kKnMD՝|v *jjI8h;Te9y@>>sA?U˰J6/f%+ !E %lO)0U w-ݰ!IARx\TtuƗsծ9`1*;y(3.:mIl"v6b 6)ࢀ3\5:',{ ?zܫLRDR7HB@\C@s 83`|'|SKF=v7X<;:DYhbڡxat>(_~j#[g:6:嵀M +3<5ɿPC٫QBڎ5v.^/^؎,=M7bZZg&J A}|44sfݳ;f9lYtHRK&`DJ-p\=b^r#J%?-|D2oXaukk֞iLtV-ҭD_hG(nJQ"0yYp2 /2IY m([XY7KMN4] vuF< yT~(7F⭲&WG f1yU"2G$G :X-!$(v-[)Zq`JPxg.KJl1ß%I$_F9ҺQNPl#xT`}b8~5O?r#M\\ҤzOS8aa++L -ZLY?qoQ Md+#Gh!eo!gڰ uf«LMa6s T8JH{Ʉ{9kKWBd)~Nk{K"ds 3Eưf@l'r6Z[u&@EN}v5ㄙt xAq#F 1ݸբe)SVı_4YF9ߟ{c*E_ g< M5m/P}A46n1fйCs&Q0ODi4-Zx.U0ϔci'иwT8Q>N.c1LAXn:Vlew;?ʾ2XQ[gG/mGҏqR`iWؖ j spXϧׇt{$U4Qrn:q'+T(J>80=F*c/Gꣶ+$^e8Xg0vޝrqNo首AZYYManKw䤖E>Rdd+Ȏ<_S͈:ɖӬgyMB1جpm,pF{~_bk%'~p #n()[ce}&6dn28ɚmlif1HxPk4W"$tH#˖JD'za8(B `Zt| Dzmvk)%r (Tƚ~ i8E%͕gS_.+rΰ;[SX.}wHd4Hq7xLA/iq?Rm͆&h|!vsrnӓmh7Ħh8;W0wi 1;XVYd9n$gν6O4X9F&:(&^Z!]X:;Q"Iasn G]Nۊ+ގ.PrjjVx8gnH@AX?ʒUp>pfؠзEoHlΑ6oq'kY<3t?{lvb!_`kŪ"2 O>̑vO]\c`4 H](aħ8062ǷJ#!0a&JUDMc_'Y,%~Jbثr%T)afb _Hgw,JUaZGv :cbwHkٓeҮ5X.zSGC8*3hlO* VM֎WT +;Jdu҈p%\8D^a MgU d-xHs1(qX8:[7a{ H;C^1^>K%+wh/[n~#=(.[9[*:j (鐈6ǽ>gvJh YfpU9A0wzE`爋LM{l@[6*I٢=.Եg]/>Uԑmo JXnXw+wg?ifq|?6LԀaΥBOObvYc_0ȁށ sIcy$#G6x!phcwjq0Y֡c Ʈ/22|­烮BEjHeP![iݔ{҇̓J [ֺ`>TqK%̵: xh,ץdE}I ^d`U=Aiwt,'utSUZW1I2'Z$P/0~Uo*JZ*5H4I.|$Yq5$L;VjU( j+_Ua|$xҜEo@ )__wdRsD:] UoجFnx&cA<\JZIۢddB.ìú(fCpoP*ܤ>OH{\?y+/](.; iC,*Il.][>N vyQQRRW#1*|.>OawvciF i-&,JF;'kl|5dw I Wq!NBXqrIt5cQTjqZǮTƕojFk̽z2ϴ4?myZҏ繊:m-9%Wi YDs&ɠaAVenP*qsii-i`KƾAD i [#Y҅Ϛ?nY&8;5uP@;r%T⡖BΦ9w:EE[\d*}30mtM,`d)Ub-ntay?7RUT_4RνA&MO3փJymW 6-PۚL2:ޡyQ\jvvyNѻ7T?n"̪d!Ϧ* piAZ߆S fS`9l.#Zb(,XY&*ܶQj?wWdgǝ[KcW|3FK$$@M~2o4#tV[eJ[yV6u;F[?Ali! cq#&OJ@*q;" yHZI-ܤȋ^5^x6yè#B|5@l '11' z:{,(~a6A/\q\|\KZvuSiϱ'ʡ*SHp X[BXG'LtcA j<>椆Piv#!X8 qS?-v+R~ juVQCXj~t3we֒:T!;F@{hMx꿳f-4XQv M ۟bey'"l5T*T}Bg1`^kn'7W)I=K]a2M;~‹;B{?1Fn-J|B3z[܇()>o~,Dχ(]& ^ƞbZbgv&7=Sr3 x/F0dD㇅ LƑsFWJxܷfѨ״ =d3.G,Er ]cűBK%m2ϱ:^FpeTm8+R;NTV*xG3>2aMV XZgBYM7vԉMx Bk F?(='l_|КbD3'L"bGVtYOCAnO0P;3PW]7spF.Y_Fm ^3ދ_oVn|~֚ .ٔPv`#"_˞cq@@(>rj㴴.\Iܙo#2d,y^% caݒ-iϟƨ\ ?=I+ܣOd XтEmRtڅRʱADx^Ŧf._noI&0EM+otOK j=WH^*n` 1'@o5^?ʿg+ǧh3yh=3BICcs5 rrQٸ~R>߸\xN{]u [ .I:^1d#(hkLߘMOIY%sퟩ\ߕٛ &$'+ڊh=1eЏ&voӻ]N>CI.Z":zZhDT谱3W/bkKx{m5'2<}_NO+. [F{@%SpflHGNB5#G{Gk9`0$Wl&Mvy$[MK`|Sz`^4]||ݜɾZ-!=G H9 N\U"*IXhUG'9(;1RRA׭;s_Sl>MU`uSפJ;ٲp,p/F%O6*V^B{B2akiH"v 1c'*6̷cAˆGZ* I`񇟲!!"ҚU"X}5#v5!Šȿ !<=2O.1zh1~Ex)w691 3 T6+%(. n,%H!Ep֞rfU4 ¥sqJַ"?Hē>&פ.F/KuO(ZR#O!;`%f2Q#J Y6xG` L$~3^+U1tRNK[Z0*H OHLw!.!Pgzoajxhc(C.r%&mAg|m56٩1 ~B3FHם5:.y,^j$6T&ݐ:?[NUTNمV*LϵfF'zVKJq2ǀ>3,7z#c~U׵DcZTpbeśXd{v@862R!uî/ifA9C%?m~;*wCE ]C)qlyo^}_=Ii쿫 "g@lwHHkF:Y1z91yՄ֪j$Q {Gn,ҳ~[CL/b߬;V{Sgu$ o9#є(^K 2H &k|M˞G}S8^c`2%O!p睝 GZ V|3: ;* coÝ8dKar؏j_;2B)BlbIM癓L4cn Zx.jC7[jJȐHQBq҅!z]34 s#1sz:7[IcIZIL'xt Cz%R^fOqw'hߞ0O+z˄\n7sʫB|&\J۰@.bGc{J2hK(b2wr%VfO #5ln͋ɎLF1I NWyiچ_Zޘ׷閫%o8"x:wn?v/e:OךFPޣ\ʫwwB(`stm2.$Z{X[DF?Sixp5T*BA6x kbpfC0MAn]fG)CzB| D%Ƴ4dNp-:n4D8 Ӌ*mzbG< m8X<4*aOV6..$$IY O3gvpdr*CGlwwb/qC7zS+oL$J[M0YHF&DE&R˒ɑW M|j$]c5\\pnQXqEν,p66$o]f] ߱e=\8jy DY=>i܎EףJ5Z<K?J6ͱKȅ\#j( o^ëB@!uNHe&<2bD --zC|?+nu캊:55ݣyÝipA]-oi ]^Ij[X&^4?r,׷W(dx3 lYa ;n}Hh3ӫ wrnEnkhD.fYRtW8؁M))DOrWeUxRmXZ:z@AXFxN2*YoDŽ-ByE`X}?lDt4iTN_ddJ2R-jθRY:a1TM[z05ّsԷ#"o1 tTX=m]Ez=S;!azJ~_DP%qd)8wp 0pp8hHD TĤtdԜ?W"*n~.>V6\ \_8480 !P @1 )Cca^;R$5h8a$$% ?G {á@2 *cAIa!$dt,oH xnF0*A;n؛W6pQ1 iBtPWar"E"$0 %K[/*@Ǧ]z1,Xlx{_*0q7PlJaH56 -W݅Lo7tlBW^\~'lc%ȸgXמoC[ڬx5'mw1d~H:BF;جk+:JK'KMf꾝(y]rY:b  W&1 'zS[l+P`6[Z(nk&H`>Bb,jՠ9<6`H=j^בRyHWYp hck/s|\t(ݣCW+l8,=agt6NڬUBr8uw.)daDMmObUj!`0"C-3Npѯ:d!pZoq0ѝx*kٚ'I2~+H"cdhZlE֨s ^ -?Z>;7b/ts$@gNym wV+_dʉBig@,-!̀Q _ խfNisv.7^b}'N7`"+"?j#0eQF4`,g pϽX5Q~x*ɚ7\p ]Bܮ8B,/rV3߿Y  D=m3ەu?Dm~(EWm&0=,~, QxBEb;>0?v8+oIlFM9sjb$)'T !q˽nzfuWKļ yd`` s6kփg=̇@KWxmld*[sUUJ(y> 4!k-/5`@>>s!=6^ &tȬ,3p1\+Fmlī5C󔜷+ h(!/ 5<~!"|BeTyԶqom{&(>Y sOA~t%x&:HdME; ujZnAdr6"`vӟy3 ߾mT)eNTPt/$Oݟ*#'@L~o/cT;)h.`c|o"wR#!&_>u*L[it &ZxmqT#BW|;oT0J Z7/@da@iΦ1Dp~qNgX7|8.j:>`Y2/3/: vWgpL $^K7 ? N4|9 P2-_'Dtuh0=KVFF,8䪙l6[c܋O'lo?;!JԊa^ zsŗ8CJ ׹q%RA%QپwpIPig^ hzUL'-3a|߹<BԊ>sR.Pm/㹷N}wo6I9}CTSJ=`GmCֲ8@=EV?7]M^񸟺>~O _8n|+%21;ptΚ ]qSkm7? &3n:Ĩl}=+ ,Iş?lݢȹuK39E"M[O..0wa6=01Q"اu^}%,;gݾAT)CdϼfbhfGJF#Q]T/,9n Y@x 9k/^n;;m4Olh>|$I"< Ư9qL2[oV^m&d_5œ2i\d}Z_57I4P9rsGVayHi Y杷bK4|N6(64C@B6#zx-t[I#g$+ɥ]}Z Rӓ}3d{wv*)ƌ)$1e*[I8E_ v)lۅɫ?g@m)llJIcK'{YFڡs㼸'/?]k ( A$Iudq@T.K"خ ϕ-v=;%^O&͇W~?Gm3dZznbXjwbBsGZThCW791D. hy#_q$1/5(3r*a=xׁm";X# K˙< x4&G9KWcXY# #TZ{'/NKƃ)+h8~xp t NΌTPj\ye{ۍ6Q$b=I:C\x'V1W )vH;h6'P{ c{8%o|phL_WV; 1z`bHui٬ _>a?|T)/a i[ۊ=1JcѯrE'5|#~PQ`VGH*Ϸ; WAȅ%o.d[W'jҊW,2|1^<`;6(V2 R'mlm4C. /j /_q֢6zBzQ9UUT3݁)~ Ԣzh;{ds/%{a y-?i3),_ ku'Px4N] /06BAw$nTlݻ\z((NHV5l:Vjp{M3pUsƔ=nt=.[fz" c1N3\9t|n.!ǐ45۷_cyѳ#Eu @0ϱ޷IIjN:& DU Ʈ!Ж4KloZvr(6z(bvѲN!T$B_UĹN͏7aVYpJGri3qUut?@ #C5IhMx"infYm1ȊN&O^XZ^|65|%o1V} E)vql4ҿƪ\DʣV)h7 tr;|4Vm@T̖c9>悍}aC<#=HЩJc;eS^f'0wS}AiT^QOϳqKNñq0`=FM{ uPL1RW aHɞ7'=ϪZ4]=WAj =K]BWl[9EFK /GOQRI\?H}FTZiu_-̇'@H;ܮ^JnH}Bo*coMF=.6>$cG os-/ׇmS6SVJSV'٬#z~.CG.m\`2FCGnW>5F&ԟfm %]Vs"ngк[t~ɏ5mX}^m9j-+-Hs\o 0"GYtYxTߙHn`61rAR]ꢷw8ڰuS1To 2"?'܈@Ě[NxVɞm"lw=cD*W:7i[}j'Qx |WFA ,[ڰK՚l;ȘMQm[ս \a? }LˑZsfsH .73#8SwǞȶZ9\htlxs{u҉7W2߄7vte!rUbڕI1v:H& F[~$o3g/ȗe T7<9X3] |wy5}]*}HZwY14KTĠI\2$cS j:tDD"q<8>Q+s(|UOx>}WMu&+|Q%hP1Bl5"KҸmqhL5:[G ("lS]@H/m[p6ԛ`s,Öe*r/>EBu>{;tFփ8m9qh`RJ\C,V\-BC(y\YN9ׁO `t;:OC޾L`$htwb/R`;gg;?66;֐ P(!CH A-0'^ĬG9.ӵtnr~fέXe>w>bc?'9'X~.vtβm$v795&WDΨFf,-N7È{=tNYNZ q=bky'bgCgYR. -/K>0? ] 1N@@bm#JX cv t0nb_e)kQh%Sg>F%DffCh=:{ل\*-S]Q@O{}Xp^ҠHhA?}ȥΜ/ GXoEZJnyagO_'ʳ//Ⱥa#;>f/dET%+ũ}ϿUX}#> 贑eVI'~!v *q<_e̿Rzy{T_RV,]2\ }~`1+ڝ?&p@nwҋeO8:25$]wS*`f  a(~TV7ѕzS_0aO< ~&v,><]_AJ:y58@"xg1J^U!!C'S~d2ar|Ϸ5|> ZФ ˬӟv@K 'YKNL]R,/yKx?Kzek+ ik_c}1R2F- 4*{x9D>+I={[bq.쩛'޽XF f]^-pSݏQxʙ:16_έ {DȚIѨQx9 m<䊑yzazv8~(vV.sWEWE0u-˦Z6zb,=6Wb@Unw7$ ~?|`DRXIҞMG'MFcֳӵ]l$v  I^c6hs2N|+{N8A$Qt9Tg!\4\^Ju'L}X<.Rc`"n^+_.zwW(;(w8A1j_:2UhAnB2+l-wɧEݒ$UbK;ޕ=B,y#͂a&Aj"kM*AW +zbK鮸C$CVcc+Cf 3#nFtI*ԥFn'q&~l: !1ő H&t:v$ghQ@@m某j'gl GY9 (ЦiotNVѵ2}eԼXV?ҍ{>NEN:-iA ǭJŬd^"tB9L8͗{O&MOz//LuRw:/ᦉՄKG_!`O9bUril3uRONX`nُy[ldﰅ,Q*tPDؼJ/*>U\Ja&PA` "{[4*U DD&q.vs*C:λ+':⸊~! ⌥0?&E{6n 7V]7]MP(:>.R,QLQB]CyT&ou{ ^E4>q}0<ْ܇lEoW”۫! _Kג讷LP[4v;θ +[_Z9UU{FW ̦R<ͱgS;ށAny􃷂x¸]Շ!hH53P~H 7EPW`"c=@ی_h̙omhelڡ\ y{E]HrO=S5MOi'1žc/azap'V^k@ @,PHp"b`{v/(> 5?3۰%y:CVny1YdE9bN6e*EWA1d66N2XܯwqB!dAwT;- ]Er;u@Cho[ŦEx 9o 3@ 7S-5)ժرk^xjg(jolJ|È/MP}xE9;6q5N?x֡n=sq8Wgw(wɇmc_[Rr_MdcAmqB|K{嫖V -2~Iäʂ$h[?g];KU\I*YH+Cf / k=8ݧ *$<=R\S kipueH#&*Wɡ,bjC.h|Bhb%ʡY fm9Z}tzY%Mw ̓ cmbV.EJ?7nMd,QtF]RIh1CƄי!+]yƌ VmSrww.aQOp_)w̕/^-F){BZ,&hqqβ?ncX\'M|v̱ LP=jIGyeP5#BD`6ӗ|Z~7\4.:,Em汪wuipo@ ~aSJ5%O0cϢRd#t#|A@+5 .>TH3jF`Gͭ> xA~P9RڤDs;fue#g@CJ]ҺƷKÀס_'X^qƸY#{%Smr=HC0zK7[d/h@>8xW3нaUi(IZ ܄y8Uf>{Uz{xCwel ERL@]ߺD>7*G`0g|CX/'ZsTY8`n؃s8AiГ7"eцj&!5_=6sTX`u_QؾKrr/MMtؽAj`o:, @#y>5ʣ2E#f B؍T8oiV^BlfzB&n@F~-:_^&΋LuGEdoADЉ,F1\N%,Eiǐ>$+v}PXu2TOo"="k=u`}OYNl'Md1ج[y#֎̋2EϙAXReB){QKc|:@dY~_g#2n5J~8߄HR fX6g0޵g:cnEYXJZ;buˁzHOp Ufh+)Q⠌'=9̉@p,Yɱq~|@lbq w$3&T'L\p0('SmqF sƤC j˸Ґe2-2 ˍe18=N})QE,~!B4hj4SԶW~Rk W\2YMz8bbRMT~'I s] C{2'aOמEAimU艻q(m7Gxch\M<֛,4Wo:5 7<^%DNU bt:|[&ch$#ڬ~7#&rJ ~Yr 6pB@_ҭq`2XZi^|wA4ّ>)WBCW$Df^ 9K<N%s5nia bkwOҺ!}I"N8CHoT)lWS$HZ'b7u +cS06PXȒ3+T)5?$&ph/BƖX){i g?MV?zJc9y_uB1A)+zlm>X}hXÛik6s\6P<ӯLZTiU_T ~ /p*JiWP݁sܾMRϾޢVVr7A6Y߮[+(>k=z;{ގkJ$2y}oNi ~3wi 3kB2oӺFH4m2c,燩z:U>Qo +94a|2WLLd.Qgw, /͗7JW=A|8d\:~B#O_:e-H39w@7PlGhtn}JKp4Mc6HSq; R_/w@҉XOCq(6vOTxiH{p&U⦠q;ioFYT(V͹YCd g1wC4?%'D؟[x\+Q~yT-(? UQNE;g,wŵ_<46&X]7ok͜kly9m)%#RJb[v|l\'v2 Un҂:M V~( !~a"`86:l{{ܿ̌">K :sv$|gn2L 0PqSZ5VIp$-f/iZZ|a~!"=sY i;4>P [zt*kv?Gm.j]鑉Z`Ǭ5e a۷ u/!:/v]nAVNtlqgZL$o TW5w0#,=`QC%%7;@o9>#K 蛛y\JV{B1K% H\OkěpeLe}B>! ]] L![zyW?m /qjW ⴵyj¹[,͟q0aj~f w@D/p@z]޳5?v/n7n\')f/~%prS1s|*o!Ykua锿Tto1P,0FcUOnZ0^0ɏQs~&],{|&sہka,)O͎D¦?}P=+cXk`4x) NSg="5 e܄ ~J|e`3ˡլ @3wsƓ1RąF(fi;Ņ9n)O鬊#@5fݮ7Ah䫍4 iu{K>QyIeYc)"<9ne^m$oݱT'+TsZ7*)AE{G21S~ gvIU LGN $*PlwK[ASÞ?ǭ2S{?f g(*|yc~}uHZIHhrT@wJGܙg,⯀tyL[}X7Wy.q=t-,fG0plaeD9 -yI`Y.ڦeqd˯= \B˴c.-,+F@Xd g[\G6Dgq;bsT bۉ/G$N&IIк53ːCj+Z,%nwmo]΀u|I ? MiN7xIe!{Vx2F彁M03#q'$ʐֆKA0 ;y>7- F;7(@ڏi5l>GOz;-.%.qD*'p6p%gcMO&8. >Ĥڔ'K)bѐ!.#JG.9¡)qIZ!չ%^|pg\#$/T3EX>\\:)!7;g5F Q*6 wT&D5'8nVhfP% M߾‹2#I:s̃jW#R7K$H2*d&uФj-q!6AbR$* П'@ECr!A38Ϯ/4Ǐ[ѣQPԎ"謓MpCe5j?辸d"˯6k#RRq+gi-rIJ$vu֍7yaÈ(ix<ͩ)nmIW{>saӽ֒b5^r{Ř;AX $9/ZgVrf]}DuC7;c>sW^w9r4Ե{THٔQI^t)Rt/,neF&pFsZP|qQm4zy߶p=3I@#Phm%f&.=wV&H h[3=ڗ%50M\MGCI)*0+9V}nW^67g`?ӽ,x~[ ԦD1mYjx-TgD662f1?pBF)Ҹq^xe6Q״s!FSzX+YY`V, T%դ:D' elWw[M˪;7/@|Zn>b}a"Wl`f%ycѻRt?k1nw0`|BtYg<0PQ/8e-^D*{MZkD3! VO<hk݁0.8纕"b l?s\tmD.2X7J ˽+sm8dV $rcWUs>=@ӷ6j?dh[I`Xdѯ?*2?^ &]%d쎜RV3h)~PvZ=a7?ZɋKwRt%Tyє6 P.bIN_8.dYg+7FӉ2oKłߦPMl֤-Oz6o4?vpq圆[Pe ]Rɍ<\);_1c$ ]:*oNcM6ោi<}$EfHS siGrJ]i5^"i?@oX[km珝0ws];Zu5ww^*uCߙ5>wK#us)Q\{E%'*Ge3GvAwa5꫅ے![dc}ȗw-+F':Q;ցя7.§l=;uN5<= ~c7avTv6nBRه nPb@ѫ|K/(U0E WΤ𷋢88?b:EVk9oo) X;7*Gz[Sbb!AlUݣ`EF$9,VEH"ɻ- )VM3Me8QC-)T(87ӝ e>uӔ&-1qg:HHkw .ߓ-Q/S4TAͳ+ 哛]H`Ρcp[K`5~9ѳrc}QPۘde??ӌHB;j1)GN"t4]oh{9v%mKI׳p~0%*tBi86dTwe)TNiv _/L$9a?>_M׵;(gG }ӯs v乐a(4R`fG_-'0WS _q#؏n!{%*${I-c\SohT1ŬX~=ftds q\œz~N:X]E#45i7,4RyXзq, VY`{޼"+>V. j>b9W;iwa틎)Lu`s 756b8)-9_QX'ؼp !$cbamԄ٧ty= Iڹ1{q,;qN@&xd*4V23峸SWדƊ,`,W%F#vVF-J8כ Vfqqz>odO2Ҳ/ӎFv-W#IL\ُ8I1J_wd6,1d Vy2ymr3@Wު6fbcAޞíD^GA EP|m jl3?UuhQxEfg0R'~p(f/۸ 6pC$ybW-Q r8z;OK{)}G vG$fFRb/Q o.(B|`#} 4?YIl\ߊΤ]P;R|Ug!B^g%0& t?S.bT<֦g9>3")w9v>$H0'y/ /0OaGΟ+{;DHA,R,ṁ 2e,a mXXE6]E/1\/Pb晢5O>`o0Xc>'tsM_;N}b/iV faw>#ǿlD9y55% i:*SPir0 0<3#5܉XRmP ]5>P/g{0o rñ$`Zqjz&nkI C5q7 =W<(蛉cI+P% 1g C:'_z,vJyg+x} x|u^:F#0el&i<8|^!P'{_R̄U〛 mfL^\Gm)g7p$7^+7KJ0GdGuK!LO/M_ٯ)zʬѬn)sW9 W_ޜH*NaJ_ R6-B]s~\K[YnAңf >,n&%SKZF]L-En0Z)G޼EA1,w.w3rzHK6Y'iɓjQ9(]DMaɳ=t- E%h`!ǔ8vzЖ0!7wBw2aRK:yT0݀$IR~){GTCњW6+Pݗ8.l:+?G!أ|0)~fBTQ&%ô O9_lzȩ&](W ՠ-fo-e_&[d3A<_x9hY7_=yT`ׇnZ'e`ݒpG x'i8&j]rezX~R!" ?P}iA*WfU[;-؍rR>Z8~êYsl1[O _l3Jpؕ5\H~8-rq#r~)KO߂3uwxG:g_VC*}./OcYyê{uW?>m1:+˫q B;]e^I <@R#}bV 9@$:.fk\  '1f-3\1q2:Ԭ+MB^MO 3c7FܠWu8zXOO‘(NĬ9ں^ng$) ﻪ 4NfN1uޚ˒|ܲ4idҿ~[ꛗaPM.cx sY.HNR`qá7,j_ UTkلϬ0DR<3 hϵ?3]a٣K#jdqE=2+]M}Լ7`riQgtlY]\o=n9ߵTXiiq4_i]s0MR+JZm.Ռ\M7(SGybR0Py^lt}åi8#>Ls\_t";#}ey$"s.ZGJf %<&cq타9>yUmԽd糎!23UXч=aH]&lr0in0yv M#0$ 3 Z3"WAjMCU仂g> ]6|eD]df 7@"hDmn JPD[n rom/am 2cԻ3>?EڍDrwލan_:~ݶDr!U&ڡ8 ,XS˴<ўV\Wڜ2hbI/0qm0P4Fvb7 b,[ j'ymG|vӭF 93~sԮDYe<<Lh6r*ÀаsU['ɸIZo62xw_r\X ezHRm\Cɯ5nׅ+J"Ns h I%:E{'[tw(5 q,Xp=c\u2{s_5h^d>1T?mP|={e=%sAːMݸ;Sp4&ϝUn֟ QrAoFpa3m;,Pְ;P[Yg[zmf9|D/ 0+?w+г5 ~XP~GT,CK b:>ڕMLa8 COZF](F&ʜI#R<R'R?aB4dZ2$3fyJ22C<=f[Sd-UF O;2=3FѤw*XO,~Mjx {UʍNGQMa]P MӒH~Y(g+%3K_cTrA9Ѩ89 U۲)uc, (v:/.}fg6DI4gj'7gw`-=Gj- %/T /:~UGvMIOr4Kv<0sfM4A0FblDOUaЌV(uPӕ@&?e,"fC2{Qk6@jZ G7[OA#xc_Oo(mI ~ۗXJe.H9Ҷ e-}'KSSmǝ6l+]nJU|2 7y\a du{ elS,`ɹ"鸓VJ渝 C5s( D4Hr)H]cu><|(=T9fpazn|NЏkW* ?Zޒ( %_TOKK,;|SveK F^!X_r|Co`̱"*>J.ů4g` GGa\ DWFz=Zy`n]OH8+)?lm Iz4g b'C4h?#}#pDeov-m:R"G>8`ME|%{q}s㌭ P_5n,: &U 0w\U#T |ֱnv;=#p)BfiB,\N\.~>k%Ot>0ɛ x4mKgW¥uB^41)pD7(hUyhQR|(*ἢ4f Cg:$Og<"É^okإD}B,t\"_gA+s}Skp"hkOL"Wa#/S7_`WPEV!zMT#]O2Ǿӣ_/Uiß)8->]Bvh|-A#8JegU6MzҨX:+^Gi2E:0fE N= 3,?X-Y-?:nFiăԶ[Wzj5B5[IRHuXl?Pޡqea zK]ecba<+Lɦ˨1|OZ.IPQ<֥O[ )f-LriwG">+HR=\3 pmL?'x֘M ټPzڶY [  ]hW0ѓ6OeU,) {[.]1+֑s.,gg,[lW]M_4`nY8[c[>:E^Y]/E8y4Apkh{JW1 \5R8l`Az "yŠKk89^ _;iSL}ʑq-} `@| |~Ay W ᏲLզ >!!13ܙYih!V90Zc]|N, !՝s zUD56@aziZɕ5]]`~߉ IB/_O?b%]xXP]j\ɜLpmڣZP$U|R~(DהBBֆq@F|^M<;MQG7Jm\ F6fEbb_f&&3W^C$^F| 7IQlEs_c'T";j:"yw;=vQ:7gUT(IO]hp(0c hۧ)SS_JH?%Qv 1:bNʙ'64V]FδxRO͜{4FÿG1|uđt~waeɅroЈZe iWK_0fԥ>  (x/6W%Dz.T2H8 .QyHwWebpNY?l$mׅxֵ! k5)SܶQtQ] \wu-9?8W+  jp; u T8./2Ȯx 1~Mh1"mn׺<I6'OTF.H':TF`?oC)Ur7ttx  ]_³ى>eS}) Q,YfЦfM`.r ~2n?8=_|UwppCט"ugNnG2rShyˣ'HM/m6w4^Q^) UNlV8Z8+ %-~g7.fsv vIyhٙ"St2m1\fhCv<> Or:="*&Q:.b_d БYskDe P&z[,%4˸嬆舿k׮0BYDige~uˎBt¢i1jX#:Z iMx,Ҭi_ cE[)G|tU#+߆7>kZ&91wN#i*ˌ̩/Vjo6/4ڟI dCKs_BQbҀIi?K| xKWY5z6&3GiuumD䅟ۛZF# ]66mtDxDP|g,w>WXƒ0^"z'Sk\ EWaS "-moZ5P@62zf |gר9$F{7&*br" _2%`xRftotEګ]CDZi4RR#nRۂu:fXM#$Q>Vk ;3 -/0ZD7tS 6D_h:\ TwHa)L͐6ZgxcxFVhNvsx催jLlqSFtN#|g6;ޡƋ !+M<0a =-vۥBli <)N?k:'IQi;zJ쎉5'..Z)$7}W {E oae 6s9+Vt*?!ZMqx[܄ܞv G`kLPg??ˆcTW \lHJ31f{28)E"u ~eY8ZtNՑJh3(uPtm u<˓vrD :_b<zk]g/MH rpH905{DzRSSNS#2MvVp jmi{;iCtJG_Cyۍw)HIKĿ^3t-蘦%`ƩDP7b& 'GpJخ :MSI;hP9-l4/abZg,8q) IK1 BC +)i_O8ty^WDDUR];cc4U<Z#2!F.[FNIejrٌޕaWHixr0kPT,(8֧F,26I[+%au!Ḵh*L$~-A+uPޯ:Zf4ZDi= zX-79OK6 AN QZ3J5_@d&^5鈲jzx{<=VpQ+0Z*0P;aje ?"h@hKvxw*O73'ඹzԚYOQyh( v܊_6MZ46{6齐NFV?D*%BmBa,xRhs5ֵ,WRqs ZzV)6V)HϢ5(\RH1Jk3/->xbq,5"-͍D4\Y~SG52u^WX͊M$(lL`oA+5?Uϒp"; "7+8_S,EUF=bβbcCX}i;]X/*ߍwSI/rg]]!➔i8u2؆H= TזɹgUO\{r%QQ3zmhI Ҫ{/zЁK3o:wOWoI\-=)uce^h{Xjy_*~[|I?e8+zS`#[TK[l oI]$<2k@ @`;J 4SԪuCCMF7AX2 M)|CI؎@D7;)Ec6FMfQN?`{)W,RR~’V6T']Q#B @M1@I-B)9g}:,g"M21d>BZ;vg6>M#ʆx&sAb Eѐj|iG֋<1*|󻬟t;&T8Lz`CE[mzxeS%ubm!<x4l@z?|o=U Tɏx D5h' %"þT "ШJLGTs*T*|Q$_SxM,yŹjnZ16MVOMr5@pWJ&9 e/~#V'[r}\(%GK6!˓%xj=ad׌3_mXMz-**{Z&ZRa70@ !.WneIu>b^7A1-|*A|l-Y~.J_,՞oh#f%|^h(D YS>O^<)5^8z{;y_oiqؘO.Ul>J,[8@0 JgF"O+g%2YC]7 vWw@;x39K3W.ZUZ~ېM?%__uXu'?LO?A76|r1Dm m3rlP~l(V|0M:hM"q?b3 6%B: kؚ `깘ܙ&S'պiUʼ xÞhE%>~36;@h=0^uׄ-.#btWQ(^E"Sz32Lmz,gޙg&ЂUT>D )0h7fߩ Q/h k[ ~Ig~A1lNW2b"<ȤOCK>D*TYZy)2ܡ$$N06RQn]hT+r95d$|Яy*L;H~0m pF Pvi jQ@-C9 >c!F{nM!WWdwgFIIѩ;SnYa(RE[CW3 Bh]\g'E*ҫјBej$V{ҫWn`DF!Xk^O]V'P7Aa Yv(7* V/e=RHa5gK1Z!$>`CTU{%x-8+*nx..y02n~-5Kei/)K{fS\Q(mr|C$R-VHz'xʟ^x /Iמv ڍBtHs\ufQG2oM@Iax @;R2= f. OvoWGs~8dxDۦ%Hv96iw_]-E˴btIDR %.31Ogv,[B $B؜u!{s7G`Qf= }GQ`L/m HWQY?wX N",gg)d_YN m)zd~`vW"dGN"SM*pʹ~MKO~5 CW8Io2Gܼ3m$? w`eo\:u#7هK+2r)f:YtZ6͗5JLttM3(` !~hkR27f3%R 3(c֡F>s{Xf& m^EB#9E^ų.*|$XvMF3eCZ9-?U/Qq[+MW|s1XM(xhZIl*eo穊{hުI–6MTkkj0j-])~_5LKI__ѯTV(VѰT>H^1 ѻIv[h^-xd̈́*_$mDAUL_YĸK!wayt^o|(;ieen릾fz'a刵LTJ؃m6]D^ų+f@a6&8Efԋ&qb?7*܈OGg72o&^=Rg[X2FwƯxw6^fէ\l?*% ogMB5 BsfP˧q'b[VC]Y{ L .+8 MsfjDkAw[O zbIyHpxlR^"e)=?goQ?̫,I.RmZ狼j7񤘨AZy;UM3lUJVFT:E])x]ƈhB÷`TYH4aP7l>n?̔,|LDcGZS; xثe~6 :M1ƌl7)t76xSk9Rϩss¿u~i׻ D.p%=iM: w[rqO3˽e443!1F<= .`ʋ,;qfμU5 s$Ych9غvw@\/ĂoaؐW7UѨЈiȸo~~ OLܷ;"ַTAnrǩ@s2]۪0K$dds9I'E9;t_Rb6{mι2XglVRX N $<:[lv}q[poq;v2:T-eH@ܺ'[gYw_)61ςJ 9A?N1+ڙocO ,P[IKp,Ȃrr{O>SOtkOn.ۿ#n&RHJht5.EXc/yQ D$pީ w3Q8!Q-m]%OB\ľ3 , 3!Qw {e'Z,"mqKⷩeTܦTk&-Q4dP'/ &+rŘ؜ rȵ?@.Xj:$uXb]I1]ce/utiH oഽ g6O߯ ~TQ/zޙMuB\/mKteC2e88xD*HBҒY37M?YHtN{5i x.Yv1O$p?޴ % 2QzXwiWcŒ XoA(X9`9UuqWXF;}6(صOrb7G~j6 A -FBz-Vdz1B,D:D1|o%r#<<)Sǿ37߫_dbddJ\; [zݔhmVМcjKsX C$Vֿ#S'.ha "S>'/d?R;Q;KM$'[dD֪ 6f"uƞ~wn[\mJ+R-Q&P`U/3.] z2Rl,if2d "u\qOCc[" `-5[H4w' (ВE -NGf|P_(ũN4l{"Ar7^oq>SWuYJHr-*h)glh$b̐A!Qo:0{^) 9HxDLOa<3w9&|S^UA3oHV Z&z!G K>D'T٧&4);zn3Ɍj> !W|)p}pTK #,pY줧Ա O6 Bڹ/jy_. =PL6v g**-*Fȭ,8J wףF*qME:]1Zc?{&C4%!Һ-)7g%x'"( -q޵vfOeN+{bz8>{2A~Q?@͙ܢ-pMH(1Ԙ|dk[3CyBl"?62L8ZWchS"k.g9'Gn]꧌m*HtvA﷼HJ S%W"ѸQL$%L` 3ݚ%xܠ]P}:yy`ˈ ̀n'}E[}Cbl I{ꡂ?'wNnP }d}fߑ,{F,^Ig:k7mgߜK]أDZj :qq4REq,qG8Ɋ2iA~#rH# JǨ%@0?o|nopi8I SͯgD;Oڃ_|"jFLUCT7RW#JhB5nR@!Rv&dԶz8fv; 5S-[4M#hmi&E];d(kJ<.ǮF/ʇsJٙN9<#WY`ͿC{UCG{MoX ],=b&\>.u3:Z-xE:'*7j-٢"ؑ%w}sw;s&ɬ\ڶ4N\\ >!WIҏGș6I U{LTydu}*1̊:1ϧֵ:J\m%S=G|[arZJhS7 7XkXE[;bE6-#jT`d5o2!7.&JQvbOM ]PȳM7,HmN^m!ҩW ~P!p4= #9R\p-JQ̱[m ZΛ:i9v;H% v.iFgnW0)Mie֭*c5ȉRf%ڦ$\lHJcFyJ@Sb&M}UHʙ h4Y L8#nu#WwĠGEn6{}'qmB[ D[3d-(pw--/BOJ|@ 4kx[K`CrViAq^Fٺǒ#8N5'%к(į[γA,Κ#~ĕ7qiȍo\4d%^IK` :> Jbډ,UV(3!i|t-e Ly'SκGwC"ITE/yq\(1🣴t &17g!c o1ey5z .Ɍf^>'5dԧ.~[g=G+aGe9l$_!)Âk2>anbuê)8{J1{ TZb+^dƔm(}ViBE,[ Z'/[Y2BSoT;b\*}iO+s#i]L IP;#Aԙă+a; !XyrSE؝PⅯSi2I<^:{FvI"QU-*+2闱cq;m`E8I?atiHU 1dk֬/]u&» J4#$W}m[ ؉;Y]utaxl(ez|+"šk^}.bzW~c5az4hTݿ|JS? ѷ>~O뎧N罓_zV~'9;G#/2۳I7||c9՚84̗D-qyntz3t'%;%%y Ns7WdL^`CHw?5Q vŚ9uk89g)ht@ˇmrIW]tv=1),:)3V 8˳{ r6kh>F/Uu~\ BXyxdz}(i> xbv\ LHB."wܙ>z07 -VL}Y !]v6vbjVOK1Q/kLuh3xH)ϺUc<Ԫe=夢8QNOUlՂcڇW7G*Vďӝ8#gP,z#;ӱ4eXZBN6},FEљ j-~S%Nɰq"-'JTnق[f6-.@oMM ]}i2d v+N9k^AãY+ q]M/12H- Q!3]\x{IT<Uw396O4! :2J 5أ>(%:됰͕hݏ-P)֓憢էHHFR^7W=qB%xH[c@uP9NYGⷞ/qZ_U(*nx5[8ͶsNE/ t~ ׾sȝc>̹9ܗ64ύA%{ZC} l7!kh{OZNZPT} c1>as$4՛Q_-HU&mkC_칉=GBsk=aW捶EI|`w.ꗃqHΨ / NȯֺaQ+@taJǑnCvao1 0OȈvFjsñղ]i~·7*ˆ+ҿ.,}aYo<-^}/0IމyISkyCg;X{cI_ cVTgto,<E z`}bᴹ6'GѢ-?.b3CNR\'j6(̏PD",]8>Hon.JrU\atz1š}F@/oePP&SV8R1>~u-r@u=WW>Ĥ hڸY6(~Dp>xFwP1Ӕ`% 9V/GsoNT݈li[#pO`gA1֢c*nMJH8ӪeD?L BuTALJSSL#(-Oi@ S)C;3녛é( bko㏃i`U\wi0SHř?4 ?䱉vc QMIRVvVw.6ƻ#\}x61'u&l8 lT/{SVRjh84Ȉa,C:-)_\"D'k ?jF컢M\̒mc7?:8/oDW K9LGvm7){ BX4̐J&6rF2/‹jf5x dE.F ln$xs2v5rr3jVӼbͽm1VkJOT;EY#p>0*Sk[˷v埔L^qdvl+ݧ 33 '?_쿁EG$+b&u& v;Q_s`]݇v^Čef1OjhA]X5/Ic|\DV̠wDFФ3ֆ^\DA_BW@yOVl`NM[WRhm^wmPe/[1TJ4jdk P_DŬ穅\__HܮuN Q6B')%{wvRO SQ֋b4y|ɑX?V2rM%dK١bPApdDoi6}^6PnJO# i5>{.Ƕǎ 7 y췙u&IQ+c6ŷIK"yӊ3qTQ9~m ҏe]JhT.~ϕJ!YQaAI&: WOiɃzY?}H,c9Q^òrSo'iSNNcJ./W _|]LfF fe[Mx, ~k_j$\wޓ,WfI3BƣqE,DP~3W{&"/Ì "M>1bu([^$v;#L'՞qwVd$R\wʌw=dd7f*aLLdMtQ Yx|@hPmKNx}Н8YciRR 4?;CNcԵ!+\A/fIUn/ p}MUoRm׊R=ޟzn'h+<kkj^K޵,R+i08O]p=E8~U*oC5Ѓ}iM\X$׮.%mS-jYضùhm䜳 K;xRMĤ,u-z*&+x*14x-ų==Oy&~E!j#s E?jvrB2 eMX%oزK,c65 5~&9zQd{n_ʮ/su'24Hc2v:a&&/l<`M`hjdK![VKkuN'a u^3qfH<- RnY?lϋcD_+ss-W抌L9KXK)phTplZ|U=t oֻN-\,y`{UF-9Zz':Nvm h-Sby)a т~D$ sD#t?lZ\n.@OwVsP~wkuㇶ3snu0>Xu-cUώUZnց45!:Bszc7^xO{߀Cj4Y4;)cyl`0B¯FBg w\۳u TךyG>YN Ɏ X ݷRYT19$XGJȞm ")/?zez+2׳<OYZfe%]f-~-%˸&CkND( Xb2*g7;Fz ( puZю ZAS嶬} xO7mLoc 5WZx Zl^VV> g]pэ |PsLGJ _O=ќ2hߋk8# &|WYX1/m CXT]8:uRT8xM8x8LLy-̸p}oۂ '7'3s{GO&.nV.Nv,=]L윬Lm,u|''>'/'"n&.T8:ν䤁u @A? 韠 ac`bca`DGzx P  s#!!"$4Dd|T4⪄L18h% @鸾MI&Ts-45 -z]Q+@Pا~?nʴc0n_- Y:jN(D2KVy@*/[lVpuS ;I#4W2<-H?gv^j FԥCFi{ :V6> )&\VGg 2!I&T=4 ]ul/ pQšwQeHalhm].sqe~6kEr@@jO_י85A[ZI:^]n~L'n_rW8ìd:*XEw8W)mоLÝʔO:BOC`ۭ"DSUNAw e%?YYAk3pbXKm?mRq?^ hՔz ve#HˢF´ -2KvD\E;?ecNe=/Qwh-wb:;-JMp|HxM:FXJr5@tLH=kEAp( l%9v[:!;&CBl  r]$>҄F Mö#j_YYvۿwh>yj1>;_%Cտ &jC  \ֿY[Kgea/ܽ潜.puDFjo!rMmDЁuyG\9'4]oE(1t_k99g=>vB($NlO%d52~k>]trE,2lUnsWmL!_ BXd.̐m-!ea "o^zP7LTa0b>V88eCيAqܚcbNy;$ a%+C W>繬XXcfTaJ7~ᓞ!+́.hm eG>(:UEg^Jn[SMҠd'#DZ/,>~+ᤅ[ lICr-{1x>.1/Q=Px\Q[;M$fHdlblfġ. brwg|twU!d4 gl4(8%40gWPi+.fT*MSlP?<#\~VJq>1sq:zo||O~K KjnX;(r*iE:7[7]t~⹋~/g|U~~੮Dn Qi!t'ک /MH@zԟe5F'-)䈍֟Ԛ'sY<9OԢ*%oc i rM1rkr9E;U@I_UL ܻ{E-$P׶r8Q~%=gvX]8$9ePz\agWr;Yb֯8m$$Rf-W~ئekޝs0psx fVRE^(n921)/5tܘ4TFk!/3WA3,55Zl4lnQ_%=l[ HXX{[5O]bqw2^{evC[;MbFDXHZ,U)x\wg{߁\,ff!,,T"MEP2rv4޴[>SM_<#:6GGr_DQO5J)nAvnfWD.i>Q@aY.B=W{ 0-:7#%97a({K@]$<>oC6RPXȿUE@S5;>VP Ε\'TOLݥҠTiY81M;Io/Fz9~ CyN9z`otL]/@nr;b˺1D}v|5slf=C]b,br$oq xҫ=T+MmKD旽E R{x&S4jU E648I޴uCs;u'R[)ݗ:J8I]T ]U?'ⅪDMgr%#ٯ-qC`F$>|\ɡwV yl{%_K"H@?؉駼!.`ZH1mPgUC^JuDPbYjcC@t3jY+]#fY`͍uV66Zy;$C\_ݫ+ H]( tىG%|GٰE? oϪPmR.i>Zz>W%+Lė($L u|[%HOq;zͲz|ь-3DJc_;Hȵ+ӈP#лnD#?Ip)y)?o2p9W܍ߤsPI_֐P5Q7^@^(/7;,^0Yn>ճУLy;{kvߓT{c[%(23/WOȾ[m%̴W eZn旜~M/R^#iݧLQ9vA:bHߘa7މF[) nzӼKܯU\/ߛȃ](xxX-,aSοn&4*L@p3. Jq7ӡi5-?Zp 4gy,f:9VVx4OCIǺЅ8[ȼPI-6)IzעV(SUֹņhO!K4hdܟɱ]w|zqGo{춑}DV>$" bֈ;;%΁rY_D]o-wi%kbJyŷ)cujctYҹl$P㪮*n]rjҟ k_~ȼXѼlOr%7Co5M)"5oVj;=fF3aozipIR5'>? }ws'+œ3U\¯^fAyw>2DfPߺQq"FA5[bi%nM%_u.dm)ż].(Q? M͘gd33)1btƙNZtf2&gDi]%{_G}u"{BRrUx#짬u%MV1Kox?ܫ5Y0d_*&>dGbޘQNMb@?G9BҳI0({r.?CIn1q|h׷W?{v3hЯR3Ka~ED0w}[ͪuhWTi*g%PEȑk!s/ƶz? )M|Pt[M@6:Ϲ|W W^jaV&m|^!X4濦8SW p1 [S'-*LaC$y7OmrMaAhj! >o7BV N{ pjbjIa`Ye1a݇hYkNZv%u.DPG+DchV\ڳ]l_!"ysաmpM<.]NIABoR(_ɌMY!>3~wB{pZ}E.$L׺˵&$ 'V]*ݶͨئ)ğr^=իnDASCӮC4p0Y}v[4P3NC&ŐV>6K41j^RZ6),CdĢH]Q!P)ds\.kqQ\Q7J|{:k `[.CI銅Gaz=FUwχ1%~س<7?k_ßQ\,jq 5-'G㶏KT#gbGzHy O?>x'4>)=I~Q/X7hI/ C6ϤbH] 9N̽ݍ9-SyrΔ*,J E8ADs< C>6U֖#6 䬿<*d4~띠໾:wt*6gE_h~aʝ|z P[qm8徵V(R<&j M}`N"]S6rJk %m)^/&:7%K8?PN-B>}t׽|;3BYadfсtåy='K" k`G^(S[mK;e!T 'ʹz`X/.X0B4ܸC͜E">EG,;{ķhtH7D͐dNbƻi I!~_( M`Ĕ]KꢬJOabQO M}#q  nmQXuaat:|ӶN ſszDj+l/Hf`R>H^0ñx*mmpY,-QYYNsoI%'WꞫ{Z*i0]keMKrl(Yʊ}qOZ2+D؄Bm%oIHDPtn㛂0Ʒ'_Y㣌s^/Ӎղ̨KIr\ m \'[@%:o/2L093b0n0<6 YP]7WL0*c{SnR6c Q6Ʀ  ^KԍYF=IR |. %JV)v~[0>54HȎMy<0fkr$nRqZ#arHT!39^MKTLt9Do.ފer(an"4H)+M14 <;@܀l%ZjS;p_.ByijYad=&dX#^ Q]Cz.nMn(d@!swYN׶>Ahl3R\ٽ!Jɀ|cZ®☧;I"UV&YF\K O3zι3U>2W6ڞ~OɇndOڗ44uK=cĎusv?ϡ-[vuMKG*'Oq[G$+/ĵ(  J,1yv] r4OӃ<#F]Ar\YkkN Xٜk>߰Cm.!f5[_MKsR,viX'߀aۉV>G[@AҜՃZ'9]Uκ0g4(u{)2U`(:anBC ESmu8)x;lE%gB9p57];rheO?SoIsj N9GL=O1T|U,Ii2b[B5?7,7.Y$K݉aEhe"QN9D_BIXf vAPjVوpS\؞4}=B,"ĉX#ɺ3E|MkGQW.)[m:z0V'qƤༀɁBI{u2,cNK 2wmnsdBԾ,)FCϭqLʅj{(t4`DŽ/e;$(31)gyl!9oCÐD~^[AOfYF-!;Ի@>5L)ݽK)U2aqڿoRyer_SS~Q.ťͲ)vX(%r?y˹[m|S-/(U;ıEVӌOzyʱm0z2uZž3^eصTk~Zo$F;֝-H=:Vw]s-)ʹڼJU]TMs٘#$"&#2F}@]Ft(vOt@UP@ܵWѴ Bt+ UWz>,i=>})]OMkvjTId k"F_Ac,MmE:àB4Q;bf xlmxAZw܅9) c6rw,$U/ԹDG+u7@2nmbWFgKW;ga:V.( ᙩ(`*W>8b="Z21aCQǾyҕutq` @8`e_$,Oz4Fjg (g's]UĞkz]ܭrR1y(L\KK_+m}8|SԫIf'ɲ(q" V,I&~tl_Hl0U?U(j8Io֬!kl}% 7{bylMyu{z^1:k6σk2QQVϯ_Z2F́Dߨc7Ց 7>22'>Q:RP.jnH<=/L(}f%F92r@/_jt7i@MJ(_φ؏}<Rdn44 rW ''zXcF7RvYaŇEnO8X=>z}͏vX]%\םE_!;Ml(C=03[ 'ʶPs#Cc :E% lyoS[Z.gƐ́ s"_ʺ6Wsid'0:)E$R3MAԐ{︅#74PVvQ:Y/hUV&au3 _I lр~&"cy_v6ם]pd['B$X=EdvkLPcw*w !MK3n_ |YӬ &JxMGwr`m!Vksڧ)ʰjsM A? Xi7=Lڕ+BzH=%.?BhU(=ML~Mwhؤ0|9/m[[ʤ>_(7#?jS SCq>,{A[+, Y~ȽB % ڗaMa}eKhYn\s1o1|y&BVhu)% fF~T bv;=Vީˆzb]¨[iȎfow}yRs1KNSwZ%O47Zf)goK<.M>9/񍢝V aX'Li1^YOWdY ƁG Z_Ph ]Z7X!%*"Wmx!srXr510tZwG,K)9XQr 2!vUmwa1)uYu5*پ){2f*k*t-RalرpǻRB&eY1Z恅@;&~ċ&[hqC=i Pֻ{;,kmyȝ^9řtJwbTf]1ʧ|y ~A (N%'$p<캚4}3s[)| @Mx=舵?/HRjR-.ep])hXXk#e.KQL234|9j׊ײU^\GYϭ."/̧}I CFScn03PAw.^qE*mS?'up Ng/zvd;#0rQ:\LQB]9\>Ȃ$,iE$bUPyS*GG"QןF?PbZӠ'0>:_6eT>N\> n,'rM:m0\ґm5r&Ur-(ִÔMH8S6|ai2YOW\Pd~w`QkEs:/z۹iҟJGK$'3N toC TQƤw}P3oI٭1#Rr{2n5Qvs*Mo+3g,:7i>Xn=}Ǣ/{57y&sM VJ FUc7e*?,!.|!hw }t _Yǔ*,Ѳ`Rh^h Z0,"VGXLQLsǽ{_y|x0ݿw()h0YFڮ&aջt;䩳ܦ֤gvgOq\ְ!yq6#EwKUk{ؠ^VЩPK/Lw|ڭD8f^&spe]#5XgήSMG;)FaFYiݟkmݿ x+UˎT ²S[H}>k(ӷ wΉ6|g _߻iԯ(/墽.\ Q!h2?onmbݤC76oFf/^U PDzF<=ALCcGN v>d)dA?MRuNqZg0DD!b$'A0Z1{kMxl];)1oJ7!)1:2_e/.-& C yir>gM,;@--AN*R{ާ-_RfƮzu~TVL/Ф28Zi^Hf}AwEpf|i,Fhub$tyeoG M俼7%(J_91{6 H< ٨1Wgn)u\7O9ĤkʯaF.Hm4m˳"GeHɲ9:m| a\lf,ON6 i2uu-= aΓ+J Dلޒ8_i;p]i˔X6٫#͖T|.L{?r$&l`ld)GjMhM^[V;^1|(>4"̲Үp,Pb7O *"ZPDukϭ&eAm:pLr[uER\D(?bmʱ_p()SArZ}1 !eCQq ţ%=&-4cBcVL/ڇtϬy_FWVb4jIw't-f:4\(J;([Gp3mR0H犑Tw8<#즋mrZ)fh%w~O"--J^v^/]\ =f7T5f|t`nV]O"Ӭ :P t ZSc"оϭL=H+\zG*K8CkIJYlT :PD"SdȦ6ǐ2}'WZ 5T$66~-Q0ڕ;$5wx5{ye1#uW@zCsTFd+k1cQ|:EpbV[ż}{!ºVC<E5e'ż}x)ȖU.9$> ,yzDdL/q˪ =[øoNN;DS7Pqc?C˙Kz+. ->c s^V`6xKᨒe/lSo=t,xšzoB5V K&>@+ɶD8 o֯v!w p֑ܿ@>WOg#8+Xi& Uơ?"`  ΢`--,>}xc߉ètJ.-39c"TA<Rtц"r-Jygpxyg7L`c8H$?X^asiy:Dn-wþ1׉'I=j)`gذk3>հGB&VNO9ITO<;uy tS#MNJT*vffBI|Kn)H$aGX1P ҝSޭY(~b#Vt{Hgm( &"JZJ,NprIKWtEI:A7-J`*[xxJs8VRmp %?n1mmŞ $-V E I"8o @rEr,Úgl549&כ$ʽ["Ʈ=Kc#/,~NS}yn s? RbHXdkiA)#:xHѐ7Nrzǭ}ͅiat$K634l̔W1BUeP,Lwᬻ:c|!7o4Tt(t%[K$4ӻ%%!5 ra9`pBkfK~-)vUz:4^_UP` L'퓶u'kjܰ A-mMҡiG%w_n  5N|&nkq_P)S#gbEnjVa) Y [ o*YO{GtZޱ|ˁMp9C+`$/M4`XDi-0\ŏ.[wxO8[f[_ oޛA/pZ&cK6ӅOx Z;ͩYfE2M mNfV%Hfݖp#}]"rX1*[f~8PRyMs oM юϡJmәQIURG|57+a|_#4f]P_GGh[AJ()QCa/O=s,]eSCL#ukYHT*>?`*CgG٧=떢XS@!|mVQ48eרycoPG&Rԩ7 )f>@TsU w ayGN^2u%HIŸ3bFtk_بr2\W|s+y?3[2W=WA0Fclnxɂ= }4o/ԗl g.SMlTʚ$'%'>rh+{r'D!mI;C}bcMx*[T2~ް5hA{A O`@2;U(:w"6Zn*Ãlj?yEb690 H`#d÷׫J(oMU';Y}`ٺ~PA8sHzJqd^^zI:%^L;Vo NfdسeP*ZZ&yryޜvs}씹եd)_zJc7q\=z62&zD͵{ŋmliu9Qm=n޺BaN3 ?.5N^|rr%ޥm (>}2d oq1qF,.ۿ:U{~F,ÞA5&+}KvYJJH& PG.X|PS.!Litif6h1b$!>!A[yUV/yUr:$Y+o+8NԿlؚ8˶qzd<+4H"w8qvRAtw#R"e]H؄4 e5v#VjKtymizflXJRzat WWUv@t:W˔zJu>C-( ޥrrgZAR 1昗d%TǗDn  |t_иѳWJAj ĺ >M1XaUBeP)e[qy/~T-4׍𚊻Ɛzvk$_XM 䈝e?2*:hsBD'[:T-} ێu}|zR"?3qJ`'2cfBaZ0h1yQJ8<#2;yLWՓߔyfVMvɨN%[T8ytɅ!쟗+nu9m=RD4HSL 4zZѹv@au`.~ IjVNܬ:ű116-ʛaP)i#wG3ϧfms+U5g#\jk$<^Zߗ#NZAI %)'Y3)~195R8!Q*G΃D53:|Εgs5i~-f}R"zvapq{xNz;#kр˒{V:V)jPP>Sݓ۽vfA6SDIsM ';c!ZA1&n-J$˵fkh A:eK3-e~NW4seJb}}:&ӟpY~, PKP,t t}x*5:\C86KJ 5tZ׏L׵vrp`#-_;s61PwIs Xw.dlH1_,O* 49sqU|ɐ Fؔdv41زz!Ϗ */mY +<}̡AD=NEаo#u^'^NO 7KK3S]C?e囁<EXH0o+EL&J`gG\E6qn0Kw'ۢp{ T'S.$Dt };oi+هi`1O:}YD=§o22™piǭښz+Ӓ!>soZ+o K|x,ӶXyh}9% "z o2/$\8 MqU~ Zxj-][3UA!TY,J#OqeBN"8&F#4t׃[3:kd4ttL/h]fSR;(A` \oF.yݍ);QUL)w*"qՕ}ThC4Md (2pޡ΃Q:GSoJnXd)B;'~&BWESP"i? \q v ' CN, QC3^qi{pƝ/NJJ% Z?uQڣf\>;č?|}{Ʉ/ozþ\C%,F/n͋flEqҲ|5PgQVm[ )+Mi)־)#j>O^in$O'Uʣ0kV]-:+JFnkVk'+GӒ97:vuB:,TԥF%mR``ʻWBD(dq+ڦpl#!ٞrxP'=;O4D+hh1GZ6 dPpuXA"i!3 91ˎM$?Z6d},mbkK^4*"&n`-Ih*Q$﨣HnxG,7.NA׳xRS[֠ѝV,#I#i.o feln:4#E6]. I侓l26 Vrc*;@|!JҭJj6`Ň^ؗOlLbty5'^ mU|/kϧBɨv!1S P#zlVs@*3Zږ0ȇEb(Y+b$ h+؛Lq7ΆК![\yѳ2 &d$AA*r 7@X&^k`n0;?ARFS Xbz ^a']Pp|%rM|fRy3*nЄ8vE,wL/ZL#qe%uw~y_ULWl_zvQ G$R8x-&Q;&)ϮtD69{́ݢW m|itH\N,t&& ! ܗ*>Zb5γ DNs>Nr` =8-g4ٗ[cQIOp 4⹕9'B^7iJKsc1Wo5eX9DvZ:gjh?MdMVڤW#Z}V fR5kO8 E) <㬻ٶ'㚓9Bޞ+DUXaf`:e~3j+%+AEPF(raNӫ'c*-X p"cC@|y'3_Z3_(NnU!-LS7eDCr+=[86> s% ~Hw?*Z 9&h@}SNIwn9̡E5&4 s'$f)Y蚳#5ZSh!7~RO RW85>a3𗽷1iё}ۋ:!Wз&iz՘k \4herL\ s:xa6ɔ6w((.܊H1E7n䕁q_FU>fpm{ kT2Pr 89 7}S8a2xocB"wolp9sc~ޖ*7v}+rc]'#Ğ*^p`F-k\)6{Z-@%6S*%I= RQCw(7%s ֻl̟E~VMj nI MN1(LF|F-Q2X.>XU;(Ο*ڏSJܡr+Mv*{$=S319G)@dT+{ 8/䢎FuQ}֭ucQ/.ղ~LD/Pݠjȥvo ^'ULo4އW~ZrvҴM< c C3Ʈ!'lKxa)pD/ڿMuܛ82Kjc'`#>!eͿHmZàKM`9t֗gf< 1?%"}.] a2MyώY9BqE U2"WW/ ,~J?DcB …J<LBJ&jLE*BVC,rH-ǫ]6-Ml]i2_1v)-A* ;mqmz'>3-s 5`dNCͩ`HR?s5mgAھo)nގ}g@1cM#F`fZЇ -t C[CաWwrg pVZz }w1.)Je9[+ ZFR`w8J3BqşF|SR}mQf+:  X *F}ֿv>+QޑB[`a!cq6,&IC8sS^Ue'"Z)Ufk^JGX¡{T_W|7T( L 4:} (%Oݐ)hlCE vͺ|K7/!!5S9j|>Ec.7H>}6 H.gțL6DO< .QmY>pX9f^7{;!'e%?eת8.0.8\<G%d)VPqd/ Z섉UYM6j"˞5t r{s,]RyKR,@J)VֽDe+3";˥c^L9yJz%s1Je;KQǴ֞Ge"G*5æݨ¡m&v#s6p)r tnUaa0;}a#]Q  <کhb+6W)&Hfb8O uj\`xKph_9r5oa?XkkJLfL9!iݸzZACi+zk8vRcaad΂sr#AF앲e#: !}juLf_\n̲i6UwA]b6"e_FDFL@,O|_fFK[5A SH*[](k1JҐe^P_aؘlS/'6ZVL:r2,~sr=FwﭪOm%rLU6VoЖ/ɴ_;Q1q\7tQsNyTap=.Y0es'Ba@܀/N/GZ2m|. Tph=NLRK1u7CG/ ?}! {.Wװ6!9Vҳ/&! 6GkK\sԆRLH X꼕 ?[X̨OY r}攮hե$ N} &FO*D\:w*^ɻJiiDmѾ A)bgW)EHt@\:Ùx=Z1UkrR.t-Wٯˬ.1@K3ᘬؼI փЈ==:ŐTyςƠB+O ^hEw%9U,bnm 1QF" !L/3~%-7ǚ+F(([y}{}lwL4HC[K۷&bBŎڮkS]TSCF}CL&T_E yFDbB UDp喜gcuYEˮӪb&dEܯ&"=m}௭j#~;ϪU֐~=gHrYqǛI8.gR=qG&-f릷}reaoWW6~ė$Xr̲䠤S-ƫD>=\7F`XcòclE7AG?;$37 q%Wu#괫 /+f $-HL?}Q: `U@wmgG~T oY[Xh_qOG0&w}噦YCcե8H\Td2I6<}l@xxfYTϩxe 8P5-UF`࿪?tkўrah`E5qE MELJ֖r:tfƏ3rG2hLUikɕYʸEeyX Ƹ? VܖY%I.HI$`lʩ<7~ ;5@lT HQA\.k#@ӛJ-J*?=5[`fas"y xuѮOqݴ- 9 AOV|˷f}!XYSKSck6Q{FS!>>4!FF ~D1f "-ɬ& ! gJ6QFh]\s㳔I#5z O+YeV]T( uBL |wĢ=]%5X[\'%G=MtJލ {%TF7mpP<#<#uGj9j9c0X,bŁ(\D;._HaBmt \}}_7p! g L5RR$ES._QSUKآeZa[7̠sX!&w+Ce:}:ä,o8Xڪ243 S^ f4C rJ[.gsBnث\d{ͺ[ޚq&ydѱ{ 8m'*#Y:@9IWֈp6VRd}Ro.W f]e9q46Vzο-RO,z$ ѩk:[CD*K.5j]ш#U*.[_ W/&)bt9m:7YfT5[Gśzm SE]OHLGXkӜ<ܞj1OԠyi9R&6GL+865 yлݗTL<iɵK hgGhݩTzڜٹf)\=veM}>F1'LwI)#m%%cT) Go~U+f3*rei\ eByeQ%g[c띝ѶoERy9Σ,tjovy&=*Dqtij3_:aTڥޘ>bk3z8x#:%JYѲpɔ`ElT7j҃A Ir&ⷄi&ۑR}IzLf̓{L<;ރSx\DxΦYJu??G5retUplQ$\Y+6}XgYo$-ch#;v 䀴c~kviіPZśDlD)W&FG$(yfO"XRE0!eI!w^t"fqǮZq|#,H2X,QBB0m;q.!H_3]$Yռvee²sP% v1_9surSV;>JHF-W-[iƖGVgW2qW,mnSNfD5g$*~ UO Z+MrI04W%e Bsƾ/uɍ8M$3β|ޠ8u!5 FoNm:HrI@qCS;LVX QHw"+펾IAC, UcEKdìv,&Z-GzB&+>:v#FӶmJ Y ׭mz=jr ":'8tS^-S2Ru^0-r|H6ͧR.# ;wI/lrGs6Z!L'4Y -Xp%Q3RE>+v},Dh/iQ&G"H2C s|\Q.(3%Ums.U  iݰs ~&bb%ϑth`7A&(g;' J %¦~Xmd5#=v0Zp0C 3рL_ORt0XUdT+䙜S2VҜ 3_䚈'2Dps|22؄|zJխ ZoD Q59w,0sFN}Ix+µ\L _%? +,P"y`wyhEP6Z{[li؎+ }|V3A$^"iՆUYM@55vܭWJ)/m.2mм+_?-s̈́oId$3uqRXvjrSřN%gU|Oc5(mp) WjXokf8~ b3s0&uAx:&ab@t(-׉ *SdNz9bkPSk8^ZCn1ڷw(o s -FFvu:;W5B4ϪbEoVDz3u wuhȗzsq<c-aW+ȎFiy9mGřDz@3w6 􅇃v eJ-[C `r>ϥ70O\sw?^+)#]i/U0KEU4TXfEK3kQi9$ѿYDx\t)7q|2a`g"b}u_o:Ɋ+F}AY|zRׂ@aQ9m9 4b$83#Drǜ'a ɴSy(hO:<&GjoeFH̷zj#bѱA E !ex0۶X&^0O6UvaY|7=>%\U!t]<$y i3 OJz]:_鼦 |C.(8㪻lK ĘƘ)O-AnA{ܬ2PcB]cHCe$"`Ow"3 輸oPv;aPx3Tҵuڡb2H/u֛$-f+|%thIppuٰNHR*gټ =Q.Uy|u2D% ˡ`]_8oF.vu8틉AO$L`я @-ͩ2~4x}K CS2Tj~CQR )U:RzM&&%" M齄:"Ut=k|/3k=޿5rrBl+ӄ'CF8OO~K|r =OjS{5E ןnSRiH&,i:q'Kn(' jb@Mg\o_Vu֟_]Z S H cUߞn4P.@d(o#'ƫ7/j&![OCٿ f،_7 P^_rE1]9Ѱ0_׳[ⱵGTE9@#AB2Pl͒m仲񡆻5*l4XQ%>`Nj]a҃Sß2lP _: GRz/UIo+Lm }s'VH} Q?ge\+VYKLkۋ_$n[yBPQ _KC'aeyR!!x^>tXJW|.Y}s֫.',<% Pv:?g_l-gmr^§=~q֒wj2εE~?W" `0L8A*nw|ťqwQ'ܟ8IO-Ӎv\]d|&("n^Au0$UrKdﺊe զacc%/rwC]{?|>{P蠏yYB Ca[S5Q{>Z~9H)PA|TхIZc pWxGqdpPe>eC#eA0mn984nYGPbV8̴{Grg XfPrEȾht.Qelkܣ]Ma۾!Ђ^ qL8rm De1Kih|D3qAa8+b"$юOO>ȷ.H!Q]^kB/y[X9~M9ETSm*Su6g-䞯ѴչWM2+d8$#%28]Q\sI[+ZJ I6ySa"f & $3;|\ؓ3p ܡXhs@*-("l)(a 09Ȑo0QM1e%mnKBV.0jv~K-i斟{htex^6GsU>V&KL2"]CM5)NAIj= I sD߰EC^p^iaPChIw@ճ<2n[[{y`isSi5m[5E<@k >_Oz w6I)3 ?U!`QJ=Sn*wkuIxG\Ϯxgg81`8]LY~MSs-n(<|GAv ٍf€Ʃ橃:d+GR[qCwT9lF){C:~5K{)kz@$gH~KI!"ʚRƤOpX;m dۦ"mgd*!lU3`tϥ&+Lfc^;,oHo+ ߫iʁVC!@cBImr3"B(;pi/P9K5A(?U3֣O#~xʐ*K1ȓ?JTv#O yҵAT* P*r{b8쟃Ld&zI'm0^Q'W*P'|KW+Ee){+&mzQ$M-&bQ)niVKB&5jWO(C+3dc)Q\tݯKr'پ6:α0^diM[h4s~NܧRNijԸ&Q8u= L oޠ-;2w&+!|aڌҡFh6to9C:]3=Zo*)Tj.#)׽xgoWrFty&-(0nTo_TLkJuft?ZﮧȺo$mn]"sŜ25Z=SЎ;-X\hKaKT\Q:A]*>DV>zmc;iJX*QW (p M]{R]CǍ< SY`LP.d{;;.ryQ+L @a8T/kɽn'OnîWlڰb6&u-Պ+GL?s,$"dctԍi>*|Pp-I&{Z+5_XzT=zkmDѕH䯦&AJ+bW+^)4w`2>c0!:S]mQd9yYz@൉T/h?@A1t =d\ CHiT2vQiTr 3{k{ځbG_G 1'm^;@5LJ+U /S݋yy .˶)qevVe m ҳAW]IgLrf,vXEIuZm wJ'Ŧxʴ9gzZTRtLm)(X8m' .Mz?dz|.'!"x7vE=3Pk#|u֭(a9coh^⡑ރȐǴ 1wE}|BTXx`\/̄^d#ۍb:-8}ʍ; [/Ri]/ }+3,mM cp'SAo$rp;_s4 -\0< A5W г?4^>2;(nM 69ׅ]`ҏ KsIN1wjo/um%) )'\d O?gZm_e6geryWvzW1] /L N7Cʳzн@f'.ӃG=j1~h0,YSnbg:BcnP}ewKٝ:ysmu,s2Eۿ? Y#߃`љ()@pvz~q{fC ^SѬa ;`_}:ZYT+ +:6V~]ʿE'TVk;x/jĪ8?etsZ2`QғB;HN' 6|]x+rg^z_Z`e@r&X5W՝PY.*ba춠`^IM~Y!#|< 9{m4[7/ur"P}-!* E^s8$g]0IYzxly9;omohgdɚ~z <(c*b=2 NNr?"KɥϏ^깩K-o[{1si>J xsVM 4Jw  W]| W8 IͲrW-–rI^G%ƘUNa+K"7q;\ƇYNy[hc_,`tsS9M^_Oi5m-F(--ZG8=uUm;hȖH+K˥Ӆ+ wZ7D06blk1/-ǵdK2|lw'TO}n$Js%> -J(h>? rn9de{B1e]{=p8Re.%_\s{ `7>$H iißZ<&ok9Cp%!ћ-KhB5umg$ J1fe k ]%7IylV0.Ub8wp&Ob9B{q5d+_*d$| {o*OS1`{|??wyn(00CMio*%^iV=}N}wʝwH .a@irUw 8iމA\ wAU$|;C\lq|V*HkP՟OOWFn ( H}'jl*h-|{yV9|׳곺Mz_G*YYRt35a(ү[` =ּ,\g~tV|JxUɏ[4؀Z|+!SUK27quSy1eJȂ+\(.s'3#4 @Idʉ|s:GL`E7f+>U2g!^~+?e%D?T{]rT<%_?HvA }F+.{>ëiy?9Ybt#k,[J?WkOL\ E"0J YFO Zmw>1V.nbև#⤊4fO_>IG}<5$ bMq.w{a'OJL]X&p=_52Ji1ZVs6-fuTȟ8;;OWP `I Hbų_>- }e1Cg\껂ߑІ_ƎavP_D{y*" 1'[ɦKLdK^溆l.‹ӊVOKAeX͕mzqzyŊQiHKc禰R`ȓ9jG[o(bI7A5S V`@ 8Vè{=j1߉ ]Eh)'XC9Ih[:}rRDH|U+-K7g{?kw+?|9z`5NX}@Z(%n!0M-lh~J =ﻔQ ƌQDސ .S:|jH|hxU^b@Ub6Ә[xǷ֏͟hiDjRv/t*DgJoyZkޟF)WsdEx{pn iZF_sR:FD vt1b yl/Uy24Rދ@/%Hj}=H| ^R6BE!:"u,޴b Q,`ViXtlMZ;^zLp[q4ެ6i8q|6RntK_LИ펆Im{srP{k3Lȝ\|lBqYY绝Jʮ6"a~ d?Xsd6 -M9z2p9[T1_oWv?Y-fKKnՉRHˈ2PR49M$=ڬrDL̙e-!gfjXգYOGo-TԶ>1\T*l^CMSFtq2ƺ*Ԟu] դ;e=maY;lM/j_KeL`e?7HB͹9i Ѳ}k/->WVނv4EG2>ܣj>Y%ġR?8%`SmLqiLT[|r<- =ݔ.< ۇĭqw^BT<3H2潐LDZ#ijV>G$VȬ_9j p\Kr\wԘ$hɹ-XHiјRWQEmguM 1S?3oObcޞ+pg SɆ깕yt Y*+eo+d~V"6 c(CG~]g3ğQTbz@29d2_Y.XT.:񃖀M*BU8s'AYXq]Z{|kvq@Rk5yX!>vպ]f/7RJ<\(sLG=z+y~Nr[Du92^zƠ$#1i5Ӂǎֵl5yAo6 JAT܇5?qJ ъVu{Bu+%rבYS:1ܧ秵E\ցa3钽H%5ʚp/Wh> mMZvۡ<У.~̀%3+_6RnPA{VZ~($\H^L4z5R:mL [X@meKz f<cM3/# ە.C[7S"[6vǾApإZv' *dbkS_Y~+5<*X^د,H7ؙKhdۂ\`cdr;;<+8]\6 %@Rŋ2?7{FU}2wd*ef ʹƨ-ŮCÚGR&8C"!AfNiX,B]9^),O\гC*b: ^6~6=Y!-qӳi'9790TS7rGGo r'[efjuSޞ&H&Xe/ft{ADkON%yЊ ll~fY~4rc_gʖة8kinCY+>9+cD5F VۨZ)yx@eH5"K7Ud: uR*H2<'&L5<iYQojR#uqyT=f!BUIL&ki22VDyq?U (c?~n^iɰNhA_}+ KH%4OO }"8j0?_@fv(ȇjX c7bȫ4k3N[1$2f};ǿ/1i9i^wŵ܏̪O1?0:?ryzt اh.>JJeaGn0 9²;qj)^I}{9OxUg}֣+´[^49/EnXJ x)bv|㥈UXb…l,TDp W;_Vss`|/^3IOW0}@u_X@W* I3k:vmt$W䉵bx@0@0SS}+j8/6oʤ+Ɇ=](0U;b;c脾,lrw,y@y}q}{o3!«4]zmy}Qx7Jl-U<1_$*oW(JP~[.9$7ueo?寘[8.BV"4EdgGw6e|D$?'K9t?C[E5./J{#\{ 1o_kE7wq &N&RH"ei2ZΙH}<b9L7~i@*݅~A}@O Hyp:BR*I Ofjb1+z [='NrzY`e?GA6$śMyMmR{"DIA-;ˆ!Er:n猏*һl}gY 68u3:qΚ2}ͬy{RaTzθ* [U[tx%m3H\z=_MB@ ߷8mCq' ]ZvAO%P^t+h _VG9c "nډ`-[uplkT ~ e kӡtte~Kv9G+M_#~)ـ`w B0Fw[Vיcz<]6z\32:Sg a#?˴AvtM=B>(%1>M {anR.Z!WNx%;ဌ?cS||1cyz%ŵC~[h9 FPj ?9ɞT{^ wRh ggz$Ma ,Û8 S3ot4C}ZB/@6(&y)avul޾B/x8S6| ǟ> X zD[Z57.𪔲E;V ֡b!ģ 6 &p1%ڌyXr{65VbCCwGa>H=OdQϘhAv<c+-܋LbmL ~_zX'Lj26/Lwlmw 4rV@D` хy΄O y=msϕVr{֭\d @N|d6Bܤj㊾#q|0[)zI Wʞzya*Oh;!E\- _)gNE}%gЭgmݤO c*,M2\5=eJ0ٿn9'hS7-~.]iu)eǦ@bc9 ! 17Ǧu}vʀdL~jgY#cqx4[Un õuՃ͑d O[z[,'k<4n/q7Eg1Ȁ?\=oLq|X0nNAB}8p_ IZbM//yGDԢgUS3lj˵+mD3UB(U7$a?|LU2ؔAisX5rI1+^_g#oNUސÏDP хǢ?p锡ta <挀6_=uSE\h|Dh5h%ᘩGt1G4;o5W7%y\x~wkaBZ{F2P@%ZdMwbq%.,Nkg-hH=? 8i|_Z(2!|"WQxy1]z9텚M VuVā$ϻʷڷOx wjx^Jrn,Hwzԛ꿓']c~iՕV*&pljq;o&nNu> 91/9Vֽ'y. 4ikuƪE^=xsүR_W1_vS\7ur]`&CS0Xhwo(k咂{_7{W tN[2.0k$@ևz2/ܯ7bQWdC.,ɢ(+H1t9Iilq#٠B Hu|NὝbWKBǢq%ґ+nweo$&oxTU-y̎)j] N654BD[1svH̚|0L90V%Ig a1/ܵnɵ9 ;@Mm>%+3Ͷ6ēX9C܏Kf /k!,ܸ(.*_KoK1"m7_ۥ뷻߼~tಪӓ:7S];GJJAoeCBs-9[ bj"* =AKUFsbF>z1$#V˵N%ѹ,M)Zu9 rQڂ|tw.+*|=>QKi2dmXTjW9z9}<{~e &hBZRD-5~:sxGMW0k?CuqV?mp£1CH׈THw 2&rmN^5=z)2h8_\K[ݑr~zg8݁W;,ld .o6A'bš,tahAI$-kiUSdU+Q}CPؓsѐI2BlmcS4Jq}B-/ Cwc{|4Y.S24EewY>cVv"sv87| Aw֢R>n->' &7G5׫Di),/T$O\ȠQQ8pӊiX%020CENWyxjNL3ow *Ba7%Z~~iV3?}rzt@:-$' X$9GI4&l([ >ES0:ĭ~ڜg'_b􅹒 cQ`rX1%M 6K8NuGE'QxIRiS5]w[bBHG_CfIC^QvdGYF>)!hm{(4M 3zw[MF*m;w`_7>pHbp:sdѼƷ}5ZU;o k]Λ&9zܛ>ei,l"0-.zvfuRRœqDH֭3޽g0ѳhێ(LZfV71m6iyޝT^O 뫫 10Қu'6qsꑱ eh~dO( $VU×m27b 1ZaHr=G>\Fy (ZqL?уrsI̛ZX?ii곜![rՠXw) ɑ16*.ư Ks{erSj !t4,~5Ɯ Xmgiy!xe+y&)^1ft)w{9~xYA֍ %ncϊ˕!` Լn}"57|nׄ7bU weP09X>t vѱb5\n߇(u2r ^Fޮ(p,xue~֕p#h(tlCjzG8O`TBy"-2jS^ _vQTēeVwiʵEۂ/,d&tG xG_Ig8L7;rY>P'`B# ΌO6FQksy ?~MEh#Ҫ^=qxJ?fMU,xK^ A ˫xk.;R@/% [m>Pc Jez im?qGƱ:ơj8F4& N\2$ m2+Q,_8|FU[g1LYvk`Ґ thy>6% 18s$>uYwϙ 䔮T[7YQ1HJu ,&Bh4oOOc$mm5nD_w ˷N0x !5u|4;B y_س&֤kJpP:v貓uWն} 7.1Z6}}嶤=" kvNu32+%m)wxoz`"@(:?oϰCP0ש~+ %hbB۱FZDJGIgҕ]%_2 >ώM.y+j=іATga݊YBr~uضQ~AZw~J6bzw@|Ȏ":~KףhQPfLAdx֜A QTq!cwH[sؚ~=qdu_WX#.F%6>b:!q/OZ&;󡵾ؚX^PX̯b,ᢛsog_ض X#V.Xy3Oն)]BL3a8%3@/ OJةWEݺ"<>a[* N"ڬR <ݩ%tbzҵ-~}V 0$ʉ:Zt L#\aR K(&n|h1ee P`ȴ8ja~}e?m{$Nh dSJJ%و2&&c/e+JsXMޫIV8kz I[­)cb-TlnM[bZ*L+}u}+5Pݓ>YOB>Y5E5Ge/N}[9d}1{5Ǎ)Gz:d19E~۫Զc̈≽D>+PmjP)0DKKoAȶ=0l4Ol5خ(RYG^-ze?9 kԁ#Zq BeU-bRj G>XKIv ?}:`+MJ!vMBēj]Τ0_BIsOUXܞ./q&qgtLe 9xrKM,_X;hK.@nK +(3EīOT5%4-cD Vϩ"}W yNFwZ<Ӥ}Q[벎d'q%S͞P d#g#ڜ|K}~eת؛xN7/teN5w{ Kdp=lkH2"N#֖х0S%u.J Qi2$ Cv Puɓc/ßb1f3Xt uⴠO\D>G"s,!//;"*_(b'6_+l/'ʃ,;r*q+;+w=h4O晽hg²䮌W`JG<%ۣ>t }5r>5ϜCAV|]|Z79VjB%mc{Cְ۶ub| l7tK%h;'SL 6ifE`/o_,^QRC`SuWC>л-,w`>qx%nE"P:4]Z5@dRKˀTHjקjg/o`w&ϹF;،pĬS8*.?c 4~T}v>CVR3/-\yᾨζXbw1ٖ)d2V{dp~ƗLQʀh#z\5|RC؇OG3Aƕɵ H_Cl >zϞ25(kit@eB`9QX<&6Ij+3`tYK}.6⊉ 8o)}s+RWٱDC[5F{q"6gAظk]nYD:C-]:uթkTQ0'7͖? Ŏ٭)Rx/Y/X8Ȱ# r w=Q:^+e+3:>2CIN#ik+^.>nZ#tdLEhzƙ}4?+oOBz *A| 4*J|qo?CY<&!O[PFN.'݉XXL [WF!k4Law:i @Pvd_c!Q!fQDF.|Cz+ez@gDlS췴2e1SaLTG`|&UiT0_.?@ ')\P{LJ{ (ߞ1;J"1Aq> .#na?A*m|7osk~/6j31ycKhBEU,U뱯8Fݭe]vVu!/`% Vw"/}RrꞍ؇<ƞ8~49S VHW)%6P{/].+pS`Lռ}۽ z~I35襞uB(ǺG;06Lˊ(=s_OB5'[emf&LgXtz `XRpFAm&^[&ܯ#-Ap M&srakU :*MX;޾3ze|h3Pf@TեXh__~>xx+^> XT+ Y@JsP}%{tTk ^rakx*\e Nrp͐+;˫߄8ҏZGeyzy@oК<+LWǼe0aY+3cDIDT3rOOS-e”P@*nMMz\ep_DB2lVBMhPRʗ!~^G1Wρ}?d,9fRk O<[xm=Ź#d+9QA_fm6ܬ}etf Ɖ1z?=2lOȌV#+No`WOfĦdd;SRг|Wҿ3,cbf ߴ<{cBLjJ?7z7D]Sz{ɧ&s|t}۳.k7e A@iIų#76KOuA^wȘr^#Ai'V&IX&,BԂ{!2ㄏe zA(-Ն$_{ ." ZU 6Ͼ$0p#0Ү}c[8ݕKesąTT:J7Ls`ʗ,n_L5*dи)M^1ߗgO8\ Wnw\8Cu'F+iUPh8=*[yR4'isu@n9Feޟ ;5=eVd8;?pknr]C׽ΰb[i7<ώ V[+';ض NoWw~*^0rW朒QӀzbLݏ{,g)/hGEn'A,e6.cu2 r{3Ugc|xy+]Th+(#g:5s*3qޝ S,F5$?y2UO\j6֘^<*I+ExHLd(KZ*ԃ|sC8@˅{I61%2m 2RvJ=w/C?OsE{TdeNɚ{Lv>~?t(˘^]=H 1y!;{43Я1+zz锽U U+u(vZ6l 0xZCB?L}$g%;@-L"a?>J)IN09#z#}P;WaZfp<ɾIw?ݝ0%ETv\Y]GZq-oj1nA1< ^ci"!uJw?)o<[o`  r SAVuCtS@)5緔$׸8Q$}~azstӤ,\ρqp~W<Y~@7/c9B O*) aslWDc!" 蟉K5(qPkTٿMae #a  Z1Mp/r*:,Jd og-W]d0%EBMCs<ⴆ—ao,6S]һ# 'H¨J ,8jD" DqM/ߔt{&w7Lؐ$^bvֆX/u ﶓDt/`()]-7}iXVÜ!Of!:.Qgu 24%C(UE>9Gt{YDcbn6Xsx==:B "լDm2UJQJ0"+^Fcx 5~:[uW&S1b]Ax*tBsqsw:6v%\b:۰rțwysD(>()l: SB Wl(u+Y%CC }L2_|C48cA!FMe 7*5ǔ(X<+,?l:BRG@ᱰ8_V ^R^<|_\e[+deNEߥ5Nz&[P\m@Ic%-5E^Q4)on-Bh1\E&!MjubsZC_Ԛ<ŧeiנ(i!/ޅ[dQ|#"EU]4@EH2LO/ۖ*]0"WBޒ@c^Ձo3j/XP|MA-s(n4F]n?4&; zפa.Rz\F74p Y = f ;[U]@GO H1P[PSi$3_~]qtNudLjY)$1R8w4= 5)Waidz+YBd6 (hUeÿHqɱPAg!丐ӽ5vJQm}Y\ KƖVu4i[vg7;f@~7֒2p)Hq?]T7ߊW{z4gzLAθZI L?wWzl/sQ+O'ӻSφ*PBj%`c Cv9 imX9IF3(}7h֪ lgܱ ?vrY5j/W\ZSaX'tmif14 |ra&[0TͭU+@B.^;߳'SJ%N[lS "ܒA`+w ~D!bZ+ϛȧ fVw0?nwd,4dxq?PhkI-*L>-7PhfȐuwqlD˲żڹ !cjMv{^jdX< & ycIilnd{>~cX^AE4Wz ei?g.}vMjᱫ _tw ZJ'prvp>Z`DFC\&,q~zoWfaND`/:U~|?t^{K"pK] ݥųx  5RGdTx J.<& Mvt]LIֳ$;3d8x+>춌޽c]M]8괊aq@{"\6.̗=;(=]Ycwl/w[Y^'irrs@EC?zd'H+WԂa6#ɓ~&+fFg{C$~7o _!2οO*I&rb+k-s-kCNXv g˧${;\,E|ymZ$2w_"ñV2EmRyn! 1+=l^L7?x8F0NTPݶQG%m@qvZӦCia7֩>J(73'zK#ːEi;a*H!9N 3ʏTTs a ' ܬ $;DcCEfX?7ꑿ@h68FC]Kh/IGcltp?>ZSD2.Y ODJ.~iyڋSxXoZm-w.~{ +3,$o$,9PL" l8ݢ F}܀ &]pYUh<0tT=9k,*d2E+ucEk(PL`Qv'䝧ǃs! Cqko,pC'\?9RE c%?P%/r @~^y?~LGZCkg/s|b?(H5=8 cIZu^Áf "iӂᬭXdȤS*Us*K+ݱ]8~H8iWqb=כ{&!znh5qE=xe? 3 [0pt@HH \fg<3';Y;GE nRrY|^qXVmY)G0W`bF+dLhs%RST+XÁ+a/c^-lߚo]a7[}$_f-SŎF_O?v^BpK^ŏ @a~da7֫epC~$䭜i(b dI WY_&͊Yxj+Pj(wL.'nʼnPlbRx=MQl^B@Tmm\!S _yX>m8붒vk0UwV|j JG̴FKͫuO%$/wK``bj'Tc(u؍BB{E֝` u̅re3dŮ'?* ,&6OE8dҏHKexwGtLC_pfԞEC\م(XcJȸwIg+?瓌@Ga9dkx $ܔBx酂l[ka? @F8I7?5>ZKɎ-zSy\='GnA^ jAnX̛`]J/H[4"dn̫KwnBuƊYם474'n81Q` OAIbST44De qjANtd,}>.nZP;}Z}>:[*w1\1JjW{bcCo_haL_ۓQ&h MLt>O0[8>B]MxIv"_ [/7$"bBI[O Rj)>zYdol*xt<0 [ dܙcN`H͠J@@Dqif㕟2trAxW_@H3(}5k Ԡ>ujCârT/xbP}4kYjuR?U; He\C9?屲GA]M!gDHmxM~~?Rq>A0&J:N/{U.}|]SIBV40o(& K!1ж@w2L>.NJ952}Ҭ數Lo%|~zɦ{.:ߩ/MQ.dl Zhb6 WI $`]? z[@L?nQ¥-7lw[?Ķ8fCIV&S%qC $\gh NNc [l>B1oR0:gAKZon6gx^Mfg)}rs]]ciyVQPųG~^-`l  -(ՌQ +񤕈cٿ>}=I 6٨9ISFW.wP 1Z7k* k,`?in"c?7|˝g6?NM~Sg2Ϸ̧ۊX4f>UNf27l5kVL;d`+x_e(rG7;vǬ1C8~ <5^QPTr[GiȐl[/ͣ;W?(K@B%soвuXcfx_s1ؤ.g!gφ9 4x^<m  u ̾6}㈦UtTLj6a7SψR"@6J߶ ^&+j;f]gghK5ihD[2\pO!x?^ 08F{&;Bed?cw$e d9CO`#s BEedX7`9aQi!-kTs" w zf"^swu#mR(O˪9 ,E" C5UmULȤOk,OrC`F+N[~aUnyVNsdt%3gyuP'k9u?>{26Df7*Q.}ԧ20I_?-=GΑ (?@w,53gl'ޫ5wD 3۹"U'b>zZġW:;D@Rf}륪2ʸBHVVQ#ʳ^(l[% @A J0̃SH}gӷ@sSHk>pPf|A֢ @uLj)]gMWA]ͽOs3c9F j[P/琛! Z.Vk'fd"aiic|qR(wR- s 8ZGyK"dӉ E"܂Gf>IտU<~;cJ \vI:YDl)Ky˩W]}f!fy?z2פ{=ܿs1x  1D}U1l@P<φV޸TXhdC!$ѣ1Op?EHn,.v%7OsPShscRX|*+3t ~F7 ! QM|S =WChz$)Ag4Av`stZ ~T?{!yC-*#_RM3Z|x0δOV.Ots1w9 ["a\96w*$eoLD?5wLF`7v+nK$RpLwvg{\1&딗3j:-<>2De h2*&?pzcMxJ 6HTg?WxKZMnsS0R"F@f, 5≜$]k#M[(h+({m29}zlkaOGA̗d82Hg+ ZmL jۤXXάJ4gy"@ngb!o 5Åz;w'Gヘ6RC*t,kS`YW+V138j&TqT/[ ~/Sh9ɘg)F żQnq^#Qz zZ)z+StI 5"lD= ԖH̿2^cNXoDЕgv4~bқӓn+?2"gi0$4yXRȬAh^Fs`j})ff-y'LE4V9(A3iCϩص"ѤxkܵUM<7 .=&wPR'm/6{ɪr`Yhʊ*Ht$$͓u0jA[{Rs5}fw&V}_Wғ:Λoٕ3z3SU>~VDݨhp͙dWJ5u8.㖓Hg,+jrj.߱}I=m_{@Fnk?ڃK/FwWoLaiJ0JFbZio=䣇w s/Z g̱0{{҃[1x긌7Rkqk7>\4\.U~O{"H\'v҈î vLm/mB5&B?ŔqROF}FJҀ{A9KK3`˳%bߍ*b8[tۖx z4=6@!Z2BG0{A^b.}ezCN=]NO i~#`ƬzLF/\>RUóA07j(Ο0( =qL`!ϰ)iZF'}eVg)z{ᝯhpYĜ+L) 3IM'N yc_ 3\}*l:q%V*9D'Rc OGRW5cr#W!H-3-Pd…:r%Dy猴m :w̹( oCq#ϖZғ5|Bpxq,ۘS{gR.~[\fެ}eClAX.vP.nRK.K pVp^('C~J #G^6), N=7HDMHb{ kx¶~]5kLFN[K(ti}`DxN%~q {w~+͠,] w)t]c6eM,kh1ШPkՐ9}PKzd#GKAj O!""TkpiGӓU?Ewkfx1|D0Uʽɥy`1uC_5\#)Zo`cMcgu_ umX_C߱vc1S3M6΍6Bi}c[h~yh>(\;)ۗ}ą vJ,۲6![72~dda\vPЋPtJ:~+i>5Ƹyx_>zH#lǔɢQNQxKH&_¯b\ʈ3o 6yvzah򀘬[KM,8;K:U~RSC;;^׊(*{ NGNWaӨ%?z>Jy7L3">YG{̈́k"@h#]CPgG_嬳,E=WIy#ip-$*؆_WCy~6I5E i01Ii1pK_$x.IuǠU킑7vv y݀2+`1v(.Ց&ŰC_Nx?fZIƫG7:}WhIM@v)&p\?e4kF; ^l1Jd~ Zi-x6ٛuğRk(&dڀ!ldY 8w-Tlr>Aw›w_^h_|ЋjsSq>u:_>v[&/|9j&T:|@s.޶ku{|_ =Oh8" :A-ZkJ4y.Pʝr<у>=1iitZ`M.ӹ#Bˍ$&G΂<U9W&ۻa TF?J-%nD"'&C̼;mn^ _*Q{=s-ruPL潥oj*mAa2t4/UXknN5{74h(UCJO/W giXAxU| #*]$,@?kN 9)IÙ gaO~@WWiz7BÜ~%2oQHF~qOvJ > Wtȴl/`V~l_&6~Y|1;-^9 @^uMpV٨AZ7)8<4PY[ds/֍zEj–pV!@3% bLi7ќ;l3š:agw4sxr~:~|Srl;G5Jvwd>Աē>K=*/}dHnJnxؗmS`Éjk,! 1{5"WKYAkcZd'R<] zҧW Z;܂LYΰ,6ݙ7ͥiB6/# . #>R>—%bh羚-VMZ / Bc')gMу5EZgkAj {LD渟mvO3E%VD;iGjy"QcZ66a=B9UgOt /}^QFU۴wAmTGuECéBB~O<<|<0ϒ՛C8ݜ ;X%LZ(TiC*W䰢y,e 219)m7rO˼C$3!`QEف8M3w1v>j%|_6E^V,Sۂ͢U7xzINڇv}ܰF^DW=mٳ5Ȃos2b/.z8j30'!f?r^bAiأ MST9Aqֲ"=ҟpÑZnW5ШjiZV~xVҊȳ1a _D?>x"/'eǃ!sZx_s($o{=6wZU[P^ :kK~0Oo=@mCk楦~RޛeӮ_5yp%-$^F<]Q73*#"4$ Zj95" V.RpX#]WW_;%Uy̠NNýV#PwQإ%߮" Η1wMOqv-x3=6'9lRZxO͎ տ;(czpmLj=r$62/M{%h_-,/>SȤܱ{Aޢזx<5"o,^#~;E#J\Il$_}"/MvÂ9zz2\U5Jf/sG'M I7.jEtY5|P]=pyX!]Wf,аֲ#A@:|n`Kqa:͎wO9@+Ɉ6@[%?-/Qy hnޤ)KO8ܒV_d.+y}R' Bl{}^x^E LήR4b>ywBS[lxq`zڧW{3F&hOo!Zg{cBbffįב䎮k"BfKۓ?]tΗW .6TW\i`{puiV95d̨bE?nY'9|e,>>K7>Пd7VT?wv7d`.IqJ!=ma)Q21eB5_-1gl̈́l {gR&/]}v[!$)&i%R̗~!Ż5@xmr)ݧ, 󫼒mc"cX7d*>!dI.$+&+<-q.W4\:\3Xۿ@H'$I{`]rnpy/&[)#03㞇+5F055Õ)&P $F3[7^ykە%%'\umW#o^fQkU !#j*67b|Z4/A✧7cu;xi ˵R8ɤۀ.y~B6U/w^+ڪ?yR xf) Ѳ} tm}W辉H"q2|u$V6;lgt{&ً|8=}!310;$Уe v.is\0p00 .9~%Pd˾ձBBי9J5"߻l,kG_zm!3aGݙ̦9ёAc%.KީUr뱭;yiq7lh+%MϧH,v41e1QVdi6.[OÁP69> Y,{:pILsUv.+/mz?tYAuܻ$]{ܡf9 ^?d݇dӔ10rmgC!K+ԕ7GֹVԾ2dԖ[|Tݡ1@2)MOϪJ&H v\׉kԨuض\GgJ[C QuM]KG=Όy )gӅSsFzcq-KtpLVxTbSU?^2(O"kNҎcJļ`ie V}GH d\у %M/޿Dȶ9g))-e,ZuJW\weZR\Bׯc%cKsO5 (7``Lafwb\7H.rP.}d:`v4W7 \{Fĉ{+CD)0- N%T(uˡw7LI/+h̗+cH; 8t(Wհ92!ewo7[u3o364kNӉBWPć .~:+?h;!jS_68ɧ)x*_mkM;;Uu79Tʳjŗ>:G̞# הl+ѩ 伯xaᗎǽ"&u=FT8\4:knƸXf1|T2esg}~jbRt屛h?bk쭺yR=[ sQf-~W ^Ek{\ 1{ &JDz>~.Z&fm::/7֌%-؛T{i>!gѝnȃ#o SV/j>H[R'7va3Q1O}<1ާψ ZeDO|竽u0kH6R4۱v). QoGʬEW!(*">||{{RS.=~I"V#AzΙ%'`-cmi;M`ˊ9#[VO]3թ}#~eai[$t&.rx*ZȱݩZDZݴ?/0޻5}hZs]w>-R6tʜ9Lu|q~m}n%l b BIV *E &7~nE54a踤`]]4TukU SDtE{RS_(-EdשKսhsk'_r) %bL{]XkU uފq֝XwAځ6.=Id?mU ,Ö˵һYsameo.w[,xVTkv:}L6L{7w  *뙺BO>և2HXJ{wP|UQZvuAƍ|7l Oڷ!j^|WwVe#෸߲vYpKQIz_t/ްBZ(}_O㓅#V=]j;eǟNZJt׸`Qz +#ÖS鷯hmQrMR3t}o擒L ys̴m./ ^aBOMMxyNe@K!gyoE#<7q&720H{׾E+G阧@DX˹_ܥ0mLap 1 _߿wCϾ?+gC;'-CkT(c)t^ƕyu,c8q'&1~ K3!v7/qU2@m w^Z4Q_<˟[2 SJ[hkrpw?3 X*X 6Fp FdWjZOGþ 4ͻPGK7ʩg KCy i[ÀDoNŞ[F cbq^hw^&G~Tl/ ;1l^ĊC.U :=}Q>o5 45u\GH$4 /|1@oY[1 =CՖPX0/KWcݠ渍2LHaUhA]ʆ3[n%nW3LN @->۰-!֝,&9r>/x?@DTgy*WekXoU|Mڂ$-`cJ㖷El_۪Pg <i6hPЊ&C kZ 8.GS 'Z,E-RIJA;tNXbeϵlo>),݇h>GɯZ_=ghH;9ZDbmG-f߮^r[!5fpFqm>"rM|~^ x4_xxp[I޵Keޘ.sC9MO\l/w[zm6\u|kc %Y&qrkϼV[|mp\dӒ6g * FG*e4^;[͗ gTC1FnyI wuz PyST [ : ym2D5Xߵ%zͨC'P-FwDrvebKm`_ݒ*,rN׼/ Yϛ.7ҁW/'˩FW|CMGI8sUU^)fAt#2o]C[[}(**5C5_m3P} P 3d4(zt@Zy þ QfP6XUl)_Ǿj9mv7`}AVV<_՞DCy08( iZʄ]мyMggb#9kZ& )Y JYG%+ג^ y )B*)|u1ںG3pO;~[=se{iInQMߢg.L0Ha\E:.]y=[+c$-ՋI2#ET 5'l~c2"myѲ8+-쵥PFrU[TZT M}ڷKR*KQIk+\X` NW[q_N˾۱p[]lo7I9"bmdЖP rQ{+/>Ъ+^j3Xh``Rz\]@} O*+|4ڰh^锇?htcBvYd?,$+[U_[5bR4Tx)qeZ[OR2>QRÐk;?:?d.tI!P\jxڑ|ݪbBv$}qʓRpm*XSH^C̹6]'eFIT ~8[f:J9apl}XL{bXH,ڋH“<[*,qh,DߓD:E =Y\ݓQhP;MLX'KRAm1'MCGNQ9!`1 I]Ɲ1 S=b47()2`31I;~(*["*Y(\+<`Lؑńc[qqx$*5bjbg(w4b) 1p`$`Xɚ ~~~D<ꩀ)'/\皃vp`$˲( lcX2Wi@V4% bʼnh*H/,(F" ~`-nŅL_{ q7v24EX5 ( ,T'aŒtS* NFgxO payMKK±f\tdl @:-rDК( "Up7?rjXƒh~l::g8IMG;4'BS_GE9 LNYd5Mf )C'3 +{16d.}Tsf֜S$W83nݻy`4>4W=y8M0@Y1r'$*a;:fs;}:Mpǃ$o<<ɞ,i 97?q1fW,ӣt|ǁ3#ŸŜ'gZ'Vhdo]2XΝ镳a?.f*Ȧ{W Y3o3E+g6g&_.\!? S/3L*t,rI\(<2泱?ZO[قP䗁u*_ghei̿`~>]>@{|$9S86ɝn+p=Ǔ/p\oKoV/2g7&<?Aum;AAxMͩO+;nX<x:VA\\z@cʓt 齓Q}(;[֍&s~LyڰQzeN$vi؈c+.;|v1C<: ByI " '.Y O'ͲSdj C,T($Ńq5_^&lL``i6` j'kDY7\4ut Kg ITS ::-"H+KY%ٮ}v]qpNZzЀ68Ipi)$)q@[q;wfܹsg+5383]x,4w , 6?=/#nI%MXsS:5el ܇: RfdOLzMKij,OT r0zcF#6>ȟ#Ȧ∜joFRN|ÞbJ$*KBi zM`OP%(B9C\mx? `#D 8m {5,x1ŧsF!Ý lyQf.bOQ5Ⱈ"酀OzBc32Ѐs"i~qjZ03B+&X99˒+lUk YXDnՎnKy?M#jK5;FTM JܴlK\A~"x+]*XAUFqfܬlӬI1nߴ!P~AGAۖZ}6މhIb#(EdؔT5 ' (hU|)L+ 4dDy]^5Xh-&lmcvG$OZ2Cr1"s M aC~@Qh&JWV2meeѺ^W ZʢA1۬6(´ӫaI:`tr(^ؚ׫q¤Y8uSҼ"Χym2$`:5NjT[|%N͍cno iiíH O[uo{'7Mpۆz{]k! wڂ6aCYl6ipj pҏsmff^d$\nlWbo^J s CksO` g wU$ѣV5Vg/4qa87U_VkQE?sk]_g,60D7տ;6u>7;62JQ'gOPd,|Nd7銍YTߴpe,$13Ttx10zr92/xt) $!ݺu{ac>j]Wá\%I5֭ӊnQu( 뱽stSR EB)rt\2mïC"Xc&| * h^L]CzOz9s5bxڀCǐq*b.~HZ}2KRf ҡ{erHKņ g]NG?ЫkQE-rex:tuq#]]ͮ:A_uuL+"h n?s\Ϩ͟OB]~=~ z>=7*pw.nߺ4{`#F|GSWx7G=;%*ٝoOwXf\t@4Ȼwf1n\@O hV !E`{9NYN)YHrI QD2TIR69eEaTLQmCQsk|ğHQ|̙hMUɋٍHgI *svjtukNu[C.0ǐ%Ce`-pB(dGFƶ̀ |<-7%+}ɂ:!$1n{8)fbZk&aT~J cdU\yBm*0)(?pHv@$ )9Έ BV$8xϵʊtX F^wo%ܠ3&8&PrR.AyDJy>ɕ@XS] |JF'%ROG~s$ Xh@;]6hJa$u7M$Rt@1,eIpE_LCcY]ȕJ R2)f %~ jH0oYe6zT!}VZfԱJj#M`M9)|=19Ul97#:!Ǩ>&˳*ޟUHk? Ynn;6O=Vfex&:hh ՘[T˩l@DP$Y>E,$߈< 'iL(iHόZSpxh[tʚNj4F"vAR;y5c/+XSZR1bR^*r5^T=% C+ӡba *',sXDqO^?U!T*]hW6Qjمk(>i?,Չ"ZT]bt+S_ԥs ËT'.+/umEVڪֲVitE^McKʡ2 3)ӱ懁R9e^(#iKԩȂ[2ZMWg5+ƶ ԦtD,:uIrrV%PGTGt s9GZs>8Gk2cDEъǝ'h8s<37;ƕwE׼AWt7ۿ~_44q{_jK||mK/&x~s=3\@SnVy?מjwWKk8yj͏~G≁;sG >ɍG|)|)n{pYgJ'?N/^ޕ)ޓs_?=~wv<{?+}a2]:|g=7<^zo<ᕡիw>׫~^tߔ^ɇt͕ۥ~' {K?[ǿ_Ul6Xz饗xs/LJXeKgS/^Ƕ!5|^tG^8~kǯr~nq-/+Wۿ?ҵ_% 冯>.nՑޞ_Mmn98ij?ޏ4mwEә'G7/lz\wwj{[g+ +M܍+wm>{3{V4f;ɾB2/4͉0d) w@{7#()L-)4>3_q{1me|fH9cpr/1-t?oMԂڌF< ӎ^" :'hg7z)nyj-!`T)-%@]րѧ BJ=(dךᢒQ)!f@EeSb.W(f^06{_~ތW'$zF1Ɣa4!8N˸QʹᏠ䦉 `:LJmLh҆k婦8O[Z^{*ry@"SX:+)"r tTiWFexT^r$ps _laO1 -5LHJ ^͛N$ڠnY0?a2 ˳ dxĜؔZ;j k(  3BF`6/.GA}.)p]Orh؈ǤMO8j*SdNJ$FQsɔSPtWV&S `zK]mP$ёsݘ8LM2!c,߯D @2A.sPebQY `!P$ЕO!3p\v6nBڵ Zd7\2G:AHQv|l apux.z9>n#Ly)Qxc qH/XyxA*A1WY!$ '@ @Bla &a2Sv JA$S){S) y?HCpeF,;-sDEVAӫD>\Q92n:Úp*Dh2C `J.fEgUIQ1>"V&xJ׸(Bqo0ʂ %d6-PlL\t X\6٨*>m*⹘R8Z-#F:8 6V DX܁KZ;gysl%:MU7ʤRH6sH3 :#(`q'Pj|-+VS} FXP +a!- ԬKǞL)Y8)qQz']gE˸ 0H /gi;2{!1)giQCe:X2pJ3ZVm$'$h~K@h~ I Xݤ:}\E41*jY8dW L& ~Zv\Rz _3͠l ASķ"ķ=kL[g߽u\QG8\c*!] Ic24M0/C!H"̤ǥ3LvrZg6T])ɤ+v%gŨl6[(i<(Z=|ssW]j|q&e ip1v i+G,^5?+z+ʂ-=eeO~tcier6e@uU?k.:$pIB} TL"PUxȸ7lO6U=+ԁ4c 4)OWs\˥0ϴL{u0]\d|6|lF!Pe=wlKs(Cҟsk;&pC-۰\.o܆҇6(+ (7*$2m nAp{JA+[.a {#AH"O s/?`7fOiS"Bƥ Dž8 &:{Z N \* ;4ܨ"cӞ"]?]D]5\l 1׋-l?[A }ts,D\ȚQޭuBRBbpCc5ԏ՗cv7tV`!C!NhP0=s">;0=?`I;wCdՐ j"tmwun-xl=xi 'fĠ@?;5ۙɳ9@5 ;NA^Yf;C_0C a0 UXNᄄ.eश3KBIjcpԢ r<+=|'*g&<=&ҧIl[xߐ9Kg^|͊!@Ҳ0X뱻qlg&bt'H'Z_+ٓgY tV`gfJ>+Vg_:OS鮂sË3 ll\F<ˍAvn< 6fwhit0t27{4w7:#rvQyp7u Wkc8<΃ݳi;VitmI#xYM D>.ցsX9Y(N?o*0$Zѱ.n bQA܌`O@"zv_τm}*8[CAwr1ю6tACZ l;c`{xO 5YWS<2s#)"`4 agWOi w~_ ipс> hkU'OwUJ-ۛ|anޛ|*n͗.|y\C{2< +F6Rel;xr>αszTd񡞾3&)&Kq.?xL)@A)㣧`T՛=<'szAC=} POG nV1FxiV~k2Yo=ǃ}[Ix̏K'i7X7]*Wsu?zq=ᗈin6!@??P$Kr޲ET*U!]XX S F]tn--іj:-΄A9U@Qڢ"S_o"RHF&dja UM_)QP@;D2?SjRŮNjTE;uAڭ;.2ԌEJ:}mm 95IP`t_wJ7 ZF_+&ׯ ҥ|@7.sQd\P'Āk~:(R,R RJ(^ ":b/> UKs-Hi[^"MD+$ySgq  hGL2ԦU &@:'=G϶zPu/{9otzxD*]xy|s'̓S/H*\G"$aݾ2⑾ةE_}+B.,{qw*|sKM_ʔA+IWTkl@miU#63]..ӼufPʀDx',8?TAހE'~E-F1+hBG %/WX[^ܑQ>Kqw9UFM\"ڞu8nn_1ۀ8f@Syۼ E@`h6ʑb/o3O`8<*xhG=1ͷ/^0˺AWBA\q [q檺/cG:]@\s*YuN)׾BDlVtoA&=$1V#D l/SP/gP>HMqeS<Ҫ1=k:i?Rw.}$uZj*E;X$lSZh7{zu>PGaP0<0{^܂D{W؏PA?i q' 0ƒF;V >DKRA.rDy@7̫Zyt?z֨ @"F93l+[.'hW^&Ps,5CwƷ^ ={)9%e0}ӋLրCS,42Vx-bzy{F^^AsaLlw atF2fA@#6D\*R1@GS+Rŗ SnldEjPbuwCSh-= „ߐEpl/o;QϙV`Yj*1l Z4E_fPдy<(T&/c%IU&Q@;^e3I^66SEb28`91 _Tf;*3L\RGr \Ҽu5 )SW{`k_!bXQ jTb{uٽUQtjf(kdPL|$e?5L ;g{9u<~1P!FV]qz^0[6DYEfTf ,",`Ҍ0$&:bē~t&^ [ *ڰnjBJ yz+ݬt=/t.(c[>SZ0` Mfm]:вm;B_J̙LSzuF{ƿ"*l#TSo}[یQ~:_ZTq_$NpJ"C\*Z*IjI-jb4%@#S"ۨRR~1h_OP\zsMZ{t3E巋5w V}/r^]ZsS3@4 ΋O 1ZUub"N;GT ;I:;{6RDfܧzҙ%@voF.q=fIBzX+oIȨiɔB@B@+F@HYjmI }ob7WYQTRw${vNhxSs4 p=KI5P6?=M=D@4**P\/ n$QD'u0 ++,$E$YT$]+4T͟.2y|O>\WXkzxz|Z['Z[FEf݌Tlf/q (ݜНȫMXBr=Lp1@cI.%B[TBS7愀.L 0>T( Hԫ;lA@iwsuEHTAU[_)>=L:Nr6P P!ꉜ͟lRDY^<$9lTXAMyxtD],=s˯7?!Wަ|s%}ֈS)=e vtB/COPaD@ DAI,2aGeY%w[ʷ] QbQrNׁ(]˿M\Ftx SW؄LDѕHp!bI4ȻXz {HH-7S@ё=c 44JGm-UxKʫy.8iUNPw)ȊnRoXj\1x(![|YFUNPiK `ӟ&qc}'IbU|4T[̚2ob?zy_~Vdq0#!*t!?b%fV}uCDzYH~&P"X٪\1s%DGl? 6ӊ,dY P"`] %Z-&kk]Q7ђy*N1t%l7- K~0=#WLh(޽ƁxwKkU>ଈ$=!#*t,}.;*+7]?z/&(!9;ʃ4O}`4] V`}Bל՜yIiT, `*ЅiY =}E0W >G*%&5€5㾓@yUp^+ʞPi8MLx&F(R]%X6/&jͻ!jُ?y}8`aK%"ayB1/$?$։k]I2?>0p/&^"@P7Qu_Q\*=Q"&|rH̫Ed% .BJ/ܽ@ T퀘_Gij`CJtP@l*Gj޽h}Ty,_>y`,]Gϔ(*ɟsl..q;_%.n +&edTY2~WM_>¤)q=fÆP!v@㟆]1by7pIE@SяHt̀` m ml`5 R%O>Xr^ȗ*[]2)J:ǃHTaC/C7@0˘Dq2UHLY\TQڠ3X@Q!d_ZQ2qß\#K\[TBяnwPj, $ o#KZHϮ%'26A󇜗ѓk^%DTZRiS@€**CQv?V,5Dkj$P@1*v6He H1OEQ\'aM)G)_>LX,vME=4T 7 Z~BlE:jB}җDUL)^VT^gݏ-aV 0N8knz K+w U!0 fK' .3 ,^R o3|Hӓ)Zf; GdlcrWLyJW^EZ&8ClIr, Yd:ՇKQJƞYv!p?F"X}D rTD ,_.meTI 3~RUu MpgE3;E 1)ΐW4J.aĤTzw`Tv_U%_LK Yhc 6@!,}*D)Z|3 QO" _`+~ Kv߿LʢdMellVej~ D3ԉ P9340uea}uJTa8l 0jͬ},$ۗ*ac~%r\MehD-]@iŢN@v~nBo+L]rY>W ț_׸ p^-?e@h ysXRHT`& ӽX|AY]K'`8w ^y! ?&?R|WA& ^EE"ue_Rli,Ye WLLg{jրu=kp )MW4{sK:;⥚"~͑HA 8pQP*g(} )q?sg}f#,n6Q6[^}Bl)lZ@vVMcE ()XgeJQL&~X2i@c,͇*@)ڻ!@7 i%cg]\t@.^Pr6wHrf$}Y@k:U'S ۬012D{k $ Of+P;f @MŜ-]Y#Y@, ~u"hLL*Ш&,1xO6->ǯ"lB-Y@`n"@ao%'?fIه@%o+"@O=GkƧKw﩮|2:/A\ L׍DT}IaZ"*PVMTL*|bߕ/s;U=D]1S`&]j b:/-X2@Xd*d/Jdo3RDO2γ{QvV,D,<H DRtؒu%j!V2ڸk@L|wg(ܾ98%c߿|[I%'[j*ğHX@b VfmbHe}0+w`~]y2| C@P4U|IJmri(9D+ƗADNj,v&.O_]>HP_y:%J sbBIհGq~y/3BƗbhlK L-c[+k s}Lctglꥷ6E']Z'ݵqoUY[vCCv1HF?bCYo``M?w]x._](;{7 .]VUQ IMXs%}04D&%uP,=Q7@絏t|k\ :WO eWX._2A{O !iRi~C^]DsM pة˅zDWwY⥥@Q5'.d7.U%S_yB^•JDS7ӌdd$K6Uu+="KcAE Mb ˓)*/͏`X -AȖZ揾`/" z < t9ȞlNQ6anT6 e%M49Oh>k04 g=P6+]+4_,)"??d@ *JIh<h5G$a6y,C.",^r(;>kKݧw(-B'? \~mN/WOGh@2JO),?wjx𰖎*h$DK5lT4`._8Xv$V.€M?zy uǿHa2N?ߌ~DL|*TG'5T/LI,%It7~sNU'XnlʮEQ]Ed؏e gD_y5JmYIJ v+Y`m٦oD6f%Ec7/mlfP٬`a4y@iQZ_+WD;{BN3; ܀5Dqj8W9O?hk7'i:L.(u5@zHbFq6b.߉fHqjYtX\!b}A^lx|͐Fg0K|\ntsPߗsSC(ߣCUjjF\e* :︤!`yQL"Ã9މ P-G:xr Pq5Ȗm9ľb6pl1}Ƿ1Em}{&ݸGT/XVdX.mоnaTa,n4Ν;[r^6kneV D%1+oz;)wZ/%>ʤD۟ W6=Dk% LʯhF:f:u."h|9bzs?Q߱onC]^ӟ'ܛ6l.@ܷ1 }r~)ZUxY!hzE;pXq,K˄'4e蕦QhogCN|Ɲ1Œ'u A(+6׽JQAG 3EZ;M#,dco&io9QBBsg{?JY1/S"V|cbpb͛Ւ羷c5K`2S :$lľe* .GfX)ԀeB_`'5ˍJ,\s{Z7~?hԫe:weL|+qq;A#zom#cr48* ˨:wt2Q:%&3OYN+ש{Jp.YɉƩʔd aicߛ.+1ϋT{nnGTt;5-F*Ci͔߬,ż yd_f -A0ƈ(o{$ \swd7 )W&wng>ҨioR] 9|'^0 H[QXr-A;&P\&-0 DSw B`:ě2~vR8mS];o?jV /+kNqA6OzA4+NiJ憃{-17QL ANxxStt5/@zKN[Qv6VA>[&>"q LٶA=Jhq ĜDdr`VLi`H D- ]ݝKPh?= p=Wf^UG-Ы㼧vwy~(2m[SiVr# :E`~/KCfq{ed{IDŽNm[lb{:#M9Jn;MIk&k~qh?wz, :6ei4қhp.@➁ odWxLf!GtW'h$i9~A'ˏn ;hG.@7jw%Nfvˏsb.)vvA-, rvH E]sRM0t,wF@ZE\6).FI(NK{i$ h`^=v48k־ٛo#, NG_{qDG)Y'[̂W`TԪRPK/'sK ѷ,s0㲦}üGfzԢPOpY!9z/޴4|Ϝ;BébHfJ)n{Br.o~ a)A171-7kN{bjrƪ|ct 9mtm^_yzǪ2(ĐJɲbD0 7~tI7ezPQ_#`1nRIF׀8 P|f7Np7GwE7Vڛˇ{Π\-*ر9^-=>"8NxjrNGۗ?hե'z*k~V=.%q:mhZCV4W7 N O[ݪ5Wg0dTsθ~Mߪ;ƕ.1,h+TD1eglAf\ ܎];-:a1[Ead [߿EHq .!KbnA]z{yo-o5)5nyPDtDEϾ&mZ| dҤs%MG{$k緑vV*T{yz3èsyȫ|_Hvܓ[_8\%۲|nLsE 99aPԭ8V cܶʞӃC?viS]9;{B7ڪ{$vPqmZ}/Mt%yeB;AU7s9pdSsZ6PJc%SxS+ PyJqmoeSVhU_s|i2խƿK4!#nSp%=zCu1HA$UthAn+|TyG2!,N{\X̂N 󨗖ڕI"Ov}@h6;Û*{ADbΎ(Ng$Vf0Zk+9gE[$(go͟yF }C9 y[aǽꖉ(_>獻*\7itd;@$!>`0g]CVSfjG=Ya}{A9ؙr'ea7Διw+Umbz4t;;s#WF㙫2"C-ma湔[bm~NyҬ=+1{_XECŗM Cp;i֧B(ޛ4W)3\p'ϸg^ݬ/f+/Ee01Xp(-Ei řKle9UM7l*ٻgPe۸ yôZ?4Ox^[2ں#qHL{]o9|gH+v68,}(|z8YjJ'Zkѽi7lSu$;|GJ]G%oݓ=w]<xˊM"h sVDs]Э[r![y{.[_o4un]VڒX(KndW>fRHMYc=31{E/Íjz_˚V8)@RE>YT?=>[/f4dzfKp7;޺y//ZxWhrRs\<@z]cphҁ638}/>ÂjjwOIC VӠL#)=q|ܹޮ ~ bCݛ;bG iz!J+T"wEnR(`pS~ ~D+-$VTt8PXdIN1*ypmƷ>>Pxۛ%_ 9(EkR5^nr͆ |8`U;̚9rω_yvʓ7w6erZn6k_0Y Ҁ?l ?3#~:jZ(t9u;N;mra*la,EingAQA':xS9\꟮HN#)CUF@S}_Ef1l_w.(p*lt=Q#=6bߑOQ(DܕEցHv0\>hbJhoؤkޯ[*{`:)vbaȩE,sHnT0~NA70_Z܃x Yz&zLu;GTǫyR ?oW0e ݼ(5^b=@'9$[>仠 { ٰ}4'li ݤtz _|sZ8҃oV:0ehoWI'=(^:e[P[FA иsk` Gl`vCw\jp5 ]2:(dQ`KG*\j欤A(!gZ<{8t7Ը6 {&/4ve2f)z2?3@ o@zdkϴ6`m09 ‘ù )]T\oLx=sRF{we&'Va±rRqMxq,^ŬmN䌧A~7pdX94ɭ HmX{sm%yޫq~x2Z~K&V؆m~yU=FD3W F4?Eq6(-xK!™+Þ~#/N4Crx̷{_(hW(=@,MnJ 5} Q7Ohha($z $oud,nnup̸̫<-?KۨiCNy~ ?|̬:Q[$D-F)|So Tώ9V5J3WgIxk:C!j @pžI*$y{CF:N%Kƅ lMA&7(⳩_Jm9׸=l5Ԇ[ѵM],O"M/Ȼ6UVDJMd;dڕf:t{٥Qyffqs œB/"u8JrRjkLђ 漢= UQϙmϲ\;>{%fRk Oݱ@9N:mzf^@æ:Se|-3oVjyul1*M玊OQб ܷa1$g=TW2q֬ߒZZѯ>x}+W%m{w ^q()Ӽ!@Q^h'_,ogzY'iQ>L)cu~R};xe7C p ZИ*ğ6NH0YBݧ{/d}ԁm+dI-by(YfZ3lLJGʰYG b̕ L\}Howx&VzO]DoQ6ʉʳsLa˓w Agrz[I^7B )l9M?ۓu&\|"Ƚu džGCGtjczq, 6-~Z<8b*_6n٬RyǎʴuZ.G (ZW/zEi0~Uu.} VcidŲ?fH <51 EыʟXAcKƼsUVn_h580!#dXXz,GW37" ~~ PJlc:g_bdq)0a~W~u}sH* L%S,x^[+VmG (ӲX>+GL pu{mJsDS, Y3ݜkARIؐ#'e\{(C;4NsӇK=={S 4 zDEcM+׋m .x8WV-@m+mȨ6_Gi۟uL``t|7e\7+3Nv\g(G̅ħ3.@{JMfm#i Oz\W~1{f\.@+|~2t֩q[RkzBvWʾiXF~:SoįԩXHkX[ 1Un \p>V?nH (ؕ|0%qy7)Y+~U= bVrZ;M#yF+_j%s5{1IqUg ;~A:O n#Vdz1o}'gMJm"mwh랝QiJriԑMlD2@[~RMOl}ϯeVuVsfg9;ԕ:*7.ȊTG֥\:}MH1x U*5io>8q|yN( {sE5^#԰S}H_{ݚ8. oAc\ GfUȜ/CjȞ8l"PK7웂q<;^6~.gѲL!`x[ zgM!]3Ǹ{1N/žUrwU;z&o` $' ܇pe'U]'6=+z&gu~ '0R۵:u<^zgP09c Nsϒs0̓lZrď^ >MZp8wf飴{HA0yͼ> sh|zP9' O 1cssב7;U cyطKg \Jн{3n}%l!pS 9#!ZNT+0 WЙwcA.2bDFݙ6;CʗZ3老)CwJGH!$x+̷Tu2*ɹvnHqeܨ6R `GUG Rb!M3敾sǥx1O)+G&95acȮi˅^,gf.Yۋc٭8/ 5=8 X7 w;Hi64HT/Pu.v8SN0M]Ob #b?j-tJ띐ņ`N orv})mn.o2 LiuPBF:}68O{bQ'w?=хJ{bP>= =-n'yNm!i7Ӽ"o(&>jb+[,LD [d Ik_osizۚB|3TOІjG'^X/,G&5s4^sތ |f*bCٚZ#`WL9NomMsiz5BvH ^ZQ":EsU(<VF ADf+:f=LPúWW9@ ׷e.I-iE=nyF-U36j;9AsZǏgѵ?tWv?exY9Lr|i,e %ڸ1$?khen;guL 0GyVVQ2VyUNю 5i`=zԐsQF8MUAa& 0) >n %G2{{ZEBDݠ{|zː_0 '}Kp%V345 yfSyadMT|{`Jr'vi2>iUt4osP_3ib[ZptP#old3ļm6p9lWB'oγ~5C5>ީ==$s̚<G*hAJA9ѓ͑}A ^U ŅeX^8iyڑ-g4r^T8/{g$G>C=Px}/c;BvRn57rr̬B h nY1Cq6#:<"D1-G\^*{ 's?49b,ٽOlB@S~sBM|  A3t5x.TM.S0(;bF3g#ye6V'.'2(L[F`QMCz[*{$:fѿKbF3gpPfPnţ:}hx Rʭro+zXjǚAdYlj ևY)HXi*i/~]u&ucj@3{VP_44ھnr{r;]v01y8Ћt>L~ +YD|ޢ"5|7+΃^=Ik F=nSDr꧖ާ39{EEus8Ul7Sn~Ƞ3x%.Y)?0,oJp>ԽF@Qc(/V`[96gl^ ^999U.KqJR I7ôK R8~)tńSP76xYW4x=wvkW bGƜ_u"lߑDc0/[DbBY2E0 sxd"vLJjEE냥k^ǰ.&N,`!u c~XX>G>tDͷZ0"Pl8K6 >#PpOٻg;5NAs 'aFC{wlO]b.{5 ?goyjozu¨w9ꍘEAtDƇ0;8p#fmщgmAC[wlښa}{kݣ њuiX-S9/)+p:'%69kA ]ރw݉fv[:6Yᦔ逮80' ?l)/@l0wκ œSjF* GƉ"BxGflyDKh{]/r4 ܇(^%g84\CJ0v:qHJ ( :'gk=s 0i< % 3q-2QZlȳ|%Ju{26"՚W m /yqX7ɎϹlc#ff-\{oaĄ̤4c }ܾ< 4}|l÷ 3S^f\7l M%X;]k#IqTwh +- -:L=sz^@>a,ٺ;o4 ӦX'6m>z3OeZ7yIRSO])l-qedZGa1|B3Uӱ]&"%2vs:WTJMiógG{By ʶaz8pGµ"M_Y`ۺqGXP2.N`sms_ FzJ)694Q>VUf V׍U/cni~ su<FD`r{x$L? ('֫re0oI{ n%]0 |SOM5n3SKƹ.gd~W&ӎ{@hۀʷ̇9~s>1k56w;7j9%gy=#5x>0 A9EH~!M֋s۳B'~SjR"e! !Aqy Y~4EY)~e؄c`&I99!}S0Y*:03=oZc si 2]}eoHr鍿}>ڂ45ăKrI?\64 U|3+e×dݥ] 绱yLWjgC g)3܁R j;= 1FYڞBnʲ %{ٶ yU n:͡6wP`N/Xthc]* ![TSϳX]MKO5"pK>gdp{WZ}DVۮ/nrB@ M3ݟ_wvvD )fɞΝ5[v0h3=Ý0qK+(iJua^ϳdR@24zSw,,ԄxQOqbl{xo1wxW,QL 'hel7z0 J_-[# 2w$0NԹ^B{Էe)=z~eW5z-ՙж0;s(ֈڎ*г k PuĜ6zN zϕ mpˀ4D`~rSvJ_já_Ҷi^9:`k-腞}n,˭NÚ}.0Vk!O%9:WW-ۯ(uukgZ~}_Pf=8^i>pzg茢7@2ž{4#(>SOaga祽Qȧ;G~ZplJ,ȿ6@ D|^֎oUH2SgWII%'D^'&e:WϢF)(םfN vEpHRXߺZa䉽7bOљ% dڧv8\gB! ssdS mǤ^'__0 p jKoիzG OO45dǭ-=t1(ZX]WLO rgu!^{%=9$!U莿VqR! & {IMly/pH"zg _Ք^"Uo.50+`oBF:jc%`Ӿ{R`0ۭM\<({Bӌk3 3f퐄w%P0{^}rR RB밄՗\jV ,ԗ6iYS>L.朸TCR,yL| Y"o=+: &o9_B0xn%yVM'qo 0 ɹ M9%wi'{uy@mF@ @ݺ_:{v%}&(X`$d= Ρ^v&ílpWqsvb6YU$&sáCCKyp 5NL:*S&لs+KJLN+?B`u,_4ob(Y|ɻ('02x[fi/v GTOrDGsnSޭ+앧K L'Woqj>xwSK>PpPzSF|-m= iѧ? -<.jI}XɏpN5>PRڿSjҜ"xF[S^Y=:c=T 0# 2Yzuj_tcX8.#.KEb >X]G4Zz1 k zqz82bG ]FtP;TgQJRVVH|p=Y0I_Z^×HteܲOuh:d!oug!VFJà'iPĎ &՚3'-B<ճ x+軽LQ`=`_Y0Hn沫{IZHkC$?>70/L.F}O̡M #UQ%}!>x *l;o~w1:0m%sbd]ݓLJr>& k[QY~)SrK WdS&C;h^nf{LUrbY +G6u=9|ФIlͅU#ݮv8x;膂+P{'} sAKdU> 0ux7;p.yJ5 EtdLwtrgL/Lwb Z Ԋ):>;FR-#PSr̀Z(E`r3_P^Fqs7LEW. 3sa6AK0X36 fGxI0l&ڕj ߃n'0BP(砉m"^ٓ2/hF,>**e"*[@Z7l]:1 lW{(gH_B-k$JěZsg#6DmEe/YJh3ɀrnxN{>rJ7"5-2Ǔ X؇XhHKN.^#{h=EtĨvlI ZgqNk*d6Oɽ=o>ӏ^;Mb=l BN{ܐDab<`Ak?!~$:s/a7^Sm#߈3a +knH}a2Ιȟ0h.M<.)PB- f15 ägr EIeQyX#v/|c |$J[w7'Z]P |$sU8w̭]W6eͅR˚vAvni/@ۣ~>[a[ $ۙ GS0YvN,X/ϫ,M61F ?f/~es ˝zl\+ꊌH@?TA yb ]FI6qA stܙO%&jʀ+gQOOG:xKA;V9ZnڞvDcDSu_{ nXq> 0h݅A1-df]Si"cSf<$uIuߡoLOjPO81!' ci08LChւMԅfe y-I1tkJMA{2XM=K%wUzzzzкՎ ^w@dž$Kf= u!XTsD+6BD/$}:uGě'c:5 unդfPw:dg} fAIcE^faoܬZY:1Q7]+s0ϕYJ| )2"wJ6^0k鋏P(%JԽ*cI 4K^_-5fx}Dț|Q4)E>g$_dGS֫IFreO'%|I$,Y"|I"\,oٺ1lz~ݔ%yC'ҕ82}ڎt+R9K*+ߋ Auɕ;Mo@!eG ݲGn&{ SRMj3rIEj.@/Q3٭t=A0 wQ)tCB+}0"Ϥ} w2;oTLsz˷b]Rw&W\-f>Е W!Q΀ +W"1غvh$xu[LBv{H)̵ wm2.D eRtAn 0Ĭ_w tBq T|ȗ]snb ~ʒ'И}hb;F\ ao_RK!kD!K #[zmJ!d#yeÍs1(18|Qtߗ Gܐ㊽!b]7R>ѥA,_EFKkN5Nuv/ً>N+uf>a>Jʳ%YBJAMg0zIUfo{TGFVd+GIN8IOh! ?#[DOL/HٯB)eɿ LK_X^ӪI[[D%BLtU 88{@vw*dNZcDt"=ld70+/)sB٬wǿЬ'k6 ,i +:L|Y5o~ù$u}8ĊA!ٚjiC/+Оe5Rxf5{IlfGdG*Y/iHz{vl6a4FK!{v۾L?nP߀{*H?EJ1[kъ'$?w$c=gc3/FCKI/x" 8ȹy 6Vz7]Տ9vARvxZjDCrSRF2|l5)WyzǮSkjc#ԋxuJn9&T@3,Ҙ7smXLt`jg(mr <9lHypY$wy],0ptգ֨RMA6iDE=G(mڃe٪,!4;ZN21Gw*1ë,*]̳4G"NɆE[!RUNF3z QE=`^oY8%^ fCuci!YĬCxgIU1q8]{=UmȥgDa{^0+^I}/S8|l݆[Ȧbv59%y?ҬJ@-$&xǨP\Gn?*LL2{'?N/A.ŏԈ_$]׃xM@H5@icvOJMW1d|p̘6A^F<-P(ˋ}Ұo ,`pNn']$cޙΚ&ɥ">Un|di<ɡd(t|,gfG.{z'VEǹ䍕`+-;-T[#}2 y=@M;(_h$< o_4(+r"lze#GVjA @5/zx;gb[yl4ktkXt ,H+N?t9lB&ExRM 4\[k`0,o w\8yO>jCA:~BR Ք`C:kf$~dR/ڎo?=XY$~C{<&pvrh"S$ls 6D:Hh_&L2rqe~:_HK/@YpW#'T#bfh9hZwykCU]J6WӀ¥BPIzbfdz0  Ԅ Q g^9Q.7W==Hkv,V NE:l|T\8 :ۄT. 1fptׇD]e9ƛ5rzī>ʋxƄ~`)KeJdv!E^贽d.rxC _+Uʼ\2qӺf'7}R͢Ǒ8uDrǴ 2XM[n^q:eٯ\/hҙbX OA5Gk:ЌD?#ŏ jYo'?ڢcX-ls"$ A_cm9^0YNzj.[?=LJYkD¹aA!0o^u}PuIjN:>;7΄(EF5^yqRD8(wN1a[s4l&f=6rx;3'E (oTEm|f4}fg]8 ICL&qq XX؞E.#} {! vJ{ `6:vr_,َEI>L~@X u_5qcN޼Sz%" SES n=yYdV2Ĝ.ͫo+c5xйer?F\&ٞkkNrn,]aBÙtE<L eZ@3ѐ ̖@#Uo1ŹAH ҽBCVr/@?{ l8uwI݉vk'Q> u@AHN7ln۳CV}hlXJ0!>3֖'(1#1Qi cv 8WDr¯}rCy-Hsyէ4 J(RMZWp|ɃeNe(ǏDnE"ߤUi=RЏ_|lKJ?1ex&-,>QlICD6+EkׂLUL$ xfx)g'_CvY__ w(%x&u3u]@%dR +p.[5X]xM'dS g -4lh!3;4aw璧rKܛ޼;>xA/W'祟X,ҜIP)j(CQDr;~;ҢsMDs^.,xˈtOtxzu j"^Zwi0.l{Jq͛+2KCqp6rҬUt]'?J~DTiWĀ 3-r~Q V%?zr=:o+E=$'̨N!\[?4@]K{h[O%EYw W( -ll#Jns1_N96D&D9T.W#dd49P\yP%S>; ;t֥b*4+aZ xWl1-a\Uzkv:q9EĹBG#h]~ȀR@Cf#Uej]'] tQ@) Zt@Ak[F%1콶! &I0e38>@XDr^Z@>e46#]A5w>}{.9qk_gT<ܬm;2|nkt_fGcBɱpPUk+'<8X<;Xbp4GQ«#tŤ57Lj"-<;ZPRc~|&'U4l?ą(bSa7W 沮'ͨU#Hpk HNk(IBm\(<Oc(H5Fm>`ч*&')}ql*4HƎ^s_ogP]Z%9IӃ(ޠ+p-Of~&'kj&?u{ajrWj[['YFvFԣ)rK6`Wg]^˖0-܃G5ӃI(J i%h†|A}$KSc2oz$K^΄ղm[\Dؽxv[j ll[ӂ'ˠBTF0>6џ,/J< 62RKϹ.$`R\صN/W+5}_M9F#r=OHݽz];NO9Ctkݺlf{DŃh+83k,9M'ntM@}YU5rAn/2M4TKGND<Fт;%wK勉yR(Z\6iK'VPICFq>zFµ' 5 b"r7^?$*Bc)&%]εTaJR~ú9!-\Znq%'qh3j*`e9=gAsE x?"x/}k*}&'zaGoׯw̓Bca4I1M7/6>z! VhR#Uu"RzIcKoftZi-``2/ᑎkYipF4Q ֯]wrB(da$d6ů\d`ѱXA49:VX}+aw{X4QvzR;}̯׉z4EasupPQ_g`Ia@|A.dW5z>%qs$;où^ո]fdy#,/A<#ѧLTcZ`XD'iwXtkq)ތMͯ lg?`n(lauzue;)bҩP,/Eu_AGv MZu^#E|E߲u'O$ *DsC2wr,S<Ъ|"lvu!ׂɍ/T;TvP)3.|RRΑXq]&j֋c$հ'!j"&RIRX/Q_;oIQ ;uuD}HY8͑$<&JCrd@t N:ѻDQ,DIWX&@I $:@]:Dhy8@0 Z.r8IMՎB$hqdLf ЮYk$FO4HA X!wj]4-f3s\MP]U=rsG}-NRK{r>] yxL5`dt'&oG;zv's|,Ȕ6"9]+AnG455L |-xH įhrnGˈռ#vw.ؤk1?8hp$ru(L"∺º7 L>U@rwwBX{=JLب$T_hq``("`SuǓ KdnCC ]%r^g_' ^㸩.©M*I$zWKEBNAOB ?![T(Gu[@-; StL,H1i/ד׸dW /J$>7C/cl8Ĥ)qmH59W̸8AB~)M3=i@P)Dv]F,Ih&Ywgϴޔ(K'I.~F%uѻk ' /9pl@NּLr>j(RdwPM(LH BW @@j7ҥJC*&TEXQQ` >a߲Yw{]g3+LxS$L$NO7?B|cIo0|x"Bm`J3$ 67S`Od1X7u^5J1,_~o,ϫ !1)1q!w1ʐ}O9ǵB*sH? E!l;wY4L-28F9oB{lOzά U癤Pebb9lQ͟'1=Ծ9w|F&LRl4Krj6$~+?RL0% nRT:ߐHa$ T (5S`"x Lj'"X0oZpC4ND(W`bg@cl%%QLVgȰ)⸚Y_CI$6w,T/nYJ'dz5C4c5f5%fFW)W{T-foɽLUXi\I܋Tj!Q +@KRITCڍH1l`):qSjXXsՙa/ օ2E#Ƙ#K-kGc&`.%GHbS IJu&VP@zT/>fEK*egqkpxq4jT_U0ftUm`ce3C'C aOT c%^2+6 $ nL%ڶI@)fۢ0x@õ| \,M)qRX:Q"J;BId5dO0d|/<vIXf"1eWHs%cFlA2ˎ$؈cr1@#wY\챙 7j~.\_+@٦l,GaYB&RW8x&Uxrh 1r~qXϫ[l"c)X[u~CQc$)o䰘S( ~R((y>0hC240q \cT2pwrY 1Eqvn:%vځE!2_d+#\U7rzƒ$&)' A.#xGk-$Lk, D( MH#>&*|`\Ah` |@ @& >/Q@ d-9&#=# ^H6K򲺌QI2w߈ nj&u;(VxprJ S]y*un ` $vcaHZfs!~/ jZ)ZxU b3U`+J.; w1fawa㉰r]LJ6Jlf5 @Պa"L3 xlETcl, @EWR1'4CNR`b$$aȡncc1f(q&nCAH*J0JdbeQ 1T "D)j3 ޡN WP6A2MuT5\ #¡ȒDGW_o݊PS&$ #,*1$\IpНjxJ?M׍F|7â>(50+;MUoeR;[j( X!If+#S^ ĻIT"1(n`+&1((3?KG -AQQD> / i?5 ֋ :cD2׼:[gSXμe|7`_P ,|huJx*IR)hI@1fdr0No֢"6"M (@ݲ[P_IvQILx p1T 2ۊE9c s Imo@lhw' S*НP%P8L`Ŀ$[ϓB-Zzzk| w3X04ZÀag7  أq p^pwp14_t֐ ׮74\g3t hwOo|˨^ȟq@ ʈ<@\bqDaQLL(**L$Lb(I$!E[.+'C$K;A6X#Eo/ڀ @Q DH࿺a !_ 1!kzfz![/T>2າN|A^޿`'fF'FBHl?;3),[tW4R݄r9H,;  C'L | $)DN$G3Pz*`]u6DT7s+N0W,~@b446Ɯwrnܳt|аUpw\wm*3eAW\Pcvt3vptlk:7`lq~ȭk&35[re/ J~. ҋ]9蕈J 18R:ݜz \ tvɆ@H880sY~>">"L$sĵ S1D#\ kPTtU+@fU|欫ø7+O.C_5b|p&&e9'[xƆ'tj>˟l4&+t֣[T|vc[{4*1gRlNG4T_ªM8g?71]SQy]"gWyo2eK?ˮOh}Poltm4̳*7$W, KPy1I?Lxݑ'>h6y~C՚2 ٍW%=v3sz6wE~cknM|yF.ai| #LF1䅘S:*|3D NY^а["H M!׵acJaڳdh8q!k>o/V*{U~x?ID,fdžFf+~[Eɟ''^i |ø.?Jiأ3f?sZ>+zϰG]Ͷ:T\jN3rFs+}JW]7g"䶥OOs2)98ݓA/yO"*Յ^H2ܪ5,x*Y1޽{] BK0ۺ |gۢV5LG*sЙZ.oX=||~p!V8>fZBZ(֋jvu?8;9SEsNrBv17fJ\o̾2CP ͳ{ Rb6V9`إxЍ{n[EB .l.Cd$Y4ҁ3 [~ҙ,Ӗv)QA#Na rcP7\: r,]$v5ja }l#C~, 8jPi\tnK*$:Sls+KjnŸ,e6H ElR\<~\-e v/{F=ؚپܐO=w2 :|l렵Nl7}01\>mԑxTs"݋{WTwf[)O,>9EljǏ:\R% lzF;Oϯ `'aF&AY1CJ* (9uFȤfK"NQb~f˳;E:(Djr\jZ\ܾf?g\zPul1sifkbkLegy'}8l܌ s oH,@m=&*; JX؂~PߡE/o-7>sEĉe%;.CwsLS(tN_̌//kߖg7??$@Gi yEl30ۏ1\.],z >E%C‘ +i.~3Le_s:}?%v%ጏBr\_|}P iz9N &(l1}wDrrEϊ|s~{>yxdr|ܔQšw7fnn~ D|pn6ِ/@ŵ#CZwfa8RTKu@M *8@̄fyxF[1ehh|r բN 7Qx0lisF~ȳZ ĕ/p _ ;+[X}5(BE_pc{' -owVLr6[#g6Y]Et<]#vAhLd[Z{Vǃ`r\J]N,I(d %/HldU,GTPC tu2QGg`[T&v |D~=ЕY'6]g@Ԁ&4{v_vD)=G>Z %<*&5wān2;;4[{GIhȞ<`sg}s{Ģun|Ɨ=n~Kv+/LOϓ=FwFP^l ʝXr K?aCW;%Q"~8j zV\/3۴ +ӁeqfSd@fvw0׵j4`_0਩5;80hoY{rROz'M1yCF%5Zn}90 &d-pNr#\Sְx釦%Z֖|B֫#)WRuV52=9e`Pp}ޞ{[rsdA , O 8P]sVZ&a (\D27j)&8 fw:k2Ʉr@1ĭGKPc>o꾏D\znӤvRJugZ[), |d]~R :5-Vp]^'T9j^,ITu6ҳa_GIz>U'n}:c ?oY0ajL-Ӡ0qt-[HυNz6b?tca!g:$Z2TEvTyCGM$e`b0vnTDGn4ͻ([Yž%j_QmyFQm,ş{]^[j컨1F;7toEuDkCOT _q齛;╲0N}i 妺~:Cر^a˩sX w*ה1h_3Tkh`@\a#~?";NJM&u@$XW$wl4i#cOGKRUnOʤF:, ⛳6)fw\߀u()ϸ3ڹi >hS[b {WcPY ^^%gnj [Yxӕ74irHX5 vi ߃Z B&iۑvg ->Iy[2{޴v_ o6H5\QϷNmXLff5-7JbeK8[ѢTCpUmXAJ`@ٴ ~LiDX8 ++;rg":IƖ$7վO#"A4{n7B-+?!jrJ6DOܫ3C<_s~sۃ?`j{F?^OZ4&;VP|a\s/jVkVP.uhb7i{{W=.iWEܜ)&MAB4,k b)hex,b΀KOWcP} ű5"v8?>=eIsM {yS;_<߇dc~\`U =YꖈP~#{_S"6>*"!zo+vk5n]mk6|jx5HЫ5P%?D{޴Ke|i&Dm!>ti- Yg"fB|,8;&GHVH#q >$Ț~;51)g_tX5yRkF.]$NFњv¿e%]7ˤ3?1.z>8a#.2R'z~?nʭ=wG{H6,A7e o^{gev+qLP݊@OoF|ɂ#(L &,|V$╉Ŗ_du8~3E9~~>0H01 urՊsRlbd\?ҦeSz}N}]w5}\Q=,6&M}+pwOdp]9<^紟]m jJ.S I(Qp[($Yż-ww%m77h/ /|.zbU8 Q0q LLN7|bH+Yk3=Gd 3VfUʖ/x'|5iy'6OE_g{05V;T ~\/X!'-e_V[qAٷRVHR `kV^H&YV-g2\۱kgH9PS& LDO^i(5q8Ă, =S0* f,LRS]\gu3eǻETlr&.bnoe=Zl4LX5:NiKM?]}]pYwj|s[qaJ0Y)T^u7kTY8s[qglEB9v&Xӟ(ouLK8VRYa+3o͋) TMN\qǓ"[_SM6cr|$%۹ʥC uWJG=fn:cPmp|4?Nn , ÂUTMɸwc6[j򚌔 {ᗘbjȾduPĵ^!`ZY!9XvKFY,`}"WH#|]lec 3#{n=+qi^?Vع[zXbOv-ؘUv"Fkw_asIciL-> &Jۖ]Y{j?ܖJ OvlspȎO90*. ,Par}へЧzb=yWI׳g-9I~}1ۺʓ6܍=k,Tjd0s U|G1w{k)>>lȭғK*|(Tb,c`4Pr.!Qi"WHpL:Uz̊ 5+⌛Vj0齭< /m'!2|Y'uI_=z9-f%+b_+wv9Q]>NЃ;x1b*$R= !ҠM>cyzcٸہvxfnpz1~'(M|rUY6)D0Xy~IAg|wO08}quBpŵkzxOd./x!lj/RQD>+rBtG3[PU'Juxns0;>`#Yw%ۄdP3o^f<3S+)nu'ow[Mޤ9\i=,E[kϵe3kJmfs*]-Rs@*ْ1gفM1d"vw/ɸ.VlT>_pk6B(dW'SLƕ^1"YS["niYxyJnx~^fQ/]X59|,32 ÈJ\9i2>X/C',M^PdN%7ot+צϩO}Nvqܿ~g7h饬 C7pg׹EyN_?K]6}8 4rjJ&ژe"Vc:5id"- [aU'FcW#k{6R? {8Qs{Jh#3fɥ2|tݕ*kNri_ܬ}[_kFf§V8p lf˛B$FJ&ru}:Il\`L9s4H 0v;?N\ۄjjѿ7iݮuUrSwΨ}35Ijz7Zbf9_ |"-+/Ү\ -1- ;WL*jO0xڢVZ~W>=2At5re:Ld3^b7]U;>LGzZ;YwQE?jttd%#nURoGoE7-w4 %Ʒ NӇR*fnYp\?QOpb\~&g{gIcDg-׵^ֺg~|Ӓ THRX-tN*B;`NQm&*rZmS@O4? Ƚi:::ZWjVHOͭXG(2`洳1S 5dm "p=y? S4 1!R#o|~|OЧB v'S;iO5nxF>PQyrFfF<@pMgmM0Ȯx40U79cW١_^IҹsNj' Jog_.L? Ds+HIIIٶ}ĩXԊ}zf4)NX_48Ы+ X%8~Hp]A"p,r8T@)ߨf P:%,;$ٸI"pk=Vxwsgt I"# mu@v!$gP*L$*\i%#f(4Zey}=WeE%8H 7Bl]Ig :gf7=ƗG,gQ>FʄךE~ XX(>,` "Ox`E-7w2eSvErK _TqܰZ9)RӘ, g/"%Ȟ*\ mKmV'CQia1h: u/>~p}u}VY+]LpG+ZaWY̖=1b4'|9"N , &1gA4С91f 1yއ:NmLUK8W/\XiXƵR `L ☸^8ksbP4rNI5:dN^jQ#'Ze#UQMIC}RAN+=asN%+Q8[RHg F+B@5YaTve吤Q#1n8W ͏z:'Ȝ 4@ żʒ8C@#nL$%ݡ0v3xPn@U[jZT\o8;:?u9^x9̙BHpP\GPsX KGB0o*> B@cG5D$oYҾقuV*?ρ]ƴ`|,84 : @;F8; ̋S%YY<\T\V`{`녬cWSe4)SVuq@ȇ,:nNJW#eD<&r(S*{U>*h3NhJ71|߲*Աtz }-YBCe-Ex@]d T 1(GbPkS*|ucʭd2O,Zux2j.vyރb0Mu!GW)P*$/MK#,>h+D6BrO 3R!=hf< k~.K/}~Q̚&[^֖gXdYR)wg0p%Oq=s,M,㪠JS]ZQ^THe"Z$vXfY3YK#l>SȊws7FhY\Ǡp8|heNSYڈPNC-R=֋pT(F,d:ba\K|CAi5(;CAee*NdLb,>W) sEڵǗ^૘\Y@L(KOQ52p#‘)}Ǘ+4rGALZ f'"(C @ALqҬh|z{"爊)z|e^׍hxʹtϺoڌγ&378o#_?-;§DWSv1>R!r9cEԴE!?E"KhWCWbGN=iTZڭo7u=!q~Bc!}X&@<_BӜTP)|  =#t6q0wJ0|QnLف=<TW.8M:B ':_Gsf̌NtJ0E'*|9{"F9e^w82ME[sj\̤}n7q33JkɮblbK: C9 sm[v;>QJNrB+PmGzkY&C:: 8U3 N#sd<1dnDb&DvxpeJMt!Rm7@+qk\"BfCRAqK[/{(V|B-QZ\ޭANp6#i ^ UϘ667Fz5K|vuBs;nu%jQqdDp?^CN$ EK3M4L m[j._a&n7M3V+-XL$fm[_[WR4''КHN<|iE!@^[45(JI2BE6`ȀLz+3U6[Qh3`BLPzE⮓O$rp^˭:-ch͚t:yFq(b/rOtnӃuDqKn|^Hk5Ab6! Wd:ur1 )Id땠 l+{=w_R/>!tnƏB366Pwϩp }p -3XdnPёUOjn,;B(rz]oRo͚&~kΩU5LW|YhJOLWd$e;OY>h/*~"781b šAn?J,r Lg, a=?p7Y+}jz ʹJ|TG;&Y uI@/ԔcTNJ; NVOt{)5*Щ'cT2I~$-u_RNXlzH$VaʸMXI< Ĝ@vI\#'XD![<9ږ(]7 ͖z;贺"ףMw_1}ko`~|?g Ex `!! +‰^TÙI9F g"W ïZpyediNe ,AFw _3@;GxJ "*I9d*sҌohFU]g;̴|<}-eCFU4m_e3~r7Yu I{q^2mc>kH%ѓ3|32ᾼa9eXd@cegE,3tx)Y _8'.Am#A?%}r#-4IKooEUp¸x4 Rc>KW)"̩ aQ ˔R$hJbhݒظJLmFyuKQLM%#&bJV?' ?*r<3(oNĖ[u<1AbW;°}m*LxeUI|^r e`jZb@CNCf\Ճߨ.mܹ/%VF37if3~%L'MfW{dQ%7DG9-Ԕ,Ž6U|,h8lm블9g879.؜IN -PRj ֢7yԔ8I7Dx$6Ӎ<8vưFUU ;.GK5 W >Ri3斋rHY̋Ӳhq݇[Sh-xpDMlUJC^ +A<4u;L!Vj1sӚ[*T}j6XVwTVQlGGjpY[6{'el& Y:Q AdvD,55myߝg3FQUHV\Ttq!ԖDa]%Iuab,8tbP"$5>0LB\ͤ5 ce (nÇNa[& p%b'^3IMer0Ȍ8cJUd2tH9"'?  tG{B:,hO>[&JߥzI|{ Vk"KHQjrpu^CJ_O\?z)9LYB3R,<$݄KIQ bs iwYAluS hl`KP?2&oEp!L;=IeYēnK@Aɯ7a)azQy>$ȲFw4 ]g%jΣ6`_°MrxkZ8BLHT\%{Ú65"ʒRa ΣApI ,Joj%y*E)kf 1>".=L[5[-`5 crK-ۮvPtsNIg3ݵee's,ܔϬKP^7|7a-cjlPQ葥ڸ1-y=XFgJlY{/FC`YnLusk Z6ޝIYV[J9DϜWq-,ˁ˳ rS4QN[PKQ6aby*Tbs ,-Y&]S %5F g/C`a'[BKKiAP iEWr}̤ 0Hh0\VJm#tЛjD+LQ 0MeJ)4hu$ 2բL!8r'k(QVs=Vw/ nCSE0PexB P)Oz"!r>1LJ"/RԸ;#Y:nZ~e=a~:iTڳ[<# !>=YZ K+Pe_TlNm"O~!|V-/Ɇ#saX\)D*cXpLaҶ>8V$,i37uaTJ^gV@U0L:O"`C*{63Լfdj+6\YG3En0qNnZ(--tQ?P%$ݦz` E:1Z7#' mqՅ I%nkޖùN+1%-!'X/OXI`|'w(R]Rz_g|0DD^ !yujWj3 <MG_p^O#OP,ykP@ J婰:zL Ls{z 3P ,BlkB~xW@M:#d$4;]wM Yd/'Ȏ@!hD!$)XtլPal 骒WBTov$=ޝ磷}zJ`XFݕkFBz`]Ch,Kn8KPj@NpA(:H(SxږͼvHLu@!9~'ẤM@ŤyR lsXu)ܦY!)QI4esfAj>)O18= *DwGy i0*mÖ @j*Ѧ`r*q2\TF*$ m1PNR)HB5 k V^Z(eb6)̈́ 螹6WL )iji[n{6"Pmpܣsowe 㞒aXnJpRgV@mo Vra9206cy*5(Ii=H+zcUyiU ~b❸O0;X7ZWV+MQr[|و9=> {zG 6nԆ4f VTl%}X<"$T'7*4<a,Le]0n'j1 0 TRJ'ߚsyBv9+ir!q"Gh<@kC6hƋB>%BJBv9 DC nP<)RV I\y<jWl[Ȥ @U[Bk{,qGldkfњ,`ݨCIZYyBrO"x 5SeH1Xoi.zV]fYe , `̲,ܴRT/9PTѤ-YZ+z5'I8X<F>B{f=}(.ܩvPl!-P ebY~+C|(e&bc)#t\R*GbhR0r>Y!>HPM (EYgfq]H,w%;$qp3JVuu8_D ? 5% CAqu hebllH . @%=Fevvo_(<,{$s&̏nM' HJM2КNqI֨C[FṏUu0q2V =Z2i;yK i0e66=2GɱY0n7tVrmf`0|?dX_R?$d( TSU4a2Z pMf NFm XYUA( *Z),!72g&Եa)鳵"CCLl0nsrР+Ap?zPz(, J%b .] $`KGc*+i+ȫ(M '>fP [1\A_\:T{yIʜsB9 NM(ԕMヶeD;6ke: 5CDzȥ/1F׀8N`(hGYB=WMoQLA²5-Ɠ@bBSJ:[ WJbPCŊ+jm`)R2PЬ- T͆ p}@RZ-^*<'7puL+OC}dW 55P#ˏ`q% Ϭ6N+p狔 p)xL,L2Jo*  B-# u$q$ :@e[WwT`t7hAP暹uqb9_0̛eϔQA呉UK2} qܐ, V#|Er Tl䀸  9􌀤0:'0&k#1f se`,S$1 C05Xu~=%[ݼr W$k2zRNRJpwORHJ-Ѫ{@N5A[y3]Sv8.CU ݅굄9͆+wQ`/;~cGj"IYثtS"Xxu)ei7(s".;]WXqjK Sк4-OMLȄ[X0t_0wFJ7z"UrU)~'!%)+&42L״BݵV!d\,qQgЛrӶH~2-ad;h ;t'J!l$%_bﴗ+;Aw|7,VtwM \ ]d9bE}pQ1L^F"V6-U *.^{-Vr3V 庉ɃrzlQR%Rhb\`?)M`}l(ղA9 {?P4ZVhcءh!JUOGi9' "T=l `C{%XH^r{Z$!OhͫfCy r TlyiRq6K 3JBx-5!{Bu wG5}Y`ܵ*1ԟƅ V@(Yؓ鉄e"(ׇR|0U}TN(+lKLrS/4@!AO?+LqNPtrE/l63 "Imyr&AA-5.1Qw+2\0El.!qP0gCGVdC*0h8,Ivqc$)Cs?8/<Ʀ> ӯbK-n*$<8I7Z- &ဖ@J4:ޢkmW Rh*RI".P3L KhQk6!._-sl&aʻ {pji{NCT+k*'Z("Mwj/꼥tp,v@V)@BtiF]lp4+-#VuX'a>N vgUl  m:򆱮E .1+h ɗ|ELrQB 8urݘ(.լ܇U6 WC`@ Df5սS Iiv9b ؚVU1z/OXͥA5=$M'F6[ZN`/nU0;w=kE[=HӚh:[I)C=~@D,L =WN_VV@쥧y6"p=<(_'=)_-\(#<[hM &6sGiܠ੗ RJΦk((՗QAlIM"6 @  :Wh+6HWnܠ%:.4R͕qJ?iy]1? U[Bi͉ ;>ڝXުr!',HaZyE~dYL@[ZLvRKQu;56fC3,z Dl#v&IvU?a-N{),_&ӫ ,ݥDi9ED$P 0qj^RKoWIU 4(Yi<џהI'ȅ@ s]9Inf h1G 1Tl>ؤm@r hV0+pvp)>m۫#|P]&5 n]1l#-(#BT_ E rHJD$tyM #( ;P1 T'Km)ݧ:| ByQMB%߯7;)䣋BQb) bM!2'7EL/pu񟝟i;K009+'h[Ӽ̆c'|2u>N({79$ԯ+]x{0ʨ2*s @jN1`v%ܩͷmr'2}|-P{3n[50oPDP6~)YYR(4L2ssk=}9teӿM8;u4ZG*9S~"z)iˎ9tZy/TwrܩQZu<yPin O,3q wpJ0vîa8+=r ;kN/)_k扟e­$C821*JJí?GKrm`2mE&~-f%(w:C_ZruPb;kӀ] NuR8XAdHN}M2:IɛR2($y]j]AL!9H479ajE جYq8;_|4v1FSݹ-!lKq#fE֘s:LvpFo >{٧*c|MYUiߥ) \xe+t :k}ž ~8]Qr~]Yo.y7VVow5ltF z01-18p&]}]==s\ڗ%ŧrYa]~RVG'f:IȻƉÉU?чBV9Η5Wj}>p;ᚗqۇx3~r 7wi{͍U.eϱk@D.~yop/֤3.6)D&ߨx* 7֜'_&j5[2v&;[jS]~](H!з'8d.C\?ݩ)^ﴭ_suf|kkAFk$dxXK%&Ç5D6W%r _6c#yϳ6?~uaeFI /F]Ɨ"G-$:䉽yysh<6y:p}[ug=1J:ֺ g7Oxr[tC͹)ÜsS36k KpLسWRx{K|tQ}޵TSi58ڵ4^Ϸm_}dy;O]-wmC0řJ8dz5[%™7~D[}sޖÞ{}ݥ9Ak =k'>#FئQ5tӓL~ߴAlBM1߽xC5[PsrYj;ϻ/~5.=p+Oi.䖷}%ӿµ]/9rwcŏ~,{8va-ʾ~=j?.vjciXHOWM/1=Tۻs IW=y-KƏWI.Ը/;W!>gx[_?}jpOi1 E82X:7<'gͥS{+>p@K>algt/n{#|L:3V0;m[e;Nx>َrPk叭oMx+kZYKV<|Z/%M7=35"sՌFDz7 Kd] ZgJYҶoǐӗUZS\i_螳j}] 6_Ie7'lh\_xPzs)_Ν 3N~[?Q3Sl\)rOSn.Ro4bͳ?ࠚK˕DlxRàmv,O&Wx⺨c>,ᓀ)Oa,lUe{#/;sϢ[X_mX-9Wyϼ\Ws ġ_Vƞ$Dg5ཤ~}zJs۶U JKioYWlkS]OA\>;P.j%VZ}?ko#-eVid=>z3snׂeq,>tt뫪j!sڟLڭ;GK::pֵߚ$/B>j?s^z2'ٱeRdzdBE;'phbMоgܭX1¦Cjl_Wywu?ضwn2}K.Ѧ {m*b葱#5S߮꪿J)ڐ71.ώ QfN26v1m}b>8U/cYӨW{iӍ~}36}&"˟U]j6jư#9u=c-3r|+ɳO__?OԼ~a'ώ\]2_s;/v s)dBMOVzyo=uS1\T\cOU!tw9w>,sy󸽝wD˹=_7;DZ(h+o9LVjWqsi2BB>m~S;qӥڠc+wi|-wիO&^xcS{xoTWhzNck7w\y}Uex١S{}rm'ʊ>j;gëLm0=>H;|H]#@S_gy>L$9#MO/?/u _wJ?3>՜aruSIB儎QܨW+&*"6{ow*;{#o]yIމ%߄j\ipH!?rDq^#=WZCR8uaюo!:^%kUu^bV? _d/$nN9m+>]S{tK3˅MrJ؈=ӯ>bG*wd -k~:Z492ǻHgjwLʞXky޽HWw޻"h3kng<9[g\kFT{ɏ{/g248~uBvE{G=TnnCCх{f]cS;KbGNk"-ZE}gHԗ[ mv&7ShuWtpEWY`ɮ탿?튲wg錩]nU_=wS_^]dĦݭ^ R},Pz˄qU>Yб O#:>`w,9=P}s؊w_<Ż}Lί6rƧ Sr & ҍ{X^¾Ok=|4oYar|xv]Sy}pf%x jѩ/| Rޚ%YO2G_o:3tqˣl'}lltݮ37'ϡza.Kc3g}ыb.Nav%p5ǮZּo_I?mCkb/]7H?Zߚr{Cw_cbllb1cXY?v] rbu:pc`Q')>sĭ>{y7=nօO9 7;guUˊCv_ 0s$V8]ص*>F5Oj=q{xu׍w֘MP;gR!QvPa' \+oi< -?8\)a懅}7mq|fZflyACZf?#H4b$r;\ Wl1}%ly鉗:G_5M>k[Tlz]_ˍ>Vήˈ=+w1|F=z2OpoJV3؃w4b7Wަ1.6w1G'g&珋*jl[O~v~˫{qaoeg:UYvH75u~jYMG~3t^m_sbX.Y-]c/-:m׹M.k/<7W3l7]/;b5׆/z /n\|vajNɺ֞ yXogbF|[4m?$~)kqEV&p}L-h#^;ku&Q SKXwlzcR}C{n0~lzppO_>᫗xC+[ѭϟ7ոz\Z+;BtGSv8\z&:_xqK7/ -6?Ӕ:Ol.=:1;#i3]?|tJ|M?;(6^P{[zkfCU!=h髛?8zzjԍ}YM߻qf.K®9g"U֟8ȗUoW m*uHM͵q~]ផ{N>Oj7.TF*\?-7<[glv)Nե8_G SDՊސC_gcM~3;d]lBՂOoKYva)h;?gS_'*- csm EgwW)iV3 kK^XNW{@PL ~Λb3χNJFLV:*m[_{BxNe䩜52rkO[ .5_M`Qn^1j֖ƺh׮N |_6>j3*E{vF|Acu>q̾k)/ <ͬ3>ZkVԾ󝶨%QE[nZZ3$BkAIIB R ko:z?qյ،#>26.RXi޲!Ծ8 L\pW ^G"y@˜q7Jd%qAX9\w35 'Єo:`S<]}fYG#aǃwGd 1E1k4C_7CԆquu&"$8ر-h# hМ+mTb[H ;[zФ2"]˭03"̼WeB7/N|ѽixJ$.MO-:=-^$B0Tu亳##b= Fv69(!>mN\Lݭ}׾;]%pHǑ鹑a[ s(Eg3 ~]QmFV\[D+X( "S/-`q>sРf])9HR(TCTRGC)TRYːsǍ{7 o/~;ġ`B/Ӣ1kV1 jU4=}@ZTSٗ7' + <)7쟴dEN,[Ut@6W\#>6f@%g}#KƇFv]ȱzxҌsTc8.9#j]SoYGxJ3̍lnBQH,j⭫T'Q;V'm_..^Q'~ (Kqvʛ}dE K ~GGD6$QMջ32!yhxN{7ej ^ #^ /W^ N,Ls̈́aGӎNC,fJ#"\; . lֺN%lw?&s0tEǶ (^Op2"hj٧= sC5\i0'Ƚ{D0)z- G^͂?kw+.d72Vֿ[:d?QGRrℙXtdZxOVh'&FUEAߖ'(fd$3ԍ12ڵ㼣xS|'gݰ,_2|Hk "'uxSc<@|.z-jF)J1) u-K%>^ZfqYyh&ߡS yvmUlOot'U-\bKݠZuգ9?WU֑}~=9n#U +wP7par.=7CZ]ӥ(|B_HSc=wƯ#2Xu$a򱏐&I9HJ#$7v#ڔ,H~~a7B`r y;!q^daCUdN>dPv뼿uũMiY!ɍ@6'Teܖyxvx].8dH2AupEO;6o6>܈nZk4WSeG /!(u ;П@;w澦"BrI5l>bXu:>9\LMUvNRGf:Df(gyl\HE' E>6̔')Mf昁xWߕy6;r-R3߫2'?oWG}ցh_?ۖG_Z[2\ՄaY:6Fxp( uGkC[ƈS 2{yeHg{O%e8tfP!z9c3N6hؖ+D>*3j,PfF/k7EUf6Y}m{2o_mۇ/NkLH#DD4LHxl| 6*ӌU(aM McڞMɌ09n +inŅtx+1 '2DZ4'Hċ?^V#̂aǞGʚkS /2)0 RD w問g { muQ$y pӶi?ٷm4 uptY񕵪QX~\zVL t,+ëy3cK/Ӂk$୦y?wu\i U+*vMb.|`rv%]2bt6zgnb- 5Amj(ao6wL|7譵@S*y0=&tCjf2 *;Z⵾t%"Ŋ 8GdO}1IU5J@ʈƗ ^lUwń:"V$aRdB,:?:QgH{R~6>E-fH4Lٯkj %Z&Lk'Jmx˟goiCr_o]N9H :[Ʈ( ݊#)1KO xĬOJ;i]v;xF_:3SUsXիJ#UBp`;+驩qSڳʄ'\@irGyVaТl|0{ r7I5u\Qr":bRi`>ggpK?ˉ/y%3s8Q[K7՛@0'}*%pwMϷ sdRekȧXKMcLݍ#iV1ץ` !,l~'>m;G.HϠkA^,[+B8ʝ!9*aTVz`xM ]v4lT̂ e‰l˵!*)A H)9"ʖ6aLִ̮ar̵ATOαQgE |j\HKNhOV<>P1rwL0fZsڅNL 黳XY~̗Bhbz?y*ȕwj*dMeoݢ+}I&MMPA&F]CX= o:M|΀%I&sP鳂'aGks'k -5vNz`RU誕Ӂ }un7nx1ceIGѠ]\?i\٘OC<_4.l[-4m'3@#>KkX*8|:kxh{r)% ێSw *ܚlq& jsR8m^E1Gbg;.k7CXe*뵠[2EOK/~U%UnNZRk.{sAP~D|i͉GgDщ6o$pl Xej-dpm~-j7ˌTLwoF٣} oAjj8Rh_%j}݈\֐K΃5_`PڐXcGңBmO%"v{k+1QO,2s ܔVF;l6q]{)qqŠ_`R-MEesΨƒ{k+=E&>[9R{*-ǚCsG.8rϷܦTwN&JaqA0 nXfl_,s#57F`;dΌ۞ox6& oo^v=\.,<=}kp'؅;rZIZ!J@slPwvMIc8RpIrNi(~_U4pXfjhĎPZ.t,dav{ByKK 7vo#ZGAΌh+k N)%{$Yֻ㕎KYD{+PWhwv[:n]$_Q&8Q 2 `6o)lIYq #[U8H~*ec@uBgc6حSܯ9'+k;3ś-t-&ɍvo+!4ץO8?dԁQɫ_L6r:xhn`E\x2~bMtƧ Hكn4r[XN!;I!ᕶ"r:'&@UR~/;~w23N'RKy^7,MZ *eaG]̾_ f`SEjsVR]367miˊc$iXލܸs&T˕kS3̜{aDaupqf=T N<Cw-JUc_k1!RJ_6LX& UHQ1LD8noD GpA@=3le@l}mT |j*s'ҷIpupM~@OZzm dB4T@C?oi_v\~?r>f$18&.|3hDwxg٦]5Q&8iW1-I UdK1syR{l!bf!t 6{*ha#OB.Vڏ҈VI9Gzdn Hf ]KX(`OWm%` qYo|39yz9&5 DF g@Ror8EQ/rn!=GfttE0ũ %i}K9ZÓ +ʖn4%Xϝg|n0gEG ^|j1wvDБ.Gq~  QiEqir|Lw:X8Oh52Sq*hwV|ˌatX=Vvel,٥V#OoכmFR=@YPLzITz*xBl7L.[_/G}mČZ=9!*ěBRzT8+ɹtF}{M(xq(z9)Dvq֤S ]X s4tUpwv'8KAè6Zד#pިZR`zAr}P92vWK5Qn0B29xEugm~a;HCaˉ@ Ⱥf(ClnZնxVUڟiAM;ti#kWȉiY{NӋexX_ys^X4띷"ޜe4׀L"Ndm¦3|$1 J }*9O'MM$RBE@ }a3; ,r7lU-G,p*j,A{Heyy™8h۔+Q =1a,@9DqElBH+F\WX^&Jb3握 hu&ڧ:$o3X#Y%"b4$k3lŹSP o<6K&S CFzڶeG`tNg/9MUv֎M ($0zuҦN*(cW<ʤot;("F_0 C*bwaʤNU?.e&9W2KY Y?'Mĸeb~`XQ{#pնbhL%{K@,!BW/4#`@$?٢Rh^daQZZ)\m.p+U6GLo2fm֖|{|zi0|lb*@(Gc`Vq Gfd2Ӕ6s5X ]m-e=QXn>}Ul8C0O1x;kMp}ΝܱK;<ПGN%d\/?M-/AX.;Uf6Fa^IG(>8ʅۖ{&vmm>QуPf7#!-(>>2pQ>^(3N7TINwUT"wُtoԧEv*(E.;+f8C#d0qrW vFCZKO;q_y $ B<HF*ʫcEC(J\{q[Xf8B-,Bh;yR86hzKA]oS\a34~F^)lAvl\ !RҊj,ܧCkQW:YَVpq2 5 %_:*bHL+;K>~6FQE 9-nA5qgn ! ]r{8{X~xaj&.t[ޮrSs>qM3Op8[0FʯK@j0d^+ V(lF`o]k$Nt<CSqꎁ}'N-Oe !֗DՇ # *J3;ARg&*˹LUtRtk:ӝJlڌЙ=C2-' BO{$[9i'@_uǰw+fQ`ϛx^w'qvt.pȍ2FSZoܒ(;i Hx79_m t'i9nvŦrG#hz| )Ƈa̞x@[bM)WjDG8aդ]__'NmMU9)e y򗵧ٗEC()nZ̩mg(,O#^^Y;ʪZ&w 36;(hu(X3)ҐS<7%aBbpkW?ўJdJ$!E o/z}[\gBBggcodrt̊ 2()bhp}@h5voD)5Nv_ιɐS _XJO4ŴAt /FBki ~\=wNzH zY֙~y!, 6].}9u%G:%đD6$XpUZ0kJej3 ߷2ҁ28,H?+7Zfˍ5?4'|-{k=ynp*q@^:2=zP7Qtrp+cj |5s$v%A#C @͜՜*q'NN.>c/V⬹Ug's(͈imgdeJ؆-``]v_B:/D9M+4 B%g]\x5"i+?x.;fvN%rVK,XG GfYPa&ax93 -'q{ZdHO[9!Ww,Y"*]!!LBk_ɨ&$ >&XFqf "|}j|}t߃hP Xg"TǶdylY־\I{,ZtK|S? uw1d4MWÕM^o=8V}Z֩J# BK>vUxcw}153(Q=d3ٻ5Yƫp$t0b&^cd ڱ_&׻NٷQl:<{!0,MyL@ea}1? 7M[x"'߁S<G3[峂#8v.@OU[ 2.Z&lzoryG_qiBe璕QbY,{V:\h7K7J-~t^&u~p\)X_ҍ&Շ'9^АQ$yJ2=T4|?.}.{]oIdHI> :( jL)g\,6?4Lc({O6Pь 4JC#Ngid3*e6'i!r1[-V f)@i*ЯPTE\%\dnTk*َo- +& v;'zh>NڲAġaQ&Z\9^Us}(NOcsʀTY/f}ƬNwuo)[Jab{Ctʩö_1Umzs`|>(߇i">u];aN"~!ai#wT#<[xG`W C3teUx'˞',oYe;D`#^k!;< R኷^J.CSHg캔.l5_uæ\[bxUMf%ϧKUY#Qiy&WyşzwO\>5LfWm!ij,osNmT/{+V=,߸R{},Xi:XR%ǼgvMme/`I#MKΞrї rC\ r5}œ,OD$T8. kv\Y--Sb]5 Q̅N{9CS iXP6/hvM|ߎwį0|&2uR=X9u5s7s~.rNTWౝ\8(\41 !AU껇]D6Mn,|{!.CE@,ƷtG' ܝzK5y2S|DnQ.>Y>^x;Z(.cRgP~ RpVMx+N̞d qúΒٌws+aTb[kQߔ5ړ Dcs-xe_Ȏ?x8f(-kS|e7QaD{,X|7h[h,ձK OtkGm꧜44J5>T^mZ[d8 gIv#91 kiu>i?WLW{kE,|c\2^9gZ֋$U89;%K"bBjAZkl㨔I\K4-#3:豫] 4Pud;:x9:Z6_v:%EGh@5(֞[)KEC`{-`kҪKPK_ik f {$6O s@'l[sX.Zp3kLjq*aON:y juKo{16o`$G7OD 5i}1Ӧz1o'tQKDOit<nOeJA{;[=m<8S֡xY,oؽ/‚6`IM=}ba%پ WudOcr}KIGR_0e6!>kgA/+TSya%uS_ +)R {kml7mzcº'"^[ĕG11M"Ȫ%.ӧt̃ i)wl`( 6\W"=HjV1f{ وD3x7:h_Gb3T4f7 7w.`/ռYܟp w/1:$@u~ !; 5f*ɅӼbe [p_GbۃkOi19@·{QUn;jw{xںT.; ,߽H \t^=ghQcټ0:w|9QX,O[J mK|d1H|FZL2&+RPopAKNp2<-O,;FY|JWuGf-D0{By kj~!xV391R)GΣ;ŶU*ޘ~ybzVnO\ym.lQ+["꥓~|2/5-vȓvo{koln8STK2moy1֣t_0^-EU4{'S4Qɴ'*^z3WL93+[Շv!DV1&vOMl4vZj iT7dدĸMy׫@ 6 tLz`Xs6NljQI/xoO% w@Vޮ 5:hm0+qʙĞEMJSxEn<|E/Evɪlƣnag~0'YZO|ƺig`Ulkba s*%o8JvQlUd ;EҿN>=]bdr¡Yq}0x#]aAfF w-G oOQC'hZ7 eZ:E`cX$TrrQwA #Dχ[El`U{"CJ& s*aw+ۑ3grSql`]% [L?Tv[]4amV>n 0ګ8Y571pGq3n_g _C@ 9Zq@63.qlRv]ǻ_; :DuqoG17;q;-jm5sQFx>nPkkS |}qQͦ+XF踩[uM|VE4X1<uVk-;mr"@]{PVZcuw "e zjwա] 7z5$ieWKNKt-$ Ȥ'^e }jP]>)y,Tm+qc[Zz5D0RDh~PB}&}P+%.pn\NVw(#{(̆ICמfEBдyM!`,'QԧֺX cLҎk0S^GY(Y 7(9>Y) N@"AY{;r43gA)\d5E?GW}͏/"w;ӪlECaW[bcjRc;| %O%ώDn@N%7)<fYYˀDZڭO%>w ]} ُZqkrNgMÓЕ)tR[xIɆ7+􂍍x޾n%+ :uhadJC8џ5}w@Fyэ>@׃-PV5$pyGcGAe*kP5Jkz ;|}7%^Wp+QQYmbBꖺrREӘa7fu X[Z3 D^vm<_~'_lɄsr M۽`cĮQrMћf 'gBgFY(JIׄS 0WAV@i͠f48hsQWVGoJ@oz0 _ ) ychh[Zii :שum`Lh?:B]cyBn'K&V: Զc~*,'T#yvH kc5jɇQg@8SR֟GUf!;s9缠B@J}-Fr pߟ*Xs6y 9G?AЦ M{tꚊaMz&ٛ8tGCA>1yߖԌ=5%˾GϔWK:xsE\L:{bWwh+q:fPi<;>VfCotBBfm1rz5+M1~MT\v͚׏r8խ X1a&Xs`uf_ۂkJ'*b`haEⓕ=n8F\ 5rN%*ۂ5RsnٛL[|QmCGjb2" wMyϳ :(X8wy28̈́xC4_Hl\lqkؤ&ac7&$].69iqHjv[=", gT"%0;q rH>+'Z[u#'tb84ަ0Pfo-u;@iN(zvVeahr\eb4)F߲k w5*Mē/pI#z} hں2laaACz7$}͏+ÁiAsWzOƗg ñb-2R8t"xeFkygN=(~2=~cZ&7'zNblp޴QF">! <5,w':q8{6K9?ȡłAfȍT zqM_\i6e@Gj_4b_ѽ=ۺ3;CVI~ҴeyډȎf~5CJCbN%23+Sr @tpl9fMtD(ѣnyn=.ZHэ[A[Mu 53@M !y` ,i%١_udΩ{»KI^SV.C:H-&]cvӡԝEKEsI516e l`X҅=vSDȳibwY Ǫ7 "^0Rv9V+%cJ X_n>NQm5^8Ya5w'uG(MF"RsWye^ôiir'r,.ǢKf?o.?Q9O=bڻ>>"fS;L` b[j@ xpxa*᰼yY[ է;*XUR'ۮv4+}KaOSYx]ɢغ]jNwE7+ċK@ߠX筊5aTI > @ ;\q]'qo}{ u q&'1U+|? kOT*,ߖ{95%p/?v[EŲ5/(ۊ?I]i*maQ ~FC"öuU1go]6@f@,/6dRla!熶M>h45~YxԌou}qٞM`0aU|}*WbұD)B8"ԇ/(=6:4T:DQthagmĤʺT2!24Y4Ux3hacNTz3 IQ e+ԑy1O>|^˸y;Ϸ,Q!>4oq)erxfD^s#=kXMIs X'^+ ~6~@S 7SpK@޷I=Opգ578^Vm6ˮ۰|ݗLi(%*9f#Wh-z7 Dn]>(׻]o9ya>KSh<D@ZG \z''KaH n'..Won)|zy[HVMk<} nzٳOT߄.XZJѝn=8 ~ >kv'+_bI8>3Ϙt{b'jCVBFmApY5wq`hqRtEX\⽍Rq;: :j;pEWemH: Uu+f[ӄe|+WSl#|i_*Ÿ= _;W-E,ys!s+.5pn> 2 l3";qYs;xCRèfRh{u4yblVT] =SWMoԝ7\ J?MB$Ѕ