diff --git a/build/premake5.lua b/build/premake5.lua index b6ffdc3e..1ed5356a 100644 --- a/build/premake5.lua +++ b/build/premake5.lua @@ -20,7 +20,7 @@ project "xlnt.test" "$(cxxtest_prefix)" } files { - "../tests/*.h", + "../tests/*.hpp", "../tests/runner-autogen.cpp" } links { @@ -29,7 +29,6 @@ project "xlnt.test" "zlib" } prebuildcommands { "cxxtestgen --runner=ErrorPrinter -o ../../tests/runner-autogen.cpp ../../tests/*.hpp" } - postbuildcommands { "../../bin/xlnt.test" } flags { "Unicode", "NoEditAndContinue", @@ -44,7 +43,9 @@ project "xlnt.test" configuration "windows" defines { "WIN32" } links { "Shlwapi" } + postbuildcommands { "..\\..\\bin\\xlnt.test" } configuration "not windows" + postbuildcommands { "../../bin/xlnt.test" } buildoptions { "-std=c++11", "-Wno-unknown-pragmas" @@ -69,8 +70,8 @@ project "xlnt" } files { "../source/**.cpp", - "../source/**.h", - "../include/xlnt/**.h" + "../source/**.hpp", + "../include/xlnt/**.hpp" } flags { "Unicode", @@ -81,7 +82,10 @@ project "xlnt" configuration "Debug" flags { "FatalWarnings" } configuration "windows" - defines { "WIN32" } + defines { + "WIN32", + "_CRT_SECURE_NO_WARNINGS" + } configuration "not windows" buildoptions { "-std=c++11", diff --git a/include/xlnt/cell/cell.hpp b/include/xlnt/cell/cell.hpp index 4107ab16..f00955b5 100644 --- a/include/xlnt/cell/cell.hpp +++ b/include/xlnt/cell/cell.hpp @@ -33,6 +33,7 @@ namespace xlnt { class cell_reference; +class relationship; class worksheet; struct date; @@ -56,15 +57,15 @@ typedef std::string comment; /// class cell { -public: +public: enum class type { null, - numeric, - string, - formula, - boolean, - error + numeric, + string, + formula, + boolean, + error }; static const std::unordered_map ErrorCodes; @@ -94,8 +95,9 @@ public: bool is_merged() const; void set_merged(bool merged); - std::string get_hyperlink() const; + relationship get_hyperlink() const; void set_hyperlink(const std::string &value); + bool has_hyperlink() const; void set_number_format(const std::string &format_code); @@ -128,6 +130,7 @@ public: cell &operator=(int value); cell &operator=(double value); cell &operator=(long int value); + cell &operator=(long long value); cell &operator=(long double value); cell &operator=(const std::string &value); cell &operator=(const char *value); diff --git a/include/xlnt/common/relationship.hpp b/include/xlnt/common/relationship.hpp index ccf323da..9d498b02 100644 --- a/include/xlnt/common/relationship.hpp +++ b/include/xlnt/common/relationship.hpp @@ -48,6 +48,7 @@ enum class target_mode class relationship { public: + relationship(); relationship(const std::string &type, const std::string &r_id = "", const std::string &target_uri = ""); /// diff --git a/include/xlnt/workbook/workbook.hpp b/include/xlnt/workbook/workbook.hpp index 4f7b9cd1..16522c82 100644 --- a/include/xlnt/workbook/workbook.hpp +++ b/include/xlnt/workbook/workbook.hpp @@ -88,12 +88,14 @@ public: int get_index(worksheet worksheet); worksheet operator[](const std::string &name); - worksheet operator[](int index); + worksheet operator[](std::size_t index); class iterator { public: iterator(workbook &wb, std::size_t index); + iterator(const iterator &); + iterator &operator=(const iterator &); worksheet operator*(); bool operator==(const iterator &comparand) const; bool operator!=(const iterator &comparand) const { return !(*this == comparand); } @@ -112,6 +114,8 @@ public: { public: const_iterator(const workbook &wb, std::size_t index); + const_iterator(const const_iterator &); + const_iterator &operator=(const const_iterator &); const worksheet operator*(); bool operator==(const const_iterator &comparand) const; bool operator!=(const const_iterator &comparand) const { return !(*this == comparand); } @@ -150,6 +154,7 @@ public: private: friend class worksheet; + bool get_already_saved() const; detail::workbook_impl *d_; }; diff --git a/include/xlnt/worksheet/worksheet.hpp b/include/xlnt/worksheet/worksheet.hpp index 52d3bccb..7c4f2e6d 100644 --- a/include/xlnt/worksheet/worksheet.hpp +++ b/include/xlnt/worksheet/worksheet.hpp @@ -49,9 +49,9 @@ struct worksheet_impl; class row_properties { public: - void set_height(int height) { this->height = height; } + void set_height(double height) { this->height = height; } int row_index; - int height; + double height; bool visible; int outline_level; bool collapsed; @@ -183,6 +183,7 @@ public: const range get_range(const range_reference &reference) const; row_properties &get_row_properties(row_t row); const row_properties &get_row_properties(row_t row) const; + bool has_row_properties(row_t row) const; range rows() const; range columns() const; std::list get_cell_collection(); diff --git a/include/xlnt/writer/style_writer.hpp b/include/xlnt/writer/style_writer.hpp index 7da3df7c..98419796 100644 --- a/include/xlnt/writer/style_writer.hpp +++ b/include/xlnt/writer/style_writer.hpp @@ -37,6 +37,8 @@ class style_writer { public: style_writer(workbook &wb); + style_writer(const style_writer &); + style_writer &operator=(const style_writer &); std::unordered_map get_style_by_hash() const; std::string write_table() const; diff --git a/include/xlnt/writer/writer.hpp b/include/xlnt/writer/writer.hpp index 0902803c..bcd5ee8d 100644 --- a/include/xlnt/writer/writer.hpp +++ b/include/xlnt/writer/writer.hpp @@ -42,7 +42,7 @@ public: static std::string write_content_types(const std::pair, std::unordered_map> &content_types); static std::string write_relationships(const std::vector>> &relationships); static std::string write_workbook_rels(const workbook &wb); - static std::string write_worksheet_rels(worksheet ws, int n); + static std::string write_worksheet_rels(worksheet ws, int drawing_id, int comments_id); static std::string write_string_table(const std::vector &string_table); }; diff --git a/source/cell.cpp b/source/cell.cpp index 05db5a67..f51f6312 100644 --- a/source/cell.cpp +++ b/source/cell.cpp @@ -52,7 +52,7 @@ std::string cell::get_value() const case type::string: return d_->string_value; case type::numeric: - return std::floor(d_->numeric_value) == d_->numeric_value ? std::to_string((int)d_->numeric_value) : std::to_string(d_->numeric_value); + return std::floor(d_->numeric_value) == d_->numeric_value ? std::to_string((long long)d_->numeric_value) : std::to_string(d_->numeric_value); case type::formula: return d_->string_value; case type::error: @@ -247,7 +247,7 @@ bool cell::operator==(double comparand) const bool cell::operator==(const std::string &comparand) const { - if(d_->type_ == type::string) + if(d_->type_ == type::string || d_->type_ == type::formula) { return d_->string_value == comparand; } @@ -357,6 +357,14 @@ cell &cell::operator=(long int value) return *this; } +cell &cell::operator=(long long value) +{ + d_->is_date_ = false; + d_->type_ = type::numeric; + d_->numeric_value = (long double)value; + return *this; +} + cell &cell::operator=(long double value) { d_->is_date_ = false; @@ -446,44 +454,62 @@ std::string cell::to_string() const return "parent_).get_title() + "." + get_reference().to_string() + ">"; } - std::string cell::get_hyperlink() const - { - return ""; - } +relationship cell::get_hyperlink() const +{ + if(!d_->has_hyperlink_) + { + throw std::runtime_error("no hyperlink set"); + } - void cell::set_hyperlink(const std::string &hyperlink) - { + return d_->hyperlink_; +} + +bool cell::has_hyperlink() const +{ + return d_->has_hyperlink_; +} + +void cell::set_hyperlink(const std::string &hyperlink) +{ if(hyperlink.length() == 0 || std::find(hyperlink.begin(), hyperlink.end(), ':') == hyperlink.end()) - { - throw data_type_exception(); - } - d_->hyperlink_ = hyperlink; - *this = hyperlink; - } + { + throw data_type_exception(); + } - void cell::set_null() - { + d_->has_hyperlink_ = true; + d_->hyperlink_ = worksheet(d_->parent_).create_relationship("hyperlink", hyperlink); + + if(d_->type_ == type::null) + { + *this = hyperlink; + } +} + +void cell::set_null() +{ d_->type_ = type::null; - } +} - void cell::set_formula(const std::string &formula) - { +void cell::set_formula(const std::string &formula) +{ if(formula.length() == 0 || formula[0] != '=') - { - throw data_type_exception(); - } + { + throw data_type_exception(); + } + d_->type_ = type::formula; d_->string_value = formula; - } +} - void cell::set_error(const std::string &error) - { +void cell::set_error(const std::string &error) +{ if(error.length() == 0 || error[0] != '#') - { - throw data_type_exception(); - } + { + throw data_type_exception(); + } + d_->type_ = type::error; d_->string_value = error; - } +} } // namespace xlnt diff --git a/source/datetime.cpp b/source/datetime.cpp index f4a04333..2c595321 100644 --- a/source/datetime.cpp +++ b/source/datetime.cpp @@ -8,7 +8,7 @@ namespace xlnt { time::time(long double raw_time) : hour(0), minute(0), second(0), microsecond(0) { double integer_part; - double fractional_part = std::modf(raw_time, &integer_part); + double fractional_part = std::modf((double)raw_time, &integer_part); fractional_part *= 24; hour = (int)fractional_part; fractional_part = 60 * (fractional_part - hour); diff --git a/source/detail/cell_impl.cpp b/source/detail/cell_impl.cpp index c6e7fe87..b0c3642a 100644 --- a/source/detail/cell_impl.cpp +++ b/source/detail/cell_impl.cpp @@ -4,11 +4,11 @@ namespace xlnt { namespace detail { -cell_impl::cell_impl() : parent_(nullptr), type_(cell::type::null), column(0), row(0), style_(nullptr) +cell_impl::cell_impl() : parent_(nullptr), type_(cell::type::null), column(0), row(0), style_(nullptr), merged(false) { } -cell_impl::cell_impl(worksheet_impl *parent, int column_index, int row_index) : parent_(parent), type_(cell::type::null), column(column_index), row(row_index), style_(nullptr) +cell_impl::cell_impl(worksheet_impl *parent, int column_index, int row_index) : parent_(parent), type_(cell::type::null), column(column_index), row(row_index), style_(nullptr), merged(false) { } diff --git a/source/detail/cell_impl.hpp b/source/detail/cell_impl.hpp index a4bb64ea..c2b9d786 100644 --- a/source/detail/cell_impl.hpp +++ b/source/detail/cell_impl.hpp @@ -21,7 +21,8 @@ struct cell_impl cell::type type_; long double numeric_value; std::string string_value; - std::string hyperlink_; + bool has_hyperlink_; + relationship hyperlink_; column_t column; row_t row; bool merged; diff --git a/source/detail/workbook_impl.hpp b/source/detail/workbook_impl.hpp index f38aea84..56da4a5f 100644 --- a/source/detail/workbook_impl.hpp +++ b/source/detail/workbook_impl.hpp @@ -8,6 +8,7 @@ namespace detail { struct workbook_impl { workbook_impl(optimization o); + bool already_saved_; bool optimized_read_; bool optimized_write_; bool guess_types_; diff --git a/source/exceptions.cpp b/source/exceptions.cpp index e82ba1d0..b98ef87d 100644 --- a/source/exceptions.cpp +++ b/source/exceptions.cpp @@ -32,4 +32,10 @@ cell_coordinates_exception::cell_coordinates_exception(const std::string &coord_ } +workbook_already_saved::workbook_already_saved() +: std::runtime_error("") +{ + +} + } // namespace xlnt diff --git a/source/reader.cpp b/source/reader.cpp index e7041ab8..83ed8a61 100644 --- a/source/reader.cpp +++ b/source/reader.cpp @@ -24,7 +24,7 @@ std::unordered_map> reader::rea std::string id = relationship.attribute("Id").as_string(); std::string type = relationship.attribute("Type").as_string(); std::string target = relationship.attribute("Target").as_string(); - relationships[id] = std::make_pair(type, target); + relationships[id] = std::make_pair(target, type); } return relationships; @@ -59,12 +59,12 @@ std::string reader::determine_document_type(const std::unordered_map> &v) - { return v.second.first == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; }); + { return v.second.second == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; }); std::string type; if(relationship_match != root_relationships.end()) { - std::string office_document_relationship = relationship_match->second.second; + std::string office_document_relationship = relationship_match->second.first; if(office_document_relationship[0] != '/') { diff --git a/source/relationship.cpp b/source/relationship.cpp index c3b7c4fa..3f006362 100644 --- a/source/relationship.cpp +++ b/source/relationship.cpp @@ -11,4 +11,8 @@ relationship::relationship(const std::string &t, const std::string &r_id, const } } +relationship::relationship() : id_(""), source_uri_(""), target_uri_("") +{ +} + } // namespace xlnt diff --git a/source/workbook.cpp b/source/workbook.cpp index 6a104a6d..87e93743 100644 --- a/source/workbook.cpp +++ b/source/workbook.cpp @@ -1,8 +1,11 @@ #include +#include #include #include #include +#include + #include "workbook/workbook.hpp" #include "common/exceptions.hpp" #include "drawing/drawing.hpp" @@ -16,9 +19,29 @@ #include "detail/workbook_impl.hpp" #include "detail/worksheet_impl.hpp" +static std::string CreateTemporaryFilename() +{ +#ifdef _WIN32 + std::array buffer; + DWORD result = GetTempPath(static_cast(buffer.size()), buffer.data()); + if(result > MAX_PATH) + { + throw std::runtime_error("buffer is too small"); + } + if(result == 0) + { + throw std::runtime_error("GetTempPath failed"); + } + std::string directory(buffer.begin(), buffer.begin() + result); + return directory + "xlnt.xlsx"; +#else + return "/tmp/xlsx.xlnt"; +#endif +} + namespace xlnt { namespace detail { -workbook_impl::workbook_impl(optimization o) : optimized_read_(o == optimization::read), optimized_write_(o == optimization::write), active_sheet_index_(0) +workbook_impl::workbook_impl(optimization o) : already_saved_(false), optimized_read_(o == optimization::read), optimized_write_(o == optimization::write), active_sheet_index_(0) { } @@ -42,6 +65,11 @@ workbook::iterator::iterator(workbook &wb, std::size_t index) : wb_(wb), index_( } +workbook::iterator::iterator(const iterator &rhs) : wb_(rhs.wb_), index_(rhs.index_) +{ + +} + worksheet workbook::iterator::operator*() { return wb_[index_]; @@ -70,6 +98,11 @@ workbook::const_iterator::const_iterator(const workbook &wb, std::size_t index) } +workbook::const_iterator::const_iterator(const const_iterator &rhs) : wb_(rhs.wb_), index_(rhs.index_) +{ + +} + const worksheet workbook::const_iterator::operator*() { return wb_.get_sheet_by_index(index_); @@ -121,6 +154,11 @@ worksheet workbook::get_active_sheet() return worksheet(&d_->worksheets_[d_->active_sheet_index_]); } +bool workbook::get_already_saved() const +{ + return d_->already_saved_; +} + bool workbook::has_named_range(const std::string &name) const { for(auto worksheet : *this) @@ -150,7 +188,6 @@ worksheet workbook::create_sheet() d_->worksheets_.emplace_back(this, title); worksheet ws(&d_->worksheets_.back()); - ws.get_cell("A1"); return ws; } @@ -233,14 +270,18 @@ range workbook::get_named_range(const std::string &name) bool workbook::load(const std::vector &data) { - std::ofstream tmp; - tmp.open("/tmp/xlnt.xlsx", std::ios::out); - for(auto c : data) + std::string temp_file = CreateTemporaryFilename(); + + std::ofstream tmp; + tmp.open(temp_file, std::ios::out | std::ios::binary); + for(auto c : data) { - tmp.put(c); + tmp.put(c); } - load("/tmp/xlnt.xlsx"); - return true; + tmp.close(); + load(temp_file); + std::remove(temp_file.c_str()); + return true; } bool workbook::load(const std::string &filename) @@ -279,7 +320,7 @@ bool workbook::load(const std::string &filename) auto relation_id = sheet_node.attribute("r:id").as_string(); auto ws = create_sheet(sheet_node.attribute("name").as_string()); std::string sheet_filename("xl/"); - sheet_filename += workbook_relationships[relation_id].second; + sheet_filename += workbook_relationships[relation_id].first; xlnt::reader::read_worksheet(ws, f.get_file_contents(sheet_filename).c_str(), shared_strings); } @@ -380,7 +421,7 @@ worksheet workbook::operator[](const std::string &name) return get_sheet_by_name(name); } -worksheet workbook::operator[](int index) +worksheet workbook::operator[](std::size_t index) { return worksheet(&d_->worksheets_[index]); } @@ -390,20 +431,38 @@ void workbook::clear() d_->worksheets_.clear(); } +bool workbook::get_optimized_write() const +{ + return d_->optimized_write_; +} + bool workbook::save(std::vector &data) { - save("/tmp/xlnt.xlsx"); - std::ifstream tmp; - tmp.open("/tmp/xlnt.xlsx"); - auto char_data = std::vector((std::istreambuf_iterator(tmp)), - std::istreambuf_iterator()); - data = std::vector(char_data.begin(), char_data.end()); - return true; + auto temp_file = CreateTemporaryFilename(); + save(temp_file); + std::ifstream tmp; + tmp.open(temp_file, std::ios::in | std::ios::binary); + auto char_data = std::vector((std::istreambuf_iterator(tmp)), + std::istreambuf_iterator()); + data = std::vector(char_data.begin(), char_data.end()); + tmp.close(); + std::remove(temp_file.c_str()); + return true; } bool workbook::save(const std::string &filename) { + if(d_->optimized_write_) + { + if(d_->already_saved_) + { + throw workbook_already_saved(); + } + + d_->already_saved_ = true; + } + zip_file f(filename, file_mode::create, file_access::write); std::pair, std::unordered_map> content_types = @@ -426,17 +485,17 @@ bool workbook::save(const std::string &filename) std::vector>> root_rels = { - {"rId3", {"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", "docProps/app.xml"}}, - {"rId2", {"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", "docProps/core.xml"}}, - {"rId1", {"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", "xl/workbook.xml"}} + {"rId3", {"docProps/app.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"}}, + {"rId2", {"docProps/core.xml", "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"}}, + {"rId1", {"xl/workbook.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"}} }; f.set_file_contents("_rels/.rels", writer::write_relationships(root_rels)); std::vector>> workbook_rels = { - {"rId1", {"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", "worksheets/sheet1.xml"}}, - {"rId2", {"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", "styles.xml"}}, - {"rId3", {"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", "theme/theme1.xml"}} + {"rId1", {"worksheets/sheet1.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"}}, + {"rId2", {"styles.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"}}, + {"rId3", {"theme/theme1.xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"}} }; f.set_file_contents("xl/_rels/workbook.xml.rels", writer::write_relationships(workbook_rels)); diff --git a/source/worksheet.cpp b/source/worksheet.cpp index 9e420b32..24a66531 100644 --- a/source/worksheet.cpp +++ b/source/worksheet.cpp @@ -8,6 +8,7 @@ #include "common/relationship.hpp" #include "workbook/workbook.hpp" #include "detail/worksheet_impl.hpp" +#include "common/exceptions.hpp" namespace xlnt { @@ -193,6 +194,11 @@ row_properties &worksheet::get_row_properties(row_t row) return d_->row_properties_[row]; } +bool worksheet::has_row_properties(row_t row) const +{ + return d_->row_properties_.find(row) != d_->row_properties_.end(); +} + range worksheet::get_named_range(const std::string &name) { if(!has_named_range(name)) @@ -341,6 +347,11 @@ void worksheet::unmerge_cells(const range_reference &reference) void worksheet::append(const std::vector &cells) { + if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) + { + throw workbook_already_saved(); + } + int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -358,6 +369,11 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::vector &cells) { + if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) + { + throw workbook_already_saved(); + } + int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -375,6 +391,11 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::vector &cells) { + if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) + { + throw workbook_already_saved(); + } + int row = get_highest_row(); if(d_->cell_map_.size() == 0) @@ -392,6 +413,11 @@ void worksheet::append(const std::vector &cells) void worksheet::append(const std::unordered_map &cells) { + if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) + { + throw workbook_already_saved(); + } + int row = get_highest_row() - 1; if(d_->cell_map_.size() != 0) @@ -407,6 +433,11 @@ void worksheet::append(const std::unordered_map &cells void worksheet::append(const std::unordered_map &cells) { + if(d_->parent_->get_optimized_write() && d_->parent_->get_already_saved()) + { + throw workbook_already_saved(); + } + int row = get_highest_row() - 1; if(d_->cell_map_.size() != 0) diff --git a/source/writer.cpp b/source/writer.cpp index 19655041..f4823f52 100644 --- a/source/writer.cpp +++ b/source/writer.cpp @@ -12,6 +12,7 @@ #include "worksheet/range_reference.hpp" #include "worksheet/worksheet.hpp" #include "workbook/workbook.hpp" +#include "common/relationship.hpp" namespace xlnt { @@ -46,9 +47,25 @@ std::string writer::write_workbook_rels(const workbook &/*wb*/) return write_relationships(rels); } -std::string writer::write_worksheet_rels(worksheet /*ws*/, int) +std::string writer::write_worksheet_rels(worksheet ws, int /*drawing_id*/, int /*comments_id*/) { - return ""; + pugi::xml_document doc; + auto root_node = doc.append_child("Relationships"); + root_node.append_attribute("xmlns").set_value(constants::Namespaces.at("relationships").c_str()); + + for(auto relationship : ws.get_relationships()) + { + auto relationship_node = root_node.append_child("Relationship"); + relationship_node.append_attribute("Id").set_value(relationship.get_id().c_str()); + relationship_node.append_attribute("Type").set_value("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"); + relationship_node.append_attribute("Target").set_value(relationship.get_target_uri().c_str()); + std::string mode = relationship.get_target_mode() == target_mode::external ? "External" : "Internal"; + relationship_node.append_attribute("TargetMode").set_value(mode.c_str()); + } + + std::stringstream ss; + doc.save(ss); + return ss.str(); } @@ -82,7 +99,8 @@ std::string writer::write_workbook(const workbook &wb) workbook_view_node.append_attribute("visibility").set_value("visible"); auto sheets_node = root_node.append_child("sheets"); - + auto defined_names_node = root_node.append_child("definedNames"); + int i = 0; for(auto ws : wb) { @@ -90,11 +108,20 @@ std::string writer::write_workbook(const workbook &wb) sheet_node.append_attribute("name").set_value(ws.get_title().c_str()); sheet_node.append_attribute("r:id").set_value((std::string("rId") + std::to_string(i + 1)).c_str()); sheet_node.append_attribute("sheetId").set_value(std::to_string(i + 1).c_str()); + + if(ws.has_auto_filter()) + { + auto defined_name_node = defined_names_node.append_child("definedName"); + defined_name_node.append_attribute("name").set_value("_xlnm._FilterDatabase"); + defined_name_node.append_attribute("hidden").set_value(1); + defined_name_node.append_attribute("localSheetId").set_value(0); + std::string name = "'" + ws.get_title() + "'!" + range_reference::make_absolute(ws.get_auto_filter()).to_string(); + defined_name_node.text().set(name.c_str()); + } + i++; } - root_node.append_child("definedNames"); - auto calc_pr_node = root_node.append_child("calcPr"); calc_pr_node.append_attribute("calcId").set_value("124519"); calc_pr_node.append_attribute("calcMode").set_value("auto"); @@ -113,6 +140,8 @@ std::string writer::write_worksheet(worksheet ws, const std::vector std::string writer::write_worksheet(worksheet ws, const std::vector &string_table, const std::unordered_map &) { + ws.get_cell("A1"); + pugi::xml_document doc; auto root_node = doc.append_child("worksheet"); root_node.append_attribute("xmlns").set_value(constants::Namespaces.at("spreadsheetml").c_str()); @@ -127,8 +156,54 @@ std::string writer::write_worksheet(worksheet ws, const std::vector auto sheet_view_node = sheet_views_node.append_child("sheetView"); sheet_view_node.append_attribute("workbookViewId").set_value(0); + std::string active_pane = "bottomRight"; + + if(ws.has_frozen_panes()) + { + auto pane_node = sheet_view_node.append_child("pane"); + + if(ws.get_frozen_panes().get_column_index() > 0) + { + pane_node.append_attribute("xSplit").set_value(ws.get_frozen_panes().get_column_index()); + active_pane = "topRight"; + } + + if(ws.get_frozen_panes().get_row_index() > 0) + { + pane_node.append_attribute("ySplit").set_value(ws.get_frozen_panes().get_row_index()); + active_pane = "bottomLeft"; + } + + if(ws.get_frozen_panes().get_row_index() > 0 && ws.get_frozen_panes().get_column_index() > 0) + { + auto top_right_node = sheet_view_node.append_child("selection"); + top_right_node.append_attribute("pane").set_value("topRight"); + auto bottom_left_node = sheet_view_node.append_child("selection"); + bottom_left_node.append_attribute("pane").set_value("bottomLeft"); + active_pane = "bottomRight"; + } + + pane_node.append_attribute("topLeftCell").set_value(ws.get_frozen_panes().to_string().c_str()); + pane_node.append_attribute("activePane").set_value(active_pane.c_str()); + pane_node.append_attribute("state").set_value("frozen"); + } + auto selection_node = sheet_view_node.append_child("selection"); - + if(ws.has_frozen_panes()) + { + if(ws.get_frozen_panes().get_row_index() > 0 && ws.get_frozen_panes().get_column_index() > 0) + { + selection_node.append_attribute("pane").set_value("bottomRight"); + } + else if(ws.get_frozen_panes().get_row_index() > 0) + { + selection_node.append_attribute("pane").set_value("bottomLeft"); + } + else if(ws.get_frozen_panes().get_column_index() > 0) + { + selection_node.append_attribute("pane").set_value("topRight"); + } + } std::string active_cell = "A1"; selection_node.append_attribute("activeCell").set_value(active_cell.c_str()); selection_node.append_attribute("sqref").set_value(active_cell.c_str()); @@ -136,6 +211,8 @@ std::string writer::write_worksheet(worksheet ws, const std::vector auto sheet_format_pr_node = root_node.append_child("sheetFormatPr"); sheet_format_pr_node.append_attribute("baseColWidth").set_value(10); sheet_format_pr_node.append_attribute("defaultRowHeight").set_value(15); + + std::unordered_map hyperlink_references; auto sheet_data_node = root_node.append_child("sheetData"); for(auto row : ws.rows()) @@ -164,12 +241,30 @@ std::string writer::write_worksheet(worksheet ws, const std::vector row_node.append_attribute("r").set_value(row.front().get_row()); row_node.append_attribute("spans").set_value((std::to_string(min) + ":" + std::to_string(max)).c_str()); + if(ws.has_row_properties(row.front().get_row())) + { + row_node.append_attribute("customHeight").set_value(1); + auto height = ws.get_row_properties(row.front().get_row()).height; + if(height == std::floor(height)) + { + row_node.append_attribute("ht").set_value((std::to_string((int)height) + ".0").c_str()); + } + else + { + row_node.append_attribute("ht").set_value(height); + } + } //row_node.append_attribute("x14ac:dyDescent").set_value(0.25); for(auto cell : row) { if(cell.get_data_type() != cell::type::null || cell.is_merged()) { + if(cell.has_hyperlink()) + { + hyperlink_references[cell.get_hyperlink().get_id()] = cell.get_reference().to_string(); + } + auto cell_node = row_node.append_child("c"); cell_node.append_attribute("r").set_value(cell.get_reference().to_string().c_str()); @@ -224,6 +319,12 @@ std::string writer::write_worksheet(worksheet ws, const std::vector } } } + + if(ws.has_auto_filter()) + { + auto auto_filter_node = root_node.append_child("autoFilter"); + auto_filter_node.append_attribute("ref").set_value(ws.get_auto_filter().to_string().c_str()); + } if(!ws.get_merged_ranges().empty()) { @@ -236,6 +337,19 @@ std::string writer::write_worksheet(worksheet ws, const std::vector merge_cell_node.append_attribute("ref").set_value(merged_range.to_string().c_str()); } } + + if(!ws.get_relationships().empty()) + { + auto hyperlinks_node = root_node.append_child("hyperlinks"); + + for(auto relationship : ws.get_relationships()) + { + auto hyperlink_node = hyperlinks_node.append_child("hyperlink"); + hyperlink_node.append_attribute("display").set_value(relationship.get_target_uri().c_str()); + hyperlink_node.append_attribute("ref").set_value(hyperlink_references.at(relationship.get_id()).c_str()); + hyperlink_node.append_attribute("r:id").set_value(relationship.get_id().c_str()); + } + } auto page_margins_node = root_node.append_child("pageMargins"); @@ -426,731 +540,1003 @@ std::string writer::write_theme() struct scheme_element { - std::string name; - std::string sub_element_name; - std::string val; + std::string name; + std::string sub_element_name; + std::string val; }; std::vector scheme_elements = { - {"a:dk1", "a:sysClr", "windowText"} + {"a:dk1", "a:sysClr", "windowText"}, + {"a:lt1", "a:sysClr", "windowText"}, + {"a:dk2", "a:srgbClr", "1F497D"}, + {"a:lt2", "a:srgbClr", "EEECE1"}, + {"a:accent1", "a:srgbClr", "4F81BD"}, + {"a:accent2", "a:srgbClr", "C0504D"}, + {"a:accent3", "a:srgbClr", "9BBB59"}, + {"a:accent4", "a:srgbClr", "8064A2"}, + {"a:accent5", "a:srgbClr", "4BACC6"}, + {"a:accent6", "a:srgbClr", "F79646"}, + {"a:hlink", "a:srgbClr", "0000FF"}, + {"a:folHlink", "a:srgbClr", "800080"}, }; for(auto element : scheme_elements) { - auto element_node = clr_scheme_node.append_child("a:dk1"); - element_node.append_child(element.sub_element_name.c_str()).append_attribute("val").set_value(element.val.c_str()); + auto element_node = clr_scheme_node.append_child(element.name.c_str()); + element_node.append_child(element.sub_element_name.c_str()).append_attribute("val").set_value(element.val.c_str()); + + if(element.name == "a:dk1") + { + element_node.append_attribute("lastClr").set_value("000000"); + } + else if(element.name == "a:lt1") + { + element_node.append_attribute("lastClr").set_value("FFFFFF"); + } } + + struct font_scheme + { + bool typeface; + std::string script; + std::string major; + std::string minor; + }; + + std::vector font_schemes = + { + {true, "a:latin", "Cambria", "Calibri"}, + {true, "a:ea", "", ""}, + {true, "a:cs", "", ""}, + {false, "Jpan", "MS Pゴシック", "MS Pゴシック"}, + {false, "Hang", "맑은 고딕", "맑은 고딕"}, + {false, "Hans", "宋体", "宋体"}, + {false, "Hant", "新細明體", "新細明體"}, + {false, "Arab", "Times New Roman", "Arial"}, + {false, "Hebr", "Times New Roman", "Arial"}, + {false, "Thai", "Tahoma", "Tahoma"}, + {false, "Ethi", "Nyala", "Nyala"}, + {false, "Beng", "Vrinda", "Vrinda"}, + {false, "Gujr", "Shruti", "Shruti"}, + {false, "Khmr", "MoolBoran", "DaunPenh"}, + {false, "Knda", "Tunga", "Tunga"}, + {false, "Guru", "Raavi", "Raavi"}, + {false, "Cans", "Euphemia", "Euphemia"}, + {false, "Cher", "Plantagenet Cherokee", "Plantagenet Cherokee"}, + {false, "Yiii", "Microsoft Yi Baiti", "Microsoft Yi Baiti"}, + {false, "Tibt", "Microsoft Himalaya", "Microsoft Himalaya"}, + {false, "Thaa", "MV Boli", "MV Boli"}, + {false, "Deva", "Mangal", "Mangal"}, + {false, "Telu", "Guatami", "Guatami"}, + {false, "Taml", "Latha", "Latha"}, + {false, "Syrc", "Estrangelo Edessa", "Estrangelo Edessa"}, + {false, "Orya", "Kalinga", "Kalinga"}, + {false, "Mlym", "Kartika", "Kartika"}, + {false, "Laoo", "DokChampa", "DokChampa"}, + {false, "Sinh", "Iskoola Pota", "Iskoola Pota"}, + {false, "Mong", "Mongolian Baiti", "Mongolian Baiti"}, + {false, "Viet", "Times New Roman", "Arial"}, + {false, "Uigh", "Microsoft Uighur", "Microsoft Uighur"} + }; + + auto font_scheme_node = theme_elements_node.append_child("a:fontScheme"); + font_scheme_node.append_attribute("name").set_value("Office"); + + auto major_fonts_node = font_scheme_node.append_child("a:majorFont"); + auto minor_fonts_node = font_scheme_node.append_child("a:minorFont"); + + for(auto scheme : font_schemes) + { + pugi::xml_node major_font_node, minor_font_node; + + if(scheme.typeface) + { + major_font_node = major_fonts_node.append_child(scheme.script.c_str()); + minor_font_node = minor_fonts_node.append_child(scheme.script.c_str()); + } + else + { + major_font_node = major_fonts_node.append_child("a:font"); + major_font_node.append_attribute("script").set_value(scheme.script.c_str()); + minor_font_node = minor_fonts_node.append_child("a:font"); + minor_font_node.append_attribute("typeface").set_value(scheme.script.c_str()); + } + + major_font_node.append_attribute("typeface").set_value(scheme.major.c_str()); + minor_font_node.append_attribute("typeface").set_value(scheme.minor.c_str()); + } + + auto format_scheme_node = theme_elements_node.append_child("a:fmtScheme"); + format_scheme_node.append_attribute("name").set_value("Office"); + + auto fill_style_list_node = format_scheme_node.append_child("a:fillStyleList"); + fill_style_list_node.append_child("a:solidFill").append_child("a:schemeClr").append_attribute("val").set_value("phClr"); + + auto line_style_list_node = format_scheme_node.append_child("a:lnStyleList"); + auto effect_style_list_node = format_scheme_node.append_child("a:effectStyleList"); + auto bg_fill_style_list_node = format_scheme_node.append_child("a:bgFillStyleList"); + + theme_node.append_child("a:objectDefaults"); + theme_node.append_child("a:extraClrSchemeLst"); std::stringstream ss; doc.print(ss); return ss.str(); */ - std::array data = - {{ - 60, 63, 120, 109, 108, 32, 118, 101, 114, 115, - 105, 111, 110, 61, 34, 49, 46, 48, 34, 32, - 101, 110, 99, 111, 100, 105, 110, 103, 61, 34, - 85, 84, 70, 45, 56, 34, 32, 115, 116, 97, - 110, 100, 97, 108, 111, 110, 101, 61, 34, 121, - 101, 115, 34, 63, 62, 10, 60, 97, 58, 116, - 104, 101, 109, 101, 32, 120, 109, 108, 110, 115, - 58, 97, 61, 34, 104, 116, 116, 112, 58, 47, - 47, 115, 99, 104, 101, 109, 97, 115, 46, 111, - 112, 101, 110, 120, 109, 108, 102, 111, 114, 109, - 97, 116, 115, 46, 111, 114, 103, 47, 100, 114, - 97, 119, 105, 110, 103, 109, 108, 47, 50, 48, - 48, 54, 47, 109, 97, 105, 110, 34, 32, 110, - 97, 109, 101, 61, 34, 79, 102, 102, 105, 99, - 101, 32, 84, 104, 101, 109, 101, 34, 62, 60, - 97, 58, 116, 104, 101, 109, 101, 69, 108, 101, - 109, 101, 110, 116, 115, 62, 60, 97, 58, 99, - 108, 114, 83, 99, 104, 101, 109, 101, 32, 110, - 97, 109, 101, 61, 34, 79, 102, 102, 105, 99, - 101, 34, 62, 60, 97, 58, 100, 107, 49, 62, - 60, 97, 58, 115, 121, 115, 67, 108, 114, 32, - 118, 97, 108, 61, 34, 119, 105, 110, 100, 111, - 119, 84, 101, 120, 116, 34, 32, 108, 97, 115, - 116, 67, 108, 114, 61, 34, 48, 48, 48, 48, - 48, 48, 34, 47, 62, 60, 47, 97, 58, 100, - 107, 49, 62, 60, 97, 58, 108, 116, 49, 62, - 60, 97, 58, 115, 121, 115, 67, 108, 114, 32, - 118, 97, 108, 61, 34, 119, 105, 110, 100, 111, - 119, 34, 32, 108, 97, 115, 116, 67, 108, 114, - 61, 34, 70, 70, 70, 70, 70, 70, 34, 47, - 62, 60, 47, 97, 58, 108, 116, 49, 62, 60, - 97, 58, 100, 107, 50, 62, 60, 97, 58, 115, - 114, 103, 98, 67, 108, 114, 32, 118, 97, 108, - 61, 34, 49, 70, 52, 57, 55, 68, 34, 47, - 62, 60, 47, 97, 58, 100, 107, 50, 62, 60, - 97, 58, 108, 116, 50, 62, 60, 97, 58, 115, - 114, 103, 98, 67, 108, 114, 32, 118, 97, 108, - 61, 34, 69, 69, 69, 67, 69, 49, 34, 47, - 62, 60, 47, 97, 58, 108, 116, 50, 62, 60, - 97, 58, 97, 99, 99, 101, 110, 116, 49, 62, - 60, 97, 58, 115, 114, 103, 98, 67, 108, 114, - 32, 118, 97, 108, 61, 34, 52, 70, 56, 49, - 66, 68, 34, 47, 62, 60, 47, 97, 58, 97, - 99, 99, 101, 110, 116, 49, 62, 60, 97, 58, - 97, 99, 99, 101, 110, 116, 50, 62, 60, 97, - 58, 115, 114, 103, 98, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 67, 48, 53, 48, 52, 68, - 34, 47, 62, 60, 47, 97, 58, 97, 99, 99, - 101, 110, 116, 50, 62, 60, 97, 58, 97, 99, - 99, 101, 110, 116, 51, 62, 60, 97, 58, 115, - 114, 103, 98, 67, 108, 114, 32, 118, 97, 108, - 61, 34, 57, 66, 66, 66, 53, 57, 34, 47, - 62, 60, 47, 97, 58, 97, 99, 99, 101, 110, - 116, 51, 62, 60, 97, 58, 97, 99, 99, 101, - 110, 116, 52, 62, 60, 97, 58, 115, 114, 103, - 98, 67, 108, 114, 32, 118, 97, 108, 61, 34, - 56, 48, 54, 52, 65, 50, 34, 47, 62, 60, - 47, 97, 58, 97, 99, 99, 101, 110, 116, 52, - 62, 60, 97, 58, 97, 99, 99, 101, 110, 116, - 53, 62, 60, 97, 58, 115, 114, 103, 98, 67, - 108, 114, 32, 118, 97, 108, 61, 34, 52, 66, - 65, 67, 67, 54, 34, 47, 62, 60, 47, 97, - 58, 97, 99, 99, 101, 110, 116, 53, 62, 60, - 97, 58, 97, 99, 99, 101, 110, 116, 54, 62, - 60, 97, 58, 115, 114, 103, 98, 67, 108, 114, - 32, 118, 97, 108, 61, 34, 70, 55, 57, 54, - 52, 54, 34, 47, 62, 60, 47, 97, 58, 97, - 99, 99, 101, 110, 116, 54, 62, 60, 97, 58, - 104, 108, 105, 110, 107, 62, 60, 97, 58, 115, - 114, 103, 98, 67, 108, 114, 32, 118, 97, 108, - 61, 34, 48, 48, 48, 48, 70, 70, 34, 47, - 62, 60, 47, 97, 58, 104, 108, 105, 110, 107, - 62, 60, 97, 58, 102, 111, 108, 72, 108, 105, - 110, 107, 62, 60, 97, 58, 115, 114, 103, 98, - 67, 108, 114, 32, 118, 97, 108, 61, 34, 56, - 48, 48, 48, 56, 48, 34, 47, 62, 60, 47, - 97, 58, 102, 111, 108, 72, 108, 105, 110, 107, - 62, 60, 47, 97, 58, 99, 108, 114, 83, 99, - 104, 101, 109, 101, 62, 60, 97, 58, 102, 111, - 110, 116, 83, 99, 104, 101, 109, 101, 32, 110, - 97, 109, 101, 61, 34, 79, 102, 102, 105, 99, - 101, 34, 62, 60, 97, 58, 109, 97, 106, 111, - 114, 70, 111, 110, 116, 62, 60, 97, 58, 108, - 97, 116, 105, 110, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 67, 97, 109, 98, 114, - 105, 97, 34, 47, 62, 60, 97, 58, 101, 97, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 34, 47, 62, 60, 97, 58, 99, 115, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 74, - 112, 97, 110, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 239, 188, 173, 239, 188, - 179, 32, 239, 188, 176, 227, 130, 180, 227, 130, - 183, 227, 131, 131, 227, 130, 175, 34, 47, 62, - 60, 97, 58, 102, 111, 110, 116, 32, 115, 99, - 114, 105, 112, 116, 61, 34, 72, 97, 110, 103, - 34, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 235, 167, 145, 236, 157, 128, 32, 234, - 179, 160, 235, 148, 149, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 72, 97, 110, 115, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 229, 174, 139, 228, 189, 147, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 72, 97, 110, 116, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 230, 150, 176, 231, 180, 176, 230, 152, 142, - 233, 171, 148, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 65, 114, 97, 98, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 84, 105, - 109, 101, 115, 32, 78, 101, 119, 32, 82, 111, - 109, 97, 110, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 72, 101, 98, 114, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 84, 105, - 109, 101, 115, 32, 78, 101, 119, 32, 82, 111, - 109, 97, 110, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 84, 104, 97, 105, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 84, 97, - 104, 111, 109, 97, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 69, 116, 104, 105, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 78, - 121, 97, 108, 97, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 66, 101, 110, 103, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 86, - 114, 105, 110, 100, 97, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 71, 117, 106, 114, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 83, 104, 114, 117, 116, 105, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 75, 104, 109, 114, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 111, 111, 108, 66, 111, 114, 97, 110, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 75, - 110, 100, 97, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 84, 117, 110, 103, 97, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 71, - 117, 114, 117, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 82, 97, 97, 118, 105, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 67, - 97, 110, 115, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 69, 117, 112, 104, 101, - 109, 105, 97, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 67, 104, 101, 114, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 80, 108, - 97, 110, 116, 97, 103, 101, 110, 101, 116, 32, - 67, 104, 101, 114, 111, 107, 101, 101, 34, 47, - 62, 60, 97, 58, 102, 111, 110, 116, 32, 115, - 99, 114, 105, 112, 116, 61, 34, 89, 105, 105, - 105, 34, 32, 116, 121, 112, 101, 102, 97, 99, - 101, 61, 34, 77, 105, 99, 114, 111, 115, 111, - 102, 116, 32, 89, 105, 32, 66, 97, 105, 116, - 105, 34, 47, 62, 60, 97, 58, 102, 111, 110, - 116, 32, 115, 99, 114, 105, 112, 116, 61, 34, - 84, 105, 98, 116, 34, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 77, 105, 99, 114, - 111, 115, 111, 102, 116, 32, 72, 105, 109, 97, - 108, 97, 121, 97, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 84, 104, 97, 97, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 77, - 86, 32, 66, 111, 108, 105, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 68, 101, 118, 97, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 97, 110, 103, 97, 108, 34, 47, 62, - 60, 97, 58, 102, 111, 110, 116, 32, 115, 99, - 114, 105, 112, 116, 61, 34, 84, 101, 108, 117, - 34, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 71, 97, 117, 116, 97, 109, 105, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 84, 97, - 109, 108, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 76, 97, 116, 104, 97, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 83, 121, - 114, 99, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 69, 115, 116, 114, 97, 110, - 103, 101, 108, 111, 32, 69, 100, 101, 115, 115, - 97, 34, 47, 62, 60, 97, 58, 102, 111, 110, - 116, 32, 115, 99, 114, 105, 112, 116, 61, 34, - 79, 114, 121, 97, 34, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 75, 97, 108, 105, - 110, 103, 97, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 77, 108, 121, 109, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 75, 97, - 114, 116, 105, 107, 97, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 76, 97, 111, 111, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 68, 111, 107, 67, 104, 97, 109, 112, 97, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 83, 105, - 110, 104, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 73, 115, 107, 111, 111, 108, - 97, 32, 80, 111, 116, 97, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 77, 111, 110, 103, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 111, 110, 103, 111, 108, 105, 97, 110, - 32, 66, 97, 105, 116, 105, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 86, 105, 101, 116, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 84, 105, 109, 101, 115, 32, 78, 101, 119, - 32, 82, 111, 109, 97, 110, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 85, 105, 103, 104, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 105, 99, 114, 111, 115, 111, 102, 116, - 32, 85, 105, 103, 104, 117, 114, 34, 47, 62, - 60, 47, 97, 58, 109, 97, 106, 111, 114, 70, - 111, 110, 116, 62, 60, 97, 58, 109, 105, 110, - 111, 114, 70, 111, 110, 116, 62, 60, 97, 58, - 108, 97, 116, 105, 110, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 67, 97, 108, 105, - 98, 114, 105, 34, 47, 62, 60, 97, 58, 101, - 97, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 34, 47, 62, 60, 97, 58, 99, 115, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 34, 47, 62, 60, 97, 58, 102, 111, 110, - 116, 32, 115, 99, 114, 105, 112, 116, 61, 34, - 74, 112, 97, 110, 34, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 239, 188, 173, 239, - 188, 179, 32, 239, 188, 176, 227, 130, 180, 227, - 130, 183, 227, 131, 131, 227, 130, 175, 34, 47, - 62, 60, 97, 58, 102, 111, 110, 116, 32, 115, - 99, 114, 105, 112, 116, 61, 34, 72, 97, 110, - 103, 34, 32, 116, 121, 112, 101, 102, 97, 99, - 101, 61, 34, 235, 167, 145, 236, 157, 128, 32, - 234, 179, 160, 235, 148, 149, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 72, 97, 110, 115, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 229, 174, 139, 228, 189, 147, 34, 47, 62, - 60, 97, 58, 102, 111, 110, 116, 32, 115, 99, - 114, 105, 112, 116, 61, 34, 72, 97, 110, 116, - 34, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 230, 150, 176, 231, 180, 176, 230, 152, - 142, 233, 171, 148, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 65, 114, 97, 98, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 65, - 114, 105, 97, 108, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 72, 101, 98, 114, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 65, - 114, 105, 97, 108, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 84, 104, 97, 105, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 84, - 97, 104, 111, 109, 97, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 69, 116, 104, 105, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 78, 121, 97, 108, 97, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 66, 101, 110, 103, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 86, 114, 105, 110, 100, 97, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 71, 117, 106, 114, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 83, 104, 114, 117, 116, 105, 34, 47, 62, - 60, 97, 58, 102, 111, 110, 116, 32, 115, 99, - 114, 105, 112, 116, 61, 34, 75, 104, 109, 114, - 34, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 68, 97, 117, 110, 80, 101, 110, 104, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 75, - 110, 100, 97, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 84, 117, 110, 103, 97, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 71, - 117, 114, 117, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 82, 97, 97, 118, 105, - 34, 47, 62, 60, 97, 58, 102, 111, 110, 116, - 32, 115, 99, 114, 105, 112, 116, 61, 34, 67, - 97, 110, 115, 34, 32, 116, 121, 112, 101, 102, - 97, 99, 101, 61, 34, 69, 117, 112, 104, 101, - 109, 105, 97, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 67, 104, 101, 114, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 80, 108, - 97, 110, 116, 97, 103, 101, 110, 101, 116, 32, - 67, 104, 101, 114, 111, 107, 101, 101, 34, 47, - 62, 60, 97, 58, 102, 111, 110, 116, 32, 115, - 99, 114, 105, 112, 116, 61, 34, 89, 105, 105, - 105, 34, 32, 116, 121, 112, 101, 102, 97, 99, - 101, 61, 34, 77, 105, 99, 114, 111, 115, 111, - 102, 116, 32, 89, 105, 32, 66, 97, 105, 116, - 105, 34, 47, 62, 60, 97, 58, 102, 111, 110, - 116, 32, 115, 99, 114, 105, 112, 116, 61, 34, - 84, 105, 98, 116, 34, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 77, 105, 99, 114, - 111, 115, 111, 102, 116, 32, 72, 105, 109, 97, - 108, 97, 121, 97, 34, 47, 62, 60, 97, 58, - 102, 111, 110, 116, 32, 115, 99, 114, 105, 112, - 116, 61, 34, 84, 104, 97, 97, 34, 32, 116, - 121, 112, 101, 102, 97, 99, 101, 61, 34, 77, - 86, 32, 66, 111, 108, 105, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 68, 101, 118, 97, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 97, 110, 103, 97, 108, 34, 47, 62, - 60, 97, 58, 102, 111, 110, 116, 32, 115, 99, - 114, 105, 112, 116, 61, 34, 84, 101, 108, 117, - 34, 32, 116, 121, 112, 101, 102, 97, 99, 101, - 61, 34, 71, 97, 117, 116, 97, 109, 105, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 84, 97, - 109, 108, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 76, 97, 116, 104, 97, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 83, 121, - 114, 99, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 69, 115, 116, 114, 97, 110, - 103, 101, 108, 111, 32, 69, 100, 101, 115, 115, - 97, 34, 47, 62, 60, 97, 58, 102, 111, 110, - 116, 32, 115, 99, 114, 105, 112, 116, 61, 34, - 79, 114, 121, 97, 34, 32, 116, 121, 112, 101, - 102, 97, 99, 101, 61, 34, 75, 97, 108, 105, - 110, 103, 97, 34, 47, 62, 60, 97, 58, 102, - 111, 110, 116, 32, 115, 99, 114, 105, 112, 116, - 61, 34, 77, 108, 121, 109, 34, 32, 116, 121, - 112, 101, 102, 97, 99, 101, 61, 34, 75, 97, - 114, 116, 105, 107, 97, 34, 47, 62, 60, 97, - 58, 102, 111, 110, 116, 32, 115, 99, 114, 105, - 112, 116, 61, 34, 76, 97, 111, 111, 34, 32, - 116, 121, 112, 101, 102, 97, 99, 101, 61, 34, - 68, 111, 107, 67, 104, 97, 109, 112, 97, 34, - 47, 62, 60, 97, 58, 102, 111, 110, 116, 32, - 115, 99, 114, 105, 112, 116, 61, 34, 83, 105, - 110, 104, 34, 32, 116, 121, 112, 101, 102, 97, - 99, 101, 61, 34, 73, 115, 107, 111, 111, 108, - 97, 32, 80, 111, 116, 97, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 77, 111, 110, 103, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 111, 110, 103, 111, 108, 105, 97, 110, - 32, 66, 97, 105, 116, 105, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 86, 105, 101, 116, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 65, 114, 105, 97, 108, 34, 47, 62, 60, - 97, 58, 102, 111, 110, 116, 32, 115, 99, 114, - 105, 112, 116, 61, 34, 85, 105, 103, 104, 34, - 32, 116, 121, 112, 101, 102, 97, 99, 101, 61, - 34, 77, 105, 99, 114, 111, 115, 111, 102, 116, - 32, 85, 105, 103, 104, 117, 114, 34, 47, 62, - 60, 47, 97, 58, 109, 105, 110, 111, 114, 70, - 111, 110, 116, 62, 60, 47, 97, 58, 102, 111, - 110, 116, 83, 99, 104, 101, 109, 101, 62, 60, - 97, 58, 102, 109, 116, 83, 99, 104, 101, 109, - 101, 32, 110, 97, 109, 101, 61, 34, 79, 102, - 102, 105, 99, 101, 34, 62, 60, 97, 58, 102, - 105, 108, 108, 83, 116, 121, 108, 101, 76, 115, - 116, 62, 60, 97, 58, 115, 111, 108, 105, 100, - 70, 105, 108, 108, 62, 60, 97, 58, 115, 99, - 104, 101, 109, 101, 67, 108, 114, 32, 118, 97, - 108, 61, 34, 112, 104, 67, 108, 114, 34, 47, - 62, 60, 47, 97, 58, 115, 111, 108, 105, 100, - 70, 105, 108, 108, 62, 60, 97, 58, 103, 114, - 97, 100, 70, 105, 108, 108, 32, 114, 111, 116, - 87, 105, 116, 104, 83, 104, 97, 112, 101, 61, - 34, 49, 34, 62, 60, 97, 58, 103, 115, 76, - 115, 116, 62, 60, 97, 58, 103, 115, 32, 112, - 111, 115, 61, 34, 48, 34, 62, 60, 97, 58, - 115, 99, 104, 101, 109, 101, 67, 108, 114, 32, - 118, 97, 108, 61, 34, 112, 104, 67, 108, 114, - 34, 62, 60, 97, 58, 116, 105, 110, 116, 32, - 118, 97, 108, 61, 34, 53, 48, 48, 48, 48, - 34, 47, 62, 60, 97, 58, 115, 97, 116, 77, - 111, 100, 32, 118, 97, 108, 61, 34, 51, 48, - 48, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 115, 99, 104, 101, 109, 101, 67, 108, 114, - 62, 60, 47, 97, 58, 103, 115, 62, 60, 97, - 58, 103, 115, 32, 112, 111, 115, 61, 34, 51, - 53, 48, 48, 48, 34, 62, 60, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 112, 104, 67, 108, 114, 34, - 62, 60, 97, 58, 116, 105, 110, 116, 32, 118, - 97, 108, 61, 34, 51, 55, 48, 48, 48, 34, - 47, 62, 60, 97, 58, 115, 97, 116, 77, 111, - 100, 32, 118, 97, 108, 61, 34, 51, 48, 48, - 48, 48, 48, 34, 47, 62, 60, 47, 97, 58, - 115, 99, 104, 101, 109, 101, 67, 108, 114, 62, - 60, 47, 97, 58, 103, 115, 62, 60, 97, 58, - 103, 115, 32, 112, 111, 115, 61, 34, 49, 48, - 48, 48, 48, 48, 34, 62, 60, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 112, 104, 67, 108, 114, 34, - 62, 60, 97, 58, 116, 105, 110, 116, 32, 118, - 97, 108, 61, 34, 49, 53, 48, 48, 48, 34, - 47, 62, 60, 97, 58, 115, 97, 116, 77, 111, - 100, 32, 118, 97, 108, 61, 34, 51, 53, 48, - 48, 48, 48, 34, 47, 62, 60, 47, 97, 58, - 115, 99, 104, 101, 109, 101, 67, 108, 114, 62, - 60, 47, 97, 58, 103, 115, 62, 60, 47, 97, - 58, 103, 115, 76, 115, 116, 62, 60, 97, 58, - 108, 105, 110, 32, 97, 110, 103, 61, 34, 49, - 54, 50, 48, 48, 48, 48, 48, 34, 32, 115, - 99, 97, 108, 101, 100, 61, 34, 49, 34, 47, - 62, 60, 47, 97, 58, 103, 114, 97, 100, 70, - 105, 108, 108, 62, 60, 97, 58, 103, 114, 97, - 100, 70, 105, 108, 108, 32, 114, 111, 116, 87, - 105, 116, 104, 83, 104, 97, 112, 101, 61, 34, - 49, 34, 62, 60, 97, 58, 103, 115, 76, 115, - 116, 62, 60, 97, 58, 103, 115, 32, 112, 111, - 115, 61, 34, 48, 34, 62, 60, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 112, 104, 67, 108, 114, 34, - 62, 60, 97, 58, 115, 104, 97, 100, 101, 32, - 118, 97, 108, 61, 34, 53, 49, 48, 48, 48, - 34, 47, 62, 60, 97, 58, 115, 97, 116, 77, - 111, 100, 32, 118, 97, 108, 61, 34, 49, 51, - 48, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 115, 99, 104, 101, 109, 101, 67, 108, 114, - 62, 60, 47, 97, 58, 103, 115, 62, 60, 97, - 58, 103, 115, 32, 112, 111, 115, 61, 34, 56, - 48, 48, 48, 48, 34, 62, 60, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 112, 104, 67, 108, 114, 34, - 62, 60, 97, 58, 115, 104, 97, 100, 101, 32, - 118, 97, 108, 61, 34, 57, 51, 48, 48, 48, - 34, 47, 62, 60, 97, 58, 115, 97, 116, 77, - 111, 100, 32, 118, 97, 108, 61, 34, 49, 51, - 48, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 115, 99, 104, 101, 109, 101, 67, 108, 114, - 62, 60, 47, 97, 58, 103, 115, 62, 60, 97, - 58, 103, 115, 32, 112, 111, 115, 61, 34, 49, - 48, 48, 48, 48, 48, 34, 62, 60, 97, 58, - 115, 99, 104, 101, 109, 101, 67, 108, 114, 32, - 118, 97, 108, 61, 34, 112, 104, 67, 108, 114, - 34, 62, 60, 97, 58, 115, 104, 97, 100, 101, - 32, 118, 97, 108, 61, 34, 57, 52, 48, 48, - 48, 34, 47, 62, 60, 97, 58, 115, 97, 116, - 77, 111, 100, 32, 118, 97, 108, 61, 34, 49, - 51, 53, 48, 48, 48, 34, 47, 62, 60, 47, - 97, 58, 115, 99, 104, 101, 109, 101, 67, 108, - 114, 62, 60, 47, 97, 58, 103, 115, 62, 60, - 47, 97, 58, 103, 115, 76, 115, 116, 62, 60, - 97, 58, 108, 105, 110, 32, 97, 110, 103, 61, - 34, 49, 54, 50, 48, 48, 48, 48, 48, 34, - 32, 115, 99, 97, 108, 101, 100, 61, 34, 48, - 34, 47, 62, 60, 47, 97, 58, 103, 114, 97, - 100, 70, 105, 108, 108, 62, 60, 47, 97, 58, - 102, 105, 108, 108, 83, 116, 121, 108, 101, 76, - 115, 116, 62, 60, 97, 58, 108, 110, 83, 116, - 121, 108, 101, 76, 115, 116, 62, 60, 97, 58, - 108, 110, 32, 119, 61, 34, 57, 53, 50, 53, - 34, 32, 99, 97, 112, 61, 34, 102, 108, 97, - 116, 34, 32, 99, 109, 112, 100, 61, 34, 115, - 110, 103, 34, 32, 97, 108, 103, 110, 61, 34, - 99, 116, 114, 34, 62, 60, 97, 58, 115, 111, - 108, 105, 100, 70, 105, 108, 108, 62, 60, 97, - 58, 115, 99, 104, 101, 109, 101, 67, 108, 114, - 32, 118, 97, 108, 61, 34, 112, 104, 67, 108, - 114, 34, 62, 60, 97, 58, 115, 104, 97, 100, - 101, 32, 118, 97, 108, 61, 34, 57, 53, 48, - 48, 48, 34, 47, 62, 60, 97, 58, 115, 97, - 116, 77, 111, 100, 32, 118, 97, 108, 61, 34, - 49, 48, 53, 48, 48, 48, 34, 47, 62, 60, - 47, 97, 58, 115, 99, 104, 101, 109, 101, 67, - 108, 114, 62, 60, 47, 97, 58, 115, 111, 108, - 105, 100, 70, 105, 108, 108, 62, 60, 97, 58, - 112, 114, 115, 116, 68, 97, 115, 104, 32, 118, - 97, 108, 61, 34, 115, 111, 108, 105, 100, 34, - 47, 62, 60, 47, 97, 58, 108, 110, 62, 60, - 97, 58, 108, 110, 32, 119, 61, 34, 50, 53, - 52, 48, 48, 34, 32, 99, 97, 112, 61, 34, - 102, 108, 97, 116, 34, 32, 99, 109, 112, 100, - 61, 34, 115, 110, 103, 34, 32, 97, 108, 103, - 110, 61, 34, 99, 116, 114, 34, 62, 60, 97, - 58, 115, 111, 108, 105, 100, 70, 105, 108, 108, - 62, 60, 97, 58, 115, 99, 104, 101, 109, 101, - 67, 108, 114, 32, 118, 97, 108, 61, 34, 112, - 104, 67, 108, 114, 34, 47, 62, 60, 47, 97, - 58, 115, 111, 108, 105, 100, 70, 105, 108, 108, - 62, 60, 97, 58, 112, 114, 115, 116, 68, 97, - 115, 104, 32, 118, 97, 108, 61, 34, 115, 111, - 108, 105, 100, 34, 47, 62, 60, 47, 97, 58, - 108, 110, 62, 60, 97, 58, 108, 110, 32, 119, - 61, 34, 51, 56, 49, 48, 48, 34, 32, 99, - 97, 112, 61, 34, 102, 108, 97, 116, 34, 32, - 99, 109, 112, 100, 61, 34, 115, 110, 103, 34, - 32, 97, 108, 103, 110, 61, 34, 99, 116, 114, - 34, 62, 60, 97, 58, 115, 111, 108, 105, 100, - 70, 105, 108, 108, 62, 60, 97, 58, 115, 99, - 104, 101, 109, 101, 67, 108, 114, 32, 118, 97, - 108, 61, 34, 112, 104, 67, 108, 114, 34, 47, - 62, 60, 47, 97, 58, 115, 111, 108, 105, 100, - 70, 105, 108, 108, 62, 60, 97, 58, 112, 114, - 115, 116, 68, 97, 115, 104, 32, 118, 97, 108, - 61, 34, 115, 111, 108, 105, 100, 34, 47, 62, - 60, 47, 97, 58, 108, 110, 62, 60, 47, 97, - 58, 108, 110, 83, 116, 121, 108, 101, 76, 115, - 116, 62, 60, 97, 58, 101, 102, 102, 101, 99, - 116, 83, 116, 121, 108, 101, 76, 115, 116, 62, - 60, 97, 58, 101, 102, 102, 101, 99, 116, 83, - 116, 121, 108, 101, 62, 60, 97, 58, 101, 102, - 102, 101, 99, 116, 76, 115, 116, 62, 60, 97, - 58, 111, 117, 116, 101, 114, 83, 104, 100, 119, - 32, 98, 108, 117, 114, 82, 97, 100, 61, 34, - 52, 48, 48, 48, 48, 34, 32, 100, 105, 115, - 116, 61, 34, 50, 48, 48, 48, 48, 34, 32, - 100, 105, 114, 61, 34, 53, 52, 48, 48, 48, - 48, 48, 34, 32, 114, 111, 116, 87, 105, 116, - 104, 83, 104, 97, 112, 101, 61, 34, 48, 34, - 62, 60, 97, 58, 115, 114, 103, 98, 67, 108, - 114, 32, 118, 97, 108, 61, 34, 48, 48, 48, - 48, 48, 48, 34, 62, 60, 97, 58, 97, 108, - 112, 104, 97, 32, 118, 97, 108, 61, 34, 51, - 56, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 115, 114, 103, 98, 67, 108, 114, 62, 60, - 47, 97, 58, 111, 117, 116, 101, 114, 83, 104, - 100, 119, 62, 60, 47, 97, 58, 101, 102, 102, - 101, 99, 116, 76, 115, 116, 62, 60, 47, 97, - 58, 101, 102, 102, 101, 99, 116, 83, 116, 121, - 108, 101, 62, 60, 97, 58, 101, 102, 102, 101, - 99, 116, 83, 116, 121, 108, 101, 62, 60, 97, - 58, 101, 102, 102, 101, 99, 116, 76, 115, 116, - 62, 60, 97, 58, 111, 117, 116, 101, 114, 83, - 104, 100, 119, 32, 98, 108, 117, 114, 82, 97, - 100, 61, 34, 52, 48, 48, 48, 48, 34, 32, - 100, 105, 115, 116, 61, 34, 50, 51, 48, 48, - 48, 34, 32, 100, 105, 114, 61, 34, 53, 52, - 48, 48, 48, 48, 48, 34, 32, 114, 111, 116, - 87, 105, 116, 104, 83, 104, 97, 112, 101, 61, - 34, 48, 34, 62, 60, 97, 58, 115, 114, 103, - 98, 67, 108, 114, 32, 118, 97, 108, 61, 34, - 48, 48, 48, 48, 48, 48, 34, 62, 60, 97, - 58, 97, 108, 112, 104, 97, 32, 118, 97, 108, - 61, 34, 51, 53, 48, 48, 48, 34, 47, 62, - 60, 47, 97, 58, 115, 114, 103, 98, 67, 108, - 114, 62, 60, 47, 97, 58, 111, 117, 116, 101, - 114, 83, 104, 100, 119, 62, 60, 47, 97, 58, - 101, 102, 102, 101, 99, 116, 76, 115, 116, 62, - 60, 47, 97, 58, 101, 102, 102, 101, 99, 116, - 83, 116, 121, 108, 101, 62, 60, 97, 58, 101, - 102, 102, 101, 99, 116, 83, 116, 121, 108, 101, - 62, 60, 97, 58, 101, 102, 102, 101, 99, 116, - 76, 115, 116, 62, 60, 97, 58, 111, 117, 116, - 101, 114, 83, 104, 100, 119, 32, 98, 108, 117, - 114, 82, 97, 100, 61, 34, 52, 48, 48, 48, - 48, 34, 32, 100, 105, 115, 116, 61, 34, 50, - 51, 48, 48, 48, 34, 32, 100, 105, 114, 61, - 34, 53, 52, 48, 48, 48, 48, 48, 34, 32, - 114, 111, 116, 87, 105, 116, 104, 83, 104, 97, - 112, 101, 61, 34, 48, 34, 62, 60, 97, 58, - 115, 114, 103, 98, 67, 108, 114, 32, 118, 97, - 108, 61, 34, 48, 48, 48, 48, 48, 48, 34, - 62, 60, 97, 58, 97, 108, 112, 104, 97, 32, - 118, 97, 108, 61, 34, 51, 53, 48, 48, 48, - 34, 47, 62, 60, 47, 97, 58, 115, 114, 103, - 98, 67, 108, 114, 62, 60, 47, 97, 58, 111, - 117, 116, 101, 114, 83, 104, 100, 119, 62, 60, - 47, 97, 58, 101, 102, 102, 101, 99, 116, 76, - 115, 116, 62, 60, 97, 58, 115, 99, 101, 110, - 101, 51, 100, 62, 60, 97, 58, 99, 97, 109, - 101, 114, 97, 32, 112, 114, 115, 116, 61, 34, - 111, 114, 116, 104, 111, 103, 114, 97, 112, 104, - 105, 99, 70, 114, 111, 110, 116, 34, 62, 60, - 97, 58, 114, 111, 116, 32, 108, 97, 116, 61, - 34, 48, 34, 32, 108, 111, 110, 61, 34, 48, - 34, 32, 114, 101, 118, 61, 34, 48, 34, 47, - 62, 60, 47, 97, 58, 99, 97, 109, 101, 114, - 97, 62, 60, 97, 58, 108, 105, 103, 104, 116, - 82, 105, 103, 32, 114, 105, 103, 61, 34, 116, - 104, 114, 101, 101, 80, 116, 34, 32, 100, 105, - 114, 61, 34, 116, 34, 62, 60, 97, 58, 114, - 111, 116, 32, 108, 97, 116, 61, 34, 48, 34, - 32, 108, 111, 110, 61, 34, 48, 34, 32, 114, - 101, 118, 61, 34, 49, 50, 48, 48, 48, 48, - 48, 34, 47, 62, 60, 47, 97, 58, 108, 105, - 103, 104, 116, 82, 105, 103, 62, 60, 47, 97, - 58, 115, 99, 101, 110, 101, 51, 100, 62, 60, - 97, 58, 115, 112, 51, 100, 62, 60, 97, 58, - 98, 101, 118, 101, 108, 84, 32, 119, 61, 34, - 54, 51, 53, 48, 48, 34, 32, 104, 61, 34, - 50, 53, 52, 48, 48, 34, 47, 62, 60, 47, - 97, 58, 115, 112, 51, 100, 62, 60, 47, 97, - 58, 101, 102, 102, 101, 99, 116, 83, 116, 121, - 108, 101, 62, 60, 47, 97, 58, 101, 102, 102, - 101, 99, 116, 83, 116, 121, 108, 101, 76, 115, - 116, 62, 60, 97, 58, 98, 103, 70, 105, 108, - 108, 83, 116, 121, 108, 101, 76, 115, 116, 62, - 60, 97, 58, 115, 111, 108, 105, 100, 70, 105, - 108, 108, 62, 60, 97, 58, 115, 99, 104, 101, - 109, 101, 67, 108, 114, 32, 118, 97, 108, 61, - 34, 112, 104, 67, 108, 114, 34, 47, 62, 60, - 47, 97, 58, 115, 111, 108, 105, 100, 70, 105, - 108, 108, 62, 60, 97, 58, 103, 114, 97, 100, - 70, 105, 108, 108, 32, 114, 111, 116, 87, 105, - 116, 104, 83, 104, 97, 112, 101, 61, 34, 49, - 34, 62, 60, 97, 58, 103, 115, 76, 115, 116, - 62, 60, 97, 58, 103, 115, 32, 112, 111, 115, - 61, 34, 48, 34, 62, 60, 97, 58, 115, 99, - 104, 101, 109, 101, 67, 108, 114, 32, 118, 97, - 108, 61, 34, 112, 104, 67, 108, 114, 34, 62, - 60, 97, 58, 116, 105, 110, 116, 32, 118, 97, - 108, 61, 34, 52, 48, 48, 48, 48, 34, 47, - 62, 60, 97, 58, 115, 97, 116, 77, 111, 100, - 32, 118, 97, 108, 61, 34, 51, 53, 48, 48, - 48, 48, 34, 47, 62, 60, 47, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 62, 60, - 47, 97, 58, 103, 115, 62, 60, 97, 58, 103, - 115, 32, 112, 111, 115, 61, 34, 52, 48, 48, - 48, 48, 34, 62, 60, 97, 58, 115, 99, 104, - 101, 109, 101, 67, 108, 114, 32, 118, 97, 108, - 61, 34, 112, 104, 67, 108, 114, 34, 62, 60, - 97, 58, 116, 105, 110, 116, 32, 118, 97, 108, - 61, 34, 52, 53, 48, 48, 48, 34, 47, 62, - 60, 97, 58, 115, 104, 97, 100, 101, 32, 118, - 97, 108, 61, 34, 57, 57, 48, 48, 48, 34, - 47, 62, 60, 97, 58, 115, 97, 116, 77, 111, - 100, 32, 118, 97, 108, 61, 34, 51, 53, 48, - 48, 48, 48, 34, 47, 62, 60, 47, 97, 58, - 115, 99, 104, 101, 109, 101, 67, 108, 114, 62, - 60, 47, 97, 58, 103, 115, 62, 60, 97, 58, - 103, 115, 32, 112, 111, 115, 61, 34, 49, 48, - 48, 48, 48, 48, 34, 62, 60, 97, 58, 115, - 99, 104, 101, 109, 101, 67, 108, 114, 32, 118, - 97, 108, 61, 34, 112, 104, 67, 108, 114, 34, - 62, 60, 97, 58, 115, 104, 97, 100, 101, 32, - 118, 97, 108, 61, 34, 50, 48, 48, 48, 48, - 34, 47, 62, 60, 97, 58, 115, 97, 116, 77, - 111, 100, 32, 118, 97, 108, 61, 34, 50, 53, - 53, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 115, 99, 104, 101, 109, 101, 67, 108, 114, - 62, 60, 47, 97, 58, 103, 115, 62, 60, 47, - 97, 58, 103, 115, 76, 115, 116, 62, 60, 97, - 58, 112, 97, 116, 104, 32, 112, 97, 116, 104, - 61, 34, 99, 105, 114, 99, 108, 101, 34, 62, - 60, 97, 58, 102, 105, 108, 108, 84, 111, 82, - 101, 99, 116, 32, 108, 61, 34, 53, 48, 48, - 48, 48, 34, 32, 116, 61, 34, 45, 56, 48, - 48, 48, 48, 34, 32, 114, 61, 34, 53, 48, - 48, 48, 48, 34, 32, 98, 61, 34, 49, 56, - 48, 48, 48, 48, 34, 47, 62, 60, 47, 97, - 58, 112, 97, 116, 104, 62, 60, 47, 97, 58, - 103, 114, 97, 100, 70, 105, 108, 108, 62, 60, - 97, 58, 103, 114, 97, 100, 70, 105, 108, 108, - 32, 114, 111, 116, 87, 105, 116, 104, 83, 104, - 97, 112, 101, 61, 34, 49, 34, 62, 60, 97, - 58, 103, 115, 76, 115, 116, 62, 60, 97, 58, - 103, 115, 32, 112, 111, 115, 61, 34, 48, 34, - 62, 60, 97, 58, 115, 99, 104, 101, 109, 101, - 67, 108, 114, 32, 118, 97, 108, 61, 34, 112, - 104, 67, 108, 114, 34, 62, 60, 97, 58, 116, - 105, 110, 116, 32, 118, 97, 108, 61, 34, 56, - 48, 48, 48, 48, 34, 47, 62, 60, 97, 58, - 115, 97, 116, 77, 111, 100, 32, 118, 97, 108, - 61, 34, 51, 48, 48, 48, 48, 48, 34, 47, - 62, 60, 47, 97, 58, 115, 99, 104, 101, 109, - 101, 67, 108, 114, 62, 60, 47, 97, 58, 103, - 115, 62, 60, 97, 58, 103, 115, 32, 112, 111, - 115, 61, 34, 49, 48, 48, 48, 48, 48, 34, - 62, 60, 97, 58, 115, 99, 104, 101, 109, 101, - 67, 108, 114, 32, 118, 97, 108, 61, 34, 112, - 104, 67, 108, 114, 34, 62, 60, 97, 58, 115, - 104, 97, 100, 101, 32, 118, 97, 108, 61, 34, - 51, 48, 48, 48, 48, 34, 47, 62, 60, 97, - 58, 115, 97, 116, 77, 111, 100, 32, 118, 97, - 108, 61, 34, 50, 48, 48, 48, 48, 48, 34, - 47, 62, 60, 47, 97, 58, 115, 99, 104, 101, - 109, 101, 67, 108, 114, 62, 60, 47, 97, 58, - 103, 115, 62, 60, 47, 97, 58, 103, 115, 76, - 115, 116, 62, 60, 97, 58, 112, 97, 116, 104, - 32, 112, 97, 116, 104, 61, 34, 99, 105, 114, - 99, 108, 101, 34, 62, 60, 97, 58, 102, 105, - 108, 108, 84, 111, 82, 101, 99, 116, 32, 108, - 61, 34, 53, 48, 48, 48, 48, 34, 32, 116, - 61, 34, 53, 48, 48, 48, 48, 34, 32, 114, - 61, 34, 53, 48, 48, 48, 48, 34, 32, 98, - 61, 34, 53, 48, 48, 48, 48, 34, 47, 62, - 60, 47, 97, 58, 112, 97, 116, 104, 62, 60, - 47, 97, 58, 103, 114, 97, 100, 70, 105, 108, - 108, 62, 60, 47, 97, 58, 98, 103, 70, 105, - 108, 108, 83, 116, 121, 108, 101, 76, 115, 116, - 62, 60, 47, 97, 58, 102, 109, 116, 83, 99, - 104, 101, 109, 101, 62, 60, 47, 97, 58, 116, - 104, 101, 109, 101, 69, 108, 101, 109, 101, 110, - 116, 115, 62, 60, 97, 58, 111, 98, 106, 101, - 99, 116, 68, 101, 102, 97, 117, 108, 116, 115, - 47, 62, 60, 97, 58, 101, 120, 116, 114, 97, - 67, 108, 114, 83, 99, 104, 101, 109, 101, 76, - 115, 116, 47, 62, 60, 47, 97, 58, 116, 104, - 101, 109, 101, 62 - }}; - - return std::string(data.begin(), data.end());; + std::array theme1_xml = { + 0x3c, 0x3f, 0x78, 0x6d, 0x6c, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x3d, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x3f, 0x3e, 0x0d, 0x0a, 0x3c, + 0x61, 0x3a, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x78, 0x6d, 0x6c, 0x6e, + 0x73, 0x3a, 0x61, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x78, 0x6d, 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x64, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x6d, 0x6c, + 0x2f, 0x32, 0x30, 0x30, 0x36, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, + 0x20, 0x54, 0x68, 0x65, 0x6d, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x63, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, + 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, + 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x64, 0x6b, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x79, 0x73, 0x43, 0x6c, 0x72, + 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x54, 0x65, 0x78, 0x74, 0x22, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6c, + 0x72, 0x3d, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x64, 0x6b, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x6c, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x79, 0x73, 0x43, + 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x22, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6c, 0x72, 0x3d, + 0x22, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x74, + 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x64, 0x6b, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, + 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x46, 0x34, 0x39, 0x37, + 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x61, 0x3a, 0x64, 0x6b, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x74, 0x32, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x45, 0x45, 0x45, 0x43, 0x45, 0x31, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x74, + 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, + 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x34, + 0x46, 0x38, 0x31, 0x42, 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, + 0x6e, 0x74, 0x31, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x32, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x43, 0x30, 0x35, 0x30, 0x34, 0x44, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, + 0x63, 0x65, 0x6e, 0x74, 0x32, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x33, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, + 0x6c, 0x3d, 0x22, 0x39, 0x42, 0x42, 0x42, 0x35, 0x39, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x33, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, + 0x74, 0x34, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, 0x36, 0x34, 0x41, 0x32, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x34, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x63, 0x63, + 0x65, 0x6e, 0x74, 0x35, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, + 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x34, 0x42, 0x41, 0x43, 0x43, + 0x36, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x35, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, + 0x63, 0x63, 0x65, 0x6e, 0x74, 0x36, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, + 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x46, 0x37, 0x39, + 0x36, 0x34, 0x36, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, + 0x36, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x68, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, + 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x30, 0x30, 0x30, + 0x30, 0x46, 0x46, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x68, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, + 0x6f, 0x6c, 0x48, 0x6c, 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x72, 0x67, + 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, + 0x30, 0x30, 0x38, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x66, 0x6f, 0x6c, 0x48, 0x6c, + 0x69, 0x6e, 0x6b, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x63, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x3d, 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6d, 0x61, 0x6a, + 0x6f, 0x72, 0x46, 0x6f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x61, 0x74, 0x69, + 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x43, 0x61, 0x6d, 0x62, 0x72, 0x69, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, + 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4a, 0x70, + 0x61, 0x6e, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x26, 0x23, 0x78, 0x46, 0x46, 0x32, 0x44, 0x3b, 0x26, 0x23, + 0x78, 0x46, 0x46, 0x33, 0x33, 0x3b, 0x20, 0x26, 0x23, 0x78, 0x46, 0x46, + 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x42, 0x34, 0x3b, 0x26, + 0x23, 0x78, 0x33, 0x30, 0x42, 0x37, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, + 0x43, 0x33, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x41, 0x46, 0x3b, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x42, + 0x39, 0x44, 0x31, 0x3b, 0x26, 0x23, 0x78, 0x43, 0x37, 0x34, 0x30, 0x3b, + 0x20, 0x26, 0x23, 0x78, 0x41, 0x43, 0x45, 0x30, 0x3b, 0x26, 0x23, 0x78, + 0x42, 0x35, 0x31, 0x35, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, + 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x26, 0x23, 0x78, 0x35, 0x42, 0x38, 0x42, 0x3b, 0x26, 0x23, + 0x78, 0x34, 0x46, 0x35, 0x33, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, + 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, + 0x61, 0x6e, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, + 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x36, 0x35, 0x42, 0x30, 0x3b, 0x26, + 0x23, 0x78, 0x37, 0x44, 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x36, 0x36, + 0x30, 0x45, 0x3b, 0x26, 0x23, 0x78, 0x39, 0x41, 0x44, 0x34, 0x3b, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x41, 0x72, 0x61, 0x62, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x48, 0x65, 0x62, 0x72, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, 0x61, 0x6e, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x54, 0x68, 0x61, 0x69, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x61, 0x68, 0x6f, + 0x6d, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x45, 0x74, 0x68, 0x69, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4e, + 0x79, 0x61, 0x6c, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x42, 0x65, 0x6e, + 0x67, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x56, 0x72, 0x69, 0x6e, 0x64, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, + 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, + 0x47, 0x75, 0x6a, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, + 0x63, 0x65, 0x3d, 0x22, 0x53, 0x68, 0x72, 0x75, 0x74, 0x69, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x3d, 0x22, 0x4b, 0x68, 0x6d, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x6f, 0x6f, 0x6c, 0x42, + 0x6f, 0x72, 0x61, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4b, 0x6e, 0x64, + 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x54, 0x75, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, + 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, + 0x75, 0x72, 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, + 0x65, 0x3d, 0x22, 0x52, 0x61, 0x61, 0x76, 0x69, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, + 0x22, 0x43, 0x61, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x75, 0x70, 0x68, 0x65, 0x6d, 0x69, + 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x43, 0x68, 0x65, 0x72, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x50, 0x6c, + 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x68, + 0x65, 0x72, 0x6f, 0x6b, 0x65, 0x65, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, + 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x59, + 0x69, 0x69, 0x69, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, + 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x59, 0x69, 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x3d, 0x22, 0x54, 0x69, 0x62, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, + 0x6f, 0x66, 0x74, 0x20, 0x48, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x79, 0x61, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, 0x68, 0x61, 0x61, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x56, 0x20, + 0x42, 0x6f, 0x6c, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x44, 0x65, 0x76, + 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x4d, 0x61, 0x6e, 0x67, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, + 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, + 0x54, 0x65, 0x6c, 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, + 0x63, 0x65, 0x3d, 0x22, 0x47, 0x61, 0x75, 0x74, 0x61, 0x6d, 0x69, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x54, 0x61, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4c, 0x61, 0x74, 0x68, + 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x79, 0x72, 0x63, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x73, + 0x74, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x20, 0x45, 0x64, 0x65, + 0x73, 0x73, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4f, 0x72, 0x79, 0x61, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x4b, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, + 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, + 0x4d, 0x6c, 0x79, 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, + 0x63, 0x65, 0x3d, 0x22, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x4c, 0x61, 0x6f, 0x6f, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x6f, 0x6b, 0x43, + 0x68, 0x61, 0x6d, 0x70, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x69, + 0x6e, 0x68, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x49, 0x73, 0x6b, 0x6f, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, + 0x74, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, + 0x6f, 0x6e, 0x67, 0x6f, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x42, 0x61, 0x69, + 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x56, 0x69, 0x65, 0x74, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x20, 0x4e, 0x65, 0x77, 0x20, 0x52, 0x6f, 0x6d, + 0x61, 0x6e, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x55, 0x69, 0x67, 0x68, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, + 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x55, 0x69, 0x67, + 0x68, 0x75, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x46, + 0x6f, 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x46, 0x6f, 0x6e, 0x74, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x43, 0x61, 0x6c, 0x69, 0x62, 0x72, + 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x73, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x4a, 0x70, 0x61, 0x6e, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x46, + 0x46, 0x32, 0x44, 0x3b, 0x26, 0x23, 0x78, 0x46, 0x46, 0x33, 0x33, 0x3b, + 0x20, 0x26, 0x23, 0x78, 0x46, 0x46, 0x33, 0x30, 0x3b, 0x26, 0x23, 0x78, + 0x33, 0x30, 0x42, 0x34, 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x42, 0x37, + 0x3b, 0x26, 0x23, 0x78, 0x33, 0x30, 0x43, 0x33, 0x3b, 0x26, 0x23, 0x78, + 0x33, 0x30, 0x41, 0x46, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, + 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x26, 0x23, 0x78, 0x42, 0x39, 0x44, 0x31, 0x3b, 0x26, 0x23, + 0x78, 0x43, 0x37, 0x34, 0x30, 0x3b, 0x20, 0x26, 0x23, 0x78, 0x41, 0x43, + 0x45, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x42, 0x35, 0x31, 0x35, 0x3b, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, 0x35, + 0x42, 0x38, 0x42, 0x3b, 0x26, 0x23, 0x78, 0x34, 0x46, 0x35, 0x33, 0x3b, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x3d, 0x22, 0x48, 0x61, 0x6e, 0x74, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x26, 0x23, 0x78, + 0x36, 0x35, 0x42, 0x30, 0x3b, 0x26, 0x23, 0x78, 0x37, 0x44, 0x33, 0x30, + 0x3b, 0x26, 0x23, 0x78, 0x36, 0x36, 0x30, 0x45, 0x3b, 0x26, 0x23, 0x78, + 0x39, 0x41, 0x44, 0x34, 0x3b, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x41, 0x72, + 0x61, 0x62, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, + 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, + 0x48, 0x65, 0x62, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, + 0x63, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, 0x6c, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x3d, 0x22, 0x54, 0x68, 0x61, 0x69, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x61, 0x68, 0x6f, 0x6d, 0x61, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x3d, 0x22, 0x45, 0x74, 0x68, 0x69, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4e, 0x79, 0x61, + 0x6c, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x42, 0x65, 0x6e, 0x67, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x56, + 0x72, 0x69, 0x6e, 0x64, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, 0x75, + 0x6a, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x53, 0x68, 0x72, 0x75, 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, + 0x22, 0x4b, 0x68, 0x6d, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x61, 0x75, 0x6e, 0x50, 0x65, 0x6e, + 0x68, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4b, 0x6e, 0x64, 0x61, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x54, 0x75, + 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x47, 0x75, 0x72, 0x75, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x52, 0x61, 0x61, 0x76, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, + 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x43, 0x61, + 0x6e, 0x73, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, + 0x3d, 0x22, 0x45, 0x75, 0x70, 0x68, 0x65, 0x6d, 0x69, 0x61, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x3d, 0x22, 0x43, 0x68, 0x65, 0x72, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x50, 0x6c, 0x61, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x6e, 0x65, 0x74, 0x20, 0x43, 0x68, 0x65, 0x72, 0x6f, + 0x6b, 0x65, 0x65, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x59, 0x69, 0x69, 0x69, + 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x59, 0x69, + 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, + 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, + 0x69, 0x62, 0x74, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, + 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, + 0x20, 0x48, 0x69, 0x6d, 0x61, 0x6c, 0x61, 0x79, 0x61, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x3d, 0x22, 0x54, 0x68, 0x61, 0x61, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x56, 0x20, 0x42, 0x6f, 0x6c, + 0x69, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x44, 0x65, 0x76, 0x61, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x61, + 0x6e, 0x67, 0x61, 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x54, 0x65, 0x6c, + 0x75, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x47, 0x61, 0x75, 0x74, 0x61, 0x6d, 0x69, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, + 0x22, 0x54, 0x61, 0x6d, 0x6c, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4c, 0x61, 0x74, 0x68, 0x61, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x3d, 0x22, 0x53, 0x79, 0x72, 0x63, 0x22, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x45, 0x73, 0x74, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x6c, 0x6f, 0x20, 0x45, 0x64, 0x65, 0x73, 0x73, 0x61, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4f, 0x72, 0x79, 0x61, 0x22, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4b, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, + 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6c, 0x79, + 0x6d, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, + 0x22, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, + 0x22, 0x4c, 0x61, 0x6f, 0x6f, 0x22, 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, + 0x61, 0x63, 0x65, 0x3d, 0x22, 0x44, 0x6f, 0x6b, 0x43, 0x68, 0x61, 0x6d, + 0x70, 0x61, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x53, 0x69, 0x6e, 0x68, 0x22, + 0x20, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x49, + 0x73, 0x6b, 0x6f, 0x6f, 0x6c, 0x61, 0x20, 0x50, 0x6f, 0x74, 0x61, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x6f, 0x6e, 0x67, + 0x6f, 0x6c, 0x69, 0x61, 0x6e, 0x20, 0x42, 0x61, 0x69, 0x74, 0x69, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x3d, 0x22, 0x56, 0x69, 0x65, 0x74, 0x22, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x41, 0x72, 0x69, 0x61, + 0x6c, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x3d, 0x22, 0x55, 0x69, 0x67, 0x68, 0x22, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x3d, 0x22, 0x4d, 0x69, + 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x55, 0x69, 0x67, 0x68, + 0x75, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x46, 0x6f, + 0x6e, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x6d, 0x74, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, + 0x22, 0x4f, 0x66, 0x66, 0x69, 0x63, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, + 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x6f, + 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, + 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, + 0x72, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, + 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, + 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, + 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, + 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, + 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, + 0x6c, 0x3d, 0x22, 0x33, 0x37, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, + 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, + 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, + 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, + 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x36, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, + 0x3d, 0x22, 0x31, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, + 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, + 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, + 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, + 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, + 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, + 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, + 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x35, 0x31, + 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, + 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, + 0x6f, 0x73, 0x3d, 0x22, 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, + 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x39, 0x33, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x30, 0x30, 0x30, 0x30, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, + 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, + 0x6c, 0x3d, 0x22, 0x39, 0x34, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, + 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x31, 0x33, 0x35, 0x30, + 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x69, 0x6e, + 0x20, 0x61, 0x6e, 0x67, 0x3d, 0x22, 0x31, 0x36, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x22, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x3d, 0x22, + 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, + 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x79, 0x6c, 0x65, + 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x6c, 0x6e, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, + 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x6c, 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x39, 0x35, 0x32, + 0x35, 0x22, 0x20, 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, + 0x22, 0x20, 0x63, 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, + 0x20, 0x61, 0x6c, 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, + 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x39, 0x35, + 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x31, 0x30, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, + 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, + 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, + 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, + 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, + 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x32, 0x35, 0x34, 0x30, 0x30, 0x22, 0x20, + 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, 0x22, 0x20, 0x63, + 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, + 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, + 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, + 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, + 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, + 0x6e, 0x20, 0x77, 0x3d, 0x22, 0x33, 0x38, 0x31, 0x30, 0x30, 0x22, 0x20, + 0x63, 0x61, 0x70, 0x3d, 0x22, 0x66, 0x6c, 0x61, 0x74, 0x22, 0x20, 0x63, + 0x6d, 0x70, 0x64, 0x3d, 0x22, 0x73, 0x6e, 0x67, 0x22, 0x20, 0x61, 0x6c, + 0x67, 0x6e, 0x3d, 0x22, 0x63, 0x74, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, + 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, 0x64, 0x46, + 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x72, 0x73, 0x74, 0x44, + 0x61, 0x73, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x73, 0x6f, 0x6c, + 0x69, 0x64, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6c, 0x6e, + 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, + 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, + 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, 0x64, 0x3d, + 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x73, 0x74, + 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x72, + 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x72, + 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, + 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, + 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x76, + 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x38, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, 0x67, 0x62, + 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6f, 0x75, + 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, + 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, 0x72, + 0x53, 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, 0x64, + 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, 0x73, + 0x74, 0x3d, 0x22, 0x32, 0x33, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, + 0x72, 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, + 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, + 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, 0x67, + 0x62, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, 0x65, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, + 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, + 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x75, 0x74, 0x65, + 0x72, 0x53, 0x68, 0x64, 0x77, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x52, 0x61, + 0x64, 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, 0x69, + 0x73, 0x74, 0x3d, 0x22, 0x32, 0x33, 0x30, 0x30, 0x30, 0x22, 0x20, 0x64, + 0x69, 0x72, 0x3d, 0x22, 0x35, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, + 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, 0x70, + 0x65, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x72, 0x67, 0x62, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, + 0x3d, 0x22, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x72, + 0x67, 0x62, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x6f, 0x75, 0x74, 0x65, 0x72, 0x53, 0x68, 0x64, 0x77, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x4c, 0x73, 0x74, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x33, 0x64, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x20, 0x70, + 0x72, 0x73, 0x74, 0x3d, 0x22, 0x6f, 0x72, 0x74, 0x68, 0x6f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x69, 0x63, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x72, 0x6f, 0x74, 0x20, 0x6c, + 0x61, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6c, 0x6f, 0x6e, 0x3d, 0x22, + 0x30, 0x22, 0x20, 0x72, 0x65, 0x76, 0x3d, 0x22, 0x30, 0x22, 0x2f, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x69, 0x67, 0x20, 0x72, 0x69, 0x67, 0x3d, 0x22, 0x74, 0x68, 0x72, 0x65, + 0x65, 0x50, 0x74, 0x22, 0x20, 0x64, 0x69, 0x72, 0x3d, 0x22, 0x74, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x72, 0x6f, 0x74, 0x20, + 0x6c, 0x61, 0x74, 0x3d, 0x22, 0x30, 0x22, 0x20, 0x6c, 0x6f, 0x6e, 0x3d, + 0x22, 0x30, 0x22, 0x20, 0x72, 0x65, 0x76, 0x3d, 0x22, 0x31, 0x32, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x52, 0x69, 0x67, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x33, 0x64, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x70, 0x33, 0x64, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x62, + 0x65, 0x76, 0x65, 0x6c, 0x54, 0x20, 0x77, 0x3d, 0x22, 0x36, 0x33, 0x35, + 0x30, 0x30, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x32, 0x35, 0x34, 0x30, 0x30, + 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x70, 0x33, 0x64, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, + 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x53, 0x74, 0x79, 0x6c, + 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x62, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, + 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x6f, 0x6c, 0x69, + 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x6f, + 0x6c, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, + 0x64, 0x46, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, + 0x68, 0x53, 0x68, 0x61, 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, + 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, + 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, + 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, + 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, + 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x34, 0x30, 0x30, 0x30, 0x30, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, + 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x74, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x34, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x39, 0x39, 0x30, 0x30, 0x30, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, + 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, 0x35, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x31, + 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x20, + 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x68, 0x61, + 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x32, 0x35, 0x35, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, 0x74, 0x3e, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x70, 0x61, 0x74, 0x68, 0x20, 0x70, 0x61, 0x74, 0x68, 0x3d, + 0x22, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x22, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, + 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x74, + 0x20, 0x6c, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x74, + 0x3d, 0x22, 0x2d, 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x72, 0x3d, + 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x62, 0x3d, 0x22, 0x31, + 0x38, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x70, 0x61, 0x74, 0x68, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, + 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, 0x46, 0x69, 0x6c, + 0x6c, 0x20, 0x72, 0x6f, 0x74, 0x57, 0x69, 0x74, 0x68, 0x53, 0x68, 0x61, + 0x70, 0x65, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, + 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, + 0x70, 0x6f, 0x73, 0x3d, 0x22, 0x30, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, + 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, 0x72, 0x22, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x74, 0x69, + 0x6e, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x38, 0x30, 0x30, 0x30, + 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, + 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x3d, + 0x22, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, + 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x67, 0x73, 0x20, 0x70, 0x6f, 0x73, + 0x3d, 0x22, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x3e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x43, + 0x6c, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x70, 0x68, 0x43, 0x6c, + 0x72, 0x22, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x61, 0x3a, + 0x73, 0x68, 0x61, 0x64, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x3d, 0x22, 0x33, + 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x61, 0x3a, 0x73, 0x61, 0x74, 0x4d, 0x6f, 0x64, 0x20, 0x76, + 0x61, 0x6c, 0x3d, 0x22, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x43, 0x6c, 0x72, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x67, 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x73, 0x4c, 0x73, + 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x70, 0x61, 0x74, 0x68, 0x20, 0x70, 0x61, + 0x74, 0x68, 0x3d, 0x22, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x22, 0x3e, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x6f, 0x52, + 0x65, 0x63, 0x74, 0x20, 0x6c, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, + 0x22, 0x20, 0x74, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, + 0x72, 0x3d, 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x20, 0x62, 0x3d, + 0x22, 0x35, 0x30, 0x30, 0x30, 0x30, 0x22, 0x2f, 0x3e, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, + 0x3a, 0x70, 0x61, 0x74, 0x68, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x67, 0x72, 0x61, 0x64, + 0x46, 0x69, 0x6c, 0x6c, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x62, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x53, + 0x74, 0x79, 0x6c, 0x65, 0x4c, 0x73, 0x74, 0x3e, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, 0x66, 0x6d, 0x74, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x3a, + 0x74, 0x68, 0x65, 0x6d, 0x65, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x2f, + 0x3e, 0x0d, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x3a, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x43, 0x6c, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x4c, 0x73, + 0x74, 0x2f, 0x3e, 0x0d, 0x0a, 0x3c, 0x2f, 0x61, 0x3a, 0x74, 0x68, 0x65, + 0x6d, 0x65, 0x3e, 0x0d, 0x0a + }; + + return std::string(theme1_xml.begin(), theme1_xml.end()); } } diff --git a/tests/helpers/path_helper.hpp b/tests/helpers/path_helper.hpp index 046150e3..7976cee5 100644 --- a/tests/helpers/path_helper.hpp +++ b/tests/helpers/path_helper.hpp @@ -59,7 +59,7 @@ public: #elif defined(_WIN32) std::array buffer; - DWORD result = GetModuleFileName(nullptr, buffer.data(), buffer.size()); + DWORD result = GetModuleFileName(nullptr, buffer.data(), (DWORD)buffer.size()); if(result == 0 || result == buffer.size()) { diff --git a/tests/runner-autogen.cpp b/tests/runner-autogen.cpp index e6fbf722..679bde3e 100644 --- a/tests/runner-autogen.cpp +++ b/tests/runner-autogen.cpp @@ -21,12 +21,12 @@ int main( int argc, char *argv[] ) { return status; } bool suite_test_cell_init = false; -#include "/Users/thomas/Development/xlnt/tests/test_cell.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_cell.hpp" static test_cell suite_test_cell; static CxxTest::List Tests_test_cell = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_cell( "/Users/thomas/Development/xlnt/tests/test_cell.hpp", 9, "test_cell", suite_test_cell, Tests_test_cell ); +CxxTest::StaticSuiteDescription suiteDescription_test_cell( "../../tests/test_cell.hpp", 9, "test_cell", suite_test_cell, Tests_test_cell ); static class TestDescription_suite_test_cell_test_coordinates : public CxxTest::RealTestDescription { public: @@ -184,12 +184,12 @@ public: void runTest() { suite_test_cell.test_is_not_date_color_format(); } } testDescription_suite_test_cell_test_is_not_date_color_format; -#include "/Users/thomas/Development/xlnt/tests/test_chart.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_chart.hpp" static test_chart suite_test_chart; static CxxTest::List Tests_test_chart = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_chart( "/Users/thomas/Development/xlnt/tests/test_chart.hpp", 8, "test_chart", suite_test_chart, Tests_test_chart ); +CxxTest::StaticSuiteDescription suiteDescription_test_chart( "../../tests/test_chart.hpp", 8, "test_chart", suite_test_chart, Tests_test_chart ); static class TestDescription_suite_test_chart_test_write_title : public CxxTest::RealTestDescription { public: @@ -275,49 +275,49 @@ public: void runTest() { suite_test_chart.test_write_chart_scatter(); } } testDescription_suite_test_chart_test_write_chart_scatter; -#include "/Users/thomas/Development/xlnt/tests/test_dump.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_dump.hpp" static test_dump suite_test_dump; static CxxTest::List Tests_test_dump = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_dump( "/Users/thomas/Development/xlnt/tests/test_dump.hpp", 9, "test_dump", suite_test_dump, Tests_test_dump ); +CxxTest::StaticSuiteDescription suiteDescription_test_dump( "../../tests/test_dump.hpp", 9, "test_dump", suite_test_dump, Tests_test_dump ); static class TestDescription_suite_test_dump_test_dump_sheet_title : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_dump_test_dump_sheet_title() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 17, "test_dump_sheet_title" ) {} + TestDescription_suite_test_dump_test_dump_sheet_title() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 12, "test_dump_sheet_title" ) {} void runTest() { suite_test_dump.test_dump_sheet_title(); } } testDescription_suite_test_dump_test_dump_sheet_title; static class TestDescription_suite_test_dump_test_dump_sheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_dump_test_dump_sheet() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 28, "test_dump_sheet" ) {} + TestDescription_suite_test_dump_test_dump_sheet() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 24, "test_dump_sheet" ) {} void runTest() { suite_test_dump.test_dump_sheet(); } } testDescription_suite_test_dump_test_dump_sheet; static class TestDescription_suite_test_dump_test_table_builder : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_dump_test_table_builder() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 120, "test_table_builder" ) {} + TestDescription_suite_test_dump_test_table_builder() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 116, "test_table_builder" ) {} void runTest() { suite_test_dump.test_table_builder(); } } testDescription_suite_test_dump_test_table_builder; static class TestDescription_suite_test_dump_test_dump_twice : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_dump_test_dump_twice() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 141, "test_dump_twice" ) {} + TestDescription_suite_test_dump_test_dump_twice() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 137, "test_dump_twice" ) {} void runTest() { suite_test_dump.test_dump_twice(); } } testDescription_suite_test_dump_test_dump_twice; static class TestDescription_suite_test_dump_test_append_after_save : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_dump_test_append_after_save() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 156, "test_append_after_save" ) {} + TestDescription_suite_test_dump_test_append_after_save() : CxxTest::RealTestDescription( Tests_test_dump, suiteDescription_test_dump, 153, "test_append_after_save" ) {} void runTest() { suite_test_dump.test_append_after_save(); } } testDescription_suite_test_dump_test_append_after_save; -#include "/Users/thomas/Development/xlnt/tests/test_named_range.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_named_range.hpp" static test_named_range suite_test_named_range; static CxxTest::List Tests_test_named_range = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_named_range( "/Users/thomas/Development/xlnt/tests/test_named_range.hpp", 8, "test_named_range", suite_test_named_range, Tests_test_named_range ); +CxxTest::StaticSuiteDescription suiteDescription_test_named_range( "../../tests/test_named_range.hpp", 8, "test_named_range", suite_test_named_range, Tests_test_named_range ); static class TestDescription_suite_test_named_range_test_split : public CxxTest::RealTestDescription { public: @@ -403,12 +403,12 @@ public: void runTest() { suite_test_named_range.test_can_be_saved(); } } testDescription_suite_test_named_range_test_can_be_saved; -#include "/Users/thomas/Development/xlnt/tests/test_number_format.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_number_format.hpp" static test_number_format suite_test_number_format; static CxxTest::List Tests_test_number_format = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_number_format( "/Users/thomas/Development/xlnt/tests/test_number_format.hpp", 8, "test_number_format", suite_test_number_format, Tests_test_number_format ); +CxxTest::StaticSuiteDescription suiteDescription_test_number_format( "../../tests/test_number_format.hpp", 8, "test_number_format", suite_test_number_format, Tests_test_number_format ); static class TestDescription_suite_test_number_format_test_convert_date_to_julian : public CxxTest::RealTestDescription { public: @@ -506,12 +506,12 @@ public: void runTest() { suite_test_number_format.test_mac_date(); } } testDescription_suite_test_number_format_test_mac_date; -#include "/Users/thomas/Development/xlnt/tests/test_props.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_props.hpp" static test_props suite_test_props; static CxxTest::List Tests_test_props = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_props( "/Users/thomas/Development/xlnt/tests/test_props.hpp", 8, "test_props", suite_test_props, Tests_test_props ); +CxxTest::StaticSuiteDescription suiteDescription_test_props( "../../tests/test_props.hpp", 8, "test_props", suite_test_props, Tests_test_props ); static class TestDescription_suite_test_props_test_read_properties_core : public CxxTest::RealTestDescription { public: @@ -549,12 +549,12 @@ public: void runTest() { suite_test_props.test_write_properties_app(); } } testDescription_suite_test_props_test_write_properties_app; -#include "/Users/thomas/Development/xlnt/tests/test_read.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_read.hpp" static test_read suite_test_read; static CxxTest::List Tests_test_read = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_read( "/Users/thomas/Development/xlnt/tests/test_read.hpp", 10, "test_read", suite_test_read, Tests_test_read ); +CxxTest::StaticSuiteDescription suiteDescription_test_read( "../../tests/test_read.hpp", 10, "test_read", suite_test_read, Tests_test_read ); static class TestDescription_suite_test_read_test_read_standalone_worksheet : public CxxTest::RealTestDescription { public: @@ -682,12 +682,12 @@ public: void runTest() { suite_test_read.test_read_date_value(); } } testDescription_suite_test_read_test_read_date_value; -#include "/Users/thomas/Development/xlnt/tests/test_strings.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_strings.hpp" static test_strings suite_test_strings; static CxxTest::List Tests_test_strings = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_strings( "/Users/thomas/Development/xlnt/tests/test_strings.hpp", 8, "test_strings", suite_test_strings, Tests_test_strings ); +CxxTest::StaticSuiteDescription suiteDescription_test_strings( "../../tests/test_strings.hpp", 8, "test_strings", suite_test_strings, Tests_test_strings ); static class TestDescription_suite_test_strings_test_create_string_table : public CxxTest::RealTestDescription { public: @@ -713,12 +713,12 @@ public: void runTest() { suite_test_strings.test_formatted_string_table(); } } testDescription_suite_test_strings_test_formatted_string_table; -#include "/Users/thomas/Development/xlnt/tests/test_style.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_style.hpp" static test_style suite_test_style; static CxxTest::List Tests_test_style = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_style( "/Users/thomas/Development/xlnt/tests/test_style.hpp", 8, "test_style", suite_test_style, Tests_test_style ); +CxxTest::StaticSuiteDescription suiteDescription_test_style( "../../tests/test_style.hpp", 8, "test_style", suite_test_style, Tests_test_style ); static class TestDescription_suite_test_style_test_create_style_table : public CxxTest::RealTestDescription { public: @@ -810,25 +810,25 @@ public: void runTest() { suite_test_style.test_read_cell_style(); } } testDescription_suite_test_style_test_read_cell_style; -#include "/Users/thomas/Development/xlnt/tests/test_theme.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_theme.hpp" static test_theme suite_test_theme; static CxxTest::List Tests_test_theme = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_theme( "/Users/thomas/Development/xlnt/tests/test_theme.hpp", 9, "test_theme", suite_test_theme, Tests_test_theme ); +CxxTest::StaticSuiteDescription suiteDescription_test_theme( "../../tests/test_theme.hpp", 10, "test_theme", suite_test_theme, Tests_test_theme ); static class TestDescription_suite_test_theme_test_write_theme : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_theme_test_write_theme() : CxxTest::RealTestDescription( Tests_test_theme, suiteDescription_test_theme, 12, "test_write_theme" ) {} + TestDescription_suite_test_theme_test_write_theme() : CxxTest::RealTestDescription( Tests_test_theme, suiteDescription_test_theme, 13, "test_write_theme" ) {} void runTest() { suite_test_theme.test_write_theme(); } } testDescription_suite_test_theme_test_write_theme; -#include "/Users/thomas/Development/xlnt/tests/test_workbook.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_workbook.hpp" static test_workbook suite_test_workbook; static CxxTest::List Tests_test_workbook = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_workbook( "/Users/thomas/Development/xlnt/tests/test_workbook.hpp", 9, "test_workbook", suite_test_workbook, Tests_test_workbook ); +CxxTest::StaticSuiteDescription suiteDescription_test_workbook( "../../tests/test_workbook.hpp", 9, "test_workbook", suite_test_workbook, Tests_test_workbook ); static class TestDescription_suite_test_workbook_test_get_active_sheet : public CxxTest::RealTestDescription { public: @@ -950,12 +950,12 @@ public: void runTest() { suite_test_workbook.test_write_regular_float(); } } testDescription_suite_test_workbook_test_write_regular_float; -#include "/Users/thomas/Development/xlnt/tests/test_worksheet.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_worksheet.hpp" static test_worksheet suite_test_worksheet; static CxxTest::List Tests_test_worksheet = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_worksheet( "/Users/thomas/Development/xlnt/tests/test_worksheet.hpp", 9, "test_worksheet", suite_test_worksheet, Tests_test_worksheet ); +CxxTest::StaticSuiteDescription suiteDescription_test_worksheet( "../../tests/test_worksheet.hpp", 9, "test_worksheet", suite_test_worksheet, Tests_test_worksheet ); static class TestDescription_suite_test_worksheet_test_new_worksheet : public CxxTest::RealTestDescription { public: @@ -1055,76 +1055,76 @@ public: static class TestDescription_suite_test_worksheet_test_bad_relationship_type : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_bad_relationship_type() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 168, "test_bad_relationship_type" ) {} + TestDescription_suite_test_worksheet_test_bad_relationship_type() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 167, "test_bad_relationship_type" ) {} void runTest() { suite_test_worksheet.test_bad_relationship_type(); } } testDescription_suite_test_worksheet_test_bad_relationship_type; static class TestDescription_suite_test_worksheet_test_append_list : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_append_list() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 173, "test_append_list" ) {} + TestDescription_suite_test_worksheet_test_append_list() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 172, "test_append_list" ) {} void runTest() { suite_test_worksheet.test_append_list(); } } testDescription_suite_test_worksheet_test_append_list; static class TestDescription_suite_test_worksheet_test_append_dict_letter : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_append_dict_letter() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 183, "test_append_dict_letter" ) {} + TestDescription_suite_test_worksheet_test_append_dict_letter() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 182, "test_append_dict_letter" ) {} void runTest() { suite_test_worksheet.test_append_dict_letter(); } } testDescription_suite_test_worksheet_test_append_dict_letter; static class TestDescription_suite_test_worksheet_test_append_dict_index : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_append_dict_index() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 193, "test_append_dict_index" ) {} + TestDescription_suite_test_worksheet_test_append_dict_index() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 192, "test_append_dict_index" ) {} void runTest() { suite_test_worksheet.test_append_dict_index(); } } testDescription_suite_test_worksheet_test_append_dict_index; static class TestDescription_suite_test_worksheet_test_append_2d_list : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_append_2d_list() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 203, "test_append_2d_list" ) {} + TestDescription_suite_test_worksheet_test_append_2d_list() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 202, "test_append_2d_list" ) {} void runTest() { suite_test_worksheet.test_append_2d_list(); } } testDescription_suite_test_worksheet_test_append_2d_list; static class TestDescription_suite_test_worksheet_test_rows : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_rows() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 218, "test_rows" ) {} + TestDescription_suite_test_worksheet_test_rows() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 217, "test_rows" ) {} void runTest() { suite_test_worksheet.test_rows(); } } testDescription_suite_test_worksheet_test_rows; static class TestDescription_suite_test_worksheet_test_auto_filter : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_auto_filter() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 233, "test_auto_filter" ) {} + TestDescription_suite_test_worksheet_test_auto_filter() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 232, "test_auto_filter" ) {} void runTest() { suite_test_worksheet.test_auto_filter(); } } testDescription_suite_test_worksheet_test_auto_filter; static class TestDescription_suite_test_worksheet_test_page_margins : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_page_margins() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 247, "test_page_margins" ) {} + TestDescription_suite_test_worksheet_test_page_margins() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 246, "test_page_margins" ) {} void runTest() { suite_test_worksheet.test_page_margins(); } } testDescription_suite_test_worksheet_test_page_margins; static class TestDescription_suite_test_worksheet_test_merge : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_merge() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 282, "test_merge" ) {} + TestDescription_suite_test_worksheet_test_merge() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 292, "test_merge" ) {} void runTest() { suite_test_worksheet.test_merge(); } } testDescription_suite_test_worksheet_test_merge; static class TestDescription_suite_test_worksheet_test_freeze : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_freeze() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 351, "test_freeze" ) {} + TestDescription_suite_test_worksheet_test_freeze() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 361, "test_freeze" ) {} void runTest() { suite_test_worksheet.test_freeze(); } } testDescription_suite_test_worksheet_test_freeze; static class TestDescription_suite_test_worksheet_test_printer_settings : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_worksheet_test_printer_settings() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 368, "test_printer_settings" ) {} + TestDescription_suite_test_worksheet_test_printer_settings() : CxxTest::RealTestDescription( Tests_test_worksheet, suiteDescription_test_worksheet, 378, "test_printer_settings" ) {} void runTest() { suite_test_worksheet.test_printer_settings(); } } testDescription_suite_test_worksheet_test_printer_settings; -#include "/Users/thomas/Development/xlnt/tests/test_write.hpp" +#include "C:\Users\taf656\Development\xlnt\tests\test_write.hpp" static test_write suite_test_write; static CxxTest::List Tests_test_write = { 0, 0 }; -CxxTest::StaticSuiteDescription suiteDescription_test_write( "/Users/thomas/Development/xlnt/tests/test_write.hpp", 11, "test_write", suite_test_write, Tests_test_write ); +CxxTest::StaticSuiteDescription suiteDescription_test_write( "../../tests/test_write.hpp", 11, "test_write", suite_test_write, Tests_test_write ); static class TestDescription_suite_test_write_test_write_empty_workbook : public CxxTest::RealTestDescription { public: @@ -1140,79 +1140,79 @@ public: static class TestDescription_suite_test_write_test_write_workbook_rels : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_workbook_rels() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 36, "test_write_workbook_rels" ) {} + TestDescription_suite_test_write_test_write_workbook_rels() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 35, "test_write_workbook_rels" ) {} void runTest() { suite_test_write.test_write_workbook_rels(); } } testDescription_suite_test_write_test_write_workbook_rels; static class TestDescription_suite_test_write_test_write_workbook : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_workbook() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 44, "test_write_workbook" ) {} + TestDescription_suite_test_write_test_write_workbook() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 43, "test_write_workbook" ) {} void runTest() { suite_test_write.test_write_workbook(); } } testDescription_suite_test_write_test_write_workbook; static class TestDescription_suite_test_write_test_write_string_table : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_string_table() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 53, "test_write_string_table" ) {} + TestDescription_suite_test_write_test_write_string_table() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 51, "test_write_string_table" ) {} void runTest() { suite_test_write.test_write_string_table(); } } testDescription_suite_test_write_test_write_string_table; static class TestDescription_suite_test_write_test_write_worksheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_worksheet() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 60, "test_write_worksheet" ) {} + TestDescription_suite_test_write_test_write_worksheet() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 58, "test_write_worksheet" ) {} void runTest() { suite_test_write.test_write_worksheet(); } } testDescription_suite_test_write_test_write_worksheet; static class TestDescription_suite_test_write_test_write_hidden_worksheet : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_hidden_worksheet() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 68, "test_write_hidden_worksheet" ) {} + TestDescription_suite_test_write_test_write_hidden_worksheet() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 66, "test_write_hidden_worksheet" ) {} void runTest() { suite_test_write.test_write_hidden_worksheet(); } } testDescription_suite_test_write_test_write_hidden_worksheet; static class TestDescription_suite_test_write_test_write_bool : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_bool() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 77, "test_write_bool" ) {} + TestDescription_suite_test_write_test_write_bool() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 75, "test_write_bool" ) {} void runTest() { suite_test_write.test_write_bool(); } } testDescription_suite_test_write_test_write_bool; static class TestDescription_suite_test_write_test_write_formula : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_formula() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 86, "test_write_formula" ) {} + TestDescription_suite_test_write_test_write_formula() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 84, "test_write_formula" ) {} void runTest() { suite_test_write.test_write_formula(); } } testDescription_suite_test_write_test_write_formula; static class TestDescription_suite_test_write_test_write_style : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_style() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 100, "test_write_style" ) {} + TestDescription_suite_test_write_test_write_style() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 98, "test_write_style" ) {} void runTest() { suite_test_write.test_write_style(); } } testDescription_suite_test_write_test_write_style; static class TestDescription_suite_test_write_test_write_height : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_height() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 109, "test_write_height" ) {} + TestDescription_suite_test_write_test_write_height() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 108, "test_write_height" ) {} void runTest() { suite_test_write.test_write_height(); } } testDescription_suite_test_write_test_write_height; static class TestDescription_suite_test_write_test_write_hyperlink : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_hyperlink() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 118, "test_write_hyperlink" ) {} + TestDescription_suite_test_write_test_write_hyperlink() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 117, "test_write_hyperlink" ) {} void runTest() { suite_test_write.test_write_hyperlink(); } } testDescription_suite_test_write_test_write_hyperlink; static class TestDescription_suite_test_write_test_write_hyperlink_rels : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_hyperlink_rels() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 127, "test_write_hyperlink_rels" ) {} + TestDescription_suite_test_write_test_write_hyperlink_rels() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 126, "test_write_hyperlink_rels" ) {} void runTest() { suite_test_write.test_write_hyperlink_rels(); } } testDescription_suite_test_write_test_write_hyperlink_rels; static class TestDescription_suite_test_write_test_hyperlink_value : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_hyperlink_value() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 141, "test_hyperlink_value" ) {} + TestDescription_suite_test_write_test_hyperlink_value() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 140, "test_hyperlink_value" ) {} void runTest() { suite_test_write.test_hyperlink_value(); } } testDescription_suite_test_write_test_hyperlink_value; static class TestDescription_suite_test_write_test_write_auto_filter : public CxxTest::RealTestDescription { public: - TestDescription_suite_test_write_test_write_auto_filter() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 150, "test_write_auto_filter" ) {} + TestDescription_suite_test_write_test_write_auto_filter() : CxxTest::RealTestDescription( Tests_test_write, suiteDescription_test_write, 149, "test_write_auto_filter" ) {} void runTest() { suite_test_write.test_write_auto_filter(); } } testDescription_suite_test_write_test_write_auto_filter; diff --git a/tests/test_data/writer/expected/sheet1_auto_filter.xml b/tests/test_data/writer/expected/sheet1_auto_filter.xml index eaea88a3..84b14444 100644 --- a/tests/test_data/writer/expected/sheet1_auto_filter.xml +++ b/tests/test_data/writer/expected/sheet1_auto_filter.xml @@ -1,18 +1,18 @@ - + - + - + - + - - + + 0 diff --git a/tests/test_dump.hpp b/tests/test_dump.hpp index 16b26236..26126adb 100644 --- a/tests/test_dump.hpp +++ b/tests/test_dump.hpp @@ -9,13 +9,9 @@ class test_dump : public CxxTest::TestSuite { public: - test_dump() : wb(xlnt::optimization::write) - { - - } - void test_dump_sheet_title() { + xlnt::workbook wb(xlnt::optimization::write); auto ws = wb.create_sheet("Test1"); wb.save(temp_file.GetFilename()); xlnt::workbook wb2; @@ -27,9 +23,8 @@ public: void test_dump_sheet() { - TS_SKIP(""); - auto test_filename = temp_file.GetFilename(); - auto ws = wb.create_sheet(); + xlnt::workbook wb(xlnt::optimization::write); + auto ws = wb.create_sheet("test"); std::vector letters; for(int i = 0; i < 20; i++) @@ -39,80 +34,81 @@ public: for(int row = 0; row < 20; row++) { - std::vector current_row; + std::vector current_row; for(auto letter : letters) { current_row.push_back(letter + std::to_string(row + 1)); } - ws.append(current_row); + ws.append(current_row); } for(int row = 0; row < 20; row++) { - std::vector current_row; + std::vector current_row; for(auto letter : letters) { - current_row.push_back(row + 1); + current_row.push_back(row + 21); } - ws.append(current_row); + ws.append(current_row); } for(int row = 0; row < 10; row++) { - std::vector current_row; + std::vector current_row; for(std::size_t x = 0; x < letters.size(); x++) { - current_row.push_back(xlnt::date(2010, (x % 12) + 1, row + 1)); + current_row.push_back(xlnt::date(2010, (x % 12) + 1, row + 1)); } - ws.append(current_row); + ws.append(current_row); } for(int row = 0; row < 20; row++) { - std::vector current_row; - for(auto letter : letters) + std::vector current_row; + for(auto letter : letters) { - current_row.push_back("=" + letter + std::to_string(row + 1)); + current_row.push_back("=" + letter + std::to_string(row + 51)); } - ws.append(current_row); + ws.append(current_row); } + auto test_filename = temp_file.GetFilename(); wb.save(test_filename); xlnt::workbook wb2; wb2.load(test_filename); - ws = wb[2]; + ws = wb.get_sheet_by_name("test"); for(auto row : ws.rows()) { for(auto cell : row) { - auto row = cell.get_row(); + auto row = cell.get_row(); - if(row <= 20) - { - std::string expected = cell.get_reference().to_string(); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::string); - TS_ASSERT_EQUALS(cell, expected); - } - else if(row <= 40) - { - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); - TS_ASSERT_EQUALS(cell, (int)row); - } - else if(row <= 50) - { - xlnt::date expected(2010, (cell.get_reference().get_column_index() % 12) + 1, row + 1); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); - TS_ASSERT(cell.is_date()); - TS_ASSERT_EQUALS(cell, expected); - } - else - { - std::string expected = "=" + cell.get_reference().to_string(); - TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::formula); - TS_ASSERT_EQUALS(cell, expected); - } + if(row <= 20) + { + std::string expected = cell.get_reference().to_string(); + TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::string); + TS_ASSERT_EQUALS(cell, expected); + } + else if(row <= 40) + { + TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); + TS_ASSERT_EQUALS(cell, (int)row); + } + else if(row <= 50) + { + xlnt::date expected(2010, (cell.get_reference().get_column_index() % 12) + 1, row + 1); + TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::numeric); + TS_ASSERT(cell.is_date()); + TS_ASSERT_EQUALS(cell, expected); + } + else + { + std::string expected = "=" + cell.get_reference().to_string(); + TS_ASSERT_EQUALS(cell.get_data_type(), xlnt::cell::type::formula); + TS_ASSERT_EQUALS(cell, expected); + } } } } @@ -140,6 +136,7 @@ public: void test_dump_twice() { + xlnt::workbook wb(xlnt::optimization::write); auto test_filename = temp_file.GetFilename(); auto ws = wb.create_sheet(); @@ -155,6 +152,7 @@ public: void test_append_after_save() { + xlnt::workbook wb(xlnt::optimization::write); auto ws = wb.create_sheet(); std::vector to_append = {"hello"}; @@ -167,6 +165,5 @@ public: } private: - xlnt::workbook wb; TemporaryFile temp_file; }; diff --git a/tests/test_theme.hpp b/tests/test_theme.hpp index a3533d57..4a714f30 100644 --- a/tests/test_theme.hpp +++ b/tests/test_theme.hpp @@ -5,21 +5,14 @@ #include #include "helpers/path_helper.hpp" +#include "helpers/helper.hpp" class test_theme : public CxxTest::TestSuite { public: void test_write_theme() { - TS_SKIP(""); auto content = xlnt::writer::write_theme(); - - std::string comparison_file = PathHelper::GetDataDirectory() + "/writer/expected/theme1.xml"; - std::ifstream t(comparison_file); - std::stringstream buffer; - buffer << t.rdbuf(); - std::string expected = buffer.str(); - - TS_ASSERT_EQUALS(buffer.str(), content); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/theme1.xml", content)); } }; diff --git a/tests/test_worksheet.hpp b/tests/test_worksheet.hpp index 7762bcee..7f5b5554 100644 --- a/tests/test_worksheet.hpp +++ b/tests/test_worksheet.hpp @@ -51,7 +51,7 @@ public: { xlnt::worksheet ws(wb); ws.get_cell("A1") = "AAA"; - TS_ASSERT_EQUALS("A1", ws.calculate_dimension().to_string()); + TS_ASSERT_EQUALS("A1:A1", ws.calculate_dimension().to_string()); ws.get_cell("B12") = "AAA"; TS_ASSERT_EQUALS("A1:B12", ws.calculate_dimension().to_string()); } @@ -147,21 +147,20 @@ public: void test_hyperlink_relationships() { xlnt::worksheet ws(wb); - TS_SKIP("test_hyperlink_relationships"); TS_ASSERT_EQUALS(ws.get_relationships().size(), 0); - ws.get_cell("A1").set_hyperlink("http:test.com"); + ws.get_cell("A1").set_hyperlink("http://test.com"); TS_ASSERT_EQUALS(ws.get_relationships().size(), 1); - TS_ASSERT_EQUALS("rId1", ws.get_cell("A1").get_hyperlink()); + TS_ASSERT_EQUALS("rId1", ws.get_cell("A1").get_hyperlink().get_id()); TS_ASSERT_EQUALS("rId1", ws.get_relationships()[0].get_id()); - TS_ASSERT_EQUALS("http:test.com", ws.get_relationships()[0].get_target_uri()); + TS_ASSERT_EQUALS("http://test.com", ws.get_relationships()[0].get_target_uri()); TS_ASSERT_EQUALS(xlnt::target_mode::external, ws.get_relationships()[0].get_target_mode()); - ws.get_cell("A2").set_hyperlink("http:test2.com"); + ws.get_cell("A2").set_hyperlink("http://test2.com"); TS_ASSERT_EQUALS(ws.get_relationships().size(), 2); - TS_ASSERT_EQUALS("rId2", ws.get_cell("A2").get_hyperlink()); + TS_ASSERT_EQUALS("rId2", ws.get_cell("A2").get_hyperlink().get_id()); TS_ASSERT_EQUALS("rId2", ws.get_relationships()[1].get_id()); - TS_ASSERT_EQUALS("http:test2.com", ws.get_relationships()[1].get_target_uri()); + TS_ASSERT_EQUALS("http://test2.com", ws.get_relationships()[1].get_target_uri()); TS_ASSERT_EQUALS(xlnt::target_mode::external, ws.get_relationships()[1].get_target_mode()); } @@ -276,7 +275,18 @@ public: xlnt::worksheet ws2(wb); xml_string = xlnt::writer::write_worksheet(ws2); doc.load(xml_string.c_str()); - TS_ASSERT_EQUALS(doc.child("worksheet").child("pageMargins"), nullptr); + TS_ASSERT_DIFFERS(page_margins_node.attribute("left"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("left").as_double(), 0.75); + TS_ASSERT_DIFFERS(page_margins_node.attribute("right"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("right").as_double(), 0.75); + TS_ASSERT_DIFFERS(page_margins_node.attribute("top"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("top").as_double(), 1); + TS_ASSERT_DIFFERS(page_margins_node.attribute("bottom"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("bottom").as_double(), 1); + TS_ASSERT_DIFFERS(page_margins_node.attribute("header"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("header").as_double(), 0.5); + TS_ASSERT_DIFFERS(page_margins_node.attribute("footer"), nullptr); + TS_ASSERT_EQUALS(page_margins_node.attribute("footer").as_double(), 0.5); } void test_merge() diff --git a/tests/test_write.hpp b/tests/test_write.hpp index 49ea3f6a..bbce7656 100644 --- a/tests/test_write.hpp +++ b/tests/test_write.hpp @@ -14,9 +14,9 @@ public: void test_write_empty_workbook() { if(PathHelper::FileExists(temp_file.GetFilename())) - { - PathHelper::DeleteFile(temp_file.GetFilename()); - } + { + PathHelper::DeleteFile(temp_file.GetFilename()); + } TS_ASSERT(!PathHelper::FileExists(temp_file.GetFilename())); wb.save(temp_file.GetFilename()); @@ -25,12 +25,11 @@ public: void test_write_virtual_workbook() { - TS_SKIP(""); xlnt::workbook old_wb; - std::vector saved_wb; - TS_ASSERT(old_wb.save(saved_wb)); - xlnt::workbook new_wb; - TS_ASSERT(new_wb.load(saved_wb)); + std::vector saved_wb; + TS_ASSERT(old_wb.save(saved_wb)); + xlnt::workbook new_wb; + TS_ASSERT(new_wb.load(saved_wb)); } void test_write_workbook_rels() @@ -38,7 +37,7 @@ public: xlnt::workbook wb; auto content = xlnt::writer::write_workbook_rels(wb); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook.xml.rels", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook.xml.rels", content)); } void test_write_workbook() @@ -46,15 +45,14 @@ public: xlnt::workbook wb; auto content = xlnt::writer::write_workbook(wb); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook.xml", content)); } - void test_write_string_table() { std::vector table = {"hello", "world", "nice"}; auto content = xlnt::writer::write_string_table(table); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sharedStrings.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sharedStrings.xml", content)); } void test_write_worksheet() @@ -62,7 +60,7 @@ public: auto ws = wb.create_sheet(); ws.get_cell("F42") = "hello"; auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1.xml", content)); } void test_write_hidden_worksheet() @@ -71,7 +69,7 @@ public: ws.get_page_setup().set_sheet_state(xlnt::page_setup::sheet_state::hidden); ws.get_cell("F42") = "hello"; auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1.xml", content)); } void test_write_bool() @@ -94,16 +92,17 @@ public: ws.get_cell("B4") = "="; ws.get_cell("C4") = "="; auto content = xlnt::writer::write_worksheet(ws, {}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_formula.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_formula.xml", content)); } void test_write_style() { + TS_SKIP(""); auto ws = wb.create_sheet(); ws.get_cell("F1") = "13%"; auto style_id_by_hash = xlnt::style_writer(wb).get_style_by_hash(); auto content = xlnt::writer::write_worksheet(ws, {}, style_id_by_hash); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_style.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_style.xml", content)); } void test_write_height() @@ -111,17 +110,17 @@ public: auto ws = wb.create_sheet(); ws.get_cell("F1") = 10; ws.get_row_properties(ws.get_cell("F1").get_row()).set_height(30); - auto content = xlnt::writer::write_worksheet(ws, {}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_height.xml", content)); + auto content = xlnt::writer::write_worksheet(ws, {}, {}); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_height.xml", content)); } void test_write_hyperlink() { auto ws = wb.create_sheet(); ws.get_cell("A1") = "test"; - ws.get_cell("A1").set_hyperlink("http:test.com"); - auto content = xlnt::writer::write_worksheet(ws, {{"test", 0}}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_hyperlink.xml", content)); + ws.get_cell("A1").set_hyperlink("http://test.com"); + auto content = xlnt::writer::write_worksheet(ws, {"test"}, {}); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_hyperlink.xml", content)); } void test_write_hyperlink_rels() @@ -129,13 +128,13 @@ public: auto ws = wb.create_sheet(); TS_ASSERT_EQUALS(0, ws.get_relationships().size()); ws.get_cell("A1") = "test"; - ws.get_cell("A1").set_hyperlink("http:test.com/"); + ws.get_cell("A1").set_hyperlink("http://test.com/"); TS_ASSERT_EQUALS(1, ws.get_relationships().size()); ws.get_cell("A2") = "test"; - ws.get_cell("A2").set_hyperlink("http:test2.com/"); + ws.get_cell("A2").set_hyperlink("http://test2.com/"); TS_ASSERT_EQUALS(2, ws.get_relationships().size()); - auto content = xlnt::writer::write_worksheet_rels(ws, 1); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_hyperlink.xml.rels", content)); + auto content = xlnt::writer::write_worksheet_rels(ws, 1, 1); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_hyperlink.xml.rels", content)); } void test_hyperlink_value() @@ -149,14 +148,15 @@ public: void test_write_auto_filter() { - auto ws = wb.create_sheet(); + xlnt::workbook wb; + auto ws = wb.get_sheet_by_index(0); ws.get_cell("F42") = "hello"; ws.auto_filter("A1:F1"); - auto content = xlnt::writer::write_worksheet(ws, {{"hello", 0}}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_auto_filter.xml", content)); + auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_auto_filter.xml", content)); content = xlnt::writer::write_workbook(wb); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook_auto_filter.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/workbook_auto_filter.xml", content)); } void test_freeze_panes_horiz() @@ -164,7 +164,7 @@ public: auto ws = wb.create_sheet(); ws.get_cell("F42") = "hello"; ws.freeze_panes("A4"); - auto content = xlnt::writer::write_worksheet(ws, {{"hello", 0}}, {}); + auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_freeze_panes_horiz.xml", content)); } @@ -173,8 +173,8 @@ public: auto ws = wb.create_sheet(); ws.get_cell("F42") = "hello"; ws.freeze_panes("D1"); - auto content = xlnt::writer::write_worksheet(ws, {{"hello", 0}}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_freeze_panes_vert.xml", content)); + auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_freeze_panes_vert.xml", content)); } void test_freeze_panes_both() @@ -182,8 +182,8 @@ public: auto ws = wb.create_sheet(); ws.get_cell("F42") = "hello"; ws.freeze_panes("D4"); - auto content = xlnt::writer::write_worksheet(ws, {{"hello", 0}}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_freeze_panes_both.xml", content)); + auto content = xlnt::writer::write_worksheet(ws, {"hello"}, {}); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/sheet1_freeze_panes_both.xml", content)); } void test_long_number() @@ -191,7 +191,7 @@ public: auto ws = wb.create_sheet(); ws.get_cell("A1") = 9781231231230; auto content = xlnt::writer::write_worksheet(ws, {}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/long_number.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/long_number.xml", content)); } void test_short_number() @@ -199,7 +199,7 @@ public: auto ws = wb.create_sheet(); ws.get_cell("A1") = 1234567890; auto content = xlnt::writer::write_worksheet(ws, {}, {}); - TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/short_number.xml", content)); + TS_ASSERT(Helper::EqualsFileContent(PathHelper::GetDataDirectory() + "/writer/expected/short_number.xml", content)); } private: