Commit e6a16d09 authored by dimitri's avatar dimitri

Release-1.3.4-20031019

parent a139a433
DOXYGEN Version 1.3.4-20031005 DOXYGEN Version 1.3.4-20031019
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (05 October 2003) Dimitri van Heesch (19 October 2003)
DOXYGEN Version 1.3.4_20031005 DOXYGEN Version 1.3.4_20031019
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (05 October 2003) Dimitri van Heesch (dimitri@stack.nl) (19 October 2003)
1.3.4-20031005 1.3.4-20031019
...@@ -55,6 +55,7 @@ Below is an alphabetical index of the tags that are recognized ...@@ -55,6 +55,7 @@ Below is an alphabetical index of the tags that are recognized
followed by the descriptions of the tags grouped by category. followed by the descriptions of the tags grouped by category.
\secreflist \secreflist
\refitem cfg_abbreviate_brief ABBREVIATE_BRIEF
\refitem cfg_aliases ALIASES \refitem cfg_aliases ALIASES
\refitem cfg_allexternals ALLEXTERNALS \refitem cfg_allexternals ALLEXTERNALS
\refitem cfg_alphabetical_index ALPHABETICAL_INDEX \refitem cfg_alphabetical_index ALPHABETICAL_INDEX
...@@ -200,7 +201,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -200,7 +201,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_warnings WARNINGS \refitem cfg_warnings WARNINGS
\refitem cfg_xml_dtd XML_DTD \refitem cfg_xml_dtd XML_DTD
\refitem cfg_xml_output XML_OUTPUT \refitem cfg_xml_output XML_OUTPUT
\refitem cfg_xml_programlising XML_PROGRAMLISTING \refitem cfg_xml_programlisting XML_PROGRAMLISTING
\refitem cfg_xml_schema XML_SCHEMA \refitem cfg_xml_schema XML_SCHEMA
\endsecreflist \endsecreflist
...@@ -272,6 +273,18 @@ followed by the descriptions of the tags grouped by category. ...@@ -272,6 +273,18 @@ followed by the descriptions of the tags grouped by category.
If both \c HIDE_UNDOC_MEMBERS and \c BRIEF_MEMBER_DESC are set to \c NO, the If both \c HIDE_UNDOC_MEMBERS and \c BRIEF_MEMBER_DESC are set to \c NO, the
brief descriptions will be completely suppressed. brief descriptions will be completely suppressed.
\anchor cfg_abbreviate_brief
<dt>\c ABBREVIATE_BRIEF <dd>
\addindex ABBREVIATE_BRIEF
This tag implements a quasi-intelligent brief description abbreviator
that is used to form the text in various listings. Each string
in this list, if found as the leading text of the brief description, will be
stripped from the text and the result after processing the whole list, is used
as the annotated text. Otherwise, the brief description is used as-is. If left
blank, the following values are used ("\$name" is automatically replaced with the
name of the entity): "The $name class" "The $name widget" "The $name file"
"is" "provides" "specifies" "contains" "represents" "a" "an" "the".
\anchor cfg_always_detailed_sec \anchor cfg_always_detailed_sec
<dt>\c ALWAYS_DETAILED_SEC <dd> <dt>\c ALWAYS_DETAILED_SEC <dd>
\addindex ALWAYS_DETAILED_SEC \addindex ALWAYS_DETAILED_SEC
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version unknown), 29 languages Currently (version 1.3.3), 29 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
...@@ -73,7 +73,7 @@ when the translator was updated. ...@@ -73,7 +73,7 @@ when the translator was updated.
<TD>Chinese Traditional</TD> <TD>Chinese Traditional</TD>
<TD>Daniel YC Lin<br>Gary Lee</TD> <TD>Daniel YC Lin<br>Gary Lee</TD>
<TD>daniel@NOSPAM.twpda.com<br>garylee@NOSPAM.ecosine.com.tw</TD> <TD>daniel@NOSPAM.twpda.com<br>garylee@NOSPAM.ecosine.com.tw</TD>
<TD>1.3.3</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Croatian</TD> <TD>Croatian</TD>
...@@ -91,7 +91,7 @@ when the translator was updated. ...@@ -91,7 +91,7 @@ when the translator was updated.
<TD>Danish</TD> <TD>Danish</TD>
<TD>Erik S&oslash;e S&oslash;rensen</TD> <TD>Erik S&oslash;e S&oslash;rensen</TD>
<TD>erik@NOSPAM.mail.nu</TD> <TD>erik@NOSPAM.mail.nu</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Dutch</TD> <TD>Dutch</TD>
...@@ -187,7 +187,7 @@ when the translator was updated. ...@@ -187,7 +187,7 @@ when the translator was updated.
<TD>Russian</TD> <TD>Russian</TD>
<TD>Alexandr Chelpanov</TD> <TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD> <TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>strange</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Serbian</TD> <TD>Serbian</TD>
...@@ -243,14 +243,14 @@ when the translator was updated. ...@@ -243,14 +243,14 @@ when the translator was updated.
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\ Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\ & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline \hline
Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & 1.3.3 \\ Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & up-to-date \\
& Gary Lee & {\tt garylee@ecosine.com.tw} & \\ & Gary Lee & {\tt garylee@ecosine.com.tw} & \\
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\ Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\ Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & up-to-date \\
\hline \hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\ Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline \hline
...@@ -285,7 +285,7 @@ when the translator was updated. ...@@ -285,7 +285,7 @@ when the translator was updated.
\hline \hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\ Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.3 \\ Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.3 \\
\hline \hline
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.4_20031005 Version: 1.3.4_20031019
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -72,6 +72,7 @@ class ClassDef : public Definition ...@@ -72,6 +72,7 @@ class ClassDef : public Definition
QCString getSourceFileBase() const; QCString getSourceFileBase() const;
QCString getReference() const; QCString getReference() const;
bool isReference() const; bool isReference() const;
bool isLocal() const { return m_isLocal; }
bool hasDocumentation() const; bool hasDocumentation() const;
......
...@@ -71,7 +71,11 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ...@@ -71,7 +71,11 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
) )
{ {
bool isLink = cd->isLinkable(); bool isLink = cd->isLinkable();
if (isLink || !Config_getBool("HIDE_UNDOC_CLASSES")) if (isLink ||
(!Config_getBool("HIDE_UNDOC_CLASSES") &&
(!cd->isLocal() || Config_getBool("EXTRACT_LOCAL_CLASSES"))
)
)
{ {
if (!found) if (!found)
{ {
...@@ -127,8 +131,10 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ...@@ -127,8 +131,10 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.startMemberDescription(); ol.startMemberDescription();
ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0, ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0,
cd->briefDescription(),FALSE,FALSE); cd->briefDescription(),FALSE,FALSE);
if ((!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || if (//(!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!cd->documentation().isEmpty()) //!cd->documentation().isEmpty())
cd->isLinkableInProject()
)
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
......
...@@ -1245,6 +1245,22 @@ void Config::check() ...@@ -1245,6 +1245,22 @@ void Config::check()
Config_getBool("INLINE_INFO")=FALSE; Config_getBool("INLINE_INFO")=FALSE;
} }
// add default words if needed
QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF");
if (annotationFromBrief.isEmpty())
{
annotationFromBrief.append("The $name class");
annotationFromBrief.append("The $name widget");
annotationFromBrief.append("The $name file");
annotationFromBrief.append("is");
annotationFromBrief.append("provides");
annotationFromBrief.append("specifies");
annotationFromBrief.append("contains");
annotationFromBrief.append("represents");
annotationFromBrief.append("a");
annotationFromBrief.append("an");
annotationFromBrief.append("the");
}
} }
void Config::init() void Config::init()
...@@ -1419,6 +1435,17 @@ void Config::create() ...@@ -1419,6 +1435,17 @@ void Config::create()
"brief descriptions will be completely suppressed. \n", "brief descriptions will be completely suppressed. \n",
TRUE TRUE
); );
cl = addList(
"ABBREVIATE_BRIEF",
"This tag implements a quasi-intelligent brief description abbreviator \n"
"that is used to form the text in various listings. Each string \n"
"in this list, if found as the leading text of the brief description, will be \n"
"stripped from the text and the result after processing the whole list, is used \n"
"as the annotated text. Otherwise, the brief description is used as-is. If left \n"
"blank, the following values are used (\"$name\" is automatically replaced with the \n"
"name of the entity): \"The $name class\" \"The $name widget\" \"The $name file\" \n"
"\"is\" \"provides\" \"specifies\" \"contains\" \"represents\" \"a\" \"an\" \"the\"\n"
);
cb = addBool( cb = addBool(
"ALWAYS_DETAILED_SEC", "ALWAYS_DETAILED_SEC",
"If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n" "If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n"
......
...@@ -1218,6 +1218,8 @@ DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor) ...@@ -1218,6 +1218,8 @@ DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor)
else else
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid anchor id `%s'",id.data()); warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid anchor id `%s'",id.data());
m_anchor = "invalid";
m_file = "invalid";
} }
} }
} }
...@@ -4730,7 +4732,7 @@ void DocRoot::parse() ...@@ -4730,7 +4732,7 @@ void DocRoot::parse()
} }
else else
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid anchor id `%s'; ignoring section",g_token->sectionId.data()); warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid section id `%s'; ignoring section",g_token->sectionId.data());
retval = 0; retval = 0;
} }
} }
......
...@@ -248,9 +248,9 @@ class DirEntry ...@@ -248,9 +248,9 @@ class DirEntry
{ {
public: public:
enum EntryKind { Dir, File }; enum EntryKind { Dir, File };
DirEntry::DirEntry(DirEntry *parent,FileDef *fd) DirEntry(DirEntry *parent,FileDef *fd)
: m_parent(parent), m_kind(File), m_fd(fd), m_isLast(FALSE) { } : m_parent(parent), m_kind(File), m_fd(fd), m_isLast(FALSE) { }
DirEntry::DirEntry(DirEntry *parent) DirEntry(DirEntry *parent)
: m_parent(parent), m_kind(Dir), m_fd(0), m_isLast(FALSE) { } : m_parent(parent), m_kind(Dir), m_fd(0), m_isLast(FALSE) { }
virtual ~DirEntry() { } virtual ~DirEntry() { }
EntryKind kind() const { return m_kind; } EntryKind kind() const { return m_kind; }
......
...@@ -749,7 +749,7 @@ void FTVHelp::generateTreeView() ...@@ -749,7 +749,7 @@ void FTVHelp::generateTreeView()
t << " </script>\n"; t << " </script>\n";
t << " </head>\n"; t << " </head>\n";
t << "\n"; t << "\n";
t << " <body bgcolor=\"#ffffff\">\n"; t << " <body>\n";
t << " <div class=\"directory\">\n"; t << " <div class=\"directory\">\n";
t << " <h3>"; t << " <h3>";
QCString &projName = Config_getString("PROJECT_NAME"); QCString &projName = Config_getString("PROJECT_NAME");
......
...@@ -205,7 +205,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) ...@@ -205,7 +205,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile && (srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
md->getOuterScope()->definitionType()==Definition::TypeFile); md->getOuterScope()->definitionType()==Definition::TypeFile);
if (matchArguments(srcMd->argumentList(),md->argumentList()) && if (srcMd->isFunction() && md->isFunction() &&
matchArguments(srcMd->argumentList(),md->argumentList()) &&
sameScope sameScope
) )
{ {
...@@ -690,7 +691,8 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup) ...@@ -690,7 +691,8 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
/*! Add a member to the group with the highest priority */ /*! Add a member to the group with the highest priority */
void addMemberToGroups(Entry *root,MemberDef *md) void addMemberToGroups(Entry *root,MemberDef *md)
{ {
//printf(" Root %p = %s, md %p=%s groups=%d\n", root, root->name.data(), md, md->name().data(), root->groups->count() ); //printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n",
// root, root->name.data(), md, md->name().data(), root->groups->count() );
QListIterator<Grouping> gli(*root->groups); QListIterator<Grouping> gli(*root->groups);
Grouping *g; Grouping *g;
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <qtextstream.h> #include <qtextstream.h>
#include <qdatetime.h> #include <qdatetime.h>
#include <qdir.h> #include <qdir.h>
#include <qregexp.h>
#include "message.h" #include "message.h"
#include "index.h" #include "index.h"
...@@ -136,34 +137,28 @@ bool stripWord(QCString &s,QCString w) ...@@ -136,34 +137,28 @@ bool stripWord(QCString &s,QCString w)
// some quasi intelligent brief description abbreviator :^) // some quasi intelligent brief description abbreviator :^)
QCString abbreviate(const char *s,const char *name) QCString abbreviate(const char *s,const char *name)
{ {
QCString scopelessName=name;
int i=scopelessName.findRev("::");
if (i!=-1) scopelessName=scopelessName.mid(i);
QCString result=s; QCString result=s;
QCString start1=(QCString)"The "+name+" class ";
QCString start2=(QCString)"The "+name+" widget ";
QCString start3=(QCString)"The "+name+" file ";
result=result.stripWhiteSpace(); result=result.stripWhiteSpace();
// strip trailing . // strip trailing .
if (!result.isEmpty() && result.at(result.length()-1)=='.') if (!result.isEmpty() && result.at(result.length()-1)=='.')
result=result.left(result.length()-1); result=result.left(result.length()-1);
bool found=FALSE;
found = found || stripWord(result,start1); // strip any predefined prefix
found = found || stripWord(result,start2); QStrList &briefDescAbbrev = Config_getList("ANNOTATION_FROM_BRIEF");
found = found || stripWord(result,start3); const char *p = briefDescAbbrev.first();
if (found) while (p)
{
bool found=FALSE;
found = found || stripWord(result,"is ");
found = found || stripWord(result,"provides ");
found = found || stripWord(result,"specifies ");
found = found || stripWord(result,"contains ");
found = found || stripWord(result,"represents ");
found = found || stripWord(result,"implements ");
if (found)
{ {
stripWord(result,"a "); QCString s = p;
stripWord(result,"an "); s.replace(QRegExp("\\$name"), scopelessName); // replace $name with entity name
stripWord(result,"the "); s += " ";
} stripWord(result,s);
p = briefDescAbbrev.next();
} }
// capitalize first word
if (!result.isEmpty()) if (!result.isEmpty())
{ {
int c=result[0]; int c=result[0];
...@@ -1320,13 +1315,13 @@ void writeAnnotatedClassList(OutputList &ol) ...@@ -1320,13 +1315,13 @@ void writeAnnotatedClassList(OutputList &ol)
void writeAlphabeticalClassList(OutputList &ol) void writeAlphabeticalClassList(OutputList &ol)
{ {
//ol.startAlphabeticalIndexList(); //ol.startAlphabeticalIndexList();
ol.writeString("<table align=center width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
// first count the number of headers // first count the number of headers
ClassSDict::Iterator cli(Doxygen::classSDict); ClassSDict::Iterator cli(Doxygen::classSDict);
ClassDef *cd; ClassDef *cd;
char startLetter=0; char startLetter=0;
int headerItems=0; int headerItems=0;
QCString alphaLinks = "<p><div class=\"qindex\">";
for (;(cd=cli.current());++cli) for (;(cd=cli.current());++cli)
{ {
if (cd->isLinkableInProject() && cd->templateMaster()==0) if (cd->isLinkableInProject() && cd->templateMaster()==0)
...@@ -1336,10 +1331,18 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1336,10 +1331,18 @@ void writeAlphabeticalClassList(OutputList &ol)
if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header
{ {
startLetter=toupper(cd->className().at(index)); startLetter=toupper(cd->className().at(index));
if (headerItems) alphaLinks += "&nbsp;|&nbsp;";
headerItems++; headerItems++;
alphaLinks += (QCString)"<a class=\"qindex\" href=\"#letter_" +
startLetter + "\">" +
startLetter + "</a>";
} }
} }
} }
alphaLinks += "</div><p>\n";
ol.writeString(alphaLinks);
ol.writeString("<table align=center width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
// the number of columns in the table // the number of columns in the table
const int columns = Config_getInt("COLS_IN_ALPHA_INDEX"); const int columns = Config_getInt("COLS_IN_ALPHA_INDEX");
...@@ -1419,6 +1422,9 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1419,6 +1422,9 @@ void writeAlphabeticalClassList(OutputList &ol)
startLetter=toupper(cd->className().at(index)); startLetter=toupper(cd->className().at(index));
char s[2]; s[0]=startLetter; s[1]=0; char s[2]; s[0]=startLetter; s[1]=0;
//ol.writeIndexHeading(s); //ol.writeIndexHeading(s);
ol.writeString("<a name=\"letter_");
ol.writeString(s);
ol.writeString("\"></a>");
ol.writeString("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">" ol.writeString("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
"<tr>" "<tr>"
"<td><div class=\"ah\">&nbsp;&nbsp;"); "<td><div class=\"ah\">&nbsp;&nbsp;");
...@@ -1477,6 +1483,8 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1477,6 +1483,8 @@ void writeAlphabeticalClassList(OutputList &ol)
//ol.endAlphabeticalIndexList(); //ol.endAlphabeticalIndexList();
ol.writeString("</table>"); ol.writeString("</table>");
ol.writeString(alphaLinks);
// release the temporary memory // release the temporary memory
for (i=0;i<columns;i++) for (i=0;i<columns;i++)
{ {
......
...@@ -21,205 +21,142 @@ ...@@ -21,205 +21,142 @@
#include <qfile.h> #include <qfile.h>
#include <qdir.h> #include <qdir.h>
unsigned char doxygen_png_data[] = { unsigned char doxygen_png_data[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x35, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x2d,
0x08, 0x02, 0x00, 0x00, 0x00, 0x2f, 0x70, 0x49, 0x98, 0x00, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x6f, 0x6b, 0x3e, 0xc2, 0x00, 0x00, 0x03,
0x06, 0x74, 0x52, 0x4e, 0x53, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x37, 0x00, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xbf, 0xbe, 0xa4, 0xf7,
0x58, 0x1b, 0x7d, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xe4, 0x8c, 0xff, 0xfe, 0xd8, 0xf4, 0xda, 0x6f, 0xda, 0xcb, 0x86, 0xf9,
0xff, 0x00, 0xff, 0x00, 0xe2, 0xc3, 0xbb, 0xcb, 0x4a, 0x00, 0x00, 0x08, 0xeb, 0xa1, 0xde, 0xdb, 0xb4, 0x00, 0x00, 0x00, 0xb9, 0xab, 0x71, 0xdf,
0x33, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x58, 0x6b, 0x6c, 0x54, 0xdf, 0xc4, 0x5b, 0x51, 0x26, 0xff, 0xff, 0xe1, 0xd7, 0xc3, 0x6d, 0xae,
0x55, 0x10, 0xde, 0xc4, 0x67, 0x34, 0x04, 0x34, 0x2a, 0x54, 0x4a, 0x77, 0x92, 0x2b, 0xd5, 0xbb, 0x57, 0xf1, 0xcd, 0x49, 0xee, 0xc4, 0x30, 0xd1,
0x31, 0x29, 0x62, 0x44, 0x25, 0xa6, 0x60, 0x2d, 0xed, 0xb6, 0xc1, 0x26, 0xad, 0x2d, 0x3d, 0x37, 0x1d, 0x67, 0x5e, 0x37, 0x60, 0x5f, 0x50, 0x40,
0xfa, 0xc3, 0x44, 0x25, 0x1a, 0x89, 0x34, 0xa5, 0xd1, 0x22, 0xbf, 0x30, 0x3f, 0x32, 0xfd, 0xf8, 0xc9, 0xfc, 0xf4, 0xbc, 0xdc, 0xd4, 0x9f, 0xfb,
0x21, 0x01, 0xa3, 0x89, 0xf1, 0x81, 0xb6, 0xf1, 0x07, 0xd5, 0xa4, 0xfc, 0xf0, 0xaf, 0x1f, 0x1d, 0x13, 0xff, 0xcc, 0xcc, 0xdf, 0xb2, 0xb2, 0xa9,
0x90, 0x26, 0x46, 0x69, 0xd2, 0x1a, 0x45, 0xa5, 0x15, 0x51, 0xd0, 0x3e, 0x22, 0x22, 0x12, 0x14, 0x3e, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x22,
0x56, 0x28, 0x5d, 0x2c, 0x8a, 0x01, 0x84, 0xd2, 0xc7, 0xb6, 0x97, 0x76, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x26,
0x23, 0x3f, 0x4a, 0x42, 0x51, 0xa0, 0x4f, 0xe8, 0xf5, 0x3b, 0x33, 0xe7, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x2a,
0x9c, 0x3d, 0xdb, 0x6e, 0x77, 0xb7, 0xf5, 0x4a, 0xd1, 0xdc, 0xc9, 0xe4, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e,
0x66, 0x76, 0xce, 0x37, 0x33, 0xdf, 0x7c, 0xbb, 0x7b, 0x7b, 0xb7, 0x1e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x32,
0xdb, 0x35, 0x87, 0xcc, 0x33, 0xd3, 0x04, 0xfe, 0x3f, 0xe6, 0x4a, 0xe9, 0x32, 0x32, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x36,
0x98, 0x4d, 0x59, 0x4a, 0x4f, 0x2c, 0x9b, 0xe9, 0x2d, 0xae, 0x09, 0x9b, 0x36, 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x3a,
0x8e, 0x94, 0x81, 0x40, 0xb5, 0x65, 0xfd, 0xc4, 0x8e, 0xd8, 0x95, 0x92, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3e,
0x6d, 0x3a, 0x52, 0x42, 0x41, 0xdb, 0x0e, 0xb1, 0x23, 0x76, 0xa5, 0x64, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x42,
0x73, 0xa5, 0x74, 0xcc, 0x5c, 0x29, 0x1d, 0x33, 0x57, 0x4a, 0xc7, 0xcc, 0x42, 0x42, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46,
0x95, 0xd2, 0x31, 0x73, 0xa5, 0x74, 0xcc, 0x5c, 0x29, 0x1d, 0xb3, 0x69, 0x46, 0x46, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a,
0x4b, 0xd9, 0xa5, 0xa4, 0xdc, 0xef, 0x4a, 0xc9, 0x36, 0x3d, 0x29, 0x0f, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4e,
0xd8, 0xb6, 0x45, 0xde, 0x8d, 0xd8, 0x95, 0x92, 0x2d, 0x81, 0x0a, 0x31, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52,
0x7f, 0x26, 0x5a, 0xd6, 0x41, 0xdb, 0x3e, 0xcd, 0x8e, 0x58, 0x4b, 0xe9, 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
0x99, 0xdc, 0x62, 0x36, 0x9c, 0x2c, 0x19, 0xff, 0x27, 0x69, 0xc2, 0x0e, 0x56, 0x56, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
0xf1, 0x7f, 0xd7, 0xc6, 0xc7, 0x78, 0x12, 0xd9, 0x74, 0xa4, 0xe4, 0xca, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5e,
0x40, 0xe0, 0x0b, 0xcb, 0x0a, 0x5a, 0x56, 0x33, 0x5d, 0x65, 0x60, 0xdb, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62,
0x3d, 0xb6, 0xdd, 0xcb, 0x8e, 0x97, 0x7a, 0xff, 0x09, 0x60, 0xf6, 0x43, 0x62, 0x62, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x66,
0x81, 0xc0, 0xce, 0x68, 0x0c, 0x00, 0xcd, 0x08, 0xc6, 0x15, 0xe2, 0x5a, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a,
0x54, 0xf4, 0x1c, 0x5e, 0xe2, 0xaa, 0x33, 0x13, 0x85, 0x50, 0x1d, 0xe4, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
0x69, 0x34, 0xcf, 0xa0, 0x41, 0x40, 0xd2, 0x30, 0x07, 0x45, 0x23, 0x23, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72,
0x4b, 0xe9, 0x56, 0x9a, 0xde, 0xb8, 0x95, 0xcd, 0x89, 0x53, 0x93, 0x52, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
0x8f, 0xb4, 0xed, 0xb0, 0x56, 0x4d, 0xb9, 0x99, 0x09, 0x43, 0x29, 0x80, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
0xf3, 0xf2, 0x1e, 0x05, 0x5e, 0x1d, 0x85, 0xc7, 0xc1, 0x58, 0x4d, 0xc2, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e,
0xec, 0xd4, 0x47, 0x68, 0x8e, 0x8c, 0xcf, 0x97, 0x8a, 0x2b, 0x0d, 0x8a, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
0x74, 0x53, 0xa3, 0x23, 0xef, 0x93, 0xc1, 0x4a, 0x77, 0x10, 0x60, 0x9e, 0x82, 0x82, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
0x8b, 0xc0, 0xe0, 0x16, 0x8e, 0x8e, 0x65, 0x4f, 0xae, 0x55, 0x83, 0x62, 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a,
0x20, 0xf9, 0xfd, 0x56, 0xad, 0xc2, 0x13, 0x56, 0x0e, 0x2b, 0xd8, 0xa4, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8e,
0x6a, 0x4e, 0x2a, 0xa5, 0x31, 0x35, 0x8e, 0x94, 0x72, 0x5b, 0xd2, 0xb1, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92,
0x37, 0xbe, 0x2b, 0x12, 0x51, 0x19, 0x7c, 0x00, 0xcd, 0x41, 0xdc, 0xcd, 0x92, 0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96,
0x90, 0xa6, 0xd7, 0xfc, 0x4c, 0x7d, 0xf8, 0xe1, 0x5b, 0xd1, 0x47, 0x3b, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
0x8d, 0xb7, 0x21, 0xc1, 0x5c, 0xe3, 0x9d, 0x96, 0x83, 0xc6, 0x15, 0xaa, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
0xd1, 0xc1, 0xa4, 0x17, 0x49, 0x42, 0x4a, 0x1a, 0xfc, 0xb9, 0xbe, 0x1b, 0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
0xd2, 0x9f, 0x17, 0x71, 0x4f, 0x64, 0xd7, 0x19, 0x0e, 0xf8, 0x5e, 0x69, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
0x59, 0x4d, 0x06, 0x1e, 0xe0, 0x26, 0x03, 0xac, 0x3b, 0x34, 0x4d, 0xe8, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xaa,
0x7c, 0x3a, 0xfa, 0xb6, 0xdb, 0x54, 0x54, 0xf4, 0xac, 0xfa, 0xe8, 0x45, 0xaa, 0xaa, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
0x92, 0x5a, 0x4a, 0x63, 0xba, 0x98, 0x9b, 0x97, 0x97, 0x09, 0x1f, 0x77, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb2,
0xe3, 0x0e, 0x87, 0x0f, 0x99, 0x24, 0x99, 0xde, 0xb8, 0xfb, 0x3b, 0x38, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb6,
0xd0, 0x6d, 0xe4, 0x59, 0x93, 0xa1, 0x5a, 0xe4, 0xa0, 0x49, 0x8f, 0x09, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
0x4c, 0x94, 0x62, 0x0a, 0x52, 0x5a, 0xdd, 0xfc, 0xe4, 0xd8, 0x69, 0x8f, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbe,
0x75, 0xe2, 0x1a, 0x08, 0x54, 0xe5, 0xe5, 0x3d, 0xe2, 0xf3, 0xcd, 0xcf, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc2,
0xcf, 0xcf, 0x42, 0x2c, 0xf2, 0xca, 0xd5, 0x73, 0x25, 0x3d, 0x66, 0x8e, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc6,
0x85, 0x4c, 0x30, 0xae, 0x12, 0x8c, 0xbc, 0xe8, 0x13, 0xe2, 0x23, 0xf1, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9, 0xca,
0x2c, 0x35, 0xd6, 0x69, 0x36, 0xa1, 0x5a, 0x51, 0x88, 0xef, 0x3b, 0xdd, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
0x2e, 0x32, 0xd5, 0xa3, 0x2b, 0x4d, 0x6f, 0xac, 0x22, 0x7d, 0xab, 0x44, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd2,
0x15, 0xf5, 0x11, 0xad, 0x1a, 0xab, 0xa9, 0x7f, 0xb5, 0x2a, 0x17, 0xcd, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd6,
0x41, 0x6f, 0xe9, 0xd2, 0xfb, 0xf2, 0xf3, 0x57, 0x74, 0xab, 0x72, 0xa6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xda,
0x27, 0x6b, 0x8d, 0x07, 0x61, 0x95, 0x0c, 0xe9, 0x29, 0x58, 0x19, 0x49, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdd, 0xdd, 0xdd, 0xde,
0x2a, 0xec, 0x94, 0x9c, 0x69, 0x97, 0xa2, 0xa2, 0x55, 0x96, 0x4e, 0x46, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe2,
0xad, 0x9c, 0x48, 0x4a, 0x80, 0x1a, 0x1b, 0x3e, 0x19, 0xbb, 0xfc, 0xbb, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe6,
0xf6, 0xee, 0xd0, 0x0f, 0x79, 0xb9, 0xcb, 0x90, 0xbf, 0xfe, 0xfa, 0xeb, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xea,
0xe6, 0xcc, 0x99, 0x95, 0xff, 0x58, 0x26, 0x32, 0xb6, 0x71, 0x8a, 0x23, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xee,
0x8a, 0x4f, 0x98, 0x60, 0x36, 0xc4, 0xc8, 0xe8, 0x56, 0x16, 0x81, 0x1b, 0xee, 0xee, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf2,
0x1b, 0x65, 0x7f, 0xdb, 0x98, 0x82, 0xa1, 0x66, 0x21, 0x71, 0x38, 0xa1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf6,
0x47, 0x14, 0xad, 0x7d, 0x4a, 0x0e, 0xbd, 0x12, 0x99, 0xe2, 0xf3, 0xdd, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xfa,
0xad, 0x9b, 0x23, 0x78, 0xe2, 0xf1, 0x6c, 0x26, 0x89, 0x77, 0xb1, 0x61, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfe,
0xef, 0x07, 0x36, 0xf5, 0x67, 0x7a, 0x0c, 0xb3, 0x23, 0xdd, 0x9e, 0xd6, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xaf, 0x33, 0xef, 0x22, 0x00, 0x00, 0x00,
0x1c, 0x34, 0xed, 0x40, 0xc3, 0x27, 0x0a, 0x79, 0x82, 0x93, 0x96, 0x9a, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00,
0x62, 0x19, 0xe5, 0x7a, 0xe5, 0xa4, 0xa4, 0xec, 0xea, 0xa8, 0xb9, 0x32, 0x00, 0x01, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x88, 0x05, 0x1d, 0x48, 0x00,
0xd4, 0x72, 0x65, 0xe8, 0x67, 0x71, 0x1d, 0x6e, 0xe9, 0x6a, 0xaf, 0xf5, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x6e, 0xbd, 0x00,
0x79, 0x53, 0x78, 0x43, 0x41, 0xd4, 0x9b, 0x82, 0x0c, 0x1f, 0x01, 0x83, 0x00, 0x6e, 0xbd, 0x01, 0x84, 0x9a, 0x17, 0x68, 0x00, 0x00, 0x00, 0x07,
0x18, 0x79, 0x06, 0x8f, 0xd1, 0x4b, 0x0d, 0x86, 0x09, 0x70, 0x47, 0xcd, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd3, 0x0a, 0x08, 0x15, 0x0b, 0x1c, 0x3a,
0x98, 0xec, 0x86, 0xd3, 0x1a, 0x24, 0x73, 0xfd, 0x0f, 0x53, 0x07, 0x2a, 0x62, 0x10, 0x70, 0x00, 0x00, 0x02, 0xa1, 0x49, 0x44, 0x41, 0x54, 0x78,
0x11, 0x4d, 0x5a, 0xba, 0xdb, 0x6b, 0x8b, 0x0a, 0x9f, 0x34, 0x9f, 0x39, 0xda, 0xed, 0x56, 0x6b, 0x8f, 0xda, 0x30, 0x10, 0xc4, 0x0d, 0x69, 0xd6,
0x14, 0x46, 0x4d, 0xe9, 0xa8, 0xd5, 0x7c, 0xae, 0x0c, 0xff, 0xdc, 0x58, 0xce, 0x03, 0x88, 0x89, 0x4b, 0xf0, 0xd1, 0xff, 0xff, 0x33, 0xbb, 0xb3,
0xf7, 0x11, 0xc3, 0x74, 0xfe, 0x8f, 0xde, 0xef, 0xd7, 0x16, 0x3e, 0x89, 0x6b, 0xc7, 0x86, 0x0f, 0x77, 0x42, 0x3a, 0x2a, 0xb5, 0x62, 0x25, 0xf0,
0x77, 0x9a, 0x87, 0x42, 0x4a, 0xce, 0xf3, 0xda, 0x02, 0x46, 0x85, 0xb4, 0xcc, 0xbe, 0xc6, 0x31, 0xc9, 0x86, 0xdd, 0xae, 0x18, 0xa9, 0xed, 0x5e,
0x57, 0x4b, 0xa4, 0xf3, 0xb0, 0xe0, 0xdc, 0xf8, 0xe3, 0x47, 0x18, 0x27, 0x6a, 0x64, 0x9c, 0x73, 0xe6, 0xd5, 0x22, 0xae, 0x69, 0x1a, 0xf7, 0x16,
0x1b, 0x46, 0x8e, 0x30, 0xb4, 0x06, 0xad, 0xe4, 0xbe, 0x84, 0xe4, 0x9e, 0x79, 0x8b, 0xfc, 0xc3, 0x22, 0xc3, 0x5f, 0x11, 0x19, 0x86, 0xd7, 0x89,
0xe8, 0x36, 0x05, 0x29, 0x2f, 0x5f, 0xaa, 0x17, 0x7e, 0xb1, 0x01, 0x1e, 0xa4, 0x81, 0x92, 0x45, 0x88, 0xca, 0x84, 0xa9, 0x97, 0x32, 0x74, 0x2a,
0x3a, 0x59, 0xe5, 0xf3, 0xce, 0xd3, 0x4b, 0x7a, 0xbd, 0xf3, 0x42, 0x27, 0x6f, 0x99, 0x45, 0x05, 0xd3, 0x7d, 0x40, 0x83, 0x98, 0x27, 0x6c, 0x83,
0xab, 0xe9, 0x08, 0x80, 0x7a, 0xc4, 0x48, 0x52, 0xcc, 0xe0, 0x6a, 0x80, 0x8a, 0x64, 0x8a, 0x11, 0x03, 0xac, 0x8b, 0x59, 0x68, 0x31, 0x69, 0xea,
0xa1, 0xb8, 0xd2, 0x1d, 0xe0, 0x2a, 0x46, 0x0a, 0x70, 0xab, 0xf8, 0xaa, 0xa8, 0x77, 0xab, 0xd3, 0x94, 0xcc, 0x4c, 0xe5, 0xdf, 0xa6, 0x14, 0xbb,
0xe6, 0xe6, 0x3c, 0x44, 0x1d, 0xa8, 0x44, 0x0c, 0x12, 0xad, 0xb0, 0xbc, 0x86, 0x62, 0x8e, 0x82, 0xd9, 0xb0, 0x11, 0xec, 0x42, 0x0c, 0x0e, 0x11,
0x39, 0x05, 0x31, 0x32, 0xa3, 0x1a, 0x23, 0xc7, 0x89, 0x18, 0x4d, 0xd0, 0x4e, 0x94, 0xd3, 0x24, 0xf5, 0x56, 0x75, 0x8e, 0xaa, 0x2e, 0x86, 0xaa,
0x81, 0x61, 0x0d, 0xfb, 0xca, 0x14, 0xa0, 0xfe, 0x48, 0xb0, 0x62, 0x6d, 0x86, 0x49, 0xa5, 0x76, 0x49, 0xab, 0xa1, 0x4e, 0x91, 0xef, 0x45, 0x0f,
0xc1, 0xe3, 0x8b, 0x17, 0x2d, 0x30, 0xfb, 0xf3, 0xda, 0x82, 0xc3, 0xa5, 0xd2, 0x69, 0x11, 0x59, 0x01, 0xe1, 0xae, 0x95, 0x54, 0xe5, 0xc3, 0x70,
0xa8, 0x71, 0xdc, 0x10, 0xb0, 0x86, 0xbd, 0x65, 0xa8, 0xd2, 0xa3, 0x89, 0xc3, 0x83, 0x4a, 0x6a, 0x9a, 0x4e, 0x2b, 0x67, 0x6c, 0x87, 0xa7, 0xc5,
0xad, 0x5e, 0x4d, 0x2c, 0x1e, 0x59, 0x41, 0x14, 0x4a, 0x41, 0x92, 0x95, 0xf8, 0x2c, 0x7a, 0x01, 0x94, 0x6e, 0x90, 0x20, 0x22, 0x9a, 0xe7, 0x28,
0x12, 0xfc, 0x46, 0xcf, 0xd7, 0xc0, 0x47, 0xc8, 0x3b, 0x8f, 0x57, 0xe4, 0x6d, 0xa0, 0xda, 0x8d, 0x56, 0xa5, 0x3b, 0x49, 0x9e, 0x8e, 0xc6, 0xf0,
0x66, 0x2f, 0x89, 0x7c, 0x5e, 0xb2, 0x97, 0x84, 0x8e, 0x57, 0x8c, 0xf6, 0x91, 0x98, 0x46, 0x9e, 0x93, 0x3b, 0xca, 0xfb, 0x6d, 0xd4, 0x4c, 0x24,
0x8b, 0xa3, 0x51, 0x3a, 0x45, 0x52, 0x80, 0xfb, 0x85, 0xe3, 0xe8, 0xb1, 0xc1, 0xbc, 0x69, 0x0d, 0x18, 0xf9, 0xf6, 0x70, 0x3a, 0xf1, 0xe1, 0xcc,
0xbc, 0x87, 0xe6, 0xcd, 0x9d, 0x73, 0xf3, 0x4d, 0x37, 0xcc, 0x99, 0x7d, 0xb4, 0x85, 0xb6, 0x5c, 0x5c, 0x93, 0x1e, 0x3c, 0xf5, 0x77, 0x81, 0x28,
0x2b, 0x62, 0x64, 0x90, 0x07, 0x1e, 0x98, 0xba, 0x3d, 0x5b, 0x50, 0x5e, 0x86, 0x0e, 0x88, 0x12, 0xa5, 0x44, 0x4d, 0xd2, 0x80, 0x0b, 0xb8, 0x5b,
0xf7, 0xed, 0x16, 0x06, 0x73, 0x72, 0xb4, 0x7f, 0xd7, 0xe8, 0x84, 0x29, 0xc4, 0x1f, 0x62, 0x97, 0xca, 0x0c, 0xb2, 0xc4, 0xb7, 0x68, 0x2f, 0x43,
0x6a, 0xd0, 0xf6, 0xd1, 0xf3, 0xbb, 0x88, 0xcc, 0x2e, 0x8d, 0xaf, 0xdf, 0x25, 0x03, 0x31, 0x16, 0xe9, 0x7e, 0xb1, 0x75, 0x91, 0x5b, 0x44, 0xc0,
0xf3, 0xae, 0x89, 0xa9, 0xdb, 0xf3, 0xae, 0xa4, 0xda, 0x5f, 0x13, 0x6e, 0x8e, 0x1e, 0x68, 0xd0, 0x84, 0x85, 0x44, 0x17, 0x10, 0x9c, 0x6f, 0xa1,
0xff, 0x14, 0x7d, 0x42, 0xc7, 0xb6, 0xeb, 0xce, 0xbc, 0x76, 0xfd, 0x9e, 0x0e, 0xde, 0xc8, 0x22, 0xc8, 0xd2, 0x24, 0x89, 0x04, 0x09, 0x71, 0x8f,
0x2d, 0xbc, 0x91, 0xcc, 0xd3, 0x38, 0xf4, 0x29, 0x7c, 0x61, 0x25, 0x1c, 0xa8, 0x4e, 0x11, 0xb9, 0xb0, 0xad, 0xd2, 0x75, 0x05, 0xa2, 0x07, 0x1a,
0x1d, 0xe0, 0x3c, 0x3d, 0x74, 0x0c, 0x6c, 0xc5, 0x2c, 0x5a, 0x7c, 0xbb, 0xb0, 0x5c, 0x2e, 0x46, 0x5c, 0xe6, 0xa2, 0xb6, 0x72, 0x27, 0x60, 0xb3,
0x37, 0xed, 0x2e, 0x38, 0x1a, 0x8e, 0x80, 0x00, 0x53, 0x45, 0x4f, 0x5a, 0x44, 0xc4, 0x3b, 0x5a, 0x73, 0x80, 0x3d, 0x24, 0x6c, 0x8d, 0xd2, 0x80,
0x39, 0xd9, 0x3f, 0x3b, 0x1d, 0xbf, 0x6d, 0x1d, 0xe9, 0xdb, 0x31, 0x7c, 0x3b, 0xe0, 0xb8, 0xae, 0x6c, 0xab, 0x9c, 0xcf, 0x0a, 0x44, 0x42, 0x79,
0x96, 0xbc, 0xaf, 0xb2, 0xae, 0xf6, 0xb5, 0xdc, 0x15, 0x8b, 0xbd, 0x0b, 0x87, 0x42, 0x6d, 0xb0, 0xd7, 0xeb, 0x96, 0xa1, 0x29, 0x70, 0x03, 0x23,
0xee, 0xf0, 0xaf, 0x58, 0x8c, 0x78, 0xf8, 0x6c, 0xe5, 0x30, 0x9f, 0xf6, 0xb2, 0xae, 0x5a, 0xa4, 0x59, 0xab, 0x5d, 0x16, 0x6b, 0x03, 0x89, 0x8f,
0xed, 0xe8, 0xf8, 0xad, 0x0c, 0xf8, 0xce, 0x23, 0x65, 0x80, 0x09, 0x3f, 0x45, 0xc4, 0x27, 0x3f, 0x7c, 0xfb, 0x93, 0xcd, 0xf2, 0x2f, 0x6d, 0x01,
0x5b, 0x79, 0x60, 0xef, 0x9b, 0x2f, 0x16, 0xe4, 0xde, 0x9b, 0x9e, 0xb2, 0x5a, 0xe1, 0xf6, 0xac, 0xb4, 0x55, 0xa7, 0x66, 0xe0, 0x52, 0x94, 0xb6,
0xd2, 0x7f, 0x3f, 0x81, 0x77, 0x8c, 0xc0, 0xfb, 0x2a, 0x81, 0xc9, 0x55, 0xf2, 0x30, 0x87, 0x36, 0xc7, 0x56, 0xc5, 0xed, 0xf9, 0x6c, 0x79, 0xb5,
0xe5, 0x23, 0xc2, 0x45, 0x07, 0xe4, 0x47, 0xa8, 0x0a, 0xad, 0x70, 0x84, 0xd2, 0xa2, 0x8d, 0xb1, 0xd5, 0x5c, 0x88, 0xd8, 0x1f, 0xb0, 0xb6, 0x6d,
0xfe, 0x91, 0x8f, 0xff, 0x82, 0x3b, 0xea, 0x6a, 0x5f, 0xe7, 0x9e, 0x23, 0x75, 0x55, 0x9e, 0xa8, 0xf5, 0x4a, 0x14, 0x73, 0x63, 0xaf, 0x50, 0x47,
0x44, 0x43, 0x8f, 0x33, 0x0d, 0x25, 0x48, 0x12, 0xd5, 0x4a, 0x9a, 0xc5, 0x86, 0xd5, 0x12, 0x14, 0x45, 0x5b, 0x12, 0x79, 0x9f, 0xf8, 0x66, 0x11,
0xcd, 0xa9, 0xe7, 0xd9, 0x4a, 0x5e, 0x5b, 0x61, 0x28, 0xdf, 0x57, 0xd9, 0x65, 0xbb, 0xa2, 0x92, 0x6c, 0xa4, 0x3e, 0xa1, 0xfd, 0x7e, 0x3f, 0xf6,
0x71, 0xa4, 0xac, 0x70, 0x75, 0x76, 0xe1, 0xea, 0x1c, 0xf4, 0xef, 0x38, 0x23, 0x5c, 0xde, 0x8f, 0xda, 0x9a, 0x0f, 0x51, 0x1c, 0x79, 0x30, 0x79,
0xb2, 0x95, 0xf3, 0x98, 0x4e, 0x8b, 0x97, 0xa9, 0xc5, 0x05, 0x0c, 0x1c, 0x3b, 0x8e, 0xda, 0x88, 0xaa, 0x2e, 0x23, 0x49, 0x52, 0x94, 0x5c, 0x66,
0xe0, 0x50, 0x83, 0xb7, 0x60, 0x32, 0xcc, 0x21, 0x59, 0x29, 0x7f, 0xfc, 0xfa, 0xc8, 0xdb, 0xfd, 0x66, 0xa3, 0x45, 0x65, 0x26, 0x3d, 0x01, 0xda,
0x6a, 0xc3, 0xd0, 0x99, 0xf2, 0xa1, 0x33, 0xdb, 0xe0, 0x83, 0x74, 0x6d, 0x18, 0x91, 0x31, 0x4e, 0x22, 0x02, 0x47, 0x35, 0x00, 0xbd, 0x84, 0xe4,
0x6f, 0x79, 0x87, 0xfc, 0x6d, 0x7e, 0x49, 0xa7, 0x02, 0xd0, 0xd6, 0xf2, 0xba, 0xc6, 0xad, 0x05, 0x10, 0x44, 0x84, 0x26, 0x91, 0x7e, 0x3a, 0x68,
0x0e, 0xe1, 0x5f, 0x19, 0x92, 0x79, 0xe0, 0xcb, 0x7b, 0x8e, 0xbe, 0x07, 0xfc, 0x30, 0xf5, 0x3e, 0x46, 0xdf, 0x2b, 0x3d, 0xf4, 0x31, 0x32, 0xcc,
0x24, 0x5c, 0xc1, 0x04, 0x12, 0x18, 0x7f, 0x56, 0x3a, 0xbf, 0x1c, 0xa4, 0xcb, 0xe4, 0x59, 0xc4, 0x73, 0xe8, 0x90, 0xfb, 0x4f, 0x38, 0x40, 0x24,
0x0c, 0xf7, 0xd4, 0x55, 0x1a, 0x13, 0x91, 0x29, 0x2b, 0x9d, 0x9a, 0x6c, 0x8f, 0x67, 0x50, 0x2d, 0x43, 0x14, 0xe0, 0xe0, 0x7d, 0xe2, 0x32, 0x83,
0x53, 0x64, 0xca, 0x01, 0x98, 0xf8, 0x63, 0x0e, 0x6c, 0xdb, 0x64, 0x9f, 0xed, 0x47, 0xb1, 0x9b, 0x58, 0x05, 0x6f, 0x09, 0xc9, 0x62, 0x69, 0x3a,
0x72, 0x8d, 0xe4, 0xb6, 0xbc, 0xb6, 0x77, 0xc1, 0xed, 0x8a, 0xa1, 0x3c, 0x1e, 0x8f, 0x13, 0x31, 0xbd, 0xdd, 0x18, 0x4f, 0x3e, 0x7a, 0x78, 0x0e,
0x6d, 0x53, 0xa3, 0x07, 0x55, 0x55, 0x3b, 0x2d, 0xd2, 0x1e, 0xe9, 0x23, 0x54, 0xca, 0x3e, 0x4a, 0xbd, 0x2e, 0xb8, 0x85, 0x7f, 0x3f, 0x63, 0x34,
0xe8, 0xa1, 0x10, 0xae, 0x49, 0x0e, 0x29, 0x29, 0x92, 0x95, 0x92, 0xd5, 0x73, 0xcb, 0x54, 0x42, 0x0c, 0xe7, 0x19, 0x0e, 0x16, 0xf9, 0xac, 0x06,
0xfc, 0xe1, 0x8b, 0xe2, 0x81, 0xde, 0xd2, 0xc1, 0xde, 0x52, 0xba, 0x96, 0xaf, 0x81, 0xa7, 0x34, 0x4e, 0xa7, 0xd3, 0x9c, 0x45, 0x4e, 0x9b, 0xcd,
0x20, 0x18, 0xec, 0xa1, 0x97, 0x3d, 0x25, 0x08, 0xf8, 0x68, 0xb0, 0xa7, 0x9f, 0x36, 0xb9, 0x7f, 0x8b, 0x7d, 0x6d, 0x10, 0x39, 0x67, 0x32, 0x65,
0xa4, 0xad, 0x79, 0x13, 0xc0, 0x6b, 0x9e, 0x59, 0x34, 0xd0, 0x53, 0x2a, 0x8d, 0xe9, 0x8b, 0xaa, 0x27, 0x5f, 0xd3, 0x13, 0x76, 0x5d, 0xd8, 0x2c,
0xf3, 0x0c, 0x20, 0xbf, 0x14, 0x7a, 0x95, 0xbd, 0xf5, 0xa7, 0x97, 0x81, 0x97, 0x31, 0x7d, 0xf3, 0xdf, 0x02, 0xee, 0x5b, 0xb5, 0xe4, 0x8b, 0x99,
0x69, 0x0b, 0x6e, 0xe6, 0x53, 0x34, 0x3c, 0xd5, 0xbc, 0xd9, 0xff, 0xe8, 0x99, 0x7f, 0xfb, 0x5f, 0x8f, 0x18, 0xe3, 0xe3, 0x3f, 0x90, 0xdd, 0xdb,
0x42, 0x7f, 0xe6, 0xc2, 0x53, 0x48, 0x8a, 0xfe, 0x25, 0x03, 0x54, 0x8e, 0xde, 0xf6, 0xb6, 0xb7, 0xfd, 0x97, 0xf6, 0x07, 0x2e, 0xfb, 0x61, 0xc1,
0xb9, 0x62, 0xf9, 0xd4, 0xdb, 0xf8, 0x0a, 0x98, 0x9c, 0xde, 0x5b, 0x8a, 0xcc, 0x44, 0x36, 0x49, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xd8, 0x33, 0x89, 0xf9, 0x33, 0xef, 0x41, 0x21, 0xfa, 0xb7, 0x35, 0xcb, 0xae, 0x42, 0x60, 0x82
0x11, 0x4c, 0x9b, 0xd7, 0x66, 0x03, 0xc0, 0x64, 0x88, 0xab, 0xb9, 0x20,
0x68, 0x00, 0x43, 0x0c, 0x45, 0x66, 0x40, 0x64, 0x36, 0x81, 0x80, 0xe0,
0x10, 0xdc, 0x24, 0xe8, 0x49, 0x05, 0x24, 0x32, 0x59, 0x29, 0x59, 0xcd,
0x7d, 0x9f, 0xad, 0x26, 0x21, 0x36, 0xb3, 0x1c, 0x03, 0x5d, 0x74, 0x55,
0xea, 0x90, 0x40, 0xeb, 0xf7, 0x55, 0xaf, 0x06, 0x32, 0xe7, 0x91, 0x34,
0x04, 0xad, 0xfb, 0xd7, 0x9b, 0xf8, 0x08, 0x6c, 0xff, 0x7a, 0xe8, 0x38,
0x7b, 0xd6, 0x8d, 0xc0, 0x6b, 0x00, 0xf0, 0xde, 0xd4, 0xd9, 0x70, 0x04,
0x0a, 0xb9, 0x19, 0xc8, 0x6d, 0x6f, 0x2c, 0x26, 0x11, 0x67, 0xf3, 0x35,
0x52, 0xd2, 0xf5, 0x2a, 0xcf, 0x8a, 0x6f, 0xcc, 0x44, 0x94, 0x74, 0xc9,
0xb7, 0xd0, 0x3c, 0xc5, 0x46, 0xc8, 0x0c, 0x50, 0x37, 0xbd, 0x08, 0x5e,
0xea, 0x45, 0x10, 0x0c, 0x48, 0xfe, 0x82, 0x0c, 0x33, 0x94, 0x7b, 0x75,
0x49, 0xe6, 0xc0, 0x4c, 0x59, 0xca, 0x82, 0x67, 0x16, 0xed, 0x2e, 0x5f,
0x78, 0xb2, 0xee, 0xf9, 0x8b, 0xad, 0xc5, 0x17, 0x5a, 0x8b, 0x2f, 0x9e,
0x2a, 0x96, 0x41, 0x6b, 0x31, 0x92, 0x38, 0x02, 0x20, 0x67, 0x79, 0x8a,
0x77, 0xfe, 0xac, 0xb4, 0xf9, 0xb3, 0x10, 0x40, 0xaf, 0x93, 0xf5, 0xcf,
0x5f, 0x20, 0x8c, 0xf4, 0x53, 0x02, 0x89, 0x3c, 0x00, 0x80, 0x15, 0x10,
0x80, 0xcb, 0x0b, 0x28, 0x09, 0x5f, 0x63, 0x24, 0xa1, 0x23, 0xfa, 0x08,
0x11, 0xe7, 0x8b, 0xc7, 0x1a, 0xc4, 0x34, 0x7d, 0xdd, 0x45, 0xea, 0x13,
0x5b, 0xbb, 0xe5, 0x29, 0xdb, 0x4b, 0xfd, 0x5c, 0xc5, 0x26, 0xa6, 0xd4,
0x49, 0x1a, 0x58, 0x7b, 0xe3, 0x4b, 0x0f, 0x9a, 0x60, 0x35, 0x6e, 0xdd,
0x05, 0x63, 0x17, 0x0d, 0xd0, 0x85, 0xcc, 0x1c, 0x78, 0xe6, 0x40, 0xc8,
0x75, 0xbc, 0x3e, 0xe3, 0x93, 0xbd, 0x57, 0xc2, 0x02, 0x15, 0x15, 0xf6,
0xaf, 0xbf, 0xc6, 0x77, 0x6b, 0xf7, 0xee, 0x71, 0x9e, 0x10, 0x60, 0x62,
0xe2, 0x24, 0x31, 0x1d, 0x1c, 0xbe, 0xfb, 0x38, 0xe7, 0xcf, 0xa3, 0xab,
0xfe, 0x22, 0xff, 0xee, 0x63, 0x3f, 0x32, 0x1a, 0xcc, 0x01, 0x63, 0xe8,
0x34, 0x27, 0x3b, 0xe3, 0xce, 0xb4, 0xbb, 0x6f, 0xc9, 0xc9, 0xb8, 0x93,
0x33, 0xec, 0xbc, 0x76, 0x7c, 0x92, 0x26, 0x93, 0x98, 0xf9, 0x89, 0xc9,
0x64, 0x1f, 0x86, 0x36, 0xce, 0x9d, 0xfb, 0xa9, 0xcf, 0xf7, 0x7d, 0x7a,
0xfa, 0x0c, 0x3a, 0x08, 0x80, 0xc9, 0xf1, 0xdd, 0x59, 0xe7, 0x7f, 0x59,
0x29, 0xfc, 0xf0, 0x4a, 0xbc, 0x8c, 0x89, 0xc1, 0xd1, 0x9f, 0x87, 0x05,
0x00, 0xe0, 0xe3, 0xdf, 0x64, 0x89, 0x92, 0xc3, 0xb2, 0x04, 0x79, 0x96,
0xd2, 0x59, 0x62, 0xef, 0xa7, 0xa6, 0xf2, 0xa7, 0x2d, 0xb1, 0x94, 0x30,
0xa0, 0x51, 0x33, 0x83, 0x0e, 0x0e, 0xc7, 0xbe, 0x7e, 0xa0, 0x3f, 0xb8,
0xec, 0x5c, 0x73, 0x46, 0x7f, 0x73, 0xc6, 0xd1, 0xaf, 0xc5, 0x97, 0x34,
0x26, 0xac, 0x3f, 0x98, 0x01, 0x58, 0x7f, 0xf3, 0x32, 0x0a, 0x84, 0x9f,
0x43, 0x55, 0x50, 0x54, 0x21, 0x46, 0x93, 0x98, 0x85, 0xff, 0xd0, 0xf1,
0x69, 0x4b, 0x2c, 0xa5, 0x9d, 0xc4, 0x7f, 0x92, 0xaf, 0x8e, 0x1d, 0xfd,
0x72, 0xd1, 0xb9, 0xa6, 0x25, 0xec, 0x25, 0x1b, 0x52, 0x26, 0x83, 0xe1,
0x96, 0xad, 0x61, 0xe3, 0x1c, 0x47, 0xff, 0x2a, 0xc3, 0x64, 0xff, 0xec,
0xcc, 0xac, 0x99, 0x1a, 0x41, 0x53, 0x8f, 0xc7, 0x13, 0x1f, 0x69, 0xea,
0xce, 0x25, 0xac, 0xe3, 0x55, 0xe5, 0x3c, 0xd3, 0xa2, 0x4d, 0xce, 0x4c,
0x69, 0x94, 0x50, 0x14, 0xfd, 0xf1, 0x04, 0x58, 0xe3, 0xaf, 0xb2, 0x8e,
0xf6, 0xb5, 0x2c, 0x25, 0x2c, 0x6d, 0xde, 0x8d, 0xec, 0x49, 0x6d, 0x32,
0xf9, 0x57, 0xef, 0xea, 0xd8, 0x35, 0x2d, 0xe5, 0x7f, 0xcb, 0x5c, 0x29,
0x1d, 0x33, 0x57, 0x4a, 0xc7, 0xcc, 0x95, 0xd2, 0x31, 0x73, 0xa5, 0x74,
0xcc, 0x5c, 0x29, 0x1d, 0x33, 0x57, 0x4a, 0xc7, 0xcc, 0x95, 0xd2, 0x31,
0x73, 0xa5, 0x74, 0xcc, 0x5c, 0x29, 0x1d, 0x33, 0x57, 0x4a, 0xc7, 0xcc,
0x95, 0xd2, 0x31, 0x73, 0xa5, 0x74, 0xcc, 0x5c, 0x29, 0x1d, 0x33, 0x57,
0x4a, 0xc7, 0xcc, 0x95, 0xd2, 0x31, 0x73, 0xa5, 0x74, 0xcc, 0xfe, 0x06,
0xbe, 0x63, 0xe9, 0x2a, 0x3a, 0x4d, 0xca, 0xc2, 0x00, 0x00, 0x00, 0x43,
0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65,
0x00, 0x40, 0x28, 0x23, 0x29, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x61,
0x67, 0x69, 0x63, 0x6b, 0x20, 0x34, 0x2e, 0x32, 0x2e, 0x37, 0x20, 0x39,
0x39, 0x2f, 0x30, 0x37, 0x2f, 0x30, 0x31, 0x20, 0x63, 0x72, 0x69, 0x73,
0x74, 0x79, 0x40, 0x6d, 0x79, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x73,
0x2e, 0x64, 0x75, 0x70, 0x6f, 0x6e, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x6b,
0x02, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x2a, 0x74, 0x45, 0x58, 0x74, 0x53,
0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x00, 0x35, 0x34, 0x36,
0x33, 0x61, 0x37, 0x38, 0x35, 0x62, 0x62, 0x31, 0x31, 0x64, 0x33, 0x36,
0x37, 0x30, 0x32, 0x32, 0x37, 0x30, 0x31, 0x63, 0x37, 0x37, 0x65, 0x62,
0x65, 0x38, 0x31, 0x61, 0x62, 0x12, 0xbe, 0x63, 0xf7, 0x00, 0x00, 0x00,
0x0f, 0x74, 0x45, 0x58, 0x74, 0x50, 0x61, 0x67, 0x65, 0x00, 0x31, 0x31,
0x30, 0x78, 0x35, 0x33, 0x2b, 0x30, 0x2b, 0x30, 0xbb, 0x45, 0xd1, 0x42,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
}; };
unsigned int doxygen_png_len = 2352; unsigned int doxygen_png_len = 1576;
unsigned char search_png[] = { unsigned char search_png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
......
...@@ -1739,9 +1739,9 @@ void MemberDef::warnIfUndocumented() ...@@ -1739,9 +1739,9 @@ void MemberDef::warnIfUndocumented()
// "isDocumentedFriendClass()=%d name()=%s prot=%d\n", // "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(), // d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot); // name().data(),prot);
if (/*d && d->isLinkable() &&*/ !isLinkable() && if (!isLinkable() &&
!isDocumentedFriendClass() && !isDocumentedFriendClass() &&
name().find('@')==-1 && name().find('@')==-1 && d->name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE")) (prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
) )
{ {
......
...@@ -1669,7 +1669,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1669,7 +1669,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
BEGIN(SkipCComment); BEGIN(SkipCComment);
} }
<SkipCComment,SkipVerbatim>[^*\n\/]+ { <SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
} }
<SkipCComment,SkipVerbatim>\n { <SkipCComment,SkipVerbatim>\n {
...@@ -1682,7 +1682,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1682,7 +1682,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<RemoveCComment>"*/" { BEGIN(g_lastCContext); } <RemoveCComment>"*/" { BEGIN(g_lastCContext); }
<RemoveCComment>"//" <RemoveCComment>"//"
<RemoveCComment>"/*" <RemoveCComment>"/*"
<RemoveCComment>[^*\n]+ <RemoveCComment>[^*\x06\n]+
<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); } <RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
<RemoveCComment>. <RemoveCComment>.
<SkipCPPComment,RemoveCPPComment>\n { <SkipCPPComment,RemoveCPPComment>\n {
...@@ -1695,7 +1695,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1695,7 +1695,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPPComment>"//" { <SkipCPPComment>"//" {
outputChar('/');outputChar('/'); outputChar('/');outputChar('/');
} }
<SkipCPPComment>[^\n]+ { <SkipCPPComment>[^\x06\n]+ {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
} }
<SkipCPPComment>. { <SkipCPPComment>. {
...@@ -1703,7 +1703,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1703,7 +1703,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
} }
<RemoveCPPComment>"/*" <RemoveCPPComment>"/*"
<RemoveCPPComment>"//" <RemoveCPPComment>"//"
<RemoveCPPComment>[^\n]+ <RemoveCPPComment>[^\x06\n]+
<RemoveCPPComment>. <RemoveCPPComment>.
<DefineText>"#" { <DefineText>"#" {
g_quoteArg=TRUE; g_quoteArg=TRUE;
......
...@@ -74,7 +74,7 @@ function search($file,$word,&$statsList) ...@@ -74,7 +74,7 @@ function search($file,$word,&$statsList)
$freq=readInt($file); $freq=readInt($file);
$docInfo[$i]=array("idx"=>$idx,"freq"=>$freq,"rank"=>0.0); $docInfo[$i]=array("idx"=>$idx,"freq"=>$freq,"rank"=>0.0);
$totalFreq+=$freq; $totalFreq+=$freq;
if ($statInfo["full"]) $totalfreq+=$freq; if ($statInfo["full"]) $totalFreq+=$freq;
} }
// read name an url info for the doc // read name an url info for the doc
for ($i=0;$i<$numDocs;$i++) for ($i=0;$i<$numDocs;$i++)
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
" $freq=readInt($file); \n" " $freq=readInt($file); \n"
" $docInfo[$i]=array(\"idx\"=>$idx,\"freq\"=>$freq,\"rank\"=>0.0);\n" " $docInfo[$i]=array(\"idx\"=>$idx,\"freq\"=>$freq,\"rank\"=>0.0);\n"
" $totalFreq+=$freq;\n" " $totalFreq+=$freq;\n"
" if ($statInfo[\"full\"]) $totalfreq+=$freq;\n" " if ($statInfo[\"full\"]) $totalFreq+=$freq;\n"
" }\n" " }\n"
" // read name an url info for the doc\n" " // read name an url info for the doc\n"
" for ($i=0;$i<$numDocs;$i++)\n" " for ($i=0;$i<$numDocs;$i++)\n"
......
...@@ -69,9 +69,9 @@ void SearchIndex::setCurrentDoc(const char *name,const char *url) ...@@ -69,9 +69,9 @@ void SearchIndex::setCurrentDoc(const char *name,const char *url)
static int charsToIndex(const char *word) static int charsToIndex(const char *word)
{ {
if (word==0) return -1; if (word==0) return -1;
int c1=word[0]; uint c1=word[0];
if (c1==0) return -1; if (c1==0) return -1;
int c2=word[1]; uint c2=word[1];
if (c2==0) return -1; if (c2==0) return -1;
return c1*256+c2; return c1*256+c2;
} }
...@@ -82,7 +82,7 @@ void SearchIndex::addWord(const char *word) ...@@ -82,7 +82,7 @@ void SearchIndex::addWord(const char *word)
if (w==0) if (w==0)
{ {
int idx=charsToIndex(word); int idx=charsToIndex(word);
if (idx==-1) return; if (idx<0) return;
w = new IndexWord(word); w = new IndexWord(word);
//printf("addWord(%s) at index %d\n",word,idx); //printf("addWord(%s) at index %d\n",word,idx);
m_index[idx]->append(w); m_index[idx]->append(w);
......
...@@ -15,6 +15,14 @@ ...@@ -15,6 +15,14 @@
* *
*/ */
/*
초기 작업자: ryk
TODO 주석을 보면 11/22/01, doxygen 버전 1.2.11까지 수고해 주신 것 같습니다.
최근 갱신자: Astromaker(http://ngps.net/)
gpgiki(http://www.gpgstudy.com/gpgiki/)
*/
#ifndef TRANSLATOR_KR_H #ifndef TRANSLATOR_KR_H
#define TRANSLATOR_KR_H #define TRANSLATOR_KR_H
...@@ -51,7 +59,8 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -51,7 +59,8 @@ class TranslatorKorean : public TranslatorAdapter_1_3
{ {
// I'm not sure what this should be. // I'm not sure what this should be.
// When I figure it out, I'll update this. // When I figure it out, I'll update this.
return ""; //see http://www.ktug.or.kr/jsboard/read.php?table=operate&no=4422&page=1
return "\\usepackage{hfont}\n";
} }
/*! return the language charset. This will be used for the HTML output */ /*! return the language charset. This will be used for the HTML output */
...@@ -91,7 +100,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -91,7 +100,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
// TODO: This need to be translated. -ryk11/22/01.
return "멤버 변수 문서화"; return "멤버 변수 문서화";
} }
else else
...@@ -164,7 +172,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -164,7 +172,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
} }
else else
{ {
//TODO: This needs to be translated. -ryk11/22/01.
return "복합구조(클래스, 구조체, 공용체)"; return "복합구조(클래스, 구조체, 공용체)";
} }
} }
...@@ -182,7 +189,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -182,7 +189,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
// TODO: This need to be translated. -ryk11/22/01.
return "복합구조(클래스, 구조체, 공용체) 멤버"; return "복합구조(클래스, 구조체, 공용체) 멤버";
} }
else else
...@@ -197,7 +203,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -197,7 +203,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
// TODO: This needs to be translated. -ryk11/22/01.
return "파일 멤버"; return "파일 멤버";
} }
else else
...@@ -236,7 +241,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -236,7 +241,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
// TODO: This needs to be translated. -ryk11/22/01.
return "다음은 간략한 설명을 가진 클래스, " return "다음은 간략한 설명을 가진 클래스, "
"구조체, 공용체, 인터페이스의 목록입니다."; "구조체, 공용체, 인터페이스의 목록입니다.";
} }
...@@ -257,7 +261,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -257,7 +261,6 @@ class TranslatorKorean : public TranslatorAdapter_1_3
} }
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
// TODO: This need to be translated. -ryk11/22/01.
result+="링크 된 클래스 멤버는 "; result+="링크 된 클래스 멤버는 ";
} }
else else
...@@ -841,7 +844,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -841,7 +844,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! Text shown before a multi-line variable/enum initialization */ /*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue() virtual QCString trInitialValue()
{ {
return "초기화기"; return "초기";
} }
/*! Text used the source code in the file index */ /*! Text used the source code in the file index */
virtual QCString trCode() virtual QCString trCode()
...@@ -871,50 +874,50 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -871,50 +874,50 @@ class TranslatorKorean : public TranslatorAdapter_1_3
virtual QCString trNote() virtual QCString trNote()
{ {
return "노트"; // TODO: Need to be translated. -ryk11/22/01. return "노트";
} }
virtual QCString trPublicTypes() virtual QCString trPublicTypes()
{ {
return "public 타입"; // TODO: Need to be translated. -ryk11/22/01. return "public 타입";
} }
virtual QCString trPublicAttribs() virtual QCString trPublicAttribs()
{ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
return "Data 필드"; // TODO: Need to be translated. -ryk11/22/01. return "Data 필드";
} }
else else
{ {
return "public 속성"; // TODO: Need to be translated. -ryk11/22/01. return "public 속성";
} }
} }
virtual QCString trStaticPublicAttribs() virtual QCString trStaticPublicAttribs()
{ {
return "static public 속성"; // TODO: Need to be translated. -ryk11/22/01. return "static public 속성";
} }
virtual QCString trProtectedTypes() virtual QCString trProtectedTypes()
{ {
return "protected 타입"; // TODO: Need to be translated. -ryk11/22/01. return "protected 타입";
} }
virtual QCString trProtectedAttribs() virtual QCString trProtectedAttribs()
{ {
return "protected 속성"; // TODO: Need to be translated. -ryk11/22/01. return "protected 속성";
} }
virtual QCString trStaticProtectedAttribs() virtual QCString trStaticProtectedAttribs()
{ {
return "static protected 속성"; // TODO: Need to be translated. -ryk11/22/01. return "static protected 속성";
} }
virtual QCString trPrivateTypes() virtual QCString trPrivateTypes()
{ {
return "private 타입"; // TODO: Need to be translated. -ryk11/22/01. return "private 타입";
} }
virtual QCString trPrivateAttribs() virtual QCString trPrivateAttribs()
{ {
return "private 속성"; // TODO: Need to be translated. -ryk11/22/01. return "private 속성";
} }
virtual QCString trStaticPrivateAttribs() virtual QCString trStaticPrivateAttribs()
{ {
return "static private 속성"; // TODO: Need to be translated. -ryk11/22/01. return "static private 속성";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -924,12 +927,12 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -924,12 +927,12 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! Used as a marker that is put before a \\todo item */ /*! Used as a marker that is put before a \\todo item */
virtual QCString trTodo() virtual QCString trTodo()
{ {
return "Todo"; // TODO: Need to be translated. -ryk11/22/01. return "Todo";
} }
/*! Used as the header of the todo list */ /*! Used as the header of the todo list */
virtual QCString trTodoList() virtual QCString trTodoList()
{ {
return "Todo 목록"; // TODO: Need to be translated. -ryk11/22/01. return "Todo 목록";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -938,15 +941,15 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -938,15 +941,15 @@ class TranslatorKorean : public TranslatorAdapter_1_3
virtual QCString trReferencedBy() virtual QCString trReferencedBy()
{ {
return "참조하는 곳"; // TODO: Need to be translated. -ryk11/22/01. return "참조하는 곳";
} }
virtual QCString trRemarks() virtual QCString trRemarks()
{ {
return "설명"; // TODO: Need to be translated. -ryk11/22/01. return "설명";
} }
virtual QCString trAttention() virtual QCString trAttention()
{ {
return "주의"; // TODO: Need to be translated. -ryk11/22/01. return "주의";
} }
virtual QCString trInclByDepGraph() virtual QCString trInclByDepGraph()
{ {
...@@ -966,7 +969,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -966,7 +969,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! title of the graph legend page */ /*! title of the graph legend page */
virtual QCString trLegendTitle() virtual QCString trLegendTitle()
{ {
return "그래프 설명"; // TODO: Need to be translated. -ryk11/22/01. return "범례";
} }
/*! page explaining how the dot graph's should be interpreted /*! page explaining how the dot graph's should be interpreted
* The %A in the text below are to prevent link to classes called "A". * The %A in the text below are to prevent link to classes called "A".
...@@ -1013,7 +1016,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -1013,7 +1016,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3
//"is set to 240 this will result in the following graph:" //"is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n" "<p>\n"
"박스에는 다음을 뜻한다.\n" "상자들은 다음을 뜻한다.\n"
//"The boxes in the above graph have the following meaning:\n" //"The boxes in the above graph have the following meaning:\n"
"<ul>\n" "<ul>\n"
"<li>%검은 상자는 그래프를 산출한 구조체나 클래스를 말한다.\n" "<li>%검은 상자는 그래프를 산출한 구조체나 클래스를 말한다.\n"
...@@ -1054,7 +1057,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -1054,7 +1057,7 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! text for the link to the legend page */ /*! text for the link to the legend page */
virtual QCString trLegend() virtual QCString trLegend()
{ {
return "설명"; // TODO: Need to be translated. -ryk11/22/01. return "범례";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1064,12 +1067,12 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -1064,12 +1067,12 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! Used as a marker that is put before a test item */ /*! Used as a marker that is put before a test item */
virtual QCString trTest() virtual QCString trTest()
{ {
return "테스트"; // TODO: Need to be translated. -ryk11/22/01. return "테스트";
} }
/*! Used as the header of the test list */ /*! Used as the header of the test list */
virtual QCString trTestList() virtual QCString trTestList()
{ {
return "테스트 목록"; // TODO: Need to be translated. -ryk11/22/01. return "테스트 목록";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1397,35 +1400,35 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -1397,35 +1400,35 @@ class TranslatorKorean : public TranslatorAdapter_1_3
*/ */
virtual QCString trPackageTypes() virtual QCString trPackageTypes()
{ {
return "패키지 타입"; return "패키지 타입들"; //"Package Types";
} }
/*! Used as a heading for a list of Java class functions with package /*! Used as a heading for a list of Java class functions with package
* scope. * scope.
*/ */
virtual QCString trPackageMembers() virtual QCString trPackageMembers()
{ {
return "패키지 함수"; return "패키지 함수들"; //"Package Functions";
} }
/*! Used as a heading for a list of static Java class functions with /*! Used as a heading for a list of static Java class functions with
* package scope. * package scope.
*/ */
virtual QCString trStaticPackageMembers() virtual QCString trStaticPackageMembers()
{ {
return "정적 패키지 함수"; return "정적 패키지 함수들"; //"Static Package Functions";
} }
/*! Used as a heading for a list of Java class variables with package /*! Used as a heading for a list of Java class variables with package
* scope. * scope.
*/ */
virtual QCString trPackageAttribs() virtual QCString trPackageAttribs()
{ {
return "패키지 속성"; return "패키지 속성들"; //"Package Attributes";
} }
/*! Used as a heading for a list of static Java class variables with /*! Used as a heading for a list of static Java class variables with
* package scope. * package scope.
*/ */
virtual QCString trStaticPackageAttribs() virtual QCString trStaticPackageAttribs()
{ {
return "정적 패키지 속성"; return "정적 패키지 속성들"; //"Static Package Attributes";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1442,9 +1445,63 @@ class TranslatorKorean : public TranslatorAdapter_1_3 ...@@ -1442,9 +1445,63 @@ class TranslatorKorean : public TranslatorAdapter_1_3
/*! Put in front of the call graph for a function. */ /*! Put in front of the call graph for a function. */
virtual QCString trCallGraph() virtual QCString trCallGraph()
{ {
return "이 함수의 호출상태를 나타낸 그래프입니다."; return "다음은 이 함수에 대한 호출 그래프입니다:";
//"Here is the call graph for this function:";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////
/*! When the search engine is enabled this text is put in the header
* of each page before the field where one can enter the text to search
* for.
*/
virtual QCString trSearchForIndex()
{
return "검색: "; //"Search for";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
return "검색 결과";//"Search Results";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
* Inside the text you can put the special marker $num to insert
* the number representing the actual number of search results.
* The @a numDocuments parameter can be either 0, 1 or 2, where the
* value 2 represents 2 or more matches. HTML markup is allowed inside
* the returned string.
*/
virtual QCString trSearchResults(int numDocuments)
{
if (numDocuments==0)
{
//return "Sorry, no documents matching your query.";
return "죄송합니다. 질의와 일치하는 문서가 없습니다.";
}
else if (numDocuments==1)
{
//return "Found <b>1</b> document matching your query.";
return "질의와 일치하는 <b>1</b>개의 문서를 찾았습니다.";
}
else
{
//return "Found <b>$num</b> documents matching your query. "
// "Showing best matches first.";
return "질의와 일치하는 <b>$num</b>개의 문서들을 찾았습니다. "
"처음에 나오는 것이 가장 일치하는 문서입니다.";
}
}
/*! This string is put before the list of matched words, for each search
* result. What follows is the list of words that matched the query.
*/
virtual QCString trSearchMatches()
{
return "Matches:";
}
}; };
#endif #endif
...@@ -88,24 +88,6 @@ inline void writeXMLCodeString(QTextStream &t,const char *s) ...@@ -88,24 +88,6 @@ inline void writeXMLCodeString(QTextStream &t,const char *s)
static void writeXMLHeader(QTextStream &t) static void writeXMLHeader(QTextStream &t)
{ {
//QCString dtdName = Config_getString("XML_DTD");
//QCString schemaName = Config_getString("XML_SCHEMA");
//t << "<?xml version='1.0' encoding='" << theTranslator->idLanguageCharset()
// << "' standalone='";
//if (dtdName.isEmpty() && schemaName.isEmpty()) t << "yes"; else t << "no";
//t << "'?>" << endl;
//if (!dtdName.isEmpty())
//{
// t << "<!DOCTYPE doxygen SYSTEM \"doxygen.dtd\">" << endl;
//}
//t << "<doxygen ";
//if (!schemaName.isEmpty())
//{
// t << "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
// t << "xsi:noNamespaceSchemaLocation=\"doxygen.xsd\" ";
//}
//t << "version=\"" << versionString << "\">" << endl;
t << "<?xml version='1.0' encoding='" << theTranslator->idLanguageCharset() t << "<?xml version='1.0' encoding='" << theTranslator->idLanguageCharset()
<< "' standalone='no'?>" << endl;; << "' standalone='no'?>" << endl;;
t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "; t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
...@@ -113,6 +95,38 @@ static void writeXMLHeader(QTextStream &t) ...@@ -113,6 +95,38 @@ static void writeXMLHeader(QTextStream &t)
t << "version=\"" << versionString << "\">" << endl; t << "version=\"" << versionString << "\">" << endl;
} }
static void writeCombineScript()
{
QCString outputDirectory = Config_getString("XML_OUTPUT");
QCString fileName=outputDirectory+"/combine.xslt";
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
QTextStream t(&f);
t.setEncoding(QTextStream::Latin1);
t <<
"<!-- XSLT script to combine the generated output into a single file. \n"
" If you have xsltproc you could use:\n"
" xsltproc combine.xslt index.xml >all.xml\n"
"-->\n"
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
" <xsl:output method=\"xml\" version=\"1.0\" indent=\"yes\" standalone=\"yes\" />\n"
" <xsl:template match=\"/\">\n"
" <doxygen version=\"{doxygenindex/@version}\">\n"
" <!-- Load all doxgen generated xml files -->\n"
" <xsl:for-each select=\"doxygenindex/compound\">\n"
" <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
" </xsl:for-each>\n"
" </doxygen>\n"
" </xsl:template>\n"
"</xsl:stylesheet>\n";
}
void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId, void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId,
const char *anchorId,const char *text) const char *anchorId,const char *text)
{ {
...@@ -1569,6 +1583,8 @@ void generateXML() ...@@ -1569,6 +1583,8 @@ void generateXML()
//t << " </compoundlist>" << endl; //t << " </compoundlist>" << endl;
t << "</doxygenindex>" << endl; t << "</doxygenindex>" << endl;
writeCombineScript();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment