diff --git a/.gitignore b/.gitignore index dbf260e9a..f0bd4bd1e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ *.gal *.pyc -.vscode/ deps/ swig/*.gwt @@ -31,6 +30,7 @@ BuildTools/windows/GeoDa.vcxproj.filters BuildTools/macosx/libraries/ BuildTools/macosx/libraries1/ BuildTools/macosx/libraries108/ +BuildTools/macosx/DerivedData/ BuildTools/macosx/temp/ BuildTools/macosx/temp1/ BuildTools/macosx/temp108/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..ddaf995e0 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,32 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/BuildTools/ubuntu/build/GeoDa", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "LD_LIBRARY_PATH", + "value": "${workspaceFolder}/BuildTools/ubuntu/build/plugins" + } + ], + "externalConsole": true, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/Algorithms/DataUtils.h b/Algorithms/DataUtils.h index 33cc50ffd..0ba2287b5 100644 --- a/Algorithms/DataUtils.h +++ b/Algorithms/DataUtils.h @@ -11,12 +11,174 @@ #include #include // std::max +#include "threadpool.h" +#include "rng.h" #include "../GdaConst.h" #include "../ShapeOperations/GalWeight.h" using namespace std; +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +/// DistMatrix +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class DistMatrix +{ +protected: + std::vector ids; + bool has_ids; +public: + DistMatrix(const std::vector& _ids=std::vector()) + : ids(_ids), has_ids(!_ids.empty()) {} + virtual ~DistMatrix() {} + // Get distance between i-th and j-th object + // if ids vector is provided, the distance (i,j) -> distance(ids[i], ids[j]) + virtual double getDistance(int i, int j) = 0; + virtual void setIds(const std::vector& _ids) { + ids = _ids; + has_ids = !ids.empty(); + } +}; + +/* +class RowWiseDistMatrix : public DistMatrix +{ + double** dist; + char dist_method; + int num_vars; + int num_rows; + const std::vector >& data; +public: + RowWiseDistMatrix(const double** const input_data, + const std::vector& _ids=std::vector()) + : data(_data), DistMatrix(_ids) + { + thread_pool pool; + for (size_t i=0; i j ? i : j; + int c = i < j ? i : j; + int idx = n - (num_obs - c - 1) * (num_obs - c) / 2 + (r -c) -1 ; + return dist[idx]; + } + + void compute_dist(size_t i) + { + for (size_t j=i+1; j < num_rows; ++j) { + double val = 0, var_dist = 0; + if (dist_method == 'm') { + for (size_t v=0; v < num_vars; ++v) { + val += fabs(data[v][i] - data[v][j]); + } + var_dist = sqrt(val); + } else { + // euclidean as default 'e' + for (size_t v=0; v < num_vars; ++v) { + val = data[v][i] - data[v][j]; + var_dist += val * val; + } + var_dist = sqrt(var_dist); + } + } + } +}; +*/ + +class RawDistMatrix : public DistMatrix +{ + double** dist; +public: + RawDistMatrix(double** dist, const std::vector& _ids=std::vector()) + : DistMatrix(_ids), dist(dist) {} + virtual ~RawDistMatrix() {} + virtual double getDistance(int i, int j) { + if (i == j) return 0; + if (has_ids) { + i = ids[i]; + j = ids[j]; + } + // lower part triangle + int r = i > j ? i : j; + int c = i < j ? i : j; + return dist[r][c]; + } +}; + +class RDistMatrix : public DistMatrix +{ + int num_obs; + int n; + const std::vector& dist; +public: + RDistMatrix(int num_obs, const std::vector& dist, const std::vector& _ids=std::vector()) + : DistMatrix(_ids), num_obs(num_obs), dist(dist) { + n = (num_obs - 1) * num_obs / 2; + } + virtual ~RDistMatrix() {} + + virtual double getDistance(int i, int j) { + if (i == j) return 0; + if (has_ids) { + i = ids[i]; + j = ids[j]; + } + // lower part triangle, store column wise + int r = i > j ? i : j; + int c = i < j ? i : j; + int idx = n - (num_obs - c - 1) * (num_obs - c) / 2 + (r -c) -1 ; + return dist[idx]; + } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +/// DataUtils +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + class DataUtils { public: + static void Shuffle(std::vector& arry, Xoroshiro128Random& rng) + { + //random_shuffle + for (int i=arry.size()-1; i>=1; --i) { + int k = rng.nextInt(i+1); + while (k>=i) k = rng.nextInt(i+1); + if (k != i) std::iter_swap(arry.begin() + k, arry.begin()+i); + } + } + + static double ManhattanDistance(const std::vector >& col_data, int p, int q) + { + double d =0; + for (size_t i =0; i& x1, const std::vector& x2) + { + double d =0; + size_t size = x1.size(); + for (size_t i =0; i >& col_data, int p, int q) + { + double d =0, tmp=0; + for (size_t i =0; i& x1, const std::vector& x2) + { + double d =0,tmp=0; + size_t size = x1.size(); + + for (size_t i =0; i& x2) + { + double d =0,tmp=0; + size_t size = x2.size(); + + for (size_t i =0; i >& matrix) { - int n = matrix[0].size(); - int k = matrix.size(); + int n = (int)matrix[0].size(); + int k = (int)matrix.size(); for (int j = 0; j < k; j++) { double avg = 0.0; @@ -58,8 +258,8 @@ class DataUtils { static void multiply(vector >& matrix, double factor) { - int n = matrix[0].size(); - int k = matrix.size(); + int n = (int)matrix[0].size(); + int k = (int)matrix.size(); for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) { matrix[i][j] *= factor; @@ -69,8 +269,8 @@ class DataUtils { static void squareEntries(vector >& matrix) { - int n = matrix[0].size(); - int k = matrix.size(); + int n = (int)matrix[0].size(); + int k = (int)matrix.size(); for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = pow(matrix[i][j], 2.0); @@ -79,7 +279,7 @@ class DataUtils { } static double prod(vector x, vector y) { - int n = x.size(); + int n = (int)x.size(); double val = 0; for (int i=0; i >& matrix, vector >& evecs, vector& evals, int maxiter) { if ( GdaConst::use_gda_user_seed) { - srand(GdaConst::gda_user_seed); + srand((int)GdaConst::gda_user_seed); } - int d = evals.size(); - int k = matrix.size(); + int d = (int)evals.size(); + int k = (int)matrix.size(); //double eps = 1.0E-10; double eps = GdaConst::gda_eigen_tol; for (int m = 0; m < d; m++) { @@ -137,11 +337,11 @@ class DataUtils { static void reverse_eigen(vector >& matrix, vector >& evecs, vector& evals, int maxiter) { if ( GdaConst::use_gda_user_seed) { - srand(GdaConst::gda_user_seed); + srand((int)GdaConst::gda_user_seed); } double rho = largestEigenvalue(matrix); - int d = evals.size(); - int k = matrix.size(); + int d = (int)evals.size(); + int k = (int)matrix.size(); double eps = 1.0E-6; for (int m = 0; m < d; m++) { if (m > 0) @@ -171,10 +371,10 @@ class DataUtils { static double smallestEigenvalue(vector >& matrix) { - int n = matrix.size(); + int n = (int)matrix.size(); double rho = largestEigenvalue(matrix); double eps = 1.0E-6; - int maxiter = 100; + //int maxiter = 100; double lambda = 0.0; vector x(n); for (int i = 0; i < n; i++) @@ -201,9 +401,9 @@ class DataUtils { static double largestEigenvalue(vector >& matrix) { - int n = matrix.size(); + int n = (int)matrix.size(); double eps = 1.0E-6; - int maxiter = 100; + //int maxiter = 100; double lambda = 0.0; vector x(n,1.0); double r = 0.0; @@ -225,10 +425,10 @@ class DataUtils { static void randomize(vector >& matrix) { if ( GdaConst::use_gda_user_seed) { - srand(GdaConst::gda_user_seed); + srand((int)GdaConst::gda_user_seed); } - int k = matrix.size(); - int n = matrix[0].size(); + int k = (int)matrix.size(); + int n = (int)matrix[0].size(); for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = (double) rand() / RAND_MAX; @@ -237,8 +437,8 @@ class DataUtils { } static vector landmarkIndices(vector >& matrix) { - int k = matrix.size(); - int n = matrix[0].size(); + int k = (int)matrix.size(); + int n = (int)matrix[0].size(); vector result(k); for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) { @@ -251,8 +451,8 @@ class DataUtils { } static vector > copyMatrix(vector >& matrix) { - int k = matrix.size(); - int n = matrix[0].size(); + int k = (int)matrix.size(); + int n = (int)matrix[0].size(); vector > copy(k); for (int i = 0; i < k; i++) { @@ -322,7 +522,7 @@ class DataUtils { return result; } - static double* getContiguityPairWiseDistance(GalElement* w, double** matrix, int n, int k, double dist(double* , double* , size_t)) + static double* getContiguityPairWiseDistance(GalElement* w, double** matrix, double* weight, int n, int k, double dist(double* , double* , size_t, double*)) { unsigned long long _n = n; @@ -332,7 +532,7 @@ class DataUtils { for (int i=0; i >& d, vector >& result) { - int k = d.size(); - int n = d[0].size(); + int k = (int)d.size(); + int n = (int)d[0].size(); for (int i = 0; i < k; i++) { for (int j = 0; j <= i; j++) { double sum = 0.0; @@ -376,9 +576,9 @@ class DataUtils { static void svd(vector >& matrix, vector >& svecs, vector& svals, int maxiter=100) { - int k = matrix.size(); - int n = matrix[0].size(); - int d = svecs.size(); + int k = (int)matrix.size(); + int n = (int)matrix[0].size(); + int d = (int)svecs.size(); for (int m = 0; m < d; m++) svals[m] = normalize(svecs[m]); vector > K(k); @@ -426,8 +626,7 @@ class DataUtils { static vector > landmarkMatrix(vector >& matrix) { - int k = matrix.size(); - int n = matrix[0].size(); + int k = (int)matrix.size(); vector > result(k); for (int i=0; i >& x, vector >& D) { - int n = x[0].size(); - int d = x.size(); + int n = (int)x[0].size(); + int d = (int)x.size(); double xysum = 0.0; double dsum = 0.0; for (int i = 0; i < n; i++) { diff --git a/Algorithms/GNUmakefile b/Algorithms/GNUmakefile index e72fae931..4445c8641 100644 --- a/Algorithms/GNUmakefile +++ b/Algorithms/GNUmakefile @@ -6,8 +6,10 @@ include ../GeoDamake.opt CPPFLAGS := $(CPPFLAGS) CXXFLAGS := $(CXXFLAGS) +C_SRCS := $(wildcard *.c) CXX_SRCS := $(wildcard *.cpp) -OBJ := ${CXX_SRCS:.cpp=.o} + +OBJ := ${CXX_SRCS:.cpp=.o} ${C_SRCS:.c=.o} default: $(O_OBJ:.o=.$(OBJ_EXT)) diff --git a/Algorithms/README.md b/Algorithms/README.md new file mode 100644 index 000000000..0094022db --- /dev/null +++ b/Algorithms/README.md @@ -0,0 +1 @@ +https://www.netlib.org/a/dloess diff --git a/Algorithms/S.h b/Algorithms/S.h new file mode 100755 index 000000000..5ecfff0cb --- /dev/null +++ b/Algorithms/S.h @@ -0,0 +1,35 @@ +#include +#include + +#ifndef __LOESS_S__ +#define __LOESS_S__ + +#define Calloc(n,t) (t *)calloc((unsigned)(n),sizeof(t)) +#define Free(p) free((char *)(p)) + +/* the mapping from f77 to C intermediate code -- may be machine dependent + * the first definition satisfies lint's narrowminded preprocessing & should + * stay the same for all implementations. The __STDC__ definition is for + * ANSI standard conforming C compilers. The #else definition should + * generate the version of the fortran subroutine & common block names x + * handed to the local loader; e.g., "x_" in system V, Berkeley & 9th edition + */ + +#ifdef lint +#define F77_SUB(x) x +#define F77_COM(x) x +#else +#ifdef __STDC__ +#define F77_SUB(x) x##_ +#define F77_COM(x) x##_ +#else +#define F77_SUB(x) x_ +#define F77_COM(x) x_ +#endif +#endif + +#define NULL_ENTRY ((int *)NULL) + +#endif + + diff --git a/Algorithms/azp.cpp b/Algorithms/azp.cpp new file mode 100644 index 000000000..b1cd3370b --- /dev/null +++ b/Algorithms/azp.cpp @@ -0,0 +1,1424 @@ +#include +#include +#include +#include + +#include "DataUtils.h" +#include "azp.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// ZoneControl +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ZoneControl::ZoneControl(const std::vector& in_data) +: data(in_data) +{ +} + +ZoneControl::~ZoneControl() +{ +} + +void ZoneControl::AddControl(Operation op, Comparator cmp, const double& val) +{ + operations.push_back(op); + comparators.push_back(cmp); + comp_values.push_back(val); +} + +bool ZoneControl::CheckRemove(int area, boost::unordered_map& candidates) +{ + bool is_valid = true; // default true since no check will yield good cands + boost::unordered_map::iterator it; + for (size_t i=0; i< comparators.size(); ++i) { + if (comparators[i] != MORE_THAN) { + continue; + } + + // get zone value for comparison + double zone_val = 0; + if (operations[i] == SUM) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[ it->first ]; + } + sum -= data[area]; + zone_val = sum; + } else if (operations[i] == MEAN) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[it->first]; + } + sum -= data[area]; + double mean = sum / (double) (candidates.size() - 1); + zone_val = mean; + } else if (operations[i] == MAX) { + double max = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (max < data[it->first] && it->first != area) { + max = data[it->first]; + } + } + zone_val = max; + } else if (operations[i] == MIN) { + double min = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (min > data[it->first] && it->first != area) { + min = data[it->first]; + } + } + zone_val = min; + } + + // compare zone value + if (comparators[i] == MORE_THAN) { + if (zone_val <= comp_values[i]) { + return false; + } + } + } + return is_valid; +} + +bool ZoneControl::CheckAdd(int area, boost::unordered_map& candidates) +{ + bool is_valid = true; // default true since no check will yield good cands + boost::unordered_map::iterator it; + for (size_t i=0; i< comparators.size(); ++i) { + if (comparators[i] != LESS_THAN) { + continue; + } + + // get zone value for comparison + double zone_val = 0; + if (operations[i] == SUM) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[ it->first ]; + } + sum += data[area]; + zone_val = sum; + } else if (operations[i] == MEAN) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[it->first]; + } + sum += data[area]; + double mean = sum / (double) (candidates.size() + 1); + zone_val = mean; + } else if (operations[i] == MAX) { + double max = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (max < data[it->first]) { + max = data[it->first]; + } + } + if (max < data[area]) { + max = data[area]; + } + zone_val = max; + } else if (operations[i] == MIN) { + double min = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (min > data[it->first]) { + min = data[it->first]; + } + } + if (min > data[area]) { + min = data[area]; + } + zone_val = min; + } + + // compare zone value + if (comparators[i] == LESS_THAN) { + if (zone_val >= comp_values[i]) { + return false; + } + } + } + return is_valid; +} + +double ZoneControl::getZoneValue(int i, boost::unordered_map& candidates) +{ + // get zone value for comparison + double zone_val = 0; + boost::unordered_map::iterator it; + if (operations[i] == SUM) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[ it->first ]; + } + zone_val = sum; + } else if (operations[i] == MEAN) { + double sum = 0; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + sum += data[it->first]; + } + double mean = sum / (double) candidates.size(); + zone_val = mean; + } else if (operations[i] == MAX) { + double max = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (max < data[it->first]) { + max = data[it->first]; + } + } + zone_val = max; + } else if (operations[i] == MIN) { + double min = data[candidates[0]]; + for (it=candidates.begin(); it!=candidates.end(); ++it) { + if (min > data[it->first]) { + min = data[it->first]; + } + } + zone_val = min; + } + return zone_val; +} + +bool ZoneControl::SatisfyLowerBound(boost::unordered_map& candidates) +{ + bool is_valid = true; // default true since no check will yield good cands + boost::unordered_map::iterator it; + + for (size_t i=0; i< comparators.size(); ++i) { + if (comparators[i] != MORE_THAN) { + continue; + } + + // get zone value for comparison + double zone_val = getZoneValue(i, candidates); + // compare zone value + if (comparators[i] == MORE_THAN) { + if (zone_val < comp_values[i]) { + return false; // not yet satisfy lower bound + } + } + } + return is_valid; +} + +bool ZoneControl::CheckBound(boost::unordered_map& candidates) +{ + bool is_valid = true; // default true since no check will yield good cands + boost::unordered_map::iterator it; + + for (size_t i=0; i< comparators.size(); ++i) { + + // get zone value for comparison + double zone_val = getZoneValue(i, candidates); + + // compare zone value + if (comparators[i] == MORE_THAN) { + if (zone_val < comp_values[i]) { + return false; // not yet satisfy lower bound + } + } else if (comparators[i] == LESS_THAN) { + if (zone_val > comp_values[i]) { + return false; // not yet satisfy lower bound + } + } + } + return is_valid; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// AreaManager +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +AreaManager::AreaManager(int _n, int _m, GalElement* const _w, double** _data, DistMatrix* const _dist_matrix) +: n(_n), m(_m), w(_w), data(_data), dist_matrix(_dist_matrix) +{ +} + +double AreaManager::returnDistance2Area(int i, int j) +{ + return dist_matrix->getDistance(i, j); +} + +std::vector AreaManager::getDataAverage(const std::set& areaList) +{ + return std::vector(); +} + +double AreaManager::getDistance2Region(int area, int region, REGION_AREAS& regions) +{ + std::vector d(m,0); + for (int i=0; i& centroidRegion = region_centroids[region]; + + // get distance between area and region + double dist = DataUtils::EuclideanDistance(d, centroidRegion); + + return dist; +} + +void AreaManager::updateRegionCentroids(int region, REGION_AREAS& regions) +{ + boost::unordered_map& areaList = regions[region]; + std::vector centroid(m, 0); + boost::unordered_map::iterator it; + for (it = areaList.begin(); it != areaList.end(); ++it) { + int area_id = it->first; + for (int j=0; j& c, + const std::vector& _init_regions, + long long seed) +: p(_p), w(_w), data(_data), dist_matrix(_dist_matrix), n(_n), m(_m), controls(c), +am(_n, _m, _w, _data, _dist_matrix), objInfo(-1), init_regions(_init_regions), +rng(seed), is_control_satisfied(true) +{ + if (p < 0) { + is_control_satisfied = false; + return; + } + + // init unassigned areas + for (int i=0; i seeds = this->kmeansInit(); + + // for replicate clusterpy: CA_polygons + // calif.cluster('azp', ['PCR2002'], 9, wType='rook', dissolve=1) + // [31, 38, 37, 28, 20, 29, 17, 50, 55] + //seeds[0] = 31; seeds[1] = 38; seeds[2] = 37; seeds[3]=28; seeds[4]=20; + //seeds[5] = 29; seeds[6] = 17; seeds[7] = 50; seeds[8] = 55; + + // process and assign the neighbors of p starting areas + this->setSeeds(seeds); + + // for any other unassigned areas, assign to a region + while (unassignedAreas.size() != 0) { + this->constructRegions(); + } + + // create objectiveFunction object for local improvement + objective_function = new ObjectiveFunction(n, m, data, w, region2Area); + + // get objective function value + this->objInfo = objective_function->GetValue(); + + } else { + // // get p start areas using init_regions from input + InitFromRegion(init_regions); + } +} + + +RegionMaker::~RegionMaker() +{ + if (objective_function) { + delete objective_function; + } +} + +void RegionMaker::InitFromRegion(std::vector& init_regions) +{ + // check init regions, index start from 1 + for (int i=0; i 0 && init_regions[i] <= p) { + int areaID = i; + int regionID = init_regions[i] - 1; + assignAreaStep1(areaID, regionID); + } + } + // for any unassigned areas, create potentialRegions4Area + if (unassignedAreas.size() != 0) { + for (int r=0; r buffer_areas = getBufferingAreas(region2Area[r]); + std::set::iterator it; + for (it = buffer_areas.begin(); it != buffer_areas.end(); ++it) { + int areaID = *it; + if (unassignedAreas.find(areaID) != unassignedAreas.end()) { + potentialRegions4Area[areaID].insert(r); + } + } + } + } + + // for any other unassigned areas, assign to a region + while (unassignedAreas.size() != 0) { + this->constructRegions(); + } + + // create objectiveFunction object for local improvement + objective_function = new ObjectiveFunction(n, m, data, w, region2Area); + + // get objective function value + this->objInfo = objective_function->GetValue(); +} + +void RegionMaker::AssignAreasNoNeighs() +{ + // w should not be NULL + for (int i=0; i RegionMaker::kmeansInit() +{ + //Initial p starting observations using K-Means + std::vector probabilities(n, 0); + std::vector distances(n, 1); + double total = n; + for (int j=0; j seeds; + for (int i=0; i < p; ++i) { + double random = rng.nextDouble(); + //std::cout << random << std::endl; + bool find = false; + double acum = 0; + int cont = 0; + while (find == false) { + double inf = acum; + double sup = acum + probabilities[cont]; + if (inf <= random && random <= sup) { + find = true; + seeds.push_back(cont); + // for each observation/area, find which seed is the closest + total = 0; + for (int j=0; jgetDistance(j, seeds[k]); + if (k==0) distancei = d; + else if (d < distancei) { + distancei = d; + } + } + total += distancei; // get a sum of new distances + distances[j] = distancei; + } + for (int j=0; jsecond) == false) { + return false; + } + } + } + return true; +} + +void RegionMaker::setSeeds(std::vector seeds) +{ + // Sets the initial seeds for clustering + if (seeds.size() < p) { + // pick more to fill up seeds + std::vector didx(n, true); + // remove seeds, and neighborless observations + for (int i=0; i cands; + for (int i=0; i 0) { + bool grow_flag = growRegion(); + + if (grow_flag == false) { + // raise exception + is_control_satisfied = false; + } + } + + // find potential + for (int i=0; i buffer_areas = getBufferingAreas(region2Area[i]); + std::set::iterator it; + + for (it = buffer_areas.begin(); it != buffer_areas.end(); ++it) { + int neigh = *it; + if (assignedAreas.find(neigh) == assignedAreas.end()) { + potentialRegions4Area[neigh].insert(i); + } + } + } +} + +bool RegionMaker::growRegion() +{ + bool is_valid = false; + + std::map grow_flags; + for (int i=0; i< p; ++i) grow_flags[i] = true; + + std::set::iterator it; + while (is_valid == false) { + is_valid = true; + for (int i=0; i< p; ++i) { + // check if grow is needed + if (grow_flags[i] == false) { + continue; + } + // still need to grow + is_valid = false; + + // each time, grow just one area, to avoid dominant grow + // if two seeds are next to each other + bool has_assign = false; + std::set buffer_areas = getBufferingAreas(region2Area[i]); + for (it = buffer_areas.begin(); !has_assign && it != buffer_areas.end(); ++it){ + int nn = *it; + if (assignedAreas.find(nn) == assignedAreas.end()) { + assignAreaStep1(nn, i); + has_assign = true; + } + } + // check if this region satisfy the low bounds + bool satisfy = true; + for (int j=0; satisfy && j& nbrs = w[areaID].GetNbrs(); + for (int i=0; i >::iterator it; + std::set::iterator rit, ait; + + // Process the most feasible area that has shortest distance to a region + + for (it=potentialRegions4Area.begin(); it != potentialRegions4Area.end(); ++it) { + int areaID = it->first; + const std::set& regionIDs = it->second; + + for (rit = regionIDs.begin(); rit != regionIDs.end(); ++rit) { + int region = *rit; + std::pair a_r = std::make_pair(areaID, region); + double regionDistance = am.getDistance2Region(areaID, region, region2Area); + // (areaID, region): distance + candidateInfo[a_r] = regionDistance; + } + } + + if (candidateInfo.empty() == false) { + + // Select and assign the nearest area to a region + // minimumSelection(RegionMaker) + // if there are more than one (area, region) pair + // random select from cands + + std::vector > cands; + std::map, double>::iterator cit; + + // get min dist + double min_region_distance = std::numeric_limits::max(); + for (cit = candidateInfo.begin(); cit != candidateInfo.end(); ++cit) { + if (cit->second < min_region_distance) { + min_region_distance = cit->second; + } + } + // get all pairs with min dist + for (cit = candidateInfo.begin(); cit != candidateInfo.end(); ++cit) { + if (cit->second == min_region_distance) { + cands.push_back(cit->first); + } + } + + // if random select candidate from pairs is needed + int rnd_sel = cands.size() == 1? 0 : rng.nextInt((int)cands.size()); + std::pair& sel_area_region = cands[rnd_sel]; + int aid = sel_area_region.first; + int rid = sel_area_region.second; + + // assign select areaID to regionID, and process the neighbors of areaID + // update the centroid of the regionID + if (this->assignArea(aid, rid)) { + + // remove from candidateInfo with areaID=aid + std::vector > removed_cands; + for (cit = candidateInfo.begin(); cit != candidateInfo.end(); ++cit) { + if (cit->first.first == aid) { + removed_cands.push_back(cit->first); + } + } + for (int i=0; iassignAreaStep1(areaID, regionID); + + //for neigh in self.neighsMinusAssigned: + // assign regionID as a potential region for neigh + const std::vector& neighs = this->w[areaID].GetNbrs(); + for (int i=0; i< neighs.size(); ++i) { + int nn = (int)neighs[i]; + if (assignedAreas.find(nn) == assignedAreas.end()) { + // for not yet assigned neighbor + potentialRegions4Area[nn].insert(regionID); + } + } + // remove areaID since its processed + potentialRegions4Area.erase(areaID); + + // update centroid of the region + am.updateRegionCentroids(regionID, region2Area); + + return true; +} + +std::vector RegionMaker::returnRegions() +{ + std::vector areasId, results; + boost::unordered_map::iterator it; + // area2Region is already sorted by key + for (it = area2Region.begin(); it != area2Region.end(); ++it) { + areasId.push_back( it->first ); + } + std::sort(areasId.begin(), areasId.end()); + for (int i=0; i RegionMaker::getBufferingAreas(boost::unordered_map& areas) +{ + std::set buffering_areas; + + //boost::unordered_map& areas = region2Area[regionID]; + boost::unordered_map::iterator it; + for (it = areas.begin(); it != areas.end(); ++it) { + int area = it->first; + const std::vector& nn = w[area].GetNbrs(); + for (int i=0; i& areas = region2Area[regionID]; + boost::unordered_map::iterator it; + for (it = areas.begin(); it != areas.end(); ++it) { + int area = it->first; + const std::vector& nn = w[area].GetNbrs(); + areas[area] = false; // not a border area by default + for (int i=0; i RegionMaker::getPossibleMove(int area) +{ + std::set moves; + int myRegion = area2Region[area]; + + // Check if moving area out of myRegion satisfy controls + for (int i=0; i& nn = w[area].GetNbrs(); + for (int i=0; i(); + } + } + moves.insert(nbrRegion); + } + } + return moves; +} +//////////////////////////////////////////////////////////////////////////////// +////// AZP +//////////////////////////////////////////////////////////////////////////////// +void AZP::LocalImproving() +{ + // NOTE: this could be parallelized: when one thread update region A + // and A exchanges area with another region B, only the threads interact + // with region B should wait and other threads can run parallely to update + // regions C,D,E... However, the mutex lock should be carefully designed... + + int improve = 1; + //std::vector rand_test = {7,4,3,5,3,3,1,1,0,3,3,2,3,4,2,0,0,0}; + //std::vector rand_test1 = {57, 56, 52, 24, 16, 10, 3, 24, 51, 57, 22, 57, 46, 11, 46, 52, 50, 46, 10, 52, 24, 57, 3, 51, 7, 5, 20, 30, 28, 8, 26, 39, 43, 18, 55, 41, 36, 29, 17, 0, 56, 33, 35, 1, 23, 9, 32, 22, 2, 49, 15, 11, 48, 14, 16, 50, 34, 12, 42, 40, 31, 45, 44, 31, 30, 28, 8, 20, 40, 42, 17, 41, 18, 26, 55, 43, 39, 29, 36, 44, 31, 14, 11, 16, 2, 48, 0, 1, 15, 35, 50, 12, 23, 9, 49, 33, 32, 34, 56, 22, 24, 7, 45, 57, 10, 51, 5, 3, 46, 52}; + //int rr = 0, rr1 = 0; + while (improve == 1) { + std::vector regions(p); + for (int i=0; i 0) { + // step 3 + int randomRegion = 0; + if (regions.size() > 1) { + randomRegion = rng.nextInt((int)regions.size()); + } + //randomRegion = rand_test[rr++]; + int region = regions[randomRegion]; + regions.erase(std::find(regions.begin(), regions.end(), region)); + + // step 4 + // get bordering areas in region + getBorderingAreas(region); + + boost::unordered_map& areas = region2Area[region]; + boost::unordered_map::iterator area_it; + std::set::iterator move_it; + improve = 0; + + while (areas.size() > 1) { + // step 5 + bool nothing_can_do = true; + bool moved = false; + for (area_it = areas.begin(); !moved && area_it != areas.end(); ++area_it) { + if (area_it->second == true) { // only procee the bordering area + nothing_can_do = false; + // pick a random bordering area, mark it as processed + int randomArea = area_it->first; + areas[randomArea] = false; + // get possible move of this randomArea + std::set possibleMove = getPossibleMove(randomArea); + // check obj change before contiguity check + for (move_it = possibleMove.begin(); + !moved && move_it != possibleMove.end(); + ++move_it) + { + int move = *move_it; + // request lock for region[move], pause threads[move] + //std::pair swap = objective_function->TrySwap(randomArea, region, move); + //double delta = swap.first; + //bool swapped = swap.second; + //if (swapped) { + std::pair swap = objective_function->TrySwapSA(randomArea, region, move, this->objInfo); + double obj = swap.first; + bool contiguous = swap.second; + if (obj <= this->objInfo && contiguous) { + improve = 1; + moved = true; + + this->area2Region[randomArea] = move; + this->objInfo = obj; + + // move happens, update bordering area + getBorderingAreas(region); + //getBorderingAreas(move); + + //std::cout << "--- Local improvement (area, region)" << randomArea << "," << move << std::endl; + //std::cout << "--- New Objective Function value: " << this->objInfo << std::endl; + + } + // release lock for region[move], awake threads[move] + } + } + } + if (nothing_can_do) { + break; + } + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +////// MaxpRegionMaker +//////////////////////////////////////////////////////////////////////////////// +MaxpRegionMaker::MaxpRegionMaker(GalElement* const _w, + double** _data, // row-wise + RawDistMatrix* _dist_matrix, + int _n, int _m, const std::vector& c, + const std::vector& _init_areas, + long long seed) +: RegionMaker(-1, _w, _data, _dist_matrix, _n, _m, c, std::vector(), seed), +init_areas(_init_areas) +{ + InitSolution(); +} + +void MaxpRegionMaker::InitSolution() +{ + // init unassigned areas + for (int i=0; i start_areas; + for (int i=0; i _candidates; + for (int i=0; i < n; i++) { + if (start_areas.empty() || start_areas.find(i) == start_areas.end()) { + _candidates.push_back(i); + } + } + DataUtils::Shuffle(_candidates, rng); + for (int i=0; i candidates; + boost::unordered_map candidates_dict; + for (int i=0; i::iterator it; + + // assign this seed with a new region + boost::unordered_map region; + region[seed] = true; + candidates_dict[seed] = true; + + while (is_growing && !reach_ub && !reach_lb) { + // each time, grow just one area, to avoid dominant grow + // if two seeds are next to each other + bool has_assign = false; + std::set buffer_areas = getBufferingAreas(region); + for (it = buffer_areas.begin(); !has_assign && it != buffer_areas.end(); ++it) { + int nn = *it; + if (candidates_dict[nn] == false) { // not processed + // check upper bound if adding this area to region + for (int j=0; !reach_ub && j::iterator rit; + for (rit = region.begin(); rit != region.end(); ++rit) { + assignAreaStep1(rit->first, r); + } + r = r + 1; // create another region + } + } + std::cout << r << std::endl; + // find potential + if (unassignedAreas.size() > 0) { + for (int i=0; i buffer_areas = getBufferingAreas(region2Area[i]); + std::set::iterator it; + + for (it = buffer_areas.begin(); it != buffer_areas.end(); ++it) { + int neigh = *it; + if (assignedAreas.find(neigh) == assignedAreas.end()) { + potentialRegions4Area[neigh].insert(i); + } + } + } + } + + // for any other unassigned areas (enclaves), assign to a region + while (unassignedAreas.size() != 0) { + this->constructRegions(); + } + + // now we have p regions + p = (int)region2Area.size(); + + // create objectiveFunction object for local improvement + objective_function = new ObjectiveFunction(n, m, data, w, region2Area); + + // get objective function value + this->objInfo = objective_function->GetValue(); +} + +//////////////////////////////////////////////////////////////////////////////// +////// MaxpRegion +//////////////////////////////////////////////////////////////////////////////// +MaxpRegion::MaxpRegion(int _max_attemps, GalElement* const _w, + double** _data, // row-wise + RawDistMatrix* _dist_matrix, + int _n, int _m, const std::vector& c, + const std::vector& _init_areas, + long long seed) +: RegionMaker(-1, _w, _data, _dist_matrix, _n, _m, c, std::vector(), seed), +init_areas(_init_areas), max_attemps(_max_attemps) +{ + objective_function = 0; + + // try to grow max-p regions + MaxpRegionMaker rm(w, data, dist_matrix, n, m, c, init_areas, seed++); + std::vector best_results = rm.GetResults(); + double best_of = rm.GetFinalObjectiveFunction(); + p = rm.GetPRegions(); + + initial_objectivefunction = best_of; + final_objectivefunction = best_of; + final_solution = best_results; + + for (int iter=0; iter< 99; ++iter) { + bool solving = true; // if it is improving // just need to be better than first initial solution + int attemps = 0; + std::vector solution; + + while (solving && attemps < max_attemps) { + MaxpRegionMaker rm_local(w, data, dist_matrix, n, m, c, init_areas, seed++); + std::vector results = rm_local.GetResults(); + double of = rm_local.GetFinalObjectiveFunction(); + if (of < initial_objectivefunction) { + solving = false; + solution = results; + p = rm_local.GetPRegions(); + } + attemps += 1; + } + + if (solving == false) { + // try local improvement + for (int i=0; i results = azp.GetResults(); + double init_of = azp.GetInitObjectiveFunction(); + double of = azp.GetFinalObjectiveFunction(); + if (of < best_of) { + best_results = results; + best_of = of; // update best_of + } + } + } + + final_objectivefunction = best_of; + final_solution = best_results; +} + +//////////////////////////////////////////////////////////////////////////////// +////// AZP Simulated Annealing +//////////////////////////////////////////////////////////////////////////////// +void AZPSA::LocalImproving() +{ + // Openshaw's Simulated Annealing for AZP algorithm + int totalMoves = 0; + int acceptedMoves = 0; + double bestOBJ = this->objInfo; + double currentOBJ = this->objInfo; + std::vector bestRegions = this->returnRegions(); + std::vector currentRegions = this->returnRegions(); + REGION_AREAS region2AreaBest = this->region2Area; + boost::unordered_map area2RegionBest = this->area2Region; + std::set::iterator it; + + int improve = 1; + while (improve == 1) { + std::vector regions(p); + for (int i=0; i 0) { + // step 3 + int randomRegion = 0; + if (regions.size() > 1) { + randomRegion = rng.nextInt((int)regions.size()); + } + //randomRegion = rand_test[rr++]; + int region = regions[randomRegion]; + regions.erase(std::find(regions.begin(), regions.end(), region)); + + // step 4 + // get bordering areas in region + getBorderingAreas(region); + + boost::unordered_map& areas = region2Area[region]; + boost::unordered_map::iterator area_it; + std::set::iterator move_it; + improve = 0; + + while (areas.size() > 1) { + // step 5 + bool nothing_can_do = true; + bool moved = false; + for (area_it = areas.begin(); !moved && area_it != areas.end(); ++area_it) { + if (area_it->second == true) { // only procee the bordering area + nothing_can_do = false; + // pick a random bordering area, mark it as processed + int randomArea = area_it->first; + areas[randomArea] = false; + // get possible move of this randomArea + std::set possibleMove = getPossibleMove(randomArea); + // check obj change before contiguity check + for (move_it = possibleMove.begin(); + !moved && move_it != possibleMove.end(); + ++move_it) + { + int move = *move_it; + // request lock for region[move], pause threads[move] + std::pair swap = objective_function->TrySwapSA(randomArea, region, move, bestOBJ); + double obj = swap.first; + bool contiguous = swap.second; + if (obj <= bestOBJ && contiguous) { // means swapped + improve = 1; + moved = true; + this->area2Region[randomArea] = move; + this->objInfo = obj; + + // update SA variables + bestOBJ= obj; + currentOBJ = obj; + bestRegions = this->returnRegions(); + region2AreaBest = this->region2Area; + area2RegionBest = this->area2Region; + + // move happens, update bordering area + getBorderingAreas(region); + //getBorderingAreas(move); + + //std::cout << "--- Local improvement (area, region)" << randomArea << "," << move << std::endl; + //std::cout << "--- New Objective Function value: " << this->objInfo << std::endl; + // step 4 + } + else if (!(obj <= bestOBJ && contiguous==false)) { // not consider NON-contiguous + contiguous = objective_function->checkFeasibility(region, randomArea); + if (contiguous) { + double random = rng.nextDouble(); + totalMoves += 1; + double sa = std::exp(-(obj - currentOBJ) * n / (currentOBJ * temperature)); + if (sa > random) { + objective_function->MakeMove(randomArea, region, move); + moved = true; + this->area2Region[randomArea] = move; + this->objInfo = obj; + + // update SA variables + acceptedMoves += 1; + currentOBJ = obj; + + // move happens, update bordering area + getBorderingAreas(region); + //getBorderingAreas(move); + + //std::cout << "--- NON-Local improvement (area, region)" << randomArea << "," << move << std::endl; + //std::cout << "--- New Objective Function value: " << currentOBJ << std::endl; + // step 4 + } + } + } + // release lock for region[move], awake threads[move] + } + } + } + if (nothing_can_do) { + break; + } + } + } + } + this->objInfo = bestOBJ; + this->region2Area = region2AreaBest; + this->area2Region = area2RegionBest; +} + +//////////////////////////////////////////////////////////////////////////////// +////// AZP Tabu +//////////////////////////////////////////////////////////////////////////////// + +// Compares two intervals according to staring times. +bool CompareTabu(std::pair, double> i1, + std::pair, double> i2) +{ + return (i1.second < i2.second); +} + + +void AZPTabu::LocalImproving() +{ + // Tabu search algorithm for Openshaws AZP-tabu (1995) + double aspireOBJ = this->objInfo; + double currentOBJ = this->objInfo; + std::vector aspireRegions = this->returnRegions(); + REGION_AREAS region2AreaAspire = this->region2Area; + boost::unordered_map area2RegionAspire = this->area2Region; + std::vector currentRegions = aspireRegions; + + std::vector, double> > tabuList; + boost::unordered_map, double>::iterator it; + + int c = 1; + double epsilon = 1e-10; + + while (c < convTabu) { + this->allCandidates(); + + if (this->neighSolutions.size() == 0) { + c += convTabu; + } else { + int minFound = 0; + c += 1; + + // find global best move + bool find_global = false; + std::pair move; + double obj4Move; + + while (!find_global && !neighSolObjs.empty()) { + double minObj = neighSolObjs.top(); + neighSolObjs.pop(); + for (it = neighSolutions.begin(); it != neighSolutions.end(); ++it) { + if (it->second == minObj) { + // check connectivity + int a = it->first.first; + int from = area2Region[a]; + // move "a" to region "r" + if (objective_function->checkFeasibility(from, a)) { + find_global = true; + move = it->first; + obj4Move = minObj; + break; + } + } + } + } + + if (currentOBJ - obj4Move >= epsilon) { + minFound = 1; + + } else if (tabuList.size() > 0){ + // get from tabu list + std::vector, double> > tabuListCopy = tabuList; + std::sort(tabuListCopy.begin(), tabuListCopy.end(), CompareTabu); + + double min_obj = obj4Move; + for (int i=0; i, double>& m = tabuListCopy[i]; + int a = m.first.first; + int to = m.first.second; + int from = area2Region[a]; + // note: since tabuList is a old record, so area "a" + // may no longer be the "boarding" area, and moving "a" to + // region "to" could 1) breaks "a"'s region, and 2) + // breaks the region "from" + if (objective_function->checkFeasibility(from, a) && + objective_function->checkFeasibility(to, a, false)) { + min_obj = m.second; + move = m.first; + break; + } + } + obj4Move = min_obj; + if (aspireOBJ - obj4Move >= epsilon) { + minFound = 1; + } + } + + int area = move.first; + int oldRegion = area2Region[area]; + int region = move.second; + + // Add a new value to the tabu list. + // always added to the front and remove the last one + std::pair add_tabu(area, oldRegion); + tabuList.insert(tabuList.begin(), std::make_pair(add_tabu, obj4Move)); + if (tabuList.size() > tabuLength) tabuList.pop_back(); + + // move + region2Area[oldRegion].erase(area); + region2Area[region].insert(std::make_pair(area, true)); + area2Region[area] = region; + + // update + objective_function->UpdateRegion(region); + objective_function->UpdateRegion(oldRegion); + + if (minFound == 1) { + this->objInfo = obj4Move; + if (aspireOBJ - obj4Move > epsilon) { + aspireOBJ = obj4Move; + aspireRegions = this->returnRegions(); + region2AreaAspire = this->region2Area; + area2RegionAspire = this->area2Region; + c = 1; + } + currentOBJ = obj4Move; + currentRegions = this->returnRegions(); + + } else { + + this->objInfo = obj4Move; + currentOBJ = obj4Move; + currentRegions = this->returnRegions(); + } + } + } + this->objInfo = aspireOBJ; + this->regions = aspireRegions; + this->region2Area = region2AreaAspire; + this->area2Region = area2RegionAspire; +} + + +void AZPTabu::allCandidates() +{ + // Select neighboring solutions. + boost::unordered_map::iterator it; + std::set::iterator moves_it; + + neighSolutions.clear(); + neighSolObjs.clear(); + + for (int r=0; r& areas = region2Area[r]; + for (it = areas.begin(); it != areas.end(); ++it) { + int a = it->first; + if (it->second == true) { + // processing boarding area, find possible moves + std::set moves = getPossibleMove(a); + for (moves_it = moves.begin(); moves_it != moves.end(); ++moves_it) { + int move = *moves_it; + double obj = objective_function->TabuSwap(a, r, move); + neighSolutions[std::make_pair(a, move)] = obj; + neighSolObjs.push(obj); + } + } + } + } + +} + +void AZPTabu::updateNeighSolution(int area, int from, int to) +{ + // rebuild neighSolutions that related to region "from" and "to" + std::vector > removed_keys; + + boost::unordered_map, double>::iterator it; + for (it = neighSolutions.begin(); it != neighSolutions.end(); ++it) { + if (it->first.second == from || it ->first.second == to) { + removed_keys.push_back(it->first); + } + } + + for (int i=0; i::iterator ait; + std::set::iterator moves_it; + + std::vector rr; + rr.push_back(from); + rr.push_back(to); + + for (int i=0; i& areas = region2Area[r]; + for (ait = areas.begin(); ait != areas.end(); ++ait) { + int a = ait->first; + if (ait->second == true) { // boarding area + std::set moves = getPossibleMove(a); + for (moves_it = moves.begin(); moves_it != moves.end(); ++moves_it) { + int move = *moves_it; + if (a != area) { // ignore already just moved area + double obj = objective_function->TabuSwap(a, r, move); + neighSolutions[std::make_pair(a, move)] = obj; + } + } + } + } + } + + neighSolObjs.clear(); + for (it = neighSolutions.begin(); it != neighSolutions.end(); ++it) { + neighSolObjs.push(it->second); + } +} diff --git a/Algorithms/azp.h b/Algorithms/azp.h new file mode 100644 index 000000000..bd518232b --- /dev/null +++ b/Algorithms/azp.h @@ -0,0 +1,806 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Created: 8/22/2017 lixun910@gmail.com + */ + +#ifndef __GEODA_CENTER_AZP_H__ +#define __GEODA_CENTER_AZP_H__ + +#include +#include +#include +#include +#include + +//#include + +#include "../ShapeOperations/GalWeight.h" +#include "rng.h" +#include "DataUtils.h" + +typedef boost::unordered_map > REGION_AREAS; + +//////////////////////////////////////////////////////////////////////////////// +////// ZoneControl +//////////////////////////////////////////////////////////////////////////////// +class ZoneControl { +public: + // A ZoneControl is for one variable (e.g. population), and it contains + // the values of the variable + ZoneControl(const std::vector& in_data); + ZoneControl(int n, double* in_data) { + for (int i=0; i& candidates); + + bool CheckBound(boost::unordered_map& candidates); + + bool CheckRemove(int area, boost::unordered_map& candidates); + + // Check if a candidate zone satisfies upper bound when adding a area + bool CheckAdd(int area, boost::unordered_map& candidates); + + double getZoneValue(int i, boost::unordered_map& candidates); + +protected: + std::vector data; + + std::vector operations; + + std::vector comparators; + + std::vector comp_values; +}; + +//////////////////////////////////////////////////////////////////////////////// +/// AreaManager +//////////////////////////////////////////////////////////////////////////////// + +// This class contains operations at areal level, including the generation of +// instances of areas, a wide range of area2area and area2region distance +// functions. +class AreaManager +{ +public: + AreaManager(int n, int m, GalElement* const w, double** data, DistMatrix* const dist_matrix); + + virtual ~AreaManager() {} + + // Returns the distance between two areas + double returnDistance2Area(int i, int j); + + // Returns the attribute centroid of a set of areas + std::vector getDataAverage(const std::set& areaList); + + // Returns the distance from an area to a region (centroid) + double getDistance2Region(int area, int region, REGION_AREAS& regions); + + // update the centroid if region changed (remove/add area) + void updateRegionCentroids(int region, REGION_AREAS& regions); + +protected: + // n: number of observations + int n; + + // m is the dimension of the variable space + int m; + + // w defines the weights structure, who's who's neighbor + GalElement* w; + + // distance matrix between obs i and j: getDistance(i, j) + DistMatrix* dist_matrix; + + double** data; + + // cache the cetnroids for regions, any change of the region should + // call updateRegionCentroids() + std::map > region_centroids; + +}; + +//////////////////////////////////////////////////////////////////////////////// +/// ObjectiveFunction +//////////////////////////////////////////////////////////////////////////////// +// ObjectiveFunction: the target of the AZP is to minimize the objective function +// of clustering results. E.g. sum of squares +class ObjectiveFunction +{ +public: + ObjectiveFunction(int _n, int _m, double** _data, GalElement* _w, REGION_AREAS& _regions) + : n(_n), m(_m), data(_data), w(_w), regions(_regions) {} + virtual ~ObjectiveFunction() {} + + virtual double GetValue() { + // Calculate the value of the objective function + double ss = 0; // e.g. sum of squares + REGION_AREAS::iterator it; + for (it = regions.begin(); it != regions.end(); ++it) { + int region = it->first; + if (region_of.find(region) == region_of.end()) { + // objective function of region needs to be computed + double obj = getObjectiveValue(regions[region]); + region_of[region] = obj; + } + ss += region_of[region]; + } + return ss; + } + + virtual void UpdateRegions() { + // region changes, update it's + REGION_AREAS::iterator it; + for (it = regions.begin(); it != regions.end(); ++it) { + int region = it->first; + double obj = getObjectiveValue(regions[region]); + region_of[region] = obj; + } + } + + virtual void UpdateRegion(int region) { + // region changes, update it's + REGION_AREAS::iterator it; + for (it = regions.begin(); it != regions.end(); ++it) { + int r = it->first; + if (r == region) { + double obj = getObjectiveValue(regions[region]); + region_of[region] = obj; + } + } + } + + virtual double getObjectiveValue(boost::unordered_map& areas) { + // compute centroid of this set of areas + std::vector dataAvg(m, 0); + boost::unordered_map::iterator sit; + for (sit = areas.begin(); sit != areas.end(); ++sit) { + int idx = sit->first; + for (int j=0; jfirst; + double dist = DataUtils::EuclideanDistance(data[idx], dataAvg); + obj += dist; + } + return obj; + } + + virtual double TabuSwap(int area, int from_region, int to_region) { + // try to swap area to region, compute the value of objective function + // no phyical swap happens + boost::unordered_map from_areas = regions[from_region]; + boost::unordered_map to_areas = regions[to_region]; + from_areas.erase(area); + to_areas[area] = false; + + double ss_from = getObjectiveValue(from_areas); + double ss_to = getObjectiveValue(to_areas); + + double ss = GetValue(); + double delta = ss_from + ss_to - region_of[from_region] - region_of[to_region]; + double new_ss = ss + delta; + + return new_ss; + } + + virtual std::pair TrySwap(int area, int from_region, int to_region) { + // try to swap area to region, compute the value of objective function + // phyical swap could happen if contiguity check is passed + boost::unordered_map from_areas = regions[from_region]; + boost::unordered_map to_areas = regions[to_region]; + from_areas.erase(area); + to_areas[area] = false; + + double ss_from = getObjectiveValue(from_areas); + double ss_to = getObjectiveValue(to_areas); + + double delta = ss_from + ss_to - region_of[from_region] - region_of[to_region]; + if (delta <= 0) { + // improved + if (checkFeasibility(from_region, area)) { + region_of[from_region] = ss_from; + region_of[to_region] = ss_to; + // confirm swap, lock + // update values for two changed regions + regions[from_region] = from_areas; + regions[to_region] = to_areas; + return std::make_pair(delta, true); + } + } + return std::make_pair(delta, false); + } + + virtual std::pair TrySwapSA(int area, int from_region, int to_region, double best_of) { + // try to swap area to region, compute the value of objective function + // phyical swap could happen if contiguity check is passed + boost::unordered_map from_areas = regions[from_region]; + boost::unordered_map to_areas = regions[to_region]; + from_areas.erase(area); + to_areas[area] = false; + + double ss_from = getObjectiveValue(from_areas); + double ss_to = getObjectiveValue(to_areas); + + double ss = GetValue(); + double delta = ss_from + ss_to - region_of[from_region] - region_of[to_region]; + double new_ss = ss + delta; + + if (new_ss <= best_of) { + // improved + if (checkFeasibility(from_region, area)) { + region_of[from_region] = ss_from; + region_of[to_region] = ss_to; + // confirm swap, lock + // update values for two changed regions + regions[from_region] = from_areas; + regions[to_region] = to_areas; + return std::make_pair(new_ss, true); + } + } + return std::make_pair(new_ss, false); + } + + virtual double MakeMove(int area, int from_region, int to_region) { + // use reference here to make actual change + boost::unordered_map& from_areas = regions[from_region]; + boost::unordered_map& to_areas = regions[to_region]; + from_areas.erase(area); + to_areas[area] = false; + + double ss_from = getObjectiveValue(from_areas); + double ss_to = getObjectiveValue(to_areas); + + region_of[from_region] = ss_from; + region_of[to_region] = ss_to; + // update values for two changed regions + regions[from_region] = from_areas; + regions[to_region] = to_areas; + + return GetValue(); + } + + bool checkFeasibility(int regionID, int areaID, bool is_remove = true) + { + // Check feasibility from a change region + boost::unordered_map areas2Eval = regions[regionID]; + + if (is_remove) { + // removing an area from a region + areas2Eval.erase(areaID); + } else { + // adding an area from a region) + areas2Eval[areaID] = true; + } + + // remove the area first + int seedArea = areas2Eval.begin()->first; + + // then, start from 1st object, do BFS + std::stack processed_ids; + processed_ids.push(seedArea); + while (processed_ids.empty() == false) { + int fid = processed_ids.top(); + processed_ids.pop(); + areas2Eval.erase(fid); // remove area from current group as processed + const std::vector& nbrs = w[fid].GetNbrs(); + for (int i=0; i region_of; + + // a reference to region data: region2Area + REGION_AREAS& regions; +}; + +//////////////////////////////////////////////////////////////////////////////// +////// RegionMaker +//////////////////////////////////////////////////////////////////////////////// +class RegionMaker +{ +public: + // for p-region problem + RegionMaker(int p, GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + const std::vector& init_regions=std::vector(), + long long seed=123456789); + + virtual ~RegionMaker(); + + // Sets the initial seeds for clustering + void setSeeds(std::vector seeds); + + virtual void LocalImproving() = 0; + + virtual std::vector GetResults() = 0; + + virtual double GetInitObjectiveFunction() = 0; + + virtual double GetFinalObjectiveFunction() = 0; + + // Check is_control_satisfied + bool IsSatisfyControls(); + + int GetPRegions() { return region2Area.size();} + +protected: + // Return the areas of a region + //boost::unordered_map returnRegion2Area(int regionID); + + // return regions created + std::vector returnRegions(); + + // Assign to the region "-1" for the areas without neighbours + void AssignAreasNoNeighs(); + + // Initial p starting observations using K-Means + std::vector kmeansInit(); + + // Assign an area to a region and updates potential regions for the neighs + // Parameters + void assignSeeds(int areaID, int regionID); + + // Assgin an area to a region + void assignAreaStep1(int areaID, int regionID); + + // Construct potential regions per area + void constructRegions(); + + // Assign an area to a region and updates potential regions for neighs + bool assignArea(int areaID, int regionID); + + std::set getBufferingAreas(boost::unordered_map& areas); + + // Get bordering areas of a region + void getBorderingAreas(int regionID); + + // Get possible move of an area (should be a bordering area) + std::set getPossibleMove(int area); + + bool growRegion(); + + void InitFromRegion(std::vector& init_regions); + +protected: + double** data; + + // n is the number of observations + int n; + + // m is the dimension of the variable space + int m; + + // p is the number of zones/regions to construct + int p; + + // w defines the weights structure, who's who's neighbor + GalElement* w; + + // pairwise distance between obs i and j + RawDistMatrix* dist_matrix; + + AreaManager am; + + ObjectiveFunction* objective_function; + + std::vector init_regions; + + boost::unordered_map unassignedAreas; + + boost::unordered_map assignedAreas; + + // area without neighbor (islands) + boost::unordered_map areaNoNeighbor; + + boost::unordered_map area2Region; + + // REGION region2Area + boost::unordered_map > region2Area; + + // For initial regions + // area that could be assigned to which regions + std::map > potentialRegions4Area; + + // area --(assign to)--region : distance + std::map, double> candidateInfo; + + + // object function value + double objInfo; + + std::vector controls; + + Xoroshiro128Random rng; + + bool is_control_satisfied; +}; + +//////////////////////////////////////////////////////////////////////////////// +////// MaxpRegionMaker +//////////////////////////////////////////////////////////////////////////////// +class MaxpRegionMaker : public RegionMaker +{ +public: + // for max-p problem + // the init_regions is different than RegionMaker's init_regions + // e.g. it could be LISA's core objects, and they are used to + // grow the potential regions + MaxpRegionMaker(GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + const std::vector& init_areas=std::vector(), + long long seed=123456789); + + virtual ~MaxpRegionMaker() { + if (objective_function) { + delete objective_function; + objective_function = 0; + } + } + + virtual void LocalImproving() {} + + virtual std::vector GetResults() { + return this->returnRegions(); + } + + virtual double GetInitObjectiveFunction() { + return this->objInfo; + } + + virtual double GetFinalObjectiveFunction() { + return this->objInfo; + } + +protected: + void InitSolution(); + +protected: + std::vector init_areas; +}; + +//////////////////////////////////////////////////////////////////////////////// +////// MaxpRegion +//////////////////////////////////////////////////////////////////////////////// +class MaxpRegion : public RegionMaker +{ + std::vector final_solution; + + double initial_objectivefunction; + + double final_objectivefunction; + +public: + MaxpRegion(int max_attemps, GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + const std::vector& init_areas=std::vector(), + long long seed=123456789); + + virtual ~MaxpRegion() {} + + virtual void LocalImproving() {} + + virtual std::vector GetResults() { + return final_solution; + } + + virtual double GetInitObjectiveFunction() { + return initial_objectivefunction; + } + + virtual double GetFinalObjectiveFunction() { + return final_objectivefunction; + } + +protected: + std::vector init_areas; + + int max_attemps; +}; + +//////////////////////////////////////////////////////////////////////////////// +////// AZP +//////////////////////////////////////////////////////////////////////////////// +class AZP : public RegionMaker +{ + std::vector final_solution; + + double initial_objectivefunction; + + double final_objectivefunction; + +public: + AZP(int p, GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + const std::vector& init_regions=std::vector(), + long long seed=123456789) + : RegionMaker(p,w,data,dist_matrix,n,m,c,init_regions, seed) + { + initial_objectivefunction = this->objInfo; + double best_score = this->objInfo; + bool improvement = true; + while (improvement) { + this->LocalImproving(); + improvement = this->objInfo < best_score; + best_score = this->objInfo; + } + + final_solution = this->returnRegions(); + final_objectivefunction = this->objInfo; + } + + virtual ~AZP() {} + + virtual void LocalImproving(); + + virtual std::vector GetResults() { + return final_solution; + } + + virtual double GetInitObjectiveFunction() { + return initial_objectivefunction; + } + + virtual double GetFinalObjectiveFunction() { + return final_objectivefunction; + } +}; + +//////////////////////////////////////////////////////////////////////////////// +////// AZP Simulated Annealing +//////////////////////////////////////////////////////////////////////////////// + +// Keeps the minimum amount of information about a given solution. It keeps the +// Objective function value (self.objInfo) and the region each area has been assigned to +// (self.regions) +class BasicMemory +{ +public: + BasicMemory() { + objInfo = std::numeric_limits::max(); + } + virtual ~BasicMemory() {} + + void updateBasicMemory(double val, const std::vector& rgn) { + // Updates BasicMemory when a solution is modified. + objInfo = val; + regions = rgn; + } + + double objInfo; + std::vector regions; +}; + +class AZPSA : public RegionMaker +{ + std::vector final_solution; + double initial_objectivefunction; + double final_objectivefunction; +public: + AZPSA(int p, GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + double _alpha = 0.85, int _max_iter= 1, + const std::vector& init_regions=std::vector(), + long long seed=123456789) + : RegionMaker(p,w,data,dist_matrix,n,m,c,init_regions,seed), temperature(1.0), + alpha(_alpha), max_iter(_max_iter) + { + std::vector init_sol = this->returnRegions(); + initial_objectivefunction = this->objInfo; + + // local search + BasicMemory basicMemory, localBasicMemory; + + // step a + int k = 0; + while (k < 3) { + int improved = 0; + for (int i=0; iobjInfo, this->returnRegions()); + // step b: modified step 5 + this->LocalImproving(); + + if (this->objInfo < localBasicMemory.objInfo) { + improved = 1; + } + if (this->objInfo < basicMemory.objInfo) { + // print "Best solution so far: ", rm.returnRegions() + // print "Best O.F. so far: ", rm.objInfo + basicMemory.updateBasicMemory(this->objInfo, this->returnRegions()); + } + } + // step c + temperature *= alpha; // annealing + if (improved == 1) { + k = 0; + } else { + k += 1; + } + // step d: repeat b and c + } + + + final_solution = basicMemory.regions; + final_objectivefunction = basicMemory.objInfo; + } + + virtual ~AZPSA() {} + + virtual void LocalImproving(); + + virtual std::vector GetResults() { + return final_solution; + } + + virtual double GetInitObjectiveFunction() { + return initial_objectivefunction; + } + + virtual double GetFinalObjectiveFunction() { + return final_objectivefunction; + } + +protected: + double temperature; + + double alpha; + + int max_iter; +}; + +//////////////////////////////////////////////////////////////////////////////// +////// AZP Tabu +//////////////////////////////////////////////////////////////////////////////// +struct CompareTabuMove +{ +public: + bool operator() (const double& lhs, + const double& rhs) const + { + return lhs > rhs; + } +}; + +class AZPTabu : public RegionMaker +{ + std::vector final_solution; + double initial_objectivefunction; + double final_objectivefunction; + +public: + AZPTabu(int p, GalElement* const w, + double** data, // row-wise + RawDistMatrix* dist_matrix, + int n, int m, const std::vector& c, + int tabu_length=10, int _convTabu=0, + const std::vector& init_regions=std::vector(), + long long seed=123456789) + : RegionMaker(p,w,data,dist_matrix,n,m,c,init_regions, seed), + tabuLength(tabu_length), convTabu(_convTabu) + { + if (tabuLength <= 0) { + tabuLength = 10; + } + if (convTabu <= 0) { + convTabu = 10; + } + initial_objectivefunction = this->objInfo; + std::vector init_sol = this->returnRegions(); + + this->LocalImproving(); + + final_solution = this->returnRegions(); + final_objectivefunction = this->objInfo; + } + + virtual ~AZPTabu() {} + + virtual void LocalImproving(); + + virtual std::vector GetResults() { + return final_solution; + } + + virtual double GetInitObjectiveFunction() { + return initial_objectivefunction; + } + + virtual double GetFinalObjectiveFunction() { + return final_objectivefunction; + } + + // Select neighboring solutions. + void allCandidates(); + + void updateNeighSolution(int area, int from, int to); + +protected: + int tabuLength; //5 + + int convTabu; // 5: 230*numpy.sqrt(pRegions)?ß + + boost::unordered_map, double> neighSolutions; + + boost::heap::priority_queue > neighSolObjs; + + std::vector regions; + + +}; +#endif diff --git a/Algorithms/cluster.cpp b/Algorithms/cluster.cpp index 636c0cba2..59a62a351 100644 --- a/Algorithms/cluster.cpp +++ b/Algorithms/cluster.cpp @@ -35,8 +35,18 @@ #include #include #include "cluster.h" -#ifdef WINDOWS -# include + +#if defined(__cplusplus) && !defined(__GNUC__) + #include + #define min std::min + #define max std::max +#else + #ifndef min + #define min(x, y) ((x) < (y) ? (x) : (y)) + #endif + #ifndef max + #define max(x, y) ((x) > (y) ? (x) : (y)) + #endif #endif /* ************************************************************************ */ @@ -1987,7 +1997,7 @@ nearest(int d_idx, int n_cluster, double *d2, setmetric(dist); int k, min_k; - double d, min_d; + double min_d; min_d = HUGE_VAL; min_k = clusterid[d_idx]; @@ -2038,7 +2048,7 @@ static void kplusplusassign (int nclusters, int ndata, int nelements, int cluste } double current_pot; double distance; - double best_pot = DBL_MAX; + //double best_pot = DBL_MAX; current_pot = 0; for (j = 0; j < nelements; j++) { @@ -4921,7 +4931,7 @@ double** mds(int nrows, int ncolumns, double** data, int** mask, if (E[i]==NULL) break; /* Not enough memory available */ } - double sum_E = 0, avg_E = 0; + double sum_E = 0;// avg_E = 0; /* Calculate the distances and save them in the ragged array */ /* E = (-0.5 * d*d) */ for (i=0; i (y) ? (x) : (y)) -#endif #ifdef WINDOWS # include diff --git a/Algorithms/dbscan.cpp b/Algorithms/dbscan.cpp new file mode 100644 index 000000000..abaef75db --- /dev/null +++ b/Algorithms/dbscan.cpp @@ -0,0 +1,115 @@ +#include "../kNN/ANN/ANN.h" +#include "dbscan.h" + +DBSCAN::DBSCAN(unsigned int min_samples, float eps, const double** input_data, + unsigned int num_rows, unsigned int num_cols, int distance_metric) +: eps(eps), min_samples(min_samples), num_rows(num_rows), num_cols(num_cols), +averagen(0) +{ + ANN_DIST_TYPE = distance_metric; + // create a kdtree + kd_tree = new ANNkd_tree((ANNpointArray)input_data, num_rows, num_cols /*dim*/); + + createNearestNeighbors(input_data); + + run(); +} + +DBSCAN::~DBSCAN() +{ + if (kd_tree) delete kd_tree; + + // reset this global variable, so it won't impact using ANN in other code + ANN_DIST_TYPE = ANNuse_euclidean_dist; +} + +double DBSCAN::getAverageNN() +{ + return averagen; +} + +std::vector DBSCAN::getResults() +{ + return labels; +} + +void DBSCAN::run() +{ + // Initially, all samples are noise. + labels.resize(num_rows, -1); + + // A list of all core samples found. + is_core.resize(num_rows, false); + + for (size_t i=0; i= min_samples) { + is_core[i] = true; + } + } + + // Fast inner loop for DBSCAN + // see: scikit-learn/sklearn/cluster/_dbscan_inner.pyx + int label_num = 0, v; + std::vector stack; + + for (size_t i=0; i >& neighb = nn[k]; + for (size_t j=0; j > nbrs; + int k = kd_tree->annkFRSearch((ANNpoint)input_data[i], radius, 0, NULL, NULL); + ANNidxArray nnIdx = new ANNidx[k]; + ANNdistArray dists = new ANNdist[k]; + total_nn += k; + kd_tree->annkFRSearch((ANNpoint)input_data[i], radius, k, nnIdx, dists); + for (size_t j=0; j + +class ANNkd_tree; + +/** + * DBSCAN: Density-Based Spatial Clustering of Applications with Noise + * + * see: scikit-learn/sklearn/cluster/_dbscan.py + */ +class DBSCAN { +public: + /** + * Perform DBSCAN clustering from *raw 2d array data + */ + DBSCAN(unsigned int min_samples, float eps, const double** input_data, + unsigned int num_rows, unsigned int num_cols, int distance_metric); + + virtual ~DBSCAN(); + + virtual std::vector getResults(); + + virtual double getAverageNN(); + +protected: + void run(); + + void createNearestNeighbors(const double** input_data); + + // eps : float, The maximum distance between two samples for one to be considered + // as in the neighborhood of the other. This is not a maximum bound + // on the distances of points within a cluster. This is the most + // important DBSCAN parameter to choose appropriately for your data set + // and distance function. + float eps; + + // The number of samples (or total weight) in a neighborhood for a point + // to be considered as a core point. This includes the point itself. + unsigned int min_samples; + + // Number of rows (observations) + unsigned int num_rows; + + // Number of columns (variables) + unsigned int num_cols; + + // ANN kd-tree + ANNkd_tree* kd_tree; + + + // nearest neighbors + std::vector > > nn; + + // labels + std::vector labels; + + // core flags + std::vector is_core; + + // average number of neighbors + double averagen; +}; + +#endif diff --git a/Algorithms/distanceplot.cpp b/Algorithms/distanceplot.cpp new file mode 100644 index 000000000..598a6c04e --- /dev/null +++ b/Algorithms/distanceplot.cpp @@ -0,0 +1,334 @@ +#include +#include +#include +#include + +#include + +#include "../GenGeomAlgs.h" +#include "distanceplot.h" + + +DistancePlot::DistancePlot(const std::vector& points, + const std::vector >& data, + const std::vector >& data_undefs, + char dist_method, + bool is_arc, bool is_mile, + uint64_t last_seed_used, + bool reuse_last_seed) +: points(points), data(data), data_undefs(data_undefs), +last_seed_used(last_seed_used), reuse_last_seed(reuse_last_seed), +is_arc(is_arc), is_mile(is_mile), +dist_method(dist_method), rand_count(0), num_pts(0) +{ + min_x = DBL_MAX; + min_y = DBL_MAX; + max_x = DBL_MIN; + max_y = DBL_MIN; + + num_obs = points.size(); + num_vars = data.size(); + + if (!reuse_last_seed) { + unsigned int initseed = (unsigned int) time(0); + srand(initseed); + last_seed_used = rand(); + } +} + + +DistancePlot::~DistancePlot() +{ + +} + +bool DistancePlot::compute_var_dist(size_t i, size_t j, double& var_dist) +{ + bool undef = false; + double val = 0; + if (dist_method == 'm') { + for (size_t v=0; v < num_vars; ++v) { + val += fabs(data[v][i] - data[v][j]); + undef = undef || data_undefs[v][i]; + undef = undef || data_undefs[v][j]; + } + var_dist = sqrt(val); + } else { + // euclidean as default 'e' + for (size_t v=0; v < num_vars; ++v) { + val = data[v][i] - data[v][j]; + var_dist += val * val; + undef = undef || data_undefs[v][i]; + undef = undef || data_undefs[v][j]; + } + var_dist = sqrt(var_dist); + } + return undef; +} + +double DistancePlot::compute_geo_dist(size_t i, size_t j) +{ + double dist = 0; + if (is_arc) { + if (is_mile) { + dist = GenGeomAlgs::ComputeArcDistMi(points[i]->GetY(), + points[i]->GetX(), + points[j]->GetY(), + points[j]->GetX()); + } else { + dist = GenGeomAlgs::ComputeArcDistKm(points[i]->GetY(), + points[i]->GetX(), + points[j]->GetY(), + points[j]->GetX()); + } + } else { + dist = GenGeomAlgs::ComputeEucDist(points[i]->GetX(), + points[i]->GetY(), + points[j]->GetX(), + points[j]->GetY()); + } + return dist; +} + +/** + * mark which index is randomly selected for sampling approach + */ +void DistancePlot::gen_rand_flag(size_t i, size_t num_rand) +{ + if (rand_count >= num_rand) + return; + + size_t rand_idx = Gda::ThomasWangHashDouble(last_seed_used+i) * num_pts; + if (rand_flags[rand_idx] == false) { + mutex.lock(); + rand_count ++; + rand_flags[rand_idx] = true; + mutex.unlock(); + } +} + +void DistancePlot::pick_random_list(size_t num_rand) +{ + thread_pool pool; + for (size_t i=0; i num_rand) + break; + pool.enqueue(boost::bind(&DistancePlot::gen_rand_flag, this, i, num_rand)); + } +} + +void DistancePlot::run(bool rand_sample, size_t num_rand) +{ + // init return result + num_pts = (num_obs * num_obs - num_obs) / 2; + if (rand_sample) { + if (num_rand < num_pts) { + rand_flags.resize(num_pts, false); + pick_random_list(num_rand); + num_pts = num_rand; + } else { + rand_sample = false; + } + + } + + if (!rand_sample){ + x.resize(num_pts); + y.resize(num_pts); + x_undefs.resize(num_pts); + y_undefs.resize(num_pts); + } + + // run + thread_pool pool; + for (size_t i=0; i max_x) max_x = geo_dist; + if (var_dist < min_y) min_y = var_dist; + if (var_dist > max_y) max_y = var_dist; + } +} + +void DistancePlot::run(const rtree_pt_2d_t& rtree, double thresh) +{ + thread_pool pool; + for (size_t i=0; iGetX(); + double pt_y = points[row_idx]->GetY(); + box_2d b(pt_2d(pt_x-thresh, pt_y-thresh), pt_2d(pt_x+thresh, pt_y+thresh)); + + // query points within threshold distance + std::vector q; + rtree.query(bgi::intersects(b), std::back_inserter(q)); + + BOOST_FOREACH(const pt_2d_val& w, q) { + const size_t j = w.second; + if (j > row_idx) { + // compute geo distance + geo_dist = compute_geo_dist(row_idx, j); + if (geo_dist > thresh) continue; + + // compute variable distance + var_dist = 0; + bool undef = compute_var_dist(row_idx, j, var_dist); + + // save to results + mutex.lock(); + x.push_back(geo_dist); + y.push_back(var_dist); + x_undefs.push_back(undef); + y_undefs.push_back(undef); + mutex.unlock(); + + // update min/max + if (geo_dist < min_x) min_x = geo_dist; + if (geo_dist > max_x) max_x = geo_dist; + if (var_dist < min_y) min_y = var_dist; + if (var_dist > max_y) max_y = var_dist; + } + } +} + +void DistancePlot::run(const rtree_pt_3d_t& rtree, double thresh) +{ + thread_pool pool; + for (size_t i=0; iGetX(); + double pt_y = points[row_idx]->GetY(); + double x_3d, y_3d, z_3d; + GenGeomAlgs::LongLatDegToUnit(pt_x, pt_y, x_3d, y_3d, z_3d); + + // thresh is in radians. Need to convert to unit sphere secant distance + double sec_thresh = thresh;// GenGeomAlgs::RadToUnitDist(thresh); + + box_3d b(pt_3d(x_3d - sec_thresh, y_3d - sec_thresh, z_3d - sec_thresh), + pt_3d(x_3d + sec_thresh, y_3d + sec_thresh, z_3d + sec_thresh)); + + // query points within threshold distance + std::vector q; + rtree.query(bgi::intersects(b), std::back_inserter(q)); + + BOOST_FOREACH(const pt_3d_val& w, q) { + const size_t j = w.second; + if (j > row_idx) { + // compute geo distance + geo_dist = compute_geo_dist(row_idx, j); + if (geo_dist > thresh) continue; + // compute variable distance + var_dist = 0; + bool undef = compute_var_dist(row_idx, j, var_dist); + + // save to results + mutex.lock(); + x.push_back(geo_dist); + y.push_back(var_dist); + x_undefs.push_back(undef); + y_undefs.push_back(undef); + mutex.unlock(); + + // update min/max + if (geo_dist < min_x) min_x = geo_dist; + if (geo_dist > max_x) max_x = geo_dist; + if (var_dist < min_y) min_y = var_dist; + if (var_dist > max_y) max_y = var_dist; + } + } +} + +double DistancePlot::GetMinX() +{ + return min_x; +} +double DistancePlot::GetMaxX() +{ + return max_x; +} +double DistancePlot::GetMinY() +{ + return min_y; +} +double DistancePlot::GetMaxY() +{ + return max_y; +} + +const std::vector& DistancePlot::GetX() +{ + return x; +} + +const std::vector& DistancePlot::GetY() +{ + return y; +} + +const std::vector& DistancePlot::GetXUndefs() +{ + return x_undefs; +} + +const std::vector& DistancePlot::GetYUndefs() +{ + return y_undefs; +} diff --git a/Algorithms/distanceplot.h b/Algorithms/distanceplot.h new file mode 100644 index 000000000..303bf569d --- /dev/null +++ b/Algorithms/distanceplot.h @@ -0,0 +1,92 @@ +#ifndef __GEODA_CENTER_DISTANCEPLOT_H___ +#define __GEODA_CENTER_DISTANCEPLOT_H___ + +#include + +#include "../SpatialIndAlgs.h" +#include "../GdaShape.h" + +class DistancePlot +{ + +public: + DistancePlot(const std::vector& points, + const std::vector >& data, + const std::vector >& data_undefs, + char dist_method = 'e', + bool is_arc = false, bool is_mile = false, + uint64_t last_seed_used = 1234567890, + bool reuse_last_seed = true); + + virtual ~DistancePlot(); + + void run(bool is_rand_sample=false, size_t num_rand=0); + void run(const rtree_pt_2d_t& rtree, double thresh); + void run(const rtree_pt_3d_t& rtree, double thresh); + + const std::vector& GetX(); + const std::vector& GetY(); + const std::vector& GetXUndefs(); + const std::vector& GetYUndefs(); + + double GetMinX(); + double GetMaxX(); + double GetMinY(); + double GetMaxY(); + + bool IsArc() { return is_arc;} + bool IsMile() { return is_mile;} + char DistMethod() { return dist_method;} + + size_t GetNumPoints() { return num_pts;} + +protected: + size_t num_obs; + size_t num_vars; + size_t num_pts; + size_t rand_count; + + bool is_mile; + bool is_arc; + + char dist_method; + uint64_t last_seed_used; + bool reuse_last_seed; + boost::mutex mutex; + + const std::vector& points; + const std::vector >& data; + const std::vector >& data_undefs; + + double min_x; + double max_x; + double min_y; + double max_y; + + std::vector x; + std::vector y; + + std::vector x_undefs; + std::vector y_undefs; + + std::vector rand_flags; + + double compute_geo_dist(size_t i, size_t j); + + bool compute_var_dist(size_t i, size_t j, double& var_dist); + + void gen_rand_flag(size_t i, size_t num_rand); + + void pick_random_list(size_t num_rand); + + void compute_dist(size_t row_idx, bool rand_sample); + + void compute_dist_thres(size_t row_idx, const rtree_pt_2d_t& rtree, + double thresh); + + void compute_dist_thres3d(size_t row_idx, const rtree_pt_3d_t& rtree, + double thresh); +}; + +#endif + diff --git a/Algorithms/fastcluster.h b/Algorithms/fastcluster.h index 3eac13961..0954155b2 100644 --- a/Algorithms/fastcluster.h +++ b/Algorithms/fastcluster.h @@ -1153,14 +1153,23 @@ namespace fastcluster { Characteristic: new distances are never longer than the old distances. */ // Update the distance matrix in the range [start, idx1). - for (i=active_nodes.start; i(members[i]); - for (i=active_nodes.start; i(members[i]) ); + } + } // Update the distance matrix in the range (idx1, idx2). - for (; i(members[i]) ); + } + } // Update the distance matrix in the range (idx2, N). - for (i=active_nodes.succ[idx2]; i(members[i]) ); + } + } break; default: diff --git a/Algorithms/gpu_lisa.cpp b/Algorithms/gpu_lisa.cpp index 4f872a121..946a5913d 100644 --- a/Algorithms/gpu_lisa.cpp +++ b/Algorithms/gpu_lisa.cpp @@ -1,7 +1,11 @@ #include +#include +#include #include +#include #include #include +#include #include "../ShapeOperations/GalWeight.h" #ifdef __linux__ // do nothing; we got opencl sdk issue on centos @@ -28,7 +32,7 @@ bool gpu_localjoincount(const char* cl_path, int rows, int permutations, unsigne using namespace std; -char *replace_str(char *str, char *orig, char *rep, int start) +char *replace_str(char *str, char *orig, const char *rep, int start) { static char temp[4096]; static char buffer[4096]; @@ -55,7 +59,7 @@ bool gpu_lisa(const char* cl_path, int rows, int permutations, unsigned long lon int total_nbrs = 0; for (size_t i=0; i max_n_nbrs) { max_n_nbrs = nnbrs; } @@ -67,35 +71,28 @@ bool gpu_lisa(const char* cl_path, int rows, int permutations, unsigned long lon size_t idx = 0; for (size_t i=0; i max_n_nbrs) { max_n_nbrs = nnbrs; } @@ -281,9 +280,11 @@ bool gpu_localjoincount(const char* cl_path, int rows, int permutations, unsigne size_t idx = 0; for (size_t i=0; i #include +#include "pam.h" #include "hdbscan.h" @@ -29,10 +30,7 @@ vector HDBScan::ComputeCoreDistance(double** input_data, int n_pts, if (dist == 'e') ANN_DIST_TYPE = 2; // euclidean else if (dist == 'b') ANN_DIST_TYPE = 1; // manhattan - // since KNN search will always return the query point itself, so add 1 - // to make sure returning min_samples number of results - //min_samples = min_samples + 1; - + // KNN search will always return the query point itself, (self-included) ANNkd_tree* kdTree = new ANNkd_tree(input_data, n_pts, n_dim); ANNidxArray nnIdx = new ANNidx[min_samples]; ANNdistArray dists = new ANNdist[min_samples]; @@ -49,7 +47,7 @@ vector HDBScan::ComputeCoreDistance(double** input_data, int n_pts, HDBScan::HDBScan(int min_cluster_size, int min_samples, double alpha, int _cluster_selection_method, bool _allow_single_cluster, - int rows, int cols, double** _distances, + int rows, int cols, RawDistMatrix* raw_dist, vector _core_dist, const vector& _undefs) { @@ -59,10 +57,46 @@ HDBScan::HDBScan(int min_cluster_size, int min_samples, double alpha, // Core distances core_dist = _core_dist; - + + // mutual distances + /* + mutual_dist.resize(rows); + for (int i=0; igetDistance(i, j))); + } + mutual_dist[i].push_back(val); + } + } + + Graph g(rows); + for (int i=0; i p(num_vertices(g)); + prim_minimum_spanning_tree(g, p.data()); + for (int source = 0; source < p.size(); ++source) { + int target = p[source]; + if (source != target) { + double cost = source < target ? mutual_dist[source][target - source -1] : + mutual_dist[target][source - target -1]; + mst_edges.push_back(new SimpleEdge(source, target, cost)); + } + } + */ + // clean up mst_edges if needed + for (int i=0; i > HDBScan::GetRegions() @@ -133,14 +166,13 @@ vector > HDBScan::GetRegions() } vector > regions(max_cid + 1); - int cid = 0; for (int i=0; i=0) { int cid = labels[i]; regions[cid].push_back(i); } } - + return regions; } @@ -694,12 +726,15 @@ void HDBScan::get_clusters(vector& tree, std::sort(_clusters.begin(), _clusters.end()); - boost::unordered_map cluster_map, reverse_cluster_map; + cluster_map.clear(); + reverse_cluster_map.clear(); for (int i=0; i<_clusters.size(); i++) { cluster_map[_clusters[i]] = i; reverse_cluster_map[i] = _clusters[i]; } - + + this->clusters = clusters; + // do labeling (tree, clusters, cluster_map, False, False out_labels = do_labelling(tree, clusters, cluster_map, allow_single_cluster, match_reference_implementation); @@ -755,23 +790,26 @@ vector HDBScan::recurse_leaf_dfs(vector& cluster_tree, int } } -void HDBScan::mst_linkage_core_vector(int num_features, +vector HDBScan::mst_linkage_core_vector(int num_features, vector& core_distances, - double** dist_metric, + RawDistMatrix* dist_metric, double alpha) { - int dim = core_distances.size(); + vector rtn_mst_edges; + int dim = (int)core_distances.size(); double current_node_core_distance; vector in_tree(dim,0); int current_node = 0; vector current_distances(dim, DBL_MAX); + vector current_sources(dim, 1); for (int i=1; igetDistance(current_node, j)); + int left_source = current_node; + if (alpha!=1.0) { left_value /= alpha; } @@ -789,6 +829,7 @@ void HDBScan::mst_linkage_core_vector(int num_features, if (current_node_core_distance > right_value || core_value > right_value || left_value > right_value) { if (right_value < new_distance) { new_distance = right_value; + source_node = right_source; new_node = j; } continue; @@ -806,19 +847,24 @@ void HDBScan::mst_linkage_core_vector(int num_features, if (left_value < right_value) { current_distances[j] = left_value; + current_sources[j] = left_source; if (left_value < new_distance) { new_distance = left_value; + source_node = left_source; new_node = j; } } else { if (right_value < new_distance) { new_distance = right_value; + source_node = right_source; new_node = j; } } } - mst_edges.push_back(new SimpleEdge(current_node, new_node, new_distance)); + rtn_mst_edges.push_back(new SimpleEdge(source_node, new_node, new_distance)); current_node = new_node; } + std::sort(rtn_mst_edges.begin(), rtn_mst_edges.end(), EdgeLess1); + return rtn_mst_edges; } diff --git a/Algorithms/hdbscan.h b/Algorithms/hdbscan.h index bbd3f2292..76d8a14c7 100644 --- a/Algorithms/hdbscan.h +++ b/Algorithms/hdbscan.h @@ -1,22 +1,7 @@ /** - * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * Source code from: https://cran.r-project.org/web/packages/dbscan/ * - * This file is part of GeoDa. - * - * GeoDa is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * GeoDa is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * Created: 5/30/2017 lixun910@gmail.com + * Created and Modified: 5/30/2017 lixun910@gmail.com */ #ifndef __GEODA_CENTER_HDBSCAN_H__ @@ -27,9 +12,10 @@ #include #include "../kNN/ANN/ANN.h" -#include "redcap.h" -using namespace SpanningTreeClustering; +using namespace std; + +class RawDistMatrix; namespace Gda { struct IdxCompare @@ -204,15 +190,17 @@ namespace Gda { vector probabilities; vector stabilities; vector outliers; - + set clusters; + boost::unordered_map cluster_map, reverse_cluster_map; + HDBScan(int min_points, int min_samples, double alpha, int cluster_selection_method, bool allow_single_cluster, int rows, int cols, - double** _distances, - vector _core_dist, + RawDistMatrix* raw_dist, + vector core_dist, const vector& undefs //GalElement * w, //double* controls, @@ -223,7 +211,13 @@ namespace Gda { static vector ComputeCoreDistance(double** input_data, int n_pts, int n_dim, int min_samples, char dist); - + static vector mst_linkage_core_vector(int num_features, + vector& core_distances, + RawDistMatrix* dist_metric, + double alpha); + + void Run(); + vector > GetRegions(); vector outlier_scores(vector& tree); @@ -259,10 +253,6 @@ namespace Gda { bool allow_single_cluster= false, bool match_reference_implementation=false); - void mst_linkage_core_vector(int num_features, - vector& core_distances, - double** dist_metric, double alpha); - vector get_cluster_tree_leaves(vector& cluster_tree); vector recurse_leaf_dfs(vector& cluster_tree, diff --git a/Algorithms/jacobi.c b/Algorithms/jacobi.c new file mode 100644 index 000000000..926abe7fd --- /dev/null +++ b/Algorithms/jacobi.c @@ -0,0 +1,74 @@ +#include "smacof.h" + +void jacobiC(const int *nn, double *a, double *evec, double *oldi, double *oldj, + const int *itmax, const double *eps) { + int n = *nn, itel = 1; + double d = 0.0, s = 0.0, t = 0.0, u = 0.0, v = 0.0, p = 0.0, q = 0.0, + r = 0.0; + double fold = 0.0, fnew = 0.0; + int i,j,k; + int ik, ki, jk, kj; + for ( i = 1; i <= n; i++) { + for ( j = 1; j <= n; j++) { + evec[MINDEX(i, j, n)] = (i == j) ? 1.0 : 0.0; + } + } + for ( i = 1; i <= n; i++) { + fold += SQUARE(a[TINDEX(i, i, n)]); + } + while (1) { + for ( j = 1; j <= n - 1; j++) { + for ( i = j + 1; i <= n; i++) { + p = a[TINDEX(i, j, n)]; + q = a[TINDEX(i, i, n)]; + r = a[TINDEX(j, j, n)]; + if (fabs(p) < 1e-10) continue; + d = (q - r) / 2.0; + s = (p < 0) ? -1.0 : 1.0; + t = -d / sqrt(SQUARE(d) + SQUARE(p)); + u = sqrt((1 + t) / 2); + v = s * sqrt((1 - t) / 2); + for (k = 1; k <= n; k++) { + ik = IMIN(i, k); + ki = IMAX(i, k); + jk = IMIN(j, k); + kj = IMAX(j, k); + oldi[VINDEX(k)] = a[TINDEX(ki, ik, n)]; + oldj[VINDEX(k)] = a[TINDEX(kj, jk, n)]; + } + for ( k = 1; k <= n; k++) { + ik = IMIN(i, k); + ki = IMAX(i, k); + jk = IMIN(j, k); + kj = IMAX(j, k); + a[TINDEX(ki, ik, n)] = + u * oldi[VINDEX(k)] - v * oldj[VINDEX(k)]; + a[TINDEX(kj, jk, n)] = + v * oldi[VINDEX(k)] + u * oldj[VINDEX(k)]; + } + for ( k = 1; k <= n; k++) { + oldi[VINDEX(k)] = evec[MINDEX(k, i, n)]; + oldj[VINDEX(k)] = evec[MINDEX(k, j, n)]; + evec[MINDEX(k, i, n)] = + u * oldi[VINDEX(k)] - v * oldj[VINDEX(k)]; + evec[MINDEX(k, j, n)] = + v * oldi[VINDEX(k)] + u * oldj[VINDEX(k)]; + } + a[TINDEX(i, i, n)] = + SQUARE(u) * q + SQUARE(v) * r - 2 * u * v * p; + a[TINDEX(j, j, n)] = + SQUARE(v) * q + SQUARE(u) * r + 2 * u * v * p; + a[TINDEX(i, j, n)] = + u * v * (q - r) + (SQUARE(u) - SQUARE(v)) * p; + } + } + fnew = 0.0; + for ( i = 1; i <= n; i++) { + fnew += SQUARE(a[TINDEX(i, i, n)]); + } + if (((fnew - fold) < *eps) || (itel == *itmax)) break; + fold = fnew; + itel++; + } + return; +} diff --git a/Algorithms/lapacke.c b/Algorithms/lapacke.c new file mode 100644 index 000000000..d8d109c14 --- /dev/null +++ b/Algorithms/lapacke.c @@ -0,0 +1,168 @@ +#include "smacof.h" +#include "../Regression/f2c.h" + +int dposv_(char *uplo, integer *n, integer *nrhs, doublereal *a, integer *lda, doublereal *b, integer *ldb, integer *info); + +int dsyevd_(char *jobz, char *uplo, integer *n, doublereal * + a, integer *lda, doublereal *w, doublereal *work, integer *lwork, + integer *iwork, integer *liwork, integer *info); + +int dgeqrf_(integer *m, integer *n, doublereal *a, integer * + lda, doublereal *tau, doublereal *work, integer *lwork, integer *info); + +int dorgqr_(integer *m, integer *n, integer *k, doublereal * + a, integer *lda, doublereal *tau, doublereal *work, integer *lwork, + integer *info); + +lapack_int to_lapack_int(const int *n) +{ + int nn = (int)*n; + lapack_int ln = 0; + ln = nn; + return ln; +} + + +void dposv(const int *n, const int *m, double *a, double *b) { + lapack_int nn = to_lapack_int(n), mm = to_lapack_int(m); + + //(void)LAPACKE_dposv(LAPACK_COL_MAJOR, 'U', nn, mm, a, nn, b, nn); + // ref: lapacke_dposv.c + // LAPACKE_dposv_work(matrix_layout, uplo, n, nrhs, a, lda, b, ldb) + + lapack_int info = 0; + lapack_int lda = nn; + lapack_int ldb = nn; + dposv_('U', &nn, &mm, a, &lda, b, &ldb, &info); + if( info < 0 ) { + info = info - 1; + } + return; +} + +void dsyevd(const int *n, double *a, double *x) { + lapack_int* iwork = NULL; + double* work = NULL; + double work_query; + lapack_int nn = to_lapack_int(n); + //(void)LAPACKE_dsyevd(LAPACK_COL_MAJOR, 'V', 'U', nn, a, nn, x); + // ref: lapacke_dstevd.c + // LAPACKE_dstevd( int matrix_layout, char jobz, lapack_int n, double* d, double* e, double* z, lapack_int ldz ) + + lapack_int lda = (lapack_int)*n; + lapack_int info = 0; + lapack_int iwork_query; + lapack_int lwork = -1; + + lapack_int liwork = -1; + + /* Query optimal working array(s) size */ + dsyevd_('V', 'U', &nn, a, &lda, x, &work_query, &lwork, &iwork_query, &liwork, &info); + + liwork = (lapack_int)iwork_query; + lwork = (lapack_int)work_query; + + /* Allocate memory for work arrays */ + + + iwork = (lapack_int*)LAPACKE_malloc( sizeof(lapack_int) * liwork ); + work = (double*)LAPACKE_malloc( sizeof(double) * lwork ); + + /* Call middle-level interface */ + info = 0; + lda = (lapack_int)*n; + nn = (lapack_int)*n; + dsyevd_('V', 'U', &nn, a, &lda, x, work, &lwork, iwork, &liwork, &info); + + LAPACKE_free( work ); + LAPACKE_free( iwork ); + return; +} + +void dgeqrf(const int *n, const int *m, double *a, double *tau) { + //lapack_int nn = (lapack_int)*n, mm = (lapack_int)*m; + //(void)LAPACKE_dgeqrf(LAPACK_COL_MAJOR, nn, mm, a, nn, tau); + // ref: lapacke_dgeqrf.c + lapack_int mm = to_lapack_int(n); + lapack_int nn = to_lapack_int(m); + lapack_int lda = to_lapack_int(n); + + lapack_int info = 0; + lapack_int lwork = -1; + double* work = NULL; + double work_query; + + /* Query optimal working array(s) size */ + // mm, nn, a, lda, tau, &work_query, lwork + dgeqrf_( &mm, &nn, a, &lda, tau, &work_query, &lwork, &info ); + + lwork = (lapack_int)work_query; + /* Allocate memory for work arrays */ + work = (double*)LAPACKE_malloc( sizeof(double) * lwork ); + + /* Call middle-level interface */ + // mm, nn, a, lda, tau, work, lwork + lda = to_lapack_int(n); + mm = to_lapack_int(n); + nn = to_lapack_int(m); + info = 0; + dgeqrf_( &mm, &nn, a, &lda, tau, work, &lwork, &info ); + + /* Release memory and exit */ + LAPACKE_free( work ); + return; +} + +void dorgqr(const int *n, const int *m, double *a, double *tau) { + //lapack_int nn = (lapack_int)*n, mm = (lapack_int)*m; + //(void)LAPACKE_dorgqr(LAPACK_COL_MAJOR, nn, mm, mm, a, nn, tau); + // ref: lapacke_dorgqr.c + + lapack_int mm = to_lapack_int(n); + lapack_int nn = to_lapack_int(m); + lapack_int k = to_lapack_int(m); + lapack_int lda = to_lapack_int(n); + + lapack_int info = 0; + lapack_int lwork = -1; + double* work = NULL; + double work_query; + + /* Query optimal working array(s) size */ + // mm, nn, k, a, lda, tau, &work_query, lwork + dorgqr_(&mm, &nn, &k, a, &lda, tau, &work_query, &lwork, &info); + + lwork = (lapack_int)work_query; + /* Allocate memory for work arrays */ + work = (double*)LAPACKE_malloc( sizeof(double) * lwork ); + + /* Call middle-level interface */ + mm = to_lapack_int(n); + nn = to_lapack_int(m); + k = to_lapack_int(m); + lda = to_lapack_int(n); + info = 0; + // mm, nn, k, a, lda, tau, work, lwork + dorgqr_(&mm, &nn, &k, a, &lda, tau, work, &lwork, &info); + + /* Release memory and exit */ + LAPACKE_free( work ); + + return; +} + +void dortho(const int *n, const int *m, double *a) { + int nn = (int)*n, mm = (int)*m; + double *tau = calloc((size_t)mm, sizeof(double)); + + //(void)LAPACKE_dgeqrf(LAPACK_COL_MAJOR, nn, mm, a, nn, tau); + //(void)LAPACKE_dorgqr(LAPACK_COL_MAJOR, nn, mm, mm, a, nn, tau); + dgeqrf(&nn, &mm, a, tau); + + nn = (int)*n; + mm = (int)*m; + dorgqr(&nn, &mm, a, tau); + + free(tau); + return; +} diff --git a/Algorithms/linpack_lite.c b/Algorithms/linpack_lite.c new file mode 100644 index 000000000..2d2afd92e --- /dev/null +++ b/Algorithms/linpack_lite.c @@ -0,0 +1,1445 @@ +/* linpack_lite.f -- translated by f2c (version 20160102). + You must link the resulting object file with libf2c: + on Microsoft Windows system, link with libf2c.lib; + on Linux or Unix systems, link with .../path/to/libf2c.a -lm + or, if you install libf2c.a in a standard place, with -lf2c -lm + -- in that order, at the end of the command line, as in + cc *.o -lf2c -lm + Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., + + http://www.netlib.org/f2c/libf2c.zip +*/ + +#include "../Regression/f2c.h" +#include "../Regression/blaswrap.h" + +/* Table of constant values */ + +static integer c__1 = 1; +static doublereal c_b98 = -1.; + +/* Subroutine */ int dqrsl_(doublereal *x, integer *ldx, integer *n, integer * + k, doublereal *qraux, doublereal *y, doublereal *qy, doublereal *qty, + doublereal *b, doublereal *rsd, doublereal *xb, integer *job, integer + *info) +{ + /* System generated locals */ + integer x_dim1, x_offset, i__1, i__2; + + /* Local variables */ + static integer i__, j; + static doublereal t; + static logical cb; + static integer jj; + static logical cr; + static integer ju, kp1; + static logical cxb, cqy; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static doublereal temp; + static logical cqty; + extern /* Subroutine */ int dcopy_(integer *, doublereal *, integer *, + doublereal *, integer *), daxpy_(integer *, doublereal *, + doublereal *, integer *, doublereal *, integer *); + + +/* dqrsl applies the output of dqrdc to compute coordinate */ +/* transformations, projections, and least squares solutions. */ +/* for k .le. min(n,p), let xk be the matrix */ + +/* xk = (x(jpvt(1)),x(jpvt(2)), ... ,x(jpvt(k))) */ + +/* formed from columnns jpvt(1), ... ,jpvt(k) of the original */ +/* n x p matrix x that was input to dqrdc (if no pivoting was */ +/* done, xk consists of the first k columns of x in their */ +/* original order). dqrdc produces a factored orthogonal matrix q */ +/* and an upper triangular matrix r such that */ + +/* xk = q * (r) */ +/* (0) */ + +/* this information is contained in coded form in the arrays */ +/* x and qraux. */ + +/* on entry */ + +/* x double precision(ldx,p). */ +/* x contains the output of dqrdc. */ + +/* ldx integer. */ +/* ldx is the leading dimension of the array x. */ + +/* n integer. */ +/* n is the number of rows of the matrix xk. it must */ +/* have the same value as n in dqrdc. */ + +/* k integer. */ +/* k is the number of columns of the matrix xk. k */ +/* must nnot be greater than min(n,p), where p is the */ +/* same as in the calling sequence to dqrdc. */ + +/* qraux double precision(p). */ +/* qraux contains the auxiliary output from dqrdc. */ + +/* y double precision(n) */ +/* y contains an n-vector that is to be manipulated */ +/* by dqrsl. */ + +/* job integer. */ +/* job specifies what is to be computed. job has */ +/* the decimal expansion abcde, with the following */ +/* meaning. */ + +/* if a.ne.0, compute qy. */ +/* if b,c,d, or e .ne. 0, compute qty. */ +/* if c.ne.0, compute b. */ +/* if d.ne.0, compute rsd. */ +/* if e.ne.0, compute xb. */ + +/* note that a request to compute b, rsd, or xb */ +/* automatically triggers the computation of qty, for */ +/* which an array must be provided in the calling */ +/* sequence. */ + +/* on return */ + +/* qy double precision(n). */ +/* qy conntains q*y, if its computation has been */ +/* requested. */ + +/* qty double precision(n). */ +/* qty contains trans(q)*y, if its computation has */ +/* been requested. here trans(q) is the */ +/* transpose of the matrix q. */ + +/* b double precision(k) */ +/* b contains the solution of the least squares problem */ + +/* minimize norm2(y - xk*b), */ + +/* if its computation has been requested. (note that */ +/* if pivoting was requested in dqrdc, the j-th */ +/* component of b will be associated with column jpvt(j) */ +/* of the original matrix x that was input into dqrdc.) */ + +/* rsd double precision(n). */ +/* rsd contains the least squares residual y - xk*b, */ +/* if its computation has been requested. rsd is */ +/* also the orthogonal projection of y onto the */ +/* orthogonal complement of the column space of xk. */ + +/* xb double precision(n). */ +/* xb contains the least squares approximation xk*b, */ +/* if its computation has been requested. xb is also */ +/* the orthogonal projection of y onto the column space */ +/* of x. */ + +/* info integer. */ +/* info is zero unless the computation of b has */ +/* been requested and r is exactly singular. in */ +/* this case, info is the index of the first zero */ +/* diagonal element of r and b is left unaltered. */ + +/* the parameters qy, qty, b, rsd, and xb are not referenced */ +/* if their computation is not requested and in this case */ +/* can be replaced by dummy variables in the calling program. */ +/* to save storage, the user may in some cases use the same */ +/* array for different parameters in the calling sequence. a */ +/* frequently occuring example is when one wishes to compute */ +/* any of b, rsd, or xb and does not need y or qty. in this */ +/* case one may identify y, qty, and one of b, rsd, or xb, while */ +/* providing separate arrays for anything else that is to be */ +/* computed. thus the calling sequence */ + +/* call dqrsl(x,ldx,n,k,qraux,y,dum,y,b,y,dum,110,info) */ + +/* will result in the computation of b and rsd, with rsd */ +/* overwriting y. more generally, each item in the following */ +/* list contains groups of permissible identifications for */ +/* a single callinng sequence. */ + +/* 1. (y,qty,b) (rsd) (xb) (qy) */ + +/* 2. (y,qty,rsd) (b) (xb) (qy) */ + +/* 3. (y,qty,xb) (b) (rsd) (qy) */ + +/* 4. (y,qy) (qty,b) (rsd) (xb) */ + +/* 5. (y,qy) (qty,rsd) (b) (xb) */ + +/* 6. (y,qy) (qty,xb) (b) (rsd) */ + +/* in any group the value returned in the array allocated to */ +/* the group corresponds to the last member of the group. */ + +/* linpack. this version dated 08/14/78 . */ +/* g.w. stewart, university of maryland, argonne national lab. */ + +/* dqrsl uses the following functions and subprograms. */ + +/* blas daxpy,dcopy,ddot */ +/* fortran dabs,min0,mod */ + +/* internal variables */ + + + +/* set info flag. */ + + /* Parameter adjustments */ + x_dim1 = *ldx; + x_offset = 1 + x_dim1; + x -= x_offset; + --qraux; + --y; + --qy; + --qty; + --b; + --rsd; + --xb; + + /* Function Body */ + *info = 0; + +/* determine what is to be computed. */ + + cqy = *job / 10000 != 0; + cqty = *job % 10000 != 0; + cb = *job % 1000 / 100 != 0; + cr = *job % 100 / 10 != 0; + cxb = *job % 10 != 0; +/* Computing MIN */ + i__1 = *k, i__2 = *n - 1; + ju = min(i__1,i__2); + +/* special action when n=1. */ + + if (ju != 0) { + goto L40; + } + if (cqy) { + qy[1] = y[1]; + } + if (cqty) { + qty[1] = y[1]; + } + if (cxb) { + xb[1] = y[1]; + } + if (! cb) { + goto L30; + } + if (x[x_dim1 + 1] != 0.) { + goto L10; + } + *info = 1; + goto L20; +L10: + b[1] = y[1] / x[x_dim1 + 1]; +L20: +L30: + if (cr) { + rsd[1] = 0.; + } + goto L250; +L40: + +/* set up to compute qy or qty. */ + + if (cqy) { + dcopy_(n, &y[1], &c__1, &qy[1], &c__1); + } + if (cqty) { + dcopy_(n, &y[1], &c__1, &qty[1], &c__1); + } + if (! cqy) { + goto L70; + } + +/* compute qy. */ + + i__1 = ju; + for (jj = 1; jj <= i__1; ++jj) { + j = ju - jj + 1; + if (qraux[j] == 0.) { + goto L50; + } + temp = x[j + j * x_dim1]; + x[j + j * x_dim1] = qraux[j]; + i__2 = *n - j + 1; + t = -ddot_(&i__2, &x[j + j * x_dim1], &c__1, &qy[j], &c__1) / x[j + j + * x_dim1]; + i__2 = *n - j + 1; + daxpy_(&i__2, &t, &x[j + j * x_dim1], &c__1, &qy[j], &c__1); + x[j + j * x_dim1] = temp; +L50: +/* L60: */ + ; + } +L70: + if (! cqty) { + goto L100; + } + +/* compute trans(q)*y. */ + + i__1 = ju; + for (j = 1; j <= i__1; ++j) { + if (qraux[j] == 0.) { + goto L80; + } + temp = x[j + j * x_dim1]; + x[j + j * x_dim1] = qraux[j]; + i__2 = *n - j + 1; + t = -ddot_(&i__2, &x[j + j * x_dim1], &c__1, &qty[j], &c__1) / x[j + + j * x_dim1]; + i__2 = *n - j + 1; + daxpy_(&i__2, &t, &x[j + j * x_dim1], &c__1, &qty[j], &c__1); + x[j + j * x_dim1] = temp; +L80: +/* L90: */ + ; + } +L100: + +/* set up to compute b, rsd, or xb. */ + + if (cb) { + dcopy_(k, &qty[1], &c__1, &b[1], &c__1); + } + kp1 = *k + 1; + if (cxb) { + dcopy_(k, &qty[1], &c__1, &xb[1], &c__1); + } + if (cr && *k < *n) { + i__1 = *n - *k; + dcopy_(&i__1, &qty[kp1], &c__1, &rsd[kp1], &c__1); + } + if (! cxb || kp1 > *n) { + goto L120; + } + i__1 = *n; + for (i__ = kp1; i__ <= i__1; ++i__) { + xb[i__] = 0.; +/* L110: */ + } +L120: + if (! cr) { + goto L140; + } + i__1 = *k; + for (i__ = 1; i__ <= i__1; ++i__) { + rsd[i__] = 0.; +/* L130: */ + } +L140: + if (! cb) { + goto L190; + } + +/* compute b. */ + + i__1 = *k; + for (jj = 1; jj <= i__1; ++jj) { + j = *k - jj + 1; + if (x[j + j * x_dim1] != 0.) { + goto L150; + } + *info = j; +/* ......exit */ + goto L180; +L150: + b[j] /= x[j + j * x_dim1]; + if (j == 1) { + goto L160; + } + t = -b[j]; + i__2 = j - 1; + daxpy_(&i__2, &t, &x[j * x_dim1 + 1], &c__1, &b[1], &c__1); +L160: +/* L170: */ + ; + } +L180: +L190: + if (! cr && ! cxb) { + goto L240; + } + +/* compute rsd or xb as required. */ + + i__1 = ju; + for (jj = 1; jj <= i__1; ++jj) { + j = ju - jj + 1; + if (qraux[j] == 0.) { + goto L220; + } + temp = x[j + j * x_dim1]; + x[j + j * x_dim1] = qraux[j]; + if (! cr) { + goto L200; + } + i__2 = *n - j + 1; + t = -ddot_(&i__2, &x[j + j * x_dim1], &c__1, &rsd[j], &c__1) / x[j + + j * x_dim1]; + i__2 = *n - j + 1; + daxpy_(&i__2, &t, &x[j + j * x_dim1], &c__1, &rsd[j], &c__1); +L200: + if (! cxb) { + goto L210; + } + i__2 = *n - j + 1; + t = -ddot_(&i__2, &x[j + j * x_dim1], &c__1, &xb[j], &c__1) / x[j + j + * x_dim1]; + i__2 = *n - j + 1; + daxpy_(&i__2, &t, &x[j + j * x_dim1], &c__1, &xb[j], &c__1); +L210: + x[j + j * x_dim1] = temp; +L220: +/* L230: */ + ; + } +L240: +L250: + return 0; +} /* dqrsl_ */ + +/* ...................................................................... */ +/* Subroutine */ int dsvdc_(doublereal *x, integer *ldx, integer *n, integer * + p, doublereal *s, doublereal *e, doublereal *u, integer *ldu, + doublereal *v, integer *ldv, doublereal *work, integer *job, integer * + info) +{ + /* System generated locals */ + integer x_dim1, x_offset, u_dim1, u_offset, v_dim1, v_offset, i__1, i__2, + i__3; + doublereal d__1, d__2, d__3, d__4, d__5, d__6, d__7; + + /* Builtin functions */ + double d_sign(doublereal *, doublereal *), sqrt(doublereal); + + /* Local variables */ + static doublereal b, c__, f, g; + static integer i__, j, k, l, m; + static doublereal t, t1, el; + static integer kk; + static doublereal cs; + static integer ll, mm, ls; + static doublereal sl; + static integer lu; + static doublereal sm, sn; + static integer lm1, mm1, lp1, mp1, nct, ncu, lls, nrt; + static doublereal emm1, smm1; + static integer kase; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static integer jobu, iter; + extern /* Subroutine */ int drot_(integer *, doublereal *, integer *, + doublereal *, integer *, doublereal *, doublereal *); + static doublereal test; + extern doublereal dnrm2_(integer *, doublereal *, integer *); + static integer nctp1, nrtp1; + extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *, + integer *); + static doublereal scale, shift; + extern /* Subroutine */ int dswap_(integer *, doublereal *, integer *, + doublereal *, integer *), drotg_(doublereal *, doublereal *, + doublereal *, doublereal *); + static integer maxit; + extern /* Subroutine */ int daxpy_(integer *, doublereal *, doublereal *, + integer *, doublereal *, integer *); + static logical wantu, wantv; + static doublereal ztest; + + + +/* dsvdc is a subroutine to reduce a double precision nxp matrix x */ +/* by orthogonal transformations u and v to diagonal form. the */ +/* diagonal elements s(i) are the singular values of x. the */ +/* columns of u are the corresponding left singular vectors, */ +/* and the columns of v the right singular vectors. */ + +/* on entry */ + +/* x double precision(ldx,p), where ldx.ge.n. */ +/* x contains the matrix whose singular value */ +/* decomposition is to be computed. x is */ +/* destroyed by dsvdc. */ + +/* ldx integer. */ +/* ldx is the leading dimension of the array x. */ + +/* n integer. */ +/* n is the number of rows of the matrix x. */ + +/* p integer. */ +/* p is the number of columns of the matrix x. */ + +/* ldu integer. */ +/* ldu is the leading dimension of the array u. */ +/* (see below). */ + +/* ldv integer. */ +/* ldv is the leading dimension of the array v. */ +/* (see below). */ + +/* work double precision(n). */ +/* work is a scratch array. */ + +/* job integer. */ +/* job controls the computation of the singular */ +/* vectors. it has the decimal expansion ab */ +/* with the following meaning */ + +/* a.eq.0 do not compute the left singular */ +/* vectors. */ +/* a.eq.1 return the n left singular vectors */ +/* in u. */ +/* a.ge.2 return the first min(n,p) singular */ +/* vectors in u. */ +/* b.eq.0 do not compute the right singular */ +/* vectors. */ +/* b.eq.1 return the right singular vectors */ +/* in v. */ + +/* on return */ + +/* s double precision(mm), where mm=min(n+1,p). */ +/* the first min(n,p) entries of s contain the */ +/* singular values of x arranged in descending */ +/* order of magnitude. */ + +/* e double precision(p), */ +/* e ordinarily contains zeros. however see the */ +/* discussion of info for exceptions. */ + +/* u double precision(ldu,k), where ldu.ge.n. if */ +/* joba.eq.1 then k.eq.n, if joba.ge.2 */ +/* then k.eq.min(n,p). */ +/* u contains the matrix of left singular vectors. */ +/* u is not referenced if joba.eq.0. if n.le.p */ +/* or if joba.eq.2, then u may be identified with x */ +/* in the subroutine call. */ + +/* v double precision(ldv,p), where ldv.ge.p. */ +/* v contains the matrix of right singular vectors. */ +/* v is not referenced if job.eq.0. if p.le.n, */ +/* then v may be identified with x in the */ +/* subroutine call. */ + +/* info integer. */ +/* the singular values (and their corresponding */ +/* singular vectors) s(info+1),s(info+2),...,s(m) */ +/* are correct (here m=min(n,p)). thus if */ +/* info.eq.0, all the singular values and their */ +/* vectors are correct. in any event, the matrix */ +/* b = trans(u)*x*v is the bidiagonal matrix */ +/* with the elements of s on its diagonal and the */ +/* elements of e on its super-diagonal (trans(u) */ +/* is the transpose of u). thus the singular */ +/* values of x and b are the same. */ + +/* linpack. this version dated 08/14/78 . */ +/* correction made to shift 2/84. */ +/* g.w. stewart, university of maryland, argonne national lab. */ + +/* dsvdc uses the following functions and subprograms. */ + +/* external drot */ +/* blas daxpy,ddot,dscal,dswap,dnrm2,drotg */ +/* fortran dabs,dmax1,max0,min0,mod,dsqrt */ + +/* internal variables */ + + + +/* set the maximum number of iterations. */ + + /* Parameter adjustments */ + x_dim1 = *ldx; + x_offset = 1 + x_dim1; + x -= x_offset; + --s; + --e; + u_dim1 = *ldu; + u_offset = 1 + u_dim1; + u -= u_offset; + v_dim1 = *ldv; + v_offset = 1 + v_dim1; + v -= v_offset; + --work; + + /* Function Body */ + maxit = 30; + +/* determine what is to be computed. */ + + wantu = FALSE_; + wantv = FALSE_; + jobu = *job % 100 / 10; + ncu = *n; + if (jobu > 1) { + ncu = min(*n,*p); + } + if (jobu != 0) { + wantu = TRUE_; + } + if (*job % 10 != 0) { + wantv = TRUE_; + } + +/* reduce x to bidiagonal form, storing the diagonal elements */ +/* in s and the super-diagonal elements in e. */ + + *info = 0; +/* Computing MIN */ + i__1 = *n - 1; + nct = min(i__1,*p); +/* Computing MAX */ +/* Computing MIN */ + i__3 = *p - 2; + i__1 = 0, i__2 = min(i__3,*n); + nrt = max(i__1,i__2); + lu = max(nct,nrt); + if (lu < 1) { + goto L170; + } + i__1 = lu; + for (l = 1; l <= i__1; ++l) { + lp1 = l + 1; + if (l > nct) { + goto L20; + } + +/* compute the transformation for the l-th column and */ +/* place the l-th diagonal in s(l). */ + + i__2 = *n - l + 1; + s[l] = dnrm2_(&i__2, &x[l + l * x_dim1], &c__1); + if (s[l] == 0.) { + goto L10; + } + if (x[l + l * x_dim1] != 0.) { + s[l] = d_sign(&s[l], &x[l + l * x_dim1]); + } + i__2 = *n - l + 1; + d__1 = 1. / s[l]; + dscal_(&i__2, &d__1, &x[l + l * x_dim1], &c__1); + x[l + l * x_dim1] += 1.; +L10: + s[l] = -s[l]; +L20: + if (*p < lp1) { + goto L50; + } + i__2 = *p; + for (j = lp1; j <= i__2; ++j) { + if (l > nct) { + goto L30; + } + if (s[l] == 0.) { + goto L30; + } + +/* apply the transformation. */ + + i__3 = *n - l + 1; + t = -ddot_(&i__3, &x[l + l * x_dim1], &c__1, &x[l + j * x_dim1], & + c__1) / x[l + l * x_dim1]; + i__3 = *n - l + 1; + daxpy_(&i__3, &t, &x[l + l * x_dim1], &c__1, &x[l + j * x_dim1], & + c__1); +L30: + +/* place the l-th row of x into e for the */ +/* subsequent calculation of the row transformation. */ + + e[j] = x[l + j * x_dim1]; +/* L40: */ + } +L50: + if (! wantu || l > nct) { + goto L70; + } + +/* place the transformation in u for subsequent back */ +/* multiplication. */ + + i__2 = *n; + for (i__ = l; i__ <= i__2; ++i__) { + u[i__ + l * u_dim1] = x[i__ + l * x_dim1]; +/* L60: */ + } +L70: + if (l > nrt) { + goto L150; + } + +/* compute the l-th row transformation and place the */ +/* l-th super-diagonal in e(l). */ + + i__2 = *p - l; + e[l] = dnrm2_(&i__2, &e[lp1], &c__1); + if (e[l] == 0.) { + goto L80; + } + if (e[lp1] != 0.) { + e[l] = d_sign(&e[l], &e[lp1]); + } + i__2 = *p - l; + d__1 = 1. / e[l]; + dscal_(&i__2, &d__1, &e[lp1], &c__1); + e[lp1] += 1.; +L80: + e[l] = -e[l]; + if (lp1 > *n || e[l] == 0.) { + goto L120; + } + +/* apply the transformation. */ + + i__2 = *n; + for (i__ = lp1; i__ <= i__2; ++i__) { + work[i__] = 0.; +/* L90: */ + } + i__2 = *p; + for (j = lp1; j <= i__2; ++j) { + i__3 = *n - l; + daxpy_(&i__3, &e[j], &x[lp1 + j * x_dim1], &c__1, &work[lp1], & + c__1); +/* L100: */ + } + i__2 = *p; + for (j = lp1; j <= i__2; ++j) { + i__3 = *n - l; + d__1 = -e[j] / e[lp1]; + daxpy_(&i__3, &d__1, &work[lp1], &c__1, &x[lp1 + j * x_dim1], & + c__1); +/* L110: */ + } +L120: + if (! wantv) { + goto L140; + } + +/* place the transformation in v for subsequent */ +/* back multiplication. */ + + i__2 = *p; + for (i__ = lp1; i__ <= i__2; ++i__) { + v[i__ + l * v_dim1] = e[i__]; +/* L130: */ + } +L140: +L150: +/* L160: */ + ; + } +L170: + +/* set up the final bidiagonal matrix or order m. */ + +/* Computing MIN */ + i__1 = *p, i__2 = *n + 1; + m = min(i__1,i__2); + nctp1 = nct + 1; + nrtp1 = nrt + 1; + if (nct < *p) { + s[nctp1] = x[nctp1 + nctp1 * x_dim1]; + } + if (*n < m) { + s[m] = 0.; + } + if (nrtp1 < m) { + e[nrtp1] = x[nrtp1 + m * x_dim1]; + } + e[m] = 0.; + +/* if required, generate u. */ + + if (! wantu) { + goto L300; + } + if (ncu < nctp1) { + goto L200; + } + i__1 = ncu; + for (j = nctp1; j <= i__1; ++j) { + i__2 = *n; + for (i__ = 1; i__ <= i__2; ++i__) { + u[i__ + j * u_dim1] = 0.; +/* L180: */ + } + u[j + j * u_dim1] = 1.; +/* L190: */ + } +L200: + if (nct < 1) { + goto L290; + } + i__1 = nct; + for (ll = 1; ll <= i__1; ++ll) { + l = nct - ll + 1; + if (s[l] == 0.) { + goto L250; + } + lp1 = l + 1; + if (ncu < lp1) { + goto L220; + } + i__2 = ncu; + for (j = lp1; j <= i__2; ++j) { + i__3 = *n - l + 1; + t = -ddot_(&i__3, &u[l + l * u_dim1], &c__1, &u[l + j * u_dim1], & + c__1) / u[l + l * u_dim1]; + i__3 = *n - l + 1; + daxpy_(&i__3, &t, &u[l + l * u_dim1], &c__1, &u[l + j * u_dim1], & + c__1); +/* L210: */ + } +L220: + i__2 = *n - l + 1; + dscal_(&i__2, &c_b98, &u[l + l * u_dim1], &c__1); + u[l + l * u_dim1] += 1.; + lm1 = l - 1; + if (lm1 < 1) { + goto L240; + } + i__2 = lm1; + for (i__ = 1; i__ <= i__2; ++i__) { + u[i__ + l * u_dim1] = 0.; +/* L230: */ + } +L240: + goto L270; +L250: + i__2 = *n; + for (i__ = 1; i__ <= i__2; ++i__) { + u[i__ + l * u_dim1] = 0.; +/* L260: */ + } + u[l + l * u_dim1] = 1.; +L270: +/* L280: */ + ; + } +L290: +L300: + +/* if it is required, generate v. */ + + if (! wantv) { + goto L350; + } + i__1 = *p; + for (ll = 1; ll <= i__1; ++ll) { + l = *p - ll + 1; + lp1 = l + 1; + if (l > nrt) { + goto L320; + } + if (e[l] == 0.) { + goto L320; + } + i__2 = *p; + for (j = lp1; j <= i__2; ++j) { + i__3 = *p - l; + t = -ddot_(&i__3, &v[lp1 + l * v_dim1], &c__1, &v[lp1 + j * + v_dim1], &c__1) / v[lp1 + l * v_dim1]; + i__3 = *p - l; + daxpy_(&i__3, &t, &v[lp1 + l * v_dim1], &c__1, &v[lp1 + j * + v_dim1], &c__1); +/* L310: */ + } +L320: + i__2 = *p; + for (i__ = 1; i__ <= i__2; ++i__) { + v[i__ + l * v_dim1] = 0.; +/* L330: */ + } + v[l + l * v_dim1] = 1.; +/* L340: */ + } +L350: + +/* main iteration loop for the singular values. */ + + mm = m; + iter = 0; +L360: + +/* quit if all the singular values have been found. */ + +/* ...exit */ + if (m == 0) { + goto L620; + } + +/* if too many iterations have been performed, set */ +/* flag and return. */ + + if (iter < maxit) { + goto L370; + } + *info = m; +/* ......exit */ + goto L620; +L370: + +/* this section of the program inspects for */ +/* negligible elements in the s and e arrays. on */ +/* completion the variables kase and l are set as follows. */ + +/* kase = 1 if s(m) and e(l-1) are negligible and l.lt.m */ +/* kase = 2 if s(l) is negligible and l.lt.m */ +/* kase = 3 if e(l-1) is negligible, l.lt.m, and */ +/* s(l), ..., s(m) are not negligible (qr step). */ +/* kase = 4 if e(m-1) is negligible (convergence). */ + + i__1 = m; + for (ll = 1; ll <= i__1; ++ll) { + l = m - ll; +/* ...exit */ + if (l == 0) { + goto L400; + } + test = (d__1 = s[l], abs(d__1)) + (d__2 = s[l + 1], abs(d__2)); + ztest = test + (d__1 = e[l], abs(d__1)); + if (ztest != test) { + goto L380; + } + e[l] = 0.; +/* ......exit */ + goto L400; +L380: +/* L390: */ + ; + } +L400: + if (l != m - 1) { + goto L410; + } + kase = 4; + goto L480; +L410: + lp1 = l + 1; + mp1 = m + 1; + i__1 = mp1; + for (lls = lp1; lls <= i__1; ++lls) { + ls = m - lls + lp1; +/* ...exit */ + if (ls == l) { + goto L440; + } + test = 0.; + if (ls != m) { + test += (d__1 = e[ls], abs(d__1)); + } + if (ls != l + 1) { + test += (d__1 = e[ls - 1], abs(d__1)); + } + ztest = test + (d__1 = s[ls], abs(d__1)); + if (ztest != test) { + goto L420; + } + s[ls] = 0.; +/* ......exit */ + goto L440; +L420: +/* L430: */ + ; + } +L440: + if (ls != l) { + goto L450; + } + kase = 3; + goto L470; +L450: + if (ls != m) { + goto L460; + } + kase = 1; + goto L470; +L460: + kase = 2; + l = ls; +L470: +L480: + ++l; + +/* perform the task indicated by kase. */ + + switch (kase) { + case 1: goto L490; + case 2: goto L520; + case 3: goto L540; + case 4: goto L570; + } + +/* deflate negligible s(m). */ + +L490: + mm1 = m - 1; + f = e[m - 1]; + e[m - 1] = 0.; + i__1 = mm1; + for (kk = l; kk <= i__1; ++kk) { + k = mm1 - kk + l; + t1 = s[k]; + drotg_(&t1, &f, &cs, &sn); + s[k] = t1; + if (k == l) { + goto L500; + } + f = -sn * e[k - 1]; + e[k - 1] = cs * e[k - 1]; +L500: + if (wantv) { + drot_(p, &v[k * v_dim1 + 1], &c__1, &v[m * v_dim1 + 1], &c__1, & + cs, &sn); + } +/* L510: */ + } + goto L610; + +/* split at negligible s(l). */ + +L520: + f = e[l - 1]; + e[l - 1] = 0.; + i__1 = m; + for (k = l; k <= i__1; ++k) { + t1 = s[k]; + drotg_(&t1, &f, &cs, &sn); + s[k] = t1; + f = -sn * e[k]; + e[k] = cs * e[k]; + if (wantu) { + drot_(n, &u[k * u_dim1 + 1], &c__1, &u[(l - 1) * u_dim1 + 1], & + c__1, &cs, &sn); + } +/* L530: */ + } + goto L610; + +/* perform one qr step. */ + +L540: + +/* calculate the shift. */ + +/* Computing MAX */ + d__6 = (d__1 = s[m], abs(d__1)), d__7 = (d__2 = s[m - 1], abs(d__2)), + d__6 = max(d__6,d__7), d__7 = (d__3 = e[m - 1], abs(d__3)), d__6 = + max(d__6,d__7), d__7 = (d__4 = s[l], abs(d__4)), d__6 = max(d__6, + d__7), d__7 = (d__5 = e[l], abs(d__5)); + scale = max(d__6,d__7); + sm = s[m] / scale; + smm1 = s[m - 1] / scale; + emm1 = e[m - 1] / scale; + sl = s[l] / scale; + el = e[l] / scale; +/* Computing 2nd power */ + d__1 = emm1; + b = ((smm1 + sm) * (smm1 - sm) + d__1 * d__1) / 2.; +/* Computing 2nd power */ + d__1 = sm * emm1; + c__ = d__1 * d__1; + shift = 0.; + if (b == 0. && c__ == 0.) { + goto L550; + } +/* Computing 2nd power */ + d__1 = b; + shift = sqrt(d__1 * d__1 + c__); + if (b < 0.) { + shift = -shift; + } + shift = c__ / (b + shift); +L550: + f = (sl + sm) * (sl - sm) + shift; + g = sl * el; + +/* chase zeros. */ + + mm1 = m - 1; + i__1 = mm1; + for (k = l; k <= i__1; ++k) { + drotg_(&f, &g, &cs, &sn); + if (k != l) { + e[k - 1] = f; + } + f = cs * s[k] + sn * e[k]; + e[k] = cs * e[k] - sn * s[k]; + g = sn * s[k + 1]; + s[k + 1] = cs * s[k + 1]; + if (wantv) { + drot_(p, &v[k * v_dim1 + 1], &c__1, &v[(k + 1) * v_dim1 + 1], & + c__1, &cs, &sn); + } + drotg_(&f, &g, &cs, &sn); + s[k] = f; + f = cs * e[k] + sn * s[k + 1]; + s[k + 1] = -sn * e[k] + cs * s[k + 1]; + g = sn * e[k + 1]; + e[k + 1] = cs * e[k + 1]; + if (wantu && k < *n) { + drot_(n, &u[k * u_dim1 + 1], &c__1, &u[(k + 1) * u_dim1 + 1], & + c__1, &cs, &sn); + } +/* L560: */ + } + e[m - 1] = f; + ++iter; + goto L610; + +/* convergence. */ + +L570: + +/* make the singular value positive. */ + + if (s[l] >= 0.) { + goto L580; + } + s[l] = -s[l]; + if (wantv) { + dscal_(p, &c_b98, &v[l * v_dim1 + 1], &c__1); + } +L580: + +/* order the singular value. */ + +L590: + if (l == mm) { + goto L600; + } +/* ...exit */ + if (s[l] >= s[l + 1]) { + goto L600; + } + t = s[l]; + s[l] = s[l + 1]; + s[l + 1] = t; + if (wantv && l < *p) { + dswap_(p, &v[l * v_dim1 + 1], &c__1, &v[(l + 1) * v_dim1 + 1], &c__1); + } + if (wantu && l < *n) { + dswap_(n, &u[l * u_dim1 + 1], &c__1, &u[(l + 1) * u_dim1 + 1], &c__1); + } + ++l; + goto L590; +L600: + iter = 0; + --m; +L610: + goto L360; +L620: + return 0; +} /* dsvdc_ */ + +/* ...................................................................... */ +/* Subroutine */ int dqrdc_(doublereal *x, integer *ldx, integer *n, integer * + p, doublereal *qraux, integer *jpvt, doublereal *work, integer *job) +{ + /* System generated locals */ + integer x_dim1, x_offset, i__1, i__2, i__3; + doublereal d__1, d__2; + + /* Builtin functions */ + double d_sign(doublereal *, doublereal *), sqrt(doublereal); + + /* Local variables */ + static integer j, l; + static doublereal t; + static integer jj, jp, pl, pu; + static doublereal tt; + static integer lp1, lup; + static logical negj; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static integer maxj; + extern doublereal dnrm2_(integer *, doublereal *, integer *); + extern /* Subroutine */ int dscal_(integer *, doublereal *, doublereal *, + integer *), dswap_(integer *, doublereal *, integer *, doublereal + *, integer *); + static logical swapj; + extern /* Subroutine */ int daxpy_(integer *, doublereal *, doublereal *, + integer *, doublereal *, integer *); + static doublereal nrmxl, maxnrm; + + +/* dqrdc uses householder transformations to compute the qr */ +/* factorization of an n by p matrix x. column pivoting */ +/* based on the 2-norms of the reduced columns may be */ +/* performed at the users option. */ + +/* on entry */ + +/* x double precision(ldx,p), where ldx .ge. n. */ +/* x contains the matrix whose decomposition is to be */ +/* computed. */ + +/* ldx integer. */ +/* ldx is the leading dimension of the array x. */ + +/* n integer. */ +/* n is the number of rows of the matrix x. */ + +/* p integer. */ +/* p is the number of columns of the matrix x. */ + +/* jpvt integer(p). */ +/* jpvt contains integers that control the selection */ +/* of the pivot columns. the k-th column x(k) of x */ +/* is placed in one of three classes according to the */ +/* value of jpvt(k). */ + +/* if jpvt(k) .gt. 0, then x(k) is an initial */ +/* column. */ + +/* if jpvt(k) .eq. 0, then x(k) is a free column. */ + +/* if jpvt(k) .lt. 0, then x(k) is a final column. */ + +/* before the decomposition is computed, initial columns */ +/* are moved to the beginning of the array x and final */ +/* columns to the end. both initial and final columns */ +/* are frozen in place during the computation and only */ +/* free columns are moved. at the k-th stage of the */ +/* reduction, if x(k) is occupied by a free column */ +/* it is interchanged with the free column of largest */ +/* reduced norm. jpvt is not referenced if */ +/* job .eq. 0. */ + +/* work double precision(p). */ +/* work is a work array. work is not referenced if */ +/* job .eq. 0. */ + +/* job integer. */ +/* job is an integer that initiates column pivoting. */ +/* if job .eq. 0, no pivoting is done. */ +/* if job .ne. 0, pivoting is done. */ + +/* on return */ + +/* x x contains in its upper triangle the upper */ +/* triangular matrix r of the qr factorization. */ +/* below its diagonal x contains information from */ +/* which the orthogonal part of the decomposition */ +/* can be recovered. note that if pivoting has */ +/* been requested, the decomposition is not that */ +/* of the original matrix x but that of x */ +/* with its columns permuted as described by jpvt. */ + +/* qraux double precision(p). */ +/* qraux contains further information required to recover */ +/* the orthogonal part of the decomposition. */ + +/* jpvt jpvt(k) contains the index of the column of the */ +/* original matrix that has been interchanged into */ +/* the k-th column, if pivoting was requested. */ + +/* linpack. this version dated 08/14/78 . */ +/* g.w. stewart, university of maryland, argonne national lab. */ + +/* dqrdc uses the following functions and subprograms. */ + +/* blas daxpy,ddot,dscal,dswap,dnrm2 */ +/* fortran dabs,dmax1,min0,dsqrt */ + +/* internal variables */ + + + + /* Parameter adjustments */ + x_dim1 = *ldx; + x_offset = 1 + x_dim1; + x -= x_offset; + --qraux; + --jpvt; + --work; + + /* Function Body */ + pl = 1; + pu = 0; + if (*job == 0) { + goto L60; + } + +/* pivoting has been requested. rearrange the columns */ +/* according to jpvt. */ + + i__1 = *p; + for (j = 1; j <= i__1; ++j) { + swapj = jpvt[j] > 0; + negj = jpvt[j] < 0; + jpvt[j] = j; + if (negj) { + jpvt[j] = -j; + } + if (! swapj) { + goto L10; + } + if (j != pl) { + dswap_(n, &x[pl * x_dim1 + 1], &c__1, &x[j * x_dim1 + 1], &c__1); + } + jpvt[j] = jpvt[pl]; + jpvt[pl] = j; + ++pl; +L10: +/* L20: */ + ; + } + pu = *p; + i__1 = *p; + for (jj = 1; jj <= i__1; ++jj) { + j = *p - jj + 1; + if (jpvt[j] >= 0) { + goto L40; + } + jpvt[j] = -jpvt[j]; + if (j == pu) { + goto L30; + } + dswap_(n, &x[pu * x_dim1 + 1], &c__1, &x[j * x_dim1 + 1], &c__1); + jp = jpvt[pu]; + jpvt[pu] = jpvt[j]; + jpvt[j] = jp; +L30: + --pu; +L40: +/* L50: */ + ; + } +L60: + +/* compute the norms of the free columns. */ + + if (pu < pl) { + goto L80; + } + i__1 = pu; + for (j = pl; j <= i__1; ++j) { + qraux[j] = dnrm2_(n, &x[j * x_dim1 + 1], &c__1); + work[j] = qraux[j]; +/* L70: */ + } +L80: + +/* perform the householder reduction of x. */ + + lup = min(*n,*p); + i__1 = lup; + for (l = 1; l <= i__1; ++l) { + if (l < pl || l >= pu) { + goto L120; + } + +/* locate the column of largest norm and bring it */ +/* into the pivot position. */ + + maxnrm = 0.; + maxj = l; + i__2 = pu; + for (j = l; j <= i__2; ++j) { + if (qraux[j] <= maxnrm) { + goto L90; + } + maxnrm = qraux[j]; + maxj = j; +L90: +/* L100: */ + ; + } + if (maxj == l) { + goto L110; + } + dswap_(n, &x[l * x_dim1 + 1], &c__1, &x[maxj * x_dim1 + 1], &c__1); + qraux[maxj] = qraux[l]; + work[maxj] = work[l]; + jp = jpvt[maxj]; + jpvt[maxj] = jpvt[l]; + jpvt[l] = jp; +L110: +L120: + qraux[l] = 0.; + if (l == *n) { + goto L190; + } + +/* compute the householder transformation for column l. */ + + i__2 = *n - l + 1; + nrmxl = dnrm2_(&i__2, &x[l + l * x_dim1], &c__1); + if (nrmxl == 0.) { + goto L180; + } + if (x[l + l * x_dim1] != 0.) { + nrmxl = d_sign(&nrmxl, &x[l + l * x_dim1]); + } + i__2 = *n - l + 1; + d__1 = 1. / nrmxl; + dscal_(&i__2, &d__1, &x[l + l * x_dim1], &c__1); + x[l + l * x_dim1] += 1.; + +/* apply the transformation to the remaining columns, */ +/* updating the norms. */ + + lp1 = l + 1; + if (*p < lp1) { + goto L170; + } + i__2 = *p; + for (j = lp1; j <= i__2; ++j) { + i__3 = *n - l + 1; + t = -ddot_(&i__3, &x[l + l * x_dim1], &c__1, &x[l + j * x_dim1], & + c__1) / x[l + l * x_dim1]; + i__3 = *n - l + 1; + daxpy_(&i__3, &t, &x[l + l * x_dim1], &c__1, &x[l + j * x_dim1], & + c__1); + if (j < pl || j > pu) { + goto L150; + } + if (qraux[j] == 0.) { + goto L150; + } +/* Computing 2nd power */ + d__2 = (d__1 = x[l + j * x_dim1], abs(d__1)) / qraux[j]; + tt = 1. - d__2 * d__2; + tt = max(tt,0.); + t = tt; +/* Computing 2nd power */ + d__1 = qraux[j] / work[j]; + tt = tt * .05 * (d__1 * d__1) + 1.; + if (tt == 1.) { + goto L130; + } + qraux[j] *= sqrt(t); + goto L140; +L130: + i__3 = *n - l; + qraux[j] = dnrm2_(&i__3, &x[l + 1 + j * x_dim1], &c__1); + work[j] = qraux[j]; +L140: +L150: +/* L160: */ + ; + } +L170: + +/* save the transformation. */ + + qraux[l] = x[l + l * x_dim1]; + x[l + l * x_dim1] = -nrmxl; +L180: +L190: +/* L200: */ + ; + } + return 0; +} /* dqrdc_ */ + diff --git a/Algorithms/linpack_lite.f b/Algorithms/linpack_lite.f new file mode 100644 index 000000000..ebedddda7 --- /dev/null +++ b/Algorithms/linpack_lite.f @@ -0,0 +1,966 @@ + subroutine dqrsl(x,ldx,n,k,qraux,y,qy,qty,b,rsd,xb,job,info) + integer ldx,n,k,job,info + double precision x(ldx,1),qraux(1),y(1),qy(1),qty(1),b(1),rsd(1), + * xb(1) +c +c dqrsl applies the output of dqrdc to compute coordinate +c transformations, projections, and least squares solutions. +c for k .le. min(n,p), let xk be the matrix +c +c xk = (x(jpvt(1)),x(jpvt(2)), ... ,x(jpvt(k))) +c +c formed from columnns jpvt(1), ... ,jpvt(k) of the original +c n x p matrix x that was input to dqrdc (if no pivoting was +c done, xk consists of the first k columns of x in their +c original order). dqrdc produces a factored orthogonal matrix q +c and an upper triangular matrix r such that +c +c xk = q * (r) +c (0) +c +c this information is contained in coded form in the arrays +c x and qraux. +c +c on entry +c +c x double precision(ldx,p). +c x contains the output of dqrdc. +c +c ldx integer. +c ldx is the leading dimension of the array x. +c +c n integer. +c n is the number of rows of the matrix xk. it must +c have the same value as n in dqrdc. +c +c k integer. +c k is the number of columns of the matrix xk. k +c must nnot be greater than min(n,p), where p is the +c same as in the calling sequence to dqrdc. +c +c qraux double precision(p). +c qraux contains the auxiliary output from dqrdc. +c +c y double precision(n) +c y contains an n-vector that is to be manipulated +c by dqrsl. +c +c job integer. +c job specifies what is to be computed. job has +c the decimal expansion abcde, with the following +c meaning. +c +c if a.ne.0, compute qy. +c if b,c,d, or e .ne. 0, compute qty. +c if c.ne.0, compute b. +c if d.ne.0, compute rsd. +c if e.ne.0, compute xb. +c +c note that a request to compute b, rsd, or xb +c automatically triggers the computation of qty, for +c which an array must be provided in the calling +c sequence. +c +c on return +c +c qy double precision(n). +c qy conntains q*y, if its computation has been +c requested. +c +c qty double precision(n). +c qty contains trans(q)*y, if its computation has +c been requested. here trans(q) is the +c transpose of the matrix q. +c +c b double precision(k) +c b contains the solution of the least squares problem +c +c minimize norm2(y - xk*b), +c +c if its computation has been requested. (note that +c if pivoting was requested in dqrdc, the j-th +c component of b will be associated with column jpvt(j) +c of the original matrix x that was input into dqrdc.) +c +c rsd double precision(n). +c rsd contains the least squares residual y - xk*b, +c if its computation has been requested. rsd is +c also the orthogonal projection of y onto the +c orthogonal complement of the column space of xk. +c +c xb double precision(n). +c xb contains the least squares approximation xk*b, +c if its computation has been requested. xb is also +c the orthogonal projection of y onto the column space +c of x. +c +c info integer. +c info is zero unless the computation of b has +c been requested and r is exactly singular. in +c this case, info is the index of the first zero +c diagonal element of r and b is left unaltered. +c +c the parameters qy, qty, b, rsd, and xb are not referenced +c if their computation is not requested and in this case +c can be replaced by dummy variables in the calling program. +c to save storage, the user may in some cases use the same +c array for different parameters in the calling sequence. a +c frequently occuring example is when one wishes to compute +c any of b, rsd, or xb and does not need y or qty. in this +c case one may identify y, qty, and one of b, rsd, or xb, while +c providing separate arrays for anything else that is to be +c computed. thus the calling sequence +c +c call dqrsl(x,ldx,n,k,qraux,y,dum,y,b,y,dum,110,info) +c +c will result in the computation of b and rsd, with rsd +c overwriting y. more generally, each item in the following +c list contains groups of permissible identifications for +c a single callinng sequence. +c +c 1. (y,qty,b) (rsd) (xb) (qy) +c +c 2. (y,qty,rsd) (b) (xb) (qy) +c +c 3. (y,qty,xb) (b) (rsd) (qy) +c +c 4. (y,qy) (qty,b) (rsd) (xb) +c +c 5. (y,qy) (qty,rsd) (b) (xb) +c +c 6. (y,qy) (qty,xb) (b) (rsd) +c +c in any group the value returned in the array allocated to +c the group corresponds to the last member of the group. +c +c linpack. this version dated 08/14/78 . +c g.w. stewart, university of maryland, argonne national lab. +c +c dqrsl uses the following functions and subprograms. +c +c blas daxpy,dcopy,ddot +c fortran dabs,min0,mod +c +c internal variables +c + integer i,j,jj,ju,kp1 + double precision ddot,t,temp + logical cb,cqy,cqty,cr,cxb +c +c +c set info flag. +c + info = 0 +c +c determine what is to be computed. +c + cqy = job/10000 .ne. 0 + cqty = mod(job,10000) .ne. 0 + cb = mod(job,1000)/100 .ne. 0 + cr = mod(job,100)/10 .ne. 0 + cxb = mod(job,10) .ne. 0 + ju = min0(k,n-1) +c +c special action when n=1. +c + if (ju .ne. 0) go to 40 + if (cqy) qy(1) = y(1) + if (cqty) qty(1) = y(1) + if (cxb) xb(1) = y(1) + if (.not.cb) go to 30 + if (x(1,1) .ne. 0.0d0) go to 10 + info = 1 + go to 20 + 10 continue + b(1) = y(1)/x(1,1) + 20 continue + 30 continue + if (cr) rsd(1) = 0.0d0 + go to 250 + 40 continue +c +c set up to compute qy or qty. +c + if (cqy) call dcopy(n,y,1,qy,1) + if (cqty) call dcopy(n,y,1,qty,1) + if (.not.cqy) go to 70 +c +c compute qy. +c + do 60 jj = 1, ju + j = ju - jj + 1 + if (qraux(j) .eq. 0.0d0) go to 50 + temp = x(j,j) + x(j,j) = qraux(j) + t = -ddot(n-j+1,x(j,j),1,qy(j),1)/x(j,j) + call daxpy(n-j+1,t,x(j,j),1,qy(j),1) + x(j,j) = temp + 50 continue + 60 continue + 70 continue + if (.not.cqty) go to 100 +c +c compute trans(q)*y. +c + do 90 j = 1, ju + if (qraux(j) .eq. 0.0d0) go to 80 + temp = x(j,j) + x(j,j) = qraux(j) + t = -ddot(n-j+1,x(j,j),1,qty(j),1)/x(j,j) + call daxpy(n-j+1,t,x(j,j),1,qty(j),1) + x(j,j) = temp + 80 continue + 90 continue + 100 continue +c +c set up to compute b, rsd, or xb. +c + if (cb) call dcopy(k,qty,1,b,1) + kp1 = k + 1 + if (cxb) call dcopy(k,qty,1,xb,1) + if (cr .and. k .lt. n) call dcopy(n-k,qty(kp1),1,rsd(kp1),1) + if (.not.cxb .or. kp1 .gt. n) go to 120 + do 110 i = kp1, n + xb(i) = 0.0d0 + 110 continue + 120 continue + if (.not.cr) go to 140 + do 130 i = 1, k + rsd(i) = 0.0d0 + 130 continue + 140 continue + if (.not.cb) go to 190 +c +c compute b. +c + do 170 jj = 1, k + j = k - jj + 1 + if (x(j,j) .ne. 0.0d0) go to 150 + info = j +c ......exit + go to 180 + 150 continue + b(j) = b(j)/x(j,j) + if (j .eq. 1) go to 160 + t = -b(j) + call daxpy(j-1,t,x(1,j),1,b,1) + 160 continue + 170 continue + 180 continue + 190 continue + if (.not.cr .and. .not.cxb) go to 240 +c +c compute rsd or xb as required. +c + do 230 jj = 1, ju + j = ju - jj + 1 + if (qraux(j) .eq. 0.0d0) go to 220 + temp = x(j,j) + x(j,j) = qraux(j) + if (.not.cr) go to 200 + t = -ddot(n-j+1,x(j,j),1,rsd(j),1)/x(j,j) + call daxpy(n-j+1,t,x(j,j),1,rsd(j),1) + 200 continue + if (.not.cxb) go to 210 + t = -ddot(n-j+1,x(j,j),1,xb(j),1)/x(j,j) + call daxpy(n-j+1,t,x(j,j),1,xb(j),1) + 210 continue + x(j,j) = temp + 220 continue + 230 continue + 240 continue + 250 continue + return + end +c...................................................................... + subroutine dsvdc(x,ldx,n,p,s,e,u,ldu,v,ldv,work,job,info) + integer ldx,n,p,ldu,ldv,job,info + double precision x(ldx,1),s(1),e(1),u(ldu,1),v(ldv,1),work(1) +c +c +c dsvdc is a subroutine to reduce a double precision nxp matrix x +c by orthogonal transformations u and v to diagonal form. the +c diagonal elements s(i) are the singular values of x. the +c columns of u are the corresponding left singular vectors, +c and the columns of v the right singular vectors. +c +c on entry +c +c x double precision(ldx,p), where ldx.ge.n. +c x contains the matrix whose singular value +c decomposition is to be computed. x is +c destroyed by dsvdc. +c +c ldx integer. +c ldx is the leading dimension of the array x. +c +c n integer. +c n is the number of rows of the matrix x. +c +c p integer. +c p is the number of columns of the matrix x. +c +c ldu integer. +c ldu is the leading dimension of the array u. +c (see below). +c +c ldv integer. +c ldv is the leading dimension of the array v. +c (see below). +c +c work double precision(n). +c work is a scratch array. +c +c job integer. +c job controls the computation of the singular +c vectors. it has the decimal expansion ab +c with the following meaning +c +c a.eq.0 do not compute the left singular +c vectors. +c a.eq.1 return the n left singular vectors +c in u. +c a.ge.2 return the first min(n,p) singular +c vectors in u. +c b.eq.0 do not compute the right singular +c vectors. +c b.eq.1 return the right singular vectors +c in v. +c +c on return +c +c s double precision(mm), where mm=min(n+1,p). +c the first min(n,p) entries of s contain the +c singular values of x arranged in descending +c order of magnitude. +c +c e double precision(p), +c e ordinarily contains zeros. however see the +c discussion of info for exceptions. +c +c u double precision(ldu,k), where ldu.ge.n. if +c joba.eq.1 then k.eq.n, if joba.ge.2 +c then k.eq.min(n,p). +c u contains the matrix of left singular vectors. +c u is not referenced if joba.eq.0. if n.le.p +c or if joba.eq.2, then u may be identified with x +c in the subroutine call. +c +c v double precision(ldv,p), where ldv.ge.p. +c v contains the matrix of right singular vectors. +c v is not referenced if job.eq.0. if p.le.n, +c then v may be identified with x in the +c subroutine call. +c +c info integer. +c the singular values (and their corresponding +c singular vectors) s(info+1),s(info+2),...,s(m) +c are correct (here m=min(n,p)). thus if +c info.eq.0, all the singular values and their +c vectors are correct. in any event, the matrix +c b = trans(u)*x*v is the bidiagonal matrix +c with the elements of s on its diagonal and the +c elements of e on its super-diagonal (trans(u) +c is the transpose of u). thus the singular +c values of x and b are the same. +c +c linpack. this version dated 08/14/78 . +c correction made to shift 2/84. +c g.w. stewart, university of maryland, argonne national lab. +c +c dsvdc uses the following functions and subprograms. +c +c external drot +c blas daxpy,ddot,dscal,dswap,dnrm2,drotg +c fortran dabs,dmax1,max0,min0,mod,dsqrt +c +c internal variables +c + integer i,iter,j,jobu,k,kase,kk,l,ll,lls,lm1,lp1,ls,lu,m,maxit, + * mm,mm1,mp1,nct,nctp1,ncu,nrt,nrtp1 + double precision ddot,t,r + double precision b,c,cs,el,emm1,f,g,dnrm2,scale,shift,sl,sm,sn, + * smm1,t1,test,ztest + logical wantu,wantv +c +c +c set the maximum number of iterations. +c + maxit = 30 +c +c determine what is to be computed. +c + wantu = .false. + wantv = .false. + jobu = mod(job,100)/10 + ncu = n + if (jobu .gt. 1) ncu = min0(n,p) + if (jobu .ne. 0) wantu = .true. + if (mod(job,10) .ne. 0) wantv = .true. +c +c reduce x to bidiagonal form, storing the diagonal elements +c in s and the super-diagonal elements in e. +c + info = 0 + nct = min0(n-1,p) + nrt = max0(0,min0(p-2,n)) + lu = max0(nct,nrt) + if (lu .lt. 1) go to 170 + do 160 l = 1, lu + lp1 = l + 1 + if (l .gt. nct) go to 20 +c +c compute the transformation for the l-th column and +c place the l-th diagonal in s(l). +c + s(l) = dnrm2(n-l+1,x(l,l),1) + if (s(l) .eq. 0.0d0) go to 10 + if (x(l,l) .ne. 0.0d0) s(l) = dsign(s(l),x(l,l)) + call dscal(n-l+1,1.0d0/s(l),x(l,l),1) + x(l,l) = 1.0d0 + x(l,l) + 10 continue + s(l) = -s(l) + 20 continue + if (p .lt. lp1) go to 50 + do 40 j = lp1, p + if (l .gt. nct) go to 30 + if (s(l) .eq. 0.0d0) go to 30 +c +c apply the transformation. +c + t = -ddot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l) + call daxpy(n-l+1,t,x(l,l),1,x(l,j),1) + 30 continue +c +c place the l-th row of x into e for the +c subsequent calculation of the row transformation. +c + e(j) = x(l,j) + 40 continue + 50 continue + if (.not.wantu .or. l .gt. nct) go to 70 +c +c place the transformation in u for subsequent back +c multiplication. +c + do 60 i = l, n + u(i,l) = x(i,l) + 60 continue + 70 continue + if (l .gt. nrt) go to 150 +c +c compute the l-th row transformation and place the +c l-th super-diagonal in e(l). +c + e(l) = dnrm2(p-l,e(lp1),1) + if (e(l) .eq. 0.0d0) go to 80 + if (e(lp1) .ne. 0.0d0) e(l) = dsign(e(l),e(lp1)) + call dscal(p-l,1.0d0/e(l),e(lp1),1) + e(lp1) = 1.0d0 + e(lp1) + 80 continue + e(l) = -e(l) + if (lp1 .gt. n .or. e(l) .eq. 0.0d0) go to 120 +c +c apply the transformation. +c + do 90 i = lp1, n + work(i) = 0.0d0 + 90 continue + do 100 j = lp1, p + call daxpy(n-l,e(j),x(lp1,j),1,work(lp1),1) + 100 continue + do 110 j = lp1, p + call daxpy(n-l,-e(j)/e(lp1),work(lp1),1,x(lp1,j),1) + 110 continue + 120 continue + if (.not.wantv) go to 140 +c +c place the transformation in v for subsequent +c back multiplication. +c + do 130 i = lp1, p + v(i,l) = e(i) + 130 continue + 140 continue + 150 continue + 160 continue + 170 continue +c +c set up the final bidiagonal matrix or order m. +c + m = min0(p,n+1) + nctp1 = nct + 1 + nrtp1 = nrt + 1 + if (nct .lt. p) s(nctp1) = x(nctp1,nctp1) + if (n .lt. m) s(m) = 0.0d0 + if (nrtp1 .lt. m) e(nrtp1) = x(nrtp1,m) + e(m) = 0.0d0 +c +c if required, generate u. +c + if (.not.wantu) go to 300 + if (ncu .lt. nctp1) go to 200 + do 190 j = nctp1, ncu + do 180 i = 1, n + u(i,j) = 0.0d0 + 180 continue + u(j,j) = 1.0d0 + 190 continue + 200 continue + if (nct .lt. 1) go to 290 + do 280 ll = 1, nct + l = nct - ll + 1 + if (s(l) .eq. 0.0d0) go to 250 + lp1 = l + 1 + if (ncu .lt. lp1) go to 220 + do 210 j = lp1, ncu + t = -ddot(n-l+1,u(l,l),1,u(l,j),1)/u(l,l) + call daxpy(n-l+1,t,u(l,l),1,u(l,j),1) + 210 continue + 220 continue + call dscal(n-l+1,-1.0d0,u(l,l),1) + u(l,l) = 1.0d0 + u(l,l) + lm1 = l - 1 + if (lm1 .lt. 1) go to 240 + do 230 i = 1, lm1 + u(i,l) = 0.0d0 + 230 continue + 240 continue + go to 270 + 250 continue + do 260 i = 1, n + u(i,l) = 0.0d0 + 260 continue + u(l,l) = 1.0d0 + 270 continue + 280 continue + 290 continue + 300 continue +c +c if it is required, generate v. +c + if (.not.wantv) go to 350 + do 340 ll = 1, p + l = p - ll + 1 + lp1 = l + 1 + if (l .gt. nrt) go to 320 + if (e(l) .eq. 0.0d0) go to 320 + do 310 j = lp1, p + t = -ddot(p-l,v(lp1,l),1,v(lp1,j),1)/v(lp1,l) + call daxpy(p-l,t,v(lp1,l),1,v(lp1,j),1) + 310 continue + 320 continue + do 330 i = 1, p + v(i,l) = 0.0d0 + 330 continue + v(l,l) = 1.0d0 + 340 continue + 350 continue +c +c main iteration loop for the singular values. +c + mm = m + iter = 0 + 360 continue +c +c quit if all the singular values have been found. +c +c ...exit + if (m .eq. 0) go to 620 +c +c if too many iterations have been performed, set +c flag and return. +c + if (iter .lt. maxit) go to 370 + info = m +c ......exit + go to 620 + 370 continue +c +c this section of the program inspects for +c negligible elements in the s and e arrays. on +c completion the variables kase and l are set as follows. +c +c kase = 1 if s(m) and e(l-1) are negligible and l.lt.m +c kase = 2 if s(l) is negligible and l.lt.m +c kase = 3 if e(l-1) is negligible, l.lt.m, and +c s(l), ..., s(m) are not negligible (qr step). +c kase = 4 if e(m-1) is negligible (convergence). +c + do 390 ll = 1, m + l = m - ll +c ...exit + if (l .eq. 0) go to 400 + test = dabs(s(l)) + dabs(s(l+1)) + ztest = test + dabs(e(l)) + if (ztest .ne. test) go to 380 + e(l) = 0.0d0 +c ......exit + go to 400 + 380 continue + 390 continue + 400 continue + if (l .ne. m - 1) go to 410 + kase = 4 + go to 480 + 410 continue + lp1 = l + 1 + mp1 = m + 1 + do 430 lls = lp1, mp1 + ls = m - lls + lp1 +c ...exit + if (ls .eq. l) go to 440 + test = 0.0d0 + if (ls .ne. m) test = test + dabs(e(ls)) + if (ls .ne. l + 1) test = test + dabs(e(ls-1)) + ztest = test + dabs(s(ls)) + if (ztest .ne. test) go to 420 + s(ls) = 0.0d0 +c ......exit + go to 440 + 420 continue + 430 continue + 440 continue + if (ls .ne. l) go to 450 + kase = 3 + go to 470 + 450 continue + if (ls .ne. m) go to 460 + kase = 1 + go to 470 + 460 continue + kase = 2 + l = ls + 470 continue + 480 continue + l = l + 1 +c +c perform the task indicated by kase. +c + go to (490,520,540,570), kase +c +c deflate negligible s(m). +c + 490 continue + mm1 = m - 1 + f = e(m-1) + e(m-1) = 0.0d0 + do 510 kk = l, mm1 + k = mm1 - kk + l + t1 = s(k) + call drotg(t1,f,cs,sn) + s(k) = t1 + if (k .eq. l) go to 500 + f = -sn*e(k-1) + e(k-1) = cs*e(k-1) + 500 continue + if (wantv) call drot(p,v(1,k),1,v(1,m),1,cs,sn) + 510 continue + go to 610 +c +c split at negligible s(l). +c + 520 continue + f = e(l-1) + e(l-1) = 0.0d0 + do 530 k = l, m + t1 = s(k) + call drotg(t1,f,cs,sn) + s(k) = t1 + f = -sn*e(k) + e(k) = cs*e(k) + if (wantu) call drot(n,u(1,k),1,u(1,l-1),1,cs,sn) + 530 continue + go to 610 +c +c perform one qr step. +c + 540 continue +c +c calculate the shift. +c + scale = dmax1(dabs(s(m)),dabs(s(m-1)),dabs(e(m-1)), + * dabs(s(l)),dabs(e(l))) + sm = s(m)/scale + smm1 = s(m-1)/scale + emm1 = e(m-1)/scale + sl = s(l)/scale + el = e(l)/scale + b = ((smm1 + sm)*(smm1 - sm) + emm1**2)/2.0d0 + c = (sm*emm1)**2 + shift = 0.0d0 + if (b .eq. 0.0d0 .and. c .eq. 0.0d0) go to 550 + shift = dsqrt(b**2+c) + if (b .lt. 0.0d0) shift = -shift + shift = c/(b + shift) + 550 continue + f = (sl + sm)*(sl - sm) + shift + g = sl*el +c +c chase zeros. +c + mm1 = m - 1 + do 560 k = l, mm1 + call drotg(f,g,cs,sn) + if (k .ne. l) e(k-1) = f + f = cs*s(k) + sn*e(k) + e(k) = cs*e(k) - sn*s(k) + g = sn*s(k+1) + s(k+1) = cs*s(k+1) + if (wantv) call drot(p,v(1,k),1,v(1,k+1),1,cs,sn) + call drotg(f,g,cs,sn) + s(k) = f + f = cs*e(k) + sn*s(k+1) + s(k+1) = -sn*e(k) + cs*s(k+1) + g = sn*e(k+1) + e(k+1) = cs*e(k+1) + if (wantu .and. k .lt. n) + * call drot(n,u(1,k),1,u(1,k+1),1,cs,sn) + 560 continue + e(m-1) = f + iter = iter + 1 + go to 610 +c +c convergence. +c + 570 continue +c +c make the singular value positive. +c + if (s(l) .ge. 0.0d0) go to 580 + s(l) = -s(l) + if (wantv) call dscal(p,-1.0d0,v(1,l),1) + 580 continue +c +c order the singular value. +c + 590 if (l .eq. mm) go to 600 +c ...exit + if (s(l) .ge. s(l+1)) go to 600 + t = s(l) + s(l) = s(l+1) + s(l+1) = t + if (wantv .and. l .lt. p) + * call dswap(p,v(1,l),1,v(1,l+1),1) + if (wantu .and. l .lt. n) + * call dswap(n,u(1,l),1,u(1,l+1),1) + l = l + 1 + go to 590 + 600 continue + iter = 0 + m = m - 1 + 610 continue + go to 360 + 620 continue + return + end + +c...................................................................... + + subroutine dqrdc(x,ldx,n,p,qraux,jpvt,work,job) + integer ldx,n,p,job + integer jpvt(1) + double precision x(ldx,1),qraux(1),work(1) +c +c dqrdc uses householder transformations to compute the qr +c factorization of an n by p matrix x. column pivoting +c based on the 2-norms of the reduced columns may be +c performed at the users option. +c +c on entry +c +c x double precision(ldx,p), where ldx .ge. n. +c x contains the matrix whose decomposition is to be +c computed. +c +c ldx integer. +c ldx is the leading dimension of the array x. +c +c n integer. +c n is the number of rows of the matrix x. +c +c p integer. +c p is the number of columns of the matrix x. +c +c jpvt integer(p). +c jpvt contains integers that control the selection +c of the pivot columns. the k-th column x(k) of x +c is placed in one of three classes according to the +c value of jpvt(k). +c +c if jpvt(k) .gt. 0, then x(k) is an initial +c column. +c +c if jpvt(k) .eq. 0, then x(k) is a free column. +c +c if jpvt(k) .lt. 0, then x(k) is a final column. +c +c before the decomposition is computed, initial columns +c are moved to the beginning of the array x and final +c columns to the end. both initial and final columns +c are frozen in place during the computation and only +c free columns are moved. at the k-th stage of the +c reduction, if x(k) is occupied by a free column +c it is interchanged with the free column of largest +c reduced norm. jpvt is not referenced if +c job .eq. 0. +c +c work double precision(p). +c work is a work array. work is not referenced if +c job .eq. 0. +c +c job integer. +c job is an integer that initiates column pivoting. +c if job .eq. 0, no pivoting is done. +c if job .ne. 0, pivoting is done. +c +c on return +c +c x x contains in its upper triangle the upper +c triangular matrix r of the qr factorization. +c below its diagonal x contains information from +c which the orthogonal part of the decomposition +c can be recovered. note that if pivoting has +c been requested, the decomposition is not that +c of the original matrix x but that of x +c with its columns permuted as described by jpvt. +c +c qraux double precision(p). +c qraux contains further information required to recover +c the orthogonal part of the decomposition. +c +c jpvt jpvt(k) contains the index of the column of the +c original matrix that has been interchanged into +c the k-th column, if pivoting was requested. +c +c linpack. this version dated 08/14/78 . +c g.w. stewart, university of maryland, argonne national lab. +c +c dqrdc uses the following functions and subprograms. +c +c blas daxpy,ddot,dscal,dswap,dnrm2 +c fortran dabs,dmax1,min0,dsqrt +c +c internal variables +c + integer j,jp,l,lp1,lup,maxj,pl,pu + double precision maxnrm,dnrm2,tt + double precision ddot,nrmxl,t + logical negj,swapj +c +c + pl = 1 + pu = 0 + if (job .eq. 0) go to 60 +c +c pivoting has been requested. rearrange the columns +c according to jpvt. +c + do 20 j = 1, p + swapj = jpvt(j) .gt. 0 + negj = jpvt(j) .lt. 0 + jpvt(j) = j + if (negj) jpvt(j) = -j + if (.not.swapj) go to 10 + if (j .ne. pl) call dswap(n,x(1,pl),1,x(1,j),1) + jpvt(j) = jpvt(pl) + jpvt(pl) = j + pl = pl + 1 + 10 continue + 20 continue + pu = p + do 50 jj = 1, p + j = p - jj + 1 + if (jpvt(j) .ge. 0) go to 40 + jpvt(j) = -jpvt(j) + if (j .eq. pu) go to 30 + call dswap(n,x(1,pu),1,x(1,j),1) + jp = jpvt(pu) + jpvt(pu) = jpvt(j) + jpvt(j) = jp + 30 continue + pu = pu - 1 + 40 continue + 50 continue + 60 continue +c +c compute the norms of the free columns. +c + if (pu .lt. pl) go to 80 + do 70 j = pl, pu + qraux(j) = dnrm2(n,x(1,j),1) + work(j) = qraux(j) + 70 continue + 80 continue +c +c perform the householder reduction of x. +c + lup = min0(n,p) + do 200 l = 1, lup + if (l .lt. pl .or. l .ge. pu) go to 120 +c +c locate the column of largest norm and bring it +c into the pivot position. +c + maxnrm = 0.0d0 + maxj = l + do 100 j = l, pu + if (qraux(j) .le. maxnrm) go to 90 + maxnrm = qraux(j) + maxj = j + 90 continue + 100 continue + if (maxj .eq. l) go to 110 + call dswap(n,x(1,l),1,x(1,maxj),1) + qraux(maxj) = qraux(l) + work(maxj) = work(l) + jp = jpvt(maxj) + jpvt(maxj) = jpvt(l) + jpvt(l) = jp + 110 continue + 120 continue + qraux(l) = 0.0d0 + if (l .eq. n) go to 190 +c +c compute the householder transformation for column l. +c + nrmxl = dnrm2(n-l+1,x(l,l),1) + if (nrmxl .eq. 0.0d0) go to 180 + if (x(l,l) .ne. 0.0d0) nrmxl = dsign(nrmxl,x(l,l)) + call dscal(n-l+1,1.0d0/nrmxl,x(l,l),1) + x(l,l) = 1.0d0 + x(l,l) +c +c apply the transformation to the remaining columns, +c updating the norms. +c + lp1 = l + 1 + if (p .lt. lp1) go to 170 + do 160 j = lp1, p + t = -ddot(n-l+1,x(l,l),1,x(l,j),1)/x(l,l) + call daxpy(n-l+1,t,x(l,l),1,x(l,j),1) + if (j .lt. pl .or. j .gt. pu) go to 150 + if (qraux(j) .eq. 0.0d0) go to 150 + tt = 1.0d0 - (dabs(x(l,j))/qraux(j))**2 + tt = dmax1(tt,0.0d0) + t = tt + tt = 1.0d0 + 0.05d0*tt*(qraux(j)/work(j))**2 + if (tt .eq. 1.0d0) go to 130 + qraux(j) = qraux(j)*dsqrt(t) + go to 140 + 130 continue + qraux(j) = dnrm2(n-l,x(l+1,j),1) + work(j) = qraux(j) + 140 continue + 150 continue + 160 continue + 170 continue +c +c save the transformation. +c + qraux(l) = x(l,l) + x(l,l) = -nrmxl + 180 continue + 190 continue + 200 continue + return + end diff --git a/Algorithms/lisa_kernel.cl b/Algorithms/lisa_kernel.cl index dd9b91c35..04fd5d980 100755 --- a/Algorithms/lisa_kernel.cl +++ b/Algorithms/lisa_kernel.cl @@ -1,4 +1,111 @@ #pragma OPENCL EXTENSION cl_khr_fp64 : enable + +#define BUCKET_EMPTY -1 + +int hash_code(uint key, uint capacity) +{ + return key % capacity; +} + +void init_bucket(int* bucket, uint capacity) +{ + for (size_t i=0; i> 24); + key = (key + (key << 3)) + (key << 8); // key * 265 + key = key ^ (key >> 14); + key = (key + (key << 2)) + (key << 4); // key * 21 + key = key ^ (key >> 28); + key = key + (key << 31); + return 5.42101086242752217E-20 * key; +} + __kernel void lisa(const int n, const int permutations, const unsigned long last_seed, __global double *values, __global double *local_moran, __global int *num_nbrs, __global int *nbr_idx, __global double *p) { // Get the index of the current element @@ -39,26 +159,26 @@ __kernel void lisa(const int n, const int permutations, const unsigned long last size_t max_rand = n-1; int newRandom; - + size_t perm=0; size_t rand = 0; - + bool is_valid; double rng_val; double permutedLag =0; double localMoranPermuted=0; size_t countLarger = 0; - + size_t rnd_numbers[123]; // 1234 can be replaced with max #nbr - + for (perm=0; perm +#include +#include + + +static char *surf_stat; + +int error_status = 0; +char *error_message = NULL; + +/* Declarations */ + +static void +loess_(double *y, double *x_, long int *size_info, double *weights, double *span, + long int *degree, long int *parametric, long int *drop_square, long int *normalize, + char **statistics, char **surface, double *cell, char **trace_hat_in, + long int *iterations, double *fitted_values, double *fitted_residuals, + double *enp, double *residual_scale, double *one_delta, double *two_delta, + double *pseudovalues, double *trace_hat_out, double *diagonal, + double *robust, double *divisor, long int *parameter, long int *a, double *xi, + double *vert, double *vval); + +void F77_SUB(lowesw)(double*, long int*, double*, double*); +void F77_SUB(lowesp)(long int*, double*, double*, double*, + double*, double*, double*); + +static void +condition(char **surface, char *new_stat, char **trace_hat_in) +{ + if(!strcmp(*surface, "interpolate")) { + if(!strcmp(new_stat, "none")) + surf_stat = "interpolate/none"; + else if(!strcmp(new_stat, "exact")) + surf_stat = "interpolate/exact"; + else if(!strcmp(new_stat, "approximate")) + { + if(!strcmp(*trace_hat_in, "approximate")) + surf_stat = "interpolate/2.approx"; + else if(!strcmp(*trace_hat_in, "exact")) + surf_stat = "interpolate/1.approx"; + } + } + else if(!strcmp(*surface, "direct")) { + if(!strcmp(new_stat, "none")) + surf_stat = "direct/none"; + else if(!strcmp(new_stat, "exact")) + surf_stat = "direct/exact"; + else if(!strcmp(new_stat, "approximate")) + surf_stat = "direct/approximate"; + } +} + +int +comp(const void *d1, const void *d2) +{ + double *_d1 = (double *)d1; + double *_d2 = (double *)d2; + + if(*_d1 < *_d2) + return(-1); + else if(*_d1 == *_d2) + return(0); + else + return(1); +} + + +void +loess_model_setup(loess_model *model) { + int i; + + model->span = 0.75; + model->degree = 2; + model->normalize = TRUE; + + for(i = 0; i < 8; i++) { + model->parametric[i] = FALSE; + model->drop_square[i] = FALSE; + } + + model->family = "gaussian"; +} + +void +loess_inputs_setup(double *x, double *y, double *w, long n, + long p, loess_inputs *inputs) { + int i; + + inputs->y = MALLOC(n * sizeof(double)); + inputs->x = MALLOC(n * p * sizeof(double)); + inputs->weights = MALLOC(n * sizeof(double)); + + for(i = 0; i < (n * p); i++) { + inputs->x[i] = x[i]; + } + + for(i = 0; i < n; i++) { + inputs->y[i] = y[i]; + inputs->weights[i] = w[i]; + } + + inputs->n = n; + inputs->p = p; +} + +void loess_outputs_setup(long n, long p, loess_outputs *outputs) { + outputs->enp = 0; + outputs->one_delta = 0; + outputs->residual_scale = 0; + outputs->fitted_values = MALLOC(n * sizeof(double)); + outputs->fitted_residuals = MALLOC(n * sizeof(double)); + outputs->diagonal = MALLOC(n * sizeof(double)); + outputs->robust = MALLOC(n * sizeof(double)); + outputs->divisor = MALLOC(p * sizeof(double)); + outputs->pseudovalues = MALLOC(n * sizeof(double)); +} + +void +loess_kd_tree_setup(long n, long p, loess_kd_tree *kd_tree) { + int max_kd; + + max_kd = n > 200 ? n : 200; + + kd_tree->parameter = MALLOC(7 * sizeof(long int)); + kd_tree->a = MALLOC(max_kd * sizeof(long int)); + kd_tree->xi = MALLOC(max_kd * sizeof(double)); + kd_tree->vert = MALLOC(p * 2 * sizeof(double)); + kd_tree->vval = MALLOC((p + 1) * max_kd * sizeof(double)); +} + +void +loess_control_setup(loess_control *control) { + control->surface = "interpolate"; + control->statistics = "approximate"; + control->cell = 0.2; + control->trace_hat = "wait.to.decide"; + control->iterations = 4; +} + +void +loess_setup(double *x, double *y, double *w, long n, long p, loess *lo) +{ + lo->inputs = malloc(sizeof(loess_inputs)); + lo->model = malloc(sizeof(loess_model)); + lo->control = malloc(sizeof(loess_control)); + lo->outputs = malloc(sizeof(loess_outputs)); + lo->kd_tree = malloc(sizeof(loess_kd_tree)); + + loess_inputs_setup(x, y, w, n, p, lo->inputs); + loess_model_setup(lo->model); + loess_control_setup(lo->control); + loess_outputs_setup(n, p, lo->outputs); + loess_kd_tree_setup(n, p, lo->kd_tree); +} + +static void +loess_(double *y, double *x_, long int *size_info, double *weights, double *span, + long int *degree, long int *parametric, long int *drop_square, long int *normalize, + char **statistics, char **surface, double *cell, char **trace_hat_in, + long int *iterations, double *fitted_values, double *fitted_residuals, + double *enp, double *residual_scale, double *one_delta, double *two_delta, + double *pseudovalues, double *trace_hat_out, double *diagonal, + double *robust, double *divisor, long int *parameter, long int *a, double *xi, + double *vert, double *vval) +{ + double *x, *x_tmp, new_cell, trL, delta1, delta2, sum_squares = 0, + pseudo_resid, *temp, *xi_tmp, *vert_tmp, *vval_tmp, + *diag_tmp, trL_tmp = 0, d1_tmp = 0, d2_tmp = 0, sum, mean; + long int i, j, k, p, N, D, sum_drop_sqr = 0, sum_parametric = 0, + setLf, nonparametric = 0, *order_parametric, + *order_drop_sqr, zero = 0, max_kd; + long int *param_tmp, *a_tmp; + long int cut; + char *new_stat; + + D = size_info[0]; + N = size_info[1]; + max_kd = (N > 200 ? N : 200); + *one_delta = *two_delta = *trace_hat_out = 0; + + x = MALLOC(D * N * sizeof(double)); + x_tmp = MALLOC(D * N * sizeof(double)); + temp = MALLOC(N * sizeof(double)); + a_tmp = MALLOC(max_kd * sizeof(long int)); + xi_tmp = MALLOC(max_kd * sizeof(double)); + vert_tmp = MALLOC(D * 2 * sizeof(double)); + vval_tmp = MALLOC((D + 1) * max_kd * sizeof(double)); + diag_tmp = MALLOC(N * sizeof(double)); + param_tmp = MALLOC(N * sizeof(long int)); + order_parametric = MALLOC(D * sizeof(long int)); + order_drop_sqr = MALLOC(D * sizeof(long int)); + + new_cell = (*span) * (*cell); + for(i = 0; i < N; i++) + robust[i] = 1; + for(i = 0; i < (N * D); i++) + x_tmp[i] = x_[i]; + if((*normalize) && (D > 1)) { + cut = ceil(0.100000000000000000001 * N); + for(i = 0; i < D; i++) { + k = i * N; + for(j = 0; j < N; j++) + temp[j] = x_[k + j]; + qsort(temp, N, sizeof(double), comp); + sum = 0; + for(j = cut; j <= (N - cut - 1); j++) + sum = sum + temp[j]; + mean = sum / (N - 2 * cut); + sum = 0; + for(j = cut; j <= (N - cut - 1); j++) { + temp[j] = temp[j] - mean; + sum = sum + temp[j] * temp[j]; + } + divisor[i] = sqrt(sum / (N - 2 * cut - 1)); + for(j = 0; j < N; j++) { + p = k + j; + x_tmp[p] = x_[p] / divisor[i]; + } + } + } + else + for(i = 0; i < D; i++) divisor[i] = 1; + + j = D - 1; + for(i = 0; i < D; i++) { + sum_drop_sqr = sum_drop_sqr + drop_square[i]; + sum_parametric = sum_parametric + parametric[i]; + if(parametric[i]) + order_parametric[j--] = i; + else + order_parametric[nonparametric++] = i; + } + //Reorder the predictors w/ the non-parametric first + for(i = 0; i < D; i++) { + order_drop_sqr[i] = 2 - drop_square[order_parametric[i]]; + k = i * N; + p = order_parametric[i] * N; + for(j = 0; j < N; j++) + x[k + j] = x_tmp[p + j]; + } + + // Misc. checks ............................. + if((*degree) == 1 && sum_drop_sqr) { + error_status = 1; + error_message = "Specified the square of a factor predictor to be "\ + "dropped when degree = 1"; + return; + } + + if(D == 1 && sum_drop_sqr) { + error_status = 1; + error_message = "Specified the square of a predictor to be dropped "\ + "with only one numeric predictor"; + return; + } + + if(sum_parametric == D) { + error_status = 1; + error_message = "Specified parametric for all predictors"; + return; + } + + // Start the iterations ..................... + for(j = 0; j <= (*iterations); j++) { + new_stat = j ? "none" : *statistics; + for(i = 0; i < N; i++) + robust[i] = weights[i] * robust[i]; + condition(surface, new_stat, trace_hat_in); + setLf = !strcmp(surf_stat, "interpolate/exact"); + loess_raw(y, x, weights, robust, &D, &N, span, degree, + &nonparametric, order_drop_sqr, &sum_drop_sqr, + &new_cell, &surf_stat, fitted_values, parameter, a, + xi, vert, vval, diagonal, &trL, &delta1, &delta2, + &setLf); + if(j == 0) { + *trace_hat_out = trL; + *one_delta = delta1; + *two_delta = delta2; + } + for(i = 0; i < N; i++){ + fitted_residuals[i] = y[i] - fitted_values[i]; + }; + if(j < (*iterations)) + lowesw_(fitted_residuals, &N, robust, temp); + } + + if((*iterations) > 0) { + lowesp_(&N, y, fitted_values, weights, robust, temp, + pseudovalues); + loess_raw(pseudovalues, x, weights, weights, &D, &N, span, + degree, &nonparametric, order_drop_sqr, &sum_drop_sqr, + &new_cell, &surf_stat, temp, param_tmp, a_tmp, xi_tmp, + vert_tmp, vval_tmp, diag_tmp, &trL_tmp, &d1_tmp, &d2_tmp, + &zero); + for(i = 0; i < N; i++) { + pseudo_resid = pseudovalues[i] - temp[i]; + sum_squares = sum_squares + weights[i] * pseudo_resid * pseudo_resid; + } + } else { + for(i = 0; i < N; i++) + sum_squares = sum_squares + weights[i] * + fitted_residuals[i] * fitted_residuals[i]; + } + + *enp = (*one_delta) + 2 * (*trace_hat_out) - N; + *residual_scale = sqrt(sum_squares / (*one_delta)); + + //Clean the mess and leave .................. + free(x); + free(x_tmp); + free(temp); + free(xi_tmp); + free(vert_tmp); + free(vval_tmp); + free(diag_tmp); + free(a_tmp); + free(param_tmp); + free(order_parametric); + free(order_drop_sqr); +} + +void +loess_fit(loess *lo) +{ + long int size_info[2], iterations; + + size_info[0] = lo->inputs->p; + size_info[1] = lo->inputs->n; + + //Reset the default error status... + error_status = 0; + lo->status.err_status = 0; + lo->status.err_msg = NULL; + + iterations = (!strcmp(lo->model->family, "gaussian")) ? 0 : + lo->control->iterations; + if(!strcmp(lo->control->trace_hat, "wait.to.decide")) { + if(!strcmp(lo->control->surface, "interpolate")) + lo->control->trace_hat = (lo->inputs->n < 500) ? "exact" : "approximate"; + else + lo->control->trace_hat = "exact"; + } + loess_(lo->inputs->y, lo->inputs->x, size_info, lo->inputs->weights, + &lo->model->span, + &lo->model->degree, + lo->model->parametric, + lo->model->drop_square, + &lo->model->normalize, + &lo->control->statistics, + &lo->control->surface, + &lo->control->cell, + &lo->control->trace_hat, + &iterations, + lo->outputs->fitted_values, + lo->outputs->fitted_residuals, + &lo->outputs->enp, + &lo->outputs->residual_scale, + &lo->outputs->one_delta, + &lo->outputs->two_delta, + lo->outputs->pseudovalues, + &lo->outputs->trace_hat, + lo->outputs->diagonal, + lo->outputs->robust, + lo->outputs->divisor, + lo->kd_tree->parameter, + lo->kd_tree->a, + lo->kd_tree->xi, + lo->kd_tree->vert, + lo->kd_tree->vval); + + if(error_status){ + lo->status.err_status = error_status; + lo->status.err_msg = error_message; + } +} + + +void loess_inputs_free(loess_inputs *inputs) { + free(inputs->x); + free(inputs->y); + free(inputs->weights); +} + +void loess_outputs_free(loess_outputs *outputs) { + free(outputs->fitted_values); + free(outputs->fitted_residuals); + free(outputs->diagonal); + free(outputs->robust); + free(outputs->divisor); + free(outputs->pseudovalues); +} + +void loess_kd_tree_free(loess_kd_tree *kd_tree) { + free(kd_tree->parameter); + free(kd_tree->a); + free(kd_tree->xi); + free(kd_tree->vert); + free(kd_tree->vval); +} + +void +loess_free_mem(loess *lo) +{ + loess_inputs_free(lo->inputs); + loess_outputs_free(lo->outputs); + loess_kd_tree_free(lo->kd_tree); +} + +void +loess_summary(loess *lo) +{ + printf("Number of Observations : %ld\n", lo->inputs->n); + printf("Equivalent Number of Parameters: %.1f\n", lo->outputs->enp); + if(!strcmp(lo->model->family, "gaussian")) + printf("Residual Standard Error : "); + else + printf("Residual Scale Estimate: "); + printf("%.4f\n", lo->outputs->residual_scale); +} + diff --git a/Algorithms/loess.h b/Algorithms/loess.h new file mode 100755 index 000000000..27d270a43 --- /dev/null +++ b/Algorithms/loess.h @@ -0,0 +1,157 @@ +#include +#include + +#ifndef __LOESS_HEADER__ +#define __LOESS_HEADER__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define TRUE 1 +#define FALSE 0 +#define MALLOC(n) safe_malloc(n, __LINE__) + +/* Structures */ + +typedef struct { + int err_status; + char *err_msg; + } loess_errstatus; + +typedef struct { + long n; + long p; + double *y; + double *x; + double *weights; + } loess_inputs; + +typedef struct { + double span; + long int degree; + long int normalize; + long int parametric[8]; + long int drop_square[8]; + char *family; + } loess_model; + +typedef struct { + char *surface; + char *statistics; + double cell; + char *trace_hat; + long int iterations; + } loess_control; + +typedef struct { + long int *parameter; + long int *a; + double *xi; + double *vert; + double *vval; + } loess_kd_tree; + +typedef struct { + double *fitted_values; + double *fitted_residuals; + double enp; + double residual_scale; + double one_delta; + double two_delta; + double *pseudovalues; + double trace_hat; + double *diagonal; + double *robust; + double *divisor; + } loess_outputs; + +typedef struct { + loess_inputs *inputs; + loess_model *model; + loess_control *control; + loess_kd_tree *kd_tree; + loess_outputs *outputs; + loess_errstatus status; +} loess; + +typedef struct { + double *fit; + double *se_fit; + long int se; + long int m; + double residual_scale; + double df; + } prediction; + +typedef struct { + double dfn; + double dfd; + double F_value; + double Pr_F; + } anova_struct; + +typedef struct { + double *fit; + double *upper; + double *lower; + } confidence_intervals; + +// from loess.c +void loess_model_setup(loess_model *model); +void loess_inputs_setup(double *x, double *y, double *w, long n, long p, loess_inputs *inputs); +void loess_outputs_setup(long n, long p, loess_outputs *outputs); +void loess_control_setup(loess_control *control); +void loess_kd_tree_setup(long n, long p, loess_kd_tree *kd_tree); +void loess_setup(double *x, double *y, double *w, long n, long p, loess *lo); +void loess_fit(loess *lo); +void loess_inputs_free(loess_inputs *inputs); +void loess_outputs_free(loess_outputs *outputs); +void loess_kd_tree_free(loess_kd_tree *kd_tree); +void loess_free_mem(loess *lo); +void loess_summary(loess *lo); +void loess_raw(double *y, double *x, double *weights, double *robust, long int *d, + long int*n, double *span, long int *degree, long int *nonparametric, + long int *drop_square, long int *sum_drop_sqr, double *cell, char **surf_stat, + double *surface, long int *parameter, long int *a, double *xi, double *vert, + double *vval, double *diagonal, double *trL, double *one_delta, + double *two_delta, long int *setLf); + +// from loessc.c +void +loess_ise(double *y, double *x, double *x_evaluate, double *weights, + double *span, long int *degree, long int *nonparametric, long int *drop_square, + long int *sum_drop_sqr, double *cell, long int *d, long int *n, long int *m, + double *fit, double *L); + +void +loess_ifit(long int *parameter, long int *a, double *xi, double *vert, double *vval, + long int *m, double *x_evaluate, double *fit); + +void +loess_dfitse(double *y, double *x, double *x_evaluate, double *weights, + double *robust, long int *family, double *span, long int *degree, + long int *nonparametric, long int *drop_square, long int *sum_drop_sqr, + long int *d, long int *n, long int *m, double *fit, double *L); +void +loess_dfit(double *y, double *x, double *x_evaluate, double *weights, + double *span, long int *degree, long int *nonparametric, + long int *drop_square, long int *sum_drop_sqr, long int *d, long int *n, long int *m, + double *fit); + +// from misc.c +void *safe_malloc(size_t n, unsigned long line); +void pointwise(prediction *pre, double coverage, confidence_intervals *ci); +void pw_free_mem(confidence_intervals *ci); +double pf(double q, double df1, double df2); +double ibeta(double x, double a, double b); + +// from predict.c +void predict(double *eval, loess *lo, prediction *pre); +void pred_free_mem(prediction *pre); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Algorithms/loessc.c b/Algorithms/loessc.c new file mode 100755 index 000000000..bc1ea04e9 --- /dev/null +++ b/Algorithms/loessc.c @@ -0,0 +1,491 @@ +/* + * The authors of this software are Cleveland, Grosse, and Shyu. + * Copyright (c) 1989, 1992 by AT&T. + * Permission to use, copy, modify, and distribute this software for any + * purpose without fee is hereby granted, provided that this entire notice + * is included in all copies of any software which is or includes a copy + * or modification of this software and in all copies of the supporting + * documentation for such software. + * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY + * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + */ +#include "S.h" +#include +#include +#include +#include + +#ifndef snprintf +#define snprintf printf +#endif + +/* Declarations */ + +static void +loess_workspace(long int *d, long int *n, double *span, long int *degree, + long int *nonparametric, long int *drop_square, + long int *sum_drop_sqr, long int *setLf); + +static void +loess_prune(long int *parameter, long int *a, double *xi, double *vert, + double *vval); + +static void +loess_grow(long int *parameter, long int *a, double *xi, double *vert, + double *vval); + +static void +loess_free(void); + +#define min(x,y) ((x) < (y) ? (x) : (y)) +#define max(x,y) ((x) > (y) ? (x) : (y)) +#define GAUSSIAN 1 +#define SYMMETRIC 0 + +static long int *iv=NULL, liv, lv, tau; +static double *v=NULL; + +extern char *error_message; +extern int error_status; + + +void lowesa_(double*, long int*, long int*, long int*, long int*, double*, double*); +void lowesb_(double*, double*, double*, double*, long int*, long int*, long int*, + long int*, double*); +void lowesc_(long int*, double*, double*, double*, double*, double*); +void lowesd_(long int*, long int*, long int*, long int*, double*, long int*, long int*, + double*, long int*, long int*, long int*); +void lowese_(long int*, long int*, long int*, double*, long int*, double*, double*); +void lowesf_(double*, double*, double*, long int*, long int*, long int*, double*, + long int*, double*, double*, long int*, double*); +void lowesl_(long int*, long int*, long int*, double*, long int*, double*, double*); +void ehg169_(long int*, long int*, long int*, long int*, long int*, long int*, + double*, long int*, double*, long int*, long int*, long int*); +void ehg196_(long int*, long int*, double*, double*); +void ehg182_(long int *i); +void ehg183a_(char *s, long int *nc,long int *i,long int *n,long int *inc); +void ehg184a_(char *s, long int *nc, double *x, long int *n, long int *inc); + +void +loess_raw(double *y, double *x, double *weights, double *robust, long int *d, + long int*n, double *span, long int *degree, long int *nonparametric, + long int *drop_square, long int *sum_drop_sqr, double *cell, char **surf_stat, + double *surface, long int *parameter, long int *a, double *xi, double *vert, + double *vval, double *diagonal, double *trL, double *one_delta, + double *two_delta, long int *setLf) +{ + long int zero = 0, one = 1, two = 2, nsing, i, k; + double *hat_matrix, *LL, dzero=0; + + + *trL = 0; + loess_workspace(d, n, span, degree, nonparametric, drop_square, + sum_drop_sqr, setLf); + v[1] = *cell; + if(!strcmp(*surf_stat, "interpolate/none")) { + lowesb_(x, y, robust, &dzero, &zero, iv, &liv, &lv, v); + lowese_(iv, &liv, &lv, v, n, x, surface); + loess_prune(parameter, a, xi, vert, vval); + } + else if (!strcmp(*surf_stat, "direct/none")) { + lowesf_(x, y, robust, iv, &liv, &lv, v, n, x, + &dzero, &zero, surface); + } + else if (!strcmp(*surf_stat, "interpolate/1.approx")) { + lowesb_(x, y, weights, diagonal, &one, iv, &liv, &lv, v); + lowese_(iv, &liv, &lv, v, n, x, surface); + nsing = iv[29]; + for(i = 0; i < (*n); i++) *trL = *trL + diagonal[i]; + lowesa_(trL, n, d, &tau, &nsing, one_delta, two_delta); + loess_prune(parameter, a, xi, vert, vval); + } + else if (!strcmp(*surf_stat, "interpolate/2.approx")) { + lowesb_(x, y, weights, &dzero, &zero, iv, &liv, &lv, v); + lowese_(iv, &liv, &lv, v, n, x, surface); + nsing = iv[29]; + ehg196_(&tau, d, span, trL); + lowesa_(trL, n, d, &tau, &nsing, one_delta, two_delta); + loess_prune(parameter, a, xi, vert, vval); + } + else if (!strcmp(*surf_stat, "direct/approximate")) { + lowesf_(x, y, weights, iv, &liv, &lv, v, n, x, + diagonal, &one, surface); + nsing = iv[29]; + for(i = 0; i < (*n); i++) *trL = *trL + diagonal[i]; + lowesa_(trL, n, d, &tau, &nsing, one_delta, two_delta); + } + else if (!strcmp(*surf_stat, "interpolate/exact")) { + hat_matrix = Calloc((*n)*(*n), double); + LL = Calloc((*n)*(*n), double); + lowesb_(x, y, weights, diagonal, &one, iv, &liv, &lv, v); + lowesl_(iv, &liv, &lv, v, n, x, hat_matrix); + lowesc_(n, hat_matrix, LL, trL, one_delta, two_delta); + lowese_(iv, &liv, &lv, v, n, x, surface); + loess_prune(parameter, a, xi, vert, vval); + Free(hat_matrix); + Free(LL); + } + else if (!strcmp(*surf_stat, "direct/exact")) { + hat_matrix = Calloc((*n)*(*n), double); + LL = Calloc((*n)*(*n), double); + lowesf_(x, y, weights, iv, &liv, &lv, v, n, x, + hat_matrix, &two, surface); + lowesc_(n, hat_matrix, LL, trL, one_delta, two_delta); + k = (*n) + 1; + for(i = 0; i < (*n); i++) + diagonal[i] = hat_matrix[i * k]; + Free(hat_matrix); + Free(LL); + } + loess_free(); +} + +void +loess_dfit(double *y, double *x, double *x_evaluate, double *weights, + double *span, long int *degree, long int *nonparametric, + long int *drop_square, long int *sum_drop_sqr, long int *d, long int *n, long int *m, + double *fit) +{ + long int zero = 0; + double dzero = 0.0; + loess_workspace(d, n, span, degree, nonparametric, drop_square, + sum_drop_sqr, &zero); + lowesf_(x, y, weights, iv, &liv, &lv, v, m, x_evaluate, + &dzero, &zero, fit); + loess_free(); +} + +void +loess_dfitse(double *y, double *x, double *x_evaluate, double *weights, + double *robust, long int *family, double *span, long int *degree, + long int *nonparametric, long int *drop_square, long int *sum_drop_sqr, + long int *d, long int *n, long int *m, double *fit, double *L) +{ + long int zero = 0, two = 2; + double dzero = 0.0; + loess_workspace(d, n, span, degree, nonparametric, drop_square, + sum_drop_sqr, &zero); + if(*family == GAUSSIAN) + lowesf_(x, y, weights, iv, &liv, &lv, v, m, + x_evaluate, L, &two, fit); + else if(*family == SYMMETRIC) + { + lowesf_(x, y, weights, iv, &liv, &lv, v, m, + x_evaluate, L, &two, fit); + lowesf_(x, y, robust, iv, &liv, &lv, v, m, + x_evaluate, &dzero, &zero, fit); + } + loess_free(); +} + +void +loess_ifit(long int *parameter, long int *a, double *xi, double *vert, double *vval, + long int *m, double *x_evaluate, double *fit) +{ + loess_grow(parameter, a, xi, vert, vval); + lowese_(iv, &liv, &lv, v, m, x_evaluate, fit); + loess_free(); +} + +void +loess_ise(double *y, double *x, double *x_evaluate, double *weights, + double *span, long int *degree, long int *nonparametric, long int *drop_square, + long int *sum_drop_sqr, double *cell, long int *d, long int *n, long int *m, + double *fit, double *L) +{ + long int zero = 0, one = 1; + double dzero = 0.0; + loess_workspace(d, n, span, degree, nonparametric, drop_square, + sum_drop_sqr, &one); + v[1] = *cell; + lowesb_(x, y, weights, &dzero, &zero, iv, &liv, &lv, v); + lowesl_(iv, &liv, &lv, v, m, x_evaluate, L); + loess_free(); +} + +static void +loess_workspace(long int *d, long int *n, double *span, long int *degree, + long int *nonparametric, long int *drop_square, long int *sum_drop_sqr, + long int *setLf) +{ + long int D, N, tau0, nvmax, nf, version = 106, i; + double dliv; + D = *d; + N = *n; + nvmax = max(200, N); + nf = min(N, floor(N * (*span)+1e-5)); + if (nf <= 0) { + error_status = 1; + error_message = "span is too small"; + return; + } + tau0 = ((*degree) > 1) ? ((D + 2) * (D + 1) * 0.5) : (D + 1); + tau = tau0 - (*sum_drop_sqr); + lv = 50 + (3 * D + 3) * nvmax + N + (tau0 + 2) * nf; + dliv = 50 + (pow(2.0, (double)D) + 4.0) * nvmax + 2.0 * N; + if (dliv < INT_MAX) + liv = (long int) dliv; + else { + error_status = 1; + error_message = "workspace required is too large"; + return; + } + if(*setLf) { + lv = lv + (D + 1) * nf * nvmax; + liv = liv + nf * nvmax; + } + iv = Calloc(liv, long int); + v = Calloc(lv, double); + + lowesd_(&version, iv, &liv, &lv, v, d, n, span, degree, + &nvmax, setLf); + iv[32] = *nonparametric; + for(i = 0; i < D; i++) + iv[i + 40] = drop_square[i]; +} + +static void +loess_prune(long int *parameter, long int *a, double *xi, double *vert, double *vval) +{ + long int d, vc, a1, v1, xi1, vv1, nc, nv, nvmax, i, k; + + d = iv[1]; + vc = iv[3] - 1; + nc = iv[4]; + nv = iv[5]; + a1 = iv[6] - 1; + v1 = iv[10] - 1; + xi1 = iv[11] - 1; + vv1 = iv[12] - 1; + nvmax = iv[13]; + + for(i = 0; i < 5; i++) + parameter[i] = iv[i + 1]; + parameter[5] = iv[21] - 1; + parameter[6] = iv[14] - 1; + + for(i = 0; i < d; i++) { + k = nvmax * i; + vert[i] = v[v1 + k]; + vert[i + d] = v[v1 + vc + k]; + } + for(i = 0; i < nc; i++) { + xi[i] = v[xi1 + i]; + a[i] = iv[a1 + i]; + } + k = (d + 1) * nv; + for(i = 0; i < k; i++) + vval[i] = v[vv1 + i]; +} + +static void +loess_grow(long int *parameter, long int *a, double *xi, double *vert, double *vval) +{ + long int d, vc, nc, nv, a1, v1, xi1, vv1, i, k; + + d = parameter[0]; + vc = parameter[2]; + nc = parameter[3]; + nv = parameter[4]; + liv = parameter[5]; + lv = parameter[6]; + iv = Calloc(liv, long int); + v = Calloc(lv, double); + + iv[1] = d; + iv[2] = parameter[1]; + iv[3] = vc; + iv[5] = iv[13] = nv; + iv[4] = iv[16] = nc; + iv[6] = 50; + iv[7] = iv[6] + nc; + iv[8] = iv[7] + vc * nc; + iv[9] = iv[8] + nc; + iv[10] = 50; + iv[12] = iv[10] + nv * d; + iv[11] = iv[12] + (d + 1) * nv; + iv[27] = 173; + + v1 = iv[10] - 1; + xi1 = iv[11] - 1; + a1 = iv[6] - 1; + vv1 = iv[12] - 1; + + for(i = 0; i < d; i++) { + k = nv * i; + v[v1 + k] = vert[i]; + v[v1 + vc - 1 + k] = vert[i + d]; + } + for(i = 0; i < nc; i++) { + v[xi1 + i] = xi[i]; + iv[a1 + i] = a[i]; + } + k = (d + 1) * nv; + for(i = 0; i < k; i++) + v[vv1 + i] = vval[i]; + + ehg169_(&d, &vc, &nc, &nc, &nv, &nv, v+v1, iv+a1, + v+xi1, iv+iv[7]-1, iv+iv[8]-1, iv+iv[9]-1); +} + +static void +loess_free(void) +{ + Free(v); + Free(iv); +} + +/* begin ehg's FORTRAN-callable C-codes */ + +void ehg182_(long int *i) +{ +char *mess, mess2[50]; +switch(*i){ +case 100: + mess="Wrong version number in lowesd. Probably typo in caller."; + break; +case 101: + mess="d>dMAX in ehg131. Need to recompile with increased dimensions."; + break; +case 102: + mess="liv too small. (Discovered by lowesd)"; + break; +case 103: + mess="lv too small. (Discovered by lowesd)"; + break; +case 104: + mess="Span too small. Fewer data values than degrees of freedom."; + break; +case 105: + mess="k>d2MAX in ehg136. Need to recompile with increased dimensions."; + break; +case 106: + mess="lwork too small"; + break; +case 107: + mess="Invalid value for kernel"; + break; +case 108: + mess="Invalid value for ideg"; + break; +case 109: + mess="lowstt only applies when kernel=1."; + break; +case 110: + mess="Not enough extra workspace for robustness calculation"; + break; +case 120: + mess="Zero-width neighborhood. Make span bigger"; + break; +case 121: + mess="All data on boundary of neighborhood. make span bigger"; + break; +case 122: + mess="Extrapolation not allowed with blending"; + break; +case 123: + mess="ihat=1 (diag L) in l2fit only makes sense if z=x (eval=data)."; + break; +case 171: + mess="lowesd must be called first."; + break; +case 172: + mess="lowesf must not come between lowesb and lowese, lowesr, or lowesl."; + break; +case 173: + mess="lowesb must come before lowese, lowesr, or lowesl."; + break; +case 174: + mess="lowesb need not be called twice."; + break; +case 175: + mess="Need setLf=.true. for lowesl."; + break; +case 180: + mess="nv>nvmax in cpvert."; + break; +case 181: + mess="nt>20 in eval."; + break; +case 182: + mess="svddc failed in l2fit."; + break; +case 183: + mess="Did not find edge in vleaf."; + break; +case 184: + mess="Zero-width cell found in vleaf."; + break; +case 185: + mess="Trouble descending to leaf in vleaf."; + break; +case 186: + mess="Insufficient workspace for lowesf."; + break; +case 187: + mess="Insufficient stack space."; + break; +case 188: + mess="lv too small for computing explicit L."; + break; +case 191: + mess="Computed trace L was negative; something is wrong!"; + break; +case 192: + mess="Computed delta was negative; something is wrong!"; + break; +case 193: + mess="Workspace in loread appears to be corrupted."; + break; +case 194: + mess="Trouble in l2fit/l2tr"; + break; +case 195: + mess="Only constant, linear, or quadratic local models allowed"; + break; +case 196: + mess="degree must be at least 1 for vertex influence matrix"; + break; +case 999: + mess="not yet implemented"; + break; +default: + sprintf(mess=mess2,"Assert failed; error code %ld\n",*i); + break; + } + error_status = 1; + error_message = mess; +} + +void ehg183a_(char *s, long int *nc, long int *i, long int *n,long int *inc) +{ + char mess[4000], num[20]; + int j; + strncpy(mess,s,*nc); + mess[*nc] = '\0'; + for (j=0; j<*n; j++) { + snprintf(num, 20, " %ld",i[j * *inc]); + strcat(mess,num); + } + strcat(mess,"\n"); + error_status = 1; + error_message = mess; +} + +void ehg184a_(char *s, long int *nc, double *x, long int *n, long int *inc) +{ + char mess[4000], num[30]; + long int j; + strncpy(mess,s,*nc); + mess[*nc] = '\0'; + for (j=0; j<*n; j++) { + snprintf(num,30," %.5g",x[j * *inc]); + strcat(mess,num); + } + strcat(mess,"\n"); + error_status = 1; + error_message = mess; +} + diff --git a/Algorithms/loessf.c b/Algorithms/loessf.c new file mode 100644 index 000000000..6b7a7be1f --- /dev/null +++ b/Algorithms/loessf.c @@ -0,0 +1,3284 @@ +/* loessf.f -- translated by f2c (version 20190311). + You must link the resulting object file with libf2c: + on Microsoft Windows system, link with libf2c.lib; + on Linux or Unix systems, link with .../path/to/libf2c.a -lm + or, if you install libf2c.a in a standard place, with -lf2c -lm + -- in that order, at the end of the command line, as in + cc *.o -lf2c -lm + Source for libf2c is in /netlib/f2c/libf2c.zip, e.g., + + http://www.netlib.org/f2c/libf2c.zip + */ + +#include "../Regression/f2c.h" +#include "../Regression/blaswrap.h" + +/* Table of constant values */ + +static integer c__2 = 2; +static integer c__180 = 180; +static integer c__4 = 4; +static integer c__1 = 1; +static integer c__120 = 120; +static integer c__121 = 121; +static integer c__0 = 0; +static integer c__1000 = 1000; +static integer c__15 = 15; +static integer c__21 = 21; +static integer c__182 = 182; +static integer c__101 = 101; +static integer c__193 = 193; +static integer c__181 = 181; +static integer c__122 = 122; +static integer c__104 = 104; +static integer c__105 = 105; +static integer c__123 = 123; +static integer c__10000 = 10000; +static integer c__194 = 194; +static integer c__196 = 196; +static integer c__174 = 174; +static integer c__171 = 171; +static integer c__100 = 100; +static integer c__195 = 195; +static integer c__102 = 102; +static integer c__103 = 103; +static integer c__172 = 172; +static integer c__173 = 173; +static integer c__186 = 186; +static integer c__175 = 175; +static integer c__187 = 187; +static integer c__185 = 185; + + +/* The authors of this software are Cleveland, Grosse, and Shyu. */ +/* Copyright (c) 1989, 1992 by AT&T. */ +/* Permission to use, copy, modify, and distribute this software for any */ +/* purpose without fee is hereby granted, provided that this entire notice */ +/* is included in all copies of any software which is or includes a copy */ +/* or modification of this software and in all copies of the supporting */ +/* documentation for such software. */ +/* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED */ +/* WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY */ +/* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY */ +/* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. */ +/* altered by B.D. Ripley to */ + +/* remove unused variables */ +/* make phi in ehg139 double precision to match calling sequence */ +/* pass integer not logical from C */ + +/* Note that ehg182(errormsg_code) is in ./loessc.c */ +/* Subroutine */ int ehg126_(integer *d__, integer *n, integer *vc, + doublereal *x, doublereal *v, integer *nvmax) +{ + /* Initialized data */ + + static integer execnt = 0; + + /* System generated locals */ + integer v_dim1, v_offset, x_dim1, x_offset, i__1, i__2; + doublereal d__1, d__2, d__3, d__4; + + /* Local variables */ + static integer i__, j, k; + static doublereal t, mu, beta, alpha; + extern doublereal d1mach_(integer *); + static doublereal machin; + + /* Parameter adjustments */ + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + + /* Function Body */ + /* MachInf -> machin */ + ++execnt; + if (execnt == 1) { + /* initialize d1mach(2) === DBL_MAX: */ + machin = d1mach_(&c__2); + } + /* fill in vertices for bounding box of $x$ */ + /* lower left, upper right */ + i__1 = *d__; + for (k = 1; k <= i__1; ++k) { + alpha = machin; + beta = -machin; + i__2 = *n; + for (i__ = 1; i__ <= i__2; ++i__) { + t = x[i__ + k * x_dim1]; + alpha = min(alpha,t); + beta = max(beta,t); + /* L4: */ + } + /* expand the box a little */ + /* Computing MAX */ + /* Computing MAX */ + d__3 = abs(alpha), d__4 = abs(beta); + d__1 = beta - alpha, d__2 = max(d__3,d__4) * 1e-10 + 1e-30; + mu = max(d__1,d__2) * .005; + alpha -= mu; + beta += mu; + v[k * v_dim1 + 1] = alpha; + v[*vc + k * v_dim1] = beta; + /* L3: */ + } + /* remaining vertices */ + i__1 = *vc - 1; + for (i__ = 2; i__ <= i__1; ++i__) { + j = i__ - 1; + i__2 = *d__; + for (k = 1; k <= i__2; ++k) { + v[i__ + k * v_dim1] = v[j % 2 * (*vc - 1) + 1 + k * v_dim1]; + j = (integer) ((doublereal) j / 2.); + /* L6: */ + } + /* L5: */ + } + return 0; +} /* ehg126_ */ + +/* Subroutine */ int ehg125_(integer *p, integer *nv, doublereal *v, integer * + vhit, integer *nvmax, integer *d__, integer *k, doublereal *t, + integer *r__, integer *s, integer *f, integer *l, integer *u) +{ + /* System generated locals */ + integer f_dim1, f_offset, l_dim1, l_offset, u_dim1, u_offset, v_dim1, + v_offset, i__1, i__2, i__3; + + /* Local variables */ + static integer h__, i__, j, m; + static logical i1, i2; + static integer i3, mm; + extern /* Subroutine */ int ehg182_(integer *); + static logical match; + + /* Parameter adjustments */ + --vhit; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + u_dim1 = *r__; + u_offset = 1 + (u_dim1 << 1); + u -= u_offset; + l_dim1 = *r__; + l_offset = 1 + (l_dim1 << 1); + l -= l_offset; + f_dim1 = *r__; + f_offset = 1 + (f_dim1 << 1); + f -= f_offset; + + /* Function Body */ + h__ = *nv; + i__1 = *r__; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = *s; + for (j = 1; j <= i__2; ++j) { + ++h__; + i__3 = *d__; + for (i3 = 1; i3 <= i__3; ++i3) { + v[h__ + i3 * v_dim1] = v[f[i__ + (j << 1) * f_dim1] + i3 * + v_dim1]; + /* L5: */ + } + v[h__ + *k * v_dim1] = *t; + /* check for redundant vertex */ + match = FALSE_; + m = 1; + /* top of while loop */ + L6: + if (! match) { + i1 = m <= *nv; + } else { + i1 = FALSE_; + } + if (! i1) { + goto L7; + } + match = v[m + v_dim1] == v[h__ + v_dim1]; + mm = 2; + /* top of while loop */ + L8: + if (match) { + i2 = mm <= *d__; + } else { + i2 = FALSE_; + } + if (! i2) { + goto L9; + } + match = v[m + mm * v_dim1] == v[h__ + mm * v_dim1]; + ++mm; + goto L8; + /* bottom of while loop */ + L9: + ++m; + goto L6; + /* bottom of while loop */ + L7: + --m; + if (match) { + --h__; + } else { + m = h__; + if (vhit[1] >= 0) { + vhit[m] = *p; + } + } + l[i__ + (j << 1) * l_dim1] = f[i__ + (j << 1) * f_dim1]; + l[i__ + ((j << 1) + 1) * l_dim1] = m; + u[i__ + (j << 1) * u_dim1] = m; + u[i__ + ((j << 1) + 1) * u_dim1] = f[i__ + ((j << 1) + 1) * + f_dim1]; + /* L4: */ + } + /* L3: */ + } + *nv = h__; + if (! (*nv <= *nvmax)) { + ehg182_(&c__180); + } + return 0; +} /* ehg125_ */ + +integer ehg138_(integer *i__, doublereal *z__, integer *a, doublereal *xi, + integer *lo, integer *hi, integer *ncmax) +{ + /* System generated locals */ + integer ret_val; + + /* Local variables */ + static integer j; + static logical i1; + + /* descend tree until leaf or ambiguous */ + /* Parameter adjustments */ + --z__; + --hi; + --lo; + --xi; + --a; + + /* Function Body */ + j = *i__; + /* top of while loop */ +L3: + if (a[j] != 0) { + i1 = z__[a[j]] != xi[j]; + } else { + i1 = FALSE_; + } + if (! i1) { + goto L4; + } + if (z__[a[j]] <= xi[j]) { + j = lo[j]; + } else { + j = hi[j]; + } + goto L3; + /* bottom of while loop */ +L4: + ret_val = j; + return ret_val; +} /* ehg138_ */ + +/* Subroutine */ int ehg106_(integer *il, integer *ir, integer *k, integer * + nk, doublereal *p, integer *pi, integer *n) +{ + /* System generated locals */ + integer p_dim1, p_offset; + + /* Local variables */ + static integer i__, j, l, r__; + static doublereal t; + static integer ii; + + /* Partial sorting of p(1, il:ir) returning the sort indices pi() only */ + /* such that p(1, pi(k)) is correct */ + /* implicit none */ + /* Arguments */ + /* Input: */ + /* using only p(1, pi(*)) */ + /* Output: */ + /* Variables */ + /* find the $k$-th smallest of $n$ elements */ + /* Floyd+Rivest, CACM Mar '75, Algorithm 489 */ + /* Parameter adjustments */ + --pi; + p_dim1 = *nk; + p_offset = 1 + p_dim1; + p -= p_offset; + + /* Function Body */ + l = *il; + r__ = *ir; + /* while (l < r ) */ +L3: + if (! (l < r__)) { + goto L4; + } + /* to avoid recursion, sophisticated partition deleted */ + /* partition $x sub {l..r}$ about $t$ */ + t = p[pi[*k] * p_dim1 + 1]; + i__ = l; + j = r__; + ii = pi[l]; + pi[l] = pi[*k]; + pi[*k] = ii; + if (t < p[pi[r__] * p_dim1 + 1]) { + ii = pi[l]; + pi[l] = pi[r__]; + pi[r__] = ii; + } + /* top of while loop */ +L5: + if (! (i__ < j)) { + goto L6; + } + ii = pi[i__]; + pi[i__] = pi[j]; + pi[j] = ii; + ++i__; + --j; + /* top of while loop */ +L7: + if (! (p[pi[i__] * p_dim1 + 1] < t)) { + goto L8; + } + ++i__; + goto L7; + /* bottom of while loop */ +L8: + /* top of while loop */ +L9: + if (! (t < p[pi[j] * p_dim1 + 1])) { + goto L10; + } + --j; + goto L9; + /* bottom of while loop */ +L10: + goto L5; + /* bottom of while loop */ +L6: + if (p[pi[l] * p_dim1 + 1] == t) { + ii = pi[l]; + pi[l] = pi[j]; + pi[j] = ii; + } else { + ++j; + ii = pi[r__]; + pi[r__] = pi[j]; + pi[j] = ii; + } + if (j <= *k) { + l = j + 1; + } + if (*k <= j) { + r__ = j - 1; + } + goto L3; + /* bottom of while loop */ +L4: + return 0; +} /* ehg106_ */ + +/* Subroutine */ int ehg127_(doublereal *q, integer *n, integer *d__, integer + *nf, doublereal *f, doublereal *x, integer *psi, doublereal *y, + doublereal *rw, integer *kernel, integer *k, doublereal *dist, + doublereal *eta, doublereal *b, integer *od, doublereal *w, + doublereal *rcond, integer *sing, doublereal *sigma, doublereal *u, + doublereal *e, doublereal *dgamma, doublereal *qraux, doublereal * + work, doublereal *tol, integer *dd, integer *tdeg, integer *cdeg, + doublereal *s) +{ + /* Initialized data */ + + static integer execnt = 0; + + /* System generated locals */ + integer b_dim1, b_offset, x_dim1, x_offset, i__1, i__2, i__3; + doublereal d__1, d__2; + + /* Builtin functions */ + double sqrt(doublereal); + + /* Local variables */ + static doublereal g[15]; + static integer i__, j; + static doublereal i1, i2; + static integer i3; + static doublereal i4, i5, i6, i7, i8; + static integer i9; + static doublereal i10; + static integer jj; + static doublereal rho, scal; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static integer info, jpvt; + extern /* Subroutine */ int ehg106_(integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *), ehg182_(integer *) + , ehg184_(char *, doublereal *, integer *, integer *, ftnlen), + dqrdc_(doublereal *, integer *, integer *, integer *, doublereal * + , integer *, doublereal *, integer *), dsvdc_(doublereal *, + integer *, integer *, integer *, doublereal *, doublereal *, + doublereal *, integer *, doublereal *, integer *, doublereal *, + integer *, integer *), dqrsl_(doublereal *, integer *, integer *, + integer *, doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *); + extern doublereal d1mach_(integer *); + static integer inorm2; + static doublereal machep; + extern integer idamax_(integer *, doublereal *, integer *); + static doublereal colnor[15]; + static integer column; + + /* Parameter adjustments */ + --dist; + --rw; + --y; + --psi; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + --q; + --w; + --eta; + b_dim1 = *nf; + b_offset = 1 + b_dim1; + b -= b_offset; + --sigma; + u -= 16; + e -= 16; + --dgamma; + --qraux; + --work; + --cdeg; + + /* Function Body */ + /* colnorm -> colnor */ + /* E -> g */ + /* MachEps -> machep */ + /* V -> e */ + /* X -> b */ + ++execnt; + if (execnt == 1) { + /* initialize d1mach(4) === 1 / DBL_EPSILON === 2^52 : */ + machep = d1mach_(&c__4); + } + /* sort by distance */ + i__1 = *n; + for (i3 = 1; i3 <= i__1; ++i3) { + dist[i3] = 0.; + /* L3: */ + } + i__1 = *dd; + for (j = 1; j <= i__1; ++j) { + i4 = q[j]; + i__2 = *n; + for (i3 = 1; i3 <= i__2; ++i3) { + /* Computing 2nd power */ + d__1 = x[i3 + j * x_dim1] - i4; + dist[i3] += d__1 * d__1; + /* L5: */ + } + /* L4: */ + } + ehg106_(&c__1, n, nf, &c__1, &dist[1], &psi[1], n); + rho = dist[psi[*nf]] * max(1.,*f); + if (rho <= 0.) { + ehg182_(&c__120); + } + /* compute neighborhood weights */ + if (*kernel == 2) { + i__1 = *nf; + for (i__ = 1; i__ <= i__1; ++i__) { + if (dist[psi[i__]] < rho) { + i1 = sqrt(rw[psi[i__]]); + } else { + i1 = 0.; + } + w[i__] = i1; + /* L6: */ + } + } else { + i__1 = *nf; + for (i3 = 1; i3 <= i__1; ++i3) { + w[i3] = sqrt(dist[psi[i3]] / rho); + /* L7: */ + } + i__1 = *nf; + for (i3 = 1; i3 <= i__1; ++i3) { + /* Computing 3rd power */ + d__2 = w[i3]; + /* Computing 3rd power */ + d__1 = 1 - d__2 * (d__2 * d__2); + w[i3] = sqrt(rw[psi[i3]] * (d__1 * (d__1 * d__1))); + /* L8: */ + } + } + if ((d__1 = w[idamax_(nf, &w[1], &c__1)], abs(d__1)) == 0.) { + ehg184_("at ", &q[1], dd, &c__1, (ftnlen)3); + ehg184_("radius ", &rho, &c__1, &c__1, (ftnlen)7); + if (TRUE_) { + ehg182_(&c__121); + } + } + /* fill design matrix */ + column = 1; + i__1 = *nf; + for (i3 = 1; i3 <= i__1; ++i3) { + b[i3 + column * b_dim1] = w[i3]; + /* L9: */ + } + if (*tdeg >= 1) { + i__1 = *d__; + for (j = 1; j <= i__1; ++j) { + if (cdeg[j] >= 1) { + ++column; + i5 = q[j]; + i__2 = *nf; + for (i3 = 1; i3 <= i__2; ++i3) { + b[i3 + column * b_dim1] = w[i3] * (x[psi[i3] + j * x_dim1] + - i5); + /* L11: */ + } + } + /* L10: */ + } + } + if (*tdeg >= 2) { + i__1 = *d__; + for (j = 1; j <= i__1; ++j) { + if (cdeg[j] >= 1) { + if (cdeg[j] >= 2) { + ++column; + i6 = q[j]; + i__2 = *nf; + for (i3 = 1; i3 <= i__2; ++i3) { + /* Computing 2nd power */ + d__1 = x[psi[i3] + j * x_dim1] - i6; + b[i3 + column * b_dim1] = w[i3] * (d__1 * d__1); + /* L13: */ + } + } + i__2 = *d__; + for (jj = j + 1; jj <= i__2; ++jj) { + if (cdeg[jj] >= 1) { + ++column; + i7 = q[j]; + i8 = q[jj]; + i__3 = *nf; + for (i3 = 1; i3 <= i__3; ++i3) { + b[i3 + column * b_dim1] = w[i3] * (x[psi[i3] + j * + x_dim1] - i7) * (x[psi[i3] + jj * x_dim1] + - i8); + /* L15: */ + } + } + /* L14: */ + } + } + /* L12: */ + } + *k = column; + } + i__1 = *nf; + for (i3 = 1; i3 <= i__1; ++i3) { + eta[i3] = w[i3] * y[psi[i3]]; + /* L16: */ + } + /* equilibrate columns */ + i__1 = *k; + for (j = 1; j <= i__1; ++j) { + scal = 0.; + i__2 = *nf; + for (inorm2 = 1; inorm2 <= i__2; ++inorm2) { + /* Computing 2nd power */ + d__1 = b[inorm2 + j * b_dim1]; + scal += d__1 * d__1; + /* L18: */ + } + scal = sqrt(scal); + if (0. < scal) { + i__2 = *nf; + for (i3 = 1; i3 <= i__2; ++i3) { + b[i3 + j * b_dim1] /= scal; + /* L19: */ + } + colnor[j - 1] = scal; + } else { + colnor[j - 1] = 1.; + } + /* L17: */ + } + /* singular value decomposition */ + dqrdc_(&b[b_offset], nf, nf, k, &qraux[1], &jpvt, &work[1], &c__0); + dqrsl_(&b[b_offset], nf, nf, k, &qraux[1], &eta[1], &work[1], &eta[1], & + eta[1], &work[1], &work[1], &c__1000, &info); + i__1 = *k; + for (i9 = 1; i9 <= i__1; ++i9) { + i__2 = *k; + for (i3 = 1; i3 <= i__2; ++i3) { + u[i3 + i9 * 15] = 0.; + /* L21: */ + } + /* L20: */ + } + i__1 = *k; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = *k; + for (j = i__; j <= i__2; ++j) { + /* FIXME: this has i = 3 vs bound 2 in a ggplot2 test */ + u[i__ + j * 15] = b[i__ + j * b_dim1]; + /* L23: */ + } + /* L22: */ + } + dsvdc_(&u[16], &c__15, k, k, &sigma[1], g, &u[16], &c__15, &e[16], &c__15, + &work[1], &c__21, &info); + if (! (info == 0)) { + ehg182_(&c__182); + } + *tol = sigma[1] * (machep * 100); + /* Computing MIN */ + d__1 = *rcond, d__2 = sigma[*k] / sigma[1]; + *rcond = min(d__1,d__2); + if (sigma[*k] <= *tol) { + ++(*sing); + if (*sing == 1) { + ehg184_("pseudoinverse used at", &q[1], d__, &c__1, (ftnlen)21); + d__1 = sqrt(rho); + ehg184_("neighborhood radius", &d__1, &c__1, &c__1, (ftnlen)19); + ehg184_("reciprocal condition number ", rcond, &c__1, &c__1, ( + ftnlen)28); + } else { + if (*sing == 2) { + ehg184_("There are other near singularities as well.", &rho, & + c__1, &c__1, (ftnlen)43); + } + } + } + /* compensate for equilibration */ + i__1 = *k; + for (j = 1; j <= i__1; ++j) { + i10 = colnor[j - 1]; + i__2 = *k; + for (i3 = 1; i3 <= i__2; ++i3) { + e[j + i3 * 15] /= i10; + /* L25: */ + } + /* L24: */ + } + /* solve least squares problem */ + i__1 = *k; + for (j = 1; j <= i__1; ++j) { + if (*tol < sigma[j]) { + i2 = ddot_(k, &u[j * 15 + 1], &c__1, &eta[1], &c__1) / sigma[j]; + } else { + i2 = 0.; + } + dgamma[j] = i2; + /* L26: */ + } + i__1 = *od; + for (j = 0; j <= i__1; ++j) { + /* bug fix 2006-07-04 for k=1, od>1. (thanks btyner@gmail.com) */ + if (j < *k) { + s[j] = ddot_(k, &e[j + 16], &c__15, &dgamma[1], &c__1); + } else { + s[j] = 0.; + } + /* L27: */ + } + return 0; +} /* ehg127_ */ + +/* Subroutine */ int ehg131_(doublereal *x, doublereal *y, doublereal *rw, + doublereal *trl, doublereal *diagl, integer *kernel, integer *k, + integer *n, integer *d__, integer *nc, integer *ncmax, integer *vc, + integer *nv, integer *nvmax, integer *nf, doublereal *f, integer *a, + integer *c__, integer *hi, integer *lo, integer *pi, integer *psi, + doublereal *v, integer *vhit, doublereal *vval, doublereal *xi, + doublereal *dist, doublereal *eta, doublereal *b, integer *ntol, + doublereal *fd, doublereal *w, doublereal *vval2, doublereal *rcond, + integer *sing, integer *dd, integer *tdeg, integer *cdeg, integer *lq, + doublereal *lf, logical *setlf) +{ + /* System generated locals */ + integer lq_dim1, lq_offset, c_dim1, c_offset, lf_dim1, lf_dim2, lf_offset, + v_dim1, v_offset, vval_dim1, vval_offset, vval2_dim1, + vval2_offset, x_dim1, x_offset, i__1, i__2; + + /* Local variables */ + static integer j, i1, i2; + extern /* Subroutine */ int ehg124_(integer *, integer *, integer *, + integer *, integer *, integer *, integer *, integer *, doublereal + *, integer *, integer *, doublereal *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, + doublereal *, integer *), ehg126_(integer *, integer *, integer *, + doublereal *, doublereal *, integer *), ehg182_(integer *), + ehg139_(doublereal *, integer *, integer *, integer *, integer *, + integer *, doublereal *, doublereal *, integer *, integer *, + doublereal *, doublereal *, doublereal *, integer *, integer *, + doublereal *, doublereal *, doublereal *, doublereal *, integer *, + doublereal *, doublereal *, doublereal *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, integer + *, doublereal *, integer *, integer *, integer *, integer *, + integer *, doublereal *, logical *, doublereal *); + extern doublereal dnrm2_(integer *, doublereal *, integer *); + static doublereal delta[8]; + static integer identi; + + /* Identity -> identi */ + /* X -> b */ + /* Parameter adjustments */ + --dist; + --psi; + --pi; + --diagl; + --rw; + --y; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + --xi; + --lo; + --hi; + --a; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + vval2_dim1 = *d__ - 0 + 1; + vval2_offset = 0 + vval2_dim1; + vval2 -= vval2_offset; + vval_dim1 = *d__ - 0 + 1; + vval_offset = 0 + vval_dim1; + vval -= vval_offset; + --vhit; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + lf_dim1 = *d__ - 0 + 1; + lf_dim2 = *nvmax; + lf_offset = 0 + lf_dim1 * (1 + lf_dim2); + lf -= lf_offset; + lq_dim1 = *nvmax; + lq_offset = 1 + lq_dim1; + lq -= lq_offset; + --w; + --eta; + --b; + --cdeg; + + /* Function Body */ + if (! (*d__ <= 8)) { + ehg182_(&c__101); + } + /* build $k$-d tree */ + ehg126_(d__, n, vc, &x[x_offset], &v[v_offset], nvmax); + *nv = *vc; + *nc = 1; + i__1 = *vc; + for (j = 1; j <= i__1; ++j) { + c__[j + *nc * c_dim1] = j; + vhit[j] = 0; + /* L3: */ + } + i__1 = *d__; + for (i1 = 1; i1 <= i__1; ++i1) { + delta[i1 - 1] = v[*vc + i1 * v_dim1] - v[i1 * v_dim1 + 1]; + /* L4: */ + } + *fd *= dnrm2_(d__, delta, &c__1); + i__1 = *n; + for (identi = 1; identi <= i__1; ++identi) { + pi[identi] = identi; + /* L5: */ + } + ehg124_(&c__1, n, d__, n, nv, nc, ncmax, vc, &x[x_offset], &pi[1], &a[1], + &xi[1], &lo[1], &hi[1], &c__[c_offset], &v[v_offset], &vhit[1], + nvmax, ntol, fd, dd); + /* smooth */ + if (*trl != 0.) { + i__1 = *nv; + for (i2 = 1; i2 <= i__1; ++i2) { + i__2 = *d__; + for (i1 = 0; i1 <= i__2; ++i1) { + vval2[i1 + i2 * vval2_dim1] = 0.; + /* L7: */ + } + /* L6: */ + } + } + ehg139_(&v[v_offset], nvmax, nv, n, d__, nf, f, &x[x_offset], &pi[1], & + psi[1], &y[1], &rw[1], trl, kernel, k, &dist[1], &dist[1], &eta[1] + , &b[1], d__, &w[1], &diagl[1], &vval2[vval2_offset], nc, vc, &a[ + 1], &xi[1], &lo[1], &hi[1], &c__[c_offset], &vhit[1], rcond, sing, + dd, tdeg, &cdeg[1], &lq[lq_offset], &lf[lf_offset], setlf, &vval[ + vval_offset]); + return 0; +} /* ehg131_ */ + +/* Subroutine */ int ehg133_(integer *n, integer *d__, integer *vc, integer * + nvmax, integer *nc, integer *ncmax, integer *a, integer *c__, integer + *hi, integer *lo, doublereal *v, doublereal *vval, doublereal *xi, + integer *m, doublereal *z__, doublereal *s) +{ + /* System generated locals */ + integer c_dim1, c_offset, v_dim1, v_offset, vval_dim1, vval_offset, + z_dim1, z_offset, i__1, i__2; + + /* Local variables */ + static integer i__, i1; + extern doublereal ehg128_(doublereal *, integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, + doublereal *, integer *, doublereal *); + static doublereal delta[8]; + + /* Var */ + /* Parameter adjustments */ + vval_dim1 = *d__ - 0 + 1; + vval_offset = 0 + vval_dim1; + vval -= vval_offset; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + --xi; + --lo; + --hi; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + --a; + --s; + z_dim1 = *m; + z_offset = 1 + z_dim1; + z__ -= z_offset; + + /* Function Body */ + i__1 = *m; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = *d__; + for (i1 = 1; i1 <= i__2; ++i1) { + delta[i1 - 1] = z__[i__ + i1 * z_dim1]; + /* L4: */ + } + s[i__] = ehg128_(delta, d__, ncmax, vc, &a[1], &xi[1], &lo[1], &hi[1], + &c__[c_offset], &v[v_offset], nvmax, &vval[vval_offset]); + /* L3: */ + } + return 0; +} /* ehg133_ */ + +/* Subroutine */ int ehg140_(integer *iw, integer *i__, integer *j) +{ + /* Parameter adjustments */ + --iw; + + /* Function Body */ + iw[*i__] = *j; + return 0; +} /* ehg140_ */ + +/* Subroutine */ int ehg141_(doublereal *trl, integer *n, integer *deg, + integer *k, integer *d__, integer *nsing, integer *dk, doublereal * + delta1, doublereal *delta2) +{ + /* Initialized data */ + + static doublereal c__[48] = { .297162,.380266,.5886043,.4263766,.3346498, + .6271053,.5241198,.3484836,.6687687,.6338795,.4076457,.7207693, + .1611761,.3091323,.4401023,.2939609,.3580278,.5555741,.397239, + .4171278,.6293196,.4675173,.469907,.6674802,.2848308,.2254512, + .2914126,.5393624,.251723,.389897,.7603231,.2969113,.474013, + .9664956,.3629838,.5348889,.207567,.2822574,.2369957,.3911566, + .2981154,.3623232,.5508869,.3501989,.4371032,.7002667,.4291632, + .493037 }; + + /* System generated locals */ + doublereal d__1, d__2; + + /* Builtin functions */ + double sqrt(doublereal), exp(doublereal), pow_dd(doublereal *, doublereal + *); + + /* Local variables */ + static integer i__; + static doublereal z__, c1, c2, c3, c4, zz[1], corx; + extern /* Subroutine */ int ehg184_(char *, doublereal *, integer *, + integer *, ftnlen); + extern doublereal ehg176_(doublereal *); + + /* coef, d, deg, del */ + if (*deg == 0) { + *dk = 1; + } + if (*deg == 1) { + *dk = *d__ + 1; + } + if (*deg == 2) { + *dk = (integer) ((doublereal) ((*d__ + 2) * (*d__ + 1)) / 2.); + } + corx = sqrt(*k / (doublereal) (*n)); + z__ = (sqrt(*k / *trl) - corx) / (1 - corx); + if (*nsing == 0 && 1. < z__) { + ehg184_("Chernobyl! trLn", trl, &c__1, &c__1, (ftnlen)16); + } + /* Computing MIN */ + d__1 = 1., d__2 = max(0.,z__); + z__ = min(d__1,d__2); + /* R fix */ + zz[0] = z__; + c4 = exp(ehg176_(zz)); + i__ = (min(*d__,4) - 1 + (*deg - 1 << 2)) * 3 + 1; + if (*d__ <= 4) { + c1 = c__[i__ - 1]; + c2 = c__[i__]; + c3 = c__[i__ + 1]; + } else { + c1 = c__[i__ - 1] + (*d__ - 4) * (c__[i__ - 1] - c__[i__ - 4]); + c2 = c__[i__] + (*d__ - 4) * (c__[i__] - c__[i__ - 3]); + c3 = c__[i__ + 1] + (*d__ - 4) * (c__[i__ + 1] - c__[i__ - 2]); + } + d__1 = 1 - z__; + *delta1 = *n - *trl * exp(c1 * pow_dd(&z__, &c2) * pow_dd(&d__1, &c3) * + c4); + i__ += 24; + if (*d__ <= 4) { + c1 = c__[i__ - 1]; + c2 = c__[i__]; + c3 = c__[i__ + 1]; + } else { + c1 = c__[i__ - 1] + (*d__ - 4) * (c__[i__ - 1] - c__[i__ - 4]); + c2 = c__[i__] + (*d__ - 4) * (c__[i__] - c__[i__ - 3]); + c3 = c__[i__ + 1] + (*d__ - 4) * (c__[i__ + 1] - c__[i__ - 2]); + } + d__1 = 1 - z__; + *delta2 = *n - *trl * exp(c1 * pow_dd(&z__, &c2) * pow_dd(&d__1, &c3) * + c4); + return 0; +} /* ehg141_ */ + +/* Subroutine */ int lowesc_(integer *n, doublereal *l, doublereal *ll, + doublereal *trl, doublereal *delta1, doublereal *delta2) +{ + /* System generated locals */ + integer l_dim1, l_offset, ll_dim1, ll_offset, i__1, i__2; + + /* Local variables */ + static integer i__, j; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + + /* compute $LL~=~(I-L)(I-L)'$ */ + /* Parameter adjustments */ + ll_dim1 = *n; + ll_offset = 1 + ll_dim1; + ll -= ll_offset; + l_dim1 = *n; + l_offset = 1 + l_dim1; + l -= l_offset; + + /* Function Body */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + --l[i__ + i__ * l_dim1]; + /* L3: */ + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = i__; + for (j = 1; j <= i__2; ++j) { + ll[i__ + j * ll_dim1] = ddot_(n, &l[i__ + l_dim1], n, &l[j + + l_dim1], n); + /* L5: */ + } + /* L4: */ + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = *n; + for (j = i__ + 1; j <= i__2; ++j) { + ll[i__ + j * ll_dim1] = ll[j + i__ * ll_dim1]; + /* L7: */ + } + /* L6: */ + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + ++l[i__ + i__ * l_dim1]; + /* L8: */ + } + /* accumulate first two traces */ + *trl = 0.; + *delta1 = 0.; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + *trl += l[i__ + i__ * l_dim1]; + *delta1 += ll[i__ + i__ * ll_dim1]; + /* L9: */ + } + /* $delta sub 2 = "tr" LL sup 2$ */ + *delta2 = 0.; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + *delta2 += ddot_(n, &ll[i__ + ll_dim1], n, &ll[i__ * ll_dim1 + 1], & + c__1); + /* L10: */ + } + return 0; +} /* lowesc_ */ + +/* Subroutine */ int ehg169_(integer *d__, integer *vc, integer *nc, integer * + ncmax, integer *nv, integer *nvmax, doublereal *v, integer *a, + doublereal *xi, integer *c__, integer *hi, integer *lo) +{ + /* System generated locals */ + integer c_dim1, c_offset, v_dim1, v_offset, i__1, i__2, i__3, i__4; + doublereal d__1; + + /* Builtin functions */ + integer pow_ii(integer *, integer *); + + /* Local variables */ + static integer i__, j, k, p, mc, mv; + extern /* Subroutine */ int ehg125_(integer *, integer *, doublereal *, + integer *, integer *, integer *, integer *, doublereal *, integer + *, integer *, integer *, integer *, integer *), ehg182_(integer *) + ; + extern integer ifloor_(doublereal *); + static integer novhit[1]; + + /* as in bbox */ + /* remaining vertices */ + /* Parameter adjustments */ + --lo; + --hi; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + --xi; + --a; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + + /* Function Body */ + i__1 = *vc - 1; + for (i__ = 2; i__ <= i__1; ++i__) { + j = i__ - 1; + i__2 = *d__; + for (k = 1; k <= i__2; ++k) { + v[i__ + k * v_dim1] = v[j % 2 * (*vc - 1) + 1 + k * v_dim1]; + d__1 = (doublereal) j / 2.; + j = ifloor_(&d__1); + /* L4: */ + } + /* L3: */ + } + /* as in ehg131 */ + mc = 1; + mv = *vc; + novhit[0] = -1; + i__1 = *vc; + for (j = 1; j <= i__1; ++j) { + c__[j + mc * c_dim1] = j; + /* L5: */ + } + /* as in rbuild */ + p = 1; + /* top of while loop */ +L6: + if (! (p <= *nc)) { + goto L7; + } + if (a[p] != 0) { + k = a[p]; + /* left son */ + ++mc; + lo[p] = mc; + /* right son */ + ++mc; + hi[p] = mc; + i__2 = k - 1; + i__1 = pow_ii(&c__2, &i__2); + i__4 = *d__ - k; + i__3 = pow_ii(&c__2, &i__4); + ehg125_(&p, &mv, &v[v_offset], novhit, nvmax, d__, &k, &xi[p], &i__1, + &i__3, &c__[p * c_dim1 + 1], &c__[lo[p] * c_dim1 + 1], &c__[ + hi[p] * c_dim1 + 1]); + } + ++p; + goto L6; + /* bottom of while loop */ +L7: + if (! (mc == *nc)) { + ehg182_(&c__193); + } + if (! (mv == *nv)) { + ehg182_(&c__193); + } + return 0; +} /* ehg169_ */ + +doublereal ehg176_(doublereal *z__) +{ + /* Initialized data */ + + static integer d__ = 1; + static integer vc = 2; + static integer nv = 10; + static integer nc = 17; + static integer a[17] = { 1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0 }; + static struct { + integer e_1[7]; + integer fill_2[7]; + integer e_3; + integer fill_4[2]; + } equiv_87 = { 3, 5, 7, 9, 11, 13, 15, {0}, 17 }; + +#define hi ((integer *)&equiv_87) + + static struct { + integer e_1[7]; + integer fill_2[7]; + integer e_3; + integer fill_4[2]; + } equiv_88 = { 2, 4, 6, 8, 10, 12, 14, {0}, 16 }; + +#define lo ((integer *)&equiv_88) + + static struct { + doublereal e_1[7]; + doublereal fill_2[7]; + doublereal e_3; + doublereal fill_4[2]; + } equiv_89 = { .3705, .2017, .5591, .1204, .2815, .4536, .7132, {0}, + .8751 }; + +#define xi ((doublereal *)&equiv_89) + + static integer c__[34] /* was [2][17] */ = { 1,2,1,3,3,2,1,4,4,3,3,5, + 5,2,1,6,6,4,4,7,7,3,3,8,8,5,5,9,9,2,9,10,10,2 }; + static doublereal vval[20] /* was [2][10] */ = { -.090572,4.4844, + -.010856,-.7736,-.053718,-.3495,.026152,-.7286,-.058387,.1611, + .095807,-.7978,-.031926,-.4457,-.06417,.032813,-.020636,.335, + .040172,-.041032 }; + static doublereal v[10] /* was [10][1] */ = { -.005,1.005,.3705,.2017, + .5591,.1204,.2815,.4536,.7132,.8751 }; + + /* System generated locals */ + doublereal ret_val; + + /* Local variables */ + extern doublereal ehg128_(doublereal *, integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, + doublereal *, integer *, doublereal *); + + + + /* Parameter adjustments */ + --z__; + + /* Function Body */ + ret_val = ehg128_(&z__[1], &d__, &nc, &vc, a, xi, lo, hi, c__, v, &nv, + vval); + return ret_val; +} /* ehg176_ */ + +#undef xi +#undef lo +#undef hi + + +/* Subroutine */ int lowesa_(doublereal *trl, integer *n, integer *d__, + integer *tau, integer *nsing, doublereal *delta1, doublereal *delta2) +{ + static doublereal d1a, d1b, d2a, d2b; + static integer dka, dkb; + extern /* Subroutine */ int ehg141_(doublereal *, integer *, integer *, + integer *, integer *, integer *, integer *, doublereal *, + doublereal *); + static doublereal alpha; + + ehg141_(trl, n, &c__1, tau, d__, nsing, &dka, &d1a, &d2a); + ehg141_(trl, n, &c__2, tau, d__, nsing, &dkb, &d1b, &d2b); + alpha = (doublereal) (*tau - dka) / (doublereal) (dkb - dka); + *delta1 = (1 - alpha) * d1a + alpha * d1b; + *delta2 = (1 - alpha) * d2a + alpha * d2b; + return 0; +} /* lowesa_ */ + +/* Subroutine */ int ehg191_(integer *m, doublereal *z__, doublereal *l, + integer *d__, integer *n, integer *nf, integer *nv, integer *ncmax, + integer *vc, integer *a, doublereal *xi, integer *lo, integer *hi, + integer *c__, doublereal *v, integer *nvmax, doublereal *vval2, + doublereal *lf, integer *lq) +{ + /* System generated locals */ + integer z_dim1, z_offset, l_dim1, l_offset, v_dim1, v_offset, vval2_dim1, + vval2_offset, lf_dim1, lf_dim2, lf_offset, lq_dim1, lq_offset, + c_dim1, c_offset, i__1, i__2, i__3; + + /* Local variables */ + static integer i__, j, p, i1, i2; + static doublereal zi[8]; + static integer lq1; + extern doublereal ehg128_(doublereal *, integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, + doublereal *, integer *, doublereal *); + + /* Args */ + /* Var */ + /* Parameter adjustments */ + z_dim1 = *m; + z_offset = 1 + z_dim1; + z__ -= z_offset; + l_dim1 = *m; + l_offset = 1 + l_dim1; + l -= l_offset; + --hi; + --lo; + --xi; + --a; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + lq_dim1 = *nvmax; + lq_offset = 1 + lq_dim1; + lq -= lq_offset; + lf_dim1 = *d__ - 0 + 1; + lf_dim2 = *nvmax; + lf_offset = 0 + lf_dim1 * (1 + lf_dim2); + lf -= lf_offset; + vval2_dim1 = *d__ - 0 + 1; + vval2_offset = 0 + vval2_dim1; + vval2 -= vval2_offset; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + + /* Function Body */ + i__1 = *n; + for (j = 1; j <= i__1; ++j) { + i__2 = *nv; + for (i2 = 1; i2 <= i__2; ++i2) { + i__3 = *d__; + for (i1 = 0; i1 <= i__3; ++i1) { + vval2[i1 + i2 * vval2_dim1] = 0.; + /* L5: */ + } + /* L4: */ + } + i__2 = *nv; + for (i__ = 1; i__ <= i__2; ++i__) { + /* linear search for i in Lq */ + lq1 = lq[i__ + lq_dim1]; + lq[i__ + lq_dim1] = j; + p = *nf; + /* top of while loop */ + L7: + if (! (lq[i__ + p * lq_dim1] != j)) { + goto L8; + } + --p; + goto L7; + /* bottom of while loop */ + L8: + lq[i__ + lq_dim1] = lq1; + if (lq[i__ + p * lq_dim1] == j) { + i__3 = *d__; + for (i1 = 0; i1 <= i__3; ++i1) { + vval2[i1 + i__ * vval2_dim1] = lf[i1 + (i__ + p * lf_dim2) + * lf_dim1]; + /* L9: */ + } + } + /* L6: */ + } + i__2 = *m; + for (i__ = 1; i__ <= i__2; ++i__) { + i__3 = *d__; + for (i1 = 1; i1 <= i__3; ++i1) { + zi[i1 - 1] = z__[i__ + i1 * z_dim1]; + /* L11: */ + } + l[i__ + j * l_dim1] = ehg128_(zi, d__, ncmax, vc, &a[1], &xi[1], & + lo[1], &hi[1], &c__[c_offset], &v[v_offset], nvmax, & + vval2[vval2_offset]); + /* L10: */ + } + /* L3: */ + } + return 0; +} /* ehg191_ */ + +/* Subroutine */ int ehg196_(integer *tau, integer *d__, doublereal *f, + doublereal *trl) +{ + static integer dka, dkb; + static doublereal trla, trlb; + extern /* Subroutine */ int ehg197_(integer *, integer *, integer *, + doublereal *, integer *, doublereal *); + static doublereal alpha; + + ehg197_(&c__1, tau, d__, f, &dka, &trla); + ehg197_(&c__2, tau, d__, f, &dkb, &trlb); + alpha = (doublereal) (*tau - dka) / (doublereal) (dkb - dka); + *trl = (1 - alpha) * trla + alpha * trlb; + return 0; +} /* ehg196_ */ + +/* Subroutine */ int ehg197_(integer *deg, integer *tau, integer *d__, + doublereal *f, integer *dk, doublereal *trl) +{ + /* System generated locals */ + doublereal d__1, d__2; + + /* Local variables */ + static doublereal g1; + + *dk = 0; + if (*deg == 1) { + *dk = *d__ + 1; + } + if (*deg == 2) { + *dk = (integer) ((doublereal) ((*d__ + 2) * (*d__ + 1)) / 2.); + } + g1 = (*d__ * -.08125 + .13) * *d__ + 1.05; + /* Computing MAX */ + d__1 = 0., d__2 = (g1 - *f) / *f; + *trl = *dk * (max(d__1,d__2) + 1); + return 0; +} /* ehg197_ */ + +/* Subroutine */ int ehg192_(doublereal *y, integer *d__, integer *n, integer + *nf, integer *nv, integer *nvmax, doublereal *vval, doublereal *lf, + integer *lq) +{ + /* System generated locals */ + integer lq_dim1, lq_offset, lf_dim1, lf_dim2, lf_offset, vval_dim1, + vval_offset, i__1, i__2, i__3; + + /* Local variables */ + static integer i__, j, i1, i2; + static doublereal i3; + + /* Parameter adjustments */ + --y; + lq_dim1 = *nvmax; + lq_offset = 1 + lq_dim1; + lq -= lq_offset; + lf_dim1 = *d__ - 0 + 1; + lf_dim2 = *nvmax; + lf_offset = 0 + lf_dim1 * (1 + lf_dim2); + lf -= lf_offset; + vval_dim1 = *d__ - 0 + 1; + vval_offset = 0 + vval_dim1; + vval -= vval_offset; + + /* Function Body */ + i__1 = *nv; + for (i2 = 1; i2 <= i__1; ++i2) { + i__2 = *d__; + for (i1 = 0; i1 <= i__2; ++i1) { + vval[i1 + i2 * vval_dim1] = 0.; + /* L4: */ + } + /* L3: */ + } + i__1 = *nv; + for (i__ = 1; i__ <= i__1; ++i__) { + i__2 = *nf; + for (j = 1; j <= i__2; ++j) { + i3 = y[lq[i__ + j * lq_dim1]]; + i__3 = *d__; + for (i1 = 0; i1 <= i__3; ++i1) { + vval[i1 + i__ * vval_dim1] += i3 * lf[i1 + (i__ + j * lf_dim2) + * lf_dim1]; + /* L7: */ + } + /* L6: */ + } + /* L5: */ + } + return 0; +} /* ehg192_ */ + +doublereal ehg128_(doublereal *z__, integer *d__, integer *ncmax, integer *vc, + integer *a, doublereal *xi, integer *lo, integer *hi, integer *c__, + doublereal *v, integer *nvmax, doublereal *vval) +{ + /* System generated locals */ + integer c_dim1, c_offset, v_dim1, v_offset, vval_dim1, vval_offset, i__1, + i__2; + doublereal ret_val, d__1; + + /* Local variables */ + static doublereal g[2304] /* was [9][256] */, h__; + static integer i__, j, m; + static doublereal s; + static integer t[20]; + static doublereal g0[9], g1[9]; + static integer i1; + static logical i2, i3, i4, i5, i6, i7, i8, i9; + static doublereal v0, v1; + static logical i10; + static integer i11, i12; + static doublereal ge; + static integer ig, ii, lg; + static doublereal gn; + static integer ll; + static doublereal gs, gw; + static integer nt, ur; + static doublereal gpe, gpn, gps, gpw, sew, sns, phi0, phi1, psi0, psi1; + extern /* Subroutine */ int ehg182_(integer *), ehg184_(char *, + doublereal *, integer *, integer *, ftnlen); + static doublereal xibar; + + /* implicit none */ + /* Args */ + /* Vars */ + /* locate enclosing cell */ + /* Parameter adjustments */ + --z__; + --hi; + --lo; + --xi; + --a; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + vval_dim1 = *d__ - 0 + 1; + vval_offset = 0 + vval_dim1; + vval -= vval_offset; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + + /* Function Body */ + nt = 1; + t[nt - 1] = 1; + j = 1; + /* top of while loop */ +L3: + if (! (a[j] != 0)) { + goto L4; + } + ++nt; + if (z__[a[j]] <= xi[j]) { + i1 = lo[j]; + } else { + i1 = hi[j]; + } + t[nt - 1] = i1; + if (! (nt < 20)) { + ehg182_(&c__181); + } + j = t[nt - 1]; + goto L3; + /* bottom of while loop */ +L4: + /* tensor */ + i__1 = *vc; + for (i12 = 1; i12 <= i__1; ++i12) { + i__2 = *d__; + for (i11 = 0; i11 <= i__2; ++i11) { + g[i11 + i12 * 9 - 9] = vval[i11 + c__[i12 + j * c_dim1] * + vval_dim1]; + /* L6: */ + } + /* L5: */ + } + lg = *vc; + ll = c__[j * c_dim1 + 1]; + ur = c__[*vc + j * c_dim1]; + for (i__ = *d__; i__ >= 1; --i__) { + h__ = (z__[i__] - v[ll + i__ * v_dim1]) / (v[ur + i__ * v_dim1] - v[ + ll + i__ * v_dim1]); + if (h__ < -.001) { + ehg184_("eval ", &z__[1], d__, &c__1, (ftnlen)5); + ehg184_("lowerlimit ", &v[ll + v_dim1], d__, nvmax, (ftnlen)11); + } else { + if (1.001 < h__) { + ehg184_("eval ", &z__[1], d__, &c__1, (ftnlen)5); + ehg184_("upperlimit ", &v[ur + v_dim1], d__, nvmax, (ftnlen) + 11); + } + } + if (-.001 <= h__) { + i2 = h__ <= 1.001; + } else { + i2 = FALSE_; + } + if (! i2) { + ehg182_(&c__122); + } + lg = (integer) ((doublereal) lg / 2.); + i__1 = lg; + for (ig = 1; ig <= i__1; ++ig) { + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + g[ig * 9 - 9] = phi0 * g[ig * 9 - 9] + phi1 * g[(ig + lg) * 9 - 9] + + (psi0 * g[i__ + ig * 9 - 9] + psi1 * g[i__ + (ig + lg) + * 9 - 9]) * (v[ur + i__ * v_dim1] - v[ll + i__ * v_dim1]); + i__2 = i__ - 1; + for (ii = 1; ii <= i__2; ++ii) { + g[ii + ig * 9 - 9] = phi0 * g[ii + ig * 9 - 9] + phi1 * g[ii + + (ig + lg) * 9 - 9]; + /* L9: */ + } + /* L8: */ + } + /* L7: */ + } + s = g[0]; + /* blending */ + if (*d__ == 2) { + /* ----- North ----- */ + v0 = v[ll + v_dim1]; + v1 = v[ur + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[j * c_dim1 + 3] * vval_dim1]; + /* L10: */ + } + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[j * c_dim1 + 4] * vval_dim1]; + /* L11: */ + } + xibar = v[ur + (v_dim1 << 1)]; + m = nt - 1; + /* top of while loop */ + L12: + if (m == 0) { + i4 = TRUE_; + } else { + if (a[t[m - 1]] == 2) { + i3 = xi[t[m - 1]] == xibar; + } else { + i3 = FALSE_; + } + i4 = i3; + } + if (i4) { + goto L13; + } + --m; + /* voidp junk */ + goto L12; + /* bottom of while loop */ + L13: + if (m >= 1) { + m = hi[t[m - 1]]; + /* top of while loop */ + L14: + if (! (a[m] != 0)) { + goto L15; + } + if (z__[a[m]] <= xi[m]) { + m = lo[m]; + } else { + m = hi[m]; + } + goto L14; + /* bottom of while loop */ + L15: + if (v0 < v[c__[m * c_dim1 + 1] + v_dim1]) { + v0 = v[c__[m * c_dim1 + 1] + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[m * c_dim1 + 1] * vval_dim1]; + /* L16: */ + } + } + if (v[c__[m * c_dim1 + 2] + v_dim1] < v1) { + v1 = v[c__[m * c_dim1 + 2] + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[m * c_dim1 + 2] * vval_dim1]; + /* L17: */ + } + } + } + h__ = (z__[1] - v0) / (v1 - v0); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + gn = phi0 * g0[0] + phi1 * g1[0] + (psi0 * g0[1] + psi1 * g1[1]) * ( + v1 - v0); + gpn = phi0 * g0[2] + phi1 * g1[2]; + /* ----- South ----- */ + v0 = v[ll + v_dim1]; + v1 = v[ur + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[j * c_dim1 + 1] * vval_dim1]; + /* L18: */ + } + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[j * c_dim1 + 2] * vval_dim1]; + /* L19: */ + } + xibar = v[ll + (v_dim1 << 1)]; + m = nt - 1; + /* top of while loop */ + L20: + if (m == 0) { + i6 = TRUE_; + } else { + if (a[t[m - 1]] == 2) { + i5 = xi[t[m - 1]] == xibar; + } else { + i5 = FALSE_; + } + i6 = i5; + } + if (i6) { + goto L21; + } + --m; + /* voidp junk */ + goto L20; + /* bottom of while loop */ + L21: + if (m >= 1) { + m = lo[t[m - 1]]; + /* top of while loop */ + L22: + if (! (a[m] != 0)) { + goto L23; + } + if (z__[a[m]] <= xi[m]) { + m = lo[m]; + } else { + m = hi[m]; + } + goto L22; + /* bottom of while loop */ + L23: + if (v0 < v[c__[m * c_dim1 + 3] + v_dim1]) { + v0 = v[c__[m * c_dim1 + 3] + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[m * c_dim1 + 3] * vval_dim1]; + /* L24: */ + } + } + if (v[c__[m * c_dim1 + 4] + v_dim1] < v1) { + v1 = v[c__[m * c_dim1 + 4] + v_dim1]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[m * c_dim1 + 4] * vval_dim1]; + /* L25: */ + } + } + } + h__ = (z__[1] - v0) / (v1 - v0); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + gs = phi0 * g0[0] + phi1 * g1[0] + (psi0 * g0[1] + psi1 * g1[1]) * ( + v1 - v0); + gps = phi0 * g0[2] + phi1 * g1[2]; + /* ----- East ----- */ + v0 = v[ll + (v_dim1 << 1)]; + v1 = v[ur + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[j * c_dim1 + 2] * vval_dim1]; + /* L26: */ + } + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[j * c_dim1 + 4] * vval_dim1]; + /* L27: */ + } + xibar = v[ur + v_dim1]; + m = nt - 1; + /* top of while loop */ + L28: + if (m == 0) { + i8 = TRUE_; + } else { + if (a[t[m - 1]] == 1) { + i7 = xi[t[m - 1]] == xibar; + } else { + i7 = FALSE_; + } + i8 = i7; + } + if (i8) { + goto L29; + } + --m; + /* voidp junk */ + goto L28; + /* bottom of while loop */ + L29: + if (m >= 1) { + m = hi[t[m - 1]]; + /* top of while loop */ + L30: + if (! (a[m] != 0)) { + goto L31; + } + if (z__[a[m]] <= xi[m]) { + m = lo[m]; + } else { + m = hi[m]; + } + goto L30; + /* bottom of while loop */ + L31: + if (v0 < v[c__[m * c_dim1 + 1] + (v_dim1 << 1)]) { + v0 = v[c__[m * c_dim1 + 1] + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[m * c_dim1 + 1] * vval_dim1]; + /* L32: */ + } + } + if (v[c__[m * c_dim1 + 3] + (v_dim1 << 1)] < v1) { + v1 = v[c__[m * c_dim1 + 3] + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[m * c_dim1 + 3] * vval_dim1]; + /* L33: */ + } + } + } + h__ = (z__[2] - v0) / (v1 - v0); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + ge = phi0 * g0[0] + phi1 * g1[0] + (psi0 * g0[2] + psi1 * g1[2]) * ( + v1 - v0); + gpe = phi0 * g0[1] + phi1 * g1[1]; + /* ----- West ----- */ + v0 = v[ll + (v_dim1 << 1)]; + v1 = v[ur + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[j * c_dim1 + 1] * vval_dim1]; + /* L34: */ + } + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[j * c_dim1 + 3] * vval_dim1]; + /* L35: */ + } + xibar = v[ll + v_dim1]; + m = nt - 1; + /* top of while loop */ + L36: + if (m == 0) { + i10 = TRUE_; + } else { + if (a[t[m - 1]] == 1) { + i9 = xi[t[m - 1]] == xibar; + } else { + i9 = FALSE_; + } + i10 = i9; + } + if (i10) { + goto L37; + } + --m; + /* voidp junk */ + goto L36; + /* bottom of while loop */ + L37: + if (m >= 1) { + m = lo[t[m - 1]]; + /* top of while loop */ + L38: + if (! (a[m] != 0)) { + goto L39; + } + if (z__[a[m]] <= xi[m]) { + m = lo[m]; + } else { + m = hi[m]; + } + goto L38; + /* bottom of while loop */ + L39: + if (v0 < v[c__[m * c_dim1 + 2] + (v_dim1 << 1)]) { + v0 = v[c__[m * c_dim1 + 2] + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g0[i11] = vval[i11 + c__[m * c_dim1 + 2] * vval_dim1]; + /* L40: */ + } + } + if (v[c__[m * c_dim1 + 4] + (v_dim1 << 1)] < v1) { + v1 = v[c__[m * c_dim1 + 4] + (v_dim1 << 1)]; + i__1 = *d__; + for (i11 = 0; i11 <= i__1; ++i11) { + g1[i11] = vval[i11 + c__[m * c_dim1 + 4] * vval_dim1]; + /* L41: */ + } + } + } + h__ = (z__[2] - v0) / (v1 - v0); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + gw = phi0 * g0[0] + phi1 * g1[0] + (psi0 * g0[2] + psi1 * g1[2]) * ( + v1 - v0); + gpw = phi0 * g0[1] + phi1 * g1[1]; + /* NS */ + h__ = (z__[2] - v[ll + (v_dim1 << 1)]) / (v[ur + (v_dim1 << 1)] - v[ + ll + (v_dim1 << 1)]); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + sns = phi0 * gs + phi1 * gn + (psi0 * gps + psi1 * gpn) * (v[ur + ( + v_dim1 << 1)] - v[ll + (v_dim1 << 1)]); + /* EW */ + h__ = (z__[1] - v[ll + v_dim1]) / (v[ur + v_dim1] - v[ll + v_dim1]); + /* Hermite basis */ + /* Computing 2nd power */ + d__1 = 1 - h__; + phi0 = d__1 * d__1 * (h__ * 2 + 1); + /* Computing 2nd power */ + d__1 = h__; + phi1 = d__1 * d__1 * (3 - h__ * 2); + /* Computing 2nd power */ + d__1 = 1 - h__; + psi0 = h__ * (d__1 * d__1); + /* Computing 2nd power */ + d__1 = h__; + psi1 = d__1 * d__1 * (h__ - 1); + sew = phi0 * gw + phi1 * ge + (psi0 * gpw + psi1 * gpe) * (v[ur + + v_dim1] - v[ll + v_dim1]); + s = sns + sew - s; + } + ret_val = s; + return ret_val; +} /* ehg128_ */ + +integer ifloor_(doublereal *x) +{ + /* System generated locals */ + integer ret_val; + + ret_val = (integer) (*x); + if ((doublereal) ret_val > *x) { + --ret_val; + } + return ret_val; +} /* ifloor_ */ + +/* DSIGN is unused, causes conflicts on some platforms */ +/* DOUBLE PRECISION function DSIGN(a1,a2) */ +/* DOUBLE PRECISION a1, a2 */ +/* DSIGN=DABS(a1) */ +/* if(a2.ge.0)DSIGN=-DSIGN */ +/* end */ +/* ehg136() is the workhorse of lowesf(.) */ +/* n = number of observations */ +/* m = number of x values at which to evaluate */ +/* f = span */ +/* nf = min(n, floor(f * n)) */ +/* Subroutine */ int ehg136_(doublereal *u, integer *lm, integer *m, integer * + n, integer *d__, integer *nf, doublereal *f, doublereal *x, integer * + psi, doublereal *y, doublereal *rw, integer *kernel, integer *k, + doublereal *dist, doublereal *eta, doublereal *b, integer *od, + doublereal *o, integer *ihat, doublereal *w, doublereal *rcond, + integer *sing, integer *dd, integer *tdeg, integer *cdeg, doublereal * + s) +{ + /* System generated locals */ + integer o_dim1, o_offset, b_dim1, b_offset, s_dim1, s_offset, u_dim1, + u_offset, x_dim1, x_offset, i__1, i__2, i__3; + + /* Local variables */ + static doublereal e[225] /* was [15][15] */, g[225] /* was [15][ + 15] */; + static integer i__, j, l; + static doublereal q[8]; + static integer i1; + static doublereal i2, tol; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static integer info; + static doublereal work[15]; + extern /* Subroutine */ int ehg127_(doublereal *, integer *, integer *, + integer *, doublereal *, doublereal *, integer *, doublereal *, + doublereal *, integer *, integer *, doublereal *, doublereal *, + doublereal *, integer *, doublereal *, doublereal *, integer *, + doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *, + integer *, doublereal *), ehg182_(integer *); + static doublereal scale, sigma[15]; + extern /* Subroutine */ int dqrsl_(doublereal *, integer *, integer *, + integer *, doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *); + static doublereal qraux[15], dgamma[15]; + static integer identi; + + /* V -> g */ + /* U -> e */ + /* Identity -> identi */ + /* L -> o */ + /* X -> b */ + /* Parameter adjustments */ + o_dim1 = *m; + o_offset = 1 + o_dim1; + o -= o_offset; + --dist; + --rw; + --y; + --psi; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + u_dim1 = *lm; + u_offset = 1 + u_dim1; + u -= u_offset; + --w; + --eta; + b_dim1 = *nf; + b_offset = 1 + b_dim1; + b -= b_offset; + s_dim1 = *od - 0 + 1; + s_offset = 0 + s_dim1; + s -= s_offset; + --cdeg; + + /* Function Body */ + if (*k > *nf - 1) { + ehg182_(&c__104); + } + if (*k > 15) { + ehg182_(&c__105); + } + i__1 = *n; + for (identi = 1; identi <= i__1; ++identi) { + psi[identi] = identi; + /* L3: */ + } + i__1 = *m; + for (l = 1; l <= i__1; ++l) { + i__2 = *d__; + for (i1 = 1; i1 <= i__2; ++i1) { + q[i1 - 1] = u[l + i1 * u_dim1]; + /* L5: */ + } + ehg127_(q, n, d__, nf, f, &x[x_offset], &psi[1], &y[1], &rw[1], + kernel, k, &dist[1], &eta[1], &b[b_offset], od, &w[1], rcond, + sing, sigma, e, g, dgamma, qraux, work, &tol, dd, tdeg, &cdeg[ + 1], &s[l * s_dim1]); + if (*ihat == 1) { + /* $L sub {l,l} = */ + /* V sub {1,:} SIGMA sup {+} U sup T */ + /* (Q sup T W e sub i )$ */ + if (! (*m == *n)) { + ehg182_(&c__123); + } + /* find $i$ such that $l = psi sub i$ */ + i__ = 1; + /* top of while loop */ + L6: + if (! (l != psi[i__])) { + goto L7; + } + ++i__; + if (! (i__ < *nf)) { + ehg182_(&c__123); + /* next line is not in current dloess */ + goto L7; + } + goto L6; + /* bottom of while loop */ + L7: + i__2 = *nf; + for (i1 = 1; i1 <= i__2; ++i1) { + eta[i1] = 0.; + /* L8: */ + } + eta[i__] = w[i__]; + /* $eta = Q sup T W e sub i$ */ + dqrsl_(&b[b_offset], nf, nf, k, qraux, &eta[1], &eta[1], &eta[1], + &eta[1], &eta[1], &eta[1], &c__1000, &info); + /* $gamma = U sup T eta sub {1:k}$ */ + i__2 = *k; + for (i1 = 1; i1 <= i__2; ++i1) { + dgamma[i1 - 1] = 0.; + /* L9: */ + } + i__2 = *k; + for (j = 1; j <= i__2; ++j) { + i2 = eta[j]; + i__3 = *k; + for (i1 = 1; i1 <= i__3; ++i1) { + dgamma[i1 - 1] += i2 * e[j + i1 * 15 - 16]; + /* L11: */ + } + /* L10: */ + } + /* $gamma = SIGMA sup {+} gamma$ */ + i__2 = *k; + for (j = 1; j <= i__2; ++j) { + if (tol < sigma[j - 1]) { + dgamma[j - 1] /= sigma[j - 1]; + } else { + dgamma[j - 1] = 0.; + } + /* L12: */ + } + /* voidp junk */ + /* voidp junk */ + o[l + o_dim1] = ddot_(k, g, &c__15, dgamma, &c__1); + } else { + if (*ihat == 2) { + /* $L sub {l,:} = */ + /* V sub {1,:} SIGMA sup {+} */ + /* ( U sup T Q sup T ) W $ */ + i__2 = *n; + for (i1 = 1; i1 <= i__2; ++i1) { + o[l + i1 * o_dim1] = 0.; + /* L13: */ + } + i__2 = *k; + for (j = 1; j <= i__2; ++j) { + i__3 = *nf; + for (i1 = 1; i1 <= i__3; ++i1) { + eta[i1] = 0.; + /* L15: */ + } + i__3 = *k; + for (i1 = 1; i1 <= i__3; ++i1) { + eta[i1] = e[i1 + j * 15 - 16]; + /* L16: */ + } + dqrsl_(&b[b_offset], nf, nf, k, qraux, &eta[1], &eta[1], + work, work, work, work, &c__10000, &info); + if (tol < sigma[j - 1]) { + scale = 1. / sigma[j - 1]; + } else { + scale = 0.; + } + i__3 = *nf; + for (i1 = 1; i1 <= i__3; ++i1) { + eta[i1] *= scale * w[i1]; + /* L17: */ + } + i__3 = *nf; + for (i__ = 1; i__ <= i__3; ++i__) { + o[l + psi[i__] * o_dim1] += g[j * 15 - 15] * eta[i__]; + /* L18: */ + } + /* L14: */ + } + } + } + /* L4: */ + } + return 0; +} /* ehg136_ */ + +/* called from lowesb() ... compute fit ..?..?... */ +/* somewhat similar to ehg136 */ +/* Subroutine */ int ehg139_(doublereal *v, integer *nvmax, integer *nv, + integer *n, integer *d__, integer *nf, doublereal *f, doublereal *x, + integer *pi, integer *psi, doublereal *y, doublereal *rw, doublereal * + trl, integer *kernel, integer *k, doublereal *dist, doublereal *phi, + doublereal *eta, doublereal *b, integer *od, doublereal *w, + doublereal *diagl, doublereal *vval2, integer *ncmax, integer *vc, + integer *a, doublereal *xi, integer *lo, integer *hi, integer *c__, + integer *vhit, doublereal *rcond, integer *sing, integer *dd, integer + *tdeg, integer *cdeg, integer *lq, doublereal *lf, logical *setlf, + doublereal *s) +{ + /* System generated locals */ + integer lq_dim1, lq_offset, c_dim1, c_offset, lf_dim1, lf_dim2, lf_offset, + b_dim1, b_offset, s_dim1, s_offset, v_dim1, v_offset, vval2_dim1, + vval2_offset, x_dim1, x_offset, i__1, i__2, i__3, i__4; + + /* Local variables */ + static doublereal e[225] /* was [15][15] */; + static integer i__, j, l; + static doublereal q[8], u[225] /* was [15][15] */, z__[8], i1; + static integer i2, i3; + static doublereal i4; + static integer i5, i6; + static doublereal i7; + static integer ii; + static doublereal tol; + static integer leaf[256]; + extern doublereal ddot_(integer *, doublereal *, integer *, doublereal *, + integer *); + static integer info; + static doublereal term, work[15]; + extern /* Subroutine */ int ehg127_(doublereal *, integer *, integer *, + integer *, doublereal *, doublereal *, integer *, doublereal *, + doublereal *, integer *, integer *, doublereal *, doublereal *, + doublereal *, integer *, doublereal *, doublereal *, integer *, + doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *, + integer *, doublereal *), ehg182_(integer *), ehg137_(doublereal * + , integer *, integer *, integer *, integer *, integer *, integer * + , integer *, integer *, doublereal *, integer *, integer *); + extern doublereal ehg128_(doublereal *, integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *, integer *, + doublereal *, integer *, doublereal *); + static integer ileaf, nleaf; + static doublereal scale, sigma[15]; + extern /* Subroutine */ int dqrsl_(doublereal *, integer *, integer *, + integer *, doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *); + static doublereal qraux[15], dgamma[15]; + static integer identi; + + /* V -> e */ + /* Identity -> identi */ + /* X -> b */ + /* l2fit with trace(L) */ + /* Parameter adjustments */ + --vhit; + --diagl; + --phi; + --dist; + --rw; + --y; + --psi; + --pi; + vval2_dim1 = *d__ - 0 + 1; + vval2_offset = 0 + vval2_dim1; + vval2 -= vval2_offset; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + lf_dim1 = *d__ - 0 + 1; + lf_dim2 = *nvmax; + lf_offset = 0 + lf_dim1 * (1 + lf_dim2); + lf -= lf_offset; + lq_dim1 = *nvmax; + lq_offset = 1 + lq_dim1; + lq -= lq_offset; + --w; + --eta; + b_dim1 = *nf; + b_offset = 1 + b_dim1; + b -= b_offset; + s_dim1 = *od - 0 + 1; + s_offset = 0 + s_dim1; + s -= s_offset; + --hi; + --lo; + --xi; + --a; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + --cdeg; + + /* Function Body */ + if (*k > *nf - 1) { + ehg182_(&c__104); + } + if (*k > 15) { + ehg182_(&c__105); + } + if (*trl != 0.) { + i__1 = *n; + for (i5 = 1; i5 <= i__1; ++i5) { + diagl[i5] = 0.; + /* L3: */ + } + i__1 = *nv; + for (i6 = 1; i6 <= i__1; ++i6) { + i__2 = *d__; + for (i5 = 0; i5 <= i__2; ++i5) { + vval2[i5 + i6 * vval2_dim1] = 0.; + /* L5: */ + } + /* L4: */ + } + } + i__1 = *n; + for (identi = 1; identi <= i__1; ++identi) { + psi[identi] = identi; + /* L6: */ + } + i__1 = *nv; + for (l = 1; l <= i__1; ++l) { + i__2 = *d__; + for (i5 = 1; i5 <= i__2; ++i5) { + q[i5 - 1] = v[l + i5 * v_dim1]; + /* L8: */ + } + ehg127_(q, n, d__, nf, f, &x[x_offset], &psi[1], &y[1], &rw[1], + kernel, k, &dist[1], &eta[1], &b[b_offset], od, &w[1], rcond, + sing, sigma, u, e, dgamma, qraux, work, &tol, dd, tdeg, &cdeg[ + 1], &s[l * s_dim1]); + if (*trl != 0.) { + /* invert $psi$ */ + i__2 = *n; + for (i5 = 1; i5 <= i__2; ++i5) { + phi[i5] = 0.; + /* L9: */ + } + i__2 = *nf; + for (i__ = 1; i__ <= i__2; ++i__) { + phi[psi[i__]] = (doublereal) i__; + /* L10: */ + } + i__2 = *d__; + for (i5 = 1; i5 <= i__2; ++i5) { + z__[i5 - 1] = v[l + i5 * v_dim1]; + /* L11: */ + } + ehg137_(z__, &vhit[l], leaf, &nleaf, d__, nv, nvmax, ncmax, &a[1], + &xi[1], &lo[1], &hi[1]); + i__2 = nleaf; + for (ileaf = 1; ileaf <= i__2; ++ileaf) { + i__3 = hi[leaf[ileaf - 1]]; + for (ii = lo[leaf[ileaf - 1]]; ii <= i__3; ++ii) { + i__ = (integer) phi[pi[ii]]; + if (i__ != 0) { + if (! (psi[i__] == pi[ii])) { + ehg182_(&c__194); + } + i__4 = *nf; + for (i5 = 1; i5 <= i__4; ++i5) { + eta[i5] = 0.; + /* L14: */ + } + eta[i__] = w[i__]; + /* $eta = Q sup T W e sub i$ */ + dqrsl_(&b[b_offset], nf, nf, k, qraux, &eta[1], work, + &eta[1], &eta[1], work, work, &c__1000, &info) + ; + i__4 = *k; + for (j = 1; j <= i__4; ++j) { + if (tol < sigma[j - 1]) { + i4 = ddot_(k, &u[j * 15 - 15], &c__1, &eta[1], + &c__1) / sigma[j - 1]; + } else { + i4 = 0.; + } + dgamma[j - 1] = i4; + /* L15: */ + } + i__4 = *d__ + 1; + for (j = 1; j <= i__4; ++j) { + /* bug fix 2006-07-15 for k=1, od>1. (thanks btyner@gmail.com) */ + if (j <= *k) { + vval2[j - 1 + l * vval2_dim1] = ddot_(k, &e[j + - 1], &c__15, dgamma, &c__1); + } else { + vval2[j - 1 + l * vval2_dim1] = 0.; + } + /* L16: */ + } + i__4 = *d__; + for (i5 = 1; i5 <= i__4; ++i5) { + z__[i5 - 1] = x[pi[ii] + i5 * x_dim1]; + /* L17: */ + } + term = ehg128_(z__, d__, ncmax, vc, &a[1], &xi[1], & + lo[1], &hi[1], &c__[c_offset], &v[v_offset], + nvmax, &vval2[vval2_offset]); + diagl[pi[ii]] += term; + i__4 = *d__; + for (i5 = 0; i5 <= i__4; ++i5) { + vval2[i5 + l * vval2_dim1] = 0.; + /* L18: */ + } + } + /* L13: */ + } + /* L12: */ + } + } + if (*setlf) { + /* $Lf sub {:,l,:} = V SIGMA sup {+} U sup T Q sup T W$ */ + if (! (*k >= *d__ + 1)) { + ehg182_(&c__196); + } + i__2 = *nf; + for (i5 = 1; i5 <= i__2; ++i5) { + lq[l + i5 * lq_dim1] = psi[i5]; + /* L19: */ + } + i__2 = *nf; + for (i6 = 1; i6 <= i__2; ++i6) { + i__3 = *d__; + for (i5 = 0; i5 <= i__3; ++i5) { + lf[i5 + (l + i6 * lf_dim2) * lf_dim1] = 0.; + /* L21: */ + } + /* L20: */ + } + i__2 = *k; + for (j = 1; j <= i__2; ++j) { + i__3 = *nf; + for (i5 = 1; i5 <= i__3; ++i5) { + eta[i5] = 0.; + /* L23: */ + } + i__3 = *k; + for (i5 = 1; i5 <= i__3; ++i5) { + eta[i5] = u[i5 + j * 15 - 16]; + /* L24: */ + } + dqrsl_(&b[b_offset], nf, nf, k, qraux, &eta[1], &eta[1], work, + work, work, work, &c__10000, &info); + if (tol < sigma[j - 1]) { + scale = 1. / sigma[j - 1]; + } else { + scale = 0.; + } + i__3 = *nf; + for (i5 = 1; i5 <= i__3; ++i5) { + eta[i5] *= scale * w[i5]; + /* L25: */ + } + i__3 = *nf; + for (i__ = 1; i__ <= i__3; ++i__) { + i7 = eta[i__]; + i__4 = *d__; + for (i5 = 0; i5 <= i__4; ++i5) { + if (i5 < *k) { + lf[i5 + (l + i__ * lf_dim2) * lf_dim1] += e[i5 + + 1 + j * 15 - 16] * i7; + } else { + lf[i5 + (l + i__ * lf_dim2) * lf_dim1] = 0.; + } + /* L27: */ + } + /* L26: */ + } + /* L22: */ + } + } + /* L7: */ + } + if (*trl != 0.) { + if (*n <= 0) { + *trl = 0.; + } else { + i3 = *n; + i1 = diagl[i3]; + for (i2 = i3 - 1; i2 >= 1; --i2) { + i1 = diagl[i2] + i1; + /* L28: */ + } + *trl = i1; + } + } + return 0; +} /* ehg139_ */ + +/* Subroutine */ int lowesb_(doublereal *xx, doublereal *yy, doublereal *ww, + doublereal *diagl, integer *infl, integer *iv, integer *liv, integer * + lv, doublereal *wv) +{ + /* System generated locals */ + integer i__1; + doublereal d__1; + + /* Local variables */ + static doublereal trl; + extern /* Subroutine */ int ehg131_(doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, integer *, + integer *, integer *, integer *, integer *, integer *, integer *, + integer *, integer *, doublereal *, integer *, integer *, integer + *, integer *, integer *, integer *, doublereal *, integer *, + doublereal *, doublereal *, doublereal *, doublereal *, + doublereal *, integer *, doublereal *, doublereal *, doublereal *, + doublereal *, integer *, integer *, integer *, integer *, + integer *, doublereal *, logical *), ehg182_(integer *), ehg183_( + char *, integer *, integer *, integer *, ftnlen); + static logical setlf; + extern integer ifloor_(doublereal *); + + /* Var */ + /* Parameter adjustments */ + --wv; + --iv; + --diagl; + --ww; + --yy; + --xx; + + /* Function Body */ + if (! (iv[28] != 173)) { + ehg182_(&c__174); + } + if (iv[28] != 172) { + if (! (iv[28] == 171)) { + ehg182_(&c__171); + } + } + iv[28] = 173; + if (*infl != 0) { + trl = 1.; + } else { + trl = 0.; + } + setlf = iv[27] != iv[25]; + d__1 = iv[3] * wv[2]; + i__1 = ifloor_(&d__1); + ehg131_(&xx[1], &yy[1], &ww[1], &trl, &diagl[1], &iv[20], &iv[29], &iv[3], + &iv[2], &iv[5], &iv[17], &iv[4], &iv[6], &iv[14], &iv[19], &wv[1] + , &iv[iv[7]], &iv[iv[8]], &iv[iv[9]], &iv[iv[10]], &iv[iv[22]], & + iv[iv[27]], &wv[iv[11]], &iv[iv[23]], &wv[iv[13]], &wv[iv[12]], & + wv[iv[15]], &wv[iv[16]], &wv[iv[18]], &i__1, &wv[3], &wv[iv[26]], + &wv[iv[24]], &wv[4], &iv[30], &iv[33], &iv[32], &iv[41], &iv[iv[ + 25]], &wv[iv[34]], &setlf); + if ((doublereal) iv[14] < iv[6] + (doublereal) iv[4] / 2.) { + ehg183_("k-d tree limited by memory; nvmax=", &iv[14], &c__1, &c__1, ( + ftnlen)34); + } else { + if (iv[17] < iv[5] + 2) { + ehg183_("k-d tree limited by memory. ncmax=", &iv[17], &c__1, & + c__1, (ftnlen)34); + } + } + return 0; +} /* lowesb_ */ + +/* lowesd() : Initialize iv(*) and v(1:4) */ +/* ------ called only by loess_workspace() in ./loessc.c */ +/* Subroutine */ int lowesd_(integer *versio, integer *iv, integer *liv, + integer *lv, doublereal *v, integer *d__, integer *n, doublereal *f, + integer *ideg, integer *nvmax, integer *setlf) +{ + /* System generated locals */ + integer i__1, i__2; + doublereal d__1; + + /* Builtin functions */ + integer pow_ii(integer *, integer *); + + /* Local variables */ + static integer i__, j, i1, i2, nf, vc; + extern /* Subroutine */ int ehg182_(integer *); + static integer ncmax, bound; + extern integer ifloor_(doublereal *); + + + /* unnecessary initialization of i1 to keep g77 -Wall happy */ + + /* Parameter adjustments */ + --iv; + --v; + + /* Function Body */ + i1 = 0; + /* version -> versio */ + if (! (*versio == 106)) { + ehg182_(&c__100); + } + iv[28] = 171; + iv[2] = *d__; + iv[3] = *n; + vc = pow_ii(&c__2, d__); + iv[4] = vc; + if (! (0. < *f)) { + ehg182_(&c__120); + } + /* Computing MIN */ + d__1 = *n * *f; + i__1 = *n, i__2 = ifloor_(&d__1); + nf = min(i__1,i__2); + iv[19] = nf; + iv[20] = 1; + if (*ideg == 0) { + i1 = 1; + } else { + if (*ideg == 1) { + i1 = *d__ + 1; + } else { + if (*ideg == 2) { + i1 = (integer) ((doublereal) ((*d__ + 2) * (*d__ + 1)) / 2.); + } + } + } + iv[29] = i1; + iv[21] = 1; + iv[14] = *nvmax; + ncmax = *nvmax; + iv[17] = ncmax; + iv[30] = 0; + iv[32] = *ideg; + if (! (*ideg >= 0)) { + ehg182_(&c__195); + } + if (! (*ideg <= 2)) { + ehg182_(&c__195); + } + iv[33] = *d__; + for (i2 = 41; i2 <= 49; ++i2) { + iv[i2] = *ideg; + /* L3: */ + } + iv[7] = 50; + iv[8] = iv[7] + ncmax; + iv[9] = iv[8] + vc * ncmax; + iv[10] = iv[9] + ncmax; + iv[22] = iv[10] + ncmax; + /* initialize permutation */ + j = iv[22] - 1; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + iv[j + i__] = i__; + /* L4: */ + } + iv[23] = iv[22] + *n; + iv[25] = iv[23] + *nvmax; + if (*setlf != 0) { + iv[27] = iv[25] + *nvmax * nf; + } else { + iv[27] = iv[25]; + } + bound = iv[27] + *n; + if (! (bound - 1 <= *liv)) { + ehg182_(&c__102); + } + iv[11] = 50; + iv[13] = iv[11] + *nvmax * *d__; + iv[12] = iv[13] + (*d__ + 1) * *nvmax; + iv[15] = iv[12] + ncmax; + iv[16] = iv[15] + *n; + iv[18] = iv[16] + nf; + iv[24] = iv[18] + iv[29] * nf; + iv[34] = iv[24] + (*d__ + 1) * *nvmax; + if (*setlf != 0) { + iv[26] = iv[34] + (*d__ + 1) * *nvmax * nf; + } else { + iv[26] = iv[34]; + } + bound = iv[26] + nf; + if (! (bound - 1 <= *lv)) { + ehg182_(&c__103); + } + v[1] = *f; + v[2] = .05; + v[3] = 0.; + v[4] = 1.; + return 0; +} /* lowesd_ */ + +/* Subroutine */ int lowese_(integer *iv, integer *liv, integer *lv, + doublereal *wv, integer *m, doublereal *z__, doublereal *s) +{ + /* System generated locals */ + integer z_dim1, z_offset; + + /* Local variables */ + extern /* Subroutine */ int ehg133_(integer *, integer *, integer *, + integer *, integer *, integer *, integer *, integer *, integer *, + integer *, doublereal *, doublereal *, doublereal *, integer *, + doublereal *, doublereal *), ehg182_(integer *); + + /* Parameter adjustments */ + --iv; + --wv; + --s; + z_dim1 = *m; + z_offset = 1 + z_dim1; + z__ -= z_offset; + + /* Function Body */ + if (! (iv[28] != 172)) { + ehg182_(&c__172); + } + if (! (iv[28] == 173)) { + ehg182_(&c__173); + } + ehg133_(&iv[3], &iv[2], &iv[4], &iv[14], &iv[5], &iv[17], &iv[iv[7]], &iv[ + iv[8]], &iv[iv[9]], &iv[iv[10]], &wv[iv[11]], &wv[iv[13]], &wv[iv[ + 12]], m, &z__[z_offset], &s[1]); + return 0; +} /* lowese_ */ + +/* "direct" (non-"interpolate") fit aka predict() : */ +/* Subroutine */ int lowesf_(doublereal *xx, doublereal *yy, doublereal *ww, + integer *iv, integer *liv, integer *lv, doublereal *wv, integer *m, + doublereal *z__, doublereal *l, integer *ihat, doublereal *s) +{ + /* System generated locals */ + integer z_dim1, z_offset, l_dim1, l_offset; + + /* Local variables */ + static logical i1; + extern /* Subroutine */ int ehg136_(doublereal *, integer *, integer *, + integer *, integer *, integer *, doublereal *, doublereal *, + integer *, doublereal *, doublereal *, integer *, integer *, + doublereal *, doublereal *, doublereal *, integer *, doublereal *, + integer *, doublereal *, doublereal *, integer *, integer *, + integer *, integer *, doublereal *), ehg182_(integer *); + + /* m = number of x values at which to evaluate */ + /* Parameter adjustments */ + --xx; + --yy; + --ww; + --iv; + --wv; + --s; + l_dim1 = *m; + l_offset = 1 + l_dim1; + l -= l_offset; + z_dim1 = *m; + z_offset = 1 + z_dim1; + z__ -= z_offset; + + /* Function Body */ + if (171 <= iv[28]) { + i1 = iv[28] <= 174; + } else { + i1 = FALSE_; + } + if (! i1) { + ehg182_(&c__171); + } + iv[28] = 172; + if (! (iv[14] >= iv[19])) { + ehg182_(&c__186); + } + /* do the work; in ehg136() give the argument names as they are there: */ + /* ehg136(u,lm,m, n, d, nf, f, x, psi, y ,rw, */ + ehg136_(&z__[z_offset], m, m, &iv[3], &iv[2], &iv[19], &wv[1], &xx[1], & + iv[iv[22]], &yy[1], &ww[1], &iv[20], &iv[29], &wv[iv[15]], &wv[iv[ + 16]], &wv[iv[18]], &c__0, &l[l_offset], ihat, &wv[iv[26]], &wv[4], + &iv[30], &iv[33], &iv[32], &iv[41], &s[1]); + /* kernel, k, dist, eta, b, od,o,ihat, */ + /* w, rcond,sing, dd, tdeg,cdeg, s) */ + return 0; +} /* lowesf_ */ + +/* Subroutine */ int lowesl_(integer *iv, integer *liv, integer *lv, + doublereal *wv, integer *m, doublereal *z__, doublereal *l) +{ + /* System generated locals */ + integer l_dim1, l_offset, z_dim1, z_offset; + + /* Local variables */ + extern /* Subroutine */ int ehg182_(integer *), ehg191_(integer *, + doublereal *, doublereal *, integer *, integer *, integer *, + integer *, integer *, integer *, integer *, doublereal *, integer + *, integer *, integer *, doublereal *, integer *, doublereal *, + doublereal *, integer *); + + /* Parameter adjustments */ + --iv; + --wv; + l_dim1 = *m; + l_offset = 1 + l_dim1; + l -= l_offset; + z_dim1 = *m; + z_offset = 1 + z_dim1; + z__ -= z_offset; + + /* Function Body */ + if (! (iv[28] != 172)) { + ehg182_(&c__172); + } + if (! (iv[28] == 173)) { + ehg182_(&c__173); + } + if (! (iv[26] != iv[34])) { + ehg182_(&c__175); + } + ehg191_(m, &z__[z_offset], &l[l_offset], &iv[2], &iv[3], &iv[19], &iv[6], + &iv[17], &iv[4], &iv[iv[7]], &wv[iv[12]], &iv[iv[10]], &iv[iv[9]], + &iv[iv[8]], &wv[iv[11]], &iv[14], &wv[iv[24]], &wv[iv[34]], &iv[ + iv[25]]); + return 0; +} /* lowesl_ */ + +/* Subroutine */ int lowesr_(doublereal *yy, integer *iv, integer *liv, + integer *lv, doublereal *wv) +{ + extern /* Subroutine */ int ehg182_(integer *), ehg192_(doublereal *, + integer *, integer *, integer *, integer *, integer *, doublereal + *, doublereal *, integer *); + + /* Parameter adjustments */ + --wv; + --iv; + --yy; + + /* Function Body */ + if (! (iv[28] != 172)) { + ehg182_(&c__172); + } + if (! (iv[28] == 173)) { + ehg182_(&c__173); + } + ehg192_(&yy[1], &iv[2], &iv[3], &iv[19], &iv[6], &iv[14], &wv[iv[13]], & + wv[iv[34]], &iv[iv[25]]); + return 0; +} /* lowesr_ */ + +/* Subroutine */ int lowesw_(doublereal *res, integer *n, doublereal *rw, + integer *pi) +{ + /* System generated locals */ + integer i__1, i__2; + doublereal d__1, d__2; + + /* Local variables */ + static integer i__, i1, nh; + static doublereal cmad; + extern /* Subroutine */ int ehg106_(integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *); + extern doublereal d1mach_(integer *); + static integer identi; + static doublereal rsmall; + extern integer ifloor_(doublereal *); + + /* Tranliterated from Devlin's ratfor */ + /* implicit none */ + /* Args */ + /* Var */ + /* Identity -> identi */ + /* find median of absolute residuals */ + /* Parameter adjustments */ + --pi; + --rw; + --res; + + /* Function Body */ + i__1 = *n; + for (i1 = 1; i1 <= i__1; ++i1) { + rw[i1] = (d__1 = res[i1], abs(d__1)); + /* L3: */ + } + i__1 = *n; + for (identi = 1; identi <= i__1; ++identi) { + pi[identi] = identi; + /* L4: */ + } + d__1 = (doublereal) (*n) / 2.; + nh = ifloor_(&d__1) + 1; + /* partial sort to find 6*mad */ + ehg106_(&c__1, n, &nh, &c__1, &rw[1], &pi[1], n); + if (*n - nh + 1 < nh) { + i__1 = nh - 1; + i__2 = nh - 1; + ehg106_(&c__1, &i__1, &i__2, &c__1, &rw[1], &pi[1], n); + cmad = (rw[pi[nh]] + rw[pi[nh - 1]]) * 3; + } else { + cmad = rw[pi[nh]] * 6; + } + rsmall = d1mach_(&c__1); + if (cmad < rsmall) { + i__1 = *n; + for (i1 = 1; i1 <= i__1; ++i1) { + rw[i1] = 1.; + /* L5: */ + } + } else { + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + if (cmad * .999 < rw[i__]) { + rw[i__] = 0.; + } else { + if (cmad * .001 < rw[i__]) { + /* Computing 2nd power */ + d__2 = rw[i__] / cmad; + /* Computing 2nd power */ + d__1 = 1 - d__2 * d__2; + rw[i__] = d__1 * d__1; + } else { + rw[i__] = 1.; + } + } + /* L6: */ + } + } + return 0; +} /* lowesw_ */ + +/* Subroutine */ int lowesp_(integer *n, doublereal *y, doublereal *yhat, + doublereal *pwgts, doublereal *rwgts, integer *pi, doublereal *ytilde) +{ + /* System generated locals */ + integer i__1, i__2; + doublereal d__1; + + /* Builtin functions */ + double sqrt(doublereal); + + /* Local variables */ + static doublereal c__; + static integer i__, m; + static doublereal i1; + static integer i2, i3; + static doublereal i4, mad; + extern /* Subroutine */ int ehg106_(integer *, integer *, integer *, + integer *, doublereal *, integer *, integer *); + extern integer ifloor_(doublereal *); + + /* Var */ + /* median absolute deviation (using partial sort): */ + /* Parameter adjustments */ + --ytilde; + --pi; + --rwgts; + --pwgts; + --yhat; + --y; + + /* Function Body */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + ytilde[i__] = (d__1 = y[i__] - yhat[i__], abs(d__1)) * sqrt(pwgts[i__] + ); + pi[i__] = i__; + /* L3: */ + } + d__1 = (doublereal) (*n) / 2.; + m = ifloor_(&d__1) + 1; + ehg106_(&c__1, n, &m, &c__1, &ytilde[1], &pi[1], n); + if (*n - m + 1 < m) { + i__1 = m - 1; + i__2 = m - 1; + ehg106_(&c__1, &i__1, &i__2, &c__1, &ytilde[1], &pi[1], n); + mad = (ytilde[pi[m - 1]] + ytilde[pi[m]]) / 2; + } else { + mad = ytilde[pi[m]]; + } + /* magic constant */ + /* Computing 2nd power */ + d__1 = mad * 6; + c__ = d__1 * d__1 / 5; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + /* Computing 2nd power */ + d__1 = y[i__] - yhat[i__]; + ytilde[i__] = 1 - d__1 * d__1 * pwgts[i__] / c__; + /* L5: */ + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + ytilde[i__] *= sqrt(rwgts[i__]); + /* L6: */ + } + if (*n <= 0) { + i4 = 0.; + } else { + i3 = *n; + i1 = ytilde[i3]; + for (i2 = i3 - 1; i2 >= 1; --i2) { + i1 = ytilde[i2] + i1; + /* L7: */ + } + i4 = i1; + } + c__ = *n / i4; + /* pseudovalues */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + ytilde[i__] = yhat[i__] + c__ * rwgts[i__] * (y[i__] - yhat[i__]); + /* L8: */ + } + return 0; +} /* lowesp_ */ + +/* Subroutine */ int ehg124_(integer *ll, integer *uu, integer *d__, integer * + n, integer *nv, integer *nc, integer *ncmax, integer *vc, doublereal * + x, integer *pi, integer *a, doublereal *xi, integer *lo, integer *hi, + integer *c__, doublereal *v, integer *vhit, integer *nvmax, integer * + fc, doublereal *fd, integer *dd) +{ + /* System generated locals */ + integer c_dim1, c_offset, v_dim1, v_offset, x_dim1, x_offset, i__1, i__2, + i__3, i__4; + doublereal d__1; + + /* Builtin functions */ + double sqrt(doublereal); + integer pow_ii(integer *, integer *); + + /* Local variables */ + static integer k, l, m, p, u; + static logical i1, i2; + static integer i4; + static doublereal diag[8]; + static logical leaf; + static doublereal diam; + extern /* Subroutine */ int ehg125_(integer *, integer *, doublereal *, + integer *, integer *, integer *, integer *, doublereal *, integer + *, integer *, integer *, integer *, integer *), ehg106_(integer *, + integer *, integer *, integer *, doublereal *, integer *, + integer *), ehg129_(integer *, integer *, integer *, doublereal *, + integer *, integer *, doublereal *); + static integer check; + static doublereal sigma[8]; + static integer lower, upper, inorm2; + extern integer idamax_(integer *, doublereal *, integer *); + static integer offset; + + /* Parameter adjustments */ + --pi; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + --hi; + --lo; + --xi; + --a; + c_dim1 = *vc; + c_offset = 1 + c_dim1; + c__ -= c_offset; + --vhit; + v_dim1 = *nvmax; + v_offset = 1 + v_dim1; + v -= v_offset; + + /* Function Body */ + p = 1; + l = *ll; + u = *uu; + lo[p] = l; + hi[p] = u; + /* top of while loop */ +L3: + if (! (p <= *nc)) { + goto L4; + } + i__1 = *dd; + for (i4 = 1; i4 <= i__1; ++i4) { + diag[i4 - 1] = v[c__[*vc + p * c_dim1] + i4 * v_dim1] - v[c__[p * + c_dim1 + 1] + i4 * v_dim1]; + /* L5: */ + } + diam = 0.; + i__1 = *dd; + for (inorm2 = 1; inorm2 <= i__1; ++inorm2) { + /* Computing 2nd power */ + d__1 = diag[inorm2 - 1]; + diam += d__1 * d__1; + /* L6: */ + } + diam = sqrt(diam); + if (u - l + 1 <= *fc) { + i1 = TRUE_; + } else { + i1 = diam <= *fd; + } + if (i1) { + leaf = TRUE_; + } else { + if (*ncmax < *nc + 2) { + i2 = TRUE_; + } else { + i2 = (doublereal) (*nvmax) < *nv + (doublereal) (*vc) / 2.; + } + leaf = i2; + } + if (! leaf) { + ehg129_(&l, &u, dd, &x[x_offset], &pi[1], n, sigma); + k = idamax_(dd, sigma, &c__1); + m = (integer) ((doublereal) (l + u) / 2.); + ehg106_(&l, &u, &m, &c__1, &x[k * x_dim1 + 1], &pi[1], n); + /* all ties go with hi son */ + /* top of while loop */ + /* bug fix from btyner@gmail.com 2006-07-20 */ + offset = 0; + L7: + if (m + offset >= u || m + offset < l) { + goto L8; + } + if (offset < 0) { + lower = l; + check = m + offset; + upper = check; + } else { + lower = m + offset + 1; + check = lower; + upper = u; + } + ehg106_(&lower, &upper, &check, &c__1, &x[k * x_dim1 + 1], &pi[1], n); + if (x[pi[m + offset] + k * x_dim1] == x[pi[m + offset + 1] + k * + x_dim1]) { + offset = -offset; + if (offset >= 0) { + ++offset; + } + goto L7; + } else { + m += offset; + goto L8; + } + /* bottom of while loop */ + L8: + if (v[c__[p * c_dim1 + 1] + k * v_dim1] == x[pi[m] + k * x_dim1]) { + leaf = TRUE_; + } else { + leaf = v[c__[*vc + p * c_dim1] + k * v_dim1] == x[pi[m] + k * + x_dim1]; + } + } + if (leaf) { + a[p] = 0; + } else { + a[p] = k; + xi[p] = x[pi[m] + k * x_dim1]; + /* left son */ + ++(*nc); + lo[p] = *nc; + lo[*nc] = l; + hi[*nc] = m; + /* right son */ + ++(*nc); + hi[p] = *nc; + lo[*nc] = m + 1; + hi[*nc] = u; + i__2 = k - 1; + i__1 = pow_ii(&c__2, &i__2); + i__4 = *d__ - k; + i__3 = pow_ii(&c__2, &i__4); + ehg125_(&p, nv, &v[v_offset], &vhit[1], nvmax, d__, &k, &xi[p], &i__1, + &i__3, &c__[p * c_dim1 + 1], &c__[lo[p] * c_dim1 + 1], &c__[ + hi[p] * c_dim1 + 1]); + } + ++p; + l = lo[p]; + u = hi[p]; + goto L3; + /* bottom of while loop */ +L4: + return 0; +} /* ehg124_ */ + +/* Subroutine */ int ehg129_(integer *l, integer *u, integer *d__, doublereal + *x, integer *pi, integer *n, doublereal *sigma) +{ + /* Initialized data */ + + static integer execnt = 0; + + /* System generated locals */ + integer x_dim1, x_offset, i__1, i__2; + doublereal d__1, d__2; + + /* Local variables */ + static integer i__, k; + static doublereal t, beta, alpha; + extern doublereal d1mach_(integer *); + static doublereal machin; + + /* Parameter adjustments */ + --sigma; + --pi; + x_dim1 = *n; + x_offset = 1 + x_dim1; + x -= x_offset; + + /* Function Body */ + /* MachInf -> machin */ + ++execnt; + if (execnt == 1) { + /* initialize d1mach(2) === DBL_MAX: */ + machin = d1mach_(&c__2); + } + i__1 = *d__; + for (k = 1; k <= i__1; ++k) { + alpha = machin; + beta = -machin; + i__2 = *u; + for (i__ = *l; i__ <= i__2; ++i__) { + t = x[pi[i__] + k * x_dim1]; + /* Computing MIN */ + d__1 = alpha, d__2 = x[pi[i__] + k * x_dim1]; + alpha = min(d__1,d__2); + beta = max(beta,t); + /* L4: */ + } + sigma[k] = beta - alpha; + /* L3: */ + } + return 0; +} /* ehg129_ */ + +/* {called only from ehg127} purpose...?... */ +/* Subroutine */ int ehg137_(doublereal *z__, integer *kappa, integer *leaf, + integer *nleaf, integer *d__, integer *nv, integer *nvmax, integer * + ncmax, integer *a, doublereal *xi, integer *lo, integer *hi) +{ + /* System generated locals */ + integer i__1, i__2; + + /* Local variables */ + static integer p; + extern /* Subroutine */ int ehg182_(integer *); + static integer pstack[20], stackt; + + /* stacktop -> stackt */ + /* find leaf cells affected by $z$ */ + /* Parameter adjustments */ + --leaf; + --z__; + --hi; + --lo; + --xi; + --a; + + /* Function Body */ + stackt = 0; + p = 1; + *nleaf = 0; + /* top of while loop */ +L3: + if (! (0 < p)) { + goto L4; + } + if (a[p] == 0) { + /* leaf */ + ++(*nleaf); + leaf[*nleaf] = p; + /* Pop */ + if (stackt >= 1) { + p = pstack[stackt - 1]; + } else { + p = 0; + } + /* Computing MAX */ + i__1 = 0, i__2 = stackt - 1; + stackt = max(i__1,i__2); + } else { + if (z__[a[p]] == xi[p]) { + /* Push */ + ++stackt; + if (! (stackt <= 20)) { + ehg182_(&c__187); + } + pstack[stackt - 1] = hi[p]; + p = lo[p]; + } else { + if (z__[a[p]] <= xi[p]) { + p = lo[p]; + } else { + p = hi[p]; + } + } + } + goto L3; + /* bottom of while loop */ +L4: + if (! (*nleaf <= 256)) { + ehg182_(&c__185); + } + return 0; +} /* ehg137_ */ + +/* -- For Error messaging, call the "a" routines at the bottom of ./loessc.c : */ +/* Subroutine */ int ehg183_(char *s, integer *i__, integer *n, integer *inc, + ftnlen s_len) +{ + /* System generated locals */ + integer i__1; + + /* Builtin functions */ + integer i_len(char *, ftnlen); + + /* Local variables */ + extern /* Subroutine */ int ehg183a_(char *, integer *, integer *, + integer *, integer *, ftnlen); + + i__1 = i_len(s, s_len); + ehg183a_(s, &i__1, i__, n, inc, s_len); + return 0; +} /* ehg183_ */ + +/* Subroutine */ int ehg184_(char *s, doublereal *x, integer *n, integer *inc, + ftnlen s_len) +{ + /* System generated locals */ + integer i__1; + + /* Builtin functions */ + integer i_len(char *, ftnlen); + + /* Local variables */ + extern /* Subroutine */ int ehg184a_(char *, integer *, doublereal *, + integer *, integer *, ftnlen); + + i__1 = i_len(s, s_len); + ehg184a_(s, &i__1, x, n, inc, s_len); + return 0; +} /* ehg184_ */ diff --git a/Algorithms/loessf.f b/Algorithms/loessf.f new file mode 100644 index 000000000..c6b8513ba --- /dev/null +++ b/Algorithms/loessf.f @@ -0,0 +1,2047 @@ +C +C The authors of this software are Cleveland, Grosse, and Shyu. +C Copyright (c) 1989, 1992 by AT&T. +C Permission to use, copy, modify, and distribute this software for any +C purpose without fee is hereby granted, provided that this entire notice +C is included in all copies of any software which is or includes a copy +C or modification of this software and in all copies of the supporting +C documentation for such software. +C THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +C WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY +C REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +C OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +C altered by B.D. Ripley to +C +C remove unused variables +C make phi in ehg139 double precision to match calling sequence +C +C Note that ehg182(errormsg_code) is in ./loessc.c + + subroutine ehg126(d,n,vc,x,v,nvmax) + integer d,execnt,i,j,k,n,nvmax,vc + DOUBLE PRECISION machin,alpha,beta,mu,t + DOUBLE PRECISION v(nvmax,d),x(n,d) + + DOUBLE PRECISION D1MACH + external D1MACH + save machin,execnt + data execnt /0/ +c MachInf -> machin + execnt=execnt+1 + if(execnt.eq.1)then +c initialize d1mach(2) === DBL_MAX: + machin=D1MACH(2) + end if +c fill in vertices for bounding box of $x$ +c lower left, upper right + do 3 k=1,d + alpha=machin + beta=-machin + do 4 i=1,n + t=x(i,k) + alpha=min(alpha,t) + beta=max(beta,t) + 4 continue +c expand the box a little + mu=0.005D0*max(beta-alpha,1.d-10*max(DABS(alpha),DABS(beta))+ + + 1.d-30) + alpha=alpha-mu + beta=beta+mu + v(1,k)=alpha + v(vc,k)=beta + 3 continue +c remaining vertices + do 5 i=2,vc-1 + j=i-1 + do 6 k=1,d + v(i,k)=v(1+mod(j,2)*(vc-1),k) + j=DBLE(j)/2.D0 + 6 continue + 5 continue + return + end + + subroutine ehg125(p,nv,v,vhit,nvmax,d,k,t,r,s,f,l,u) + logical i1,i2,match + integer d,h,i,i3,j,k,m,mm,nv,nvmax,p,r,s + integer f(r,0:1,s),l(r,0:1,s),u(r,0:1,s),vhit(nvmax) + DOUBLE PRECISION t + DOUBLE PRECISION v(nvmax,d) + external ehg182 + h=nv + do 3 i=1,r + do 4 j=1,s + h=h+1 + do 5 i3=1,d + v(h,i3)=v(f(i,0,j),i3) + 5 continue + v(h,k)=t +c check for redundant vertex + match=.false. + m=1 +c top of while loop + 6 if(.not.match)then + i1=(m.le.nv) + else + i1=.false. + end if + if(.not.(i1))goto 7 + match=(v(m,1).eq.v(h,1)) + mm=2 +c top of while loop + 8 if(match)then + i2=(mm.le.d) + else + i2=.false. + end if + if(.not.(i2))goto 9 + match=(v(m,mm).eq.v(h,mm)) + mm=mm+1 + goto 8 +c bottom of while loop + 9 m=m+1 + goto 6 +c bottom of while loop + 7 m=m-1 + if(match)then + h=h-1 + else + m=h + if(vhit(1).ge.0)then + vhit(m)=p + end if + end if + l(i,0,j)=f(i,0,j) + l(i,1,j)=m + u(i,0,j)=m + u(i,1,j)=f(i,1,j) + 4 continue + 3 continue + nv=h + if(.not.(nv.le.nvmax))then + call ehg182(180) + end if + return + end + + integer function ehg138(i,z,a,xi,lo,hi,ncmax) + logical i1 + integer i,j,ncmax + integer a(ncmax),hi(ncmax),lo(ncmax) + DOUBLE PRECISION xi(ncmax),z(8) +c descend tree until leaf or ambiguous + j=i +c top of while loop + 3 if(a(j).ne.0)then + i1=(z(a(j)).ne.xi(j)) + else + i1=.false. + end if + if(.not.(i1))goto 4 + if(z(a(j)).le.xi(j))then + j=lo(j) + else + j=hi(j) + end if + goto 3 +c bottom of while loop + 4 ehg138=j + return + end + + subroutine ehg106(il,ir,k,nk,p,pi,n) + +c Partial sorting of p(1, il:ir) returning the sort indices pi() only +c such that p(1, pi(k)) is correct + +c implicit none +c Arguments +c Input: + integer il,ir,k,nk,n + DOUBLE PRECISION p(nk,n) +c using only p(1, pi(*)) +c Output: + integer pi(n) + +c Variables + DOUBLE PRECISION t + integer i,ii,j,l,r + +c find the $k$-th smallest of $n$ elements +c Floyd+Rivest, CACM Mar '75, Algorithm 489 + l=il + r=ir +c while (l < r ) + 3 if(.not.(l.lt.r))goto 4 +c to avoid recursion, sophisticated partition deleted +c partition $x sub {l..r}$ about $t$ + t=p(1,pi(k)) + i=l + j=r + ii=pi(l) + pi(l)=pi(k) + pi(k)=ii + if(t.lt.p(1,pi(r)))then + ii=pi(l) + pi(l)=pi(r) + pi(r)=ii + end if +c top of while loop + 5 if(.not.(i.lt.j))goto 6 + ii=pi(i) + pi(i)=pi(j) + pi(j)=ii + i=i+1 + j=j-1 +c top of while loop + 7 if(.not.(p(1,pi(i)).lt.t))goto 8 + i=i+1 + goto 7 +c bottom of while loop + 8 continue +c top of while loop + 9 if(.not.(t.lt.p(1,pi(j))))goto 10 + j=j-1 + goto 9 +c bottom of while loop + 10 goto 5 +c bottom of while loop + 6 if(p(1,pi(l)).eq.t)then + ii=pi(l) + pi(l)=pi(j) + pi(j)=ii + else + j=j+1 + ii=pi(r) + pi(r)=pi(j) + pi(j)=ii + end if + if(j.le.k)then + l=j+1 + end if + if(k.le.j)then + r=j-1 + end if + goto 3 +c bottom of while loop + 4 return + end + + + subroutine ehg127(q,n,d,nf,f,x,psi,y,rw,kernel,k,dist,eta,b,od,w, + + rcond,sing,sigma,u,e,dgamma,qraux,work,tol,dd,tdeg,cdeg,s) + integer column,d,dd,execnt,i,i3,i9,info,inorm2,j,jj,jpvt,k,kernel, + + n,nf,od,sing,tdeg + integer cdeg(8),psi(n) + double precision machep,f,i1,i10,i2,i4,i5,i6,i7,i8,rcond,rho,scal, + + tol + double precision g(15),sigma(15),u(15,15),e(15,15),b(nf,k), + + colnor(15),dist(n),eta(nf),dgamma(15),q(d),qraux(15),rw(n), + + s(0:od),w(nf),work(15),x(n,d),y(n) + + integer idamax + double precision d1mach, ddot + + external ehg106,ehg182,ehg184,dqrdc,dqrsl,dsvdc + external idamax, d1mach, ddot + + save machep,execnt + data execnt /0/ +c colnorm -> colnor +c E -> g +c MachEps -> machep +c V -> e +c X -> b + execnt=execnt+1 + if(execnt.eq.1)then +c initialize d1mach(4) === 1 / DBL_EPSILON === 2^52 : + machep=d1mach(4) + end if +c sort by distance + do 3 i3=1,n + dist(i3)=0 + 3 continue + do 4 j=1,dd + i4=q(j) + do 5 i3=1,n + dist(i3)=dist(i3)+(x(i3,j)-i4)**2 + 5 continue + 4 continue + call ehg106(1,n,nf,1,dist,psi,n) + rho=dist(psi(nf))*max(1.d0,f) + if(rho .le. 0)then + call ehg182(120) + end if +c compute neighborhood weights + if(kernel.eq.2)then + do 6 i=1,nf + if(dist(psi(i)).lt.rho)then + i1=dsqrt(rw(psi(i))) + else + i1=0 + end if + w(i)=i1 + 6 continue + else + do 7 i3=1,nf + w(i3)=dsqrt(dist(psi(i3))/rho) + 7 continue + do 8 i3=1,nf + w(i3)=dsqrt(rw(psi(i3))*(1-w(i3)**3)**3) + 8 continue + end if + if(dabs(w(idamax(nf,w,1))).eq.0)then + call ehg184('at ',q(1),dd,1) + call ehg184('radius ',rho,1,1) + if(.not..false.)then + call ehg182(121) + end if + end if +c fill design matrix + column=1 + do 9 i3=1,nf + b(i3,column)=w(i3) + 9 continue + if(tdeg.ge.1)then + do 10 j=1,d + if(cdeg(j).ge.1)then + column=column+1 + i5=q(j) + do 11 i3=1,nf + b(i3,column)=w(i3)*(x(psi(i3),j)-i5) + 11 continue + end if + 10 continue + end if + if(tdeg.ge.2)then + do 12 j=1,d + if(cdeg(j).ge.1)then + if(cdeg(j).ge.2)then + column=column+1 + i6=q(j) + do 13 i3=1,nf + b(i3,column)=w(i3)*(x(psi(i3),j)-i6)**2 + 13 continue + end if + do 14 jj=j+1,d + if(cdeg(jj).ge.1)then + column=column+1 + i7=q(j) + i8=q(jj) + do 15 i3=1,nf + b(i3,column)=w(i3)*(x(psi(i3),j)-i7)*(x(psi(i3), + +jj)-i8) + 15 continue + end if + 14 continue + end if + 12 continue + k=column + end if + do 16 i3=1,nf + eta(i3)=w(i3)*y(psi(i3)) + 16 continue +c equilibrate columns + do 17 j=1,k + scal=0 + do 18 inorm2=1,nf + scal=scal+b(inorm2,j)**2 + 18 continue + scal=dsqrt(scal) + if(0.lt.scal)then + do 19 i3=1,nf + b(i3,j)=b(i3,j)/scal + 19 continue + colnor(j)=scal + else + colnor(j)=1 + end if + 17 continue +c singular value decomposition + call dqrdc(b,nf,nf,k,qraux,jpvt,work,0) + call dqrsl(b,nf,nf,k,qraux,eta,work,eta,eta,work,work,1000,info) + do 20 i9=1,k + do 21 i3=1,k + u(i3,i9)=0 + 21 continue + 20 continue + do 22 i=1,k + do 23 j=i,k +c FIXME: this has i = 3 vs bound 2 in a ggplot2 test + u(i,j)=b(i,j) + 23 continue + 22 continue + call dsvdc(u,15,k,k,sigma,g,u,15,e,15,work,21,info) + if(.not.(info.eq.0))then + call ehg182(182) + end if + tol=sigma(1)*(100*machep) + rcond=min(rcond,sigma(k)/sigma(1)) + if(sigma(k).le.tol)then + sing=sing+1 + if(sing.eq.1)then + call ehg184('pseudoinverse used at',q(1),d,1) + call ehg184('neighborhood radius',dsqrt(rho),1,1) + call ehg184('reciprocal condition number ',rcond,1,1) + else + if(sing.eq.2)then + call ehg184('There are other near singularities as well.' + +,rho,1,1) + end if + end if + end if +c compensate for equilibration + do 24 j=1,k + i10=colnor(j) + do 25 i3=1,k + e(j,i3)=e(j,i3)/i10 + 25 continue + 24 continue +c solve least squares problem + do 26 j=1,k + if(tol.lt.sigma(j))then + i2=ddot(k,u(1,j),1,eta,1)/sigma(j) + else + i2=0.d0 + end if + dgamma(j)=i2 + 26 continue + do 27 j=0,od +c bug fix 2006-07-04 for k=1, od>1. (thanks btyner@gmail.com) + if(j.lt.k)then + s(j)=ddot(k,e(j+1,1),15,dgamma,1) + else + s(j)=0.d0 + end if + 27 continue + return + end + + subroutine ehg131(x,y,rw,trl,diagl,kernel,k,n,d,nc,ncmax,vc,nv, + + nvmax,nf,f,a,c,hi,lo,pi,psi,v,vhit,vval,xi,dist,eta,b,ntol, + + fd,w,vval2,rcond,sing,dd,tdeg,cdeg,lq,lf,setlf) + logical setlf + integer identi,d,dd,i1,i2,j,k,kernel,n,nc,ncmax,nf,ntol,nv, + + nvmax,sing,tdeg,vc + integer lq(nvmax,nf),a(ncmax),c(vc,ncmax),cdeg(8),hi(ncmax), + + lo(ncmax),pi(n),psi(n),vhit(nvmax) + double precision f,fd,rcond,trl + double precision lf(0:d,nvmax,nf),b(*),delta(8),diagl(n),dist(n), + + eta(nf),rw(n),v(nvmax,d),vval(0:d,nvmax),vval2(0:d,nvmax), + + w(nf),x(n,d),xi(ncmax),y(n) + external ehg126,ehg182,ehg139,ehg124 + double precision dnrm2 + external dnrm2 +c Identity -> identi +c X -> b + if(.not.(d.le.8))then + call ehg182(101) + end if +c build $k$-d tree + call ehg126(d,n,vc,x,v,nvmax) + nv=vc + nc=1 + do 3 j=1,vc + c(j,nc)=j + vhit(j)=0 + 3 continue + do 4 i1=1,d + delta(i1)=v(vc,i1)-v(1,i1) + 4 continue + fd=fd*dnrm2(d,delta,1) + do 5 identi=1,n + pi(identi)=identi + 5 continue + call ehg124(1,n,d,n,nv,nc,ncmax,vc,x,pi,a,xi,lo,hi,c,v,vhit,nvmax, + +ntol,fd,dd) +c smooth + if(trl.ne.0)then + do 6 i2=1,nv + do 7 i1=0,d + vval2(i1,i2)=0 + 7 continue + 6 continue + end if + call ehg139(v,nvmax,nv,n,d,nf,f,x,pi,psi,y,rw,trl,kernel,k,dist, + + dist,eta,b,d,w,diagl,vval2,nc,vc,a,xi,lo,hi,c,vhit,rcond, + + sing,dd,tdeg,cdeg,lq,lf,setlf,vval) + return + end + + subroutine ehg133(n,d,vc,nvmax,nc,ncmax,a,c,hi,lo,v,vval,xi,m,z,s) + integer n,d,vc,nvmax,nc,ncmax, m + integer a(ncmax),c(vc,ncmax),hi(ncmax),lo(ncmax) + double precision v(nvmax,d),vval(0:d,nvmax),xi(ncmax),z(m,d),s(m) +c Var + double precision delta(8) + integer i,i1 + + double precision ehg128 + external ehg128 + + do 3 i=1,m + do 4 i1=1,d + delta(i1)=z(i,i1) + 4 continue + s(i)=ehg128(delta,d,ncmax,vc,a,xi,lo,hi,c,v,nvmax,vval) + 3 continue + return + end + + subroutine ehg140(iw,i,j) + integer i,j + integer iw(i) + iw(i)=j + return + end + + subroutine ehg141(trl,n,deg,k,d,nsing,dk,delta1,delta2) + double precision trl,delta1,delta2 + integer n,deg,k,d,nsing,dk + + double precision c(48), c1, c2, c3, c4, corx,z,zz(1) + integer i + + external ehg176 + double precision ehg176 + +c coef, d, deg, del + data c / .2971620d0,.3802660d0,.5886043d0,.4263766d0,.3346498d0, + +.6271053d0,.5241198d0,.3484836d0,.6687687d0,.6338795d0,.4076457d0, + +.7207693d0,.1611761d0,.3091323d0,.4401023d0,.2939609d0,.3580278d0, + +.5555741d0,.3972390d0,.4171278d0,.6293196d0,.4675173d0,.4699070d0, + +.6674802d0,.2848308d0,.2254512d0,.2914126d0,.5393624d0,.2517230d0, + +.3898970d0,.7603231d0,.2969113d0,.4740130d0,.9664956d0,.3629838d0, + +.5348889d0,.2075670d0,.2822574d0,.2369957d0,.3911566d0,.2981154d0, + +.3623232d0,.5508869d0,.3501989d0,.4371032d0,.7002667d0,.4291632d0, + +.4930370d0 / + + if(deg.eq.0) dk=1 + if(deg.eq.1) dk=d+1 + if(deg.eq.2) dk=dble((d+2)*(d+1))/2.d0 + corx=dsqrt(k/dble(n)) + z=(dsqrt(k/trl)-corx)/(1-corx) + if(nsing .eq. 0 .and. 1 .lt. z) call ehg184('Chernobyl! trLn',trl,1,1) + z=min(1.0d0,max(0.0d0,z)) +c R fix + zz(1)=z + c4=dexp(ehg176(zz)) + i=1+3*(min(d,4)-1+4*(deg-1)) + if(d.le.4)then + c1=c(i) + c2=c(i+1) + c3=c(i+2) + else + c1=c(i)+(d-4)*(c(i)-c(i-3)) + c2=c(i+1)+(d-4)*(c(i+1)-c(i-2)) + c3=c(i+2)+(d-4)*(c(i+2)-c(i-1)) + endif + delta1=n-trl*dexp(c1*z**c2*(1-z)**c3*c4) + i=i+24 + if(d.le.4)then + c1=c(i) + c2=c(i+1) + c3=c(i+2) + else + c1=c(i)+(d-4)*(c(i)-c(i-3)) + c2=c(i+1)+(d-4)*(c(i+1)-c(i-2)) + c3=c(i+2)+(d-4)*(c(i+2)-c(i-1)) + endif + delta2=n-trl*dexp(c1*z**c2*(1-z)**c3*c4) + return + end + + subroutine lowesc(n,l,ll,trl,delta1,delta2) + integer i,j,n + double precision delta1,delta2,trl + double precision l(n,n),ll(n,n) + double precision ddot + external ddot +c compute $LL~=~(I-L)(I-L)'$ + do 3 i=1,n + l(i,i)=l(i,i)-1 + 3 continue + do 4 i=1,n + do 5 j=1,i + ll(i,j)=ddot(n,l(i,1),n,l(j,1),n) + 5 continue + 4 continue + do 6 i=1,n + do 7 j=i+1,n + ll(i,j)=ll(j,i) + 7 continue + 6 continue + do 8 i=1,n + l(i,i)=l(i,i)+1 + 8 continue +c accumulate first two traces + trl=0 + delta1=0 + do 9 i=1,n + trl=trl+l(i,i) + delta1=delta1+ll(i,i) + 9 continue +c $delta sub 2 = "tr" LL sup 2$ + delta2=0 + do 10 i=1,n + delta2=delta2+ddot(n,ll(i,1),n,ll(1,i),1) + 10 continue + return + end + + subroutine ehg169(d,vc,nc,ncmax,nv,nvmax,v,a,xi,c,hi,lo) + integer d,vc,nc,ncmax,nv,nvmax + integer a(ncmax), c(vc,ncmax), hi(ncmax), lo(ncmax) + DOUBLE PRECISION v(nvmax,d),xi(ncmax) + + integer novhit(1),i,j,k,mc,mv,p + external ehg125,ehg182 + integer ifloor + external ifloor + +c as in bbox +c remaining vertices + do 3 i=2,vc-1 + j=i-1 + do 4 k=1,d + v(i,k)=v(1+mod(j,2)*(vc-1),k) + j=ifloor(DBLE(j)/2.D0) + 4 continue + 3 continue +c as in ehg131 + mc=1 + mv=vc + novhit(1)=-1 + do 5 j=1,vc + c(j,mc)=j + 5 continue +c as in rbuild + p=1 +c top of while loop + 6 if(.not.(p.le.nc))goto 7 + if(a(p).ne.0)then + k=a(p) +c left son + mc=mc+1 + lo(p)=mc +c right son + mc=mc+1 + hi(p)=mc + call ehg125(p,mv,v,novhit,nvmax,d,k,xi(p),2**(k-1),2**(d-k), + + c(1,p),c(1,lo(p)),c(1,hi(p))) + end if + p=p+1 + goto 6 +c bottom of while loop + 7 if(.not.(mc.eq.nc))then + call ehg182(193) + end if + if(.not.(mv.eq.nv))then + call ehg182(193) + end if + return + end + + DOUBLE PRECISION function ehg176(z) +c + DOUBLE PRECISION z(*) +c + integer d,vc,nv,nc + integer a(17), c(2,17) + integer hi(17), lo(17) + DOUBLE PRECISION v(10,1) + DOUBLE PRECISION vval(0:1,10) + DOUBLE PRECISION xi(17) + double precision ehg128 + external ehg128 + + data d,vc,nv,nc /1,2,10,17/ + data a(1) /1/ + data hi(1),lo(1),xi(1) /3,2,0.3705D0/ + data c(1,1) /1/ + data c(2,1) /2/ + data a(2) /1/ + data hi(2),lo(2),xi(2) /5,4,0.2017D0/ + data c(1,2) /1/ + data c(2,2) /3/ + data a(3) /1/ + data hi(3),lo(3),xi(3) /7,6,0.5591D0/ + data c(1,3) /3/ + data c(2,3) /2/ + data a(4) /1/ + data hi(4),lo(4),xi(4) /9,8,0.1204D0/ + data c(1,4) /1/ + data c(2,4) /4/ + data a(5) /1/ + data hi(5),lo(5),xi(5) /11,10,0.2815D0/ + data c(1,5) /4/ + data c(2,5) /3/ + data a(6) /1/ + data hi(6),lo(6),xi(6) /13,12,0.4536D0/ + data c(1,6) /3/ + data c(2,6) /5/ + data a(7) /1/ + data hi(7),lo(7),xi(7) /15,14,0.7132D0/ + data c(1,7) /5/ + data c(2,7) /2/ + data a(8) /0/ + data c(1,8) /1/ + data c(2,8) /6/ + data a(9) /0/ + data c(1,9) /6/ + data c(2,9) /4/ + data a(10) /0/ + data c(1,10) /4/ + data c(2,10) /7/ + data a(11) /0/ + data c(1,11) /7/ + data c(2,11) /3/ + data a(12) /0/ + data c(1,12) /3/ + data c(2,12) /8/ + data a(13) /0/ + data c(1,13) /8/ + data c(2,13) /5/ + data a(14) /0/ + data c(1,14) /5/ + data c(2,14) /9/ + data a(15) /1/ + data hi(15),lo(15),xi(15) /17,16,0.8751D0/ + data c(1,15) /9/ + data c(2,15) /2/ + data a(16) /0/ + data c(1,16) /9/ + data c(2,16) /10/ + data a(17) /0/ + data c(1,17) /10/ + data c(2,17) /2/ + data vval(0,1) /-9.0572D-2/ + data v(1,1) /-5.D-3/ + data vval(1,1) /4.4844D0/ + data vval(0,2) /-1.0856D-2/ + data v(2,1) /1.005D0/ + data vval(1,2) /-0.7736D0/ + data vval(0,3) /-5.3718D-2/ + data v(3,1) /0.3705D0/ + data vval(1,3) /-0.3495D0/ + data vval(0,4) /2.6152D-2/ + data v(4,1) /0.2017D0/ + data vval(1,4) /-0.7286D0/ + data vval(0,5) /-5.8387D-2/ + data v(5,1) /0.5591D0/ + data vval(1,5) /0.1611D0/ + data vval(0,6) /9.5807D-2/ + data v(6,1) /0.1204D0/ + data vval(1,6) /-0.7978D0/ + data vval(0,7) /-3.1926D-2/ + data v(7,1) /0.2815D0/ + data vval(1,7) /-0.4457D0/ + data vval(0,8) /-6.4170D-2/ + data v(8,1) /0.4536D0/ + data vval(1,8) /3.2813D-2/ + data vval(0,9) /-2.0636D-2/ + data v(9,1) /0.7132D0/ + data vval(1,9) /0.3350D0/ + data vval(0,10) /4.0172D-2/ + data v(10,1) /0.8751D0/ + data vval(1,10) /-4.1032D-2/ + ehg176=ehg128(z,d,nc,vc,a,xi,lo,hi,c,v,nv,vval) + end + + subroutine lowesa(trl,n,d,tau,nsing,delta1,delta2) + integer n,d,tau,nsing + double precision trl, delta1,delta2 + + integer dka,dkb + double precision alpha,d1a,d1b,d2a,d2b + external ehg141 + + call ehg141(trl,n,1,tau,d,nsing,dka,d1a,d2a) + call ehg141(trl,n,2,tau,d,nsing,dkb,d1b,d2b) + alpha=dble(tau-dka)/dble(dkb-dka) + delta1=(1-alpha)*d1a+alpha*d1b + delta2=(1-alpha)*d2a+alpha*d2b + return + end + + subroutine ehg191(m,z,l,d,n,nf,nv,ncmax,vc,a,xi,lo,hi,c,v,nvmax, + + vval2,lf,lq) +c Args + integer m,d,n,nf,nv,ncmax,nvmax,vc + double precision z(m,d), l(m,n), xi(ncmax), v(nvmax,d), + + vval2(0:d,nvmax), lf(0:d,nvmax,nf) + integer lq(nvmax,nf),a(ncmax),c(vc,ncmax),lo(ncmax),hi(ncmax) +c Var + integer lq1,i,i1,i2,j,p + double precision zi(8) + double precision ehg128 + external ehg128 + + do 3 j=1,n + do 4 i2=1,nv + do 5 i1=0,d + vval2(i1,i2)=0 + 5 continue + 4 continue + do 6 i=1,nv +c linear search for i in Lq + lq1=lq(i,1) + lq(i,1)=j + p=nf +c top of while loop + 7 if(.not.(lq(i,p).ne.j))goto 8 + p=p-1 + goto 7 +c bottom of while loop + 8 lq(i,1)=lq1 + if(lq(i,p).eq.j)then + do 9 i1=0,d + vval2(i1,i)=lf(i1,i,p) + 9 continue + end if + 6 continue + do 10 i=1,m + do 11 i1=1,d + zi(i1)=z(i,i1) + 11 continue + l(i,j)=ehg128(zi,d,ncmax,vc,a,xi,lo,hi,c,v,nvmax,vval2) + 10 continue + 3 continue + return + end + + subroutine ehg196(tau,d,f,trl) + integer d,dka,dkb,tau + double precision alpha,f,trl,trla,trlb + external ehg197 + call ehg197(1,tau,d,f,dka,trla) + call ehg197(2,tau,d,f,dkb,trlb) + alpha=dble(tau-dka)/dble(dkb-dka) + trl=(1-alpha)*trla+alpha*trlb + return + end + + subroutine ehg197(deg,tau,d,f,dk,trl) + integer deg,tau,d,dk + double precision f, trl + + double precision g1 + dk = 0 + if(deg.eq.1) dk=d+1 + if(deg.eq.2) dk=dble((d+2)*(d+1))/2.d0 + g1 = (-0.08125d0*d+0.13d0)*d+1.05d0 + trl = dk*(1+max(0.d0,(g1-f)/f)) + return + end + + subroutine ehg192(y,d,n,nf,nv,nvmax,vval,lf,lq) + integer d,i,i1,i2,j,n,nf,nv,nvmax + integer lq(nvmax,nf) + DOUBLE PRECISION i3 + DOUBLE PRECISION lf(0:d,nvmax,nf),vval(0:d,nvmax),y(n) + + do 3 i2=1,nv + do 4 i1=0,d + vval(i1,i2)=0 + 4 continue + 3 continue + do 5 i=1,nv + do 6 j=1,nf + i3=y(lq(i,j)) + do 7 i1=0,d + vval(i1,i)=vval(i1,i)+i3*lf(i1,i,j) + 7 continue + 6 continue + 5 continue + return + end + + DOUBLE PRECISION function ehg128(z,d,ncmax,vc,a,xi,lo,hi,c,v, + + nvmax,vval) + +c implicit none +c Args + integer d,ncmax,nvmax,vc + integer a(ncmax),c(vc,ncmax),hi(ncmax),lo(ncmax) + DOUBLE PRECISION z(d),xi(ncmax),v(nvmax,d), vval(0:d,nvmax) +c Vars + logical i2,i3,i4,i5,i6,i7,i8,i9,i10 + integer i,i1,i11,i12,ig,ii,j,lg,ll,m,nt,ur + integer t(20) + DOUBLE PRECISION ge,gn,gs,gw,gpe,gpn,gps,gpw,h,phi0,phi1, + + psi0,psi1,s,sew,sns,v0,v1,xibar + DOUBLE PRECISION g(0:8,256),g0(0:8),g1(0:8) + + external ehg182,ehg184 +c locate enclosing cell + nt=1 + t(nt)=1 + j=1 +c top of while loop + 3 if(.not.(a(j).ne.0))goto 4 + nt=nt+1 + if(z(a(j)).le.xi(j))then + i1=lo(j) + else + i1=hi(j) + end if + t(nt)=i1 + if(.not.(nt.lt.20))then + call ehg182(181) + end if + j=t(nt) + goto 3 +c bottom of while loop + 4 continue +c tensor + do 5 i12=1,vc + do 6 i11=0,d + g(i11,i12)=vval(i11,c(i12,j)) + 6 continue + 5 continue + lg=vc + ll=c(1,j) + ur=c(vc,j) + do 7 i=d,1,-1 + h=(z(i)-v(ll,i))/(v(ur,i)-v(ll,i)) + if(h.lt.-.001D0)then + call ehg184('eval ',z(1),d,1) + call ehg184('lowerlimit ',v(ll,1),d,nvmax) + else + if(1.001D0.lt.h)then + call ehg184('eval ',z(1),d,1) + call ehg184('upperlimit ',v(ur,1),d,nvmax) + end if + end if + if(-.001D0.le.h)then + i2=(h.le.1.001D0) + else + i2=.false. + end if + if(.not.i2)then + call ehg182(122) + end if + lg=DBLE(lg)/2.D0 + do 8 ig=1,lg +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + g(0,ig)=phi0*g(0,ig) + phi1*g(0,ig+lg) + + + (psi0*g(i,ig)+psi1*g(i,ig+lg)) * (v(ur,i)-v(ll,i)) + do 9 ii=1,i-1 + g(ii,ig)=phi0*g(ii,ig)+phi1*g(ii,ig+lg) + 9 continue + 8 continue + 7 continue + s=g(0,1) +c blending + if(d.eq.2)then +c ----- North ----- + v0=v(ll,1) + v1=v(ur,1) + do 10 i11=0,d + g0(i11)=vval(i11,c(3,j)) + 10 continue + do 11 i11=0,d + g1(i11)=vval(i11,c(4,j)) + 11 continue + xibar=v(ur,2) + m=nt-1 +c top of while loop + 12 if(m.eq.0)then + i4=.true. + else + if(a(t(m)).eq.2)then + i3=(xi(t(m)).eq.xibar) + else + i3=.false. + end if + i4=i3 + end if + if(.not.(.not.i4))goto 13 + m=m-1 +c voidp junk + goto 12 +c bottom of while loop + 13 if(m.ge.1)then + m=hi(t(m)) +c top of while loop + 14 if(.not.(a(m).ne.0))goto 15 + if(z(a(m)).le.xi(m))then + m=lo(m) + else + m=hi(m) + end if + goto 14 +c bottom of while loop + 15 if(v0.lt.v(c(1,m),1))then + v0=v(c(1,m),1) + do 16 i11=0,d + g0(i11)=vval(i11,c(1,m)) + 16 continue + end if + if(v(c(2,m),1).lt.v1)then + v1=v(c(2,m),1) + do 17 i11=0,d + g1(i11)=vval(i11,c(2,m)) + 17 continue + end if + end if + h=(z(1)-v0)/(v1-v0) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + gn=phi0*g0(0)+phi1*g1(0)+(psi0*g0(1)+psi1*g1(1))*(v1-v0) + gpn=phi0*g0(2)+phi1*g1(2) +c ----- South ----- + v0=v(ll,1) + v1=v(ur,1) + do 18 i11=0,d + g0(i11)=vval(i11,c(1,j)) + 18 continue + do 19 i11=0,d + g1(i11)=vval(i11,c(2,j)) + 19 continue + xibar=v(ll,2) + m=nt-1 +c top of while loop + 20 if(m.eq.0)then + i6=.true. + else + if(a(t(m)).eq.2)then + i5=(xi(t(m)).eq.xibar) + else + i5=.false. + end if + i6=i5 + end if + if(.not.(.not.i6))goto 21 + m=m-1 +c voidp junk + goto 20 +c bottom of while loop + 21 if(m.ge.1)then + m=lo(t(m)) +c top of while loop + 22 if(.not.(a(m).ne.0))goto 23 + if(z(a(m)).le.xi(m))then + m=lo(m) + else + m=hi(m) + end if + goto 22 +c bottom of while loop + 23 if(v0.lt.v(c(3,m),1))then + v0=v(c(3,m),1) + do 24 i11=0,d + g0(i11)=vval(i11,c(3,m)) + 24 continue + end if + if(v(c(4,m),1).lt.v1)then + v1=v(c(4,m),1) + do 25 i11=0,d + g1(i11)=vval(i11,c(4,m)) + 25 continue + end if + end if + h=(z(1)-v0)/(v1-v0) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + gs=phi0*g0(0)+phi1*g1(0)+(psi0*g0(1)+psi1*g1(1))*(v1-v0) + gps=phi0*g0(2)+phi1*g1(2) +c ----- East ----- + v0=v(ll,2) + v1=v(ur,2) + do 26 i11=0,d + g0(i11)=vval(i11,c(2,j)) + 26 continue + do 27 i11=0,d + g1(i11)=vval(i11,c(4,j)) + 27 continue + xibar=v(ur,1) + m=nt-1 +c top of while loop + 28 if(m.eq.0)then + i8=.true. + else + if(a(t(m)).eq.1)then + i7=(xi(t(m)).eq.xibar) + else + i7=.false. + end if + i8=i7 + end if + if(.not.(.not.i8))goto 29 + m=m-1 +c voidp junk + goto 28 +c bottom of while loop + 29 if(m.ge.1)then + m=hi(t(m)) +c top of while loop + 30 if(.not.(a(m).ne.0))goto 31 + if(z(a(m)).le.xi(m))then + m=lo(m) + else + m=hi(m) + end if + goto 30 +c bottom of while loop + 31 if(v0.lt.v(c(1,m),2))then + v0=v(c(1,m),2) + do 32 i11=0,d + g0(i11)=vval(i11,c(1,m)) + 32 continue + end if + if(v(c(3,m),2).lt.v1)then + v1=v(c(3,m),2) + do 33 i11=0,d + g1(i11)=vval(i11,c(3,m)) + 33 continue + end if + end if + h=(z(2)-v0)/(v1-v0) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + ge=phi0*g0(0)+phi1*g1(0)+(psi0*g0(2)+psi1*g1(2))*(v1-v0) + gpe=phi0*g0(1)+phi1*g1(1) +c ----- West ----- + v0=v(ll,2) + v1=v(ur,2) + do 34 i11=0,d + g0(i11)=vval(i11,c(1,j)) + 34 continue + do 35 i11=0,d + g1(i11)=vval(i11,c(3,j)) + 35 continue + xibar=v(ll,1) + m=nt-1 +c top of while loop + 36 if(m.eq.0)then + i10=.true. + else + if(a(t(m)).eq.1)then + i9=(xi(t(m)).eq.xibar) + else + i9=.false. + end if + i10=i9 + end if + if(.not.(.not.i10))goto 37 + m=m-1 +c voidp junk + goto 36 +c bottom of while loop + 37 if(m.ge.1)then + m=lo(t(m)) +c top of while loop + 38 if(.not.(a(m).ne.0))goto 39 + if(z(a(m)).le.xi(m))then + m=lo(m) + else + m=hi(m) + end if + goto 38 +c bottom of while loop + 39 if(v0.lt.v(c(2,m),2))then + v0=v(c(2,m),2) + do 40 i11=0,d + g0(i11)=vval(i11,c(2,m)) + 40 continue + end if + if(v(c(4,m),2).lt.v1)then + v1=v(c(4,m),2) + do 41 i11=0,d + g1(i11)=vval(i11,c(4,m)) + 41 continue + end if + end if + h=(z(2)-v0)/(v1-v0) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + gw=phi0*g0(0)+phi1*g1(0)+(psi0*g0(2)+psi1*g1(2))*(v1-v0) + gpw=phi0*g0(1)+phi1*g1(1) +c NS + h=(z(2)-v(ll,2))/(v(ur,2)-v(ll,2)) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + sns=phi0*gs+phi1*gn+(psi0*gps+psi1*gpn)*(v(ur,2)-v(ll,2)) +c EW + h=(z(1)-v(ll,1))/(v(ur,1)-v(ll,1)) +c Hermite basis + phi0=(1-h)**2*(1+2*h) + phi1=h**2*(3-2*h) + psi0=h*(1-h)**2 + psi1=h**2*(h-1) + sew=phi0*gw+phi1*ge+(psi0*gpw+psi1*gpe)*(v(ur,1)-v(ll,1)) + s=(sns+sew)-s + end if + ehg128=s + return + end + + integer function ifloor(x) + DOUBLE PRECISION x + ifloor=x + if(ifloor.gt.x) ifloor=ifloor-1 + end + +c DSIGN is unused, causes conflicts on some platforms +c DOUBLE PRECISION function DSIGN(a1,a2) +c DOUBLE PRECISION a1, a2 +c DSIGN=DABS(a1) +c if(a2.ge.0)DSIGN=-DSIGN +c end + + +c ehg136() is the workhorse of lowesf(.) +c n = number of observations +c m = number of x values at which to evaluate +c f = span +c nf = min(n, floor(f * n)) + subroutine ehg136(u,lm,m,n,d,nf,f,x,psi,y,rw,kernel,k,dist,eta,b, + + od,o,ihat,w,rcond,sing,dd,tdeg,cdeg,s) + integer identi,d,dd,i,i1,ihat,info,j,k,kernel,l,lm,m,n,nf, + + od,sing,tdeg + integer cdeg(8),psi(n) + double precision f,i2,rcond,scale,tol + double precision o(m,n),sigma(15),e(15,15),g(15,15),b(nf,k), + $ dist(n),eta(nf),dgamma(15),q(8),qraux(15),rw(n),s(0:od,m), + $ u(lm,d),w(nf),work(15),x(n,d),y(n) + + external ehg127,ehg182,dqrsl + double precision ddot + external ddot + +c V -> g +c U -> e +c Identity -> identi +c L -> o +c X -> b + if(k .gt. nf-1) call ehg182(104) + if(k .gt. 15) call ehg182(105) + do 3 identi=1,n + psi(identi)=identi + 3 continue + do 4 l=1,m + do 5 i1=1,d + q(i1)=u(l,i1) + 5 continue + call ehg127(q,n,d,nf,f,x,psi,y,rw,kernel,k,dist,eta,b,od,w, + + rcond,sing,sigma,e,g,dgamma,qraux,work,tol,dd,tdeg,cdeg, + + s(0,l)) + if(ihat.eq.1)then +c $L sub {l,l} = +c V sub {1,:} SIGMA sup {+} U sup T +c (Q sup T W e sub i )$ + if(.not.(m.eq.n))then + call ehg182(123) + end if +c find $i$ such that $l = psi sub i$ + i=1 +c top of while loop + 6 if(.not.(l.ne.psi(i)))goto 7 + i=i+1 + if(.not.(i.lt.nf))then + call ehg182(123) +c next line is not in current dloess + goto 7 + end if + goto 6 +c bottom of while loop + 7 do 8 i1=1,nf + eta(i1)=0 + 8 continue + eta(i)=w(i) +c $eta = Q sup T W e sub i$ + call dqrsl(b,nf,nf,k,qraux,eta,eta,eta,eta,eta,eta,1000, + + info) +c $gamma = U sup T eta sub {1:k}$ + do 9 i1=1,k + dgamma(i1)=0 + 9 continue + do 10 j=1,k + i2=eta(j) + do 11 i1=1,k + dgamma(i1)=dgamma(i1)+i2*e(j,i1) + 11 continue + 10 continue +c $gamma = SIGMA sup {+} gamma$ + do 12 j=1,k + if(tol.lt.sigma(j))then + dgamma(j)=dgamma(j)/sigma(j) + else + dgamma(j)=0.d0 + end if + 12 continue +c voidp junk +c voidp junk + o(l,1)=ddot(k,g(1,1),15,dgamma,1) + else + if(ihat.eq.2)then +c $L sub {l,:} = +c V sub {1,:} SIGMA sup {+} +c ( U sup T Q sup T ) W $ + do 13 i1=1,n + o(l,i1)=0 + 13 continue + do 14 j=1,k + do 15 i1=1,nf + eta(i1)=0 + 15 continue + do 16 i1=1,k + eta(i1)=e(i1,j) + 16 continue + call dqrsl(b,nf,nf,k,qraux,eta,eta,work,work,work,work + + ,10000,info) + if(tol.lt.sigma(j))then + scale=1.d0/sigma(j) + else + scale=0.d0 + end if + do 17 i1=1,nf + eta(i1)=eta(i1)*(scale*w(i1)) + 17 continue + do 18 i=1,nf + o(l,psi(i))=o(l,psi(i))+g(1,j)*eta(i) + 18 continue + 14 continue + end if + end if + 4 continue + return + end + +c called from lowesb() ... compute fit ..?..?... +c somewhat similar to ehg136 + subroutine ehg139(v,nvmax,nv,n,d,nf,f,x,pi,psi,y,rw,trl,kernel,k, + + dist,phi,eta,b,od,w,diagl,vval2,ncmax,vc,a,xi,lo,hi,c,vhit, + + rcond,sing,dd,tdeg,cdeg,lq,lf,setlf,s) + logical setlf + integer identi,d,dd,i,i2,i3,i5,i6,ii,ileaf,info,j,k,kernel, + + l,n,ncmax,nf,nleaf,nv,nvmax,od,sing,tdeg,vc + integer lq(nvmax,nf),a(ncmax),c(vc,ncmax),cdeg(8),hi(ncmax), + + leaf(256),lo(ncmax),pi(n),psi(n),vhit(nvmax) + DOUBLE PRECISION f,i1,i4,i7,rcond,scale,term,tol,trl + DOUBLE PRECISION lf(0:d,nvmax,nf),sigma(15),u(15,15),e(15,15), + + b(nf,k),diagl(n),dist(n),eta(nf),DGAMMA(15),q(8),qraux(15), + + rw(n),s(0:od,nv),v(nvmax,d),vval2(0:d,nv),w(nf),work(15), + + x(n,d),xi(ncmax),y(n),z(8) + DOUBLE PRECISION phi(n) + + external ehg127,ehg182,DQRSL,ehg137 + DOUBLE PRECISION ehg128 + external ehg128 + DOUBLE PRECISION DDOT + external DDOT + +c V -> e +c Identity -> identi +c X -> b +c l2fit with trace(L) + if(k .gt. nf-1) call ehg182(104) + if(k .gt. 15) call ehg182(105) + if(trl.ne.0)then + do 3 i5=1,n + diagl(i5)=0 + 3 continue + do 4 i6=1,nv + do 5 i5=0,d + vval2(i5,i6)=0 + 5 continue + 4 continue + end if + do 6 identi=1,n + psi(identi)=identi + 6 continue + do 7 l=1,nv + do 8 i5=1,d + q(i5)=v(l,i5) + 8 continue + call ehg127(q,n,d,nf,f,x,psi,y,rw,kernel,k,dist,eta,b,od,w, + + rcond,sing,sigma,u,e,DGAMMA,qraux,work,tol,dd,tdeg,cdeg, + + s(0,l)) + if(trl.ne.0)then +c invert $psi$ + do 9 i5=1,n + phi(i5)=0 + 9 continue + do 10 i=1,nf + phi(psi(i))=i + 10 continue + do 11 i5=1,d + z(i5)=v(l,i5) + 11 continue + call ehg137(z,vhit(l),leaf,nleaf,d,nv,nvmax,ncmax,a,xi, + + lo,hi) + do 12 ileaf=1,nleaf + do 13 ii=lo(leaf(ileaf)),hi(leaf(ileaf)) + i=phi(pi(ii)) + if(i.ne.0)then + if(.not.(psi(i).eq.pi(ii)))then + call ehg182(194) + end if + do 14 i5=1,nf + eta(i5)=0 + 14 continue + eta(i)=w(i) +c $eta = Q sup T W e sub i$ + call DQRSL(b,nf,nf,k,qraux,eta,work,eta,eta,work, + + work,1000,info) + do 15 j=1,k + if(tol.lt.sigma(j))then + i4=DDOT(k,u(1,j),1,eta,1)/sigma(j) + else + i4=0.D0 + end if + DGAMMA(j)=i4 + 15 continue + do 16 j=1,d+1 +c bug fix 2006-07-15 for k=1, od>1. (thanks btyner@gmail.com) + if(j.le.k)then + vval2(j-1,l)=DDOT(k,e(j,1),15,DGAMMA,1) + else + vval2(j-1,l)=0.0d0 + end if + 16 continue + do 17 i5=1,d + z(i5)=x(pi(ii),i5) + 17 continue + term=ehg128(z,d,ncmax,vc,a,xi,lo,hi,c,v,nvmax, + + vval2) + diagl(pi(ii))=diagl(pi(ii))+term + do 18 i5=0,d + vval2(i5,l)=0 + 18 continue + end if + 13 continue + 12 continue + end if + if(setlf)then +c $Lf sub {:,l,:} = V SIGMA sup {+} U sup T Q sup T W$ + if(.not.(k.ge.d+1))then + call ehg182(196) + end if + do 19 i5=1,nf + lq(l,i5)=psi(i5) + 19 continue + do 20 i6=1,nf + do 21 i5=0,d + lf(i5,l,i6)=0 + 21 continue + 20 continue + do 22 j=1,k + do 23 i5=1,nf + eta(i5)=0 + 23 continue + do 24 i5=1,k + eta(i5)=u(i5,j) + 24 continue + call DQRSL(b,nf,nf,k,qraux,eta,eta,work,work,work,work, + + 10000,info) + if(tol.lt.sigma(j))then + scale=1.D0/sigma(j) + else + scale=0.D0 + end if + do 25 i5=1,nf + eta(i5)=eta(i5)*(scale*w(i5)) + 25 continue + do 26 i=1,nf + i7=eta(i) + do 27 i5=0,d + if(i5.lt.k)then + lf(i5,l,i)=lf(i5,l,i)+e(1+i5,j)*i7 + else + lf(i5,l,i)=0 + end if + 27 continue + 26 continue + 22 continue + end if + 7 continue + if(trl.ne.0)then + if(n.le.0)then + trl=0.D0 + else + i3=n + i1=diagl(i3) + do 28 i2=i3-1,1,-1 + i1=diagl(i2)+i1 + 28 continue + trl=i1 + end if + end if + return + end + + subroutine lowesb(xx,yy,ww,diagl,infl,iv,liv,lv,wv) + logical infl + integer liv, lv + integer iv(*) + DOUBLE PRECISION xx(*),yy(*),ww(*),diagl(*),wv(*) +c Var + DOUBLE PRECISION trl + logical setlf + + integer ifloor + external ifloor + external ehg131,ehg182,ehg183 + + if(.not.(iv(28).ne.173))then + call ehg182(174) + end if + if(iv(28).ne.172)then + if(.not.(iv(28).eq.171))then + call ehg182(171) + end if + end if + iv(28)=173 + if(infl)then + trl=1.D0 + else + trl=0.D0 + end if + setlf=(iv(27).ne.iv(25)) + call ehg131(xx,yy,ww,trl,diagl,iv(20),iv(29),iv(3),iv(2),iv(5), + + iv(17),iv(4),iv(6),iv(14),iv(19),wv(1),iv(iv(7)),iv(iv(8)), + + iv(iv(9)),iv(iv(10)),iv(iv(22)),iv(iv(27)),wv(iv(11)), + + iv(iv(23)),wv(iv(13)),wv(iv(12)),wv(iv(15)),wv(iv(16)), + + wv(iv(18)),ifloor(iv(3)*wv(2)),wv(3),wv(iv(26)),wv(iv(24)), + + wv(4),iv(30),iv(33),iv(32),iv(41),iv(iv(25)),wv(iv(34)), + + setlf) + if(iv(14).lt.iv(6)+DBLE(iv(4))/2.D0)then + call ehg183('k-d tree limited by memory; nvmax=', + + iv(14),1,1) + else + if(iv(17).lt.iv(5)+2)then + call ehg183('k-d tree limited by memory. ncmax=', + + iv(17),1,1) + end if + end if + return + end + +c lowesd() : Initialize iv(*) and v(1:4) +c ------ called only by loess_workspace() in ./loessc.c + subroutine lowesd(versio,iv,liv,lv,v,d,n,f,ideg,nvmax,setlf) + integer versio,liv,lv,d,n,ideg,nvmax + integer iv(liv) + logical setlf + double precision f, v(lv) + + integer bound,i,i1,i2,j,ncmax,nf,vc + external ehg182 + integer ifloor + external ifloor +c +c unnecessary initialization of i1 to keep g77 -Wall happy +c + i1 = 0 +c version -> versio + if(.not.(versio.eq.106))then + call ehg182(100) + end if + iv(28)=171 + iv(2)=d + iv(3)=n + vc=2**d + iv(4)=vc + if(.not.(0.lt.f))then + call ehg182(120) + end if + nf=min(n,ifloor(n*f)) + iv(19)=nf + iv(20)=1 + if(ideg.eq.0)then + i1=1 + else + if(ideg.eq.1)then + i1=d+1 + else + if(ideg.eq.2)then + i1=dble((d+2)*(d+1))/2.d0 + end if + end if + end if + iv(29)=i1 + iv(21)=1 + iv(14)=nvmax + ncmax=nvmax + iv(17)=ncmax + iv(30)=0 + iv(32)=ideg + if(.not.(ideg.ge.0))then + call ehg182(195) + end if + if(.not.(ideg.le.2))then + call ehg182(195) + end if + iv(33)=d + do 3 i2=41,49 + iv(i2)=ideg + 3 continue + iv(7)=50 + iv(8)=iv(7)+ncmax + iv(9)=iv(8)+vc*ncmax + iv(10)=iv(9)+ncmax + iv(22)=iv(10)+ncmax +c initialize permutation + j=iv(22)-1 + do 4 i=1,n + iv(j+i)=i + 4 continue + iv(23)=iv(22)+n + iv(25)=iv(23)+nvmax + if(setlf)then + iv(27)=iv(25)+nvmax*nf + else + iv(27)=iv(25) + end if + bound=iv(27)+n + if(.not.(bound-1.le.liv))then + call ehg182(102) + end if + iv(11)=50 + iv(13)=iv(11)+nvmax*d + iv(12)=iv(13)+(d+1)*nvmax + iv(15)=iv(12)+ncmax + iv(16)=iv(15)+n + iv(18)=iv(16)+nf + iv(24)=iv(18)+iv(29)*nf + iv(34)=iv(24)+(d+1)*nvmax + if(setlf)then + iv(26)=iv(34)+(d+1)*nvmax*nf + else + iv(26)=iv(34) + end if + bound=iv(26)+nf + if(.not.(bound-1.le.lv))then + call ehg182(103) + end if + v(1)=f + v(2)=0.05d0 + v(3)=0.d0 + v(4)=1.d0 + return + end + + subroutine lowese(iv,liv,lv,wv,m,z,s) + integer liv,lv,m + integer iv(*) + double precision s(m),wv(*),z(m,1) + + external ehg133,ehg182 + + if(.not.(iv(28).ne.172))then + call ehg182(172) + end if + if(.not.(iv(28).eq.173))then + call ehg182(173) + end if + call ehg133(iv(3),iv(2),iv(4),iv(14),iv(5),iv(17),iv(iv(7)),iv(iv( + +8)),iv(iv(9)),iv(iv(10)),wv(iv(11)),wv(iv(13)),wv(iv(12)),m,z,s) + return + end + +c "direct" (non-"interpolate") fit aka predict() : + subroutine lowesf(xx,yy,ww,iv,liv,lv,wv,m,z,l,ihat,s) + integer liv,lv,m,ihat +c m = number of x values at which to evaluate + integer iv(*) + double precision xx(*),yy(*),ww(*),wv(*),z(m,1),l(m,*),s(m) + + logical i1 + + external ehg182,ehg136 + if(171.le.iv(28))then + i1=(iv(28).le.174) + else + i1=.false. + end if + if(.not.i1)then + call ehg182(171) + end if + iv(28)=172 + if(.not.(iv(14).ge.iv(19)))then + call ehg182(186) + end if + +c do the work; in ehg136() give the argument names as they are there: +c ehg136(u,lm,m, n, d, nf, f, x, psi, y ,rw, + call ehg136(z,m,m,iv(3),iv(2),iv(19),wv(1),xx,iv(iv(22)),yy,ww, +c kernel, k, dist, eta, b, od,o,ihat, + + iv(20),iv(29),wv(iv(15)),wv(iv(16)),wv(iv(18)),0,l,ihat, +c w, rcond,sing, dd, tdeg,cdeg, s) + + wv(iv(26)),wv(4),iv(30),iv(33),iv(32),iv(41),s) + return + end + + subroutine lowesl(iv,liv,lv,wv,m,z,l) + integer liv,lv,m + integer iv(*) + double precision l(m,*),wv(*),z(m,1) + + external ehg182,ehg191 + + if(.not.(iv(28).ne.172))then + call ehg182(172) + end if + if(.not.(iv(28).eq.173))then + call ehg182(173) + end if + if(.not.(iv(26).ne.iv(34)))then + call ehg182(175) + end if + call ehg191(m,z,l,iv(2),iv(3),iv(19),iv(6),iv(17),iv(4),iv(iv(7)), + + wv(iv(12)),iv(iv(10)),iv(iv(9)),iv(iv(8)),wv(iv(11)),iv(14), + + wv(iv(24)),wv(iv(34)),iv(iv(25))) + return + end + + subroutine lowesr(yy,iv,liv,lv,wv) + integer liv,lv + integer iv(*) + DOUBLE PRECISION yy(*),wv(*) + + external ehg182,ehg192 + if(.not.(iv(28).ne.172))then + call ehg182(172) + end if + if(.not.(iv(28).eq.173))then + call ehg182(173) + end if + call ehg192(yy,iv(2),iv(3),iv(19),iv(6),iv(14),wv(iv(13)), + + wv(iv(34)),iv(iv(25))) + return + end + + subroutine lowesw(res,n,rw,pi) +c Tranliterated from Devlin's ratfor + +c implicit none +c Args + integer n + double precision res(n),rw(n) + integer pi(n) +c Var + integer identi,i,i1,nh + double precision cmad,rsmall + + integer ifloor + double precision d1mach + + external ehg106 + external ifloor + external d1mach + +c Identity -> identi + +c find median of absolute residuals + do 3 i1=1,n + rw(i1)=dabs(res(i1)) + 3 continue + do 4 identi=1,n + pi(identi)=identi + 4 continue + nh=ifloor(dble(n)/2.d0)+1 +c partial sort to find 6*mad + call ehg106(1,n,nh,1,rw,pi,n) + if((n-nh)+1.lt.nh)then + call ehg106(1,nh-1,nh-1,1,rw,pi,n) + cmad=3*(rw(pi(nh))+rw(pi(nh-1))) + else + cmad=6*rw(pi(nh)) + end if + rsmall=d1mach(1) + if(cmad.lt.rsmall)then + do 5 i1=1,n + rw(i1)=1 + 5 continue + else + do 6 i=1,n + if(cmad*0.999d0.lt.rw(i))then + rw(i)=0 + else + if(cmad*0.001d0.lt.rw(i))then + rw(i)=(1-(rw(i)/cmad)**2)**2 + else + rw(i)=1 + end if + end if + 6 continue + end if + return + end + + subroutine lowesp(n,y,yhat,pwgts,rwgts,pi,ytilde) + integer n + integer pi(n) + double precision y(n),yhat(n),pwgts(n),rwgts(n),ytilde(n) +c Var + double precision c,i1,i4,mad + integer i2,i3,i,m + + external ehg106 + integer ifloor + external ifloor +c median absolute deviation (using partial sort): + do 3 i=1,n + ytilde(i)=dabs(y(i)-yhat(i))*dsqrt(pwgts(i)) + pi(i) = i + 3 continue + m=ifloor(dble(n)/2.d0)+1 + call ehg106(1,n,m,1,ytilde,pi,n) + if((n-m)+1.lt.m)then + call ehg106(1,m-1,m-1,1,ytilde,pi,n) + mad=(ytilde(pi(m-1))+ytilde(pi(m)))/2 + else + mad=ytilde(pi(m)) + end if +c magic constant + c=(6*mad)**2/5 + do 5 i=1,n + ytilde(i)= 1 - ((y(i)-yhat(i))**2 * pwgts(i))/c + 5 continue + do 6 i=1,n + ytilde(i)=ytilde(i)*dsqrt(rwgts(i)) + 6 continue + if(n.le.0)then + i4=0.d0 + else + i3=n + i1=ytilde(i3) + do 7 i2=i3-1,1,-1 + i1=ytilde(i2)+i1 + 7 continue + i4=i1 + end if + c=n/i4 +c pseudovalues + do 8 i=1,n + ytilde(i)=yhat(i) + (c*rwgts(i))*(y(i)-yhat(i)) + 8 continue + return + end + + subroutine ehg124(ll,uu,d,n,nv,nc,ncmax,vc,x,pi,a,xi,lo,hi,c,v, + + vhit,nvmax,fc,fd,dd) + + integer ll,uu,d,n,nv,nc,ncmax,vc,nvmax,fc,dd + integer a(ncmax),c(vc,ncmax),hi(ncmax),lo(ncmax),pi(n),vhit(nvmax) + DOUBLE PRECISION fd, v(nvmax,d),x(n,d),xi(ncmax) + + logical i1,i2,leaf + integer i4,inorm2,k,l,m,p,u, upper, lower, check, offset + DOUBLE PRECISION diam,diag(8),sigma(8) + + external ehg125,ehg106,ehg129 + integer IDAMAX + external IDAMAX + p=1 + l=ll + u=uu + lo(p)=l + hi(p)=u +c top of while loop + 3 if(.not.(p.le.nc))goto 4 + do 5 i4=1,dd + diag(i4)=v(c(vc,p),i4)-v(c(1,p),i4) + 5 continue + diam=0 + do 6 inorm2=1,dd + diam=diam+diag(inorm2)**2 + 6 continue + diam=DSQRT(diam) + if((u-l)+1.le.fc)then + i1=.true. + else + i1=(diam.le.fd) + end if + if(i1)then + leaf=.true. + else + if(ncmax.lt.nc+2)then + i2=.true. + else + i2=(nvmax.lt.nv+DBLE(vc)/2.D0) + end if + leaf=i2 + end if + if(.not.leaf)then + call ehg129(l,u,dd,x,pi,n,sigma) + k=IDAMAX(dd,sigma,1) + m=DBLE(l+u)/2.D0 + call ehg106(l,u,m,1,x(1,k),pi,n) + +c all ties go with hi son +c top of while loop +c bug fix from btyner@gmail.com 2006-07-20 + offset = 0 + 7 if(((m+offset).ge.u).or.((m+offset).lt.l))goto 8 + if(offset .lt. 0)then + lower = l + check = m + offset + upper = check + else + lower = m + offset + 1 + check = lower + upper = u + end if + call ehg106(lower,upper,check,1,x(1,k),pi,n) + if(x(pi(m + offset),k).eq.x(pi(m+offset+1),k))then + offset = -offset + if(offset .ge. 0) then + offset = offset + 1 + end if + goto 7 + else + m = m + offset + goto 8 + end if + +c bottom of while loop + 8 if(v(c(1,p),k).eq.x(pi(m),k))then + leaf=.true. + else + leaf=(v(c(vc,p),k).eq.x(pi(m),k)) + end if + end if + if(leaf)then + a(p)=0 + else + a(p)=k + xi(p)=x(pi(m),k) +c left son + nc=nc+1 + lo(p)=nc + lo(nc)=l + hi(nc)=m +c right son + nc=nc+1 + hi(p)=nc + lo(nc)=m+1 + hi(nc)=u + call ehg125(p,nv,v,vhit,nvmax,d,k,xi(p),2**(k-1),2**(d-k), + + c(1,p),c(1,lo(p)),c(1,hi(p))) + end if + p=p+1 + l=lo(p) + u=hi(p) + goto 3 +c bottom of while loop + 4 return + end + + subroutine ehg129(l,u,d,x,pi,n,sigma) + integer d,execnt,i,k,l,n,u + integer pi(n) + DOUBLE PRECISION machin,alpha,beta,t + DOUBLE PRECISION sigma(d),x(n,d) + DOUBLE PRECISION D1MACH + external D1MACH + save machin,execnt + data execnt /0/ +c MachInf -> machin + execnt=execnt+1 + if(execnt.eq.1)then +c initialize d1mach(2) === DBL_MAX: + machin=D1MACH(2) + end if + do 3 k=1,d + alpha=machin + beta=-machin + do 4 i=l,u + t=x(pi(i),k) + alpha=min(alpha,x(pi(i),k)) + beta=max(beta,t) + 4 continue + sigma(k)=beta-alpha + 3 continue + return + end + +c {called only from ehg127} purpose...?... + subroutine ehg137(z,kappa,leaf,nleaf,d,nv,nvmax,ncmax,a,xi,lo,hi) + integer kappa,d,nv,nvmax,ncmax,nleaf + integer leaf(256),a(ncmax),hi(ncmax),lo(ncmax),pstack(20) + DOUBLE PRECISION z(d),xi(ncmax) + + integer p,stackt + + external ehg182 +c stacktop -> stackt +c find leaf cells affected by $z$ + stackt=0 + p=1 + nleaf=0 +c top of while loop + 3 if(.not.(0.lt.p))goto 4 + if(a(p).eq.0)then +c leaf + nleaf=nleaf+1 + leaf(nleaf)=p +c Pop + if(stackt.ge.1)then + p=pstack(stackt) + else + p=0 + end if + stackt=max(0,stackt-1) + else + if(z(a(p)).eq.xi(p))then +c Push + stackt=stackt+1 + if(.not.(stackt.le.20))then + call ehg182(187) + end if + pstack(stackt)=hi(p) + p=lo(p) + else + if(z(a(p)).le.xi(p))then + p=lo(p) + else + p=hi(p) + end if + end if + end if + goto 3 +c bottom of while loop + 4 if(.not.(nleaf.le.256))then + call ehg182(185) + end if + return + end + +C-- For Error messaging, call the "a" routines at the bottom of ./loessc.c : + subroutine ehg183(s, i, n, inc) + character s*(*) + integer i, n, inc + call ehg183a(s, len(s), i, n, inc) + end + + subroutine ehg184(s, x, n, inc) + character s*(*) + double precision x + integer n, inc + call ehg184a(s, len(s), x, n, inc) + end diff --git a/Algorithms/maxp.cpp b/Algorithms/maxp.cpp index 6078fb7a6..cf238f12f 100644 --- a/Algorithms/maxp.cpp +++ b/Algorithms/maxp.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -33,6 +34,7 @@ #include "../ShapeOperations/GalWeight.h" #include "../logger.h" #include "../GenUtils.h" +#include "../GdaConst.h" #include "maxp.h" using namespace boost; @@ -91,7 +93,7 @@ Maxp::Maxp(const GalElement* _w, const vector >& _z, double _flo best_ss = objective_function(); vector > best_regions; - unordered_map best_area2region; + boost::unordered_map best_area2region; int attemps = 0; @@ -101,10 +103,10 @@ Maxp::Maxp(const GalElement* _w, const vector >& _z, double _flo for (int i=0; i >& current_regions = regions_group[i]; - unordered_map& current_area2region = area2region_group[i]; + boost::unordered_map& current_area2region = area2region_group[i]; //print_regions(current_regions); - LOG_MSG(initial_wss[i]); + //LOG_MSG(initial_wss[i]); if (p_group[i] > 0) { double val = initial_wss[i]; @@ -154,7 +156,8 @@ void Maxp::run(int a, int b) void Maxp::run_threaded() { - int nCPUs = boost::thread::hardware_concurrency();; + int nCPUs = boost::thread::hardware_concurrency(); + if (GdaConst::gda_set_cpu_cores) nCPUs = GdaConst::gda_cpu_cores; int quotient = initial / nCPUs; int remainder = initial % nCPUs; int tot_threads = (quotient > 0) ? nCPUs : remainder; @@ -190,18 +193,18 @@ void Maxp::init_solution(int solution_idx) int attempts = 0; vector > _regions; - unordered_map _area2region; + boost::unordered_map _area2region; while (solving && attempts <= MAX_ATTEMPTS) { vector > regn; list enclaves; list candidates; - unordered_map candidates_dict; - + boost::unordered_map candidates_dict; + if (seeds.empty()) { vector _candidates(num_obs); for (int i=0; i=1; --i) { int k = Gda::ThomasWangHashDouble(seed_local++) * (i+1); @@ -215,8 +218,8 @@ void Maxp::init_solution(int solution_idx) } else { //nonseeds = [i for i in self.w.id_order if i not in seeds] // candidates.extend(nonseeds) - unordered_map cand_dict; - unordered_map::iterator it; + boost::unordered_map cand_dict; + boost::unordered_map::iterator it; for (int i=0; i::iterator iter; vector::iterator vector_iter; - + while (!candidates.empty()) { int seed = candidates.front(); candidates.pop_front(); - + // try to grow it till threshold constraint is satisfied vector region; region.push_back(seed); - unordered_map region_dict; + boost::unordered_map region_dict; region_dict[seed] = true; candidates_dict[seed] = false; @@ -265,7 +268,7 @@ void Maxp::init_solution(int solution_idx) } } if (is_floor) { - unordered_map::iterator rit; + boost::unordered_map::iterator rit; vector _region; for (rit=region_dict.begin(); rit!=region_dict.end();rit++) { if (rit->second) @@ -283,7 +286,7 @@ void Maxp::init_solution(int solution_idx) break; } // self.enclaves = enclaves[:] - unordered_map a2r; + boost::unordered_map a2r; for (int i=0; i=0) { if (_regions.empty()) { p_group[solution_idx] = 0; @@ -404,10 +407,10 @@ void Maxp::shuffle(vector& arry, uint64_t& seed) } -void Maxp::simulated_annealing(vector >& init_regions, unordered_map& init_area2region, double alpha, double temperature, uint64_t seed_local) +void Maxp::simulated_annealing(vector >& init_regions, boost::unordered_map& init_area2region, double alpha, double temperature, uint64_t seed_local) { vector > local_best_solution; - unordered_map local_best_area2region; + boost::unordered_map local_best_area2region; double local_best_ssd = 1; int nr = init_regions.size(); @@ -439,8 +442,8 @@ void Maxp::simulated_annealing(vector >& init_regions, unordered_map for (int r=0; r::iterator m_it, n_it; - unordered_map member_dict, neighbors_dict; + boost::unordered_map::iterator m_it, n_it; + boost::unordered_map member_dict, neighbors_dict; for (int j=0; j >& init_regions, unordered_map } } -void Maxp::tabu_search(vector >& init_regions, unordered_map& init_area2region, int tabuLength, uint64_t seed_local) +void Maxp::tabu_search(vector >& init_regions, boost::unordered_map& init_area2region, int tabuLength, uint64_t seed_local) { vector > local_best_solution; - unordered_map local_best_area2region; - double local_best_ssd; + boost::unordered_map local_best_area2region; + double local_best_ssd = 0; int nr = init_regions.size(); @@ -620,8 +623,8 @@ void Maxp::tabu_search(vector >& init_regions, unordered_map::iterator m_it, n_it; - unordered_map member_dict, neighbors_dict; + boost::unordered_map::iterator m_it, n_it; + boost::unordered_map member_dict, neighbors_dict; for (int j=0; j >& init_regions, unordered_map >& _regions, unordered_map& _area2region) +void Maxp::move(int area, int from_region, int to_region, vector >& _regions, boost::unordered_map& _area2region) { vector& rgn = _regions[from_region]; rgn.erase(remove(rgn.begin(),rgn.end(), area), rgn.end()); @@ -757,7 +760,7 @@ void Maxp::move(int area, int from_region, int to_region, vector >& _regions[to_region].push_back(area); } -void Maxp::move(int area, int from_region, int to_region, vector >& _regions, unordered_map& _area2region, vector& tabu_list, int max_labu_length) +void Maxp::move(int area, int from_region, int to_region, vector >& _regions, boost::unordered_map& _area2region, vector& tabu_list, int max_labu_length) { vector& rgn = _regions[from_region]; rgn.erase(remove(rgn.begin(),rgn.end(), area), rgn.end()); @@ -775,7 +778,7 @@ void Maxp::move(int area, int from_region, int to_region, vector >& } } -void Maxp::swap(vector >& init_regions, unordered_map& init_area2region, uint64_t seed_local) +void Maxp::swap(vector >& init_regions, boost::unordered_map& init_area2region, uint64_t seed_local) { // local search AZP @@ -788,6 +791,7 @@ void Maxp::swap(vector >& init_regions, unordered_map& ini vector changed_regions(nr, 1); // nr = range(k) + //while (swapping ) { while (swapping && total_move<10000) { int moves_made = 0; @@ -814,8 +818,8 @@ void Maxp::swap(vector >& init_regions, unordered_map& ini int seed = regionIds[i]; // get neighbors - unordered_map::iterator m_it, n_it; - unordered_map member_dict, neighbors_dict; + boost::unordered_map::iterator m_it, n_it; + boost::unordered_map member_dict, neighbors_dict; for (int j=0; j >& init_regions, unordered_map& ini vector& current_outter = init_regions[init_area2region[area]]; double change = objective_function_change(area, current_internal, current_outter); if (change <= cv) { - best = area; - cv = change; - best_found = true; + //if (check_contiguity(w, current_internal, area)) { + best = area; + cv = change; + best_found = true; + //} } } candidates.clear(); @@ -1046,51 +1052,13 @@ double Maxp::objective_function_change(int area, vector& current_internal, return change; } -bool Maxp::is_component(const GalElement *w, const vector &ids) -{ - //Check if the set of ids form a single connected component - int components = 0; - unordered_map marks; - for (int i=0; i q; - list::iterator iter; - for (int i=0; i 1) - return false; - } - while (!q.empty()) { - node = q.back(); - q.pop_back(); - marks[node] = components; - for (int n=0; n& ids, int leaver) { //vector ids = neighbors; //ids.erase(remove(ids.begin(),ids.end(), leaver), ids.end()); //return is_component(w, ids); list q; - unordered_map marks; + boost::unordered_map marks; for (int i=0; i& ids, int leaver) } } } - unordered_map::iterator it; + boost::unordered_map::iterator it; for (it=marks.begin(); it!=marks.end(); it++) { if (it->second == false) return false; diff --git a/Algorithms/maxp.h b/Algorithms/maxp.h index c8e616f0b..87890f862 100644 --- a/Algorithms/maxp.h +++ b/Algorithms/maxp.h @@ -43,9 +43,9 @@ class qvector protected: vector vdata; - unordered_map mdict; - vector::iterator v_iter; - unordered_map::iterator m_iter; + boost::unordered_map mdict; + std::vector::iterator v_iter; + boost::unordered_map::iterator m_iter; }; struct TabuMove @@ -150,11 +150,11 @@ class Maxp /*! Details. key is area id, value is region id. */ - unordered_map area2region; + boost::unordered_map area2region; - vector > area2region_group; + std::vector > area2region_group; - unordered_map, double> objval_dict; + boost::unordered_map, double> objval_dict; //! A vector of vector list of lists of regions. /*! @@ -230,7 +230,7 @@ class Maxp /*! Details. */ - void swap(vector >& init_regions, unordered_map& area2region, uint64_t seed_local); + void swap(vector >& init_regions, boost::unordered_map& area2region, uint64_t seed_local); //! xxx /* ! @@ -238,7 +238,7 @@ class Maxp \param neighbor \return boolean */ - void tabu_search(vector >& init_regions, unordered_map& init_area2region, int tabuLength, uint64_t seed_local); + void tabu_search(vector >& init_regions, boost::unordered_map& init_area2region, int tabuLength, uint64_t seed_local); //! xxx /* ! @@ -246,7 +246,7 @@ class Maxp \param neighbor \return boolean */ - void simulated_annealing(vector >& init_regions, unordered_map& init_area2region, double alpha, double temperature, uint64_t seed_local); + void simulated_annealing(vector >& init_regions, boost::unordered_map& init_area2region, double alpha, double temperature, uint64_t seed_local); //! xxx /* ! @@ -254,9 +254,9 @@ class Maxp \param neighbor \return boolean */ - void move(int area, int from_region, int to_region, vector >& regions, unordered_map& area2region); + void move(int area, int from_region, int to_region, vector >& regions, boost::unordered_map& area2region); - void move(int area, int from_region, int to_region, vector >& regions, unordered_map& area2region, vector& tabu_list, int max_tabu_length); + void move(int area, int from_region, int to_region, vector >& regions, boost::unordered_map& area2region, vector& tabu_list, int max_tabu_length); //! A protected member function: init_solution(void). return /*! @@ -287,9 +287,7 @@ class Maxp \return boolean */ bool check_contiguity(const GalElement* w, vector& block, int neighbor); - - bool is_component(const GalElement* w, const vector& ids); - + void shuffle(vector& arry, uint64_t& seed); bool test; diff --git a/Algorithms/misc.c b/Algorithms/misc.c new file mode 100755 index 000000000..71b038f72 --- /dev/null +++ b/Algorithms/misc.c @@ -0,0 +1,322 @@ +#include "S.h" +#include "loess.h" +#include +#include +#include +#include + + +void *safe_malloc(size_t n, unsigned long line) +{ + void *p = malloc(n); + + if (!p) { + fprintf(stderr, "[%s:%lu] Out of memory (%lu bytes)\n", + __FILE__, line, (unsigned long)n); + exit(EXIT_FAILURE); + } + + return p; +} + + +/* static functions */ +static double _fmin(double a, double b) +{ + return(a < b ? a : b); +} + +static double _fmax(double a, double b) +{ + return(a > b ? a : b); +} + +/* + * Rational approximation to inverse Gaussian distribution. + * Absolute error is bounded by 4.5e-4. + * Reference: Abramowitz and Stegun, page 933. + * Assumption: 0 < p < 1. + */ +static double num[] = { + 2.515517, + 0.802853, + 0.010328 +}; + +static double den[] = { + 1.000000, + 1.432788, + 0.189269, + 0.001308 +}; + +double invigauss_quick(double p) +{ + int lower; + double t, n, d, q; + + if(p == 0.5) + return(0); + lower = p < 0.5; + p = lower ? p : 1 - p; + t = sqrt(-2 * log(p)); + n = (num[2]*t + num[1])*t + num[0]; + d = ((den[3]*t + den[2])*t + den[1])*t + den[0]; + q = lower ? n/d - t : t - n/d; + return(q); +} + +/* + * Quick approximation to inverse incomplete beta function, + * by matching first two moments with the Gaussian distribution. + * Assumption: 0 < p < 1, a,b > 0. + */ + +static double invibeta_quick(double p, double a, double b) +{ + double x, m, s; + + x = a + b; + m = a / x; + s = sqrt((a*b) / (x*x*(x+1))); + return(_fmax(0.0, _fmin(1.0, invigauss_quick(p)*s + m))); +} + + +/* + * Inverse incomplete beta function. + * Assumption: 0 <= p <= 1, a,b > 0. + */ +static double invibeta(double p, double a, double b) +{ + int i; + double ql, qr, qm, qdiff; + double pl, pr, pm, pdiff; + +/* MEANINGFUL(qm);*/ + qm = 0; + if(p == 0 || p == 1) + return(p); + + /* initialize [ql,qr] containing the root */ + ql = qr = invibeta_quick(p, a, b); + pl = pr = ibeta(ql, a, b); + if(pl == p) + return(ql); + if(pl < p) + while(1) { + qr += 0.05; + if(qr >= 1) { + pr = qr = 1; + break; + } + pr = ibeta(qr, a, b); + if(pr == p) + return(pr); + if(pr > p) + break; + } + else + while(1) { + ql -= 0.05; + if(ql <= 0) { + pl = ql = 0; + break; + } + pl = ibeta(ql, a, b); + if(pl == p) + return(pl); + if(pl < p) + break; + } + + /* a few steps of bisection */ + for(i = 0; i < 5; i++) { + qm = (ql + qr) / 2; + pm = ibeta(qm, a, b); + qdiff = qr - ql; + pdiff = pm - p; + if(fabs(qdiff) < DBL_EPSILON*qm || fabs(pdiff) < DBL_EPSILON) + return(qm); + if(pdiff < 0) { + ql = qm; + pl = pm; + } else { + qr = qm; + pr = pm; + } + } + + /* a few steps of secant */ + for(i = 0; i < 40; i++) { + qm = ql + (p-pl)*(qr-ql)/(pr-pl); + pm = ibeta(qm, a, b); + qdiff = qr - ql; + pdiff = pm - p; + if(fabs(qdiff) < 2*DBL_EPSILON*qm || fabs(pdiff) < 2*DBL_EPSILON) + return(qm); + if(pdiff < 0) { + ql = qm; + pl = pm; + } else { + qr = qm; + pr = pm; + } + } + + /* no convergence */ + return(qm); +} + + +static double qt(double p, double df) +{ + double t; + t = invibeta(fabs(2*p-1), 0.5, df/2); + return((p>0.5?1:-1) * sqrt(t*df/(1-t))); +} + + +double pf(double q, double df1, double df2) +{ + return(ibeta(q*df1/(df2+q*df1), df1/2, df2/2)); +} + +/**********************************************************************/ + /* + * Incomplete beta function. + * Reference: Abramowitz and Stegun, 26.5.8. + * Assumptions: 0 <= x <= 1; a,b > 0. + */ + +double ibeta(double x, double a, double b) +{ + int flipped = 0, i, k, count; + double I, temp, pn[6], ak, bk, next, prev, factor, val; + + if (x <= 0) + return(0); + if (x >= 1) + return(1); + + /* use ibeta(x,a,b) = 1-ibeta(1-x,b,a) */ + if ((a+b+1)*x > (a+1)) { + flipped = 1; + temp = a; + a = b; + b = temp; + x = 1 - x; + } + + pn[0] = 0.0; + pn[2] = pn[3] = pn[1] = 1.0; + count = 1; + val = x/(1.0-x); + bk = 1.0; + next = 1.0; + do { + count++; + k = count/2; + prev = next; + if (count%2 == 0) + ak = -((a+k-1.0)*(b-k)*val)/((a+2.0*k-2.0)*(a+2.0*k-1.0)); + else + ak = ((a+b+k-1.0)*k*val)/((a+2.0*k)*(a+2.0*k-1.0)); + pn[4] = bk*pn[2] + ak*pn[0]; + pn[5] = bk*pn[3] + ak*pn[1]; + next = pn[4] / pn[5]; + for (i=0; i<=3; i++) + pn[i] = pn[i+2]; + if (fabs(pn[4]) >= DBL_MAX) + for (i=0; i<=3; i++) + pn[i] /= DBL_MAX; + if (fabs(pn[4]) <= DBL_MIN) + for (i=0; i<=3; i++) + pn[i] /= DBL_MIN; + } while (fabs(next-prev) > DBL_EPSILON*prev); + factor = a*log(x) + (b-1)*log(1-x); + //factor -= lgamma(a+1) + lgamma(b) - lgamma(a+b); + I = exp(factor) * next; + return(flipped ? 1-I : I); +} + + +void anova(loess *one, loess *two, anova_struct *out) +{ + double one_d1, one_d2, one_s, two_d1, two_d2, two_s, + rssdiff, d1diff, tmp; + int max_enp; + + one_d1 = one->outputs->one_delta; + one_d2 = one->outputs->two_delta; + one_s = one->outputs->residual_scale; + two_d1 = two->outputs->one_delta; + two_d2 = two->outputs->two_delta; + two_s = two->outputs->residual_scale; + + rssdiff = fabs(one_s * one_s * one_d1 - two_s * two_s * two_d1); + d1diff = fabs(one_d1 - two_d1); + out->dfn = d1diff * d1diff / fabs(one_d2 - two_d2); + max_enp = (one->outputs->enp > two->outputs->enp); + tmp = max_enp ? one_d1 : two_d1; + out->dfd = tmp * tmp / (max_enp ? one_d2 : two_d2); + tmp = max_enp ? one_s : two_s; + out->F_value = (rssdiff / d1diff) / (tmp * tmp); + out->Pr_F = 1 - pf(out->F_value, out->dfn, out->dfd); +} + + +void pointwise(prediction *pre, double coverage, + confidence_intervals *ci) +{ + double t_dist, limit, fit; + int i; + + ci->fit = MALLOC(pre->m * sizeof(double)); + ci->upper = MALLOC(pre->m * sizeof(double)); + ci->lower = MALLOC(pre->m * sizeof(double)); + + t_dist = qt(1 - (1 - coverage)/2, pre->df); + for(i = 0; i < pre->m; i++) { + limit = pre->se_fit[i] * t_dist; + ci->fit[i] = fit = pre->fit[i]; + ci->upper[i] = fit + limit; + ci->lower[i] = fit - limit; + } +} + + +void pw_free_mem(confidence_intervals *ci) +{ + free(ci->fit); + free(ci->upper); + free(ci->lower); +} + + + +typedef double doublereal; +typedef int integer; + +void Recover(char *a, int *b) +{ + printf("%s", a); + exit(1); +} + +/* d1mach may be replaced by Fortran code: + mail netlib@netlib.bell-labs.com + send d1mach from core. +*/ + +doublereal d1mach_ (integer *i) +{ +switch(*i){ + case 1: return DBL_MIN; + case 2: return DBL_MAX; + case 3: return DBL_EPSILON/FLT_RADIX; + case 4: return DBL_EPSILON; + case 5: return log10(FLT_RADIX); + default: Recover("Invalid argument to d1mach()", 0L); + } +} diff --git a/Algorithms/pam.cpp b/Algorithms/pam.cpp new file mode 100644 index 000000000..5bac28346 --- /dev/null +++ b/Algorithms/pam.cpp @@ -0,0 +1,1347 @@ +// Author: Xun Li +// May 27, 2020 +// +// Code ported from elki project: http://elki-project.github.io/ +// Copyright follows elki project: http://elki-project.github.io/ +// AGPLv3: https://github.com/elki-project/elki/blob/master/LICENSE.md +// +// 5-27-2020 +// Xoroshiro128Random random number generator +// PAM, CLARA, CLARANS +// Initializer: BUILD and LAB +// FastPAM, FastCLARA, FastCLARANS + +#include +#include +#include +#include +#include +#include // std::max + +#include "pam.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +std::vector BUILD::run(const std::vector& ids, int k) +{ + int nn = (int) ids.size(); + std::vector medids; + std::set medids_set; + + // O(sqrt(n)) sample if k^2 < n. + int ssize = 10 + (int)ceil(std::sqrt((double)nn)); + if (ssize < nn) ssize = nn; + + // We need three temporary storage arrays: + std::vector mindist(nn), bestd(nn), tempd(nn), temp; + + int bestid; + // First mean is chosen by having the smallest distance sum to all others. + { + double best = DBL_MAX; + for (int i=0; i< nn; ++i) { + double sum = 0, d; + for (int j=0; jgetDistance(ids[i], ids[j]); + sum += d; + tempd[ ids[j] ] = d; + } + if(sum < best) { + best = sum; + bestid = ids[i]; + // Swap mindist and newd: + temp = mindist; + mindist = tempd; + tempd = temp; + } + } + medids.push_back(bestid); + medids_set.insert(bestid); + } + + // Subsequent means optimize the full criterion. + for(int i = 1; i < k; i++) { + double best = DBL_MAX; + bestid = -1; // bestid.unset(); + for (int j=0; jgetDistance(ids[j], ids[k]), mindist[ids[k]]); + sum += v; + tempd[ ids[k] ] = v; + } + if(sum < best) { + best = sum; + bestid = ids[j]; + // Swap bestd and newd: + temp = bestd; + bestd = tempd; + tempd = temp; + } + } + if(bestid == -1) { + //throw new AbortException("No medoid found that improves the criterion function?!? Too many infinite distances."); + return std::vector(); + } + medids.push_back(bestid); + medids_set.insert(bestid); + // Swap bestd and mindist: + temp = bestd; + bestd = mindist; + mindist = temp; + } + mindist.clear(); + bestd.clear(); + tempd.clear(); + return medids; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Partial Fisher-Yates shuffle. +void LAB::shuffle(std::vector &samples, int ssize, int end) { + ssize = ssize < end ? ssize : end; // Guard for choosing from tiny sets + + for(int i = 1; i < ssize; i++) { + int a = i-1, b = i+random.nextInt(end - i); + int tmp = samples[b]; + samples[b] = samples[a]; + samples[a] = tmp; + } +} + +//Get the minimum distance to previous medoids. +double LAB::getMinDist(int j, std::vector& medids, std::vector& mindist) +{ + double prev = mindist[j]; + if (prev == DBL_MIN) { + prev = DBL_MAX; + for (int i=0; igetDistance(j, medids[i]); + prev = d < prev ? d : prev; + } + mindist[j] = prev; + } + return prev; +} + +std::vector LAB::run(const std::vector& ids, int k) +{ + int nn = (int) ids.size(); + std::vector medids; + std::set medids_set; + + // O(sqrt(n)) sample if k^2 < n. + int ssize = 10 + (int)ceil(std::sqrt((double)nn)); + if (ssize > nn) ssize = nn; + + // We need three temporary storage arrays: + std::vector mindist(nn, DBL_MIN), bestd(nn), tempd(nn, DBL_MIN), tmp; + std::vector sample(nn); + for (int i=0; igetDistance(sample[i], sample[j]); + sum += d; + tempd[sample[j]] = d; + } + if(sum < best) { + best = sum; + bestoff = i; + // Swap mindist and newd: + tmp = mindist; + mindist = tempd; + tempd = tmp; + } + } + medids.push_back(sample[bestoff]); + medids_set.insert(sample[bestoff]); + //sample.swap(bestoff, --range); + int tmp = sample[--range]; + sample[range] = sample[bestoff]; + sample[bestoff] = tmp; + } + // First one was just chosen. + // Subsequent means optimize the full criterion. + // Choosing initial medoids", k, + while(medids.size() < k) { + // New sample + ssize = range < ssize ? range : ssize; + shuffle(sample, ssize, range); + double best = DBL_MAX; + int bestoff = -1; + for (int i=0; igetDistance(sample[i], sample[j]), prev); + sum += v; + tempd[sample[j]] = v; + } + if(sum < best) { + best = sum; + bestoff = i; + // Swap bestd and newd: + tmp = bestd; + bestd = tempd; + tempd = tmp; + } + } + if(bestoff < 0) { + //"No medoid found that improves the criterion function?!? Too many infinite distances." + return medids; + } + medids.push_back(sample[bestoff]); + medids_set.insert(sample[bestoff]); + // sample.swap(bestoff, --range); + int tmp_val = sample[--range]; + sample[range] = sample[bestoff]; + sample[bestoff] = tmp_val; + // Swap bestd and mindist: + tmp = bestd; + bestd = mindist; + mindist = tmp; + } + + mindist.clear(); + bestd.clear(); + tempd.clear(); + return medids; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +PAM::PAM(int num_obs, DistMatrix* dist_matrix, PAMInitializer* init, int k, int maxiter, const std::vector& _ids) +: num_obs(num_obs), dist_matrix(dist_matrix), initializer(init), +k(k), maxiter(maxiter), ids(_ids) +{ + if (initializer == NULL) { + // set default to PAM classic initializer + initializer = new BUILD(dist_matrix); + } + + if (ids.empty()) { + // using sequential enumeric numbers as ids + ids.resize(num_obs); + for (int i=0; i seq_ids(num_obs); + for (int i=0; irun(seq_ids, k); + + // Setup cluster assignment store + assignment.resize(num_obs, -1); + nearest.resize(num_obs, -1); + second.resize(num_obs, -1); + + // Run partition + double cost = run(medoids, maxiter); + + return cost; +} + +std::vector PAM::getMedoids() +{ + return medoids; +} + +std::vector PAM::getResults() +{ + // Get results, using ids instead of seq_ids + // cluster starts counting from 1 instead of 0 + std::vector cluster_result(num_obs, 0); + for (int i=0; i &medoids, int maxiter) { + int k = (int)medoids.size(); + // Initial assignment to nearest medoids + // TODO: reuse distance information, from the build phase, when possible? + double tc = assignToNearestCluster(medoids); + // Swap phase + int bestid; + int iteration = 0; + while(iteration < maxiter || maxiter <= 0) { + ++iteration; + // Try to swap a non-medoid with a medoid member: + double best = DBL_MAX; + int bestcluster = -1; + // Iterate over all non-medoids: + for (int h=0; h tc) { + if(nc - tc < 1e-7 * tc) { + //LOG.warning("PAM failed to converge (numerical instability?)"); + break; + } + //LOG.warning("PAM failed to converge: costs increased by: " + (nc - tc) + " exepected a decrease by " + best); + break; + } + tc = nc; + } + //".iterations", iteration + // ".final-cost", tc + return tc; +} + + +double PAM::getDistance(int i, int j) { + return dist_matrix->getDistance(i, j); +} + +// Assign each object to the nearest cluster, return the cost. +double PAM::assignToNearestCluster(std::vector &means) { + double cost = 0.; + for (int i=0; i& _ids) +: PAM(num_obs, dist_matrix, init, k, maxiter, _ids), fasttol(fasttol) +{ + fastswap = 1 - fasttol; +} + +FastPAM::~FastPAM() { + +} + +// Run k-medoids +double FastPAM::run(std::vector& medoids, int maxiter) { + // return final cost + int k = (int)medoids.size(); + // Initial assignment to nearest medoids + // TODO: reuse distance information, from the build phase, when possible? + double tc = assignToNearestCluster(medoids); + // iteration 0 cost = tc + // start PAM iteration + int fastswaps = 0; // For statistics + // Swap phase + std::vector bestids(k); + int bestid; + + std::vector best(k), cost(k); + + int iteration = 0; + while(iteration < maxiter || maxiter <= 0) { + ++iteration; + findBestSwaps(medoids, bestids, best, cost); + // Convergence check + int min = argmin(best); + if (!(best[min] < -1e-12 * tc)) { + break; // Converged + } + // Update values for new medoid. + while(min >= 0 && best[min] < -1e-12 * tc) { + //updateAssignment(medoids, bestids.assignVar(min, bestid), min); + bestid = bestids[min]; + updateAssignment(medoids, bestid, min); + + tc += best[min]; + best[min] = DBL_MAX; // Deactivate + + // Find next candidate: + while((min = argmin(best)) >= 0 && best[min] < -1e-12 * tc) { + bestid = bestids[min]; + // Compare object to its own medoid. + if (medoids[assignment[bestid] & 0x7FFF] == bestid) { + best[min] = DBL_MAX; // Deactivate + continue; // This is a medoid. + } + double hdist = nearest[bestid]; // Current cost + // hdist is the cost we get back by making the non-medoid h medoid. + double c = computeReassignmentCost(bestid, min) - hdist; + if(c <= best[min] * fastswap) { + best[min] = c; + ++fastswaps; + break; + } + best[min] = DBL_MAX; // Deactivate + } + } + // ".iteration-" + iteration + ".cost", tc + } + // // TODO: we may have accumulated some error on tc. + // ".iterations", iteration + // ".fast-swaps", fastswaps + // ".final-cost", tc + + // Cleanup + for(int i=0; i &medoids, std::vector &bestids, std::vector &best, std::vector &cost) +{ + size_t n_medoids = medoids.size(); + + best.resize(n_medoids, DBL_MAX); + cost.resize(n_medoids, 0); + + // Iterate over all non-medoids: + for (int h=0; h &cost) { + // h: Current object to swap with any medoid. + // cost: Cost aggregation array, must have size k + + // Compute costs of reassigning other objects j: + for (int j=0; j &means) { + // means Object centroids + // return Assignment cost + double cost = 0.; + for (int j=0; j &best) { + double min = DBL_MAX; + int ret = -1; + for(int i = 0; i < best.size(); i++) { + double v = best[i]; + if (v < min) { + min = v; + ret = i; + } + } + return ret; +} + +void FastPAM::updateAssignment(std::vector& medoids, int h, int m) { + // Medoids set; + // miter Medoid iterator + // h New medoid + // m Position of replaced medoid + + // The new medoid itself. + medoids[m] = h; + + double hdist = nearest[h]; + nearest[h] = 0; + + int olda = assignment[h]; + + // In the high short, we store the second nearest center! + if((olda & 0x7FFF) != m) { + assignment[h] = m | ((olda & 0x7FFF) << 16); + second[h] = hdist; + } else { + assignment[h] = m | (olda & 0x7FFF0000); + } + // assert (DBIDUtil.equal(h, miter.seek(m))); + // Compute costs of reassigning other objects j: + for (int i=0; i> 16; + pj &= 0x7FFF; // Low byte is the old nearest cluster. + if(pj == m) { // Nearest medoid is gone. + if(dist_h < distsec) { // Replace nearest. + nearest[j] = dist_h; + assignment[j] = m | (po << 16); + } else {// Second is new nearest. + nearest[j] = distsec; + // Find new second nearest. + assignment[j] = po | (updateSecondNearest(j, medoids, m, dist_h, po) << 16); + } + } + else { // Nearest medoid not replaced + if(dist_h < distcur) { + nearest[j] = dist_h; + second[j] = distcur; + assignment[j] = m | (pj << 16); + } else if(po == m) { // Second was replaced. + assignment[j] = pj | (updateSecondNearest(j, medoids, m, dist_h, pj) << 16); + } else if(dist_h < distsec) { + second[j] = dist_h; + assignment[j] = pj | (m << 16); + } + } + } +} + +int FastPAM::updateSecondNearest(int j, std::vector &medoids, int h, double dist_h, int n) +{ + double sdist = dist_h; + int sbest = h; + for (int i=0; i PAMUtils::randomSample(Xoroshiro128Random& rand, + int samplesize, int n, + const std::vector& previous) +{ + if (previous.empty()) { + return rand.randomSample(samplesize, n); + } + int cnt = 0; + std::vector sample(samplesize); + unordered_map sample_dict; + unordered_map::iterator it; + for (int i=0; i rest_rnds = rand.randomSample(samplesize - (int)previous.size(), n); + for (int i=0; i rnd_picks = rand.randomSample(samplesize, n); + for (int i=0; i num_obs ) samplesize = num_obs; + + if(samplesize < 3 * k) { + //"The sampling size is set to a very small value, + //it should be much larger than k."); + } + + double best = DBL_MAX; + + for(int j = 0; j < numsamples; j++) { + std::vector rids; + + if (keepmed) + rids = PAMUtils::randomSample(random, samplesize, num_obs, bestmedoids); + else + rids = PAMUtils::randomSample(random, samplesize, num_obs); + + // run PAM using rids + //PAM pam(samplesize, dist_matrix, + dist_matrix->setIds(rids); + PAM pam(samplesize, dist_matrix, initializer, k, maxiter); + double score = pam.run(); + + // allow to work on full dist matrix + dist_matrix->setIds(std::vector()); + + std::vector assignment; + std::vector medoids = pam.getMedoids(); + std::vector r_assignment = pam.getAssignement(); + score += assignRemainingToNearestCluster(medoids, rids, r_assignment, assignment); + + if(score < best) { + best = score; + bestclusters = assignment; + bestmedoids = medoids; + for (int k=0; k CLARA::getResults() +{ + // Get results + std::vector cluster_result(num_obs, 0); + for (int i=0; i& means, std::vector& rids, std::vector& r_assignment, std::vector& assignment) +{ + unordered_map rid_dict; + assignment.resize(num_obs); + for (int j=0; jgetDistance(rids[means[i]], j); + if (dist < mindist) { + minIndex = i; + mindist = dist; + } + } + distsum += mindist; + assignment[j] = minIndex; + } + return distsum; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +FastCLARA::FastCLARA(int num_obs, DistMatrix *dist_matrix, PAMInitializer* init, int k, int maxiter, double fasttol, int numsamples, double sampling, bool independent, int seed) +: CLARA(num_obs, dist_matrix, init, k, maxiter, numsamples, sampling, independent, seed), +fasttol(fasttol) +{} + +// Using LAB + PAM on random samples +double FastCLARA::run() +{ + int samplesize = sampling <= 1 ? sampling * num_obs : sampling; + if (samplesize > num_obs ) samplesize = num_obs; + + if(samplesize < 3 * k) { + //"The sampling size is set to a very small value, + //it should be much larger than k."); + } + + double best = DBL_MAX; + + for(int j = 0; j < numsamples; j++) { + std::vector rids; + + if (keepmed) + rids = PAMUtils::randomSample(random, samplesize, num_obs, bestmedoids); + else + rids = PAMUtils::randomSample(random, samplesize, num_obs); + + // run PAM using rids + //PAM pam(samplesize, dist_matrix, + dist_matrix->setIds(rids); + FastPAM pam(samplesize, dist_matrix, initializer, k, maxiter, fasttol); + double score = pam.run(); + + // allow to work on full dist matrix + dist_matrix->setIds(std::vector()); + + std::vector assignment; + std::vector medoids = pam.getMedoids(); + std::vector r_assignment = pam.getAssignement(); + score += assignRemainingToNearestCluster(medoids, rids, r_assignment, assignment); + + if(score < best) { + best = score; + bestclusters = assignment; + bestmedoids = medoids; + for (int k=0; k= num_obs / 2) { + // "A very large k was chosen. This implementation is not optimized for this case." + } + // Number of retries, relative rate, or absolute count: + int retries = (int)ceil(maxneighbor < 1 ? maxneighbor * k * (num_obs - k) : maxneighbor); + + int cand = 0; + + // Setup cluster assignment store + Assignment best(k, num_obs, dist_matrix), curr(k, num_obs, dist_matrix), + scratch(k, num_obs, dist_matrix), tmp; + + // 1. initialize + double bestscore = DBL_MAX; + for(int i = 0; i < numlocal; i++) { + // 2. choose random initial medoids + curr.medoids = PAMUtils::randomSample(random, k, num_obs); + + //curr.medoids[0]=431;curr.medoids[1] = 211;curr.medoids[2]=293;curr.medoids[3]=10; + + // Cost of initial solution + double total = curr.assignToNearestCluster(); + + // 3. Set j to 1 + int j = 1; + step: while (j < retries) { + // 4 part a. choose a random non-medoid (~ neighbor in G): + for (int r = 0;; r++) { + // // Random point + cand = random.nextInt(num_obs); + if (curr.nearest[cand] > 0) { + break; // Good: not a medoid. + } + // We may have many duplicate points + if (curr.second[cand] == 0) { + ++j; // Cannot yield an improvement if we are metric. + goto step; // NOTE: this should go back to top while() + } else if (!curr.hasMedoid(cand)) { + // Probably not a good candidate, but try nevertheless + break; + } + if (r >= 1000) { + // "Failed to choose a non-medoid in 1000 attempts. Choose k << N." + return 0; + } + // else: this must be the medoid. + } + // 4 part b. choose a random medoid to replace: + int otherm = random.nextInt(k); + // 5. check lower cost + double cost = curr.computeCostDifferential(cand, otherm, scratch); + if(!(cost < -1e-12 * total)) { + ++j; // 6. try again + continue; + } + total += cost; // cost is negative! + // Swap: + tmp = curr; + curr = scratch; + scratch = tmp; + j = 1; + } + // New best: + if(total < bestscore) { + // Swap: + Assignment tmp = curr; + curr = best; + best = tmp; + bestscore = total; + } + } + + bestmedoids = best.medoids; + bestclusters = best.assignment; + return bestscore; +} + +std::vector CLARANS::getResults() { + // Get results + std::vector cluster_result(num_obs, 0); + for (int i=0; igetDistance(h, j); + // current assignment of j + int jcur = assignment[j]; + // Check if current medoid of j is removed: + if(jcur == mnum) { + // distance(j, o) to second nearest / possible reassignment + double distsec = second[j]; + // Case 1b: j switches to new medoid, or to the second nearest: + if (dist_h < distsec) { + cost += dist_h - distcur; + scratch.assignment[j] = mnum; + scratch.nearest[j] = dist_h; + scratch.second[j] = distsec; + scratch.secondid[j] = jcur; + } else { + // Second nearest is the new assignment. + cost += distsec - distcur; + // We have to recompute, because we do not know the true new second + // nearest. + scratch.recompute(j, mnum, dist_h, jcur, distsec); + } + } + else if(dist_h < distcur) { + // Case 1c: j is closer to h than its current medoid + // and the current medoid is not removed (jcur != mnum). + cost += dist_h - distcur; + // Second nearest is the previous assignment + scratch.assignment[j] = mnum; + scratch.nearest[j] = dist_h; + scratch.second[j] = distcur; + scratch.secondid[j] = jcur; + } + else { // else Case 1a): j is closer to i than h and m, so no change. + int jsec = secondid[j]; + double distsec = second[j]; + // Second nearest is still valid. + if(jsec != mnum && distsec <= dist_h) { + scratch.assignment[j] = jcur; + scratch.nearest[j] = distcur; + scratch.secondid[j] = jsec; + scratch.second[j] = distsec; + } else { + scratch.recompute(j, jcur, distcur, mnum, dist_h); + } + } + } + return cost; +} + +//Recompute the assignment of one point. +// id Point id +// mnum Medoid number for known distance +// known Known distance +// return cost +double Assignment::recompute(int id, int mnum, double known, int snum, double sknown) { + double mindist = mnum >= 0 ? known : DBL_MAX, mindist2 = DBL_MAX; + int minIndex = mnum, minIndex2 = -1; + for(int i = 0; i < medoids.size(); i++) { + if(i == mnum) { + continue; + } + double dist = i == snum ? sknown : dist_matrix->getDistance(id, medoids[i]); + if (id == medoids[i] || dist < mindist) { + minIndex2 = minIndex; + mindist2 = mindist; + minIndex = i; + mindist = dist; + } else if(dist < mindist2) { + minIndex2 = i; + mindist2 = dist; + } + } + if(minIndex < 0) { + // "Too many infinite distances. Cannot assign objects."); + return 0; + } + assignment[id] = minIndex; + nearest[id] = mindist; + secondid[id] = minIndex2; + second[id] = mindist2; + return mindist; +} + +// Assign each point to the nearest medoid. +// return Assignment cost +double Assignment::assignToNearestCluster() { + double cost = 0.; + for (int i=0; i< num_obs; ++i) { + cost += recompute(i, -1, DBL_MAX, -1, DBL_MAX); + } + return cost; +} + +bool Assignment::hasMedoid(int cand) { + if (medoids_dict.empty()) { + for (int i=0; i= num_obs) { + // Random sampling of non-medoids will be slow for huge k + //LOG.warning("A very large k was chosen. This implementation is not optimized for this case."); + } + // Number of retries, relative rate, or absolute count: + int retries = (int)ceil(maxneighbor < 1 ? maxneighbor * (num_obs - k) : maxneighbor); + // We will be using this to avoid sampling the same points twice. + std::vector subsampler(num_obs); + for (int i=0; i 0) { + break; // Good: not a medoid. + } + // We may have many duplicate points + if(curr.second[cand] == 0) { + ++j; // Cannot yield an improvement if we are metric. + goto step; + } else if( !curr.hasMedoid(cand)) { + // Probably not a good candidate, but try nevertheless + break; + } + if(r >= 1000) { + //throw new AbortException("Failed to choose a non-medoid in 1000 attempts. Choose k << N."); + return 0; + } + // else: this must be the medoid. + } + // 5. check lower cost + double cost = curr.computeCostDifferential(cand); + if(!(cost < -1e-12 * total)) { + ++j; // 6. try again + continue; + } + total += cost; // cost is negative! + // Swap: + curr.performLastSwap(cand); + j = 1; + } + // New best: + if(total < bestscore) { + // Swap: + FastAssignment tmp = curr; + curr = best; + best = tmp; + bestscore = total; + } + } + + bestmedoids = best.medoids; + bestclusters = best.assignment; + return bestscore; +} + +// h Current object to swap with any medoid. +double FastAssignment::computeCostDifferential(int h) +{ + int k = (int)cost.size(); + for (int i=0; igetDistance(h, j); + // current assignment of j + int jcur = assignment[j]; + // Check if current medoid of j is removed: + cost[jcur] += std::min(dist_h, second[j]) - distcur; + double change = dist_h - distcur; + if (change < 0) { + for(int mnum = 0; mnum < jcur; mnum++) { + cost[mnum] += change; + } + for(int mnum = jcur + 1; mnum < k; mnum++) { + cost[mnum] += change; + } + } + } + double min = cost[0]; + lastbest = 0; + for(int i = 1; i < k; i++) { + if(cost[i] < min) { + min = cost[i]; + lastbest = i; + } + } + return min; +} + +// Compute the reassignment cost, for one swap. +// h Current object to swap with the best medoid +void FastAssignment::performLastSwap(int h) +{ + // Update medoids of scratch copy. + medoids[lastbest] = h; + + // Compute costs of reassigning other objects j: + for (int j=0; jgetDistance(h, j); + // current assignment of j + int jcur = assignment[j]; + // Check if current medoid of j is removed: + if(jcur == lastbest) { + // distance(j, o) to second nearest / possible reassignment + double distsec = second[j]; + // Case 1b: j switches to new medoid, or to the second nearest: + if(dist_h < distsec) { + assignment[j] = lastbest; + nearest[j] = dist_h; + second[j] = distsec; + secondid[j] = jcur; + } else { + // We have to recompute, because we do not know the true new second + // nearest. + recompute(j, lastbest, dist_h, jcur, distsec); + } + } + else if(dist_h < distcur) { + // Case 1c: j is closer to h than its current medoid + // and the current medoid is not removed (jcur != mnum). + // Second nearest is the previous assignment + assignment[j] = lastbest; + nearest[j] = dist_h; + second[j] = distcur; + secondid[j] = jcur; + } + else { // else Case 1a): j is closer to i than h and m, so no change. + int jsec = secondid[j]; + double distsec = second[j]; + // Second nearest is still valid. + if(jsec != lastbest && distsec <= dist_h) { + assignment[j] = jcur; + nearest[j] = distcur; + secondid[j] = jsec; + second[j] = distsec; + } + else { + recompute(j, jcur, distcur, lastbest, dist_h); + } + } + } +} + diff --git a/Algorithms/pam.h b/Algorithms/pam.h new file mode 100644 index 000000000..4ac72561f --- /dev/null +++ b/Algorithms/pam.h @@ -0,0 +1,442 @@ +// Author: Xun Li +// May 27, 2020 +// +// Code ported from elki project: http://elki-project.github.io/ +// Copyright follows elki project: http://elki-project.github.io/ +// AGPLv3: https://github.com/elki-project/elki/blob/master/LICENSE.md +// +// 5-27-2020 +// Xoroshiro128Random random number generator +// PAM, CLARA, CLARANS +// Initializer: BUILD and LAB +// FastPAM, FastCLARA, FastCLARANS +#ifndef __XL_PAM_H +#define __XL_PAM_H + +#include +#include + +#include "DataUtils.h" +#include "rng.h" + +using namespace boost; + + +class PAMUtils +{ +public: + static std::vector randomSample(Xoroshiro128Random& rand, + int samplesize, int n, + const std::vector& previous = std::vector()); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// Initializer +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class PAMInitializer +{ +protected: + DistMatrix* dist; +public: + PAMInitializer(DistMatrix* dist) : dist(dist) {} + virtual ~PAMInitializer() {} + virtual std::vector run(const std::vector& ids, int k) = 0; +}; + +class BUILD : public PAMInitializer +{ +public: + BUILD(DistMatrix* dist) : PAMInitializer(dist) {} + virtual ~BUILD(){} + virtual std::vector run(const std::vector& ids, int k); +}; + +// LAB (linear approximative BUILD) +class LAB : public PAMInitializer +{ + +public: + LAB(DistMatrix* dist, int seed=123456789) : PAMInitializer(dist), random(seed) {} + virtual ~LAB(){} + virtual std::vector run(const std::vector& ids, int k); + + // Partial Fisher-Yates shuffle. + // ids IDs to shuffle + // ssize sample size to generate + // end Valid range + void shuffle(std::vector& samples, int ssize, int end); + + // Get the minimum distance to previous medoids. + // j j current object + // mindist distance storage + // return minimum distance + double getMinDist(int j, std::vector& medids, std::vector& mindist); + + // seed + Xoroshiro128Random random; +}; +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class PAM +{ +public: + PAM(int num_obs, DistMatrix* dist_matrix, PAMInitializer* init, + int k, int maxiter, const std::vector& ids=std::vector()); + virtual ~PAM(); + + virtual double run(); + + virtual std::vector getResults(); + + virtual std::vector getMedoids(); + + virtual std::vector getAssignement() { return assignment;} +protected: + + // Get distance between i-th and j-th object + double getDistance(int i, int j); + + // Run the PAM optimization phase. + virtual double run(std::vector& medoids, int maxiter); + + // PAM Assign each object to the nearest cluster, return the cost. + // means Object centroids + // return Assignment cost + virtual double assignToNearestCluster(std::vector& means); + + // Compute the reassignment cost of one swap. + // h Current object to swap with the medoid + // mnum Medoid number to be replaced + virtual double computeReassignmentCost(int h, int mnum); + +protected: + // Number of observations + int num_obs; + + // Distance matrix + DistMatrix* dist_matrix; + + // PAM Initializer + PAMInitializer* initializer; + + // Number of clusters + int k; + + // Max iteration + int maxiter; + + // ids: could be non-enumeric numbers + std::vector ids; + + // cluster assignment + std::vector assignment; + + // distance to nearest + std::vector nearest; + + // distance to second nearest + std::vector second; + + // medoids + std::vector medoids; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class FastPAM : public PAM +{ +public: + // fasttol: controls how many additional swaps are performed. + // When set to 0, it will only execute an additional swap if it + // appears to be independent (i.e., the improvements resulting from the + // swap have not decreased when the first swap was executed). + // Default: 1 which means to perform any additional swap that gives an improvement. + // We could not observe a tendency to find worse results when doing these + // additional swaps, but a reduced runtime. + FastPAM(int num_obs, DistMatrix* dist_matrix, PAMInitializer* init, + int k, int maxiter, double fasttol, const std::vector& ids=std::vector()); + virtual ~FastPAM(); + + virtual double run() { return PAM::run(); } +protected: + + // Run the PAM optimization phase. + virtual double run(std::vector& medoids, int maxiter); + + // FastPAM1 + // Compute the reassignment cost, for all medoids in one pass. + virtual void computeReassignmentCost(int h, std::vector& cost); + + // FastPAM1 + // Returns a list of clusters. The kth cluster contains the ids + // of those objects, that are nearest to the kth mean. + virtual double assignToNearestCluster(std::vector& means); + + // Compute the reassignment cost of one swap. + // h Current object to swap with the medoid + // mnum Medoid number to be replaced + virtual double computeReassignmentCost(int h, int mnum); + + void findBestSwaps(std::vector& medoids, + std::vector& bestids, + std::vector& best, + std::vector& cost); + + bool isMedoid(int id); + + int argmin(const std::vector& best); + + // FastPAM1 + // Update an existing cluster assignment. + // medoids Medoids set; + // h New medoid + // m Position of replaced medoid + void updateAssignment(std::vector& medoids, int h, int m); + + // FastPAM1 + // j Query point + // medoids Medoids + // h Known medoid + // dist_h Distance to h + // n Known nearest + // return Index of second nearest medoid, {@link #second} is updated. + int updateSecondNearest(int j, std::vector& medoids, + int h, double dist_h, int n); + + +protected: + // Tolerance for fast swapping behavior (may perform worse swaps). + double fastswap; + + // Tolerance for fast swapping behavior (may perform worse swaps). + double fasttol; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class CLARA +{ +public: + // k Number of clusters to produce + // maxiter Maximum number of iterations + // numsamples Number of samples (sampling iterations) + // default: 5 + // sampling Sampling rate (absolute or relative) + // Default sample size suggested by Kaufman and Rousseeuw + // default: 40 + 2. * k + // independent NOT Keep the previous medoids in the next sample + // false: using previous medoids in next sample + CLARA(int num_obs, DistMatrix* dist_matrix, PAMInitializer* init, + int k, int maxiter, int numsamples, double sampling, bool independent, int seed=123456789); + + virtual ~CLARA(); + + virtual double run(); + + virtual std::vector getResults(); + + virtual std::vector getMedoids() { return bestmedoids;} + +protected: + + // Assign remining to nearest cluster + double assignRemainingToNearestCluster(std::vector& means, + std::vector& rids, + std::vector& r_assignment, + std::vector& assignment); +protected: + // Number of observations + int num_obs; + + // Distance matrix + DistMatrix* dist_matrix; + + // PAM Initializer + PAMInitializer* initializer; + + // Number of clusters + int k; + + // Max iteration + int maxiter; + + // Sampling rate. If less than 1, it is considered to be a relative value. + double sampling; + + // Number of samples to draw (i.e. iterations). + int numsamples; + + // Keep the previous medoids in the sample (see page 145). + bool keepmed; + + // Random factory for initialization. + Xoroshiro128Random random; + + std::vector bestmedoids; + + std::vector bestclusters; +}; + +class FastCLARA : public CLARA +{ +public: + // k Number of clusters to produce + // maxiter Maximum number of iterations + // fasttol: FastPAM + // numsamples Number of samples (sampling iterations) + // default: 5 + // sampling Sampling rate (absolute or relative) + // Larger sample size, used by Schubert and Rousseeuw, 2019 + // default: 80 + 4. * k (has to > 3*k) + // keepmed Keep the previous medoids in the next sample + // true if numsamples > 1 + FastCLARA(int num_obs, DistMatrix* dist_matrix, PAMInitializer* init, + int k, int maxiter, double fasttol, + int numsamples, double sampling, bool independent, int seed=123456789); + + virtual ~FastCLARA() {} + + virtual double run(); + +protected: + double fasttol; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class Assignment +{ +public: + int k; + int num_obs; + // Distance matrix + DistMatrix* dist_matrix; + boost::unordered_map medoids_dict; + std::vector medoids; + std::vector assignment; + std::vector nearest; + std::vector secondid; + std::vector second; + +public: + Assignment() {} + Assignment(int k, int num_obs, DistMatrix* dist_matrix); + virtual ~Assignment() {} + + // Overload = operator + virtual Assignment& operator=(const Assignment& other); + + // Compute the reassignment cost, for one swap. + double computeCostDifferential(int h, int mnum, Assignment& scratch); + + //Recompute the assignment of one point. + virtual double recompute(int id, int mnum, double known, int snum, double sknown); + + // Assign each point to the nearest medoid. + virtual double assignToNearestCluster(); + + // Check if medoid is already assigned + virtual bool hasMedoid(int cand); +}; + +class CLARANS +{ +public: + // k Number of clusters to produce + // numlocal Number of samples to draw (i.e. restarts). + // default: 2 + // maxneighbor Sampling rate. If less than 1, it is considered to be a relative value. + // default: 0.0125 + CLARANS(int num_obs, DistMatrix* dist_matrix, + int k, int numlocal, double maxneighbor, int seed=123456789); + + virtual ~CLARANS(); + + virtual double run(); + + virtual std::vector getResults(); + + virtual std::vector getMedoids() { return bestmedoids;} + +protected: + + // Assign remining to nearest cluster + double assignRemainingToNearestCluster(std::vector& means, + std::vector& rids, + std::vector& r_assignment, + std::vector& assignment); +protected: + // Number of observations + int num_obs; + + // Distance matrix + DistMatrix* dist_matrix; + + // Number of clusters + int k; + + // Number of samples to draw (i.e. restarts). + int numlocal; + + // Sampling rate. If less than 1, it is considered to be a relative value. + double maxneighbor; + + // Random factory for initialization. + Xoroshiro128Random random; + + std::vector bestmedoids; + + std::vector bestclusters; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +class FastAssignment : public Assignment +{ +public: + // Array for storing the per-medoid costs. + std::vector cost; + + // Last best medoid number + int lastbest; + +public: + FastAssignment() : Assignment() {} + FastAssignment(int k, int num_obs, DistMatrix* dist_matrix) + : Assignment(k, num_obs, dist_matrix), cost(k) {} + + virtual ~FastAssignment() {} + + // Compute the reassignment cost, for one swap. + double computeCostDifferential(int h); + + // Perform last swap + void performLastSwap(int h); +}; + +// A faster variation of CLARANS, that can explore O(k) as many swaps at a +// similar cost by considering all medoids for each candidate non-medoid. Since +// this means sampling fewer non-medoids, we suggest to increase the subsampling +// rate slightly to get higher quality than CLARANS, at better runtime. +// +class FastCLARANS : public CLARANS +{ +public: + // k Number of clusters to produce + // numlocal Number of samples to draw (i.e. restarts). + // default: 2 + // maxneighbor Sampling rate. If less than 1, it is considered to be a relative value. + // default: 2 * 0.0125, larger sampling rate + FastCLARANS(int num_obs, DistMatrix* dist_matrix, + int k, int numlocal, double maxneighbor, int seed=123456789); + virtual ~FastCLARANS() {} + + virtual double run(); +}; + +#endif diff --git a/Algorithms/predict.c b/Algorithms/predict.c new file mode 100755 index 000000000..57920fd6e --- /dev/null +++ b/Algorithms/predict.c @@ -0,0 +1,188 @@ +#include "S.h" +#include "loess.h" +#include +#include +#include + + +extern char *error_message; +extern int error_status; + +static void +pred_(double *y, double *x_, double *new_x, long int *size_info, double *residual_scale, + double *weights, double *robust, double *span, long int *degree, + long int *normalize, long int *parametric, long int *drop_square, char **surface, + double *cell, char **family, long int *parameter, long int *a, double *xi, + double *vert, double *vval, double *divisor, long int *se, double *fit, + double *se_fit) +{ + double *x, *x_tmp, *x_evaluate, *L, new_cell, tmp, *fit_tmp, + *temp; + long int N, D, M, sum_drop_sqr = 0, sum_parametric = 0, + nonparametric = 0, *order_parametric, *order_drop_sqr; + long int i, j, k, p; + long int gaussian_family = !strcmp(*family, "gaussian"); + long int direct_surface = !strcmp(*surface, "direct"); + + D = size_info[0]; + N = size_info[1]; + M = size_info[2]; + + x = MALLOC(N * D * sizeof(double)); + x_tmp = MALLOC(N * D * sizeof(double)); + x_evaluate = MALLOC(M * D * sizeof(double)); + L = MALLOC(N * M * sizeof(double)); + order_parametric = MALLOC(D * sizeof(long int)); + order_drop_sqr = MALLOC(D * sizeof(long int)); + temp = MALLOC(N * D * sizeof(double)); + + for(i = 0; i < (N * D); i++) + x_tmp[i] = x_[i]; + for(i = 0; i < D; i++) { + k = i * M; + for(j = 0; j < M; j++) { + p = k + j; + new_x[p] = new_x[p] / divisor[i]; + } + } + if(direct_surface || se) { + for(i = 0; i < D; i++) { + k = i * N; + for(j = 0; j < N; j++) { + p = k + j; + x_tmp[p] = x_[p] / divisor[i]; + } + } + } + j = D - 1; + for(i = 0; i < D; i++) { + sum_drop_sqr = sum_drop_sqr + drop_square[i]; + sum_parametric = sum_parametric + parametric[i]; + if(parametric[i]) + order_parametric[j--] = i; + else + order_parametric[nonparametric++] = i; + } + for(i = 0; i < D; i++) { + order_drop_sqr[i] = 2 - drop_square[order_parametric[i]]; + k = i * M; + p = order_parametric[i] * M; + for(j = 0; j < M; j++) + x_evaluate[k + j] = new_x[p + j]; + k = i * N; + p = order_parametric[i] * N; + for(j = 0; j < N; j++) + x[k + j] = x_tmp[p + j]; + } + for(i = 0; i < N; i++) + robust[i] = weights[i] * robust[i]; + + if(direct_surface) { + if(*se) { + loess_dfitse(y, x, x_evaluate, weights, robust, + &gaussian_family, span, degree, + &nonparametric, order_drop_sqr, &sum_drop_sqr, + &D, &N, &M, fit, L); + } + else { + loess_dfit(y, x, x_evaluate, robust, span, degree, + &nonparametric, order_drop_sqr, &sum_drop_sqr, + &D, &N, &M, fit); + } + } + else { + loess_ifit(parameter, a, xi, vert, vval, &M, x_evaluate, fit); + if(*se) { + new_cell = (*span) * (*cell); + fit_tmp = MALLOC(M * sizeof(double)); + loess_ise(y, x, x_evaluate, weights, span, degree, + &nonparametric, order_drop_sqr, &sum_drop_sqr, + &new_cell, &D, &N, &M, fit_tmp, L); + free(fit_tmp); + } + } + if(*se) { + for(i = 0; i < N; i++) { + k = i * M; + for(j = 0; j < M; j++) { + p = k + j; + L[p] = L[p] / weights[i]; + L[p] = L[p] * L[p]; + } + } + for(i = 0; i < M; i++) { + tmp = 0; + for(j = 0; j < N; j++) + tmp = tmp + L[i + j * M]; + se_fit[i] = (*residual_scale) * sqrt(tmp); + } + } + free(x); + free(x_tmp); + free(x_evaluate); + free(L); + free(order_parametric); + free(order_drop_sqr); + free(temp); +} + +void +predict(double *eval, loess *lo, prediction *pre) +{ + long int size_info[3]; + + pre->fit = MALLOC(pre->m * sizeof(double)); + if (pre->se) { + pre->se_fit = MALLOC(pre->m * sizeof(double)); + } + pre->residual_scale = lo->outputs->residual_scale; + pre->df = (lo->outputs->one_delta * lo->outputs->one_delta) / + lo->outputs->two_delta; + + size_info[0] = lo->inputs->p; + size_info[1] = lo->inputs->n; + size_info[2] = pre->m; + + error_status = 0; + lo->status.err_status = 0; + lo->status.err_msg = NULL; + + pred_(lo->inputs->y, + lo->inputs->x, eval, + size_info, + &lo->outputs->residual_scale, + lo->inputs->weights, + lo->outputs->robust, + &lo->model->span, + &lo->model->degree, + &lo->model->normalize, + lo->model->parametric, + lo->model->drop_square, + &lo->control->surface, + &lo->control->cell, + &lo->model->family, + lo->kd_tree->parameter, + lo->kd_tree->a, + lo->kd_tree->xi, + lo->kd_tree->vert, + lo->kd_tree->vval, + lo->outputs->divisor, + &pre->se, + pre->fit, + pre->se_fit); + + if(error_status){ + lo->status.err_status = error_status; + lo->status.err_msg = error_message; + } +} + + +void +pred_free_mem(prediction *pre) +{ + free(pre->fit); + if(pre->se) { + free(pre->se_fit); + } +} diff --git a/Algorithms/redcap.cpp b/Algorithms/redcap.cpp index 76f90ce49..d4db9e984 100644 --- a/Algorithms/redcap.cpp +++ b/Algorithms/redcap.cpp @@ -36,6 +36,7 @@ #include "../ShapeOperations/GalWeight.h" #include "../logger.h" #include "../GenUtils.h" +#include "../GdaConst.h" #include "cluster.h" #include "redcap.h" @@ -71,7 +72,7 @@ void SSDUtils::MeasureSplit(double ssd, vector &ids, int split_position, M int start1 = 0; int end1 = split_position; int start2 = split_position; - int end2 = ids.size(); + int end2 = (int)ids.size(); double ssd1 = ComputeSSD(ids, start1, end1); double ssd2 = ComputeSSD(ids, start2, end2); @@ -181,12 +182,13 @@ Tree::Tree(vector _ordered_ids, vector _edges, AbstractClusterFactor : ordered_ids(_ordered_ids), edges(_edges), cluster(_cluster) { ssd_reduce = 0; + split_pos = 0; ssd_utils = cluster->ssd_utils; controls = cluster->controls; control_thres = cluster->control_thres; - int size = ordered_ids.size(); - int edge_size = edges.size(); + int size = (int)ordered_ids.size(); + int edge_size = (int)edges.size(); this->ssd = 0; this->ssd_reduce = 0; @@ -216,7 +218,7 @@ Tree::Tree(vector _ordered_ids, vector _edges, AbstractClusterFactor } if (size < 1000) { - Partition(0, od_array.size()-1, ordered_ids, od_array, nbr_dict); + Partition(0, (int)od_array.size()-1, ordered_ids, od_array, nbr_dict); } else { run_threads(ordered_ids, od_array, nbr_dict); } @@ -248,9 +250,10 @@ void Tree::run_threads(vector& ids, vector >& od_array, boost::unordered_map >& nbr_dict) { - int n_jobs = od_array.size(); + int n_jobs = (int)od_array.size(); - int nCPUs = boost::thread::hardware_concurrency();; + int nCPUs = boost::thread::hardware_concurrency(); + if (GdaConst::gda_set_cpu_cores) nCPUs = GdaConst::gda_cpu_cores; int quotient = n_jobs / nCPUs; int remainder = n_jobs % nCPUs; int tot_threads = (quotient > 0) ? nCPUs : remainder; @@ -279,11 +282,11 @@ void Tree::Partition(int start, int end, vector& ids, vector >& od_array, boost::unordered_map >& nbr_dict) { - int size = nbr_dict.size(); - int id, orig_id, dest_id; - int i, e_idx, k = 1, cnt=0; + int size = (int)nbr_dict.size(); + int orig_id, dest_id; + int i; - int best_edge = -1; + //int best_edge = -1; int evaluated = 0; int best_pos = -1; double tmp_ssd_reduce = 0, tmp_ssd=0; @@ -352,7 +355,7 @@ void Tree::Split(int orig, int dest, boost::unordered_map >& nb visited_ids.pop(); cand_ids[cur_id] = 1; vector& nbrs = nbr_dict[cur_id]; - nbr_size = nbrs.size(); + nbr_size = (int)nbrs.size(); for (i=0; i Tree::GetSubTrees() if (split_ids.empty()) { return this->subtrees; } - int size = this->split_ids.size(); + int size = (int)this->split_ids.size(); vector part1_ids(this->split_pos); vector part2_ids(size -this->split_pos); @@ -478,7 +481,7 @@ void AbstractClusterFactory::init() orig = nodes[i]; const vector& nbrs = w[i].GetNbrs(); for (int j=0; jid][dest->id]; @@ -539,7 +542,7 @@ void AbstractClusterFactory::Partitioning(int k) sub_trees.push(right_tree); } - //delete tmp_tree; + delete tmp_tree; } cluster_ids.clear(); @@ -666,11 +669,11 @@ void FirstOrderSLKRedCap::Clustering() { std::sort(edges.begin(), edges.end(), EdgeLess); - int num_nodes = nodes.size(); + int num_nodes = (int)nodes.size(); ordered_edges.resize(num_nodes-1); int cnt = 0; - double sum_length = 0; + //double sum_length = 0; for (int i=0; i& clst_ids, vector& clst_startpos, vector& clst_nodenum) { - double new_dist; + double new_dist = 0; if (conn_c_o && conn_c_d) { double d_c_o = dist_dict[cur_id][o_id]; double d_c_d = dist_dict[cur_id][d_id]; @@ -827,7 +830,7 @@ FullOrderALKRedCap::~FullOrderALKRedCap() void FullOrderALKRedCap::Clustering() { - int num_nodes = nodes.size(); + int num_nodes = (int)nodes.size(); vector ordered_nodes(num_nodes); for (int i=0; i< this->edges.size(); i++) { @@ -839,7 +842,7 @@ void FullOrderALKRedCap::Clustering() } std::sort(edges.begin(), edges.end(), EdgeLess); - int num_edges = edges.size(); + int num_edges = (int)edges.size(); vector edges_copy(num_edges); for (int i=0; i& clst_ids, vector& clst_startpos, vector& clst_nodenum) { - double new_dist; + double new_dist = 0; if (conn_c_o && conn_c_d) { double d_c_o = dist_dict[cur_id][o_id]; double d_c_d = dist_dict[cur_id][d_id]; @@ -1059,7 +1062,7 @@ FullOrderCLKRedCap::~FullOrderCLKRedCap() double FullOrderCLKRedCap::UpdateClusterDist(int cur_id, int o_id, int d_id, bool conn_c_o, bool conn_c_d, vector& clst_ids, vector& clst_startpos, vector& clst_nodenum) { - double new_dist; + double new_dist = 0.0; if (conn_c_o && conn_c_d) { double d_c_o = dist_dict[cur_id][o_id]; double d_c_d = dist_dict[cur_id][d_id]; @@ -1103,7 +1106,7 @@ FullOrderWardRedCap::~FullOrderWardRedCap() void FullOrderWardRedCap::Clustering() { - int num_nodes = nodes.size(); + int num_nodes = (int)nodes.size(); vector ordered_nodes(num_nodes); for (int i=0; i< this->edges.size(); i++) { @@ -1115,7 +1118,7 @@ void FullOrderWardRedCap::Clustering() } std::sort(edges.begin(), edges.end(), EdgeLess); - int num_edges = edges.size(); + int num_edges = (int)edges.size(); vector edges_copy(num_edges); for (int i=0; i #include #include + +#include "../ShapeOperations/GalWeight.h" + #include #include #include #include -#include "../ShapeOperations/GalWeight.h" + using namespace std; @@ -105,7 +108,7 @@ namespace SpanningTreeClustering { n2 = nbr; e2 = e; } else { - cout << "AddNeighbor() > 2" << endl; + //cout << "AddNeighbor() > 2" << endl; } } }; diff --git a/Algorithms/rng.h b/Algorithms/rng.h new file mode 100644 index 000000000..e1107b612 --- /dev/null +++ b/Algorithms/rng.h @@ -0,0 +1,100 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Created: 5/30/2017 lixun910@gmail.com + * + * title = "xoroshiro+ / xorshift* / xorshift+ generators and the PRNG shootout", // + * booktitle = "Online", // + * url = "http://xoroshiro.di.unimi.it/", // + */ +#ifndef __GEODA_CENTER_RNG_H__ +#define __GEODA_CENTER_RNG_H__ + +#include + +class Xoroshiro128Random +{ + long long s0; + long long s1; +public: + Xoroshiro128Random(long long xor64 = 123456789) { + SetSeed(xor64); + } + + virtual ~Xoroshiro128Random() {} + + void SetSeed(long long xor64 = 123456789) { + // set seed + // XorShift64* generator to seed: + if (xor64 == 0) + xor64 = 4101842887655102017L; + xor64 ^= (unsigned long long)xor64 >> 12; // a + xor64 ^= xor64 << 25; // b + xor64 ^= (unsigned long long)xor64 >> 27; // c + s0 = xor64 * 2685821657736338717L; + xor64 ^= (unsigned long long)xor64 >> 12; // a + xor64 ^= xor64 << 25; // b + xor64 ^= (unsigned long long)xor64 >> 27; // c + s1 = xor64 * 2685821657736338717L; + } + int nextInt(int n) { + if (n <=0) return 0; + int r = (int)((n & -n) == n ? nextLong() & n - 1 // power of two + : (unsigned long long)(((unsigned long long)nextLong() >> 32) * n) >> 32); + return r; + } + + long long nextLong() { + long long t0 = s0, t1 = s1; + long long result = t0 + t1; + t1 ^= t0; + // left rotate: (n << d)|(n >> (INT_BITS - d)); + s0 = (t0 << 55) | ((unsigned long long)t0 >> (64 - 55)); + s0 = s0 ^ t1 ^ (t1 << 14); // a, b + s1 = (t1 << 36) | ((unsigned long long)t1 >> (64 -36)); + return result; + } + // return a uniform distributed double value between [0, 1] + double nextDouble() { +#ifdef __WXOSX__ + return ((unsigned long long)nextLong() >> 11) * 0x1.0p-53; +#else + char tempStr[] = "0x1.0p-53"; + double nd = std::strtod(tempStr, NULL); + return ((unsigned long long)nextLong() >> 11) * nd; +#endif + } + + std::vector randomSample(int samplesize, int n) + { + std::vector samples(samplesize); + int i=0; + boost::unordered_map sample_dict; + boost::unordered_map::iterator it; + while (sample_dict.size() < samplesize) { + int rnd = nextInt(n); + if (sample_dict.find(rnd) == sample_dict.end()) { + samples[i++] = rnd; + } + sample_dict[rnd] = true; + } + return samples; + } +}; + +#endif diff --git a/Algorithms/skater.cpp b/Algorithms/skater.cpp index a7b0fcbb0..033376520 100644 --- a/Algorithms/skater.cpp +++ b/Algorithms/skater.cpp @@ -12,14 +12,14 @@ #include #include - +#include "../GdaConst.h" #include "../GenUtils.h" #include "skater.h" Skater::Skater(int _num_obs, int _num_vars, int _num_clusters, double** _data, vector >& dist_matrix, bool _check_floor, double _floor, double* _floor_variable) : num_obs(_num_obs), num_vars(_num_vars), num_clusters(_num_clusters),data(_data), check_floor(_check_floor), floor(_floor), floor_variable(_floor_variable) { - Graph g(num_obs); + BGraph g(num_obs); for (int i=0; i tree, vector& scores, vector 0) ? nCPUs : remainder; @@ -224,7 +225,7 @@ void Skater::prunecost(vector tree, int start, int end, vector& score } } -void Skater::get_MST(const Graph &in) +void Skater::get_MST(const BGraph &in) { //https://github.com/vinecopulib/vinecopulib/issues/22 std::vector p(num_vertices(in)); diff --git a/Algorithms/skater.h b/Algorithms/skater.h index 104791dc5..80ab1ff96 100644 --- a/Algorithms/skater.h +++ b/Algorithms/skater.h @@ -33,7 +33,7 @@ typedef adjacency_list < undirectedS, boost::no_property, //VertexProperties property < edge_weight_t, double> //EdgeProperties - > Graph; + > BGraph; typedef std::vector > ClusterPair; typedef std::pair > ClusterEl; @@ -60,7 +60,7 @@ class Skater { heap::priority_queue > solution; - void get_MST(const Graph &in); + void get_MST(const BGraph &in); void run(); diff --git a/Algorithms/smacof.c b/Algorithms/smacof.c new file mode 100644 index 000000000..b8bf8e2a6 --- /dev/null +++ b/Algorithms/smacof.c @@ -0,0 +1,366 @@ +#include "smacof.h" + +#ifdef _MSC_VER +long long int round(double a) +{ + long long int result = (long long int)floor(a); + return result + (long long int)floor((a-result)*2); +} +#endif + +void smacofDistC(const double *x, const int *n, const int *p, double *d) { + int k = 1, nn = *n, pp = *p; + int i,j,s; + double dij; + for (j = 1; j <= nn - 1; j++) { + for (i = j + 1; i <= nn; i++) { + dij = 0.0; + for (s = 1; s <= pp; s++) { + dij += SQUARE(x[MINDEX(i, s, nn)] - x[MINDEX(j, s, nn)]); + } + d[VINDEX(k)] = sqrt(dij); + k++; + } + } +} + +void smacofLossC(const double *dist, const double *w, const double *delta, + const int *m, double *stress) { + int mm = *m; + int k; + *stress = 0.0; + for (k = 1; k <= mm; k++) { + *stress += w[VINDEX(k)] * SQUARE(delta[VINDEX(k)] - dist[VINDEX(k)]); + } + *stress /= 2.0; + return; +} + +void smacofBmatC(const double *dist, const double *w, const double *delta, + const int *n, double *b) { + int nn = *n; + int i,j,k; + double dinv, elem; + for ( i = 1; i <= nn; i++) { + b[TINDEX(i, i, nn)] = 0.0; + } + for ( j = 1; j <= nn - 1; j++) { + for ( i = j + 1; i <= nn; i++) { + k = SINDEX(i, j, nn); + dinv = (dist[k] == 0.0) ? 0.0 : 1.0 / dist[k]; + elem = w[k] * delta[k] * dinv; + b[TINDEX(i, j, nn)] = -elem; + b[TINDEX(i, i, nn)] += elem; + b[TINDEX(j, j, nn)] += elem; + } + } + return; +} + +void smacofVmatC(const double *w, const int *n, double *v) { + int nn = *n; + int i,j; + double elem; + for ( i = 1; i <= nn; i++) { + v[TINDEX(i, i, nn)] = 0.0; + } + for ( j = 1; j <= nn - 1; j++) { + for ( i = j + 1; i <= nn; i++) { + elem = w[SINDEX(i, j, nn)]; + v[TINDEX(i, j, nn)] = -elem; + v[TINDEX(i, i, nn)] += elem; + v[TINDEX(j, j, nn)] += elem; + } + } + return; +} + +void smacofHmatC(const double *x, const double *bmat, const double *vmat, + const double *w, const double *delta, const double *dist, + const int *n, const int *p, double *work, double *h) { + int nn = *n, pp = *p, np = nn * pp; + int i,j,s,t; + int ij,ji,sj,si; + double f1,f2,f3,f4,elem; + for ( s = 1; s <= pp; s++) { + for ( t = 1; t <= s; t++) { + for ( j = 1; j <= nn; j++) { + for ( i = j; i <= nn; i++) { + work[TINDEX(i, j, nn)] = 0.0; + } + } + for ( j = 1; j <= nn - 1; j++) { + for ( i = j + 1; i <= nn; i++) { + f1 = (x[MINDEX(i, s, nn)] - x[MINDEX(j, s, nn)]); + f2 = (x[MINDEX(i, t, nn)] - x[MINDEX(j, t, nn)]); + f3 = THIRD(dist[SINDEX(i, j, nn)]); + f4 = delta[SINDEX(i, j, nn)] * w[SINDEX(i, j, nn)]; + f3 = (f3 < 1e-10) ? 0 : 1 / f3; + elem = f1 * f2 * f4 * f3; + work[TINDEX(i, j, nn)] = -elem; + work[TINDEX(i, i, nn)] += elem; + work[TINDEX(j, j, nn)] += elem; + } + } + if (s == t) { + for ( j = 1; j <= nn; j++) { + for ( i = j; i <= nn; i++) { + h[TINDEX((s - 1) * nn + i, (s - 1) * nn + j, nn * pp)] = + bmat[TINDEX(i, j, nn)] - work[TINDEX(i, j, nn)]; + } + } + } + if (s != t) { + for ( i = 1; i <= nn; i++) { + for ( j = 1; j <= nn; j++) { + ij = IMIN(i, j); + ji = IMAX(i, j); + sj = (s - 1) * nn + j; + si = (t - 1) * nn + i; + h[TINDEX(sj, si, np)] = -work[TINDEX(ji, ij, nn)]; + } + } + } + } + } + return; +} + +void smacofGuttmanC(const double *x, const double *bmat, const double *vinv, + const int *n, const int *p, double *work, double *y) { + (void)mutrma(n, p, bmat, x, work); + (void)mutrma(n, p, vinv, work, y); + return; +} + +void smacofGradientC(const double *x, const double *bmat, const double *vmat, + const int *n, const int *p, double *work, double *y) { + int nn = *n, pp = *p; + int i,s; + (void)mutrma(n, p, vmat, x, y); + (void)mutrma(n, p, bmat, x, work); + for ( i = 1; i <= nn; i++) { + for ( s = 1; s <= pp; s++) { + y[MINDEX(i, s, nn)] -= work[MINDEX(i, s, nn)]; + } + } + return; +} + +void smacofHessianC(const double *x, const double *bmat, const double *vmat, + const double *w, const double *delta, const double *dist, + const int *n, const int *p, double *work, double *h) { + int nn = *n, pp = *p, np = nn * pp; + int i,j,s; + (void)smacofHmatC(x, bmat, vmat, w, delta, dist, n, p, work, h); + for ( j = 1; j <= np; j++) { + for ( i = j; i <= np; i++) { + h[TINDEX(i, j, np)] = -h[TINDEX(i, j, np)]; + } + } + for ( s = 1; s <= pp; s++) { + for ( j = 1; j <= nn; j++) { + for ( i = j; i <= nn; i++) { + h[TINDEX((s - 1) * nn + i, (s - 1) * nn + j, np)] += + vmat[TINDEX(i, j, nn)]; + } + } + } + return; +} + +void smacofNewtonC() { return; } + + +double runSmacof(const double *delta, int m, int p, int itmax, double eps, + double *_xold, int* _itel, double **_xnew) +{ + int itel = 1, b_length; + double sold, *bold; + // smacofInitialRC(delta, p) + int n = (int)( round((1 + sqrt( 1 + 8 * m)) / 2) ); + int r = (int)( n * (n+1) / 2); + int d_length = n * (n-1)/2; + double *dold = calloc(d_length, sizeof(double)); + double *w, *work, *work1, *work2, *work3, *work4, *xold; + + int w_length = m, i, j, x_length, v_length, p_length; + double *vinv, *xpow, pv; + double eiff, tmp_eiff, snew; + double *xnew, *dnew, *bnew; + int _m, _n, _r, _p; + + w = malloc(w_length * sizeof(double)); + for (i=0; i +//#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifdef _MSC_VER +#define inline _inline +#endif + +#ifndef lapack_int +#define lapack_int long int +#endif + +#ifndef LAPACKE_malloc +#define LAPACKE_malloc( size ) malloc( size ) +#endif +#ifndef LAPACKE_free +#define LAPACKE_free( p ) free( p ) +#endif + +#define LAPACK_C2INT( x ) (lapack_int)(*((float*)&x )) +#define LAPACK_Z2INT( x ) (lapack_int)(*((double*)&x )) + +#define LAPACK_ROW_MAJOR 101 +#define LAPACK_COL_MAJOR 102 + +#define LAPACK_WORK_MEMORY_ERROR -1010 +#define LAPACK_TRANSPOSE_MEMORY_ERROR -1011 + +static inline int VINDEX(const int); +static inline int MINDEX(const int, const int, const int); +static inline int SINDEX(const int, const int, const int); +static inline int TINDEX(const int, const int, const int); +static inline int AINDEX(const int, const int, const int, const int, const int); + +static inline double SQUARE(const double); +static inline double THIRD(const double); +static inline double FOURTH(const double); +static inline double FIFTH(const double); + +//static inline double MAX(const double, const double); +//static inline double MIN(const double, const double); +static inline int IMIN(const int, const int); +static inline int IMAX(const int, const int); +static inline int IMOD(const int, const int); + +void dposv(const int *, const int *, double *, double *); +void dsyevd(const int *, double *, double *); +void dgeqrf(const int *, const int *, double *, double *); +void dorgqr(const int *, const int *, double *, double *); +void dortho(const int *, const int *, double *); +void dorpol(const int *, double *); +void primat(const int *, const int *, const int *, const int *, const double *); +void priarr(const int *, const int *, const int *, const int *, const int *, + const double *); +void pritrl(const int *, const int *, const int *, const double *); +void pritru(const int *, const int *, const int *, const double *); +void mpinve(const int *, double *, double *); +void mpower(const int *, double *, double *, double *); +void mpinvt(const int *, double *, double *); +void trimat(const int *, const double *, double *); +void mattri(const int *, const double *, double *); +void mutrma(const int *, const int *, const double *, const double *, double *); + +void jacobiC(const int *, double *, double *, double *, double *, const int *, + const double *); + +void smacofDistC(const double *, const int *, const int *, double *); +void smacofLossC(const double *, const double *, const double *, const int *, + double *); +void smacofBmatC(const double *, const double *, const double *, const int *, + double *); +void smacofVmatC(const double *, const int *, double *); +void smacofGuttmanC(const double *, const double *, const double *, const int *, + const int *, double *, double *); +void smacofGradientC(const double *, const double *, const double *, + const int *, const int *, double *, double *); +void smacofHmatC(const double *, const double *, const double *, const double *, + const double *, const double *, const int *, const int *, + double *, double *); +void smacofHessianC(const double *, const double *, const double *, + const double *, const double *, const double *, const int *, + const int *, double *, double *); +void smacofInitialC(const double *, const int *, const int *, double *, + double *, double *, double *, double *); +double runSmacof(const double *delta, int m, int p, int itmax, double eps, + double *_xold, int* _itel, double **xnew); + +static inline int VINDEX(const int i) { return i - 1; } + +static inline int MINDEX(const int i, const int j, const int n) { + return (i - 1) + (j - 1) * n; +} + +static inline int AINDEX(const int i, const int j, const int k, const int n, + const int m) { + return (i - 1) + (j - 1) * n + (k - 1) * n * m; +} + +static inline int SINDEX(const int i, const int j, const int n) { + return ((j - 1) * n) - (j * (j - 1) / 2) + (i - j) - 1; +} + +static inline int TINDEX(const int i, const int j, const int n) { + return ((j - 1) * n) - ((j - 1) * (j - 2) / 2) + (i - (j - 1)) - 1; +} + +static inline double SQUARE(const double x) { return x * x; } +static inline double THIRD(const double x) { return x * x * x; } +static inline double FOURTH(const double x) { return x * x * x * x; } +static inline double FIFTH(const double x) { return x * x * x * x * x; } + +//static inline double MAX(const double x, const double y) { +// return (x > y) ? x : y; +//} + +//static inline double MIN(const double x, const double y) { +// return (x < y) ? x : y; +//} + +static inline int IMAX(const int x, const int y) { return (x > y) ? x : y; } + +static inline int IMIN(const int x, const int y) { return (x < y) ? x : y; } + +static inline int IMOD(const int x, const int y) { + return (((x % y) == 0) ? y : (x % y)); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* SMACOF_H */ diff --git a/Algorithms/smacof_utils.c b/Algorithms/smacof_utils.c new file mode 100644 index 000000000..4ed6ac486 --- /dev/null +++ b/Algorithms/smacof_utils.c @@ -0,0 +1,225 @@ +#include "smacof.h" + +// complete set of orthogonal polynomials + +void dorpol(const int *n, double *p) +{ + int i, j; + double di; + for (i = 1; i <= *n; i++) { + p[MINDEX(i, 1, *n)] = 1.0; + di = (double)i; + for (j = 2; j <= *n; j++) { + p[MINDEX(i, j, *n)] = p[MINDEX(i, j - 1, *n)] * di; + } + } + (void)dortho(n, n, p); + return; +} + +// double centering + +void docent(const int *n, double *x, double *y) { + int nn = *n; + double *ssum = (double *)calloc((size_t)nn, sizeof(double)), t = 0.0; + int i,j, ij, ji; + double s; + for ( i = 1; i <= nn; i++) { + s = 0.0; + for (j = 1; j <= nn; j++) { + ij = IMAX(i, j); + ji = IMIN(j, i); + s += x[TINDEX(ij, ji, nn)]; + t += x[TINDEX(ij, ji, nn)]; + } + ssum[VINDEX(i)] = s / ((double)nn); + } + t /= (double)SQUARE(nn); + for (j = 1; j <= nn; j++) { + for (i = j; i <= nn; i++) { + y[TINDEX(i, j, nn)] = + -(x[TINDEX(i, j, nn)] - ssum[VINDEX(i)] - ssum[VINDEX(j)] + t) / + 2.0; + } + } + free(ssum); + return; +} + +// print a general matrix + +void primat(const int *n, const int *m, const int *w, const int *p, + const double *x) +{ + int i,j; + for (i = 1; i <= *n; i++) { + for (j = 1; j <= *m; j++) { + printf(" %+*.*f ", *w, *p, x[MINDEX(i, j, *n)]); + } + printf("\n"); + } + printf("\n\n"); + return; +} + +// print strict lower triangle + +void pritrl(const int *n, const int *w, const int *p, const double *x) +{ + int i,j,k; + for (i = 1; i <= *n; i++) { + for (j = 1; j <= i; j++) { + if (i == j) { + for (k = 1; k <= *w + 2; k++) { + printf("%c", '*'); + } + } + if (i > j) { + printf(" %+*.*f ", *w, *p, x[SINDEX(i, j, *n)]); + } + } + printf("\n"); + } + printf("\n\n"); + return; +} + +// print inclusive lower triangle + +void pritru(const int *n, const int *w, const int *p, const double *x) +{ + int i,j; + for ( i = 1; i <= *n; i++) { + for ( j = 1; j <= i; j++) { + printf(" %+*.*f ", *w, *p, x[TINDEX(i, j, *n)]); + } + printf("\n"); + } + printf("\n\n"); + return; +} + +// print general array + +void priarr(const int *n, const int *m, const int *r, const int *w, + const int *p, const double *x) +{ + int i,j,k; + for ( k = 1; k <= *r; k++) { + for ( i = 1; i <= *n; i++) { + for ( j = 1; j <= *m; j++) { + printf(" %+*.*f ", *w, *p, x[AINDEX(i, j, k, *n, *m)]); + } + printf("\n"); + } + printf("\n\n"); + } + printf("\n\n\n"); + return; +} + +// arbitrary power of a matrix + +void mpower(const int *n, double *x, double *power, double *xpow) +{ + int nn = *n, itmax = 100; + double eps = 1e-6; + double *e = (double *)calloc((size_t)SQUARE(nn), sizeof(double)); + double *oldi = (double *)calloc((size_t)nn, sizeof(double)); + double *oldj = (double *)calloc((size_t)nn, sizeof(double)); + + int k = 1, i, j; + double s; + + (void)jacobiC(n, x, e, oldi, oldj, &itmax, &eps); + + for ( i = 1; i <= nn; i++) { + s = x[VINDEX(k)]; + oldi[VINDEX(i)] = (s > 1e-10) ? pow(s, *power) : 0.0; + k += (nn - (i - 1)); + } + for (j = 1; j <= nn; j++) { + for (i = j; i <= nn; i++) { + s = 0.0; + for (k = 1; k <= nn; k++) { + s += + e[MINDEX(i, k, nn)] * e[MINDEX(j, k, nn)] * oldi[VINDEX(k)]; + } + xpow[TINDEX(i, j, nn)] = s; + } + } + free(e); + free(oldi); + free(oldj); + return; +} + +// inclusive lower triangle to symmetric + +void trimat(const int *n, const double *x, double *y) +{ + int nn = *n; + int i,j; + for (i = 1; i <= nn; i++) { + for (j = 1; j <= nn; j++) { + y[MINDEX(i, j, nn)] = + (i >= j) ? x[TINDEX(i, j, nn)] : x[TINDEX(j, i, nn)]; + } + } + return; +} + +// symmetric to inclusive lower triangular + +void mattri(const int *n, const double *x, double *y) +{ + int nn = *n; + int i,j; + for (j = 1; j <= nn; j++) { + for (i = j; i <= nn; i++) { + y[TINDEX(i, j, nn)] = x[MINDEX(i, j, nn)]; + } + } + return; +} + +// premultiply matrix by symmetric matrix in inclusive triangular storage + +void mutrma(const int *n, const int *m, const double *a, const double *x, + double *y) +{ + int nn = *n, mm = *m; + int i,j,k, ik, ki; + double s; + for (i = 1; i <= nn; i++) { + for (j = 1; j <= mm; j++) { + s = 0.0; + for (k = 1; k <= nn; k++) { + ik = IMAX(i, k); + ki = IMIN(i, k); + s += a[TINDEX(ik, ki, nn)] * x[MINDEX(k, j, nn)]; + } + y[MINDEX(i, j, nn)] = s; + } + } +} + +// direct sum of two matrices -- can be used recursively + +void dirsum(const int *n, const int *m, const double *a, const double *b, + double *c) +{ + int nn = *n, mm = *m, mn = nn + mm; + int i,j; + for (j = 1; j <= nn; j++) { + for (i = j; i <= nn; i++) { + c[TINDEX(i, j, mn)] = a[TINDEX(i, j, nn)]; + } + } + for (j = 1; j <= mm; j++) { + for (i = j; i <= mm; i++) { + c[TINDEX(nn + i, nn + j, mn)] = b[TINDEX(i, j, mm)]; + } + } + return; +} diff --git a/Algorithms/spectral.cpp b/Algorithms/spectral.cpp index 4ac08c9e6..f7f4a33b2 100644 --- a/Algorithms/spectral.cpp +++ b/Algorithms/spectral.cpp @@ -10,9 +10,13 @@ #include #include #include -#include -#include -#include +#include +#include +#include +// is implicitly included +#include + +#include "../kNN/ANN/ANN.h" #include "cluster.h" #include "spectral.h" @@ -20,13 +24,29 @@ using namespace Eigen; using namespace std; +using namespace Spectra; - +Spectral::~Spectral() +{ + if (dist_util) { + delete dist_util; + } +} void Spectral::set_data(double** input_data, int nrows, int ncols) { + this->data = input_data; + this->nrows = nrows; + this->ncols = ncols; + + // create a DistUtils for KNN weights creation + if (dist_util) { + delete dist_util; + } + dist_util = new Gda::DistUtils(input_data, nrows, ncols, dist=='b'?1:2); + X.resize(nrows, ncols); - for (unsigned int i = 0; i < nrows; ++i) { - for (unsigned int j = 0; j < ncols; ++j) { + for (int i = 0; i < nrows; ++i) { + for (int j = 0; j < ncols; ++j) { X(i, j) = input_data[i][j]; } } @@ -38,6 +58,7 @@ double Spectral::kernel(const VectorXd& a, const VectorXd& b) // gamma : float, default=1.0 (Radial basis function kernel) // Kernel coefficient for rbf, poly, sigmoid, laplacian and chi2 kernels. Ignored for // affinity='nearest_neighbors + // sklearn: gamma = 1.0 / N, gamma = 1/(2sigma^2) => sigma = sqrt(1/gamma) / 2.0; switch(kernel_type){ case 1 : return(pow(a.dot(b)+constant,order)); @@ -48,9 +69,27 @@ double Spectral::kernel(const VectorXd& a, const VectorXd& b) } +void Spectral::set_knn(const unsigned int k, bool is_mutual) +{ + this->is_mutual = is_mutual; + bool is_inverse = false; + double power = 1.0; + + Gda::Weights w = dist_util->CreateKNNWeights(k, is_inverse, power); + K.setZero(nrows, nrows); + for (int i=0; i& lhs, const pair& rhs) const { return lhs.second > rhs.second;} -}; + // Normalise Laplacian: see scipy.sparse.csgraph.laplacian + std::vector isolated_node_mask(L.size()); + VectorXd d = L.rowwise().sum() - L.diagonal(); + for(int i = 0; i < d.rows(); i++){ + if (d(i) == 0) { + d(i) = 1; + isolated_node_mask[i] = true; + } else { + d(i) = 1.0/sqrt(d(i)); + isolated_node_mask[i] = false; + } + } + L = (d.asDiagonal() * L * d.asDiagonal()) * -1; + for (int i=0; i, boost::heap::compare > PriorityQueue; - - // Fill euclidean dista matrix and filter using KNN - K.resize(X.rows(),X.rows()); - double squared_dist = 0; - for (unsigned int i = 0; i < X.rows(); i++){ - PriorityQueue top_K; - for(unsigned int j = i; j < X.rows(); j++){ - squared_dist = (X.row(i) - X.row(j)).norm(); - K(i,j) = K(j,i) = squared_dist; - if (i != j) top_K.push(std::make_pair(j,squared_dist)); - } - if (top_K.size() > knn) { - double min_dist = 0; - for (int j=0; j item = top_K.top(); - top_K.pop(); - min_dist = item.second; - } - for(unsigned int j = i; j < X.rows(); j++){ - if (K(j,i) > min_dist) { - K(i,j) = K(j,i) = 0; + // The following implementation is ported from sklearn + // sklearn/cluster/_spectral.py#L160 + MatrixXd A = (K + K.transpose())/2.0; // Adjacency matrix + if (is_mutual) { + for (int i=0; i op(L); + SymEigsSolver< double, LARGEST_ALGE, DenseSymMatProd > eigs(&op, centers, 2*centers); + eigs.init(); + int nconv = eigs.compute(); + if(eigs.info() == SUCCESSFUL) { + eigenvalues = eigs.eigenvalues(); + eigenvectors = eigs.eigenvectors(); + return true; + } + return false; +} + +bool Spectral::call_symeigshiftssolver(MatrixXd& L) +{ + // Construct matrix operation object using the wrapper class + DenseSymShiftSolve op(L); + + // L has eigenvalues between [0,2], so (I - L) has eigenvalues between [-1,1] + double shift = 1.0; + // Construct eigen solver object with shift 1 (the value of the shift) + // This will find eigenvalues that are closest to 1 + SymEigsShiftSolver< double, LARGEST_MAGN, DenseSymShiftSolve > eigs(&op, centers, 2*centers, shift); + eigs.init(); + int nconv = eigs.compute(); + if(eigs.info() == SUCCESSFUL) { + eigenvalues = eigs.eigenvalues(); + eigenvectors = eigs.eigenvectors(); + return true; + } + return false; } static bool inline eigen_greater(const pair& a, const pair& b) @@ -160,61 +255,35 @@ static bool inline eigen_greater(const pair& a, const pair b.first; } -void Spectral::fast_eigendecomposition() +void Spectral::eigendecomposition(bool raw_matrix) { - // get top N = centers eigen values/vectors - int n = K.rows(); - vector > matrix(n); - for (int i=0; i< n; i++) { - matrix[i].resize(n); - for (int j=0; j > evecs(centers); - for (int i=0; i lambda(centers); - DataUtils::eigen(matrix, evecs, lambda, power_iter); - for (int i = 0; i < evecs.size(); i++) { - for (int j = 0; j < evecs[0].size(); j++) { - evecs[i][j] *= sqrt(lambda[i]); + if (raw_matrix) { + // get largest eigenvalues for (I - K) + //K = MatrixXd::Identity(K.rows(), K.rows()) - K; + for (int i=0; i edecomp(K, true); - EigenSolver edecomp(K); eigenvalues = edecomp.eigenvalues().real(); eigenvectors = edecomp.eigenvectors().real(); - for(unsigned int i = 0; i < eigenvalues.rows(); i++){ - cout << "Eigenvalue: " << eigenvalues(i) << endl; - } + cumulative.resize(eigenvalues.rows()); vector > eigen_pairs; double c = 0.0; @@ -228,7 +297,7 @@ void Spectral::eigendecomposition() // http://stackoverflow.com/questions/5122804/sorting-with-lambda sort(eigen_pairs.begin(),eigen_pairs.end(), eigen_greater); - if(centers > eigen_pairs.size()) centers = eigen_pairs.size(); + if(centers > eigen_pairs.size()) centers = (int)eigen_pairs.size(); for(unsigned int i = 0; i < eigen_pairs.size(); i++){ eigenvalues(i) = eigen_pairs[i].first; @@ -236,20 +305,11 @@ void Spectral::eigendecomposition() cumulative(i) = c; eigenvectors.col(i) = eigen_pairs[i].second; } - cout << "Sorted eigenvalues:" << endl; - for(unsigned int i = 0; i < eigenvalues.rows(); i++){ - if(i<2){ - cout << "PC " << i+1 << ": Eigenvalue: " << eigenvalues(i); - printf("\t(%3.3f of variance, cumulative = %3.3f)\n",eigenvalues(i)/eigenvalues.sum(),cumulative(i)/eigenvalues.sum()); - cout << eigenvectors.col(i) << endl; - } - } - cout << endl; + MatrixXd tmp = eigenvectors; // Select top K eigenvectors where K = centers eigenvectors = tmp.block(0,0,tmp.rows(),centers); - } @@ -257,27 +317,22 @@ void Spectral::cluster(int affinity_type) { if (affinity_type == 0) { // kernel - //affinity_matrix(); generate_kernel_matrix(); } else { // KNN generate_knn_matrix(); } + + arpack_eigendecomposition(); - if (power_iter>0) { - fast_eigendecomposition(); - } else { - // try other method than eigen3, e.g. Intel MLK - eigendecomposition(); - } kmeans(); } void Spectral::kmeans() { - int rows = eigenvectors.rows(); - int columns = eigenvectors.cols(); + int rows = (int)eigenvectors.rows(); + int columns = (int)eigenvectors.cols(); int transpose = 0; // row wise int* clusterid = new int[rows]; @@ -301,7 +356,7 @@ void Spectral::kmeans() int s1=0; int s2 =0; if (GdaConst::use_gda_user_seed) { - srand(GdaConst::gda_user_seed); + srand((int)GdaConst::gda_user_seed); s1 = rand(); } if (s1 > 0) { @@ -309,20 +364,18 @@ void Spectral::kmeans() for (int i = 0; i < rows; i++) uniform(s1, s2); } kcluster(centers, rows, columns, input_data, mask, weight, transpose, npass, n_maxiter, method, dist, clusterid, &error, &ifound, NULL, 0, s1, s2); - - //vector clusters_undef; - + // clean memory for (int i=0; i #include #include +#include "../Weights/DistUtils.h" using namespace Eigen; using namespace std; @@ -24,46 +25,54 @@ class Spectral{ public: Spectral() : centers(2), kernel_type(1), normalise(1), max_iters(1000), sigma(0.001), constant(1.0), order(2.0), method('a'), dist('e'), - npass(10), n_maxiter(300) {} + npass(10), n_maxiter(300), dist_util(NULL) {} - explicit Spectral(MatrixXd& d) : centers(2), kernel_type(1), normalise(1), + Spectral(MatrixXd& d) : centers(2), kernel_type(1), normalise(1), max_iters(1000), sigma(0.001), constant(1.0), order(2.0), method('a'), - dist('e'), npass(10), n_maxiter(300) {X = d;} - - - void set_data(double** input_data, int nrows, int ncols); - void set_centers(const unsigned int i){centers = i;}; + dist('e'), npass(10), n_maxiter(300), dist_util(NULL) {X = d;} + + virtual ~Spectral(); + + void set_data(double** input_data, int nrows, int ncols); + void set_centers(const unsigned int i){centers = i;} - void set_knn(const unsigned int i){knn = i;}; - void set_kernel(const unsigned int i){kernel_type = i;}; - void set_sigma(const double i){sigma = i;}; + void set_knn(const unsigned int k, bool is_mutual=false); + void set_kernel(const unsigned int i){kernel_type = i;} + void set_sigma(const double i){sigma = i;} - void set_normalise(const unsigned int i){normalise = i;}; - void set_constant(const double i){constant = i;}; - void set_order(const double i){order = i;}; - void set_max_iters(const unsigned int i){max_iters = i;}; - void set_power_iters(const unsigned int i){power_iter = i;}; + void set_normalise(const unsigned int i){normalise = i;} + void set_constant(const double i){constant = i;} + void set_order(const double i){order = i;} + void set_max_iters(const unsigned int i){max_iters = i;} + void set_power_iters(const unsigned int i){power_iter = i;} - void set_kmeans_dist(char d) { dist = d;}; - void set_kmeans_method(char m) { method = m;}; - void set_kmeans_npass(int n) { npass = n; }; - void set_kmeans_maxiter(int n) { n_maxiter = n;}; + void set_kmeans_dist(char d) { dist = d;} + void set_kmeans_method(char m) { method = m;} + void set_kmeans_npass(int n) { npass = n; } + void set_kmeans_maxiter(int n) { n_maxiter = n;} void cluster(int affinity_type=0); - const std::vector &get_assignments() const {return assignments;}; + const std::vector &get_assignments() const {return assignments;} + + MatrixXd X, K, eigenvectors; private: void affinity_matrix(); void generate_kernel_matrix(); double kernel(const VectorXd& a, const VectorXd& b); - + + VectorXd normalize_laplacian(MatrixXd& L); + bool call_symeigssolver(MatrixXd& L); + bool call_symeigshiftssolver(MatrixXd& L); + void generate_knn_matrix(); - void eigendecomposition(); - void fast_eigendecomposition(); - void kmeans(); + void eigendecomposition(bool raw_matrix=true); + void arpack_eigendecomposition(); - MatrixXd X, K, eigenvectors; + void kmeans(); + + VectorXd d; // for KNN affinity matrix, diagnoal W VectorXd eigenvalues, cumulative; unsigned int centers, kernel_type, normalise, max_iters, knn; double sigma, constant, order; @@ -72,6 +81,12 @@ class Spectral{ int npass, n_maxiter; // max iteration of EM int power_iter; std::vector assignments; + + double** data; + int nrows; + int ncols; + bool is_mutual; + Gda::DistUtils* dist_util; }; #endif diff --git a/Algorithms/splittree.cpp b/Algorithms/splittree.cpp new file mode 100755 index 000000000..d141501e5 --- /dev/null +++ b/Algorithms/splittree.cpp @@ -0,0 +1,269 @@ +#include +#include +#include +#include + +#include "splittree.h" + + + +// Checks whether a point lies in a cell +bool TreeCell::containsPoint(double point[]) +{ + for (int i = 0; i< n_dims; ++i) { + if (abs_d(center[i] - point[i]) > width[i]) { + return false; + } + } + return true; +} + + +// Default constructor for quadtree -- build tree, too! +SplitTree::SplitTree(double* inp_data, int N, int no_dims) +{ + QT_NO_DIMS = no_dims; + num_children = 1 << no_dims; + + // Compute mean, width, and height of current map (boundaries of SplitTree) + double* mean_Y = new double[QT_NO_DIMS]; + for (int d = 0; d < QT_NO_DIMS; d++) { + mean_Y[d] = .0; + } + + double* min_Y = new double[QT_NO_DIMS]; + for (int d = 0; d < QT_NO_DIMS; d++) { + min_Y[d] = DBL_MAX; + } + double* max_Y = new double[QT_NO_DIMS]; + for (int d = 0; d < QT_NO_DIMS; d++) { + max_Y[d] = -DBL_MAX; + } + + for (int n = 0; n < N; n++) { + for (int d = 0; d < QT_NO_DIMS; d++) { + mean_Y[d] += inp_data[n * QT_NO_DIMS + d]; + min_Y[d] = mind(min_Y[d], inp_data[n * QT_NO_DIMS + d]); + max_Y[d] = maxd(max_Y[d], inp_data[n * QT_NO_DIMS + d]); + } + + } + + double* width_Y = new double[QT_NO_DIMS]; + for (int d = 0; d < QT_NO_DIMS; d++) { + mean_Y[d] /= (double) N; + width_Y[d] = maxd(max_Y[d] - mean_Y[d], mean_Y[d] - min_Y[d]) + 1e-5; + } + + // Construct SplitTree + init(NULL, inp_data, mean_Y, width_Y); + fill(N); + delete[] max_Y; delete[] min_Y; +} + +// Constructor for SplitTree with particular size and parent (do not fill the tree) +SplitTree::SplitTree(SplitTree* inp_parent, double* inp_data, double* mean_Y, double* width_Y) +{ + QT_NO_DIMS = inp_parent->QT_NO_DIMS; + num_children = 1 << QT_NO_DIMS; + + init(inp_parent, inp_data, mean_Y, width_Y); +} + + +// Main initialization function +void SplitTree::init(SplitTree* inp_parent, double* inp_data, double* mean_Y, double* width_Y) +{ + // parent = inp_parent; + data = inp_data; + is_leaf = true; + size = 0; + cum_size = 0; + + boundary.center = mean_Y; + boundary.width = width_Y; + boundary.n_dims = QT_NO_DIMS; + + index[0] = 0; + + center_of_mass = new double[QT_NO_DIMS]; + for (int i = 0; i < QT_NO_DIMS; i++) { + center_of_mass[i] = .0; + } +} + + +// Destructor for SplitTree +SplitTree::~SplitTree() +{ + for(unsigned int i = 0; i != children.size(); i++) { + delete children[i]; + } + delete[] center_of_mass; +} + + +// Insert a point into the SplitTree +bool SplitTree::insert(int new_index) +{ + // Ignore objects which do not belong in this quad tree + double* point = data + new_index * QT_NO_DIMS; + if (!boundary.containsPoint(point)) { + return false; + } + + // Online update of cumulative size and center-of-mass + cum_size++; + double mult1 = (double) (cum_size - 1) / (double) cum_size; + double mult2 = 1.0 / (double) cum_size; + for (int d = 0; d < QT_NO_DIMS; d++) { + center_of_mass[d] = center_of_mass[d] * mult1 + mult2 * point[d]; + } + + // If there is space in this quad tree and it is a leaf, add the object here + if (is_leaf && size < QT_NODE_CAPACITY) { + index[size] = new_index; + size++; + return true; + } + + // Don't add duplicates for now (this is not very nice) + bool any_duplicate = false; + for (int n = 0; n < size; n++) { + bool duplicate = true; + for (int d = 0; d < QT_NO_DIMS; d++) { + if (point[d] != data[index[n] * QT_NO_DIMS + d]) { duplicate = false; break; } + } + any_duplicate = any_duplicate | duplicate; + } + if (any_duplicate) { + return true; + } + + // Otherwise, we need to subdivide the current cell + if (is_leaf) { + subdivide(); + } + + // Find out where the point can be inserted + for (int i = 0; i < num_children; ++i) { + if (children[i]->insert(new_index)) { + return true; + } + } + + // Otherwise, the point cannot be inserted (this should never happen) + // printf("%s\n", "No no, this should not happen"); + return false; +} + +int *get_bits(int n, int bitswanted){ + int *bits = new int[bitswanted]; + + int k; + for(k=0; k> k; + bits[k] = thebit; + } + + return bits; +} + +// Create four children which fully divide this cell into four quads of equal area +void SplitTree::subdivide() { + + // Create children + double* new_centers = new double[2 * QT_NO_DIMS]; + for(int i = 0; i < QT_NO_DIMS; ++i) { + new_centers[i*2] = boundary.center[i] - .5 * boundary.width[i]; + new_centers[i*2 + 1] = boundary.center[i] + .5 * boundary.width[i]; + } + + for (int i = 0; i < num_children; ++i) { + int *bits = get_bits(i, QT_NO_DIMS); + + double* mean_Y = new double[QT_NO_DIMS]; + double* width_Y = new double[QT_NO_DIMS]; + + // fill the means and width + for (int d = 0; d < QT_NO_DIMS; d++) { + mean_Y[d] = new_centers[d*2 + bits[d]]; + width_Y[d] = .5*boundary.width[d]; + } + + SplitTree* qt = new SplitTree(this, data, mean_Y, width_Y); + children.push_back(qt); + delete[] bits; + } + delete[] new_centers; + + // Move existing points to correct children + for (int i = 0; i < size; i++) { + // bool flag = false; + for (int j = 0; j < num_children; j++) { + if (children[j]->insert(index[i])) { + // flag = true; + break; + } + } + // if (flag == false) { + index[i] = -1; + // } + } + + // This node is not leaf now + // Empty it + size = 0; + is_leaf = false; +} + + +// Build SplitTree on dataset +void SplitTree::fill(int N) +{ + for (int i = 0; i < N; i++) { + insert(i); + } +} + + +// Compute non-edge forces using Barnes-Hut algorithm +void SplitTree::computeNonEdgeForces(int point_index, double theta, double* neg_f, double* sum_Q) +{ + // Make sure that we spend no time on empty nodes or self-interactions + if (cum_size == 0 || (is_leaf && size == 1 && index[0] == point_index)) { + return; + } + // Compute distance between point and center-of-mass + double D = .0; + int ind = point_index * QT_NO_DIMS; + + for (int d = 0; d < QT_NO_DIMS; d++) { + double t = data[ind + d] - center_of_mass[d]; + D += t * t; + } + + // Check whether we can use this node as a "summary" + double m = -1; + for (int i = 0; i < QT_NO_DIMS; ++i) { + m = maxd(m, boundary.width[i]); + } + if (is_leaf || m / sqrt(D) < theta) { + + // Compute and add t-SNE force between point and current node + double Q = 1.0 / (1.0 + D); + *sum_Q += cum_size * Q; + double mult = cum_size * Q * Q; + for (int d = 0; d < QT_NO_DIMS; d++) { + neg_f[d] += mult * (data[ind + d] - center_of_mass[d]); + } + } + else { + // Recursively apply Barnes-Hut to children + for (int i = 0; i < num_children; ++i) { + children[i]->computeNonEdgeForces(point_index, theta, neg_f, sum_Q); + } + } +} diff --git a/Algorithms/splittree.h b/Algorithms/splittree.h new file mode 100755 index 000000000..26ac41f54 --- /dev/null +++ b/Algorithms/splittree.h @@ -0,0 +1,82 @@ +/* + * quadtree.h + * Header file for a quadtree. + * + * Created by Laurens van der Maaten. + * Copyright 2012, Delft University of Technology. All rights reserved. + * + * Multicore version by Dmitry Ulyanov, 2016. dmitry.ulyanov.msu@gmail.com + */ + +#include +#include + +#ifndef SPLITTREE_H +#define SPLITREE_H + +static inline double mind(double x, double y) +{ + return x <= y ? x : y; +} +static inline double maxd(double x, double y) +{ + return x <= y ? y : x; +} +static inline double abs_d(double x) +{ + return x <= 0 ? -x : x; +} + +class TreeCell { + +public: + double* center; + double* width; + int n_dims; + bool containsPoint(double point[]); + ~TreeCell() { + delete[] center; + delete[] width; + } +}; + + +class SplitTree +{ + + // Fixed constants + static const int QT_NODE_CAPACITY = 1; + + // Properties of this node in the tree + int QT_NO_DIMS; + bool is_leaf; + int size; + int cum_size; + + // Axis-aligned bounding box stored as a center with half-dimensions to represent the boundaries of this quad tree + TreeCell boundary; + + // Indices in this quad tree node, corresponding center-of-mass, and list of all children + double* data; + double* center_of_mass; + int index[QT_NODE_CAPACITY]; + + int num_children; + std::vector children; +public: + + + SplitTree(double* inp_data, int N, int no_dims); + SplitTree(SplitTree* inp_parent, double* inp_data, double* mean_Y, double* width_Y); + ~SplitTree(); + void construct(TreeCell boundary); + bool insert(int new_index); + void subdivide(); + void computeNonEdgeForces(int point_index, double theta, double* neg_f, double* sum_Q); +private: + + void init(SplitTree* inp_parent, double* inp_data, double* mean_Y, double* width_Y); + void fill(int N); +}; + +#endif diff --git a/Algorithms/threadpool.h b/Algorithms/threadpool.h new file mode 100644 index 000000000..1f4924f8b --- /dev/null +++ b/Algorithms/threadpool.h @@ -0,0 +1,242 @@ +#ifndef __THREAD_POOL_H___ +#define __THREAD_POOL_H___ + +#include +#include +#include + +#ifndef __JSGEODA__ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../GdaConst.h" + +typedef boost::function job_t; + +class thread_pool +{ +private: + boost::mutex mx; + boost::condition_variable cv; + + boost::container::deque _queue; + + boost::thread_group pool; + + boost::atomic_bool shutdown; + static void worker_thread(thread_pool& q) + { + while (boost::optional job = q.dequeue()) + (*job)(); + } + +public: + thread_pool() : shutdown(false) { + int cores = boost::thread::hardware_concurrency(); + if (GdaConst::gda_set_cpu_cores) cores = GdaConst::gda_cpu_cores; + if (cores > 1) cores = cores -1; + for (int i = 0; i < cores; ++i) + pool.create_thread(boost::bind(worker_thread, boost::ref(*this))); + } + + void enqueue(job_t job) + { + boost::lock_guard lk(mx); + _queue.push_back(job); + + cv.notify_one(); + } + + boost::optional dequeue() + { + boost::unique_lock lk(mx); + namespace phx = boost::phoenix; + + cv.wait(lk, phx::ref(shutdown) || !phx::empty(phx::ref(_queue))); + + if (_queue.empty()) + return boost::none; + + job_t job = _queue.front(); + _queue.pop_front(); + + return job; + } + + ~thread_pool() + { + shutdown = true; + { + boost::lock_guard lk(mx); + cv.notify_all(); + } + + pool.join_all(); + } +}; + +#else + +#include + +class Task { +public: + Task() {} + ~Task() {} + virtual void run()=0; + virtual void indicateTaken()=0; +}; + +class WorkQueue { +public: + WorkQueue() { + pthread_mutex_init(&qmtx,0); + pthread_cond_init(&wcond, 0); + } + ~WorkQueue() { + pthread_mutex_destroy(&qmtx); + pthread_cond_destroy(&wcond); + } + Task *nextTask() { + Task *nt; + pthread_mutex_lock(&qmtx); + if (finished && tasks.size() == 0) { + nt = 0; + } else { + if (tasks.size()==0) { + pthread_cond_wait(&wcond, &qmtx); + } + nt = tasks.front(); + tasks.pop(); + } + pthread_mutex_unlock(&qmtx); + return nt; + } + void addTask(Task *nt) { + if (!finished) { + pthread_mutex_lock(&qmtx); + tasks.push(nt); + pthread_cond_signal(&wcond); + pthread_mutex_unlock(&qmtx); + } + } + void finish() { + pthread_mutex_lock(&qmtx); + finished = true; + pthread_cond_signal(&wcond); + pthread_mutex_unlock(&qmtx); + } + bool hasWork() { + return (tasks.size()>0); + } + +private: + std::queue tasks; + bool finished; + pthread_mutex_t qmtx; + pthread_cond_t wcond; +}; + +static void *getWork(void* param) { + Task *mw = 0; + WorkQueue *wq = (WorkQueue*)param; + while (mw = wq->nextTask()) { + mw->indicateTaken(); + mw->run(); + delete mw; + } + return 0; +} + +class ThreadPool { +public: + ThreadPool(int n) : _numThreads(n) { + printf("Creating a thread pool with %d threads\n", n); + threads = new pthread_t[n]; + for (int i=0; i< n; ++i) { + pthread_create(&(threads[i]), 0, getWork, &workQueue); + } + } + + ~ThreadPool() { + workQueue.finish(); + for (int i=0; i<_numThreads; ++i) { + pthread_join(threads[i], 0); + } + delete [] threads; + } + + void addTask(Task *nt) { + workQueue.addTask(nt); + } + void finish() { + workQueue.finish(); + } + bool hasWork() { + return workQueue.hasWork(); + } + void waitForCompletion() { + while (workQueue.hasWork()) {} + } + +private: + pthread_t *threads; + int _numThreads; + WorkQueue workQueue; +}; + +static pthread_mutex_t console_mutex = PTHREAD_MUTEX_INITIALIZER; +void showTask(int n) { + pthread_mutex_lock(&console_mutex); + printf("Adding fibonacci task %d\n", n); + pthread_mutex_unlock(&console_mutex); +} + +class FibTask : public Task { +public: + FibTask(int n) : Task(), _n(n) {} + ~FibTask() { + pthread_mutex_lock(&console_mutex); + printf("Fibonacci task %d being deleted\n", _n); + pthread_mutex_unlock(&console_mutex); + } + virtual void run() { + int val = innerFib(_n); + pthread_mutex_lock(&console_mutex); + printf("Fibd %d = %d\n",_n, val); + pthread_mutex_unlock(&console_mutex); + } + virtual void indicateTaken() { + pthread_mutex_lock(&console_mutex); + printf("Took fibonacci task %d\n", _n); + pthread_mutex_unlock(&console_mutex); + } +private: + int innerFib(int n) { + if (n<=1) { return 1; } + return innerFib(n-1) + innerFib(n-2); + } + int _n; +}; + +int test() { + ThreadPool *tp = new ThreadPool(8); + for (int i=0;i<30; ++i) { + int rv = rand() % 30 + 9; + showTask(rv); + tp->addTask(new FibTask(rv)); + } + tp->finish(); + tp->waitForCompletion(); + delete tp; + printf("Done with all work!\n"); +} + +#endif +#endif \ No newline at end of file diff --git a/Algorithms/tsne.cpp b/Algorithms/tsne.cpp new file mode 100755 index 000000000..ebb599bab --- /dev/null +++ b/Algorithms/tsne.cpp @@ -0,0 +1,691 @@ +/* + * tsne.cpp + * Implementation of both standard and Barnes-Hut-SNE. + * + * Created by Laurens van der Maaten. + * Copyright 2012, Delft University of Technology. All rights reserved. + * + * Multicore version by Dmitry Ulyanov, 2016. dmitry.ulyanov.msu@gmail.com + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _OPENMP +#include +#endif + +#include + +// #include "quadtree.h" +#include "splittree.h" +#include "vptree.h" +#include "tsne.h" + + +#ifdef _OPENMP + #define NUM_THREADS(N) ((N) >= 0 ? (N) : omp_get_num_procs() + (N) + 1) +#else + #define NUM_THREADS(N) (1) +#endif + +TSNE::TSNE(double* X, int N, int D, double* Y, + int no_dims, double perplexity, double theta , + int num_threads, int max_iter, int n_iter_early_exag, + int random_state, bool skip_random_init, int verbose, + double early_exaggeration, double learning_rate, + double *final_error) +: X(X), N(N), D(D), Y(Y), no_dims(no_dims), perplexity(perplexity) , theta(theta), +num_threads(num_threads), max_iter(max_iter), +n_iter_early_exag(n_iter_early_exag), random_state(random_state), +skip_random_init(skip_random_init), verbose(verbose), +early_exaggeration(early_exaggeration), learning_rate(learning_rate), +final_error(final_error), is_stop(false), m_pause(false) +{ + +} + +void TSNE::set_paused(bool new_value) +{ + { + boost::unique_lock lock(m_pause_mutex); + m_pause = new_value; + } + + m_pause_changed.notify_all(); +} + +void TSNE::set_speed(int speed) +{ + m_speed = speed; +} + +void TSNE::stop() +{ + is_stop = true; +} +/* + Perform t-SNE + X -- double matrix of size [N, D] + D -- input dimensionality + Y -- array to fill with the result of size [N, no_dims] + no_dims -- target dimentionality +*/ +void TSNE::run(boost::lockfree::queue& tsne_queue, + std::vector& tsne_log, + std::vector >& results) +{ + + if (N - 1 < 3 * perplexity) { + perplexity = (N - 1) / 3; + if (verbose) + fprintf(stderr, "Perplexity too large for the number of data points! Adjusting ...\n"); + } + +#ifdef _OPENMP + omp_set_num_threads(NUM_THREADS(num_threads)); +#if _OPENMP >= 200805 + omp_set_schedule(omp_sched_guided, 0); +#endif +#endif + + /* + ====================== + Step 1 + ====================== + */ + std::ostringstream ss; + if (verbose) + fprintf(stderr, "Using no_dims = %d, perplexity = %f, and theta = %f\n", no_dims, perplexity, theta); + ss << "Using no_dims = " << no_dims << ", perplexity = " << perplexity << ", and theta = " << theta << "\n\n"; + // add log + tsne_log.push_back(ss.str()); + ss.str(""); + + // Set learning parameters + float total_time = .0; + time_t start, end; + int stop_lying_iter = n_iter_early_exag, mom_switch_iter = n_iter_early_exag; + double momentum = .5, final_momentum = .8; + double eta = learning_rate; + + // Allocate some memory + double* dY = (double*) malloc(N * no_dims * sizeof(double)); + double* uY = (double*) calloc(N * no_dims , sizeof(double)); + double* gains = (double*) malloc(N * no_dims * sizeof(double)); + if (dY == NULL || uY == NULL || gains == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + for (int i = 0; i < N * no_dims; i++) { + gains[i] = 1.0; + } + + // Normalize input data (to prevent numerical problems) + if (verbose) + fprintf(stderr, "Computing input similarities...\n"); + + start = time(0); + zeroMean(X, N, D); + double max_X = .0; + for (int i = 0; i < N * D; i++) { + if (X[i] > max_X) max_X = X[i]; + } + for (int i = 0; i < N * D; i++) { + X[i] /= max_X; + } + + // Compute input similarities + int* row_P; int* col_P; double* val_P; + + // Compute asymmetric pairwise input similarities + computeGaussianPerplexity(X, N, D, &row_P, &col_P, &val_P, perplexity, (int) (3 * perplexity), verbose); + + // Symmetrize input similarities + symmetrizeMatrix(&row_P, &col_P, &val_P, N); + double sum_P = .0; + for (int i = 0; i < row_P[N]; i++) { + sum_P += val_P[i]; + } + for (int i = 0; i < row_P[N]; i++) { + val_P[i] /= sum_P; + } + + end = time(0); + if (verbose) + fprintf(stderr, "Done in %4.2f seconds (sparsity = %f)!\nLearning embedding...\n", (float)(end - start) , (double) row_P[N] / ((double) N * (double) N)); + + /* + ====================== + Step 2 + ====================== + */ + // Lie about the P-values + for (int i = 0; i < row_P[N]; i++) { + val_P[i] *= early_exaggeration; + } + + // Initialize solution (randomly), unless Y is already initialized + bool init_from_Y = false; // always start from random + + if (init_from_Y) { + stop_lying_iter = 0; // Immediately stop lying. Passed Y is close to the true solution. + } + else { + if (skip_random_init != true) { + if(random_state >= 0) { + srand((unsigned int) random_state); + } else { + srand(time(NULL)); + } + } + for (int i = 0; i < N * no_dims; i++) { + Y[i] = randn(); + } + } + + // Perform main training loop + int executed_iter = 0; + start = time(0); + for (int iter = 0; iter < max_iter; iter++) { + executed_iter += 1; + + bool need_eval_error = (true && ((iter > 0 && (iter+1) % 50 == 0) || (iter == max_iter - 1))); + + // Compute approximate gradient + double error = computeGradient(row_P, col_P, val_P, Y, N, no_dims, dY, theta, need_eval_error); + + for (int i = 0; i < N * no_dims; i++) { + // Update gains + gains[i] = (sign(dY[i]) != sign(uY[i])) ? (gains[i] + .2) : (gains[i] * .8 + .01); + + // Perform gradient update (with momentum and gains) + uY[i] = momentum * uY[i] - eta * gains[i] * dY[i]; + Y[i] = Y[i] + uY[i]; + } + + // Make solution zero-mean + zeroMean(Y, N, no_dims); + + // Stop lying about the P-values after a while, and switch momentum + if (iter == stop_lying_iter) { + for (int i = 0; i < row_P[N]; i++) { + val_P[i] /= early_exaggeration; + } + } + if (iter == mom_switch_iter) { + momentum = final_momentum; + } + + // Print out progress + if (need_eval_error) { + end = time(0); + + if (iter == 0) { + //fprintf(stderr, "Iteration %d: error is %f\n", iter + 1, error); + } else { + total_time += (float) (end - start); + //fprintf(stderr, "Iteration %d: error is %f (50 iterations in %4.2f seconds)\n", iter + 1, error, (float) (end - start) ); + ss << "Iteration " << iter + 1 << ": error is " << error << "\n"; + // add log + tsne_log.push_back(ss.str()); + ss.str(""); + } + + start = time(0); + } + + // For other thread to fetch the intermedian results for animation + { + if (is_stop) { + tsne_queue.push(-1); // -1 for pause-stop + break; + } + // sleep option + boost::unique_lock lock(m_pause_mutex); + if (m_speed > 0) { + //boost::this_thread::sleep_for(boost::chrono::milliseconds(m_speed)); + wxMilliSleep(m_speed); + } + // pause option + + while(m_pause) + { + m_pause_changed.wait(lock); + } + // save results to iter-th slot + for (int i = 0; i < N * no_dims; i++) { + results[iter].push_back(Y[i]); + } + tsne_queue.push(iter); // thread-safe + } + } + end = time(0); total_time += (float) (end - start) ; + + if (final_error != NULL) + *final_error = evaluateError(row_P, col_P, val_P, Y, N, no_dims, theta); + + // Clean up memory + free(dY); + free(uY); + free(gains); + + free(row_P); row_P = NULL; + free(col_P); col_P = NULL; + free(val_P); val_P = NULL; + + if (verbose) + fprintf(stderr, "Fitting performed in %4.2f seconds.\n", total_time); +} + +// Compute gradient of the t-SNE cost function (using Barnes-Hut algorithm) +double TSNE::computeGradient(int* inp_row_P, int* inp_col_P, double* inp_val_P, double* Y, int N, int no_dims, double* dC, double theta, bool eval_error) +{ + // Construct quadtree on current map + SplitTree* tree = new SplitTree(Y, N, no_dims); + + // Compute all terms required for t-SNE gradient + double* Q = new double[N]; + double* pos_f = new double[N * no_dims](); + double* neg_f = new double[N * no_dims](); + + double P_i_sum = 0.; + double C = 0.; + + if (pos_f == NULL || neg_f == NULL) { + fprintf(stderr, "Memory allocation failed!\n"); exit(1); + } + +#ifdef _OPENMP + #pragma omp parallel for reduction(+:P_i_sum,C) +#endif + for (int n = 0; n < N; n++) { + // Edge forces + int ind1 = n * no_dims; + for (int i = inp_row_P[n]; i < inp_row_P[n + 1]; i++) { + + // Compute pairwise distance and Q-value + double D = .0; + int ind2 = inp_col_P[i] * no_dims; + for (int d = 0; d < no_dims; d++) { + double t = Y[ind1 + d] - Y[ind2 + d]; + D += t * t; + } + + // Sometimes we want to compute error on the go + if (eval_error) { + P_i_sum += inp_val_P[i]; + C += inp_val_P[i] * log((inp_val_P[i] + FLT_MIN) / ((1.0 / (1.0 + D)) + FLT_MIN)); + } + + D = inp_val_P[i] / (1.0 + D); + // Sum positive force + for (int d = 0; d < no_dims; d++) { + pos_f[ind1 + d] += D * (Y[ind1 + d] - Y[ind2 + d]); + } + } + + // NoneEdge forces + double this_Q = .0; + tree->computeNonEdgeForces(n, theta, neg_f + n * no_dims, &this_Q); + Q[n] = this_Q; + } + + double sum_Q = 0.; + for (int i = 0; i < N; i++) { + sum_Q += Q[i]; + } + + // Compute final t-SNE gradient + for (int i = 0; i < N * no_dims; i++) { + dC[i] = pos_f[i] - (neg_f[i] / sum_Q); + } + + delete tree; + delete[] pos_f; + delete[] neg_f; + delete[] Q; + + C += P_i_sum * log(sum_Q); + + return C; +} + + +// Evaluate t-SNE cost function (approximately) +double TSNE::evaluateError(int* row_P, int* col_P, double* val_P, double* Y, int N, int no_dims, double theta) +{ + + // Get estimate of normalization term + SplitTree* tree = new SplitTree(Y, N, no_dims); + + double* buff = new double[no_dims](); + double sum_Q = .0; + for (int n = 0; n < N; n++) { + tree->computeNonEdgeForces(n, theta, buff, &sum_Q); + } + delete tree; + delete[] buff; + + // Loop over all edges to compute t-SNE error + double C = .0; +#ifdef _OPENMP + #pragma omp parallel for reduction(+:C) +#endif + for (int n = 0; n < N; n++) { + int ind1 = n * no_dims; + for (int i = row_P[n]; i < row_P[n + 1]; i++) { + double Q = .0; + int ind2 = col_P[i] * no_dims; + for (int d = 0; d < no_dims; d++) { + double b = Y[ind1 + d] - Y[ind2 + d]; + Q += b * b; + } + Q = (1.0 / (1.0 + Q)) / sum_Q; + C += val_P[i] * log((val_P[i] + FLT_MIN) / (Q + FLT_MIN)); + } + } + + return C; +} + +// Compute input similarities with a fixed perplexity using ball trees (this function allocates memory another function should free) +void TSNE::computeGaussianPerplexity(double* X, int N, int D, int** _row_P, int** _col_P, double** _val_P, double perplexity, int K, int verbose) { + + if (perplexity > K) fprintf(stderr, "Perplexity should be lower than K!\n"); + + // Allocate the memory we need + *_row_P = (int*) malloc((N + 1) * sizeof(int)); + *_col_P = (int*) calloc(N * K, sizeof(int)); + *_val_P = (double*) calloc(N * K, sizeof(double)); + if (*_row_P == NULL || *_col_P == NULL || *_val_P == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + + /* + row_P -- offsets for `col_P` (i) + col_P -- K nearest neighbors indices (j) + val_P -- p_{i | j} + */ + + int* row_P = *_row_P; + int* col_P = *_col_P; + double* val_P = *_val_P; + + row_P[0] = 0; + for (int n = 0; n < N; n++) { + row_P[n + 1] = row_P[n] + K; + } + + // Build ball tree on data set + VpTree* tree = new VpTree(); + std::vector obj_X(N, DataPoint(D, -1, X)); + for (int n = 0; n < N; n++) { + obj_X[n] = DataPoint(D, n, X + n * D); + } + tree->create(obj_X); + + // Loop over all points to find nearest neighbors + if (verbose) + fprintf(stderr, "Building tree...\n"); + + int steps_completed = 0; +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int n = 0; n < N; n++) + { + std::vector cur_P(K); + std::vector indices; + std::vector distances; + + // Find nearest neighbors + tree->search(obj_X[n], K + 1, &indices, &distances); + + // Initialize some variables for binary search + bool found = false; + double beta = 1.0; + double min_beta = -DBL_MAX; + double max_beta = DBL_MAX; + double tol = 1e-5; + + // Iterate until we found a good perplexity + int iter = 0; double sum_P; + while (!found && iter < 200) { + + // Compute Gaussian kernel row + for (int m = 0; m < K; m++) { + cur_P[m] = exp(-beta * distances[m + 1]); + } + + // Compute entropy of current row + sum_P = DBL_MIN; + for (int m = 0; m < K; m++) { + sum_P += cur_P[m]; + } + double H = .0; + for (int m = 0; m < K; m++) { + H += beta * (distances[m + 1] * cur_P[m]); + } + H = (H / sum_P) + log(sum_P); + + // Evaluate whether the entropy is within the tolerance level + double Hdiff = H - log(perplexity); + if (Hdiff < tol && -Hdiff < tol) { + found = true; + } + else { + if (Hdiff > 0) { + min_beta = beta; + if (max_beta == DBL_MAX || max_beta == -DBL_MAX) + beta *= 2.0; + else + beta = (beta + max_beta) / 2.0; + } + else { + max_beta = beta; + if (min_beta == -DBL_MAX || min_beta == DBL_MAX) + beta /= 2.0; + else + beta = (beta + min_beta) / 2.0; + } + } + + // Update iteration counter + iter++; + } + + // Row-normalize current row of P and store in matrix + for (int m = 0; m < K; m++) { + cur_P[m] /= sum_P; + } + for (int m = 0; m < K; m++) { + col_P[row_P[n] + m] = indices[m + 1].index(); + val_P[row_P[n] + m] = cur_P[m]; + } + + // Print progress +#ifdef _OPENMP + #pragma omp atomic +#endif + ++steps_completed; + + if (verbose && steps_completed % (N / 10) == 0) + { +#ifdef _OPENMP + #pragma omp critical +#endif + fprintf(stderr, " - point %d of %d\n", steps_completed, N); + } + } + + // Clean up memory + obj_X.clear(); + delete tree; +} + +void TSNE::symmetrizeMatrix(int** _row_P, int** _col_P, double** _val_P, int N) { + + // Get sparse matrix + int* row_P = *_row_P; + int* col_P = *_col_P; + double* val_P = *_val_P; + + // Count number of elements and row counts of symmetric matrix + int* row_counts = (int*) calloc(N, sizeof(int)); + if (row_counts == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + for (int n = 0; n < N; n++) { + for (int i = row_P[n]; i < row_P[n + 1]; i++) { + + // Check whether element (col_P[i], n) is present + bool present = false; + for (int m = row_P[col_P[i]]; m < row_P[col_P[i] + 1]; m++) { + if (col_P[m] == n) { + present = true; + break; + } + } + if (present) { + row_counts[n]++; + } + else { + row_counts[n]++; + row_counts[col_P[i]]++; + } + } + } + int no_elem = 0; + for (int n = 0; n < N; n++) { + no_elem += row_counts[n]; + } + // Allocate memory for symmetrized matrix + int* sym_row_P = (int*) malloc((N + 1) * sizeof(int)); + int* sym_col_P = (int*) malloc(no_elem * sizeof(int)); + double* sym_val_P = (double*) malloc(no_elem * sizeof(double)); + if (sym_row_P == NULL || sym_col_P == NULL || sym_val_P == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + + // Construct new row indices for symmetric matrix + sym_row_P[0] = 0; + for (int n = 0; n < N; n++) sym_row_P[n + 1] = sym_row_P[n] + row_counts[n]; + + // Fill the result matrix + int* offset = (int*) calloc(N, sizeof(int)); + if (offset == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + for (int n = 0; n < N; n++) { + for (int i = row_P[n]; i < row_P[n + 1]; i++) { // considering element(n, col_P[i]) + + // Check whether element (col_P[i], n) is present + bool present = false; + for (int m = row_P[col_P[i]]; m < row_P[col_P[i] + 1]; m++) { + if (col_P[m] == n) { + present = true; + if (n <= col_P[i]) { // make sure we do not add elements twice + sym_col_P[sym_row_P[n] + offset[n]] = col_P[i]; + sym_col_P[sym_row_P[col_P[i]] + offset[col_P[i]]] = n; + sym_val_P[sym_row_P[n] + offset[n]] = val_P[i] + val_P[m]; + sym_val_P[sym_row_P[col_P[i]] + offset[col_P[i]]] = val_P[i] + val_P[m]; + } + } + } + + // If (col_P[i], n) is not present, there is no addition involved + if (!present) { + sym_col_P[sym_row_P[n] + offset[n]] = col_P[i]; + sym_col_P[sym_row_P[col_P[i]] + offset[col_P[i]]] = n; + sym_val_P[sym_row_P[n] + offset[n]] = val_P[i]; + sym_val_P[sym_row_P[col_P[i]] + offset[col_P[i]]] = val_P[i]; + } + + // Update offsets + if (!present || (n <= col_P[i])) { + offset[n]++; + if (col_P[i] != n) { + offset[col_P[i]]++; + } + } + } + } + + // Divide the result by two + for (int i = 0; i < no_elem; i++) { + sym_val_P[i] /= 2.0; + } + + // Return symmetrized matrices + free(*_row_P); *_row_P = sym_row_P; + free(*_col_P); *_col_P = sym_col_P; + free(*_val_P); *_val_P = sym_val_P; + + // Free up some memery + free(offset); offset = NULL; + free(row_counts); row_counts = NULL; +} + + +// Makes data zero-mean +void TSNE::zeroMean(double* X, int N, int D) { + + // Compute data mean + double* mean = (double*) calloc(D, sizeof(double)); + if (mean == NULL) { fprintf(stderr, "Memory allocation failed!\n"); exit(1); } + for (int n = 0; n < N; n++) { + for (int d = 0; d < D; d++) { + mean[d] += X[n * D + d]; + } + } + for (int d = 0; d < D; d++) { + mean[d] /= (double) N; + } + + // Subtract data mean + for (int n = 0; n < N; n++) { + for (int d = 0; d < D; d++) { + X[n * D + d] -= mean[d]; + } + } + free(mean); mean = NULL; +} + + +// Generates a Gaussian random number +double TSNE::randn() { + double x, radius; + do { + x = 2 * (rand() / ((double) RAND_MAX + 1)) - 1; + double y = 2 * (rand() / ((double) RAND_MAX + 1)) - 1; + radius = (x * x) + (y * y); + } while ((radius >= 1.0) || (radius == 0.0)); + radius = sqrt(-2 * log(radius) / radius); + x *= radius; + return x; +} + +/* +extern "C" +{ + #ifdef _WIN32 + __declspec(dllexport) + #endif + extern void tsne_run_double(double* X, int N, int D, double* Y, + int no_dims = 2, double perplexity = 30, double theta = .5, + int num_threads = 1, int max_iter = 1000, int n_iter_early_exag = 250, + int random_state = -1, bool init_from_Y = false, int verbose = 0, + double early_exaggeration = 12, double learning_rate = 200, + double *final_error = NULL, int distance = 1) + { + if (verbose) + fprintf(stderr, "Performing t-SNE using %d cores.\n", NUM_THREADS(num_threads)); + if (distance == 0) { + TSNE tsne; + tsne.run(X, N, D, Y, no_dims, perplexity, theta, num_threads, max_iter, n_iter_early_exag, + random_state, init_from_Y, verbose, early_exaggeration, learning_rate, final_error); + } + else { + TSNE tsne; + tsne.run(X, N, D, Y, no_dims, perplexity, theta, num_threads, max_iter, n_iter_early_exag, + random_state, init_from_Y, verbose, early_exaggeration, learning_rate, final_error); + } + } +} +*/ diff --git a/Algorithms/tsne.h b/Algorithms/tsne.h new file mode 100755 index 000000000..6b598eb8c --- /dev/null +++ b/Algorithms/tsne.h @@ -0,0 +1,78 @@ +/* + * tsne.h + * Header file for t-SNE. + * + * Created by Laurens van der Maaten. + * Copyright 2012, Delft University of Technology. All rights reserved. + * + * Multicore version by Dmitry Ulyanov, 2016. dmitry.ulyanov.msu@gmail.com + */ + + +#ifndef TSNE_H +#define TSNE_H + +#include +#include +#include + + +#include "vptree.h" + +static inline double sign(double x) { return (x == .0 ? .0 : (x < .0 ? -1.0 : 1.0)); } + +class TSNE +{ +public: + TSNE(double* X, int N, int D, double* Y, + int no_dims = 2, double perplexity = 30, double theta = .5, + int num_threads = 1, int max_iter = 1000, + int n_iter_early_exag = 250, + int random_state = 0, bool init_from_Y = false, int verbose = 0, + double early_exaggeration = 12, double learning_rate = 200, + double *final_error = NULL); + + void stop(); + void set_paused(bool new_value); + void set_speed(int speed); + void run(boost::lockfree::queue& tsne_queue, + std::vector& tsne_log, + std::vector >& results); + + void symmetrizeMatrix(int** row_P, int** col_P, double** val_P, int N); + +private: + double computeGradient(int* inp_row_P, int* inp_col_P, double* inp_val_P, double* Y, int N, int D, double* dC, double theta, bool eval_error); + double evaluateError(int* row_P, int* col_P, double* val_P, double* Y, int N, int no_dims, double theta); + void zeroMean(double* X, int N, int D); + void computeGaussianPerplexity(double* X, int N, int D, int** _row_P, int** _col_P, double** _val_P, double perplexity, int K, int verbose); + double randn(); + + double* X; + int N; + int D; + double* Y; + int no_dims; + double perplexity; + double theta; + int num_threads; + int max_iter; + int n_iter_early_exag; + int random_state; + bool skip_random_init; + int verbose; + double early_exaggeration; + double learning_rate; + double *final_error; + int *act_iter; + std::string* report; + + bool is_stop; + int m_speed; + bool m_pause; // initialise to false in constructor! + boost::mutex m_pause_mutex; + boost::condition_variable m_pause_changed; +}; + +#endif + diff --git a/Algorithms/vptree.h b/Algorithms/vptree.h new file mode 100755 index 000000000..4d6ff0630 --- /dev/null +++ b/Algorithms/vptree.h @@ -0,0 +1,247 @@ +/* + * vptree.h + * Implementation of a vantage-point tree. + * + * Created by Laurens van der Maaten. + * Copyright 2012, Delft University of Technology. All rights reserved. + * + * Multicore version by Dmitry Ulyanov, 2016. dmitry.ulyanov.msu@gmail.com + */ + + +#include +#include +#include +#include +#include +#include + + +#ifndef VPTREE_H +#define VPTREE_H + +class DataPoint +{ + int _D; + int _ind; + +public: + double* _x; + DataPoint() { + _D = 1; + _ind = -1; + _x = NULL; + } + DataPoint(int D, int ind, double* x) { + _D = D; + _ind = ind; + _x = x; + } + DataPoint(const DataPoint& other) { // this makes a deep copy -- should not free anything + if (this != &other) { + _D = other.dimensionality(); + _ind = other.index(); + _x = other._x; + } + } + + DataPoint& operator= (const DataPoint& other) { // asignment should free old object + if (this != &other) { + _D = other.dimensionality(); + _ind = other.index(); + _x = other._x; + } + return *this; + } + int index() const { return _ind; } + int dimensionality() const { return _D; } + double x(int d) const { return _x[d]; } +}; + + +static inline double euclidean_distance_squared(const DataPoint &t1, const DataPoint &t2) { + double dd = .0; + for (int d = 0; d < t1.dimensionality(); d++) { + double t = (t1.x(d) - t2.x(d)); + dd += t * t; + } + return dd; +} + +static inline double euclidean_distance(const DataPoint &t1, const DataPoint &t2) { + double dd = .0; + for (int d = 0; d < t1.dimensionality(); d++) { + double t = (t1.x(d) - t2.x(d)); + dd += t * t; + } + return sqrt(dd); +} + + +class VpTree +{ +public: + // Default constructor + VpTree() : _root(0) {} + + // Destructor + ~VpTree() { + delete _root; + } + + // Function to create a new VpTree from data + void create(const std::vector& items) { + delete _root; + _items = items; + _root = buildFromPoints(0, items.size()); + } + + // Function that uses the tree to find the k nearest neighbors of target + void search(const DataPoint& target, int k, std::vector* results, std::vector* distances) + { + + // Use a priority queue to store intermediate results on + std::priority_queue heap; + + // Variable that tracks the distance to the farthest point in our results + double tau = DBL_MAX; + + // Perform the searcg + search(_root, target, k, heap, tau); + + // Gather final results + results->clear(); distances->clear(); + while (!heap.empty()) { + results->push_back(_items[heap.top().index]); + distances->push_back(heap.top().dist); + heap.pop(); + } + + // Results are in reverse order + std::reverse(results->begin(), results->end()); + std::reverse(distances->begin(), distances->end()); + } + +private: + std::vector _items; + + // Single node of a VP tree (has a point and radius; left children are closer to point than the radius) + struct Node + { + int index; // index of point in node + double threshold; // radius(?) + Node* left; // points closer by than threshold + Node* right; // points farther away than threshold + + Node() : + index(0), threshold(0.), left(0), right(0) {} + + ~Node() { // destructor + delete left; + delete right; + } + }* _root; + + + // An item on the intermediate result queue + struct HeapItem { + HeapItem( int index, double dist) : + index(index), dist(dist) {} + int index; + double dist; + bool operator<(const HeapItem& o) const { + return dist < o.dist; + } + }; + + // Distance comparator for use in std::nth_element + struct DistanceComparator + { + const DataPoint& item; + explicit DistanceComparator(const DataPoint& item) : item(item) {} + bool operator()(const DataPoint& a, const DataPoint& b) { + return euclidean_distance(item, a) < euclidean_distance(item, b); + } + }; + + // Function that (recursively) fills the tree + Node* buildFromPoints( int lower, int upper ) + { + if (upper == lower) { // indicates that we're done here! + return NULL; + } + + // Lower index is center of current node + Node* node = new Node(); + node->index = lower; + + if (upper - lower > 1) { // if we did not arrive at leaf yet + + // Choose an arbitrary point and move it to the start + int i = (int) ((double)rand() / RAND_MAX * (upper - lower - 1)) + lower; + std::swap(_items[lower], _items[i]); + + // Partition around the median distance + int median = (upper + lower) / 2; + std::nth_element(_items.begin() + lower + 1, + _items.begin() + median, + _items.begin() + upper, + DistanceComparator(_items[lower])); + + // Threshold of the new node will be the distance to the median + node->threshold = euclidean_distance(_items[lower], _items[median]); + + // Recursively build tree + node->index = lower; + node->left = buildFromPoints(lower + 1, median); + node->right = buildFromPoints(median, upper); + } + + // Return result + return node; + } + + // Helper function that searches the tree + void search(Node* node, const DataPoint& target, unsigned int k, std::priority_queue& heap, double& tau) + { + if (node == NULL) return; // indicates that we're done here + + // Compute distance between target and current node + double dist = euclidean_distance(_items[node->index], target); + + // If current node within radius tau + if (dist < tau) { + if (heap.size() == k) heap.pop(); // remove furthest node from result list (if we already have k results) + heap.push(HeapItem(node->index, dist)); // add current node to result list + if (heap.size() == k) tau = heap.top().dist; // update value of tau (farthest point in result list) + } + + // Return if we arrived at a leaf + if (node->left == NULL && node->right == NULL) { + return; + } + + // If the target lies within the radius of ball + if (dist < node->threshold) { + if (dist - tau <= node->threshold) { // if there can still be neighbors inside the ball, recursively search left child first + search(node->left, target, k, heap, tau); + } + + if (dist + tau >= node->threshold) { // if there can still be neighbors outside the ball, recursively search right child + search(node->right, target, k, heap, tau); + } + + // If the target lies outsize the radius of the ball + } else { + if (dist + tau >= node->threshold) { // if there can still be neighbors outside the ball, recursively search right child first + search(node->right, target, k, heap, tau); + } + + if (dist - tau <= node->threshold) { // if there can still be neighbors inside the ball, recursively search left child + search(node->left, target, k, heap, tau); + } + } + } +}; + +#endif diff --git a/BuildTools/macosx/GeoDa-C++11.xcodeproj/project.pbxproj b/BuildTools/macosx/GeoDa-C++11.xcodeproj/project.pbxproj deleted file mode 100644 index cd9f28943..000000000 --- a/BuildTools/macosx/GeoDa-C++11.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1675 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11B85BB1B18DC9C008B64EA /* Basemap.cpp */; }; - A11F1B7F184FDFB3006F5F98 /* OGRColumn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */; }; - A11F1B821850437A006F5F98 /* OGRTableOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11F1B801850437A006F5F98 /* OGRTableOperation.cpp */; }; - A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */; }; - A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */; }; - A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */; }; - A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */; }; - A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */; }; - A19F51501756A11E006E31B4 /* plugins in Resources */ = {isa = PBXBuildFile; fileRef = A19F514D1756A11E006E31B4 /* plugins */; }; - A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */; }; - A1B04ADD1B1921710045AA6F /* basemap_cache in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1B04ADC1B1921710045AA6F /* basemap_cache */; }; - A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */; }; - A1B93AC017D18735007F8195 /* ProjectConf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B93ABF17D18735007F8195 /* ProjectConf.cpp */; }; - A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */; }; - A1C194A31B38FC67003DA7CA /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1C194A21B38FC67003DA7CA /* libc++.dylib */; }; - A1C9F3ED18B55EE000E14394 /* FieldNameCorrectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C9F3EC18B55EE000E14394 /* FieldNameCorrectionDlg.cpp */; }; - A1CE3D331C1A427A0010F170 /* PublishDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */; }; - A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1D82DEE174D3EB6003DE20A /* ConnectDatasourceDlg.cpp */; }; - A1DA623A17BCBC070070CAAB /* AutoCompTextCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */; }; - A1E5BC841DBFE661005739E9 /* ReportBugDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */; }; - A1E77E1A177D6A2E00CC1037 /* ExportDataDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E77E18177D6A2E00CC1037 /* ExportDataDlg.cpp */; }; - A1E77FDC17889BE200CC1037 /* OGRTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E77FDA17889BE200CC1037 /* OGRTable.cpp */; }; - A1E78139178A90A100CC1037 /* OGRDatasourceProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78133178A90A100CC1037 /* OGRDatasourceProxy.cpp */; }; - A1E7813A178A90A100CC1037 /* OGRFieldProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78135178A90A100CC1037 /* OGRFieldProxy.cpp */; }; - A1E7813B178A90A100CC1037 /* OGRLayerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78137178A90A100CC1037 /* OGRLayerProxy.cpp */; }; - A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */; }; - A1EF332F18E35D8300E19375 /* LocaleSetupDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */; }; - A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */; }; - A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F1BA98178D46B8005A46E5 /* cache.sqlite */; }; - A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */; }; - DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */; }; - DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */; }; - DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0FC7E61A9EC17500A6715B /* CorrelogramAlgs.cpp */; }; - DD0FEBBC1909B7A000930418 /* NumCategoriesDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0FEBBA1909B7A000930418 /* NumCategoriesDlg.cpp */; }; - DD115EA312BBDDA000E1CC73 /* ProgressDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD115EA212BBDDA000E1CC73 /* ProgressDlg.cpp */; }; - DD181BC813A90445004B0EC2 /* SaveToTableDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD181BC613A90445004B0EC2 /* SaveToTableDlg.cpp */; }; - DD203F9D14C0C960006A731B /* MapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD203F9B14C0C960006A731B /* MapNewView.cpp */; }; - DD209598139F129900B9E648 /* GetisOrdChoiceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD209596139F129900B9E648 /* GetisOrdChoiceDlg.cpp */; }; - DD26CBE419A41A480092C0F2 /* WebViewExampleWin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD26CBE219A41A480092C0F2 /* WebViewExampleWin.cpp */; }; - DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A7240F2E26AA006B1E6D /* GenUtils.cpp */; }; - DD27EF050F2F6CBE009C5C42 /* ShapeFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */; }; - DD2A6FE0178C7F7C00197093 /* DataSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2A6FDE178C7F7C00197093 /* DataSource.cpp */; }; - DD2AE42A19D4F4CA00B23FB9 /* GdaJson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2AE42919D4F4CA00B23FB9 /* GdaJson.cpp */; }; - DD2B42B11522552B00888E51 /* BoxNewPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B42AF1522552B00888E51 /* BoxNewPlotView.cpp */; }; - DD2B433F1522A93700888E51 /* HistogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B433D1522A93700888E51 /* HistogramView.cpp */; }; - DD2B43421522A95100888E51 /* PCPNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B43401522A95100888E51 /* PCPNewView.cpp */; }; - DD2EB10219E6F0270073E36F /* geoda_prefs.json in CopyFiles */ = {isa = PBXBuildFile; fileRef = DD2EB10019E6EFC50073E36F /* geoda_prefs.json */; }; - DD30798E19ED80E0001E5E89 /* Lowess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD30798C19ED80E0001E5E89 /* Lowess.cpp */; }; - DD3079C719ED9F61001E5E89 /* LowessParamObservable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3079C419ED9F61001E5E89 /* LowessParamObservable.cpp */; }; - DD3079E319EDAE6C001E5E89 /* LowessParamDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3079E119EDAE6C001E5E89 /* LowessParamDlg.cpp */; }; - DD307DB919F0483B001E5E89 /* SmoothingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD307DB719F0483B001E5E89 /* SmoothingUtils.cpp */; }; - DD3082B319F709BB001E5E89 /* WebViewHelpWin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3082B119F709BB001E5E89 /* WebViewHelpWin.cpp */; }; - DD3BA0D0187111DE00CA4152 /* WeightsManPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3BA0CE187111DE00CA4152 /* WeightsManPtree.cpp */; }; - DD3BA4481871EE9A00CA4152 /* DefaultVarsPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3BA4461871EE9A00CA4152 /* DefaultVarsPtree.cpp */; }; - DD409DFB19FF099E00C21A2B /* ScatterPlotMatView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD409DF919FF099E00C21A2B /* ScatterPlotMatView.cpp */; }; - DD409E4C19FFD43000C21A2B /* VarTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD409E4A19FFD43000C21A2B /* VarTools.cpp */; }; - DD40B083181894F20084173C /* VarGroupingEditorDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD40B081181894F20084173C /* VarGroupingEditorDlg.cpp */; }; - DD45117119E5F65E006C5DAA /* geoda_prefs.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */; }; - DD49747A176F59670007BB9F /* DbfTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD497479176F59670007BB9F /* DbfTable.cpp */; }; - DD4974B71770AC700007BB9F /* TableFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974B61770AC700007BB9F /* TableFrame.cpp */; }; - DD4974BA1770AC840007BB9F /* TableBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974B91770AC840007BB9F /* TableBase.cpp */; }; - DD4974E21770CE9E0007BB9F /* TableInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974E11770CE9E0007BB9F /* TableInterface.cpp */; }; - DD4DED12197E16FF00FE29E8 /* SelectWeightsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4DED10197E16FF00FE29E8 /* SelectWeightsDlg.cpp */; }; - DD4E8B86164818A70014F1E7 /* ConnectivityHistView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4E8B84164818A70014F1E7 /* ConnectivityHistView.cpp */; }; - DD579B6A160BDAFE00BF8D53 /* DorlingCartogram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD579B68160BDAFE00BF8D53 /* DorlingCartogram.cpp */; }; - DD5A579716E53EC40047DBB1 /* GeoDa.icns in Resources */ = {isa = PBXBuildFile; fileRef = DD5A579616E53EC40047DBB1 /* GeoDa.icns */; }; - DD5AA73D1982D200009B30C6 /* CalcHelp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD5AA73B1982D200009B30C6 /* CalcHelp.cpp */; }; - DD5FA1DA0F320DD50055A0E5 /* ShapeFileHdr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */; }; - DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD60546616A83EEF0004BF02 /* CatClassifManager.cpp */; }; - DD6456CA14881EA700AABF59 /* TimeChooserDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */; }; - DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64925A16DFF63400B3B0AB /* GeoDa.cpp */; }; - DD64A2880F20FE06006B1E6D /* GeneralWxUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A2860F20FE06006B1E6D /* GeneralWxUtils.cpp */; }; - DD64A5580F2910D2006B1E6D /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A5570F2910D2006B1E6D /* logger.cpp */; }; - DD64A6AD0F2A7A81006B1E6D /* DBF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */; }; - DD694685130307C00072386B /* RateSmoothing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD694684130307C00072386B /* RateSmoothing.cpp */; }; - DD6B7289141A61400026D223 /* FramesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6B7288141A61400026D223 /* FramesManager.cpp */; }; - DD6C9EB61A03FD0C00F124F1 /* VarsChooserDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6C9EB11A03FD0C00F124F1 /* VarsChooserDlg.cpp */; }; - DD6C9EB71A03FD0C00F124F1 /* VarsChooserObservable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6C9EB31A03FD0C00F124F1 /* VarsChooserObservable.cpp */; }; - DD6CDA7A1A255CEF00FCF2B8 /* LineChartStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6CDA781A255CEF00FCF2B8 /* LineChartStats.cpp */; }; - DD6EE55F1A434302003AB41E /* DistancesCalc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6EE55E1A434302003AB41E /* DistancesCalc.cpp */; }; - DD72C19A1AAE95480000420B /* SpatialIndAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD72C1971AAE95480000420B /* SpatialIndAlgs.cpp */; }; - DD75A04115E81AF9008A7F8C /* VoronoiUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD75A04015E81AF9008A7F8C /* VoronoiUtils.cpp */; }; - DD7686D71A9FF47B009EFC6D /* gdiam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7686D51A9FF47B009EFC6D /* gdiam.cpp */; }; - DD76D1331A151C4E00A01FA5 /* LineChartView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD76D1321A151C4E00A01FA5 /* LineChartView.cpp */; }; - DD76D15A1A15430600A01FA5 /* LineChartCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD76D1581A15430600A01FA5 /* LineChartCanvas.cpp */; }; - DD7974C80F1D250A00496A84 /* TemplateCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7974C30F1D250A00496A84 /* TemplateCanvas.cpp */; }; - DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */; }; - DD79756C0F1D296F00496A84 /* ASC2SHPDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */; }; - DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */; }; - DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975110F1D296F00496A84 /* CreateGridDlg.cpp */; }; - DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975130F1D296F00496A84 /* CreatingWeightDlg.cpp */; }; - DD79757C0F1D296F00496A84 /* HistIntervalDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975290F1D296F00496A84 /* HistIntervalDlg.cpp */; }; - DD79757F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79752F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp */; }; - DD7975820F1D296F00496A84 /* PCPDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975350F1D296F00496A84 /* PCPDlg.cpp */; }; - DD7975830F1D296F00496A84 /* PermutationCounterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975370F1D296F00496A84 /* PermutationCounterDlg.cpp */; }; - DD7975850F1D296F00496A84 /* RandomizationDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79753B0F1D296F00496A84 /* RandomizationDlg.cpp */; }; - DD7975890F1D296F00496A84 /* RegressionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975430F1D296F00496A84 /* RegressionDlg.cpp */; }; - DD79758B0F1D296F00496A84 /* RegressionReportDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975470F1D296F00496A84 /* RegressionReportDlg.cpp */; }; - DD7975920F1D296F00496A84 /* SaveSelectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */; }; - DD7975940F1D296F00496A84 /* SHP2ASCDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */; }; - DD7975980F1D296F00496A84 /* VariableSettingsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975610F1D296F00496A84 /* VariableSettingsDlg.cpp */; }; - DD7975D20F1D2A9000496A84 /* 3DPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */; }; - DD7975D60F1D2A9000496A84 /* Geom3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975C00F1D2A9000496A84 /* Geom3D.cpp */; }; - DD7976B80F1D2CA800496A84 /* DenseMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976980F1D2CA800496A84 /* DenseMatrix.cpp */; }; - DD7976B90F1D2CA800496A84 /* DenseVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79769A0F1D2CA800496A84 /* DenseVector.cpp */; }; - DD7976BA0F1D2CA800496A84 /* DiagnosticReport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79769C0F1D2CA800496A84 /* DiagnosticReport.cpp */; }; - DD7976BC0F1D2CA800496A84 /* mix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976A30F1D2CA800496A84 /* mix.cpp */; }; - DD7976BD0F1D2CA800496A84 /* ML_im.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976A50F1D2CA800496A84 /* ML_im.cpp */; }; - DD7976BE0F1D2CA800496A84 /* PowerLag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976A80F1D2CA800496A84 /* PowerLag.cpp */; }; - DD7976BF0F1D2CA800496A84 /* PowerSymLag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976AA0F1D2CA800496A84 /* PowerSymLag.cpp */; }; - DD7976C10F1D2CA800496A84 /* smile2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976AF0F1D2CA800496A84 /* smile2.cpp */; }; - DD7976C20F1D2CA800496A84 /* SparseMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976B00F1D2CA800496A84 /* SparseMatrix.cpp */; }; - DD7976C30F1D2CA800496A84 /* SparseRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976B20F1D2CA800496A84 /* SparseRow.cpp */; }; - DD7976C40F1D2CA800496A84 /* SparseVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976B40F1D2CA800496A84 /* SparseVector.cpp */; }; - DD7976C50F1D2CA800496A84 /* Weights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976B60F1D2CA800496A84 /* Weights.cpp */; }; - DD7976F30F1D2D3100496A84 /* Randik.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7976E60F1D2D3100496A84 /* Randik.cpp */; }; - DD7B2A9D185273FF00727A91 /* SaveButtonManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7B2A9B185273FF00727A91 /* SaveButtonManager.cpp */; }; - DD7D5C711427F89B00DCFE5C /* LisaCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7D5C6F1427F89B00DCFE5C /* LisaCoordinator.cpp */; }; - DD7E91D3151A8F3A001AAC4C /* LisaScatterPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7E91D2151A8F3A001AAC4C /* LisaScatterPlotView.cpp */; }; - DD817EA819676AF100228B0A /* WeightsManState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD817EA619676AF100228B0A /* WeightsManState.cpp */; }; - DD8183C3197054CA00228B0A /* WeightsMapCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8183C1197054CA00228B0A /* WeightsMapCanvas.cpp */; }; - DD8183C81970619800228B0A /* WeightsManDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8183C61970619800228B0A /* WeightsManDlg.cpp */; }; - DD81857C19709B7800228B0A /* ConnectivityMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD81857A19709B7800228B0A /* ConnectivityMapView.cpp */; }; - DD88CF081A4253B700803196 /* CovSpView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD88CF051A4253B700803196 /* CovSpView.cpp */; }; - DD88CF0B1A4254D000803196 /* CovSpHLStateProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD88CF091A4254D000803196 /* CovSpHLStateProxy.cpp */; }; - DD89C87413D86BC7006C068D /* FieldNewCalcBinDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C86A13D86BC7006C068D /* FieldNewCalcBinDlg.cpp */; }; - DD89C87513D86BC7006C068D /* FieldNewCalcLagDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C86C13D86BC7006C068D /* FieldNewCalcLagDlg.cpp */; }; - DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C86E13D86BC7006C068D /* FieldNewCalcRateDlg.cpp */; }; - DD89C87713D86BC7006C068D /* FieldNewCalcSheetDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C87013D86BC7006C068D /* FieldNewCalcSheetDlg.cpp */; }; - DD89C87813D86BC7006C068D /* FieldNewCalcUniDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C87213D86BC7006C068D /* FieldNewCalcUniDlg.cpp */; }; - DD8DCE0E19C0FD8F00E62C3D /* DataChangeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */; }; - DD8FACE11649595D007598CE /* DataMovieDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8FACDF1649595D007598CE /* DataMovieDlg.cpp */; }; - DD92851C17F5FC7300B9481A /* VarOrderPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92851A17F5FC7300B9481A /* VarOrderPtree.cpp */; }; - DD92851F17F5FD4500B9481A /* VarOrderMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92851D17F5FD4500B9481A /* VarOrderMapper.cpp */; }; - DD92853D17F5FE2E00B9481A /* VarGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92853B17F5FE2E00B9481A /* VarGroup.cpp */; }; - DD92D22417BAAF2300F8FE01 /* TimeEditorDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92D22317BAAF2300F8FE01 /* TimeEditorDlg.cpp */; }; - DD9373B61AC1F99D0066AF21 /* SimplePoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */; }; - DD9373F71AC1FEAA0066AF21 /* PolysToContigWeights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */; }; - DD9C1B371910267900C0A427 /* GdaConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9C1B351910267900C0A427 /* GdaConst.cpp */; }; - DDA462FF164D785500EBBD8F /* TableState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA462FC164D785500EBBD8F /* TableState.cpp */; }; - DDA4F0A4196311A9007645E2 /* WeightsMetaInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA4F0A3196311A9007645E2 /* WeightsMetaInfo.cpp */; }; - DDA4F0AD196315AF007645E2 /* WeightUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA4F0AB196315AF007645E2 /* WeightUtils.cpp */; }; - DDA8D55214479228008156FB /* ScatterNewPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD99BA1911D3F8D6003BB40E /* ScatterNewPlotView.cpp */; }; - DDA8D5681447948B008156FB /* ShapeUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDC11EB1159783700E515BB /* ShapeUtils.cpp */; }; - DDAA6540117F9B5D00D1010C /* Project.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDAA653F117F9B5D00D1010C /* Project.cpp */; }; - DDAD0218162754EA00748874 /* ConditionalNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDAD0216162754EA00748874 /* ConditionalNewView.cpp */; }; - DDB0E42C10B34DBB00F96D57 /* AddIdVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB0E42A10B34DBB00F96D57 /* AddIdVariable.cpp */; }; - DDB252B513BBFD6700A7CE26 /* MergeTableDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB252B213BBFD6700A7CE26 /* MergeTableDlg.cpp */; }; - DDB2A75F15FA7DA900022ABE /* CartogramNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB2A75D15FA7DA900022ABE /* CartogramNewView.cpp */; }; - DDB37A0811CBBB730020C8A9 /* TemplateLegend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB37A0711CBBB730020C8A9 /* TemplateLegend.cpp */; }; - DDB77C0D139820CB00569A1E /* GStatCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB77C0B139820CB00569A1E /* GStatCoordinator.cpp */; }; - DDB77F3E140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB77F3C140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp */; }; - DDBDFE6A19E73E07004CCEDA /* web_plugins in Resources */ = {isa = PBXBuildFile; fileRef = DDBDFE6119E73E07004CCEDA /* web_plugins */; }; - DDBDFE6B19E73E13004CCEDA /* web_plugins in CopyFiles */ = {isa = PBXBuildFile; fileRef = DDBDFE6119E73E07004CCEDA /* web_plugins */; }; - DDC48EF618AE506400FD773F /* ProjectInfoDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC48EF418AE506400FD773F /* ProjectInfoDlg.cpp */; }; - DDC906921A129CFF002334D2 /* SimpleAxisCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9068C1A129CFF002334D2 /* SimpleAxisCanvas.cpp */; }; - DDC906931A129CFF002334D2 /* SimpleHistCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9068E1A129CFF002334D2 /* SimpleHistCanvas.cpp */; }; - DDC906941A129CFF002334D2 /* SimpleScatterPlotCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC906901A129CFF002334D2 /* SimpleScatterPlotCanvas.cpp */; }; - DDC9DD8515937AA000A0E5BA /* ExportCsvDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9DD8315937AA000A0E5BA /* ExportCsvDlg.cpp */; }; - DDC9DD8A15937B2F00A0E5BA /* CsvFileUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9DD8815937B2F00A0E5BA /* CsvFileUtils.cpp */; }; - DDC9DD9C15937C0200A0E5BA /* ImportCsvDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9DD9A15937C0200A0E5BA /* ImportCsvDlg.cpp */; }; - DDCCB5CC1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDCCB5CA1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp */; }; - DDCFA9961A96790100747EB7 /* DbfFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDCFA9941A96790100747EB7 /* DbfFile.cpp */; }; - DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F050F2F8BE1009F7F13 /* GenGeomAlgs.cpp */; }; - DDD13F6F0F2FC802009F7F13 /* ShapeFileTriplet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */; }; - DDD13F930F2FD641009F7F13 /* BasePoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F920F2FD641009F7F13 /* BasePoint.cpp */; }; - DDD13FAB0F30B2E4009F7F13 /* Box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13FAA0F30B2E4009F7F13 /* Box.cpp */; }; - DDD140540F310324009F7F13 /* AbstractShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD140530F310324009F7F13 /* AbstractShape.cpp */; }; - DDD2392D1AB86D8F00E4E1BF /* NumericTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD2392B1AB86D8F00E4E1BF /* NumericTests.cpp */; }; - DDD593AC12E9F34C00F7A7C4 /* GeodaWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593AB12E9F34C00F7A7C4 /* GeodaWeight.cpp */; }; - DDD593B012E9F42100F7A7C4 /* WeightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593AF12E9F42100F7A7C4 /* WeightsManager.cpp */; }; - DDD593C712E9F90000F7A7C4 /* GalWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593C612E9F90000F7A7C4 /* GalWeight.cpp */; }; - DDD593CA12E9F90C00F7A7C4 /* GwtWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593C912E9F90C00F7A7C4 /* GwtWeight.cpp */; }; - DDDBF286163AD1D50070610C /* ConditionalMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDBF284163AD1D50070610C /* ConditionalMapView.cpp */; }; - DDDBF29B163AD2BF0070610C /* ConditionalScatterPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDBF29A163AD2BF0070610C /* ConditionalScatterPlotView.cpp */; }; - DDDBF2AE163AD3AB0070610C /* ConditionalHistogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDBF2AC163AD3AB0070610C /* ConditionalHistogramView.cpp */; }; - DDE3F5081677C46500D13A2C /* CatClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE3F5061677C46500D13A2C /* CatClassification.cpp */; }; - DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE4DFD41A963B07005B9158 /* GdaShape.cpp */; }; - DDE4DFE91A96411A005B9158 /* ShpFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE4DFE71A96411A005B9158 /* ShpFile.cpp */; }; - DDEA3CBD193CEE5C0028B746 /* GdaFlexValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CB7193CEE5C0028B746 /* GdaFlexValue.cpp */; }; - DDEA3CBE193CEE5C0028B746 /* GdaLexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CB9193CEE5C0028B746 /* GdaLexer.cpp */; }; - DDEA3CBF193CEE5C0028B746 /* GdaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CBB193CEE5C0028B746 /* GdaParser.cpp */; }; - DDEA3D01193D17130028B746 /* CalculatorDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CFF193D17130028B746 /* CalculatorDlg.cpp */; }; - DDEFAAA71AA4F07200F6AAFA /* PointSetAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAAA51AA4F07200F6AAFA /* PointSetAlgs.cpp */; }; - DDF14CDA139432B000363FA1 /* DataViewerDeleteColDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7411001385B08B00554B0F /* DataViewerDeleteColDlg.cpp */; }; - DDF14CDC139432C100363FA1 /* DataViewerResizeColDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA73B7E13672821003783BC /* DataViewerResizeColDlg.cpp */; }; - DDF14CDD139432CB00363FA1 /* DataViewerAddColDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB057441356318A0044C441 /* DataViewerAddColDlg.cpp */; }; - DDF1636B15064B7800E3E6BD /* LisaMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF1636A15064B7800E3E6BD /* LisaMapNewView.cpp */; }; - DDF1637015064C2900E3E6BD /* GetisOrdMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF1636F15064C2900E3E6BD /* GetisOrdMapNewView.cpp */; }; - DDF53FF3167A39520042B453 /* CatClassifState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF53FF0167A39520042B453 /* CatClassifState.cpp */; }; - DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF54009167A39CA0042B453 /* CatClassifDlg.cpp */; }; - DDF85D1813B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF85D1613B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp */; }; - DDFE0E0917502E810099FFEC /* DbfColContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */; }; - DDFE0E2A175034EC0099FFEC /* TimeState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFE0E27175034EC0099FFEC /* TimeState.cpp */; }; - DDFFC7CC1AC0E58B00F7DD6D /* CorrelogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7C51AC0E58B00F7DD6D /* CorrelogramView.cpp */; }; - DDFFC7CD1AC0E58B00F7DD6D /* CorrelParamsObservable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7C71AC0E58B00F7DD6D /* CorrelParamsObservable.cpp */; }; - DDFFC7D51AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7D31AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp */; }; - DDFFC7F21AC1C7CF00F7DD6D /* HighlightState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7EC1AC1C7CF00F7DD6D /* HighlightState.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - DD2EB0FF19E6EF940073E36F /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 6; - files = ( - DDBDFE6B19E73E13004CCEDA /* web_plugins in CopyFiles */, - DD2EB10219E6F0270073E36F /* geoda_prefs.json in CopyFiles */, - A1B04ADD1B1921710045AA6F /* basemap_cache in CopyFiles */, - A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */, - DD45117119E5F65E006C5DAA /* geoda_prefs.sqlite in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - A11B85BA1B18DC89008B64EA /* Basemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Basemap.h; sourceTree = ""; }; - A11B85BB1B18DC9C008B64EA /* Basemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Basemap.cpp; sourceTree = ""; }; - A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRColumn.cpp; path = DataViewer/OGRColumn.cpp; sourceTree = ""; }; - A11F1B7E184FDFB3006F5F98 /* OGRColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OGRColumn.h; path = DataViewer/OGRColumn.h; sourceTree = ""; }; - A11F1B801850437A006F5F98 /* OGRTableOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRTableOperation.cpp; path = DataViewer/OGRTableOperation.cpp; sourceTree = ""; }; - A11F1B811850437A006F5F98 /* OGRTableOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OGRTableOperation.h; path = DataViewer/OGRTableOperation.h; sourceTree = ""; }; - A12E0F4D1705087A00B6059C /* OGRDataAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRDataAdapter.h; sourceTree = ""; }; - A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRDataAdapter.cpp; sourceTree = ""; }; - A13B6B9218760CF100F93ACF /* SaveAsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveAsDlg.h; sourceTree = ""; }; - A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveAsDlg.cpp; sourceTree = ""; }; - A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CsvFieldConfDlg.cpp; sourceTree = ""; }; - A14C496E1D76174000D9831C /* CsvFieldConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsvFieldConfDlg.h; sourceTree = ""; }; - A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatasourceDlg.cpp; sourceTree = ""; }; - A16BA46F183D626200D3B7DA /* DatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatasourceDlg.h; sourceTree = ""; }; - A171FBFE1792332A000DD5A0 /* GdaException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaException.h; sourceTree = ""; }; - A17336821C06917B00579354 /* WeightsManInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightsManInterface.h; path = VarCalc/WeightsManInterface.h; sourceTree = ""; }; - A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCartoDB.cpp; sourceTree = ""; }; - A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaCartoDB.h; sourceTree = ""; }; - A19F514D1756A11E006E31B4 /* plugins */ = {isa = PBXFileReference; lastKnownFileType = folder; name = plugins; path = BuildTools/macosx/plugins; sourceTree = ""; }; - A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AdjustYAxisDlg.cpp; sourceTree = ""; }; - A1AC05BE1C8645F300B6FE5F /* AdjustYAxisDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustYAxisDlg.h; sourceTree = ""; }; - A1B04ADC1B1921710045AA6F /* basemap_cache */ = {isa = PBXFileReference; lastKnownFileType = folder; name = basemap_cache; path = BuildTools/CommonDistFiles/basemap_cache; sourceTree = ""; }; - A1B13EE11C3EDFF90064AD87 /* BasemapConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasemapConfDlg.h; sourceTree = ""; }; - A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasemapConfDlg.cpp; sourceTree = ""; }; - A1B93ABE17D18735007F8195 /* ProjectConf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectConf.h; sourceTree = ""; }; - A1B93ABF17D18735007F8195 /* ProjectConf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectConf.cpp; sourceTree = ""; }; - A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaAppResources.cpp; sourceTree = ""; }; - A1C194A21B38FC67003DA7CA /* libc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.dylib"; path = "usr/lib/libc++.dylib"; sourceTree = SDKROOT; }; - A1C9F3EB18B55EE000E14394 /* FieldNameCorrectionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNameCorrectionDlg.h; sourceTree = ""; }; - A1C9F3EC18B55EE000E14394 /* FieldNameCorrectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNameCorrectionDlg.cpp; sourceTree = ""; }; - A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PublishDlg.cpp; sourceTree = ""; }; - A1CE3D321C1A427A0010F170 /* PublishDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublishDlg.h; sourceTree = ""; }; - A1D82DED174D3EB6003DE20A /* ConnectDatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectDatasourceDlg.h; sourceTree = ""; }; - A1D82DEE174D3EB6003DE20A /* ConnectDatasourceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectDatasourceDlg.cpp; sourceTree = ""; }; - A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AutoCompTextCtrl.cpp; sourceTree = ""; }; - A1DA623917BCBC070070CAAB /* AutoCompTextCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoCompTextCtrl.h; sourceTree = ""; }; - A1E5BC821DBFE661005739E9 /* ReportBugDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReportBugDlg.h; sourceTree = ""; }; - A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReportBugDlg.cpp; sourceTree = ""; }; - A1E77E18177D6A2E00CC1037 /* ExportDataDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExportDataDlg.cpp; sourceTree = ""; }; - A1E77E19177D6A2E00CC1037 /* ExportDataDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExportDataDlg.h; sourceTree = ""; }; - A1E77FDA17889BE200CC1037 /* OGRTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRTable.cpp; path = DataViewer/OGRTable.cpp; sourceTree = ""; }; - A1E77FDB17889BE200CC1037 /* OGRTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OGRTable.h; path = DataViewer/OGRTable.h; sourceTree = ""; }; - A1E78133178A90A100CC1037 /* OGRDatasourceProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRDatasourceProxy.cpp; sourceTree = ""; }; - A1E78134178A90A100CC1037 /* OGRDatasourceProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRDatasourceProxy.h; sourceTree = ""; }; - A1E78135178A90A100CC1037 /* OGRFieldProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRFieldProxy.cpp; sourceTree = ""; }; - A1E78136178A90A100CC1037 /* OGRFieldProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRFieldProxy.h; sourceTree = ""; }; - A1E78137178A90A100CC1037 /* OGRLayerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRLayerProxy.cpp; sourceTree = ""; }; - A1E78138178A90A100CC1037 /* OGRLayerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRLayerProxy.h; sourceTree = ""; }; - A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AutoUpdateDlg.cpp; sourceTree = ""; }; - A1EBC88E1CD2B2FD001DCFE9 /* AutoUpdateDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoUpdateDlg.h; sourceTree = ""; }; - A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocaleSetupDlg.cpp; sourceTree = ""; }; - A1EF332E18E35D8300E19375 /* LocaleSetupDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocaleSetupDlg.h; sourceTree = ""; }; - A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCache.cpp; sourceTree = ""; }; - A1F1BA5B178D3B46005A46E5 /* GdaCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaCache.h; sourceTree = ""; }; - A1F1BA98178D46B8005A46E5 /* cache.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = cache.sqlite; path = BuildTools/CommonDistFiles/cache.sqlite; sourceTree = ""; }; - A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomClassifPtree.cpp; path = DataViewer/CustomClassifPtree.cpp; sourceTree = ""; }; - A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomClassifPtree.h; path = DataViewer/CustomClassifPtree.h; sourceTree = ""; }; - DD00ADE611138A2C008FE572 /* TemplateFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateFrame.h; sourceTree = ""; }; - DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemplateFrame.cpp; sourceTree = ""; }; - DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeSelectionDlg.cpp; sourceTree = ""; }; - DD0DC4B913CBA7B10022B65A /* RangeSelectionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeSelectionDlg.h; sourceTree = ""; }; - DD0FC7E61A9EC17500A6715B /* CorrelogramAlgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CorrelogramAlgs.cpp; sourceTree = ""; }; - DD0FC7E71A9EC17500A6715B /* CorrelogramAlgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorrelogramAlgs.h; sourceTree = ""; }; - DD0FEBBA1909B7A000930418 /* NumCategoriesDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NumCategoriesDlg.cpp; sourceTree = ""; }; - DD0FEBBB1909B7A000930418 /* NumCategoriesDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumCategoriesDlg.h; sourceTree = ""; }; - DD115EA112BBDDA000E1CC73 /* ProgressDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressDlg.h; sourceTree = ""; }; - DD115EA212BBDDA000E1CC73 /* ProgressDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProgressDlg.cpp; sourceTree = ""; }; - DD164780142938BA008116A6 /* LisaCoordinatorObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LisaCoordinatorObserver.h; sourceTree = ""; }; - DD181BC613A90445004B0EC2 /* SaveToTableDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveToTableDlg.cpp; sourceTree = ""; }; - DD181BC713A90445004B0EC2 /* SaveToTableDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveToTableDlg.h; sourceTree = ""; }; - DD203F9B14C0C960006A731B /* MapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MapNewView.cpp; sourceTree = ""; }; - DD203F9C14C0C960006A731B /* MapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapNewView.h; sourceTree = ""; }; - DD209596139F129900B9E648 /* GetisOrdChoiceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetisOrdChoiceDlg.cpp; sourceTree = ""; }; - DD209597139F129900B9E648 /* GetisOrdChoiceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetisOrdChoiceDlg.h; sourceTree = ""; }; - DD26CBE219A41A480092C0F2 /* WebViewExampleWin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebViewExampleWin.cpp; sourceTree = ""; }; - DD26CBE319A41A480092C0F2 /* WebViewExampleWin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewExampleWin.h; sourceTree = ""; }; - DD27EF030F2F6CBE009C5C42 /* ShapeFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFile.h; sourceTree = ""; }; - DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFile.cpp; sourceTree = ""; }; - DD2A6FDE178C7F7C00197093 /* DataSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataSource.cpp; path = DataViewer/DataSource.cpp; sourceTree = ""; }; - DD2A6FDF178C7F7C00197093 /* DataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataSource.h; path = DataViewer/DataSource.h; sourceTree = ""; }; - DD2AE42819D4F4CA00B23FB9 /* GdaJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaJson.h; sourceTree = ""; }; - DD2AE42919D4F4CA00B23FB9 /* GdaJson.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaJson.cpp; sourceTree = ""; }; - DD2B42AF1522552B00888E51 /* BoxNewPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoxNewPlotView.cpp; sourceTree = ""; }; - DD2B42B01522552B00888E51 /* BoxNewPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoxNewPlotView.h; sourceTree = ""; }; - DD2B433D1522A93700888E51 /* HistogramView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HistogramView.cpp; sourceTree = ""; }; - DD2B433E1522A93700888E51 /* HistogramView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistogramView.h; sourceTree = ""; }; - DD2B43401522A95100888E51 /* PCPNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCPNewView.cpp; sourceTree = ""; }; - DD2B43411522A95100888E51 /* PCPNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCPNewView.h; sourceTree = ""; }; - DD2EB10019E6EFC50073E36F /* geoda_prefs.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = geoda_prefs.json; path = BuildTools/CommonDistFiles/geoda_prefs.json; sourceTree = ""; }; - DD30798C19ED80E0001E5E89 /* Lowess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lowess.cpp; sourceTree = ""; }; - DD30798D19ED80E0001E5E89 /* Lowess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lowess.h; sourceTree = ""; }; - DD3079C419ED9F61001E5E89 /* LowessParamObservable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LowessParamObservable.cpp; sourceTree = ""; }; - DD3079C519ED9F61001E5E89 /* LowessParamObservable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LowessParamObservable.h; sourceTree = ""; }; - DD3079C619ED9F61001E5E89 /* LowessParamObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LowessParamObserver.h; sourceTree = ""; }; - DD3079E119EDAE6C001E5E89 /* LowessParamDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LowessParamDlg.cpp; sourceTree = ""; }; - DD3079E219EDAE6C001E5E89 /* LowessParamDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LowessParamDlg.h; sourceTree = ""; }; - DD307DB719F0483B001E5E89 /* SmoothingUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SmoothingUtils.cpp; sourceTree = ""; }; - DD307DB819F0483B001E5E89 /* SmoothingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmoothingUtils.h; sourceTree = ""; }; - DD3082B119F709BB001E5E89 /* WebViewHelpWin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebViewHelpWin.cpp; sourceTree = ""; }; - DD3082B219F709BB001E5E89 /* WebViewHelpWin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewHelpWin.h; sourceTree = ""; }; - DD3BA0CE187111DE00CA4152 /* WeightsManPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightsManPtree.cpp; sourceTree = ""; }; - DD3BA0CF187111DE00CA4152 /* WeightsManPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsManPtree.h; sourceTree = ""; }; - DD3BA4461871EE9A00CA4152 /* DefaultVarsPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultVarsPtree.cpp; sourceTree = ""; }; - DD3BA4471871EE9A00CA4152 /* DefaultVarsPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultVarsPtree.h; sourceTree = ""; }; - DD409DF919FF099E00C21A2B /* ScatterPlotMatView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScatterPlotMatView.cpp; sourceTree = ""; }; - DD409DFA19FF099E00C21A2B /* ScatterPlotMatView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScatterPlotMatView.h; sourceTree = ""; }; - DD409E4A19FFD43000C21A2B /* VarTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VarTools.cpp; sourceTree = ""; }; - DD409E4B19FFD43000C21A2B /* VarTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarTools.h; sourceTree = ""; }; - DD40B081181894F20084173C /* VarGroupingEditorDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VarGroupingEditorDlg.cpp; sourceTree = ""; }; - DD40B082181894F20084173C /* VarGroupingEditorDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarGroupingEditorDlg.h; sourceTree = ""; }; - DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = geoda_prefs.sqlite; path = BuildTools/CommonDistFiles/geoda_prefs.sqlite; sourceTree = ""; }; - DD497478176F59670007BB9F /* DbfTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DbfTable.h; path = DataViewer/DbfTable.h; sourceTree = ""; }; - DD497479176F59670007BB9F /* DbfTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DbfTable.cpp; path = DataViewer/DbfTable.cpp; sourceTree = ""; }; - DD4974B51770AC700007BB9F /* TableFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableFrame.h; path = DataViewer/TableFrame.h; sourceTree = ""; }; - DD4974B61770AC700007BB9F /* TableFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableFrame.cpp; path = DataViewer/TableFrame.cpp; sourceTree = ""; }; - DD4974B81770AC840007BB9F /* TableBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableBase.h; path = DataViewer/TableBase.h; sourceTree = ""; }; - DD4974B91770AC840007BB9F /* TableBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableBase.cpp; path = DataViewer/TableBase.cpp; sourceTree = ""; }; - DD4974E01770CE9E0007BB9F /* TableInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableInterface.h; path = DataViewer/TableInterface.h; sourceTree = ""; }; - DD4974E11770CE9E0007BB9F /* TableInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableInterface.cpp; path = DataViewer/TableInterface.cpp; sourceTree = ""; }; - DD4DED10197E16FF00FE29E8 /* SelectWeightsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectWeightsDlg.cpp; sourceTree = ""; }; - DD4DED11197E16FF00FE29E8 /* SelectWeightsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectWeightsDlg.h; sourceTree = ""; }; - DD4E8B84164818A70014F1E7 /* ConnectivityHistView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectivityHistView.cpp; sourceTree = ""; }; - DD4E8B85164818A70014F1E7 /* ConnectivityHistView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectivityHistView.h; sourceTree = ""; }; - DD563E061064237C0070781C /* release-notes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "release-notes.txt"; sourceTree = ""; }; - DD579B68160BDAFE00BF8D53 /* DorlingCartogram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DorlingCartogram.cpp; sourceTree = ""; }; - DD579B69160BDAFE00BF8D53 /* DorlingCartogram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DorlingCartogram.h; sourceTree = ""; }; - DD5A579616E53EC40047DBB1 /* GeoDa.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = GeoDa.icns; sourceTree = ""; }; - DD5AA73B1982D200009B30C6 /* CalcHelp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CalcHelp.cpp; path = VarCalc/CalcHelp.cpp; sourceTree = ""; }; - DD5AA73C1982D200009B30C6 /* CalcHelp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CalcHelp.h; path = VarCalc/CalcHelp.h; sourceTree = ""; }; - DD5FA1D80F320DD50055A0E5 /* ShapeFileHdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileHdr.h; sourceTree = ""; }; - DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFileHdr.cpp; sourceTree = ""; }; - DD60546616A83EEF0004BF02 /* CatClassifManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassifManager.cpp; sourceTree = ""; }; - DD60546716A83EEF0004BF02 /* CatClassifManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifManager.h; sourceTree = ""; }; - DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeChooserDlg.cpp; sourceTree = ""; }; - DD6456C814881EA700AABF59 /* TimeChooserDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeChooserDlg.h; sourceTree = ""; }; - DD64925A16DFF63400B3B0AB /* GeoDa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeoDa.cpp; sourceTree = ""; }; - DD64925B16DFF63400B3B0AB /* GeoDa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeoDa.h; sourceTree = ""; }; - DD64A2860F20FE06006B1E6D /* GeneralWxUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeneralWxUtils.cpp; sourceTree = ""; }; - DD64A2870F20FE06006B1E6D /* GeneralWxUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneralWxUtils.h; sourceTree = ""; }; - DD64A5540F291027006B1E6D /* logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logger.h; sourceTree = ""; }; - DD64A5570F2910D2006B1E6D /* logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logger.cpp; sourceTree = ""; }; - DD64A5760F2911A4006B1E6D /* nullstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nullstream.h; sourceTree = ""; }; - DD64A6AB0F2A7A81006B1E6D /* DBF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBF.h; sourceTree = ""; }; - DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBF.cpp; sourceTree = ""; }; - DD64A7230F2E26AA006B1E6D /* GenUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenUtils.h; sourceTree = ""; }; - DD64A7240F2E26AA006B1E6D /* GenUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenUtils.cpp; sourceTree = ""; }; - DD694683130307C00072386B /* RateSmoothing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RateSmoothing.h; sourceTree = ""; }; - DD694684130307C00072386B /* RateSmoothing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RateSmoothing.cpp; sourceTree = ""; }; - DD6B7287141A61400026D223 /* FramesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FramesManager.h; sourceTree = ""; }; - DD6B7288141A61400026D223 /* FramesManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FramesManager.cpp; sourceTree = ""; }; - DD6B72AA141A76F50026D223 /* FramesManagerObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FramesManagerObserver.h; sourceTree = ""; }; - DD6C9EB11A03FD0C00F124F1 /* VarsChooserDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VarsChooserDlg.cpp; sourceTree = ""; }; - DD6C9EB21A03FD0C00F124F1 /* VarsChooserDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarsChooserDlg.h; sourceTree = ""; }; - DD6C9EB31A03FD0C00F124F1 /* VarsChooserObservable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VarsChooserObservable.cpp; sourceTree = ""; }; - DD6C9EB41A03FD0C00F124F1 /* VarsChooserObservable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarsChooserObservable.h; sourceTree = ""; }; - DD6C9EB51A03FD0C00F124F1 /* VarsChooserObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarsChooserObserver.h; sourceTree = ""; }; - DD6CDA781A255CEF00FCF2B8 /* LineChartStats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LineChartStats.cpp; sourceTree = ""; }; - DD6CDA791A255CEF00FCF2B8 /* LineChartStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChartStats.h; sourceTree = ""; }; - DD6EE55D1A434302003AB41E /* DistancesCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DistancesCalc.h; sourceTree = ""; }; - DD6EE55E1A434302003AB41E /* DistancesCalc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DistancesCalc.cpp; sourceTree = ""; }; - DD72C1971AAE95480000420B /* SpatialIndAlgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialIndAlgs.cpp; sourceTree = ""; }; - DD72C1981AAE95480000420B /* SpatialIndAlgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpatialIndAlgs.h; sourceTree = ""; }; - DD72C1991AAE95480000420B /* SpatialIndTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpatialIndTypes.h; sourceTree = ""; }; - DD7411001385B08B00554B0F /* DataViewerDeleteColDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataViewerDeleteColDlg.cpp; path = DataViewer/DataViewerDeleteColDlg.cpp; sourceTree = ""; }; - DD7411011385B08B00554B0F /* DataViewerDeleteColDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataViewerDeleteColDlg.h; path = DataViewer/DataViewerDeleteColDlg.h; sourceTree = ""; }; - DD75A03F15E81AF9008A7F8C /* VoronoiUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VoronoiUtils.h; sourceTree = ""; }; - DD75A04015E81AF9008A7F8C /* VoronoiUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VoronoiUtils.cpp; sourceTree = ""; }; - DD7686D51A9FF47B009EFC6D /* gdiam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gdiam.cpp; path = libgdiam/gdiam.cpp; sourceTree = ""; }; - DD7686D61A9FF47B009EFC6D /* gdiam.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = gdiam.hpp; path = libgdiam/gdiam.hpp; sourceTree = ""; }; - DD76D1311A151C4400A01FA5 /* LineChartView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChartView.h; sourceTree = ""; }; - DD76D1321A151C4E00A01FA5 /* LineChartView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LineChartView.cpp; sourceTree = ""; }; - DD76D1581A15430600A01FA5 /* LineChartCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LineChartCanvas.cpp; sourceTree = ""; }; - DD76D1591A15430600A01FA5 /* LineChartCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChartCanvas.h; sourceTree = ""; }; - DD7974810F1D1B6600496A84 /* GeoDa.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GeoDa.app; sourceTree = BUILT_PRODUCTS_DIR; }; - DD7974C30F1D250A00496A84 /* TemplateCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemplateCanvas.cpp; sourceTree = ""; }; - DD7974C40F1D250A00496A84 /* TemplateCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateCanvas.h; sourceTree = ""; }; - DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DControlPan.cpp; sourceTree = ""; }; - DD7975000F1D296F00496A84 /* 3DControlPan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DControlPan.h; sourceTree = ""; }; - DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASC2SHPDlg.cpp; sourceTree = ""; }; - DD79750A0F1D296F00496A84 /* ASC2SHPDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASC2SHPDlg.h; sourceTree = ""; }; - DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bnd2ShpDlg.cpp; sourceTree = ""; }; - DD79750C0F1D296F00496A84 /* Bnd2ShpDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bnd2ShpDlg.h; sourceTree = ""; }; - DD7975110F1D296F00496A84 /* CreateGridDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CreateGridDlg.cpp; sourceTree = ""; }; - DD7975120F1D296F00496A84 /* CreateGridDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateGridDlg.h; sourceTree = ""; }; - DD7975130F1D296F00496A84 /* CreatingWeightDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CreatingWeightDlg.cpp; sourceTree = ""; }; - DD7975140F1D296F00496A84 /* CreatingWeightDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreatingWeightDlg.h; sourceTree = ""; }; - DD7975290F1D296F00496A84 /* HistIntervalDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HistIntervalDlg.cpp; sourceTree = ""; }; - DD79752A0F1D296F00496A84 /* HistIntervalDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistIntervalDlg.h; sourceTree = ""; }; - DD79752F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LisaWhat2OpenDlg.cpp; sourceTree = ""; }; - DD7975300F1D296F00496A84 /* LisaWhat2OpenDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LisaWhat2OpenDlg.h; sourceTree = ""; }; - DD7975350F1D296F00496A84 /* PCPDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCPDlg.cpp; sourceTree = ""; }; - DD7975360F1D296F00496A84 /* PCPDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCPDlg.h; sourceTree = ""; }; - DD7975370F1D296F00496A84 /* PermutationCounterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PermutationCounterDlg.cpp; sourceTree = ""; }; - DD7975380F1D296F00496A84 /* PermutationCounterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PermutationCounterDlg.h; sourceTree = ""; }; - DD79753B0F1D296F00496A84 /* RandomizationDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RandomizationDlg.cpp; sourceTree = ""; }; - DD79753C0F1D296F00496A84 /* RandomizationDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomizationDlg.h; sourceTree = ""; }; - DD7975430F1D296F00496A84 /* RegressionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegressionDlg.cpp; sourceTree = ""; }; - DD7975440F1D296F00496A84 /* RegressionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegressionDlg.h; sourceTree = ""; }; - DD7975470F1D296F00496A84 /* RegressionReportDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegressionReportDlg.cpp; sourceTree = ""; }; - DD7975480F1D296F00496A84 /* RegressionReportDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegressionReportDlg.h; sourceTree = ""; }; - DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveSelectionDlg.cpp; sourceTree = ""; }; - DD7975560F1D296F00496A84 /* SaveSelectionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveSelectionDlg.h; sourceTree = ""; }; - DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHP2ASCDlg.cpp; sourceTree = ""; }; - DD79755A0F1D296F00496A84 /* SHP2ASCDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHP2ASCDlg.h; sourceTree = ""; }; - DD7975610F1D296F00496A84 /* VariableSettingsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VariableSettingsDlg.cpp; sourceTree = ""; }; - DD7975620F1D296F00496A84 /* VariableSettingsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VariableSettingsDlg.h; sourceTree = ""; }; - DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DPlotView.cpp; sourceTree = ""; }; - DD7975B90F1D2A9000496A84 /* 3DPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DPlotView.h; sourceTree = ""; }; - DD7975C00F1D2A9000496A84 /* Geom3D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Geom3D.cpp; sourceTree = ""; }; - DD7975C10F1D2A9000496A84 /* Geom3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Geom3D.h; sourceTree = ""; }; - DD79761D0F1D2C5E00496A84 /* toolbar.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = toolbar.xrc; sourceTree = ""; }; - DD7976200F1D2C5E00496A84 /* dialogs.xrc */ = {isa = PBXFileReference; explicitFileType = text.xml; fileEncoding = 4; path = dialogs.xrc; sourceTree = ""; }; - DD7976270F1D2C5E00496A84 /* menus.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = menus.xrc; sourceTree = ""; }; - DD7976960F1D2CA800496A84 /* blaswrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blaswrap.h; sourceTree = ""; }; - DD7976970F1D2CA800496A84 /* clapack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clapack.h; sourceTree = ""; }; - DD7976980F1D2CA800496A84 /* DenseMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DenseMatrix.cpp; sourceTree = ""; }; - DD7976990F1D2CA800496A84 /* DenseMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DenseMatrix.h; sourceTree = ""; }; - DD79769A0F1D2CA800496A84 /* DenseVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DenseVector.cpp; sourceTree = ""; }; - DD79769B0F1D2CA800496A84 /* DenseVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DenseVector.h; sourceTree = ""; }; - DD79769C0F1D2CA800496A84 /* DiagnosticReport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiagnosticReport.cpp; sourceTree = ""; }; - DD79769D0F1D2CA800496A84 /* DiagnosticReport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiagnosticReport.h; sourceTree = ""; }; - DD79769E0F1D2CA800496A84 /* f2c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = f2c.h; sourceTree = ""; }; - DD7976A20F1D2CA800496A84 /* Lite2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lite2.h; sourceTree = ""; }; - DD7976A30F1D2CA800496A84 /* mix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mix.cpp; sourceTree = ""; }; - DD7976A40F1D2CA800496A84 /* mix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mix.h; sourceTree = ""; }; - DD7976A50F1D2CA800496A84 /* ML_im.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ML_im.cpp; sourceTree = ""; }; - DD7976A60F1D2CA800496A84 /* ML_im.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ML_im.h; sourceTree = ""; }; - DD7976A70F1D2CA800496A84 /* polym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = polym.h; sourceTree = ""; }; - DD7976A80F1D2CA800496A84 /* PowerLag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PowerLag.cpp; sourceTree = ""; }; - DD7976A90F1D2CA800496A84 /* PowerLag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PowerLag.h; sourceTree = ""; }; - DD7976AA0F1D2CA800496A84 /* PowerSymLag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PowerSymLag.cpp; sourceTree = ""; }; - DD7976AB0F1D2CA800496A84 /* PowerSymLag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PowerSymLag.h; sourceTree = ""; }; - DD7976AE0F1D2CA800496A84 /* smile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smile.h; sourceTree = ""; }; - DD7976AF0F1D2CA800496A84 /* smile2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smile2.cpp; sourceTree = ""; }; - DD7976B00F1D2CA800496A84 /* SparseMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SparseMatrix.cpp; sourceTree = ""; }; - DD7976B10F1D2CA800496A84 /* SparseMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SparseMatrix.h; sourceTree = ""; }; - DD7976B20F1D2CA800496A84 /* SparseRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SparseRow.cpp; sourceTree = ""; }; - DD7976B30F1D2CA800496A84 /* SparseRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SparseRow.h; sourceTree = ""; }; - DD7976B40F1D2CA800496A84 /* SparseVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SparseVector.cpp; sourceTree = ""; }; - DD7976B50F1D2CA800496A84 /* SparseVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SparseVector.h; sourceTree = ""; }; - DD7976B60F1D2CA800496A84 /* Weights.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Weights.cpp; sourceTree = ""; }; - DD7976B70F1D2CA800496A84 /* Weights.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Weights.h; sourceTree = ""; }; - DD7976E60F1D2D3100496A84 /* Randik.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Randik.cpp; sourceTree = ""; }; - DD7976E70F1D2D3100496A84 /* Randik.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Randik.h; sourceTree = ""; }; - DD7B2A9B185273FF00727A91 /* SaveButtonManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveButtonManager.cpp; sourceTree = ""; }; - DD7B2A9C185273FF00727A91 /* SaveButtonManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveButtonManager.h; sourceTree = ""; }; - DD7D5C6F1427F89B00DCFE5C /* LisaCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LisaCoordinator.cpp; sourceTree = ""; }; - DD7D5C701427F89B00DCFE5C /* LisaCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LisaCoordinator.h; sourceTree = ""; }; - DD7E91D1151A8F3A001AAC4C /* LisaScatterPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LisaScatterPlotView.h; sourceTree = ""; }; - DD7E91D2151A8F3A001AAC4C /* LisaScatterPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LisaScatterPlotView.cpp; sourceTree = ""; }; - DD817EA619676AF100228B0A /* WeightsManState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightsManState.cpp; sourceTree = ""; }; - DD817EA719676AF100228B0A /* WeightsManState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsManState.h; sourceTree = ""; }; - DD817EA919676B7900228B0A /* WeightsManStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsManStateObserver.h; sourceTree = ""; }; - DD8183C1197054CA00228B0A /* WeightsMapCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightsMapCanvas.cpp; sourceTree = ""; }; - DD8183C2197054CA00228B0A /* WeightsMapCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsMapCanvas.h; sourceTree = ""; }; - DD8183C61970619800228B0A /* WeightsManDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightsManDlg.cpp; sourceTree = ""; }; - DD8183C71970619800228B0A /* WeightsManDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsManDlg.h; sourceTree = ""; }; - DD81857A19709B7800228B0A /* ConnectivityMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectivityMapView.cpp; sourceTree = ""; }; - DD81857B19709B7800228B0A /* ConnectivityMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectivityMapView.h; sourceTree = ""; }; - DD84139218B24BF2007C39CF /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - DD88CF051A4253B700803196 /* CovSpView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CovSpView.cpp; sourceTree = ""; }; - DD88CF061A4253B700803196 /* CovSpView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CovSpView.h; sourceTree = ""; }; - DD88CF091A4254D000803196 /* CovSpHLStateProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CovSpHLStateProxy.cpp; sourceTree = ""; }; - DD88CF0A1A4254D000803196 /* CovSpHLStateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CovSpHLStateProxy.h; sourceTree = ""; }; - DD89C86A13D86BC7006C068D /* FieldNewCalcBinDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcBinDlg.cpp; sourceTree = ""; }; - DD89C86B13D86BC7006C068D /* FieldNewCalcBinDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcBinDlg.h; sourceTree = ""; }; - DD89C86C13D86BC7006C068D /* FieldNewCalcLagDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcLagDlg.cpp; sourceTree = ""; }; - DD89C86D13D86BC7006C068D /* FieldNewCalcLagDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcLagDlg.h; sourceTree = ""; }; - DD89C86E13D86BC7006C068D /* FieldNewCalcRateDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcRateDlg.cpp; sourceTree = ""; }; - DD89C86F13D86BC7006C068D /* FieldNewCalcRateDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcRateDlg.h; sourceTree = ""; }; - DD89C87013D86BC7006C068D /* FieldNewCalcSheetDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcSheetDlg.cpp; sourceTree = ""; }; - DD89C87113D86BC7006C068D /* FieldNewCalcSheetDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcSheetDlg.h; sourceTree = ""; }; - DD89C87213D86BC7006C068D /* FieldNewCalcUniDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcUniDlg.cpp; sourceTree = ""; }; - DD89C87313D86BC7006C068D /* FieldNewCalcUniDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcUniDlg.h; sourceTree = ""; }; - DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataChangeType.cpp; path = DataViewer/DataChangeType.cpp; sourceTree = ""; }; - DD8DCE0D19C0FD8F00E62C3D /* DataChangeType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataChangeType.h; path = DataViewer/DataChangeType.h; sourceTree = ""; }; - DD8FACDF1649595D007598CE /* DataMovieDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataMovieDlg.cpp; sourceTree = ""; }; - DD8FACE01649595D007598CE /* DataMovieDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataMovieDlg.h; sourceTree = ""; }; - DD92851A17F5FC7300B9481A /* VarOrderPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VarOrderPtree.cpp; path = DataViewer/VarOrderPtree.cpp; sourceTree = ""; }; - DD92851B17F5FC7300B9481A /* VarOrderPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VarOrderPtree.h; path = DataViewer/VarOrderPtree.h; sourceTree = ""; }; - DD92851D17F5FD4500B9481A /* VarOrderMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VarOrderMapper.cpp; path = DataViewer/VarOrderMapper.cpp; sourceTree = ""; }; - DD92851E17F5FD4500B9481A /* VarOrderMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VarOrderMapper.h; path = DataViewer/VarOrderMapper.h; sourceTree = ""; }; - DD92853B17F5FE2E00B9481A /* VarGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VarGroup.cpp; path = DataViewer/VarGroup.cpp; sourceTree = ""; }; - DD92853C17F5FE2E00B9481A /* VarGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VarGroup.h; path = DataViewer/VarGroup.h; sourceTree = ""; }; - DD92D22217BAAF2300F8FE01 /* TimeEditorDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeEditorDlg.h; sourceTree = ""; }; - DD92D22317BAAF2300F8FE01 /* TimeEditorDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeEditorDlg.cpp; sourceTree = ""; }; - DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimplePoint.cpp; sourceTree = ""; }; - DD9373B51AC1F99D0066AF21 /* SimplePoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimplePoint.h; sourceTree = ""; }; - DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolysToContigWeights.cpp; sourceTree = ""; }; - DD9373F61AC1FEAA0066AF21 /* PolysToContigWeights.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolysToContigWeights.h; sourceTree = ""; }; - DD93748F1AC2086B0066AF21 /* Link.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Link.h; sourceTree = ""; }; - DD972056150A6F44000206F4 /* sp_tm_conv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sp_tm_conv.cpp; path = CmdLineUtils/sp_tm_conv/sp_tm_conv.cpp; sourceTree = ""; }; - DD99BA1811D3F8D6003BB40E /* ScatterNewPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScatterNewPlotView.h; sourceTree = ""; }; - DD99BA1911D3F8D6003BB40E /* ScatterNewPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScatterNewPlotView.cpp; sourceTree = ""; }; - DD9C1B351910267900C0A427 /* GdaConst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaConst.cpp; sourceTree = ""; }; - DD9C1B361910267900C0A427 /* GdaConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaConst.h; sourceTree = ""; }; - DDA462FC164D785500EBBD8F /* TableState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableState.cpp; path = DataViewer/TableState.cpp; sourceTree = ""; }; - DDA462FD164D785500EBBD8F /* TableState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableState.h; path = DataViewer/TableState.h; sourceTree = ""; }; - DDA462FE164D785500EBBD8F /* TableStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableStateObserver.h; path = DataViewer/TableStateObserver.h; sourceTree = ""; }; - DDA4F0A2196311A9007645E2 /* WeightsMetaInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightsMetaInfo.h; path = VarCalc/WeightsMetaInfo.h; sourceTree = ""; }; - DDA4F0A3196311A9007645E2 /* WeightsMetaInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WeightsMetaInfo.cpp; path = VarCalc/WeightsMetaInfo.cpp; sourceTree = ""; }; - DDA4F0AB196315AF007645E2 /* WeightUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightUtils.cpp; sourceTree = ""; }; - DDA4F0AC196315AF007645E2 /* WeightUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightUtils.h; sourceTree = ""; }; - DDA73B7E13672821003783BC /* DataViewerResizeColDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataViewerResizeColDlg.cpp; path = DataViewer/DataViewerResizeColDlg.cpp; sourceTree = ""; }; - DDA73B7F13672821003783BC /* DataViewerResizeColDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataViewerResizeColDlg.h; path = DataViewer/DataViewerResizeColDlg.h; sourceTree = ""; }; - DDAA653E117F9B5D00D1010C /* Project.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Project.h; sourceTree = ""; }; - DDAA653F117F9B5D00D1010C /* Project.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Project.cpp; sourceTree = ""; }; - DDAD0216162754EA00748874 /* ConditionalNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalNewView.cpp; sourceTree = ""; }; - DDAD0217162754EA00748874 /* ConditionalNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalNewView.h; sourceTree = ""; }; - DDB056D813554EEC0044C441 /* data_viewer_dialogs.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = data_viewer_dialogs.xrc; sourceTree = ""; }; - DDB057441356318A0044C441 /* DataViewerAddColDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataViewerAddColDlg.cpp; path = DataViewer/DataViewerAddColDlg.cpp; sourceTree = ""; }; - DDB057451356318A0044C441 /* DataViewerAddColDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataViewerAddColDlg.h; path = DataViewer/DataViewerAddColDlg.h; sourceTree = ""; }; - DDB0E42A10B34DBB00F96D57 /* AddIdVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AddIdVariable.cpp; sourceTree = ""; }; - DDB0E42B10B34DBB00F96D57 /* AddIdVariable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddIdVariable.h; sourceTree = ""; }; - DDB252B213BBFD6700A7CE26 /* MergeTableDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MergeTableDlg.cpp; path = DataViewer/MergeTableDlg.cpp; sourceTree = ""; }; - DDB252B313BBFD6700A7CE26 /* MergeTableDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MergeTableDlg.h; path = DataViewer/MergeTableDlg.h; sourceTree = ""; }; - DDB2A75D15FA7DA900022ABE /* CartogramNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartogramNewView.cpp; sourceTree = ""; }; - DDB2A75E15FA7DA900022ABE /* CartogramNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CartogramNewView.h; sourceTree = ""; }; - DDB37A0611CBBB730020C8A9 /* TemplateLegend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateLegend.h; sourceTree = ""; }; - DDB37A0711CBBB730020C8A9 /* TemplateLegend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemplateLegend.cpp; sourceTree = ""; }; - DDB77C0B139820CB00569A1E /* GStatCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GStatCoordinator.cpp; sourceTree = ""; }; - DDB77C0C139820CB00569A1E /* GStatCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GStatCoordinator.h; sourceTree = ""; }; - DDB77F3C140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcSpecialDlg.cpp; sourceTree = ""; }; - DDB77F3D140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcSpecialDlg.h; sourceTree = ""; }; - DDBDFE6119E73E07004CCEDA /* web_plugins */ = {isa = PBXFileReference; lastKnownFileType = folder; name = web_plugins; path = ../CommonDistFiles/web_plugins; sourceTree = SOURCE_ROOT; }; - DDC48EF418AE506400FD773F /* ProjectInfoDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectInfoDlg.cpp; sourceTree = ""; }; - DDC48EF518AE506400FD773F /* ProjectInfoDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectInfoDlg.h; sourceTree = ""; }; - DDC9068C1A129CFF002334D2 /* SimpleAxisCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleAxisCanvas.cpp; sourceTree = ""; }; - DDC9068D1A129CFF002334D2 /* SimpleAxisCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleAxisCanvas.h; sourceTree = ""; }; - DDC9068E1A129CFF002334D2 /* SimpleHistCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleHistCanvas.cpp; sourceTree = ""; }; - DDC9068F1A129CFF002334D2 /* SimpleHistCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleHistCanvas.h; sourceTree = ""; }; - DDC906901A129CFF002334D2 /* SimpleScatterPlotCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleScatterPlotCanvas.cpp; sourceTree = ""; }; - DDC906911A129CFF002334D2 /* SimpleScatterPlotCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleScatterPlotCanvas.h; sourceTree = ""; }; - DDC9DD8315937AA000A0E5BA /* ExportCsvDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExportCsvDlg.cpp; sourceTree = ""; }; - DDC9DD8415937AA000A0E5BA /* ExportCsvDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExportCsvDlg.h; sourceTree = ""; }; - DDC9DD8815937B2F00A0E5BA /* CsvFileUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CsvFileUtils.cpp; sourceTree = ""; }; - DDC9DD8915937B2F00A0E5BA /* CsvFileUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsvFileUtils.h; sourceTree = ""; }; - DDC9DD9A15937C0200A0E5BA /* ImportCsvDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImportCsvDlg.cpp; sourceTree = ""; }; - DDC9DD9B15937C0200A0E5BA /* ImportCsvDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImportCsvDlg.h; sourceTree = ""; }; - DDCCB5CA1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleBinsHistCanvas.cpp; sourceTree = ""; }; - DDCCB5CB1AD47C200067D6C4 /* SimpleBinsHistCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleBinsHistCanvas.h; sourceTree = ""; }; - DDCFA9941A96790100747EB7 /* DbfFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DbfFile.cpp; sourceTree = ""; }; - DDCFA9951A96790100747EB7 /* DbfFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbfFile.h; sourceTree = ""; }; - DDD13F040F2F8BE1009F7F13 /* GenGeomAlgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenGeomAlgs.h; sourceTree = ""; }; - DDD13F050F2F8BE1009F7F13 /* GenGeomAlgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenGeomAlgs.cpp; sourceTree = ""; }; - DDD13F6D0F2FC802009F7F13 /* ShapeFileTriplet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileTriplet.h; sourceTree = ""; }; - DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFileTriplet.cpp; sourceTree = ""; }; - DDD13F720F2FCEE8009F7F13 /* ShapeFileTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileTypes.h; sourceTree = ""; }; - DDD13F910F2FD641009F7F13 /* BasePoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasePoint.h; sourceTree = ""; }; - DDD13F920F2FD641009F7F13 /* BasePoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasePoint.cpp; sourceTree = ""; }; - DDD13FA90F30B2E4009F7F13 /* Box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box.h; sourceTree = ""; }; - DDD13FAA0F30B2E4009F7F13 /* Box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Box.cpp; sourceTree = ""; }; - DDD140520F310324009F7F13 /* AbstractShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractShape.h; sourceTree = ""; }; - DDD140530F310324009F7F13 /* AbstractShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractShape.cpp; sourceTree = ""; }; - DDD2392B1AB86D8F00E4E1BF /* NumericTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NumericTests.cpp; path = VarCalc/NumericTests.cpp; sourceTree = ""; }; - DDD2392C1AB86D8F00E4E1BF /* NumericTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NumericTests.h; path = VarCalc/NumericTests.h; sourceTree = ""; }; - DDD593AA12E9F34C00F7A7C4 /* GeodaWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeodaWeight.h; sourceTree = ""; }; - DDD593AB12E9F34C00F7A7C4 /* GeodaWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeodaWeight.cpp; sourceTree = ""; }; - DDD593AE12E9F42100F7A7C4 /* WeightsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeightsManager.h; sourceTree = ""; }; - DDD593AF12E9F42100F7A7C4 /* WeightsManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeightsManager.cpp; sourceTree = ""; }; - DDD593C512E9F90000F7A7C4 /* GalWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GalWeight.h; sourceTree = ""; }; - DDD593C612E9F90000F7A7C4 /* GalWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GalWeight.cpp; sourceTree = ""; }; - DDD593C812E9F90C00F7A7C4 /* GwtWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GwtWeight.h; sourceTree = ""; }; - DDD593C912E9F90C00F7A7C4 /* GwtWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GwtWeight.cpp; sourceTree = ""; }; - DDDBF284163AD1D50070610C /* ConditionalMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalMapView.cpp; sourceTree = ""; }; - DDDBF285163AD1D50070610C /* ConditionalMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalMapView.h; sourceTree = ""; }; - DDDBF299163AD2BF0070610C /* ConditionalScatterPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalScatterPlotView.h; sourceTree = ""; }; - DDDBF29A163AD2BF0070610C /* ConditionalScatterPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalScatterPlotView.cpp; sourceTree = ""; }; - DDDBF2AC163AD3AB0070610C /* ConditionalHistogramView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalHistogramView.cpp; sourceTree = ""; }; - DDDBF2AD163AD3AB0070610C /* ConditionalHistogramView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalHistogramView.h; sourceTree = ""; }; - DDDC11EB1159783700E515BB /* ShapeUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeUtils.cpp; sourceTree = ""; }; - DDDC11EC1159783700E515BB /* ShapeUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeUtils.h; sourceTree = ""; }; - DDE39D97178CDB9A00C47D58 /* PtreeInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PtreeInterface.h; path = DataViewer/PtreeInterface.h; sourceTree = ""; }; - DDE3F5061677C46500D13A2C /* CatClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassification.cpp; sourceTree = ""; }; - DDE3F5071677C46500D13A2C /* CatClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassification.h; sourceTree = ""; }; - DDE4DFD41A963B07005B9158 /* GdaShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaShape.cpp; sourceTree = ""; }; - DDE4DFD51A963B07005B9158 /* GdaShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaShape.h; sourceTree = ""; }; - DDE4DFE71A96411A005B9158 /* ShpFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShpFile.cpp; sourceTree = ""; }; - DDE4DFE81A96411A005B9158 /* ShpFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShpFile.h; sourceTree = ""; }; - DDEA3CB7193CEE5C0028B746 /* GdaFlexValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GdaFlexValue.cpp; path = VarCalc/GdaFlexValue.cpp; sourceTree = ""; }; - DDEA3CB8193CEE5C0028B746 /* GdaFlexValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GdaFlexValue.h; path = VarCalc/GdaFlexValue.h; sourceTree = ""; }; - DDEA3CB9193CEE5C0028B746 /* GdaLexer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GdaLexer.cpp; path = VarCalc/GdaLexer.cpp; sourceTree = ""; }; - DDEA3CBA193CEE5C0028B746 /* GdaLexer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GdaLexer.h; path = VarCalc/GdaLexer.h; sourceTree = ""; }; - DDEA3CBB193CEE5C0028B746 /* GdaParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GdaParser.cpp; path = VarCalc/GdaParser.cpp; sourceTree = ""; }; - DDEA3CBC193CEE5C0028B746 /* GdaParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GdaParser.h; path = VarCalc/GdaParser.h; sourceTree = ""; }; - DDEA3CFF193D17130028B746 /* CalculatorDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CalculatorDlg.cpp; sourceTree = ""; }; - DDEA3D00193D17130028B746 /* CalculatorDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalculatorDlg.h; sourceTree = ""; }; - DDEFAAA51AA4F07200F6AAFA /* PointSetAlgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PointSetAlgs.cpp; sourceTree = ""; }; - DDEFAAA61AA4F07200F6AAFA /* PointSetAlgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PointSetAlgs.h; sourceTree = ""; }; - DDF1636915064B7800E3E6BD /* LisaMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LisaMapNewView.h; sourceTree = ""; }; - DDF1636A15064B7800E3E6BD /* LisaMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LisaMapNewView.cpp; sourceTree = ""; }; - DDF1636E15064C2900E3E6BD /* GetisOrdMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetisOrdMapNewView.h; sourceTree = ""; }; - DDF1636F15064C2900E3E6BD /* GetisOrdMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GetisOrdMapNewView.cpp; sourceTree = ""; }; - DDF53FF0167A39520042B453 /* CatClassifState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassifState.cpp; sourceTree = ""; }; - DDF53FF1167A39520042B453 /* CatClassifState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifState.h; sourceTree = ""; }; - DDF53FF2167A39520042B453 /* CatClassifStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifStateObserver.h; sourceTree = ""; }; - DDF54009167A39CA0042B453 /* CatClassifDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassifDlg.cpp; sourceTree = ""; }; - DDF5400A167A39CA0042B453 /* CatClassifDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifDlg.h; sourceTree = ""; }; - DDF85D1613B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataViewerEditFieldPropertiesDlg.cpp; path = DataViewer/DataViewerEditFieldPropertiesDlg.cpp; sourceTree = ""; }; - DDF85D1713B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataViewerEditFieldPropertiesDlg.h; path = DataViewer/DataViewerEditFieldPropertiesDlg.h; sourceTree = ""; }; - DDFE0E0717502E810099FFEC /* DbfColContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DbfColContainer.h; path = DataViewer/DbfColContainer.h; sourceTree = ""; }; - DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DbfColContainer.cpp; path = DataViewer/DbfColContainer.cpp; sourceTree = ""; }; - DDFE0E27175034EC0099FFEC /* TimeState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TimeState.cpp; path = DataViewer/TimeState.cpp; sourceTree = ""; }; - DDFE0E28175034EC0099FFEC /* TimeState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeState.h; path = DataViewer/TimeState.h; sourceTree = ""; }; - DDFE0E29175034EC0099FFEC /* TimeStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeStateObserver.h; path = DataViewer/TimeStateObserver.h; sourceTree = ""; }; - DDFFC7C51AC0E58B00F7DD6D /* CorrelogramView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CorrelogramView.cpp; sourceTree = ""; }; - DDFFC7C61AC0E58B00F7DD6D /* CorrelogramView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorrelogramView.h; sourceTree = ""; }; - DDFFC7C71AC0E58B00F7DD6D /* CorrelParamsObservable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CorrelParamsObservable.cpp; sourceTree = ""; }; - DDFFC7C81AC0E58B00F7DD6D /* CorrelParamsObservable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorrelParamsObservable.h; sourceTree = ""; }; - DDFFC7C91AC0E58B00F7DD6D /* CorrelParamsObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorrelParamsObserver.h; sourceTree = ""; }; - DDFFC7D31AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CorrelParamsDlg.cpp; sourceTree = ""; }; - DDFFC7D41AC0E7DC00F7DD6D /* CorrelParamsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorrelParamsDlg.h; sourceTree = ""; }; - DDFFC7EC1AC1C7CF00F7DD6D /* HighlightState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HighlightState.cpp; sourceTree = ""; }; - DDFFC7ED1AC1C7CF00F7DD6D /* HighlightState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighlightState.h; sourceTree = ""; }; - DDFFC7EE1AC1C7CF00F7DD6D /* HighlightStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HighlightStateObserver.h; sourceTree = ""; }; - DDFFC7EF1AC1C7CF00F7DD6D /* HLStateInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HLStateInt.h; sourceTree = ""; }; - DDFFC7F01AC1C7CF00F7DD6D /* Observable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Observable.h; sourceTree = ""; }; - DDFFC7F11AC1C7CF00F7DD6D /* Observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Observer.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - DD79747F0F1D1B6600496A84 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A1C194A31B38FC67003DA7CA /* libc++.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - DD7686D41A9FF446009EFC6D /* libgdiam */ = { - isa = PBXGroup; - children = ( - DD7686D51A9FF47B009EFC6D /* gdiam.cpp */, - DD7686D61A9FF47B009EFC6D /* gdiam.hpp */, - ); - name = libgdiam; - sourceTree = ""; - }; - DD7974650F1D1B0700496A84 /* ../../ */ = { - isa = PBXGroup; - children = ( - A1C194A21B38FC67003DA7CA /* libc++.dylib */, - A1B04ADC1B1921710045AA6F /* basemap_cache */, - DD972054150A6EE4000206F4 /* CmdLineUtils */, - DDDFB96D134B6B73005EF636 /* DataViewer */, - DD7974FE0F1D296F00496A84 /* DialogTools */, - DD7975B70F1D2A9000496A84 /* Explore */, - DD7976070F1D2C5E00496A84 /* rc */, - DD7686D41A9FF446009EFC6D /* libgdiam */, - DD7974820F1D1B6600496A84 /* Products */, - DD7976950F1D2CA800496A84 /* Regression */, - DD7976E10F1D2D3100496A84 /* ShapeOperations */, - DDEA3CB6193CEE250028B746 /* VarCalc */, - A1F1BA98178D46B8005A46E5 /* cache.sqlite */, - DD2EB10019E6EFC50073E36F /* geoda_prefs.json */, - DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */, - DDBDFE6119E73E07004CCEDA /* web_plugins */, - A19F514D1756A11E006E31B4 /* plugins */, - DDCFA9941A96790100747EB7 /* DbfFile.cpp */, - DDCFA9951A96790100747EB7 /* DbfFile.h */, - DD3BA4471871EE9A00CA4152 /* DefaultVarsPtree.h */, - DD3BA4461871EE9A00CA4152 /* DefaultVarsPtree.cpp */, - DD9C1B361910267900C0A427 /* GdaConst.h */, - DD9C1B351910267900C0A427 /* GdaConst.cpp */, - A171FBFE1792332A000DD5A0 /* GdaException.h */, - DD2AE42819D4F4CA00B23FB9 /* GdaJson.h */, - DD2AE42919D4F4CA00B23FB9 /* GdaJson.cpp */, - DDE4DFD41A963B07005B9158 /* GdaShape.cpp */, - DDE4DFD51A963B07005B9158 /* GdaShape.h */, - A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */, - A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */, - DD64A2870F20FE06006B1E6D /* GeneralWxUtils.h */, - DD64A2860F20FE06006B1E6D /* GeneralWxUtils.cpp */, - DD64925B16DFF63400B3B0AB /* GeoDa.h */, - DD64925A16DFF63400B3B0AB /* GeoDa.cpp */, - DDD13F040F2F8BE1009F7F13 /* GenGeomAlgs.h */, - DDD13F050F2F8BE1009F7F13 /* GenGeomAlgs.cpp */, - DD64A7230F2E26AA006B1E6D /* GenUtils.h */, - DD64A7240F2E26AA006B1E6D /* GenUtils.cpp */, - DDFFC7EC1AC1C7CF00F7DD6D /* HighlightState.cpp */, - DDFFC7ED1AC1C7CF00F7DD6D /* HighlightState.h */, - DDFFC7EE1AC1C7CF00F7DD6D /* HighlightStateObserver.h */, - DDFFC7EF1AC1C7CF00F7DD6D /* HLStateInt.h */, - DDFFC7F01AC1C7CF00F7DD6D /* Observable.h */, - DDFFC7F11AC1C7CF00F7DD6D /* Observer.h */, - DD64A5540F291027006B1E6D /* logger.h */, - DD64A5570F2910D2006B1E6D /* logger.cpp */, - DD64A5760F2911A4006B1E6D /* nullstream.h */, - DDE4DFE71A96411A005B9158 /* ShpFile.cpp */, - DDE4DFE81A96411A005B9158 /* ShpFile.h */, - DD72C1971AAE95480000420B /* SpatialIndAlgs.cpp */, - DD72C1981AAE95480000420B /* SpatialIndAlgs.h */, - DD72C1991AAE95480000420B /* SpatialIndTypes.h */, - DD7974C40F1D250A00496A84 /* TemplateCanvas.h */, - DD7974C30F1D250A00496A84 /* TemplateCanvas.cpp */, - DD00ADE611138A2C008FE572 /* TemplateFrame.h */, - DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */, - DDB37A0611CBBB730020C8A9 /* TemplateLegend.h */, - DDB37A0711CBBB730020C8A9 /* TemplateLegend.cpp */, - DDEFAAA51AA4F07200F6AAFA /* PointSetAlgs.cpp */, - DDEFAAA61AA4F07200F6AAFA /* PointSetAlgs.h */, - DDAA653E117F9B5D00D1010C /* Project.h */, - DDAA653F117F9B5D00D1010C /* Project.cpp */, - A1B93ABE17D18735007F8195 /* ProjectConf.h */, - A1B93ABF17D18735007F8195 /* ProjectConf.cpp */, - DD6B7287141A61400026D223 /* FramesManager.h */, - DD6B7288141A61400026D223 /* FramesManager.cpp */, - DD6B72AA141A76F50026D223 /* FramesManagerObserver.h */, - DD7B2A9B185273FF00727A91 /* SaveButtonManager.cpp */, - DD7B2A9C185273FF00727A91 /* SaveButtonManager.h */, - DD409E4A19FFD43000C21A2B /* VarTools.cpp */, - DD409E4B19FFD43000C21A2B /* VarTools.h */, - DD84139218B24BF2007C39CF /* version.h */, - ); - path = ../../; - sourceTree = ""; - }; - DD7974820F1D1B6600496A84 /* Products */ = { - isa = PBXGroup; - children = ( - DD7974810F1D1B6600496A84 /* GeoDa.app */, - ); - name = Products; - sourceTree = ""; - }; - DD7974FE0F1D296F00496A84 /* DialogTools */ = { - isa = PBXGroup; - children = ( - A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */, - A1E5BC821DBFE661005739E9 /* ReportBugDlg.h */, - A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */, - A14C496E1D76174000D9831C /* CsvFieldConfDlg.h */, - A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */, - A1EBC88E1CD2B2FD001DCFE9 /* AutoUpdateDlg.h */, - A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */, - A1AC05BE1C8645F300B6FE5F /* AdjustYAxisDlg.h */, - A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */, - A1B13EE11C3EDFF90064AD87 /* BasemapConfDlg.h */, - A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */, - A1CE3D321C1A427A0010F170 /* PublishDlg.h */, - DDEA3CFF193D17130028B746 /* CalculatorDlg.cpp */, - DDEA3D00193D17130028B746 /* CalculatorDlg.h */, - DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */, - DD7975000F1D296F00496A84 /* 3DControlPan.h */, - DDB0E42A10B34DBB00F96D57 /* AddIdVariable.cpp */, - DDB0E42B10B34DBB00F96D57 /* AddIdVariable.h */, - DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */, - DD79750A0F1D296F00496A84 /* ASC2SHPDlg.h */, - A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */, - A1DA623917BCBC070070CAAB /* AutoCompTextCtrl.h */, - DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */, - DD79750C0F1D296F00496A84 /* Bnd2ShpDlg.h */, - DDF54009167A39CA0042B453 /* CatClassifDlg.cpp */, - DDF5400A167A39CA0042B453 /* CatClassifDlg.h */, - A1D82DEE174D3EB6003DE20A /* ConnectDatasourceDlg.cpp */, - A1D82DED174D3EB6003DE20A /* ConnectDatasourceDlg.h */, - DD7975110F1D296F00496A84 /* CreateGridDlg.cpp */, - DD7975120F1D296F00496A84 /* CreateGridDlg.h */, - DD7975130F1D296F00496A84 /* CreatingWeightDlg.cpp */, - DD7975140F1D296F00496A84 /* CreatingWeightDlg.h */, - DD8FACDF1649595D007598CE /* DataMovieDlg.cpp */, - DD8FACE01649595D007598CE /* DataMovieDlg.h */, - A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */, - A16BA46F183D626200D3B7DA /* DatasourceDlg.h */, - DDC9DD8315937AA000A0E5BA /* ExportCsvDlg.cpp */, - DDC9DD8415937AA000A0E5BA /* ExportCsvDlg.h */, - A1E77E18177D6A2E00CC1037 /* ExportDataDlg.cpp */, - A1E77E19177D6A2E00CC1037 /* ExportDataDlg.h */, - A1C9F3EB18B55EE000E14394 /* FieldNameCorrectionDlg.h */, - A1C9F3EC18B55EE000E14394 /* FieldNameCorrectionDlg.cpp */, - DD89C86A13D86BC7006C068D /* FieldNewCalcBinDlg.cpp */, - DD89C86B13D86BC7006C068D /* FieldNewCalcBinDlg.h */, - DD89C86C13D86BC7006C068D /* FieldNewCalcLagDlg.cpp */, - DD89C86D13D86BC7006C068D /* FieldNewCalcLagDlg.h */, - DD89C86E13D86BC7006C068D /* FieldNewCalcRateDlg.cpp */, - DD89C86F13D86BC7006C068D /* FieldNewCalcRateDlg.h */, - DD89C87013D86BC7006C068D /* FieldNewCalcSheetDlg.cpp */, - DD89C87113D86BC7006C068D /* FieldNewCalcSheetDlg.h */, - DDB77F3C140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp */, - DDB77F3D140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.h */, - DD89C87213D86BC7006C068D /* FieldNewCalcUniDlg.cpp */, - DD89C87313D86BC7006C068D /* FieldNewCalcUniDlg.h */, - DD209596139F129900B9E648 /* GetisOrdChoiceDlg.cpp */, - DD209597139F129900B9E648 /* GetisOrdChoiceDlg.h */, - DD7975290F1D296F00496A84 /* HistIntervalDlg.cpp */, - DD79752A0F1D296F00496A84 /* HistIntervalDlg.h */, - DDC9DD9A15937C0200A0E5BA /* ImportCsvDlg.cpp */, - DDC9DD9B15937C0200A0E5BA /* ImportCsvDlg.h */, - DD79752F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp */, - DD7975300F1D296F00496A84 /* LisaWhat2OpenDlg.h */, - A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */, - A1EF332E18E35D8300E19375 /* LocaleSetupDlg.h */, - DD0FEBBA1909B7A000930418 /* NumCategoriesDlg.cpp */, - DD0FEBBB1909B7A000930418 /* NumCategoriesDlg.h */, - DD7975350F1D296F00496A84 /* PCPDlg.cpp */, - DD7975360F1D296F00496A84 /* PCPDlg.h */, - DD7975370F1D296F00496A84 /* PermutationCounterDlg.cpp */, - DD7975380F1D296F00496A84 /* PermutationCounterDlg.h */, - DD115EA212BBDDA000E1CC73 /* ProgressDlg.cpp */, - DD115EA112BBDDA000E1CC73 /* ProgressDlg.h */, - DDC48EF418AE506400FD773F /* ProjectInfoDlg.cpp */, - DDC48EF518AE506400FD773F /* ProjectInfoDlg.h */, - DD79753B0F1D296F00496A84 /* RandomizationDlg.cpp */, - DD79753C0F1D296F00496A84 /* RandomizationDlg.h */, - DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */, - DD0DC4B913CBA7B10022B65A /* RangeSelectionDlg.h */, - DD7975430F1D296F00496A84 /* RegressionDlg.cpp */, - DD7975440F1D296F00496A84 /* RegressionDlg.h */, - DD7975470F1D296F00496A84 /* RegressionReportDlg.cpp */, - DD7975480F1D296F00496A84 /* RegressionReportDlg.h */, - A13B6B9218760CF100F93ACF /* SaveAsDlg.h */, - A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */, - DD181BC613A90445004B0EC2 /* SaveToTableDlg.cpp */, - DD181BC713A90445004B0EC2 /* SaveToTableDlg.h */, - DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */, - DD7975560F1D296F00496A84 /* SaveSelectionDlg.h */, - DD4DED10197E16FF00FE29E8 /* SelectWeightsDlg.cpp */, - DD4DED11197E16FF00FE29E8 /* SelectWeightsDlg.h */, - DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */, - DD79755A0F1D296F00496A84 /* SHP2ASCDlg.h */, - DD6456C814881EA700AABF59 /* TimeChooserDlg.h */, - DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */, - DD92D22217BAAF2300F8FE01 /* TimeEditorDlg.h */, - DD92D22317BAAF2300F8FE01 /* TimeEditorDlg.cpp */, - DD40B082181894F20084173C /* VarGroupingEditorDlg.h */, - DD40B081181894F20084173C /* VarGroupingEditorDlg.cpp */, - DD7975620F1D296F00496A84 /* VariableSettingsDlg.h */, - DD7975610F1D296F00496A84 /* VariableSettingsDlg.cpp */, - DD3082B219F709BB001E5E89 /* WebViewHelpWin.h */, - DD3082B119F709BB001E5E89 /* WebViewHelpWin.cpp */, - DD8183C71970619800228B0A /* WeightsManDlg.h */, - DD8183C61970619800228B0A /* WeightsManDlg.cpp */, - ); - path = DialogTools; - sourceTree = ""; - }; - DD7975B70F1D2A9000496A84 /* Explore */ = { - isa = PBXGroup; - children = ( - DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */, - DD7975B90F1D2A9000496A84 /* 3DPlotView.h */, - DD2B42AF1522552B00888E51 /* BoxNewPlotView.cpp */, - DD2B42B01522552B00888E51 /* BoxNewPlotView.h */, - DDB2A75D15FA7DA900022ABE /* CartogramNewView.cpp */, - DDB2A75E15FA7DA900022ABE /* CartogramNewView.h */, - DD60546616A83EEF0004BF02 /* CatClassifManager.cpp */, - DD60546716A83EEF0004BF02 /* CatClassifManager.h */, - DDE3F5061677C46500D13A2C /* CatClassification.cpp */, - DDE3F5071677C46500D13A2C /* CatClassification.h */, - DDF53FF0167A39520042B453 /* CatClassifState.cpp */, - DDF53FF1167A39520042B453 /* CatClassifState.h */, - DDF53FF2167A39520042B453 /* CatClassifStateObserver.h */, - DD0FC7E61A9EC17500A6715B /* CorrelogramAlgs.cpp */, - DD0FC7E71A9EC17500A6715B /* CorrelogramAlgs.h */, - DDFFC7C51AC0E58B00F7DD6D /* CorrelogramView.cpp */, - DDFFC7C61AC0E58B00F7DD6D /* CorrelogramView.h */, - DDFFC7D31AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp */, - DDFFC7D41AC0E7DC00F7DD6D /* CorrelParamsDlg.h */, - DDFFC7C71AC0E58B00F7DD6D /* CorrelParamsObservable.cpp */, - DDFFC7C81AC0E58B00F7DD6D /* CorrelParamsObservable.h */, - DDFFC7C91AC0E58B00F7DD6D /* CorrelParamsObserver.h */, - DDDBF2AC163AD3AB0070610C /* ConditionalHistogramView.cpp */, - DDDBF2AD163AD3AB0070610C /* ConditionalHistogramView.h */, - DDDBF284163AD1D50070610C /* ConditionalMapView.cpp */, - DDDBF285163AD1D50070610C /* ConditionalMapView.h */, - DDAD0216162754EA00748874 /* ConditionalNewView.cpp */, - DDAD0217162754EA00748874 /* ConditionalNewView.h */, - DDDBF299163AD2BF0070610C /* ConditionalScatterPlotView.h */, - DDDBF29A163AD2BF0070610C /* ConditionalScatterPlotView.cpp */, - DD4E8B84164818A70014F1E7 /* ConnectivityHistView.cpp */, - DD4E8B85164818A70014F1E7 /* ConnectivityHistView.h */, - DD81857A19709B7800228B0A /* ConnectivityMapView.cpp */, - DD81857B19709B7800228B0A /* ConnectivityMapView.h */, - DD88CF091A4254D000803196 /* CovSpHLStateProxy.cpp */, - DD88CF0A1A4254D000803196 /* CovSpHLStateProxy.h */, - DD88CF051A4253B700803196 /* CovSpView.cpp */, - DD88CF061A4253B700803196 /* CovSpView.h */, - DD6EE55D1A434302003AB41E /* DistancesCalc.h */, - DD6EE55E1A434302003AB41E /* DistancesCalc.cpp */, - DD7975C00F1D2A9000496A84 /* Geom3D.cpp */, - DD7975C10F1D2A9000496A84 /* Geom3D.h */, - DDF1636F15064C2900E3E6BD /* GetisOrdMapNewView.cpp */, - DDF1636E15064C2900E3E6BD /* GetisOrdMapNewView.h */, - DDB77C0B139820CB00569A1E /* GStatCoordinator.cpp */, - DDB77C0C139820CB00569A1E /* GStatCoordinator.h */, - DD2B433D1522A93700888E51 /* HistogramView.cpp */, - DD2B433E1522A93700888E51 /* HistogramView.h */, - DD6CDA781A255CEF00FCF2B8 /* LineChartStats.cpp */, - DD6CDA791A255CEF00FCF2B8 /* LineChartStats.h */, - DD76D1581A15430600A01FA5 /* LineChartCanvas.cpp */, - DD76D1591A15430600A01FA5 /* LineChartCanvas.h */, - DD76D1321A151C4E00A01FA5 /* LineChartView.cpp */, - DD76D1311A151C4400A01FA5 /* LineChartView.h */, - DD164780142938BA008116A6 /* LisaCoordinatorObserver.h */, - DD7D5C6F1427F89B00DCFE5C /* LisaCoordinator.cpp */, - DD7D5C701427F89B00DCFE5C /* LisaCoordinator.h */, - DDF1636A15064B7800E3E6BD /* LisaMapNewView.cpp */, - DDF1636915064B7800E3E6BD /* LisaMapNewView.h */, - DD7E91D2151A8F3A001AAC4C /* LisaScatterPlotView.cpp */, - DD7E91D1151A8F3A001AAC4C /* LisaScatterPlotView.h */, - DD3079E119EDAE6C001E5E89 /* LowessParamDlg.cpp */, - DD3079E219EDAE6C001E5E89 /* LowessParamDlg.h */, - DD3079C419ED9F61001E5E89 /* LowessParamObservable.cpp */, - DD3079C519ED9F61001E5E89 /* LowessParamObservable.h */, - DD3079C619ED9F61001E5E89 /* LowessParamObserver.h */, - DD203F9B14C0C960006A731B /* MapNewView.cpp */, - DD203F9C14C0C960006A731B /* MapNewView.h */, - DD2B43401522A95100888E51 /* PCPNewView.cpp */, - DD2B43411522A95100888E51 /* PCPNewView.h */, - DD409DFA19FF099E00C21A2B /* ScatterPlotMatView.h */, - DD409DF919FF099E00C21A2B /* ScatterPlotMatView.cpp */, - DD99BA1811D3F8D6003BB40E /* ScatterNewPlotView.h */, - DD99BA1911D3F8D6003BB40E /* ScatterNewPlotView.cpp */, - DDC9068C1A129CFF002334D2 /* SimpleAxisCanvas.cpp */, - DDC9068D1A129CFF002334D2 /* SimpleAxisCanvas.h */, - DDCCB5CA1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp */, - DDCCB5CB1AD47C200067D6C4 /* SimpleBinsHistCanvas.h */, - DDC9068E1A129CFF002334D2 /* SimpleHistCanvas.cpp */, - DDC9068F1A129CFF002334D2 /* SimpleHistCanvas.h */, - DDC906901A129CFF002334D2 /* SimpleScatterPlotCanvas.cpp */, - DDC906911A129CFF002334D2 /* SimpleScatterPlotCanvas.h */, - DD6C9EB11A03FD0C00F124F1 /* VarsChooserDlg.cpp */, - DD6C9EB21A03FD0C00F124F1 /* VarsChooserDlg.h */, - DD6C9EB31A03FD0C00F124F1 /* VarsChooserObservable.cpp */, - DD6C9EB41A03FD0C00F124F1 /* VarsChooserObservable.h */, - DD6C9EB51A03FD0C00F124F1 /* VarsChooserObserver.h */, - DD26CBE219A41A480092C0F2 /* WebViewExampleWin.cpp */, - DD26CBE319A41A480092C0F2 /* WebViewExampleWin.h */, - DD8183C2197054CA00228B0A /* WeightsMapCanvas.h */, - DD8183C1197054CA00228B0A /* WeightsMapCanvas.cpp */, - A11B85BA1B18DC89008B64EA /* Basemap.h */, - A11B85BB1B18DC9C008B64EA /* Basemap.cpp */, - ); - path = Explore; - sourceTree = ""; - }; - DD7976070F1D2C5E00496A84 /* rc */ = { - isa = PBXGroup; - children = ( - A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */, - DD5A579616E53EC40047DBB1 /* GeoDa.icns */, - DDB056D813554EEC0044C441 /* data_viewer_dialogs.xrc */, - DD7976200F1D2C5E00496A84 /* dialogs.xrc */, - DD79761D0F1D2C5E00496A84 /* toolbar.xrc */, - DD7976270F1D2C5E00496A84 /* menus.xrc */, - DD563E061064237C0070781C /* release-notes.txt */, - ); - path = rc; - sourceTree = ""; - }; - DD7976950F1D2CA800496A84 /* Regression */ = { - isa = PBXGroup; - children = ( - DD7976960F1D2CA800496A84 /* blaswrap.h */, - DD7976970F1D2CA800496A84 /* clapack.h */, - DD7976980F1D2CA800496A84 /* DenseMatrix.cpp */, - DD7976990F1D2CA800496A84 /* DenseMatrix.h */, - DD79769A0F1D2CA800496A84 /* DenseVector.cpp */, - DD79769B0F1D2CA800496A84 /* DenseVector.h */, - DD79769C0F1D2CA800496A84 /* DiagnosticReport.cpp */, - DD79769D0F1D2CA800496A84 /* DiagnosticReport.h */, - DD79769E0F1D2CA800496A84 /* f2c.h */, - DD93748F1AC2086B0066AF21 /* Link.h */, - DD7976A20F1D2CA800496A84 /* Lite2.h */, - DD7976A30F1D2CA800496A84 /* mix.cpp */, - DD7976A40F1D2CA800496A84 /* mix.h */, - DD7976A50F1D2CA800496A84 /* ML_im.cpp */, - DD7976A60F1D2CA800496A84 /* ML_im.h */, - DD7976A70F1D2CA800496A84 /* polym.h */, - DD7976A80F1D2CA800496A84 /* PowerLag.cpp */, - DD7976A90F1D2CA800496A84 /* PowerLag.h */, - DD7976AA0F1D2CA800496A84 /* PowerSymLag.cpp */, - DD7976AB0F1D2CA800496A84 /* PowerSymLag.h */, - DD7976AE0F1D2CA800496A84 /* smile.h */, - DD7976AF0F1D2CA800496A84 /* smile2.cpp */, - DD7976B00F1D2CA800496A84 /* SparseMatrix.cpp */, - DD7976B10F1D2CA800496A84 /* SparseMatrix.h */, - DD7976B20F1D2CA800496A84 /* SparseRow.cpp */, - DD7976B30F1D2CA800496A84 /* SparseRow.h */, - DD7976B40F1D2CA800496A84 /* SparseVector.cpp */, - DD7976B50F1D2CA800496A84 /* SparseVector.h */, - DD7976B60F1D2CA800496A84 /* Weights.cpp */, - DD7976B70F1D2CA800496A84 /* Weights.h */, - ); - path = Regression; - sourceTree = ""; - }; - DD7976E10F1D2D3100496A84 /* ShapeOperations */ = { - isa = PBXGroup; - children = ( - DDD140520F310324009F7F13 /* AbstractShape.h */, - DDD140530F310324009F7F13 /* AbstractShape.cpp */, - DDD13F910F2FD641009F7F13 /* BasePoint.h */, - DDD13F920F2FD641009F7F13 /* BasePoint.cpp */, - DDD13FA90F30B2E4009F7F13 /* Box.h */, - DDD13FAA0F30B2E4009F7F13 /* Box.cpp */, - DDC9DD8815937B2F00A0E5BA /* CsvFileUtils.cpp */, - DDC9DD8915937B2F00A0E5BA /* CsvFileUtils.h */, - DD64A6AB0F2A7A81006B1E6D /* DBF.h */, - DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */, - DD579B68160BDAFE00BF8D53 /* DorlingCartogram.cpp */, - DD579B69160BDAFE00BF8D53 /* DorlingCartogram.h */, - A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */, - A1F1BA5B178D3B46005A46E5 /* GdaCache.h */, - DDD593AA12E9F34C00F7A7C4 /* GeodaWeight.h */, - DDD593AB12E9F34C00F7A7C4 /* GeodaWeight.cpp */, - DDD593C512E9F90000F7A7C4 /* GalWeight.h */, - DDD593C612E9F90000F7A7C4 /* GalWeight.cpp */, - DDD593C812E9F90C00F7A7C4 /* GwtWeight.h */, - DDD593C912E9F90C00F7A7C4 /* GwtWeight.cpp */, - DD30798C19ED80E0001E5E89 /* Lowess.cpp */, - DD30798D19ED80E0001E5E89 /* Lowess.h */, - A12E0F4D1705087A00B6059C /* OGRDataAdapter.h */, - A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */, - A1E78133178A90A100CC1037 /* OGRDatasourceProxy.cpp */, - A1E78134178A90A100CC1037 /* OGRDatasourceProxy.h */, - A1E78137178A90A100CC1037 /* OGRLayerProxy.cpp */, - A1E78138178A90A100CC1037 /* OGRLayerProxy.h */, - A1E78135178A90A100CC1037 /* OGRFieldProxy.cpp */, - A1E78136178A90A100CC1037 /* OGRFieldProxy.h */, - DD7976E60F1D2D3100496A84 /* Randik.cpp */, - DD7976E70F1D2D3100496A84 /* Randik.h */, - DD694683130307C00072386B /* RateSmoothing.h */, - DD694684130307C00072386B /* RateSmoothing.cpp */, - DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */, - DD9373F61AC1FEAA0066AF21 /* PolysToContigWeights.h */, - DD27EF030F2F6CBE009C5C42 /* ShapeFile.h */, - DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */, - DD5FA1D80F320DD50055A0E5 /* ShapeFileHdr.h */, - DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */, - DDD13F6D0F2FC802009F7F13 /* ShapeFileTriplet.h */, - DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */, - DDD13F720F2FCEE8009F7F13 /* ShapeFileTypes.h */, - DDDC11EB1159783700E515BB /* ShapeUtils.cpp */, - DDDC11EC1159783700E515BB /* ShapeUtils.h */, - DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */, - DD9373B51AC1F99D0066AF21 /* SimplePoint.h */, - DD307DB719F0483B001E5E89 /* SmoothingUtils.cpp */, - DD307DB819F0483B001E5E89 /* SmoothingUtils.h */, - DDD593AE12E9F42100F7A7C4 /* WeightsManager.h */, - DDD593AF12E9F42100F7A7C4 /* WeightsManager.cpp */, - DD817EA719676AF100228B0A /* WeightsManState.h */, - DD817EA619676AF100228B0A /* WeightsManState.cpp */, - DD817EA919676B7900228B0A /* WeightsManStateObserver.h */, - DD3BA0CF187111DE00CA4152 /* WeightsManPtree.h */, - DD3BA0CE187111DE00CA4152 /* WeightsManPtree.cpp */, - DD75A03F15E81AF9008A7F8C /* VoronoiUtils.h */, - DD75A04015E81AF9008A7F8C /* VoronoiUtils.cpp */, - DDA4F0AC196315AF007645E2 /* WeightUtils.h */, - DDA4F0AB196315AF007645E2 /* WeightUtils.cpp */, - ); - path = ShapeOperations; - sourceTree = ""; - }; - DD972054150A6EE4000206F4 /* CmdLineUtils */ = { - isa = PBXGroup; - children = ( - DD972055150A6F17000206F4 /* sp_tm_conv */, - ); - name = CmdLineUtils; - sourceTree = ""; - }; - DD972055150A6F17000206F4 /* sp_tm_conv */ = { - isa = PBXGroup; - children = ( - DD972056150A6F44000206F4 /* sp_tm_conv.cpp */, - ); - name = sp_tm_conv; - sourceTree = ""; - }; - DDDFB96D134B6B73005EF636 /* DataViewer */ = { - isa = PBXGroup; - children = ( - DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */, - DD8DCE0D19C0FD8F00E62C3D /* DataChangeType.h */, - A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */, - A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */, - DD2A6FDE178C7F7C00197093 /* DataSource.cpp */, - DD2A6FDF178C7F7C00197093 /* DataSource.h */, - DDB057441356318A0044C441 /* DataViewerAddColDlg.cpp */, - DDB057451356318A0044C441 /* DataViewerAddColDlg.h */, - DD7411001385B08B00554B0F /* DataViewerDeleteColDlg.cpp */, - DD7411011385B08B00554B0F /* DataViewerDeleteColDlg.h */, - DDF85D1613B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp */, - DDF85D1713B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.h */, - DDA73B7E13672821003783BC /* DataViewerResizeColDlg.cpp */, - DDA73B7F13672821003783BC /* DataViewerResizeColDlg.h */, - DDFE0E0717502E810099FFEC /* DbfColContainer.h */, - DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */, - DD497478176F59670007BB9F /* DbfTable.h */, - DD497479176F59670007BB9F /* DbfTable.cpp */, - DDB252B213BBFD6700A7CE26 /* MergeTableDlg.cpp */, - DDB252B313BBFD6700A7CE26 /* MergeTableDlg.h */, - A1E77FDB17889BE200CC1037 /* OGRTable.h */, - A1E77FDA17889BE200CC1037 /* OGRTable.cpp */, - A11F1B801850437A006F5F98 /* OGRTableOperation.cpp */, - A11F1B811850437A006F5F98 /* OGRTableOperation.h */, - A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */, - A11F1B7E184FDFB3006F5F98 /* OGRColumn.h */, - DDE39D97178CDB9A00C47D58 /* PtreeInterface.h */, - DD4974B81770AC840007BB9F /* TableBase.h */, - DD4974B91770AC840007BB9F /* TableBase.cpp */, - DD4974B51770AC700007BB9F /* TableFrame.h */, - DD4974B61770AC700007BB9F /* TableFrame.cpp */, - DD4974E01770CE9E0007BB9F /* TableInterface.h */, - DD4974E11770CE9E0007BB9F /* TableInterface.cpp */, - DDA462FD164D785500EBBD8F /* TableState.h */, - DDA462FC164D785500EBBD8F /* TableState.cpp */, - DDA462FE164D785500EBBD8F /* TableStateObserver.h */, - DDFE0E27175034EC0099FFEC /* TimeState.cpp */, - DDFE0E28175034EC0099FFEC /* TimeState.h */, - DDFE0E29175034EC0099FFEC /* TimeStateObserver.h */, - DD92853C17F5FE2E00B9481A /* VarGroup.h */, - DD92853B17F5FE2E00B9481A /* VarGroup.cpp */, - DD92851E17F5FD4500B9481A /* VarOrderMapper.h */, - DD92851D17F5FD4500B9481A /* VarOrderMapper.cpp */, - DD92851B17F5FC7300B9481A /* VarOrderPtree.h */, - DD92851A17F5FC7300B9481A /* VarOrderPtree.cpp */, - ); - name = DataViewer; - sourceTree = ""; - }; - DDEA3CB6193CEE250028B746 /* VarCalc */ = { - isa = PBXGroup; - children = ( - A17336821C06917B00579354 /* WeightsManInterface.h */, - DD5AA73B1982D200009B30C6 /* CalcHelp.cpp */, - DD5AA73C1982D200009B30C6 /* CalcHelp.h */, - DDEA3CB7193CEE5C0028B746 /* GdaFlexValue.cpp */, - DDEA3CB8193CEE5C0028B746 /* GdaFlexValue.h */, - DDEA3CB9193CEE5C0028B746 /* GdaLexer.cpp */, - DDEA3CBA193CEE5C0028B746 /* GdaLexer.h */, - DDEA3CBB193CEE5C0028B746 /* GdaParser.cpp */, - DDEA3CBC193CEE5C0028B746 /* GdaParser.h */, - DDD2392B1AB86D8F00E4E1BF /* NumericTests.cpp */, - DDD2392C1AB86D8F00E4E1BF /* NumericTests.h */, - DDA4F0A2196311A9007645E2 /* WeightsMetaInfo.h */, - DDA4F0A3196311A9007645E2 /* WeightsMetaInfo.cpp */, - ); - name = VarCalc; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - DD7974800F1D1B6600496A84 /* GeoDa */ = { - isa = PBXNativeTarget; - buildConfigurationList = DD7974870F1D1B6600496A84 /* Build configuration list for PBXNativeTarget "GeoDa" */; - buildPhases = ( - DD79747D0F1D1B6600496A84 /* Resources */, - DD79747E0F1D1B6600496A84 /* Sources */, - DD79747F0F1D1B6600496A84 /* Frameworks */, - DD2EB0FF19E6EF940073E36F /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = GeoDa; - productName = GeoDa; - productReference = DD7974810F1D1B6600496A84 /* GeoDa.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DD7974670F1D1B0700496A84 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 0510; - }; - buildConfigurationList = DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = DD7974650F1D1B0700496A84 /* ../../ */; - productRefGroup = DD7974820F1D1B6600496A84 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DD7974800F1D1B6600496A84 /* GeoDa */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - DD79747D0F1D1B6600496A84 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DD5A579716E53EC40047DBB1 /* GeoDa.icns in Resources */, - A19F51501756A11E006E31B4 /* plugins in Resources */, - DDBDFE6A19E73E07004CCEDA /* web_plugins in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - DD79747E0F1D1B6600496A84 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DD7974C80F1D250A00496A84 /* TemplateCanvas.cpp in Sources */, - A1EF332F18E35D8300E19375 /* LocaleSetupDlg.cpp in Sources */, - DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */, - DD79756C0F1D296F00496A84 /* ASC2SHPDlg.cpp in Sources */, - DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */, - DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */, - DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */, - DD79757C0F1D296F00496A84 /* HistIntervalDlg.cpp in Sources */, - DD79757F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp in Sources */, - DD7975820F1D296F00496A84 /* PCPDlg.cpp in Sources */, - DD7975830F1D296F00496A84 /* PermutationCounterDlg.cpp in Sources */, - DD7975850F1D296F00496A84 /* RandomizationDlg.cpp in Sources */, - DD7975890F1D296F00496A84 /* RegressionDlg.cpp in Sources */, - DD79758B0F1D296F00496A84 /* RegressionReportDlg.cpp in Sources */, - A1C9F3ED18B55EE000E14394 /* FieldNameCorrectionDlg.cpp in Sources */, - DD7975920F1D296F00496A84 /* SaveSelectionDlg.cpp in Sources */, - DD7975940F1D296F00496A84 /* SHP2ASCDlg.cpp in Sources */, - DD7975980F1D296F00496A84 /* VariableSettingsDlg.cpp in Sources */, - DD7975D20F1D2A9000496A84 /* 3DPlotView.cpp in Sources */, - DD7975D60F1D2A9000496A84 /* Geom3D.cpp in Sources */, - DD7976B80F1D2CA800496A84 /* DenseMatrix.cpp in Sources */, - DD7976B90F1D2CA800496A84 /* DenseVector.cpp in Sources */, - DD7976BA0F1D2CA800496A84 /* DiagnosticReport.cpp in Sources */, - DD7976BC0F1D2CA800496A84 /* mix.cpp in Sources */, - DD7976BD0F1D2CA800496A84 /* ML_im.cpp in Sources */, - DD7976BE0F1D2CA800496A84 /* PowerLag.cpp in Sources */, - DD7976BF0F1D2CA800496A84 /* PowerSymLag.cpp in Sources */, - DD7976C10F1D2CA800496A84 /* smile2.cpp in Sources */, - DD7976C20F1D2CA800496A84 /* SparseMatrix.cpp in Sources */, - DD7976C30F1D2CA800496A84 /* SparseRow.cpp in Sources */, - DD7976C40F1D2CA800496A84 /* SparseVector.cpp in Sources */, - DD7976C50F1D2CA800496A84 /* Weights.cpp in Sources */, - DD7976F30F1D2D3100496A84 /* Randik.cpp in Sources */, - DD64A2880F20FE06006B1E6D /* GeneralWxUtils.cpp in Sources */, - DD64A5580F2910D2006B1E6D /* logger.cpp in Sources */, - DD64A6AD0F2A7A81006B1E6D /* DBF.cpp in Sources */, - DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */, - DD27EF050F2F6CBE009C5C42 /* ShapeFile.cpp in Sources */, - DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */, - DDD13F6F0F2FC802009F7F13 /* ShapeFileTriplet.cpp in Sources */, - A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */, - DDD13F930F2FD641009F7F13 /* BasePoint.cpp in Sources */, - DDD13FAB0F30B2E4009F7F13 /* Box.cpp in Sources */, - DDD140540F310324009F7F13 /* AbstractShape.cpp in Sources */, - DD5FA1DA0F320DD50055A0E5 /* ShapeFileHdr.cpp in Sources */, - A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */, - A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */, - DDB0E42C10B34DBB00F96D57 /* AddIdVariable.cpp in Sources */, - DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */, - DDAA6540117F9B5D00D1010C /* Project.cpp in Sources */, - DDB37A0811CBBB730020C8A9 /* TemplateLegend.cpp in Sources */, - DD115EA312BBDDA000E1CC73 /* ProgressDlg.cpp in Sources */, - DDD593AC12E9F34C00F7A7C4 /* GeodaWeight.cpp in Sources */, - DDD593B012E9F42100F7A7C4 /* WeightsManager.cpp in Sources */, - A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */, - DDD593C712E9F90000F7A7C4 /* GalWeight.cpp in Sources */, - DDD593CA12E9F90C00F7A7C4 /* GwtWeight.cpp in Sources */, - DD694685130307C00072386B /* RateSmoothing.cpp in Sources */, - DDF14CDA139432B000363FA1 /* DataViewerDeleteColDlg.cpp in Sources */, - A1E5BC841DBFE661005739E9 /* ReportBugDlg.cpp in Sources */, - DDF14CDC139432C100363FA1 /* DataViewerResizeColDlg.cpp in Sources */, - DDF14CDD139432CB00363FA1 /* DataViewerAddColDlg.cpp in Sources */, - DDB77C0D139820CB00569A1E /* GStatCoordinator.cpp in Sources */, - DD209598139F129900B9E648 /* GetisOrdChoiceDlg.cpp in Sources */, - DD181BC813A90445004B0EC2 /* SaveToTableDlg.cpp in Sources */, - DDF85D1813B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp in Sources */, - DDB252B513BBFD6700A7CE26 /* MergeTableDlg.cpp in Sources */, - DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */, - DD89C87413D86BC7006C068D /* FieldNewCalcBinDlg.cpp in Sources */, - DD89C87513D86BC7006C068D /* FieldNewCalcLagDlg.cpp in Sources */, - DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */, - DD89C87713D86BC7006C068D /* FieldNewCalcSheetDlg.cpp in Sources */, - DD89C87813D86BC7006C068D /* FieldNewCalcUniDlg.cpp in Sources */, - DDB77F3E140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp in Sources */, - DD6B7289141A61400026D223 /* FramesManager.cpp in Sources */, - DD7D5C711427F89B00DCFE5C /* LisaCoordinator.cpp in Sources */, - A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */, - DDA8D55214479228008156FB /* ScatterNewPlotView.cpp in Sources */, - DDA8D5681447948B008156FB /* ShapeUtils.cpp in Sources */, - DD6456CA14881EA700AABF59 /* TimeChooserDlg.cpp in Sources */, - DD203F9D14C0C960006A731B /* MapNewView.cpp in Sources */, - DDF1636B15064B7800E3E6BD /* LisaMapNewView.cpp in Sources */, - DDF1637015064C2900E3E6BD /* GetisOrdMapNewView.cpp in Sources */, - DD7E91D3151A8F3A001AAC4C /* LisaScatterPlotView.cpp in Sources */, - DD2B42B11522552B00888E51 /* BoxNewPlotView.cpp in Sources */, - DD2B433F1522A93700888E51 /* HistogramView.cpp in Sources */, - DD2B43421522A95100888E51 /* PCPNewView.cpp in Sources */, - DDC9DD8515937AA000A0E5BA /* ExportCsvDlg.cpp in Sources */, - DDC9DD8A15937B2F00A0E5BA /* CsvFileUtils.cpp in Sources */, - DDC9DD9C15937C0200A0E5BA /* ImportCsvDlg.cpp in Sources */, - DD75A04115E81AF9008A7F8C /* VoronoiUtils.cpp in Sources */, - DDB2A75F15FA7DA900022ABE /* CartogramNewView.cpp in Sources */, - A11F1B821850437A006F5F98 /* OGRTableOperation.cpp in Sources */, - DD579B6A160BDAFE00BF8D53 /* DorlingCartogram.cpp in Sources */, - DDAD0218162754EA00748874 /* ConditionalNewView.cpp in Sources */, - DDDBF286163AD1D50070610C /* ConditionalMapView.cpp in Sources */, - DDDBF29B163AD2BF0070610C /* ConditionalScatterPlotView.cpp in Sources */, - A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */, - DDDBF2AE163AD3AB0070610C /* ConditionalHistogramView.cpp in Sources */, - DD4E8B86164818A70014F1E7 /* ConnectivityHistView.cpp in Sources */, - DD8FACE11649595D007598CE /* DataMovieDlg.cpp in Sources */, - DDA462FF164D785500EBBD8F /* TableState.cpp in Sources */, - DDE3F5081677C46500D13A2C /* CatClassification.cpp in Sources */, - A11F1B7F184FDFB3006F5F98 /* OGRColumn.cpp in Sources */, - DDF53FF3167A39520042B453 /* CatClassifState.cpp in Sources */, - DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */, - DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */, - DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */, - A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */, - A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */, - A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */, - DDFE0E0917502E810099FFEC /* DbfColContainer.cpp in Sources */, - DDFE0E2A175034EC0099FFEC /* TimeState.cpp in Sources */, - DD49747A176F59670007BB9F /* DbfTable.cpp in Sources */, - DD4974B71770AC700007BB9F /* TableFrame.cpp in Sources */, - DD4974BA1770AC840007BB9F /* TableBase.cpp in Sources */, - DD4974E21770CE9E0007BB9F /* TableInterface.cpp in Sources */, - A1E77E1A177D6A2E00CC1037 /* ExportDataDlg.cpp in Sources */, - A1E77FDC17889BE200CC1037 /* OGRTable.cpp in Sources */, - A1E78139178A90A100CC1037 /* OGRDatasourceProxy.cpp in Sources */, - A1E7813A178A90A100CC1037 /* OGRFieldProxy.cpp in Sources */, - A1E7813B178A90A100CC1037 /* OGRLayerProxy.cpp in Sources */, - DD2A6FE0178C7F7C00197093 /* DataSource.cpp in Sources */, - A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */, - DD92D22417BAAF2300F8FE01 /* TimeEditorDlg.cpp in Sources */, - A1DA623A17BCBC070070CAAB /* AutoCompTextCtrl.cpp in Sources */, - A1B93AC017D18735007F8195 /* ProjectConf.cpp in Sources */, - DD92851C17F5FC7300B9481A /* VarOrderPtree.cpp in Sources */, - DD92851F17F5FD4500B9481A /* VarOrderMapper.cpp in Sources */, - DD92853D17F5FE2E00B9481A /* VarGroup.cpp in Sources */, - A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */, - DD40B083181894F20084173C /* VarGroupingEditorDlg.cpp in Sources */, - DD7B2A9D185273FF00727A91 /* SaveButtonManager.cpp in Sources */, - DD3BA0D0187111DE00CA4152 /* WeightsManPtree.cpp in Sources */, - DD3BA4481871EE9A00CA4152 /* DefaultVarsPtree.cpp in Sources */, - DDC48EF618AE506400FD773F /* ProjectInfoDlg.cpp in Sources */, - DD0FEBBC1909B7A000930418 /* NumCategoriesDlg.cpp in Sources */, - DD9C1B371910267900C0A427 /* GdaConst.cpp in Sources */, - DDEA3CBD193CEE5C0028B746 /* GdaFlexValue.cpp in Sources */, - DDEA3CBE193CEE5C0028B746 /* GdaLexer.cpp in Sources */, - DDEA3CBF193CEE5C0028B746 /* GdaParser.cpp in Sources */, - DDEA3D01193D17130028B746 /* CalculatorDlg.cpp in Sources */, - A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */, - DDA4F0A4196311A9007645E2 /* WeightsMetaInfo.cpp in Sources */, - DDA4F0AD196315AF007645E2 /* WeightUtils.cpp in Sources */, - DD817EA819676AF100228B0A /* WeightsManState.cpp in Sources */, - DD8183C3197054CA00228B0A /* WeightsMapCanvas.cpp in Sources */, - DD8183C81970619800228B0A /* WeightsManDlg.cpp in Sources */, - DD81857C19709B7800228B0A /* ConnectivityMapView.cpp in Sources */, - DD4DED12197E16FF00FE29E8 /* SelectWeightsDlg.cpp in Sources */, - DD5AA73D1982D200009B30C6 /* CalcHelp.cpp in Sources */, - DD26CBE419A41A480092C0F2 /* WebViewExampleWin.cpp in Sources */, - DD8DCE0E19C0FD8F00E62C3D /* DataChangeType.cpp in Sources */, - DD2AE42A19D4F4CA00B23FB9 /* GdaJson.cpp in Sources */, - A1CE3D331C1A427A0010F170 /* PublishDlg.cpp in Sources */, - DD30798E19ED80E0001E5E89 /* Lowess.cpp in Sources */, - DD3079C719ED9F61001E5E89 /* LowessParamObservable.cpp in Sources */, - DD3079E319EDAE6C001E5E89 /* LowessParamDlg.cpp in Sources */, - DD307DB919F0483B001E5E89 /* SmoothingUtils.cpp in Sources */, - DDCFA9961A96790100747EB7 /* DbfFile.cpp in Sources */, - DD3082B319F709BB001E5E89 /* WebViewHelpWin.cpp in Sources */, - DD409DFB19FF099E00C21A2B /* ScatterPlotMatView.cpp in Sources */, - DD409E4C19FFD43000C21A2B /* VarTools.cpp in Sources */, - DD6C9EB61A03FD0C00F124F1 /* VarsChooserDlg.cpp in Sources */, - DD6C9EB71A03FD0C00F124F1 /* VarsChooserObservable.cpp in Sources */, - DDC906921A129CFF002334D2 /* SimpleAxisCanvas.cpp in Sources */, - DDC906931A129CFF002334D2 /* SimpleHistCanvas.cpp in Sources */, - DDC906941A129CFF002334D2 /* SimpleScatterPlotCanvas.cpp in Sources */, - DD76D1331A151C4E00A01FA5 /* LineChartView.cpp in Sources */, - DD76D15A1A15430600A01FA5 /* LineChartCanvas.cpp in Sources */, - DD6CDA7A1A255CEF00FCF2B8 /* LineChartStats.cpp in Sources */, - DD88CF081A4253B700803196 /* CovSpView.cpp in Sources */, - DD88CF0B1A4254D000803196 /* CovSpHLStateProxy.cpp in Sources */, - DD6EE55F1A434302003AB41E /* DistancesCalc.cpp in Sources */, - DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */, - DDE4DFE91A96411A005B9158 /* ShpFile.cpp in Sources */, - DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */, - DD7686D71A9FF47B009EFC6D /* gdiam.cpp in Sources */, - DDEFAAA71AA4F07200F6AAFA /* PointSetAlgs.cpp in Sources */, - DD72C19A1AAE95480000420B /* SpatialIndAlgs.cpp in Sources */, - DDD2392D1AB86D8F00E4E1BF /* NumericTests.cpp in Sources */, - DDFFC7CC1AC0E58B00F7DD6D /* CorrelogramView.cpp in Sources */, - DDFFC7CD1AC0E58B00F7DD6D /* CorrelParamsObservable.cpp in Sources */, - DDFFC7D51AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp in Sources */, - DDFFC7F21AC1C7CF00F7DD6D /* HighlightState.cpp in Sources */, - DD9373B61AC1F99D0066AF21 /* SimplePoint.cpp in Sources */, - DD9373F71AC1FEAA0066AF21 /* PolysToContigWeights.cpp in Sources */, - DDCCB5CC1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp in Sources */, - A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - DD7974680F1D1B0700496A84 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; - COPY_PHASE_STRIP = NO; - GCC_MODEL_TUNING = ""; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_VERSION = ""; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GENERATE_PKGINFO_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.6; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ""; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - DD7974690F1D1B0700496A84 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; - COPY_PHASE_STRIP = YES; - GCC_MODEL_TUNING = ""; - GCC_OPTIMIZATION_LEVEL = 2; - GCC_VERSION = ""; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GENERATE_PKGINFO_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.6; - OTHER_LDFLAGS = ""; - }; - name = Release; - }; - DD7974850F1D1B6600496A84 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_MODEL_TUNING = ""; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = "GeoDa-Xcode-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../..\"", - "\"$(SRCROOT)/../../ogr/ogrsf_frmts/oci\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.1", - "-I./libraries/include/wx-3.1/", - "-I./libraries/include/boost", - "-I./libraries/include", - "-D_FILE_OFFSET_BITS=64", - "-D__WXMAC__", - "-D__WXOSX__", - "-D__WXOSX_COCOA__", - "-D__WXDEBUG__", - "-DDEBUG", - "-stdlib=libc++", - "-std=c++11", - ); - OTHER_LDFLAGS = ( - "-L/usr/lib", - "-liconv", - "-L./libraries/lib", - ./libraries/include/boost/stage/lib/libboost_date_time.a, - ./libraries/include/boost/stage/lib/libboost_system.a, - ./libraries/include/boost/stage/lib/libboost_thread.a, - "-framework", - IOKit, - "-framework", - Carbon, - "-framework", - Cocoa, - "-framework", - AudioToolbox, - "-framework", - System, - "-framework", - OpenGL, - "-framework", - AGL, - "./libraries/lib/libwx_osx_cocoau_xrc-3.1.a", - "./libraries/lib/libwx_osx_cocoau_html-3.1.a", - "./libraries/lib/libwx_osx_cocoau_qa-3.1.a", - "./libraries/lib/libwx_osx_cocoau_adv-3.1.a", - "./libraries/lib/libwx_osx_cocoau_core-3.1.a", - "./libraries/lib/libwx_osx_cocoau_webview-3.1.a", - "./libraries/lib/libwx_baseu_xml-3.1.a", - "./libraries/lib/libwx_baseu_net-3.1.a", - "./libraries/lib/libwx_baseu-3.1.a", - "./libraries/lib/libwx_osx_cocoau_gl-3.1.a", - "./libraries/lib/libwx_osx_cocoau_richtext-3.1.a", - "./libraries/lib/libwx_osx_cocoau_aui-3.1.a", - "-lwxpng-3.1", - "-lwxjpeg-3.1", - "-framework", - WebKit, - "-lexpat", - "-lwxregexu-3.1", - "-lz", - "-lpthread", - "-liconv", - "./temp/CLAPACK-3.2.1/blas.a", - "./temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a", - "./temp/CLAPACK-3.2.1/lapack.a", - "-L./libraries/lib", - "-lgdal", - "-lcurl", - ./libraries/lib/libjson_spirit.a, - ); - PREBINDING = NO; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = GeoDa; - SHARED_PRECOMPS_DIR = ""; - }; - name = Debug; - }; - DD7974860F1D1B6600496A84 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_MODEL_TUNING = ""; - GCC_PRECOMPILE_PREFIX_HEADER = NO; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = "GeoDa-Xcode-Info.plist"; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../..\"", - "\"$(SRCROOT)/../../ogr/ogrsf_frmts/oci\"", - ); - MACOSX_DEPLOYMENT_TARGET = 10.7; - ONLY_ACTIVE_ARCH = YES; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.1", - "-I./libraries/include/wx-3.1/", - "-I./libraries/include/boost", - "-I./libraries/include", - "-D_FILE_OFFSET_BITS=64", - "-D__WXMAC__", - "-D__WXOSX__", - "-D__WXOSX_COCOA__", - ); - OTHER_LDFLAGS = ( - "-L/usr/lib", - "-liconv", - "-L./libraries/lib", - ./libraries/include/boost/stage/lib/libboost_date_time.a, - ./libraries/include/boost/stage/lib/libboost_system.a, - ./libraries/include/boost/stage/lib/libboost_thread.a, - "-framework", - IOKit, - "-framework", - Carbon, - "-framework", - Cocoa, - "-framework", - AudioToolbox, - "-framework", - System, - "-framework", - OpenGL, - "-framework", - AGL, - "./libraries/lib/libwx_osx_cocoau_xrc-3.1.a", - "./libraries/lib/libwx_osx_cocoau_html-3.1.a", - "./libraries/lib/libwx_osx_cocoau_qa-3.1.a", - "./libraries/lib/libwx_osx_cocoau_adv-3.1.a", - "./libraries/lib/libwx_osx_cocoau_core-3.1.a", - "./libraries/lib/libwx_osx_cocoau_webview-3.1.a", - "./libraries/lib/libwx_baseu_xml-3.1.a", - "./libraries/lib/libwx_baseu_net-3.1.a", - "./libraries/lib/libwx_baseu-3.1.a", - "./libraries/lib/libwx_osx_cocoau_gl-3.1.a", - "./libraries/lib/libwx_osx_cocoau_richtext-3.1.a", - "./libraries/lib/libwx_osx_cocoau_aui-3.1.a", - "-lwxpng-3.1", - "-lwxjpeg-3.1", - "-framework", - WebKit, - "-lexpat", - "-lwxregexu-3.1", - "-lwxtiff-3.1", - "-lz", - "-lpthread", - "-liconv", - "./temp/CLAPACK-3.2.1/blas.a", - "./temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a", - "./temp/CLAPACK-3.2.1/lapack.a", - "-L./libraries/lib", - "-lgdal", - "-lcurl", - ./libraries/lib/libjson_spirit.a, - ); - PREBINDING = NO; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - PRODUCT_NAME = GeoDa; - SHARED_PRECOMPS_DIR = ""; - VALID_ARCHS = x86_64; - ZERO_LINK = NO; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DD7974680F1D1B0700496A84 /* Debug */, - DD7974690F1D1B0700496A84 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - DD7974870F1D1B6600496A84 /* Build configuration list for PBXNativeTarget "GeoDa" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DD7974850F1D1B6600496A84 /* Debug */, - DD7974860F1D1B6600496A84 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; -/* End XCConfigurationList section */ - }; - rootObject = DD7974670F1D1B0700496A84 /* Project object */; -} diff --git a/BuildTools/macosx/GeoDa-GDAL-Info.plist b/BuildTools/macosx/GeoDa-GDAL-Info.plist index 99c09e29c..f9659ff23 100644 --- a/BuildTools/macosx/GeoDa-GDAL-Info.plist +++ b/BuildTools/macosx/GeoDa-GDAL-Info.plist @@ -11,7 +11,7 @@ CFBundleName GeoDa CFBundleExecutable - run.sh + GeoDa CFBundleIconFile GeoDa.icns CFBundleIdentifier @@ -23,9 +23,9 @@ CFBundleSignature io.gitub.geodacenter CFBundleVersion - 1.14 + 1.16 CFBundleShortVersionString - 1.14 + 1.16 DTCompiler 4.2 DTPlatformBuild @@ -57,5 +57,9 @@ Owner + NSAppleScriptEnabled + YES + NSDownloadsFolderUsageDescription + GeoDa requires permission to access the Downloads folder. diff --git a/BuildTools/macosx/GeoDa-Xcode-Info.plist b/BuildTools/macosx/GeoDa-Xcode-Info.plist index a0c2dd14b..f9659ff23 100644 --- a/BuildTools/macosx/GeoDa-Xcode-Info.plist +++ b/BuildTools/macosx/GeoDa-Xcode-Info.plist @@ -3,25 +3,29 @@ NSPrincipalClass - NSApplication + NSApplication BuildMachineOSBuild 10K549 CFBundleDevelopmentRegion English + CFBundleName + GeoDa CFBundleExecutable - ${EXECUTABLE_NAME} + GeoDa CFBundleIconFile GeoDa.icns CFBundleIdentifier - edu.asu.geodacenter.GeoDa + edu.uchicago.spatial CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature - ???? + io.gitub.geodacenter CFBundleVersion - 1.0 + 1.16 + CFBundleShortVersionString + 1.16 DTCompiler 4.2 DTPlatformBuild @@ -53,5 +57,9 @@ Owner + NSAppleScriptEnabled + YES + NSDownloadsFolderUsageDescription + GeoDa requires permission to access the Downloads folder. diff --git a/BuildTools/macosx/GeoDa-leopard.xcodeproj/project.pbxproj b/BuildTools/macosx/GeoDa.new.xcodeproj/project.pbxproj similarity index 62% rename from BuildTools/macosx/GeoDa-leopard.xcodeproj/project.pbxproj rename to BuildTools/macosx/GeoDa.new.xcodeproj/project.pbxproj index 161ad0b73..d2dc0ab85 100644 --- a/BuildTools/macosx/GeoDa-leopard.xcodeproj/project.pbxproj +++ b/BuildTools/macosx/GeoDa.new.xcodeproj/project.pbxproj @@ -8,47 +8,170 @@ /* Begin PBXBuildFile section */ A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11B85BB1B18DC9C008B64EA /* Basemap.cpp */; }; + A11EF98E21ED569A00B77413 /* MultiVarSettingsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11EF98D21ED569A00B77413 /* MultiVarSettingsDlg.cpp */; }; A11F1B7F184FDFB3006F5F98 /* OGRColumn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */; }; A11F1B821850437A006F5F98 /* OGRTableOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11F1B801850437A006F5F98 /* OGRTableOperation.cpp */; }; + A12007EF237497E400CBA5B1 /* data_viewer_dialogs.xrc in Resources */ = {isa = PBXBuildFile; fileRef = DDB056D813554EEC0044C441 /* data_viewer_dialogs.xrc */; }; + A12007F0237497E400CBA5B1 /* dialogs.xrc in Resources */ = {isa = PBXBuildFile; fileRef = DD7976200F1D2C5E00496A84 /* dialogs.xrc */; }; + A12007F1237497E400CBA5B1 /* toolbar.xrc in Resources */ = {isa = PBXBuildFile; fileRef = DD79761D0F1D2C5E00496A84 /* toolbar.xrc */; }; + A12007F2237497E400CBA5B1 /* menus.xrc in Resources */ = {isa = PBXBuildFile; fileRef = DD7976270F1D2C5E00496A84 /* menus.xrc */; }; + A1230E5E212DF54D002AB30A /* switch-on.png in Resources */ = {isa = PBXBuildFile; fileRef = A1230E5C212DF54C002AB30A /* switch-on.png */; }; + A1230E5F212DF54D002AB30A /* switch-off.png in Resources */ = {isa = PBXBuildFile; fileRef = A1230E5D212DF54D002AB30A /* switch-off.png */; }; + A1230E622130E783002AB30A /* MapLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1230E602130E783002AB30A /* MapLayer.cpp */; }; + A1230E652130E81A002AB30A /* MapLayerTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1230E632130E81A002AB30A /* MapLayerTree.cpp */; }; A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */; }; A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */; }; - A14CB4651C866E110082B436 /* AdjustYAxisDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14CB4611C866E110082B436 /* AdjustYAxisDlg.cpp */; }; - A14CB4661C866E110082B436 /* BasemapConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14CB4631C866E110082B436 /* BasemapConfDlg.cpp */; }; - A14CB46E1C86705B0082B436 /* PublishDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14CB46C1C86705B0082B436 /* PublishDlg.cpp */; }; - A1546D241F5B52D2002FC3DF /* cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D181F5B52D2002FC3DF /* cluster.cpp */; }; - A1546D251F5B52D2002FC3DF /* maxp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D1A1F5B52D2002FC3DF /* maxp.cpp */; }; - A1546D271F5B52D2002FC3DF /* pca.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D1E1F5B52D2002FC3DF /* pca.cpp */; }; - A1546D281F5B52D2002FC3DF /* redcap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D201F5B52D2002FC3DF /* redcap.cpp */; }; - A1546D291F5B52D2002FC3DF /* spectral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D221F5B52D2002FC3DF /* spectral.cpp */; }; - A1546D381F5B53A7002FC3DF /* AbstractClusterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D2A1F5B53A7002FC3DF /* AbstractClusterDlg.cpp */; }; - A1546D391F5B53A7002FC3DF /* HClusterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D2C1F5B53A7002FC3DF /* HClusterDlg.cpp */; }; - A1546D3A1F5B53A7002FC3DF /* KMeansDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D2E1F5B53A7002FC3DF /* KMeansDlg.cpp */; }; - A1546D3B1F5B53A7002FC3DF /* MaxpDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D301F5B53A7002FC3DF /* MaxpDlg.cpp */; }; - A1546D3C1F5B53A7002FC3DF /* MDSDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D321F5B53A7002FC3DF /* MDSDlg.cpp */; }; - A1546D3D1F5B53A7002FC3DF /* RedcapDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D341F5B53A7002FC3DF /* RedcapDlg.cpp */; }; - A1546D3E1F5B53A7002FC3DF /* SpectralClusteringDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1546D361F5B53A7002FC3DF /* SpectralClusteringDlg.cpp */; }; - A15609181E52442C009F4178 /* ReportBugDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A15609161E52442C009F4178 /* ReportBugDlg.cpp */; }; - A156091B1E524445009F4178 /* ConditionalClusterMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A15609191E524445009F4178 /* ConditionalClusterMapView.cpp */; }; + A14735AA21A5F72D00CA69B2 /* DistUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735A921A5F72D00CA69B2 /* DistUtils.cpp */; }; + A14735B521A65F1800CA69B2 /* bd_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AB21A65F1600CA69B2 /* bd_tree.cpp */; }; + A14735B621A65F1800CA69B2 /* kd_dump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AC21A65F1600CA69B2 /* kd_dump.cpp */; }; + A14735B721A65F1800CA69B2 /* bd_fix_rad_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AD21A65F1700CA69B2 /* bd_fix_rad_search.cpp */; }; + A14735B821A65F1800CA69B2 /* kd_fix_rad_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AE21A65F1700CA69B2 /* kd_fix_rad_search.cpp */; }; + A14735B921A65F1800CA69B2 /* bd_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AF21A65F1700CA69B2 /* bd_search.cpp */; }; + A14735BA21A65F1800CA69B2 /* perf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B121A65F1700CA69B2 /* perf.cpp */; }; + A14735BB21A65F1800CA69B2 /* bd_pr_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B221A65F1700CA69B2 /* bd_pr_search.cpp */; }; + A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B321A65F1700CA69B2 /* brute.cpp */; }; + A14B3AD72376229A007EE3AB /* lang in CopyFiles */ = {isa = PBXBuildFile; fileRef = A4404A03208E9E380007753D /* lang */; }; + A14B3AD8237622A6007EE3AB /* cache.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F1BA98178D46B8005A46E5 /* cache.sqlite */; }; + A14B3AD9237622AE007EE3AB /* basemap_cache in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1B04ADC1B1921710045AA6F /* basemap_cache */; }; + A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */; }; + A1563A06237DE6E100628FA0 /* localjc_kernel.cl in CopyFiles */ = {isa = PBXBuildFile; fileRef = A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */; }; + A1563A07237DE6E100628FA0 /* distmat_kernel.cl in CopyFiles */ = {isa = PBXBuildFile; fileRef = A47F792320AA084B000AFE57 /* distmat_kernel.cl */; }; + A1563A08237DE6E100628FA0 /* lisa_kernel.cl in CopyFiles */ = {isa = PBXBuildFile; fileRef = A47F792120AA082A000AFE57 /* lisa_kernel.cl */; }; A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */; }; - A16D406E1CD4233A0025C64C /* AutoUpdateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16D406C1CD4233A0025C64C /* AutoUpdateDlg.cpp */; }; + A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */; }; + A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F774227772FC00EB9CB7 /* GdaListBox.cpp */; }; + A178F779227773C500EB9CB7 /* GdaChoice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F777227773C500EB9CB7 /* GdaChoice.cpp */; }; A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */; }; + A1894C3F213F29DC00718FFC /* SpatialJoinDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1894C3D213F29DC00718FFC /* SpatialJoinDlg.cpp */; }; + A19483932118BAAA009A87A2 /* composit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194837A2118BAA7009A87A2 /* composit.cpp */; }; + A19483942118BAAA009A87A2 /* divided.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194837E2118BAA7009A87A2 /* divided.cpp */; }; + A19483952118BAAA009A87A2 /* constrnt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194837F2118BAA7009A87A2 /* constrnt.cpp */; }; + A19483962118BAAA009A87A2 /* oglmisc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483812118BAA8009A87A2 /* oglmisc.cpp */; }; + A19483972118BAAA009A87A2 /* bmpshape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483852118BAA8009A87A2 /* bmpshape.cpp */; }; + A19483982118BAAA009A87A2 /* basic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483862118BAA8009A87A2 /* basic.cpp */; }; + A19483992118BAAA009A87A2 /* canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483872118BAA8009A87A2 /* canvas.cpp */; }; + A194839A2118BAAA009A87A2 /* lines.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483882118BAA9009A87A2 /* lines.cpp */; }; + A194839B2118BAAA009A87A2 /* basic2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483892118BAA9009A87A2 /* basic2.cpp */; }; + A194839C2118BAAA009A87A2 /* mfutils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194838A2118BAA9009A87A2 /* mfutils.cpp */; }; + A194839D2118BAAA009A87A2 /* drawn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194838C2118BAA9009A87A2 /* drawn.cpp */; }; + A194839E2118BAAA009A87A2 /* ogldiag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483912118BAAA009A87A2 /* ogldiag.cpp */; }; + A19483A22118BE8F009A87A2 /* MapLayoutView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483A02118BE8E009A87A2 /* MapLayoutView.cpp */; }; A19F51501756A11E006E31B4 /* plugins in Resources */ = {isa = PBXBuildFile; fileRef = A19F514D1756A11E006E31B4 /* plugins */; }; - A1B04ADD1B1921710045AA6F /* basemap_cache in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1B04ADC1B1921710045AA6F /* basemap_cache */; }; + A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */; }; + A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */; }; A1B93AC017D18735007F8195 /* ProjectConf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B93ABF17D18735007F8195 /* ProjectConf.cpp */; }; A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */; }; A1C9F3ED18B55EE000E14394 /* FieldNameCorrectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1C9F3EC18B55EE000E14394 /* FieldNameCorrectionDlg.cpp */; }; - A1D766D91D7A2196002365D6 /* CsvFieldConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1D766D71D7A2195002365D6 /* CsvFieldConfDlg.cpp */; }; + A1CE3D331C1A427A0010F170 /* PublishDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */; }; A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1D82DEE174D3EB6003DE20A /* ConnectDatasourceDlg.cpp */; }; A1DA623A17BCBC070070CAAB /* AutoCompTextCtrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */; }; + A1E5BC841DBFE661005739E9 /* ReportBugDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */; }; A1E77E1A177D6A2E00CC1037 /* ExportDataDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E77E18177D6A2E00CC1037 /* ExportDataDlg.cpp */; }; A1E77FDC17889BE200CC1037 /* OGRTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E77FDA17889BE200CC1037 /* OGRTable.cpp */; }; A1E78139178A90A100CC1037 /* OGRDatasourceProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78133178A90A100CC1037 /* OGRDatasourceProxy.cpp */; }; A1E7813A178A90A100CC1037 /* OGRFieldProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78135178A90A100CC1037 /* OGRFieldProxy.cpp */; }; A1E7813B178A90A100CC1037 /* OGRLayerProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E78137178A90A100CC1037 /* OGRLayerProxy.cpp */; }; + A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */; }; A1EF332F18E35D8300E19375 /* LocaleSetupDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */; }; A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */; }; - A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F1BA98178D46B8005A46E5 /* cache.sqlite */; }; A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */; }; + A40A6A7E20226B3C003CDD79 /* PreferenceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A40A6A7D20226B3B003CDD79 /* PreferenceDlg.cpp */; }; + A414C88B207BED2700520546 /* MatfileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A414C88A207BED2700520546 /* MatfileReader.cpp */; }; + A416A1771F84122B001F2884 /* PCASettingsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A416A1751F84122B001F2884 /* PCASettingsDlg.cpp */; }; + A41C2BAC2400441500C341A2 /* tsne.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BA52400441400C341A2 /* tsne.cpp */; }; + A41C2BAD2400441500C341A2 /* distanceplot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BA72400441400C341A2 /* distanceplot.cpp */; }; + A41C2BAE2400441500C341A2 /* splittree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BAB2400441500C341A2 /* splittree.cpp */; }; + A41C2BB32400442400C341A2 /* nbrMatchDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BAF2400442300C341A2 /* nbrMatchDlg.cpp */; }; + A41C2BB42400442400C341A2 /* tSNEDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BB12400442400C341A2 /* tSNEDlg.cpp */; }; + A41C2BB72400443000C341A2 /* DistancePlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BB52400442F00C341A2 /* DistancePlotView.cpp */; }; + A41C2BBB2404471D00C341A2 /* GenColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A41C2BBA2404471D00C341A2 /* GenColor.cpp */; }; + A42018031FB3C0AC0029709C /* skater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A42018011FB3C0AC0029709C /* skater.cpp */; }; + A42018061FB4CF980029709C /* SkaterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A42018051FB4CF980029709C /* SkaterDlg.cpp */; }; + A42B6F781F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A42B6F761F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.cpp */; }; + A4320FC81F4735020007BE0D /* RedcapDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4320FC61F4735020007BE0D /* RedcapDlg.cpp */; }; + A432E84720A672EB007B8B25 /* distmatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A432E84620A672EA007B8B25 /* distmatrix.cpp */; }; + A4368CDC1FABBBC60099FA9B /* mds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4368CDA1FABBBC60099FA9B /* mds.cpp */; }; + A438249A24775CB90001497D /* pam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A438249824775CB90001497D /* pam.cpp */; }; + A43D124C1F1DE1D80073D408 /* MaxpDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D124A1F1DE1D80073D408 /* MaxpDlg.cpp */; }; + A43D124F1F2088D50073D408 /* spectral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D124E1F2088D50073D408 /* spectral.cpp */; }; + A43D12521F20AE450073D408 /* SpectralClusteringDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D12511F20AE450073D408 /* SpectralClusteringDlg.cpp */; }; + A43D31541E845985007488D9 /* LocalGearyCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */; }; + A43D31581E845C3D007488D9 /* LocalGearyMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */; }; + A43F343C2412C8290096E33B /* LoessPlotCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A43F343A2412C8280096E33B /* LoessPlotCanvas.cpp */; }; + A4404A02208E65DD0007753D /* wxTranslationHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4404A00208E65DC0007753D /* wxTranslationHelper.cpp */; }; + A4404A05208E9E390007753D /* lang in Resources */ = {isa = PBXBuildFile; fileRef = A4404A03208E9E380007753D /* lang */; }; + A4404A0F209270FB0007753D /* pofiles in Resources */ = {isa = PBXBuildFile; fileRef = A4404A0E209270FB0007753D /* pofiles */; }; + A4404A12209275550007753D /* hdbscan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4404A10209275540007753D /* hdbscan.cpp */; }; + A4502B3524E1F66F001D378F /* MapViewHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4502B3324E1F66F001D378F /* MapViewHelper.cpp */; }; + A4502B3824E1F67C001D378F /* SCHCDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4502B3724E1F67C001D378F /* SCHCDlg.cpp */; }; + A4596B4E2033DB8E00C9BCC8 /* AbstractCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4596B4D2033DB8E00C9BCC8 /* AbstractCoordinator.cpp */; }; + A4596B512033DDFF00C9BCC8 /* AbstractClusterMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4596B502033DDFF00C9BCC8 /* AbstractClusterMap.cpp */; }; + A45CFF082453A516001F00B9 /* AnimatePlotCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45CFF042453A515001F00B9 /* AnimatePlotCanvas.cpp */; }; + A45CFF092453A516001F00B9 /* wxGLString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45CFF062453A516001F00B9 /* wxGLString.cpp */; }; + A45DBDF41EDDEDAD00C2AA8A /* pca.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */; }; + A45DBDF51EDDEDAD00C2AA8A /* cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */; }; + A45DBDFA1EDDEE4D00C2AA8A /* maxp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */; }; + A46099A22416E41B000A53E2 /* linpack_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = A460999B2416E41B000A53E2 /* linpack_lite.c */; }; + A46099A32416E41B000A53E2 /* loess.c in Sources */ = {isa = PBXBuildFile; fileRef = A460999C2416E41B000A53E2 /* loess.c */; }; + A46099A42416E41B000A53E2 /* loessc.c in Sources */ = {isa = PBXBuildFile; fileRef = A460999E2416E41B000A53E2 /* loessc.c */; }; + A46099A52416E41B000A53E2 /* predict.c in Sources */ = {isa = PBXBuildFile; fileRef = A460999F2416E41B000A53E2 /* predict.c */; }; + A46099A62416E41B000A53E2 /* loessf.c in Sources */ = {isa = PBXBuildFile; fileRef = A46099A12416E41B000A53E2 /* loessf.c */; }; + A46099A82416E562000A53E2 /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = A46099A72416E562000A53E2 /* misc.c */; }; + A47614AE20759EAD00D9F3BE /* arcgis_swm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A47614AD20759EAD00D9F3BE /* arcgis_swm.cpp */; }; + A47F792020A9F67A000AFE57 /* gpu_lisa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A47F791E20A9F679000AFE57 /* gpu_lisa.cpp */; }; + A47F792220AA082A000AFE57 /* lisa_kernel.cl in Sources */ = {isa = PBXBuildFile; fileRef = A47F792120AA082A000AFE57 /* lisa_kernel.cl */; }; + A47F792420AA084B000AFE57 /* distmat_kernel.cl in Sources */ = {isa = PBXBuildFile; fileRef = A47F792320AA084B000AFE57 /* distmat_kernel.cl */; }; + A47FC9DB1F74DE1600BEFBF2 /* MLJCCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A47FC9D91F74DE1600BEFBF2 /* MLJCCoordinator.cpp */; }; + A48356BB1E456310002791C8 /* ConditionalClusterMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */; }; + A48814EB20A50B0F005490A7 /* fastcluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A48814EA20A50B0F005490A7 /* fastcluster.cpp */; }; + A496C99E1E6A184C008F87DD /* samples.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = A496C99D1E6A184C008F87DD /* samples.sqlite */; }; + A496C9A81E6A43C0008F87DD /* BaltimoreHomeSales.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9A71E6A43C0008F87DD /* BaltimoreHomeSales.png */; }; + A496C9AA1E6A43CC008F87DD /* BostonHomeSales.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9A91E6A43CC008F87DD /* BostonHomeSales.png */; }; + A496C9AC1E6A43D0008F87DD /* BuenosAiresElections.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9AB1E6A43D0008F87DD /* BuenosAiresElections.png */; }; + A496C9AE1E6A43D6008F87DD /* ColombiaMalaria.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9AD1E6A43D6008F87DD /* ColombiaMalaria.png */; }; + A496C9B01E6A43DA008F87DD /* ColumbusCrime.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9AF1E6A43DA008F87DD /* ColumbusCrime.png */; }; + A496C9B21E6A43E5008F87DD /* Milwaukee2000Census.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9B11E6A43E4008F87DD /* Milwaukee2000Census.png */; }; + A496C9B41E6A43E8008F87DD /* NAT.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9B31E6A43E8008F87DD /* NAT.png */; }; + A496C9B61E6A43EE008F87DD /* NepalAid.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9B51E6A43EE008F87DD /* NepalAid.png */; }; + A496C9B91E6A43FA008F87DD /* no_map.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9B81E6A43FA008F87DD /* no_map.png */; }; + A496C9BB1E6A43FE008F87DD /* NYCData.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9BA1E6A43FE008F87DD /* NYCData.png */; }; + A496C9BD1E6A4402008F87DD /* PhoenixACS.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9BC1E6A4402008F87DD /* PhoenixACS.png */; }; + A496C9BF1E6A4405008F87DD /* SanFranCrime.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9BE1E6A4405008F87DD /* SanFranCrime.png */; }; + A496C9C11E6A440A008F87DD /* SIDSNC.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C01E6A440A008F87DD /* SIDSNC.png */; }; + A496C9C31E6A4417008F87DD /* USHomicides.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C21E6A4417008F87DD /* USHomicides.png */; }; + A496C9C51E6A441D008F87DD /* watermark-20.png in Resources */ = {isa = PBXBuildFile; fileRef = A496C9C41E6A441D008F87DD /* watermark-20.png */; }; + A499564924FED58300BB5CB1 /* AZPDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A499564724FED58300BB5CB1 /* AZPDlg.cpp */; }; + A49F56DD1E956FCC000309CE /* HClusterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */; }; + A4A591F424A515DA00BEA1FF /* ConditionalBoxPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A591F324A515D900BEA1FF /* ConditionalBoxPlotView.cpp */; }; + A4A591F724ABB15500BEA1FF /* dbscan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A591F524ABB15400BEA1FF /* dbscan.cpp */; }; + A4A591FA24ABB80900BEA1FF /* DBScanDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A591F924ABB80800BEA1FF /* DBScanDlg.cpp */; }; + A4A6AD7B207F198E00D29677 /* ShpFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A6AD7A207F198E00D29677 /* ShpFile.cpp */; }; + A4A763F41F69FB3B00EE79DD /* ColocationMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4A763F21F69FB3B00EE79DD /* ColocationMapView.cpp */; }; + A4B1F994207730FA00905246 /* matlab_mat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B1F992207730FA00905246 /* matlab_mat.cpp */; }; + A4B85A7324F6FF9D00748B92 /* azp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B85A7024F6FF9C00748B92 /* azp.cpp */; }; + A4BBAB9E2444D82B00BD4E57 /* lapacke.c in Sources */ = {isa = PBXBuildFile; fileRef = A4BBAB992444D82B00BD4E57 /* lapacke.c */; }; + A4BBAB9F2444D82B00BD4E57 /* jacobi.c in Sources */ = {isa = PBXBuildFile; fileRef = A4BBAB9A2444D82B00BD4E57 /* jacobi.c */; }; + A4BBABA02444D82B00BD4E57 /* smacof_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A4BBAB9B2444D82B00BD4E57 /* smacof_utils.c */; }; + A4BBABA12444D82B00BD4E57 /* smacof.c in Sources */ = {isa = PBXBuildFile; fileRef = A4BBAB9C2444D82B00BD4E57 /* smacof.c */; }; + A4C4ABFB1F97DA2D00085D47 /* MLJCMapNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4C4ABF91F97DA2D00085D47 /* MLJCMapNewView.cpp */; }; + A4C76B0E225BC4BB00A0729A /* GroupingMapView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */; }; + A4CFBCB8250AE02C00246D81 /* quantileLisaDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4CFBCB7250AE02C00246D81 /* quantileLisaDlg.cpp */; }; + A4CFBCBB250BE8E800246D81 /* MultiQuantileLisaDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4CFBCBA250BE8E800246D81 /* MultiQuantileLisaDlg.cpp */; }; + A4D5423D1F45037B00572878 /* redcap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4D5423B1F45037B00572878 /* redcap.cpp */; }; + A4D9A31F1E4D5F3800EF584C /* gdaldata in Resources */ = {isa = PBXBuildFile; fileRef = A4D9A31E1E4D5F3800EF584C /* gdaldata */; }; + A4DB2CBC1EEA3A3E00BD4A54 /* Guerry.png in Resources */ = {isa = PBXBuildFile; fileRef = A4DB2CBB1EEA3A3E00BD4A54 /* Guerry.png */; }; + A4E00F1020FD8ECD0038BA80 /* localjc_kernel.cl in Sources */ = {isa = PBXBuildFile; fileRef = A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */; }; + A4E5FE191F624D5600D75662 /* AggregateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4E5FE171F624D5600D75662 /* AggregateDlg.cpp */; }; + A4ED7D442097EC55008685D6 /* ANN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D412097EC54008685D6 /* ANN.cpp */; }; + A4ED7D472097EDE9008685D6 /* kd_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D462097EDE9008685D6 /* kd_tree.cpp */; }; + A4ED7D552097F114008685D6 /* kd_pr_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D4E2097F113008685D6 /* kd_pr_search.cpp */; }; + A4ED7D562097F114008685D6 /* kd_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D502097F114008685D6 /* kd_search.cpp */; }; + A4ED7D572097F114008685D6 /* kd_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D512097F114008685D6 /* kd_util.cpp */; }; + A4ED7D582097F114008685D6 /* kd_split.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D522097F114008685D6 /* kd_split.cpp */; }; + A4ED7D5B209A6B81008685D6 /* HDBScanDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4ED7D59209A6B81008685D6 /* HDBScanDlg.cpp */; }; + A4F5D61F1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4F5D61D1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp */; }; + A4F5D6221F513EA1007ADF25 /* MDSDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4F5D6201F513EA1007ADF25 /* MDSDlg.cpp */; }; + A4F875771E94123F0079734E /* KMeansDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4F875751E94123F0079734E /* KMeansDlg.cpp */; }; DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */; }; DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */; }; DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0FC7E61A9EC17500A6715B /* CorrelogramAlgs.cpp */; }; @@ -59,13 +182,11 @@ DD209598139F129900B9E648 /* GetisOrdChoiceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD209596139F129900B9E648 /* GetisOrdChoiceDlg.cpp */; }; DD26CBE419A41A480092C0F2 /* WebViewExampleWin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD26CBE219A41A480092C0F2 /* WebViewExampleWin.cpp */; }; DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A7240F2E26AA006B1E6D /* GenUtils.cpp */; }; - DD27EF050F2F6CBE009C5C42 /* ShapeFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */; }; DD2A6FE0178C7F7C00197093 /* DataSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2A6FDE178C7F7C00197093 /* DataSource.cpp */; }; DD2AE42A19D4F4CA00B23FB9 /* GdaJson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2AE42919D4F4CA00B23FB9 /* GdaJson.cpp */; }; DD2B42B11522552B00888E51 /* BoxNewPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B42AF1522552B00888E51 /* BoxNewPlotView.cpp */; }; DD2B433F1522A93700888E51 /* HistogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B433D1522A93700888E51 /* HistogramView.cpp */; }; DD2B43421522A95100888E51 /* PCPNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD2B43401522A95100888E51 /* PCPNewView.cpp */; }; - DD2EB10219E6F0270073E36F /* geoda_prefs.json in CopyFiles */ = {isa = PBXBuildFile; fileRef = DD2EB10019E6EFC50073E36F /* geoda_prefs.json */; }; DD30798E19ED80E0001E5E89 /* Lowess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD30798C19ED80E0001E5E89 /* Lowess.cpp */; }; DD3079C719ED9F61001E5E89 /* LowessParamObservable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3079C419ED9F61001E5E89 /* LowessParamObservable.cpp */; }; DD3079E319EDAE6C001E5E89 /* LowessParamDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD3079E119EDAE6C001E5E89 /* LowessParamDlg.cpp */; }; @@ -76,8 +197,6 @@ DD409DFB19FF099E00C21A2B /* ScatterPlotMatView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD409DF919FF099E00C21A2B /* ScatterPlotMatView.cpp */; }; DD409E4C19FFD43000C21A2B /* VarTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD409E4A19FFD43000C21A2B /* VarTools.cpp */; }; DD40B083181894F20084173C /* VarGroupingEditorDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD40B081181894F20084173C /* VarGroupingEditorDlg.cpp */; }; - DD45117119E5F65E006C5DAA /* geoda_prefs.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */; }; - DD49747A176F59670007BB9F /* DbfTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD497479176F59670007BB9F /* DbfTable.cpp */; }; DD4974B71770AC700007BB9F /* TableFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974B61770AC700007BB9F /* TableFrame.cpp */; }; DD4974BA1770AC840007BB9F /* TableBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974B91770AC840007BB9F /* TableBase.cpp */; }; DD4974E21770CE9E0007BB9F /* TableInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD4974E11770CE9E0007BB9F /* TableInterface.cpp */; }; @@ -86,13 +205,11 @@ DD579B6A160BDAFE00BF8D53 /* DorlingCartogram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD579B68160BDAFE00BF8D53 /* DorlingCartogram.cpp */; }; DD5A579716E53EC40047DBB1 /* GeoDa.icns in Resources */ = {isa = PBXBuildFile; fileRef = DD5A579616E53EC40047DBB1 /* GeoDa.icns */; }; DD5AA73D1982D200009B30C6 /* CalcHelp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD5AA73B1982D200009B30C6 /* CalcHelp.cpp */; }; - DD5FA1DA0F320DD50055A0E5 /* ShapeFileHdr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */; }; DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD60546616A83EEF0004BF02 /* CatClassifManager.cpp */; }; DD6456CA14881EA700AABF59 /* TimeChooserDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */; }; DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64925A16DFF63400B3B0AB /* GeoDa.cpp */; }; DD64A2880F20FE06006B1E6D /* GeneralWxUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A2860F20FE06006B1E6D /* GeneralWxUtils.cpp */; }; DD64A5580F2910D2006B1E6D /* logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A5570F2910D2006B1E6D /* logger.cpp */; }; - DD64A6AD0F2A7A81006B1E6D /* DBF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */; }; DD694685130307C00072386B /* RateSmoothing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD694684130307C00072386B /* RateSmoothing.cpp */; }; DD6B7289141A61400026D223 /* FramesManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6B7288141A61400026D223 /* FramesManager.cpp */; }; DD6C9EB61A03FD0C00F124F1 /* VarsChooserDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6C9EB11A03FD0C00F124F1 /* VarsChooserDlg.cpp */; }; @@ -106,7 +223,6 @@ DD76D15A1A15430600A01FA5 /* LineChartCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD76D1581A15430600A01FA5 /* LineChartCanvas.cpp */; }; DD7974C80F1D250A00496A84 /* TemplateCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7974C30F1D250A00496A84 /* TemplateCanvas.cpp */; }; DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */; }; - DD79756C0F1D296F00496A84 /* ASC2SHPDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */; }; DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */; }; DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975110F1D296F00496A84 /* CreateGridDlg.cpp */; }; DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975130F1D296F00496A84 /* CreatingWeightDlg.cpp */; }; @@ -118,7 +234,6 @@ DD7975890F1D296F00496A84 /* RegressionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975430F1D296F00496A84 /* RegressionDlg.cpp */; }; DD79758B0F1D296F00496A84 /* RegressionReportDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975470F1D296F00496A84 /* RegressionReportDlg.cpp */; }; DD7975920F1D296F00496A84 /* SaveSelectionDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */; }; - DD7975940F1D296F00496A84 /* SHP2ASCDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */; }; DD7975980F1D296F00496A84 /* VariableSettingsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975610F1D296F00496A84 /* VariableSettingsDlg.cpp */; }; DD7975D20F1D2A9000496A84 /* 3DPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */; }; DD7975D60F1D2A9000496A84 /* Geom3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD7975C00F1D2A9000496A84 /* Geom3D.cpp */; }; @@ -149,20 +264,17 @@ DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C86E13D86BC7006C068D /* FieldNewCalcRateDlg.cpp */; }; DD89C87713D86BC7006C068D /* FieldNewCalcSheetDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C87013D86BC7006C068D /* FieldNewCalcSheetDlg.cpp */; }; DD89C87813D86BC7006C068D /* FieldNewCalcUniDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD89C87213D86BC7006C068D /* FieldNewCalcUniDlg.cpp */; }; - DD8DCE0E19C0FD8F00E62C3D /* DataChangeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */; }; DD8FACE11649595D007598CE /* DataMovieDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD8FACDF1649595D007598CE /* DataMovieDlg.cpp */; }; DD92851C17F5FC7300B9481A /* VarOrderPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92851A17F5FC7300B9481A /* VarOrderPtree.cpp */; }; DD92851F17F5FD4500B9481A /* VarOrderMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92851D17F5FD4500B9481A /* VarOrderMapper.cpp */; }; DD92853D17F5FE2E00B9481A /* VarGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92853B17F5FE2E00B9481A /* VarGroup.cpp */; }; DD92D22417BAAF2300F8FE01 /* TimeEditorDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD92D22317BAAF2300F8FE01 /* TimeEditorDlg.cpp */; }; - DD9373B61AC1F99D0066AF21 /* SimplePoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */; }; DD9373F71AC1FEAA0066AF21 /* PolysToContigWeights.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */; }; DD9C1B371910267900C0A427 /* GdaConst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD9C1B351910267900C0A427 /* GdaConst.cpp */; }; DDA462FF164D785500EBBD8F /* TableState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA462FC164D785500EBBD8F /* TableState.cpp */; }; DDA4F0A4196311A9007645E2 /* WeightsMetaInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA4F0A3196311A9007645E2 /* WeightsMetaInfo.cpp */; }; DDA4F0AD196315AF007645E2 /* WeightUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDA4F0AB196315AF007645E2 /* WeightUtils.cpp */; }; DDA8D55214479228008156FB /* ScatterNewPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD99BA1911D3F8D6003BB40E /* ScatterNewPlotView.cpp */; }; - DDA8D5681447948B008156FB /* ShapeUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDC11EB1159783700E515BB /* ShapeUtils.cpp */; }; DDAA6540117F9B5D00D1010C /* Project.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDAA653F117F9B5D00D1010C /* Project.cpp */; }; DDAD0218162754EA00748874 /* ConditionalNewView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDAD0216162754EA00748874 /* ConditionalNewView.cpp */; }; DDB0E42C10B34DBB00F96D57 /* AddIdVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB0E42A10B34DBB00F96D57 /* AddIdVariable.cpp */; }; @@ -171,8 +283,6 @@ DDB37A0811CBBB730020C8A9 /* TemplateLegend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB37A0711CBBB730020C8A9 /* TemplateLegend.cpp */; }; DDB77C0D139820CB00569A1E /* GStatCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB77C0B139820CB00569A1E /* GStatCoordinator.cpp */; }; DDB77F3E140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDB77F3C140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp */; }; - DDBDFE6A19E73E07004CCEDA /* web_plugins in Resources */ = {isa = PBXBuildFile; fileRef = DDBDFE6119E73E07004CCEDA /* web_plugins */; }; - DDBDFE6B19E73E13004CCEDA /* web_plugins in CopyFiles */ = {isa = PBXBuildFile; fileRef = DDBDFE6119E73E07004CCEDA /* web_plugins */; }; DDC48EF618AE506400FD773F /* ProjectInfoDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC48EF418AE506400FD773F /* ProjectInfoDlg.cpp */; }; DDC906921A129CFF002334D2 /* SimpleAxisCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9068C1A129CFF002334D2 /* SimpleAxisCanvas.cpp */; }; DDC906931A129CFF002334D2 /* SimpleHistCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9068E1A129CFF002334D2 /* SimpleHistCanvas.cpp */; }; @@ -181,12 +291,7 @@ DDC9DD8A15937B2F00A0E5BA /* CsvFileUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9DD8815937B2F00A0E5BA /* CsvFileUtils.cpp */; }; DDC9DD9C15937C0200A0E5BA /* ImportCsvDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDC9DD9A15937C0200A0E5BA /* ImportCsvDlg.cpp */; }; DDCCB5CC1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDCCB5CA1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp */; }; - DDCFA9961A96790100747EB7 /* DbfFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDCFA9941A96790100747EB7 /* DbfFile.cpp */; }; DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F050F2F8BE1009F7F13 /* GenGeomAlgs.cpp */; }; - DDD13F6F0F2FC802009F7F13 /* ShapeFileTriplet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */; }; - DDD13F930F2FD641009F7F13 /* BasePoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13F920F2FD641009F7F13 /* BasePoint.cpp */; }; - DDD13FAB0F30B2E4009F7F13 /* Box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD13FAA0F30B2E4009F7F13 /* Box.cpp */; }; - DDD140540F310324009F7F13 /* AbstractShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD140530F310324009F7F13 /* AbstractShape.cpp */; }; DDD2392D1AB86D8F00E4E1BF /* NumericTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD2392B1AB86D8F00E4E1BF /* NumericTests.cpp */; }; DDD593AC12E9F34C00F7A7C4 /* GeodaWeight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593AB12E9F34C00F7A7C4 /* GeodaWeight.cpp */; }; DDD593B012E9F42100F7A7C4 /* WeightsManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDD593AF12E9F42100F7A7C4 /* WeightsManager.cpp */; }; @@ -197,7 +302,6 @@ DDDBF2AE163AD3AB0070610C /* ConditionalHistogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDDBF2AC163AD3AB0070610C /* ConditionalHistogramView.cpp */; }; DDE3F5081677C46500D13A2C /* CatClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE3F5061677C46500D13A2C /* CatClassification.cpp */; }; DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE4DFD41A963B07005B9158 /* GdaShape.cpp */; }; - DDE4DFE91A96411A005B9158 /* ShpFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE4DFE71A96411A005B9158 /* ShpFile.cpp */; }; DDEA3CBD193CEE5C0028B746 /* GdaFlexValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CB7193CEE5C0028B746 /* GdaFlexValue.cpp */; }; DDEA3CBE193CEE5C0028B746 /* GdaLexer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CB9193CEE5C0028B746 /* GdaLexer.cpp */; }; DDEA3CBF193CEE5C0028B746 /* GdaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDEA3CBB193CEE5C0028B746 /* GdaParser.cpp */; }; @@ -211,7 +315,6 @@ DDF53FF3167A39520042B453 /* CatClassifState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF53FF0167A39520042B453 /* CatClassifState.cpp */; }; DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF54009167A39CA0042B453 /* CatClassifDlg.cpp */; }; DDF85D1813B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDF85D1613B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp */; }; - DDFE0E0917502E810099FFEC /* DbfColContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */; }; DDFE0E2A175034EC0099FFEC /* TimeState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFE0E27175034EC0099FFEC /* TimeState.cpp */; }; DDFFC7CC1AC0E58B00F7DD6D /* CorrelogramView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7C51AC0E58B00F7DD6D /* CorrelogramView.cpp */; }; DDFFC7CD1AC0E58B00F7DD6D /* CorrelParamsObservable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDFFC7C71AC0E58B00F7DD6D /* CorrelParamsObservable.cpp */; }; @@ -220,88 +323,119 @@ /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - DD2EB0FF19E6EF940073E36F /* CopyFiles */ = { + A12007F623749AC200CBA5B1 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; + buildActionMask = 8; dstPath = ""; dstSubfolderSpec = 6; files = ( - DDBDFE6B19E73E13004CCEDA /* web_plugins in CopyFiles */, - DD2EB10219E6F0270073E36F /* geoda_prefs.json in CopyFiles */, - A1B04ADD1B1921710045AA6F /* basemap_cache in CopyFiles */, - A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */, - DD45117119E5F65E006C5DAA /* geoda_prefs.sqlite in CopyFiles */, + A1563A06237DE6E100628FA0 /* localjc_kernel.cl in CopyFiles */, + A1563A07237DE6E100628FA0 /* distmat_kernel.cl in CopyFiles */, + A1563A08237DE6E100628FA0 /* lisa_kernel.cl in CopyFiles */, + A14B3AD9237622AE007EE3AB /* basemap_cache in CopyFiles */, + A14B3AD8237622A6007EE3AB /* cache.sqlite in CopyFiles */, + A14B3AD72376229A007EE3AB /* lang in CopyFiles */, ); - runOnlyForDeploymentPostprocessing = 0; + runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ A11B85BA1B18DC89008B64EA /* Basemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Basemap.h; sourceTree = ""; }; A11B85BB1B18DC9C008B64EA /* Basemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Basemap.cpp; sourceTree = ""; }; + A11EF98C21ED569A00B77413 /* MultiVarSettingsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiVarSettingsDlg.h; sourceTree = ""; }; + A11EF98D21ED569A00B77413 /* MultiVarSettingsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiVarSettingsDlg.cpp; sourceTree = ""; }; A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRColumn.cpp; path = DataViewer/OGRColumn.cpp; sourceTree = ""; }; A11F1B7E184FDFB3006F5F98 /* OGRColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OGRColumn.h; path = DataViewer/OGRColumn.h; sourceTree = ""; }; A11F1B801850437A006F5F98 /* OGRTableOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRTableOperation.cpp; path = DataViewer/OGRTableOperation.cpp; sourceTree = ""; }; A11F1B811850437A006F5F98 /* OGRTableOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OGRTableOperation.h; path = DataViewer/OGRTableOperation.h; sourceTree = ""; }; + A1230E5C212DF54C002AB30A /* switch-on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "switch-on.png"; path = "BuildTools/CommonDistFiles/web_plugins/switch-on.png"; sourceTree = ""; }; + A1230E5D212DF54D002AB30A /* switch-off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "switch-off.png"; path = "BuildTools/CommonDistFiles/web_plugins/switch-off.png"; sourceTree = ""; }; + A1230E602130E783002AB30A /* MapLayer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MapLayer.cpp; sourceTree = ""; }; + A1230E612130E783002AB30A /* MapLayer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = MapLayer.hpp; sourceTree = ""; }; + A1230E632130E81A002AB30A /* MapLayerTree.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MapLayerTree.cpp; sourceTree = ""; }; + A1230E642130E81A002AB30A /* MapLayerTree.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = MapLayerTree.hpp; sourceTree = ""; }; A12E0F4D1705087A00B6059C /* OGRDataAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRDataAdapter.h; sourceTree = ""; }; A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRDataAdapter.cpp; sourceTree = ""; }; A13B6B9218760CF100F93ACF /* SaveAsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveAsDlg.h; sourceTree = ""; }; A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveAsDlg.cpp; sourceTree = ""; }; - A14CB4611C866E110082B436 /* AdjustYAxisDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AdjustYAxisDlg.cpp; sourceTree = ""; }; - A14CB4621C866E110082B436 /* AdjustYAxisDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustYAxisDlg.h; sourceTree = ""; }; - A14CB4631C866E110082B436 /* BasemapConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasemapConfDlg.cpp; sourceTree = ""; }; - A14CB4641C866E110082B436 /* BasemapConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasemapConfDlg.h; sourceTree = ""; }; - A14CB46C1C86705B0082B436 /* PublishDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PublishDlg.cpp; sourceTree = ""; }; - A14CB46D1C86705B0082B436 /* PublishDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublishDlg.h; sourceTree = ""; }; - A1546D181F5B52D2002FC3DF /* cluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cluster.cpp; path = Algorithms/cluster.cpp; sourceTree = ""; }; - A1546D191F5B52D2002FC3DF /* cluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cluster.h; path = Algorithms/cluster.h; sourceTree = ""; }; - A1546D1A1F5B52D2002FC3DF /* maxp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = maxp.cpp; path = Algorithms/maxp.cpp; sourceTree = ""; }; - A1546D1B1F5B52D2002FC3DF /* maxp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = maxp.h; path = Algorithms/maxp.h; sourceTree = ""; }; - A1546D1E1F5B52D2002FC3DF /* pca.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pca.cpp; path = Algorithms/pca.cpp; sourceTree = ""; }; - A1546D1F1F5B52D2002FC3DF /* pca.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pca.h; path = Algorithms/pca.h; sourceTree = ""; }; - A1546D201F5B52D2002FC3DF /* redcap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = redcap.cpp; path = Algorithms/redcap.cpp; sourceTree = ""; }; - A1546D211F5B52D2002FC3DF /* redcap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = redcap.h; path = Algorithms/redcap.h; sourceTree = ""; }; - A1546D221F5B52D2002FC3DF /* spectral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spectral.cpp; path = Algorithms/spectral.cpp; sourceTree = ""; }; - A1546D231F5B52D2002FC3DF /* spectral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spectral.h; path = Algorithms/spectral.h; sourceTree = ""; }; - A1546D2A1F5B53A7002FC3DF /* AbstractClusterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractClusterDlg.cpp; sourceTree = ""; }; - A1546D2B1F5B53A7002FC3DF /* AbstractClusterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractClusterDlg.h; sourceTree = ""; }; - A1546D2C1F5B53A7002FC3DF /* HClusterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HClusterDlg.cpp; sourceTree = ""; }; - A1546D2D1F5B53A7002FC3DF /* HClusterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HClusterDlg.h; sourceTree = ""; }; - A1546D2E1F5B53A7002FC3DF /* KMeansDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KMeansDlg.cpp; sourceTree = ""; }; - A1546D2F1F5B53A7002FC3DF /* KMeansDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMeansDlg.h; sourceTree = ""; }; - A1546D301F5B53A7002FC3DF /* MaxpDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaxpDlg.cpp; sourceTree = ""; }; - A1546D311F5B53A7002FC3DF /* MaxpDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaxpDlg.h; sourceTree = ""; }; - A1546D321F5B53A7002FC3DF /* MDSDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDSDlg.cpp; sourceTree = ""; }; - A1546D331F5B53A7002FC3DF /* MDSDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDSDlg.h; sourceTree = ""; }; - A1546D341F5B53A7002FC3DF /* RedcapDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RedcapDlg.cpp; sourceTree = ""; }; - A1546D351F5B53A7002FC3DF /* RedcapDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RedcapDlg.h; sourceTree = ""; }; - A1546D361F5B53A7002FC3DF /* SpectralClusteringDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpectralClusteringDlg.cpp; sourceTree = ""; }; - A1546D371F5B53A7002FC3DF /* SpectralClusteringDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpectralClusteringDlg.h; sourceTree = ""; }; - A15609161E52442C009F4178 /* ReportBugDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReportBugDlg.cpp; sourceTree = ""; }; - A15609171E52442C009F4178 /* ReportBugDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReportBugDlg.h; sourceTree = ""; }; - A15609191E524445009F4178 /* ConditionalClusterMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalClusterMapView.cpp; sourceTree = ""; }; - A156091A1E524445009F4178 /* ConditionalClusterMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalClusterMapView.h; sourceTree = ""; }; + A14735A821A5F72D00CA69B2 /* DistUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DistUtils.h; sourceTree = ""; }; + A14735A921A5F72D00CA69B2 /* DistUtils.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DistUtils.cpp; sourceTree = ""; }; + A14735AB21A65F1600CA69B2 /* bd_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bd_tree.cpp; sourceTree = ""; }; + A14735AC21A65F1600CA69B2 /* kd_dump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_dump.cpp; sourceTree = ""; }; + A14735AD21A65F1700CA69B2 /* bd_fix_rad_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bd_fix_rad_search.cpp; sourceTree = ""; }; + A14735AE21A65F1700CA69B2 /* kd_fix_rad_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_fix_rad_search.cpp; sourceTree = ""; }; + A14735AF21A65F1700CA69B2 /* bd_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bd_search.cpp; sourceTree = ""; }; + A14735B021A65F1700CA69B2 /* kd_fix_rad_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_fix_rad_search.h; sourceTree = ""; }; + A14735B121A65F1700CA69B2 /* perf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = perf.cpp; sourceTree = ""; }; + A14735B221A65F1700CA69B2 /* bd_pr_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bd_pr_search.cpp; sourceTree = ""; }; + A14735B321A65F1700CA69B2 /* brute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = brute.cpp; sourceTree = ""; }; + A14735B421A65F1700CA69B2 /* bd_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bd_tree.h; sourceTree = ""; }; + A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CsvFieldConfDlg.cpp; sourceTree = ""; }; + A14C496E1D76174000D9831C /* CsvFieldConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsvFieldConfDlg.h; sourceTree = ""; }; A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatasourceDlg.cpp; sourceTree = ""; }; A16BA46F183D626200D3B7DA /* DatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatasourceDlg.h; sourceTree = ""; }; - A16D406C1CD4233A0025C64C /* AutoUpdateDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AutoUpdateDlg.cpp; sourceTree = ""; }; - A16D406D1CD4233A0025C64C /* AutoUpdateDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoUpdateDlg.h; sourceTree = ""; }; A171FBFE1792332A000DD5A0 /* GdaException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaException.h; sourceTree = ""; }; A17336821C06917B00579354 /* WeightsManInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightsManInterface.h; path = VarCalc/WeightsManInterface.h; sourceTree = ""; }; + A178F771227381CA00EB9CB7 /* DissolveDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DissolveDlg.h; sourceTree = ""; }; + A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DissolveDlg.cpp; sourceTree = ""; }; + A178F774227772FC00EB9CB7 /* GdaListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaListBox.cpp; sourceTree = ""; }; + A178F775227772FC00EB9CB7 /* GdaListBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaListBox.h; sourceTree = ""; }; + A178F777227773C500EB9CB7 /* GdaChoice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaChoice.cpp; sourceTree = ""; }; + A178F778227773C500EB9CB7 /* GdaChoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaChoice.h; sourceTree = ""; }; A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCartoDB.cpp; sourceTree = ""; }; A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaCartoDB.h; sourceTree = ""; }; + A1894C3D213F29DC00718FFC /* SpatialJoinDlg.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialJoinDlg.cpp; sourceTree = ""; }; + A1894C3E213F29DC00718FFC /* SpatialJoinDlg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpatialJoinDlg.h; sourceTree = ""; }; + A1894C41213F806700718FFC /* MapLayerStateObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapLayerStateObserver.h; sourceTree = ""; }; + A19483782118BAA7009A87A2 /* ogldiag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ogldiag.h; sourceTree = ""; }; + A19483792118BAA7009A87A2 /* composit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = composit.h; sourceTree = ""; }; + A194837A2118BAA7009A87A2 /* composit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = composit.cpp; sourceTree = ""; }; + A194837B2118BAA7009A87A2 /* misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = misc.h; sourceTree = ""; }; + A194837C2118BAA7009A87A2 /* linesp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linesp.h; sourceTree = ""; }; + A194837D2118BAA7009A87A2 /* mfutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mfutils.h; sourceTree = ""; }; + A194837E2118BAA7009A87A2 /* divided.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = divided.cpp; sourceTree = ""; }; + A194837F2118BAA7009A87A2 /* constrnt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = constrnt.cpp; sourceTree = ""; }; + A19483802118BAA8009A87A2 /* divided.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = divided.h; sourceTree = ""; }; + A19483812118BAA8009A87A2 /* oglmisc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = oglmisc.cpp; sourceTree = ""; }; + A19483822118BAA8009A87A2 /* drawnp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drawnp.h; sourceTree = ""; }; + A19483832118BAA8009A87A2 /* basicp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basicp.h; sourceTree = ""; }; + A19483842118BAA8009A87A2 /* bmpshape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bmpshape.h; sourceTree = ""; }; + A19483852118BAA8009A87A2 /* bmpshape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bmpshape.cpp; sourceTree = ""; }; + A19483862118BAA8009A87A2 /* basic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic.cpp; sourceTree = ""; }; + A19483872118BAA8009A87A2 /* canvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = canvas.cpp; sourceTree = ""; }; + A19483882118BAA9009A87A2 /* lines.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lines.cpp; sourceTree = ""; }; + A19483892118BAA9009A87A2 /* basic2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basic2.cpp; sourceTree = ""; }; + A194838A2118BAA9009A87A2 /* mfutils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mfutils.cpp; sourceTree = ""; }; + A194838B2118BAA9009A87A2 /* basic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basic.h; sourceTree = ""; }; + A194838C2118BAA9009A87A2 /* drawn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = drawn.cpp; sourceTree = ""; }; + A194838D2118BAA9009A87A2 /* ogl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ogl.h; sourceTree = ""; }; + A194838E2118BAA9009A87A2 /* constrnt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = constrnt.h; sourceTree = ""; }; + A194838F2118BAAA009A87A2 /* canvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = canvas.h; sourceTree = ""; }; + A19483902118BAAA009A87A2 /* lines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lines.h; sourceTree = ""; }; + A19483912118BAAA009A87A2 /* ogldiag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ogldiag.cpp; sourceTree = ""; }; + A19483922118BAAA009A87A2 /* drawn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drawn.h; sourceTree = ""; }; + A19483A02118BE8E009A87A2 /* MapLayoutView.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MapLayoutView.cpp; sourceTree = ""; }; + A19483A12118BE8F009A87A2 /* MapLayoutView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapLayoutView.h; sourceTree = ""; }; A19F514D1756A11E006E31B4 /* plugins */ = {isa = PBXFileReference; lastKnownFileType = folder; name = plugins; path = BuildTools/macosx/plugins; sourceTree = ""; }; + A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AdjustYAxisDlg.cpp; sourceTree = ""; }; + A1AC05BE1C8645F300B6FE5F /* AdjustYAxisDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustYAxisDlg.h; sourceTree = ""; }; A1B04ADC1B1921710045AA6F /* basemap_cache */ = {isa = PBXFileReference; lastKnownFileType = folder; name = basemap_cache; path = BuildTools/CommonDistFiles/basemap_cache; sourceTree = ""; }; + A1B13EE11C3EDFF90064AD87 /* BasemapConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasemapConfDlg.h; sourceTree = ""; }; + A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasemapConfDlg.cpp; sourceTree = ""; }; A1B93ABE17D18735007F8195 /* ProjectConf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectConf.h; sourceTree = ""; }; A1B93ABF17D18735007F8195 /* ProjectConf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectConf.cpp; sourceTree = ""; }; A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaAppResources.cpp; sourceTree = ""; }; A1C9F3EB18B55EE000E14394 /* FieldNameCorrectionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNameCorrectionDlg.h; sourceTree = ""; }; A1C9F3EC18B55EE000E14394 /* FieldNameCorrectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNameCorrectionDlg.cpp; sourceTree = ""; }; - A1D766D71D7A2195002365D6 /* CsvFieldConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CsvFieldConfDlg.cpp; sourceTree = ""; }; - A1D766D81D7A2196002365D6 /* CsvFieldConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsvFieldConfDlg.h; sourceTree = ""; }; + A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PublishDlg.cpp; sourceTree = ""; }; + A1CE3D321C1A427A0010F170 /* PublishDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublishDlg.h; sourceTree = ""; }; A1D82DED174D3EB6003DE20A /* ConnectDatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectDatasourceDlg.h; sourceTree = ""; }; A1D82DEE174D3EB6003DE20A /* ConnectDatasourceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectDatasourceDlg.cpp; sourceTree = ""; }; A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AutoCompTextCtrl.cpp; sourceTree = ""; }; A1DA623917BCBC070070CAAB /* AutoCompTextCtrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoCompTextCtrl.h; sourceTree = ""; }; + A1E5BC821DBFE661005739E9 /* ReportBugDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReportBugDlg.h; sourceTree = ""; }; + A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReportBugDlg.cpp; sourceTree = ""; }; A1E77E18177D6A2E00CC1037 /* ExportDataDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExportDataDlg.cpp; sourceTree = ""; }; A1E77E19177D6A2E00CC1037 /* ExportDataDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExportDataDlg.h; sourceTree = ""; }; A1E77FDA17889BE200CC1037 /* OGRTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OGRTable.cpp; path = DataViewer/OGRTable.cpp; sourceTree = ""; }; @@ -312,6 +446,8 @@ A1E78136178A90A100CC1037 /* OGRFieldProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRFieldProxy.h; sourceTree = ""; }; A1E78137178A90A100CC1037 /* OGRLayerProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRLayerProxy.cpp; sourceTree = ""; }; A1E78138178A90A100CC1037 /* OGRLayerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRLayerProxy.h; sourceTree = ""; }; + A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AutoUpdateDlg.cpp; sourceTree = ""; }; + A1EBC88E1CD2B2FD001DCFE9 /* AutoUpdateDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoUpdateDlg.h; sourceTree = ""; }; A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocaleSetupDlg.cpp; sourceTree = ""; }; A1EF332E18E35D8300E19375 /* LocaleSetupDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocaleSetupDlg.h; sourceTree = ""; }; A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCache.cpp; sourceTree = ""; }; @@ -319,6 +455,180 @@ A1F1BA98178D46B8005A46E5 /* cache.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = cache.sqlite; path = BuildTools/CommonDistFiles/cache.sqlite; sourceTree = ""; }; A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomClassifPtree.cpp; path = DataViewer/CustomClassifPtree.cpp; sourceTree = ""; }; A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomClassifPtree.h; path = DataViewer/CustomClassifPtree.h; sourceTree = ""; }; + A40A6A7C20226B3B003CDD79 /* PreferenceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferenceDlg.h; sourceTree = ""; }; + A40A6A7D20226B3B003CDD79 /* PreferenceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PreferenceDlg.cpp; sourceTree = ""; }; + A414C889207BED2700520546 /* MatfileReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MatfileReader.h; path = io/MatfileReader.h; sourceTree = ""; }; + A414C88A207BED2700520546 /* MatfileReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MatfileReader.cpp; path = io/MatfileReader.cpp; sourceTree = ""; }; + A416A1751F84122B001F2884 /* PCASettingsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PCASettingsDlg.cpp; sourceTree = ""; }; + A416A1761F84122B001F2884 /* PCASettingsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PCASettingsDlg.h; sourceTree = ""; }; + A41C2BA42400440200C341A2 /* vptree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vptree.h; path = Algorithms/vptree.h; sourceTree = ""; }; + A41C2BA52400441400C341A2 /* tsne.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tsne.cpp; path = Algorithms/tsne.cpp; sourceTree = ""; }; + A41C2BA62400441400C341A2 /* distanceplot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = distanceplot.h; path = Algorithms/distanceplot.h; sourceTree = ""; }; + A41C2BA72400441400C341A2 /* distanceplot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = distanceplot.cpp; path = Algorithms/distanceplot.cpp; sourceTree = ""; }; + A41C2BA82400441400C341A2 /* threadpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = threadpool.h; path = Algorithms/threadpool.h; sourceTree = ""; }; + A41C2BA92400441400C341A2 /* splittree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = splittree.h; path = Algorithms/splittree.h; sourceTree = ""; }; + A41C2BAA2400441400C341A2 /* tsne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsne.h; path = Algorithms/tsne.h; sourceTree = ""; }; + A41C2BAB2400441500C341A2 /* splittree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = splittree.cpp; path = Algorithms/splittree.cpp; sourceTree = ""; }; + A41C2BAF2400442300C341A2 /* nbrMatchDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nbrMatchDlg.cpp; sourceTree = ""; }; + A41C2BB02400442400C341A2 /* tSNEDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tSNEDlg.h; sourceTree = ""; }; + A41C2BB12400442400C341A2 /* tSNEDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tSNEDlg.cpp; sourceTree = ""; }; + A41C2BB22400442400C341A2 /* nbrMatchDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nbrMatchDlg.h; sourceTree = ""; }; + A41C2BB52400442F00C341A2 /* DistancePlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DistancePlotView.cpp; sourceTree = ""; }; + A41C2BB62400442F00C341A2 /* DistancePlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DistancePlotView.h; sourceTree = ""; }; + A41C2BB92404470C00C341A2 /* GenColor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GenColor.h; sourceTree = ""; }; + A41C2BBA2404471D00C341A2 /* GenColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GenColor.cpp; sourceTree = ""; }; + A42018011FB3C0AC0029709C /* skater.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = skater.cpp; path = Algorithms/skater.cpp; sourceTree = ""; }; + A42018021FB3C0AC0029709C /* skater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = skater.h; path = Algorithms/skater.h; sourceTree = ""; }; + A42018041FB4CF980029709C /* SkaterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkaterDlg.h; sourceTree = ""; }; + A42018051FB4CF980029709C /* SkaterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkaterDlg.cpp; sourceTree = ""; }; + A42B6F761F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcDateTimeDlg.cpp; sourceTree = ""; }; + A42B6F771F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcDateTimeDlg.h; sourceTree = ""; }; + A4320FC61F4735020007BE0D /* RedcapDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RedcapDlg.cpp; sourceTree = ""; }; + A4320FC71F4735020007BE0D /* RedcapDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RedcapDlg.h; sourceTree = ""; }; + A432E84620A672EA007B8B25 /* distmatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = distmatrix.cpp; path = Algorithms/distmatrix.cpp; sourceTree = ""; }; + A432E84820A674F7007B8B25 /* distmatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = distmatrix.h; path = Algorithms/distmatrix.h; sourceTree = ""; }; + A4368CD91FABB5260099FA9B /* DataUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataUtils.h; path = Algorithms/DataUtils.h; sourceTree = ""; }; + A4368CDA1FABBBC60099FA9B /* mds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mds.cpp; path = Algorithms/mds.cpp; sourceTree = ""; }; + A4368CDB1FABBBC60099FA9B /* mds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mds.h; path = Algorithms/mds.h; sourceTree = ""; }; + A438249824775CB90001497D /* pam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pam.cpp; path = Algorithms/pam.cpp; sourceTree = ""; }; + A438249924775CB90001497D /* pam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pam.h; path = Algorithms/pam.h; sourceTree = ""; }; + A43D124A1F1DE1D80073D408 /* MaxpDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaxpDlg.cpp; sourceTree = ""; }; + A43D124B1F1DE1D80073D408 /* MaxpDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaxpDlg.h; sourceTree = ""; }; + A43D124D1F2088D50073D408 /* spectral.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spectral.h; path = Algorithms/spectral.h; sourceTree = ""; }; + A43D124E1F2088D50073D408 /* spectral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spectral.cpp; path = Algorithms/spectral.cpp; sourceTree = ""; }; + A43D12501F20AE450073D408 /* SpectralClusteringDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpectralClusteringDlg.h; sourceTree = ""; }; + A43D12511F20AE450073D408 /* SpectralClusteringDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpectralClusteringDlg.cpp; sourceTree = ""; }; + A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalGearyCoordinator.cpp; sourceTree = ""; }; + A43D31531E845985007488D9 /* LocalGearyCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyCoordinator.h; sourceTree = ""; }; + A43D31551E845A0C007488D9 /* LocalGearyCoordinatorObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyCoordinatorObserver.h; sourceTree = ""; }; + A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalGearyMapNewView.cpp; sourceTree = ""; }; + A43D31571E845C3D007488D9 /* LocalGearyMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalGearyMapNewView.h; sourceTree = ""; }; + A43F343A2412C8280096E33B /* LoessPlotCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoessPlotCanvas.cpp; sourceTree = ""; }; + A43F343B2412C8280096E33B /* LoessPlotCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoessPlotCanvas.h; sourceTree = ""; }; + A4404A00208E65DC0007753D /* wxTranslationHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wxTranslationHelper.cpp; sourceTree = ""; }; + A4404A01208E65DD0007753D /* wxTranslationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxTranslationHelper.h; sourceTree = ""; }; + A4404A03208E9E380007753D /* lang */ = {isa = PBXFileReference; lastKnownFileType = folder; path = lang; sourceTree = ""; }; + A4404A0E209270FB0007753D /* pofiles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = pofiles; sourceTree = ""; }; + A4404A10209275540007753D /* hdbscan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hdbscan.cpp; path = Algorithms/hdbscan.cpp; sourceTree = ""; }; + A4404A11209275550007753D /* hdbscan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hdbscan.h; path = Algorithms/hdbscan.h; sourceTree = ""; }; + A4502B3324E1F66F001D378F /* MapViewHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MapViewHelper.cpp; sourceTree = ""; }; + A4502B3424E1F66F001D378F /* MapViewHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewHelper.h; sourceTree = ""; }; + A4502B3624E1F67C001D378F /* SCHCDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCHCDlg.h; sourceTree = ""; }; + A4502B3724E1F67C001D378F /* SCHCDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SCHCDlg.cpp; sourceTree = ""; }; + A4596B4C2033D8F600C9BCC8 /* AbstractCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractCoordinator.h; sourceTree = ""; }; + A4596B4D2033DB8E00C9BCC8 /* AbstractCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractCoordinator.cpp; sourceTree = ""; }; + A4596B4F2033DDFF00C9BCC8 /* AbstractClusterMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractClusterMap.h; sourceTree = ""; }; + A4596B502033DDFF00C9BCC8 /* AbstractClusterMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractClusterMap.cpp; sourceTree = ""; }; + A45CFF042453A515001F00B9 /* AnimatePlotCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimatePlotCanvas.cpp; sourceTree = ""; }; + A45CFF052453A516001F00B9 /* wxGLString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxGLString.h; sourceTree = ""; }; + A45CFF062453A516001F00B9 /* wxGLString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wxGLString.cpp; sourceTree = ""; }; + A45CFF072453A516001F00B9 /* AnimatePlotCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatePlotCanvas.h; sourceTree = ""; }; + A45DBDF01EDDEDAD00C2AA8A /* pca.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pca.h; path = Algorithms/pca.h; sourceTree = ""; }; + A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pca.cpp; path = Algorithms/pca.cpp; sourceTree = ""; }; + A45DBDF21EDDEDAD00C2AA8A /* cluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cluster.h; path = Algorithms/cluster.h; sourceTree = ""; }; + A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cluster.cpp; path = Algorithms/cluster.cpp; sourceTree = ""; }; + A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = maxp.cpp; path = Algorithms/maxp.cpp; sourceTree = ""; }; + A45DBDF91EDDEE4D00C2AA8A /* maxp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = maxp.h; path = Algorithms/maxp.h; sourceTree = ""; }; + A460999B2416E41B000A53E2 /* linpack_lite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linpack_lite.c; path = Algorithms/linpack_lite.c; sourceTree = ""; }; + A460999C2416E41B000A53E2 /* loess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loess.c; path = Algorithms/loess.c; sourceTree = ""; }; + A460999D2416E41B000A53E2 /* S.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = S.h; path = Algorithms/S.h; sourceTree = ""; }; + A460999E2416E41B000A53E2 /* loessc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loessc.c; path = Algorithms/loessc.c; sourceTree = ""; }; + A460999F2416E41B000A53E2 /* predict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = predict.c; path = Algorithms/predict.c; sourceTree = ""; }; + A46099A02416E41B000A53E2 /* loess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = loess.h; path = Algorithms/loess.h; sourceTree = ""; }; + A46099A12416E41B000A53E2 /* loessf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loessf.c; path = Algorithms/loessf.c; sourceTree = ""; }; + A46099A72416E562000A53E2 /* misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = misc.c; path = Algorithms/misc.c; sourceTree = ""; }; + A46DFA8F1FA92145007F5923 /* texttable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = texttable.h; path = Algorithms/texttable.h; sourceTree = ""; }; + A47533BC20A3BD5000695283 /* fastcluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fastcluster.h; path = Algorithms/fastcluster.h; sourceTree = ""; }; + A47614AB20759E5600D9F3BE /* arcgis_swm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = arcgis_swm.h; path = io/arcgis_swm.h; sourceTree = ""; }; + A47614AD20759EAD00D9F3BE /* arcgis_swm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arcgis_swm.cpp; path = io/arcgis_swm.cpp; sourceTree = ""; }; + A47F791E20A9F679000AFE57 /* gpu_lisa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gpu_lisa.cpp; path = Algorithms/gpu_lisa.cpp; sourceTree = ""; }; + A47F791F20A9F67A000AFE57 /* gpu_lisa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gpu_lisa.h; path = Algorithms/gpu_lisa.h; sourceTree = ""; }; + A47F792120AA082A000AFE57 /* lisa_kernel.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = lisa_kernel.cl; path = Algorithms/lisa_kernel.cl; sourceTree = ""; }; + A47F792320AA084B000AFE57 /* distmat_kernel.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = distmat_kernel.cl; path = Algorithms/distmat_kernel.cl; sourceTree = ""; }; + A47FC9D91F74DE1600BEFBF2 /* MLJCCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MLJCCoordinator.cpp; sourceTree = ""; }; + A47FC9DA1F74DE1600BEFBF2 /* MLJCCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLJCCoordinator.h; sourceTree = ""; }; + A47FC9DC1F74E31800BEFBF2 /* MLJCCoordinatorObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLJCCoordinatorObserver.h; sourceTree = ""; }; + A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalClusterMapView.cpp; sourceTree = ""; }; + A48356BA1E456310002791C8 /* ConditionalClusterMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalClusterMapView.h; sourceTree = ""; }; + A48814EA20A50B0F005490A7 /* fastcluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fastcluster.cpp; path = Algorithms/fastcluster.cpp; sourceTree = ""; }; + A496C99D1E6A184C008F87DD /* samples.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = samples.sqlite; path = BuildTools/CommonDistFiles/web_plugins/samples.sqlite; sourceTree = ""; }; + A496C9A71E6A43C0008F87DD /* BaltimoreHomeSales.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = BaltimoreHomeSales.png; path = BuildTools/CommonDistFiles/web_plugins/BaltimoreHomeSales.png; sourceTree = ""; }; + A496C9A91E6A43CC008F87DD /* BostonHomeSales.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = BostonHomeSales.png; path = BuildTools/CommonDistFiles/web_plugins/BostonHomeSales.png; sourceTree = ""; }; + A496C9AB1E6A43D0008F87DD /* BuenosAiresElections.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = BuenosAiresElections.png; path = BuildTools/CommonDistFiles/web_plugins/BuenosAiresElections.png; sourceTree = ""; }; + A496C9AD1E6A43D6008F87DD /* ColombiaMalaria.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ColombiaMalaria.png; path = BuildTools/CommonDistFiles/web_plugins/ColombiaMalaria.png; sourceTree = ""; }; + A496C9AF1E6A43DA008F87DD /* ColumbusCrime.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ColumbusCrime.png; path = BuildTools/CommonDistFiles/web_plugins/ColumbusCrime.png; sourceTree = ""; }; + A496C9B11E6A43E4008F87DD /* Milwaukee2000Census.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Milwaukee2000Census.png; path = BuildTools/CommonDistFiles/web_plugins/Milwaukee2000Census.png; sourceTree = ""; }; + A496C9B31E6A43E8008F87DD /* NAT.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NAT.png; path = BuildTools/CommonDistFiles/web_plugins/NAT.png; sourceTree = ""; }; + A496C9B51E6A43EE008F87DD /* NepalAid.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NepalAid.png; path = BuildTools/CommonDistFiles/web_plugins/NepalAid.png; sourceTree = ""; }; + A496C9B71E6A43F3008F87DD /* NepalAid.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NepalAid.png; path = BuildTools/CommonDistFiles/web_plugins/NepalAid.png; sourceTree = ""; }; + A496C9B81E6A43FA008F87DD /* no_map.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = no_map.png; path = BuildTools/CommonDistFiles/web_plugins/no_map.png; sourceTree = ""; }; + A496C9BA1E6A43FE008F87DD /* NYCData.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NYCData.png; path = BuildTools/CommonDistFiles/web_plugins/NYCData.png; sourceTree = ""; }; + A496C9BC1E6A4402008F87DD /* PhoenixACS.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = PhoenixACS.png; path = BuildTools/CommonDistFiles/web_plugins/PhoenixACS.png; sourceTree = ""; }; + A496C9BE1E6A4405008F87DD /* SanFranCrime.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SanFranCrime.png; path = BuildTools/CommonDistFiles/web_plugins/SanFranCrime.png; sourceTree = ""; }; + A496C9C01E6A440A008F87DD /* SIDSNC.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SIDSNC.png; path = BuildTools/CommonDistFiles/web_plugins/SIDSNC.png; sourceTree = ""; }; + A496C9C21E6A4417008F87DD /* USHomicides.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = USHomicides.png; path = BuildTools/CommonDistFiles/web_plugins/USHomicides.png; sourceTree = ""; }; + A496C9C41E6A441D008F87DD /* watermark-20.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "watermark-20.png"; path = "BuildTools/CommonDistFiles/web_plugins/watermark-20.png"; sourceTree = ""; }; + A499564724FED58300BB5CB1 /* AZPDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AZPDlg.cpp; sourceTree = ""; }; + A499564824FED58300BB5CB1 /* AZPDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AZPDlg.h; sourceTree = ""; }; + A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HClusterDlg.cpp; sourceTree = ""; }; + A49F56DC1E956FCC000309CE /* HClusterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HClusterDlg.h; sourceTree = ""; }; + A4A591F224A515D900BEA1FF /* ConditionalBoxPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalBoxPlotView.h; sourceTree = ""; }; + A4A591F324A515D900BEA1FF /* ConditionalBoxPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalBoxPlotView.cpp; sourceTree = ""; }; + A4A591F524ABB15400BEA1FF /* dbscan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dbscan.cpp; path = Algorithms/dbscan.cpp; sourceTree = ""; }; + A4A591F624ABB15500BEA1FF /* dbscan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dbscan.h; path = Algorithms/dbscan.h; sourceTree = ""; }; + A4A591F824ABB80800BEA1FF /* DBScanDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBScanDlg.h; sourceTree = ""; }; + A4A591F924ABB80800BEA1FF /* DBScanDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBScanDlg.cpp; sourceTree = ""; }; + A4A6AD79207F198D00D29677 /* ShpFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShpFile.h; sourceTree = ""; }; + A4A6AD7A207F198E00D29677 /* ShpFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShpFile.cpp; sourceTree = ""; }; + A4A763F21F69FB3B00EE79DD /* ColocationMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColocationMapView.cpp; sourceTree = ""; }; + A4A763F31F69FB3B00EE79DD /* ColocationMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColocationMapView.h; sourceTree = ""; }; + A4B1F992207730FA00905246 /* matlab_mat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = matlab_mat.cpp; path = io/matlab_mat.cpp; sourceTree = ""; }; + A4B1F9952077311F00905246 /* matlab_mat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = matlab_mat.h; path = io/matlab_mat.h; sourceTree = ""; }; + A4B1F99620783CC100905246 /* weights_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weights_interface.h; path = io/weights_interface.h; sourceTree = ""; }; + A4B85A7024F6FF9C00748B92 /* azp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = azp.cpp; path = Algorithms/azp.cpp; sourceTree = ""; }; + A4B85A7124F6FF9C00748B92 /* azp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = azp.h; path = Algorithms/azp.h; sourceTree = ""; }; + A4B85A7224F6FF9D00748B92 /* rng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rng.h; path = Algorithms/rng.h; sourceTree = ""; }; + A4BBAB992444D82B00BD4E57 /* lapacke.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lapacke.c; path = Algorithms/lapacke.c; sourceTree = ""; }; + A4BBAB9A2444D82B00BD4E57 /* jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jacobi.c; path = Algorithms/jacobi.c; sourceTree = ""; }; + A4BBAB9B2444D82B00BD4E57 /* smacof_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = smacof_utils.c; path = Algorithms/smacof_utils.c; sourceTree = ""; }; + A4BBAB9C2444D82B00BD4E57 /* smacof.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = smacof.c; path = Algorithms/smacof.c; sourceTree = ""; }; + A4BBAB9D2444D82B00BD4E57 /* smacof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smacof.h; path = Algorithms/smacof.h; sourceTree = ""; }; + A4C4ABF91F97DA2D00085D47 /* MLJCMapNewView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MLJCMapNewView.cpp; sourceTree = ""; }; + A4C4ABFA1F97DA2D00085D47 /* MLJCMapNewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLJCMapNewView.h; sourceTree = ""; }; + A4C76B0C225BC4BA00A0729A /* GroupingMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupingMapView.h; sourceTree = ""; }; + A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GroupingMapView.cpp; sourceTree = ""; }; + A4CFBCB6250AE02B00246D81 /* quantileLisaDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quantileLisaDlg.h; sourceTree = ""; }; + A4CFBCB7250AE02C00246D81 /* quantileLisaDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quantileLisaDlg.cpp; sourceTree = ""; }; + A4CFBCB9250BE8E700246D81 /* MultiQuantileLisaDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiQuantileLisaDlg.h; sourceTree = ""; }; + A4CFBCBA250BE8E800246D81 /* MultiQuantileLisaDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiQuantileLisaDlg.cpp; sourceTree = ""; }; + A4D5423B1F45037B00572878 /* redcap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = redcap.cpp; path = Algorithms/redcap.cpp; sourceTree = ""; }; + A4D5423C1F45037B00572878 /* redcap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = redcap.h; path = Algorithms/redcap.h; sourceTree = ""; }; + A4D9A31E1E4D5F3800EF584C /* gdaldata */ = {isa = PBXFileReference; lastKnownFileType = folder; name = gdaldata; path = BuildTools/CommonDistFiles/gdaldata; sourceTree = ""; }; + A4DB2CBB1EEA3A3E00BD4A54 /* Guerry.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Guerry.png; path = BuildTools/CommonDistFiles/web_plugins/Guerry.png; sourceTree = ""; }; + A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; name = localjc_kernel.cl; path = Algorithms/localjc_kernel.cl; sourceTree = ""; }; + A4E5FE171F624D5600D75662 /* AggregateDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AggregateDlg.cpp; sourceTree = ""; }; + A4E5FE181F624D5600D75662 /* AggregateDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AggregateDlg.h; sourceTree = ""; }; + A4ED7D412097EC54008685D6 /* ANN.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ANN.cpp; path = ../kNN/ANN.cpp; sourceTree = ""; }; + A4ED7D462097EDE9008685D6 /* kd_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_tree.cpp; sourceTree = ""; }; + A4ED7D482097F113008685D6 /* kd_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_tree.h; sourceTree = ""; }; + A4ED7D492097F113008685D6 /* kd_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_search.h; sourceTree = ""; }; + A4ED7D4A2097F113008685D6 /* kd_pr_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_pr_search.h; sourceTree = ""; }; + A4ED7D4B2097F113008685D6 /* kd_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_util.h; sourceTree = ""; }; + A4ED7D4D2097F113008685D6 /* pr_queue_k.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pr_queue_k.h; sourceTree = ""; }; + A4ED7D4E2097F113008685D6 /* kd_pr_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_pr_search.cpp; sourceTree = ""; }; + A4ED7D4F2097F113008685D6 /* pr_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pr_queue.h; sourceTree = ""; }; + A4ED7D502097F114008685D6 /* kd_search.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_search.cpp; sourceTree = ""; }; + A4ED7D512097F114008685D6 /* kd_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_util.cpp; sourceTree = ""; }; + A4ED7D522097F114008685D6 /* kd_split.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kd_split.cpp; sourceTree = ""; }; + A4ED7D532097F114008685D6 /* kd_split.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kd_split.h; sourceTree = ""; }; + A4ED7D59209A6B81008685D6 /* HDBScanDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HDBScanDlg.cpp; sourceTree = ""; }; + A4ED7D5A209A6B81008685D6 /* HDBScanDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDBScanDlg.h; sourceTree = ""; }; + A4F5D61D1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractClusterDlg.cpp; sourceTree = ""; }; + A4F5D61E1F4EA0D2007ADF25 /* AbstractClusterDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractClusterDlg.h; sourceTree = ""; }; + A4F5D6201F513EA1007ADF25 /* MDSDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDSDlg.cpp; sourceTree = ""; }; + A4F5D6211F513EA1007ADF25 /* MDSDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDSDlg.h; sourceTree = ""; }; + A4F875751E94123F0079734E /* KMeansDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KMeansDlg.cpp; sourceTree = ""; }; + A4F875761E94123F0079734E /* KMeansDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMeansDlg.h; sourceTree = ""; }; DD00ADE611138A2C008FE572 /* TemplateFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateFrame.h; sourceTree = ""; }; DD00ADE711138A2C008FE572 /* TemplateFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TemplateFrame.cpp; sourceTree = ""; }; DD0DC4B813CBA7B10022B65A /* RangeSelectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeSelectionDlg.cpp; sourceTree = ""; }; @@ -338,8 +648,6 @@ DD209597139F129900B9E648 /* GetisOrdChoiceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetisOrdChoiceDlg.h; sourceTree = ""; }; DD26CBE219A41A480092C0F2 /* WebViewExampleWin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebViewExampleWin.cpp; sourceTree = ""; }; DD26CBE319A41A480092C0F2 /* WebViewExampleWin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebViewExampleWin.h; sourceTree = ""; }; - DD27EF030F2F6CBE009C5C42 /* ShapeFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFile.h; sourceTree = ""; }; - DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFile.cpp; sourceTree = ""; }; DD2A6FDE178C7F7C00197093 /* DataSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataSource.cpp; path = DataViewer/DataSource.cpp; sourceTree = ""; }; DD2A6FDF178C7F7C00197093 /* DataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataSource.h; path = DataViewer/DataSource.h; sourceTree = ""; }; DD2AE42819D4F4CA00B23FB9 /* GdaJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaJson.h; sourceTree = ""; }; @@ -373,8 +681,6 @@ DD40B081181894F20084173C /* VarGroupingEditorDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VarGroupingEditorDlg.cpp; sourceTree = ""; }; DD40B082181894F20084173C /* VarGroupingEditorDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VarGroupingEditorDlg.h; sourceTree = ""; }; DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = geoda_prefs.sqlite; path = BuildTools/CommonDistFiles/geoda_prefs.sqlite; sourceTree = ""; }; - DD497478176F59670007BB9F /* DbfTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DbfTable.h; path = DataViewer/DbfTable.h; sourceTree = ""; }; - DD497479176F59670007BB9F /* DbfTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DbfTable.cpp; path = DataViewer/DbfTable.cpp; sourceTree = ""; }; DD4974B51770AC700007BB9F /* TableFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableFrame.h; path = DataViewer/TableFrame.h; sourceTree = ""; }; DD4974B61770AC700007BB9F /* TableFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableFrame.cpp; path = DataViewer/TableFrame.cpp; sourceTree = ""; }; DD4974B81770AC840007BB9F /* TableBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableBase.h; path = DataViewer/TableBase.h; sourceTree = ""; }; @@ -391,8 +697,6 @@ DD5A579616E53EC40047DBB1 /* GeoDa.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = GeoDa.icns; sourceTree = ""; }; DD5AA73B1982D200009B30C6 /* CalcHelp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CalcHelp.cpp; path = VarCalc/CalcHelp.cpp; sourceTree = ""; }; DD5AA73C1982D200009B30C6 /* CalcHelp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CalcHelp.h; path = VarCalc/CalcHelp.h; sourceTree = ""; }; - DD5FA1D80F320DD50055A0E5 /* ShapeFileHdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileHdr.h; sourceTree = ""; }; - DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFileHdr.cpp; sourceTree = ""; }; DD60546616A83EEF0004BF02 /* CatClassifManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassifManager.cpp; sourceTree = ""; }; DD60546716A83EEF0004BF02 /* CatClassifManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifManager.h; sourceTree = ""; }; DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeChooserDlg.cpp; sourceTree = ""; }; @@ -404,8 +708,6 @@ DD64A5540F291027006B1E6D /* logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logger.h; sourceTree = ""; }; DD64A5570F2910D2006B1E6D /* logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logger.cpp; sourceTree = ""; }; DD64A5760F2911A4006B1E6D /* nullstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nullstream.h; sourceTree = ""; }; - DD64A6AB0F2A7A81006B1E6D /* DBF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBF.h; sourceTree = ""; }; - DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBF.cpp; sourceTree = ""; }; DD64A7230F2E26AA006B1E6D /* GenUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenUtils.h; sourceTree = ""; }; DD64A7240F2E26AA006B1E6D /* GenUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenUtils.cpp; sourceTree = ""; }; DD694683130307C00072386B /* RateSmoothing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RateSmoothing.h; sourceTree = ""; }; @@ -440,8 +742,6 @@ DD7974C40F1D250A00496A84 /* TemplateCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemplateCanvas.h; sourceTree = ""; }; DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DControlPan.cpp; sourceTree = ""; }; DD7975000F1D296F00496A84 /* 3DControlPan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DControlPan.h; sourceTree = ""; }; - DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASC2SHPDlg.cpp; sourceTree = ""; }; - DD79750A0F1D296F00496A84 /* ASC2SHPDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASC2SHPDlg.h; sourceTree = ""; }; DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bnd2ShpDlg.cpp; sourceTree = ""; }; DD79750C0F1D296F00496A84 /* Bnd2ShpDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bnd2ShpDlg.h; sourceTree = ""; }; DD7975110F1D296F00496A84 /* CreateGridDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CreateGridDlg.cpp; sourceTree = ""; }; @@ -464,8 +764,6 @@ DD7975480F1D296F00496A84 /* RegressionReportDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegressionReportDlg.h; sourceTree = ""; }; DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveSelectionDlg.cpp; sourceTree = ""; }; DD7975560F1D296F00496A84 /* SaveSelectionDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveSelectionDlg.h; sourceTree = ""; }; - DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHP2ASCDlg.cpp; sourceTree = ""; }; - DD79755A0F1D296F00496A84 /* SHP2ASCDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHP2ASCDlg.h; sourceTree = ""; }; DD7975610F1D296F00496A84 /* VariableSettingsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VariableSettingsDlg.cpp; sourceTree = ""; }; DD7975620F1D296F00496A84 /* VariableSettingsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VariableSettingsDlg.h; sourceTree = ""; }; DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DPlotView.cpp; sourceTree = ""; }; @@ -536,8 +834,6 @@ DD89C87113D86BC7006C068D /* FieldNewCalcSheetDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcSheetDlg.h; sourceTree = ""; }; DD89C87213D86BC7006C068D /* FieldNewCalcUniDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNewCalcUniDlg.cpp; sourceTree = ""; }; DD89C87313D86BC7006C068D /* FieldNewCalcUniDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNewCalcUniDlg.h; sourceTree = ""; }; - DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataChangeType.cpp; path = DataViewer/DataChangeType.cpp; sourceTree = ""; }; - DD8DCE0D19C0FD8F00E62C3D /* DataChangeType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataChangeType.h; path = DataViewer/DataChangeType.h; sourceTree = ""; }; DD8FACDF1649595D007598CE /* DataMovieDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataMovieDlg.cpp; sourceTree = ""; }; DD8FACE01649595D007598CE /* DataMovieDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataMovieDlg.h; sourceTree = ""; }; DD92851A17F5FC7300B9481A /* VarOrderPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VarOrderPtree.cpp; path = DataViewer/VarOrderPtree.cpp; sourceTree = ""; }; @@ -548,12 +844,9 @@ DD92853C17F5FE2E00B9481A /* VarGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VarGroup.h; path = DataViewer/VarGroup.h; sourceTree = ""; }; DD92D22217BAAF2300F8FE01 /* TimeEditorDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimeEditorDlg.h; sourceTree = ""; }; DD92D22317BAAF2300F8FE01 /* TimeEditorDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeEditorDlg.cpp; sourceTree = ""; }; - DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimplePoint.cpp; sourceTree = ""; }; - DD9373B51AC1F99D0066AF21 /* SimplePoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimplePoint.h; sourceTree = ""; }; DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolysToContigWeights.cpp; sourceTree = ""; }; DD9373F61AC1FEAA0066AF21 /* PolysToContigWeights.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolysToContigWeights.h; sourceTree = ""; }; DD93748F1AC2086B0066AF21 /* Link.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Link.h; sourceTree = ""; }; - DD972056150A6F44000206F4 /* sp_tm_conv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sp_tm_conv.cpp; path = CmdLineUtils/sp_tm_conv/sp_tm_conv.cpp; sourceTree = ""; }; DD99BA1811D3F8D6003BB40E /* ScatterNewPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScatterNewPlotView.h; sourceTree = ""; }; DD99BA1911D3F8D6003BB40E /* ScatterNewPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScatterNewPlotView.cpp; sourceTree = ""; }; DD9C1B351910267900C0A427 /* GdaConst.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaConst.cpp; sourceTree = ""; }; @@ -603,19 +896,8 @@ DDC9DD9B15937C0200A0E5BA /* ImportCsvDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImportCsvDlg.h; sourceTree = ""; }; DDCCB5CA1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleBinsHistCanvas.cpp; sourceTree = ""; }; DDCCB5CB1AD47C200067D6C4 /* SimpleBinsHistCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleBinsHistCanvas.h; sourceTree = ""; }; - DDCFA9941A96790100747EB7 /* DbfFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DbfFile.cpp; sourceTree = ""; }; - DDCFA9951A96790100747EB7 /* DbfFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbfFile.h; sourceTree = ""; }; DDD13F040F2F8BE1009F7F13 /* GenGeomAlgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenGeomAlgs.h; sourceTree = ""; }; DDD13F050F2F8BE1009F7F13 /* GenGeomAlgs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenGeomAlgs.cpp; sourceTree = ""; }; - DDD13F6D0F2FC802009F7F13 /* ShapeFileTriplet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileTriplet.h; sourceTree = ""; }; - DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeFileTriplet.cpp; sourceTree = ""; }; - DDD13F720F2FCEE8009F7F13 /* ShapeFileTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeFileTypes.h; sourceTree = ""; }; - DDD13F910F2FD641009F7F13 /* BasePoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasePoint.h; sourceTree = ""; }; - DDD13F920F2FD641009F7F13 /* BasePoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasePoint.cpp; sourceTree = ""; }; - DDD13FA90F30B2E4009F7F13 /* Box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box.h; sourceTree = ""; }; - DDD13FAA0F30B2E4009F7F13 /* Box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Box.cpp; sourceTree = ""; }; - DDD140520F310324009F7F13 /* AbstractShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractShape.h; sourceTree = ""; }; - DDD140530F310324009F7F13 /* AbstractShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractShape.cpp; sourceTree = ""; }; DDD2392B1AB86D8F00E4E1BF /* NumericTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NumericTests.cpp; path = VarCalc/NumericTests.cpp; sourceTree = ""; }; DDD2392C1AB86D8F00E4E1BF /* NumericTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NumericTests.h; path = VarCalc/NumericTests.h; sourceTree = ""; }; DDD593AA12E9F34C00F7A7C4 /* GeodaWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeodaWeight.h; sourceTree = ""; }; @@ -626,21 +908,17 @@ DDD593C612E9F90000F7A7C4 /* GalWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GalWeight.cpp; sourceTree = ""; }; DDD593C812E9F90C00F7A7C4 /* GwtWeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GwtWeight.h; sourceTree = ""; }; DDD593C912E9F90C00F7A7C4 /* GwtWeight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GwtWeight.cpp; sourceTree = ""; }; - DDDBF284163AD1D50070610C /* ConditionalMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalMapView.cpp; sourceTree = ""; }; + DDDBF284163AD1D50070610C /* ConditionalMapView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalMapView.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; DDDBF285163AD1D50070610C /* ConditionalMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalMapView.h; sourceTree = ""; }; DDDBF299163AD2BF0070610C /* ConditionalScatterPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalScatterPlotView.h; sourceTree = ""; }; DDDBF29A163AD2BF0070610C /* ConditionalScatterPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalScatterPlotView.cpp; sourceTree = ""; }; DDDBF2AC163AD3AB0070610C /* ConditionalHistogramView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalHistogramView.cpp; sourceTree = ""; }; DDDBF2AD163AD3AB0070610C /* ConditionalHistogramView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalHistogramView.h; sourceTree = ""; }; - DDDC11EB1159783700E515BB /* ShapeUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeUtils.cpp; sourceTree = ""; }; - DDDC11EC1159783700E515BB /* ShapeUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeUtils.h; sourceTree = ""; }; DDE39D97178CDB9A00C47D58 /* PtreeInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PtreeInterface.h; path = DataViewer/PtreeInterface.h; sourceTree = ""; }; DDE3F5061677C46500D13A2C /* CatClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CatClassification.cpp; sourceTree = ""; }; DDE3F5071677C46500D13A2C /* CatClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassification.h; sourceTree = ""; }; DDE4DFD41A963B07005B9158 /* GdaShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaShape.cpp; sourceTree = ""; }; DDE4DFD51A963B07005B9158 /* GdaShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaShape.h; sourceTree = ""; }; - DDE4DFE71A96411A005B9158 /* ShpFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShpFile.cpp; sourceTree = ""; }; - DDE4DFE81A96411A005B9158 /* ShpFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShpFile.h; sourceTree = ""; }; DDEA3CB7193CEE5C0028B746 /* GdaFlexValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GdaFlexValue.cpp; path = VarCalc/GdaFlexValue.cpp; sourceTree = ""; }; DDEA3CB8193CEE5C0028B746 /* GdaFlexValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GdaFlexValue.h; path = VarCalc/GdaFlexValue.h; sourceTree = ""; }; DDEA3CB9193CEE5C0028B746 /* GdaLexer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GdaLexer.cpp; path = VarCalc/GdaLexer.cpp; sourceTree = ""; }; @@ -662,8 +940,6 @@ DDF5400A167A39CA0042B453 /* CatClassifDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatClassifDlg.h; sourceTree = ""; }; DDF85D1613B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DataViewerEditFieldPropertiesDlg.cpp; path = DataViewer/DataViewerEditFieldPropertiesDlg.cpp; sourceTree = ""; }; DDF85D1713B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DataViewerEditFieldPropertiesDlg.h; path = DataViewer/DataViewerEditFieldPropertiesDlg.h; sourceTree = ""; }; - DDFE0E0717502E810099FFEC /* DbfColContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DbfColContainer.h; path = DataViewer/DbfColContainer.h; sourceTree = ""; }; - DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DbfColContainer.cpp; path = DataViewer/DbfColContainer.cpp; sourceTree = ""; }; DDFE0E27175034EC0099FFEC /* TimeState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TimeState.cpp; path = DataViewer/TimeState.cpp; sourceTree = ""; }; DDFE0E28175034EC0099FFEC /* TimeState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeState.h; path = DataViewer/TimeState.h; sourceTree = ""; }; DDFE0E29175034EC0099FFEC /* TimeStateObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimeStateObserver.h; path = DataViewer/TimeStateObserver.h; sourceTree = ""; }; @@ -693,23 +969,218 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - A1546D171F5B52B0002FC3DF /* Algorithms */ = { + A14735A721A5F6CE00CA69B2 /* Weights */ = { + isa = PBXGroup; + children = ( + A14735A821A5F72D00CA69B2 /* DistUtils.h */, + A14735A921A5F72D00CA69B2 /* DistUtils.cpp */, + ); + path = Weights; + sourceTree = ""; + }; + A19483772118BA8B009A87A2 /* ogl */ = { + isa = PBXGroup; + children = ( + A19483862118BAA8009A87A2 /* basic.cpp */, + A194838B2118BAA9009A87A2 /* basic.h */, + A19483892118BAA9009A87A2 /* basic2.cpp */, + A19483832118BAA8009A87A2 /* basicp.h */, + A19483852118BAA8009A87A2 /* bmpshape.cpp */, + A19483842118BAA8009A87A2 /* bmpshape.h */, + A19483872118BAA8009A87A2 /* canvas.cpp */, + A194838F2118BAAA009A87A2 /* canvas.h */, + A194837A2118BAA7009A87A2 /* composit.cpp */, + A19483792118BAA7009A87A2 /* composit.h */, + A194837F2118BAA7009A87A2 /* constrnt.cpp */, + A194838E2118BAA9009A87A2 /* constrnt.h */, + A194837E2118BAA7009A87A2 /* divided.cpp */, + A19483802118BAA8009A87A2 /* divided.h */, + A194838C2118BAA9009A87A2 /* drawn.cpp */, + A19483922118BAAA009A87A2 /* drawn.h */, + A19483822118BAA8009A87A2 /* drawnp.h */, + A19483882118BAA9009A87A2 /* lines.cpp */, + A19483902118BAAA009A87A2 /* lines.h */, + A194837C2118BAA7009A87A2 /* linesp.h */, + A194838A2118BAA9009A87A2 /* mfutils.cpp */, + A194837D2118BAA7009A87A2 /* mfutils.h */, + A194837B2118BAA7009A87A2 /* misc.h */, + A194838D2118BAA9009A87A2 /* ogl.h */, + A19483912118BAAA009A87A2 /* ogldiag.cpp */, + A19483782118BAA7009A87A2 /* ogldiag.h */, + A19483812118BAA8009A87A2 /* oglmisc.cpp */, + ); + path = ogl; + sourceTree = ""; + }; + A45DBDEF1EDDDD2600C2AA8A /* Algorithms */ = { isa = PBXGroup; children = ( - A1546D181F5B52D2002FC3DF /* cluster.cpp */, - A1546D191F5B52D2002FC3DF /* cluster.h */, - A1546D1A1F5B52D2002FC3DF /* maxp.cpp */, - A1546D1B1F5B52D2002FC3DF /* maxp.h */, - A1546D1E1F5B52D2002FC3DF /* pca.cpp */, - A1546D1F1F5B52D2002FC3DF /* pca.h */, - A1546D201F5B52D2002FC3DF /* redcap.cpp */, - A1546D211F5B52D2002FC3DF /* redcap.h */, - A1546D221F5B52D2002FC3DF /* spectral.cpp */, - A1546D231F5B52D2002FC3DF /* spectral.h */, + A4B85A7024F6FF9C00748B92 /* azp.cpp */, + A4B85A7124F6FF9C00748B92 /* azp.h */, + A4B85A7224F6FF9D00748B92 /* rng.h */, + A4A591F524ABB15400BEA1FF /* dbscan.cpp */, + A4A591F624ABB15500BEA1FF /* dbscan.h */, + A438249824775CB90001497D /* pam.cpp */, + A438249924775CB90001497D /* pam.h */, + A4BBAB982444D81300BD4E57 /* smacof */, + A4F733C82416B75600AEDCFE /* loess */, + A41C2BA72400441400C341A2 /* distanceplot.cpp */, + A41C2BA62400441400C341A2 /* distanceplot.h */, + A41C2BAB2400441500C341A2 /* splittree.cpp */, + A41C2BA92400441400C341A2 /* splittree.h */, + A41C2BA82400441400C341A2 /* threadpool.h */, + A41C2BA52400441400C341A2 /* tsne.cpp */, + A41C2BAA2400441400C341A2 /* tsne.h */, + A41C2BA42400440200C341A2 /* vptree.h */, + A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */, + A47F792320AA084B000AFE57 /* distmat_kernel.cl */, + A47F792120AA082A000AFE57 /* lisa_kernel.cl */, + A47F791E20A9F679000AFE57 /* gpu_lisa.cpp */, + A47F791F20A9F67A000AFE57 /* gpu_lisa.h */, + A432E84820A674F7007B8B25 /* distmatrix.h */, + A432E84620A672EA007B8B25 /* distmatrix.cpp */, + A48814EA20A50B0F005490A7 /* fastcluster.cpp */, + A47533BC20A3BD5000695283 /* fastcluster.h */, + A4404A10209275540007753D /* hdbscan.cpp */, + A4404A11209275550007753D /* hdbscan.h */, + A42018011FB3C0AC0029709C /* skater.cpp */, + A42018021FB3C0AC0029709C /* skater.h */, + A4368CDA1FABBBC60099FA9B /* mds.cpp */, + A4368CDB1FABBBC60099FA9B /* mds.h */, + A4368CD91FABB5260099FA9B /* DataUtils.h */, + A46DFA8F1FA92145007F5923 /* texttable.h */, + A4D5423B1F45037B00572878 /* redcap.cpp */, + A4D5423C1F45037B00572878 /* redcap.h */, + A43D124D1F2088D50073D408 /* spectral.h */, + A43D124E1F2088D50073D408 /* spectral.cpp */, + A45DBDF81EDDEE4D00C2AA8A /* maxp.cpp */, + A45DBDF91EDDEE4D00C2AA8A /* maxp.h */, + A45DBDF11EDDEDAD00C2AA8A /* pca.cpp */, + A45DBDF01EDDEDAD00C2AA8A /* pca.h */, + A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */, + A45DBDF21EDDEDAD00C2AA8A /* cluster.h */, ); name = Algorithms; sourceTree = ""; }; + A45DBDF61EDDEDC400C2AA8A /* _SampleImages */ = { + isa = PBXGroup; + children = ( + A1230E5D212DF54D002AB30A /* switch-off.png */, + A1230E5C212DF54C002AB30A /* switch-on.png */, + A4DB2CBB1EEA3A3E00BD4A54 /* Guerry.png */, + A496C9C41E6A441D008F87DD /* watermark-20.png */, + A496C9C21E6A4417008F87DD /* USHomicides.png */, + A496C9C01E6A440A008F87DD /* SIDSNC.png */, + A496C9BE1E6A4405008F87DD /* SanFranCrime.png */, + A496C9BC1E6A4402008F87DD /* PhoenixACS.png */, + A496C9BA1E6A43FE008F87DD /* NYCData.png */, + A496C9B81E6A43FA008F87DD /* no_map.png */, + A496C9B71E6A43F3008F87DD /* NepalAid.png */, + A496C9B51E6A43EE008F87DD /* NepalAid.png */, + A496C9B31E6A43E8008F87DD /* NAT.png */, + A496C9B11E6A43E4008F87DD /* Milwaukee2000Census.png */, + A496C9AF1E6A43DA008F87DD /* ColumbusCrime.png */, + A496C9AD1E6A43D6008F87DD /* ColombiaMalaria.png */, + A496C9AB1E6A43D0008F87DD /* BuenosAiresElections.png */, + A496C9A91E6A43CC008F87DD /* BostonHomeSales.png */, + A496C9A71E6A43C0008F87DD /* BaltimoreHomeSales.png */, + ); + name = _SampleImages; + sourceTree = ""; + }; + A45DBDF71EDDEDDA00C2AA8A /* _InternalData */ = { + isa = PBXGroup; + children = ( + A496C99D1E6A184C008F87DD /* samples.sqlite */, + A1F1BA98178D46B8005A46E5 /* cache.sqlite */, + DD2EB10019E6EFC50073E36F /* geoda_prefs.json */, + DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */, + ); + name = _InternalData; + sourceTree = ""; + }; + A47614AC20759E6100D9F3BE /* io */ = { + isa = PBXGroup; + children = ( + A414C88A207BED2700520546 /* MatfileReader.cpp */, + A414C889207BED2700520546 /* MatfileReader.h */, + A4B1F99620783CC100905246 /* weights_interface.h */, + A4B1F9952077311F00905246 /* matlab_mat.h */, + A4B1F992207730FA00905246 /* matlab_mat.cpp */, + A47614AD20759EAD00D9F3BE /* arcgis_swm.cpp */, + A47614AB20759E5600D9F3BE /* arcgis_swm.h */, + ); + name = io; + sourceTree = ""; + }; + A4BBAB982444D81300BD4E57 /* smacof */ = { + isa = PBXGroup; + children = ( + A4BBAB9A2444D82B00BD4E57 /* jacobi.c */, + A4BBAB992444D82B00BD4E57 /* lapacke.c */, + A4BBAB9B2444D82B00BD4E57 /* smacof_utils.c */, + A4BBAB9C2444D82B00BD4E57 /* smacof.c */, + A4BBAB9D2444D82B00BD4E57 /* smacof.h */, + ); + name = smacof; + sourceTree = ""; + }; + A4CFF027207D6D7500E2E6DE /* internationalization */ = { + isa = PBXGroup; + children = ( + A4404A0E209270FB0007753D /* pofiles */, + A4404A03208E9E380007753D /* lang */, + ); + name = internationalization; + path = ../../internationalization; + sourceTree = SOURCE_ROOT; + }; + A4ED7D3F2097EC0F008685D6 /* kNN */ = { + isa = PBXGroup; + children = ( + A14735AD21A65F1700CA69B2 /* bd_fix_rad_search.cpp */, + A14735B221A65F1700CA69B2 /* bd_pr_search.cpp */, + A14735AF21A65F1700CA69B2 /* bd_search.cpp */, + A14735AB21A65F1600CA69B2 /* bd_tree.cpp */, + A14735B421A65F1700CA69B2 /* bd_tree.h */, + A14735B321A65F1700CA69B2 /* brute.cpp */, + A14735AC21A65F1600CA69B2 /* kd_dump.cpp */, + A14735AE21A65F1700CA69B2 /* kd_fix_rad_search.cpp */, + A14735B021A65F1700CA69B2 /* kd_fix_rad_search.h */, + A14735B121A65F1700CA69B2 /* perf.cpp */, + A4ED7D4E2097F113008685D6 /* kd_pr_search.cpp */, + A4ED7D4A2097F113008685D6 /* kd_pr_search.h */, + A4ED7D502097F114008685D6 /* kd_search.cpp */, + A4ED7D492097F113008685D6 /* kd_search.h */, + A4ED7D522097F114008685D6 /* kd_split.cpp */, + A4ED7D532097F114008685D6 /* kd_split.h */, + A4ED7D482097F113008685D6 /* kd_tree.h */, + A4ED7D512097F114008685D6 /* kd_util.cpp */, + A4ED7D4B2097F113008685D6 /* kd_util.h */, + A4ED7D4D2097F113008685D6 /* pr_queue_k.h */, + A4ED7D4F2097F113008685D6 /* pr_queue.h */, + A4ED7D462097EDE9008685D6 /* kd_tree.cpp */, + A4ED7D412097EC54008685D6 /* ANN.cpp */, + ); + path = kNN; + sourceTree = ""; + }; + A4F733C82416B75600AEDCFE /* loess */ = { + isa = PBXGroup; + children = ( + A46099A72416E562000A53E2 /* misc.c */, + A460999B2416E41B000A53E2 /* linpack_lite.c */, + A460999C2416E41B000A53E2 /* loess.c */, + A46099A02416E41B000A53E2 /* loess.h */, + A460999E2416E41B000A53E2 /* loessc.c */, + A46099A12416E41B000A53E2 /* loessf.c */, + A460999F2416E41B000A53E2 /* predict.c */, + A460999D2416E41B000A53E2 /* S.h */, + ); + name = loess; + sourceTree = ""; + }; DD7686D41A9FF446009EFC6D /* libgdiam */ = { isa = PBXGroup; children = ( @@ -722,9 +1193,16 @@ DD7974650F1D1B0700496A84 /* ../../ */ = { isa = PBXGroup; children = ( - A1546D171F5B52B0002FC3DF /* Algorithms */, + A14735A721A5F6CE00CA69B2 /* Weights */, + A19483772118BA8B009A87A2 /* ogl */, + A4ED7D3F2097EC0F008685D6 /* kNN */, + A4CFF027207D6D7500E2E6DE /* internationalization */, + A47614AC20759E6100D9F3BE /* io */, + A45DBDEF1EDDDD2600C2AA8A /* Algorithms */, + A45DBDF61EDDEDC400C2AA8A /* _SampleImages */, + A45DBDF71EDDEDDA00C2AA8A /* _InternalData */, + A4D9A31E1E4D5F3800EF584C /* gdaldata */, A1B04ADC1B1921710045AA6F /* basemap_cache */, - DD972054150A6EE4000206F4 /* CmdLineUtils */, DDDFB96D134B6B73005EF636 /* DataViewer */, DD7974FE0F1D296F00496A84 /* DialogTools */, DD7975B70F1D2A9000496A84 /* Explore */, @@ -734,17 +1212,12 @@ DD7976950F1D2CA800496A84 /* Regression */, DD7976E10F1D2D3100496A84 /* ShapeOperations */, DDEA3CB6193CEE250028B746 /* VarCalc */, - A1F1BA98178D46B8005A46E5 /* cache.sqlite */, - DD2EB10019E6EFC50073E36F /* geoda_prefs.json */, - DD45117019E5F65E006C5DAA /* geoda_prefs.sqlite */, DDBDFE6119E73E07004CCEDA /* web_plugins */, A19F514D1756A11E006E31B4 /* plugins */, - DDCFA9941A96790100747EB7 /* DbfFile.cpp */, - DDCFA9951A96790100747EB7 /* DbfFile.h */, + A41C2BB92404470C00C341A2 /* GenColor.h */, + A41C2BBA2404471D00C341A2 /* GenColor.cpp */, DD3BA4471871EE9A00CA4152 /* DefaultVarsPtree.h */, DD3BA4461871EE9A00CA4152 /* DefaultVarsPtree.cpp */, - A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */, - A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */, DD9C1B361910267900C0A427 /* GdaConst.h */, DD9C1B351910267900C0A427 /* GdaConst.cpp */, A171FBFE1792332A000DD5A0 /* GdaException.h */, @@ -752,8 +1225,12 @@ DD2AE42919D4F4CA00B23FB9 /* GdaJson.cpp */, DDE4DFD41A963B07005B9158 /* GdaShape.cpp */, DDE4DFD51A963B07005B9158 /* GdaShape.h */, + A186F09F1C16508A00AEBA13 /* GdaCartoDB.cpp */, + A186F0A01C16508A00AEBA13 /* GdaCartoDB.h */, DD64A2870F20FE06006B1E6D /* GeneralWxUtils.h */, DD64A2860F20FE06006B1E6D /* GeneralWxUtils.cpp */, + A4A6AD7A207F198E00D29677 /* ShpFile.cpp */, + A4A6AD79207F198D00D29677 /* ShpFile.h */, DD64925B16DFF63400B3B0AB /* GeoDa.h */, DD64925A16DFF63400B3B0AB /* GeoDa.cpp */, DDD13F040F2F8BE1009F7F13 /* GenGeomAlgs.h */, @@ -763,14 +1240,13 @@ DDFFC7EC1AC1C7CF00F7DD6D /* HighlightState.cpp */, DDFFC7ED1AC1C7CF00F7DD6D /* HighlightState.h */, DDFFC7EE1AC1C7CF00F7DD6D /* HighlightStateObserver.h */, + A1894C41213F806700718FFC /* MapLayerStateObserver.h */, DDFFC7EF1AC1C7CF00F7DD6D /* HLStateInt.h */, DDFFC7F01AC1C7CF00F7DD6D /* Observable.h */, DDFFC7F11AC1C7CF00F7DD6D /* Observer.h */, DD64A5540F291027006B1E6D /* logger.h */, DD64A5570F2910D2006B1E6D /* logger.cpp */, DD64A5760F2911A4006B1E6D /* nullstream.h */, - DDE4DFE71A96411A005B9158 /* ShpFile.cpp */, - DDE4DFE81A96411A005B9158 /* ShpFile.h */, DD72C1971AAE95480000420B /* SpatialIndAlgs.cpp */, DD72C1981AAE95480000420B /* SpatialIndAlgs.h */, DD72C1991AAE95480000420B /* SpatialIndTypes.h */, @@ -794,6 +1270,8 @@ DD409E4A19FFD43000C21A2B /* VarTools.cpp */, DD409E4B19FFD43000C21A2B /* VarTools.h */, DD84139218B24BF2007C39CF /* version.h */, + A4404A00208E65DC0007753D /* wxTranslationHelper.cpp */, + A4404A01208E65DD0007753D /* wxTranslationHelper.h */, ); path = ../../; sourceTree = ""; @@ -809,40 +1287,72 @@ DD7974FE0F1D296F00496A84 /* DialogTools */ = { isa = PBXGroup; children = ( - A1546D2A1F5B53A7002FC3DF /* AbstractClusterDlg.cpp */, - A1546D2B1F5B53A7002FC3DF /* AbstractClusterDlg.h */, - A1546D2C1F5B53A7002FC3DF /* HClusterDlg.cpp */, - A1546D2D1F5B53A7002FC3DF /* HClusterDlg.h */, - A1546D2E1F5B53A7002FC3DF /* KMeansDlg.cpp */, - A1546D2F1F5B53A7002FC3DF /* KMeansDlg.h */, - A1546D301F5B53A7002FC3DF /* MaxpDlg.cpp */, - A1546D311F5B53A7002FC3DF /* MaxpDlg.h */, - A1546D321F5B53A7002FC3DF /* MDSDlg.cpp */, - A1546D331F5B53A7002FC3DF /* MDSDlg.h */, - A1546D341F5B53A7002FC3DF /* RedcapDlg.cpp */, - A1546D351F5B53A7002FC3DF /* RedcapDlg.h */, - A1546D361F5B53A7002FC3DF /* SpectralClusteringDlg.cpp */, - A1546D371F5B53A7002FC3DF /* SpectralClusteringDlg.h */, - A15609161E52442C009F4178 /* ReportBugDlg.cpp */, - A15609171E52442C009F4178 /* ReportBugDlg.h */, - A16D406C1CD4233A0025C64C /* AutoUpdateDlg.cpp */, - A1D766D71D7A2195002365D6 /* CsvFieldConfDlg.cpp */, - A1D766D81D7A2196002365D6 /* CsvFieldConfDlg.h */, - A16D406D1CD4233A0025C64C /* AutoUpdateDlg.h */, - A14CB46C1C86705B0082B436 /* PublishDlg.cpp */, - A14CB46D1C86705B0082B436 /* PublishDlg.h */, - A14CB4611C866E110082B436 /* AdjustYAxisDlg.cpp */, - A14CB4621C866E110082B436 /* AdjustYAxisDlg.h */, - A14CB4631C866E110082B436 /* BasemapConfDlg.cpp */, - A14CB4641C866E110082B436 /* BasemapConfDlg.h */, + A4CFBCBA250BE8E800246D81 /* MultiQuantileLisaDlg.cpp */, + A4CFBCB9250BE8E700246D81 /* MultiQuantileLisaDlg.h */, + A4CFBCB7250AE02C00246D81 /* quantileLisaDlg.cpp */, + A4CFBCB6250AE02B00246D81 /* quantileLisaDlg.h */, + A499564724FED58300BB5CB1 /* AZPDlg.cpp */, + A499564824FED58300BB5CB1 /* AZPDlg.h */, + A4502B3724E1F67C001D378F /* SCHCDlg.cpp */, + A4502B3624E1F67C001D378F /* SCHCDlg.h */, + A4A591F924ABB80800BEA1FF /* DBScanDlg.cpp */, + A4A591F824ABB80800BEA1FF /* DBScanDlg.h */, + A41C2BAF2400442300C341A2 /* nbrMatchDlg.cpp */, + A41C2BB22400442400C341A2 /* nbrMatchDlg.h */, + A41C2BB12400442400C341A2 /* tSNEDlg.cpp */, + A41C2BB02400442400C341A2 /* tSNEDlg.h */, + A178F777227773C500EB9CB7 /* GdaChoice.cpp */, + A178F778227773C500EB9CB7 /* GdaChoice.h */, + A178F774227772FC00EB9CB7 /* GdaListBox.cpp */, + A178F775227772FC00EB9CB7 /* GdaListBox.h */, + A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */, + A178F771227381CA00EB9CB7 /* DissolveDlg.h */, + A11EF98D21ED569A00B77413 /* MultiVarSettingsDlg.cpp */, + A11EF98C21ED569A00B77413 /* MultiVarSettingsDlg.h */, + A4ED7D59209A6B81008685D6 /* HDBScanDlg.cpp */, + A4ED7D5A209A6B81008685D6 /* HDBScanDlg.h */, + A40A6A7D20226B3B003CDD79 /* PreferenceDlg.cpp */, + A40A6A7C20226B3B003CDD79 /* PreferenceDlg.h */, + A42018041FB4CF980029709C /* SkaterDlg.h */, + A42018051FB4CF980029709C /* SkaterDlg.cpp */, + A416A1751F84122B001F2884 /* PCASettingsDlg.cpp */, + A416A1761F84122B001F2884 /* PCASettingsDlg.h */, + A42B6F761F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.cpp */, + A42B6F771F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.h */, + A4E5FE171F624D5600D75662 /* AggregateDlg.cpp */, + A4E5FE181F624D5600D75662 /* AggregateDlg.h */, + A4F5D6201F513EA1007ADF25 /* MDSDlg.cpp */, + A4F5D6211F513EA1007ADF25 /* MDSDlg.h */, + A4F5D61D1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp */, + A4F5D61E1F4EA0D2007ADF25 /* AbstractClusterDlg.h */, + A4320FC61F4735020007BE0D /* RedcapDlg.cpp */, + A4320FC71F4735020007BE0D /* RedcapDlg.h */, + A43D12501F20AE450073D408 /* SpectralClusteringDlg.h */, + A43D12511F20AE450073D408 /* SpectralClusteringDlg.cpp */, + A43D124A1F1DE1D80073D408 /* MaxpDlg.cpp */, + A43D124B1F1DE1D80073D408 /* MaxpDlg.h */, + A49F56DB1E956FCC000309CE /* HClusterDlg.cpp */, + A49F56DC1E956FCC000309CE /* HClusterDlg.h */, + A4F875751E94123F0079734E /* KMeansDlg.cpp */, + A4F875761E94123F0079734E /* KMeansDlg.h */, + A1E5BC831DBFE661005739E9 /* ReportBugDlg.cpp */, + A1E5BC821DBFE661005739E9 /* ReportBugDlg.h */, + A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */, + A14C496E1D76174000D9831C /* CsvFieldConfDlg.h */, + A1EBC88D1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp */, + A1EBC88E1CD2B2FD001DCFE9 /* AutoUpdateDlg.h */, + A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */, + A1AC05BE1C8645F300B6FE5F /* AdjustYAxisDlg.h */, + A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */, + A1B13EE11C3EDFF90064AD87 /* BasemapConfDlg.h */, + A1CE3D311C1A427A0010F170 /* PublishDlg.cpp */, + A1CE3D321C1A427A0010F170 /* PublishDlg.h */, DDEA3CFF193D17130028B746 /* CalculatorDlg.cpp */, DDEA3D00193D17130028B746 /* CalculatorDlg.h */, DD7974FF0F1D296F00496A84 /* 3DControlPan.cpp */, DD7975000F1D296F00496A84 /* 3DControlPan.h */, DDB0E42A10B34DBB00F96D57 /* AddIdVariable.cpp */, DDB0E42B10B34DBB00F96D57 /* AddIdVariable.h */, - DD7975090F1D296F00496A84 /* ASC2SHPDlg.cpp */, - DD79750A0F1D296F00496A84 /* ASC2SHPDlg.h */, A1DA623817BCBC070070CAAB /* AutoCompTextCtrl.cpp */, A1DA623917BCBC070070CAAB /* AutoCompTextCtrl.h */, DD79750B0F1D296F00496A84 /* Bnd2ShpDlg.cpp */, @@ -905,16 +1415,14 @@ DD7975440F1D296F00496A84 /* RegressionDlg.h */, DD7975470F1D296F00496A84 /* RegressionReportDlg.cpp */, DD7975480F1D296F00496A84 /* RegressionReportDlg.h */, - A13B6B9218760CF100F93ACF /* SaveAsDlg.h */, A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */, + A13B6B9218760CF100F93ACF /* SaveAsDlg.h */, DD181BC613A90445004B0EC2 /* SaveToTableDlg.cpp */, DD181BC713A90445004B0EC2 /* SaveToTableDlg.h */, DD7975550F1D296F00496A84 /* SaveSelectionDlg.cpp */, DD7975560F1D296F00496A84 /* SaveSelectionDlg.h */, DD4DED10197E16FF00FE29E8 /* SelectWeightsDlg.cpp */, DD4DED11197E16FF00FE29E8 /* SelectWeightsDlg.h */, - DD7975590F1D296F00496A84 /* SHP2ASCDlg.cpp */, - DD79755A0F1D296F00496A84 /* SHP2ASCDlg.h */, DD6456C814881EA700AABF59 /* TimeChooserDlg.h */, DD6456C714881EA700AABF59 /* TimeChooserDlg.cpp */, DD92D22217BAAF2300F8FE01 /* TimeEditorDlg.h */, @@ -927,6 +1435,8 @@ DD3082B119F709BB001E5E89 /* WebViewHelpWin.cpp */, DD8183C71970619800228B0A /* WeightsManDlg.h */, DD8183C61970619800228B0A /* WeightsManDlg.cpp */, + A1894C3D213F29DC00718FFC /* SpatialJoinDlg.cpp */, + A1894C3E213F29DC00718FFC /* SpatialJoinDlg.h */, ); path = DialogTools; sourceTree = ""; @@ -934,8 +1444,38 @@ DD7975B70F1D2A9000496A84 /* Explore */ = { isa = PBXGroup; children = ( - A15609191E524445009F4178 /* ConditionalClusterMapView.cpp */, - A156091A1E524445009F4178 /* ConditionalClusterMapView.h */, + A4502B3324E1F66F001D378F /* MapViewHelper.cpp */, + A4502B3424E1F66F001D378F /* MapViewHelper.h */, + A4A591F324A515D900BEA1FF /* ConditionalBoxPlotView.cpp */, + A4A591F224A515D900BEA1FF /* ConditionalBoxPlotView.h */, + A45CFF042453A515001F00B9 /* AnimatePlotCanvas.cpp */, + A45CFF072453A516001F00B9 /* AnimatePlotCanvas.h */, + A45CFF062453A516001F00B9 /* wxGLString.cpp */, + A45CFF052453A516001F00B9 /* wxGLString.h */, + A43F343A2412C8280096E33B /* LoessPlotCanvas.cpp */, + A43F343B2412C8280096E33B /* LoessPlotCanvas.h */, + A41C2BB52400442F00C341A2 /* DistancePlotView.cpp */, + A41C2BB62400442F00C341A2 /* DistancePlotView.h */, + A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */, + A4C76B0C225BC4BA00A0729A /* GroupingMapView.h */, + A4596B502033DDFF00C9BCC8 /* AbstractClusterMap.cpp */, + A4596B4F2033DDFF00C9BCC8 /* AbstractClusterMap.h */, + A4596B4D2033DB8E00C9BCC8 /* AbstractCoordinator.cpp */, + A4596B4C2033D8F600C9BCC8 /* AbstractCoordinator.h */, + A4C4ABF91F97DA2D00085D47 /* MLJCMapNewView.cpp */, + A4C4ABFA1F97DA2D00085D47 /* MLJCMapNewView.h */, + A47FC9DC1F74E31800BEFBF2 /* MLJCCoordinatorObserver.h */, + A47FC9D91F74DE1600BEFBF2 /* MLJCCoordinator.cpp */, + A47FC9DA1F74DE1600BEFBF2 /* MLJCCoordinator.h */, + A4A763F21F69FB3B00EE79DD /* ColocationMapView.cpp */, + A4A763F31F69FB3B00EE79DD /* ColocationMapView.h */, + A43D31561E845C3D007488D9 /* LocalGearyMapNewView.cpp */, + A43D31571E845C3D007488D9 /* LocalGearyMapNewView.h */, + A43D31551E845A0C007488D9 /* LocalGearyCoordinatorObserver.h */, + A43D31521E845985007488D9 /* LocalGearyCoordinator.cpp */, + A43D31531E845985007488D9 /* LocalGearyCoordinator.h */, + A48356B91E456310002791C8 /* ConditionalClusterMapView.cpp */, + A48356BA1E456310002791C8 /* ConditionalClusterMapView.h */, DD7975B80F1D2A9000496A84 /* 3DPlotView.cpp */, DD7975B90F1D2A9000496A84 /* 3DPlotView.h */, DD2B42AF1522552B00888E51 /* BoxNewPlotView.cpp */, @@ -1002,8 +1542,6 @@ DD3079C419ED9F61001E5E89 /* LowessParamObservable.cpp */, DD3079C519ED9F61001E5E89 /* LowessParamObservable.h */, DD3079C619ED9F61001E5E89 /* LowessParamObserver.h */, - DD203F9B14C0C960006A731B /* MapNewView.cpp */, - DD203F9C14C0C960006A731B /* MapNewView.h */, DD2B43401522A95100888E51 /* PCPNewView.cpp */, DD2B43411522A95100888E51 /* PCPNewView.h */, DD409DFA19FF099E00C21A2B /* ScatterPlotMatView.h */, @@ -1029,6 +1567,14 @@ DD8183C1197054CA00228B0A /* WeightsMapCanvas.cpp */, A11B85BA1B18DC89008B64EA /* Basemap.h */, A11B85BB1B18DC9C008B64EA /* Basemap.cpp */, + DD203F9B14C0C960006A731B /* MapNewView.cpp */, + DD203F9C14C0C960006A731B /* MapNewView.h */, + A19483A02118BE8E009A87A2 /* MapLayoutView.cpp */, + A19483A12118BE8F009A87A2 /* MapLayoutView.h */, + A1230E602130E783002AB30A /* MapLayer.cpp */, + A1230E612130E783002AB30A /* MapLayer.hpp */, + A1230E632130E81A002AB30A /* MapLayerTree.cpp */, + A1230E642130E81A002AB30A /* MapLayerTree.hpp */, ); path = Explore; sourceTree = ""; @@ -1087,16 +1633,8 @@ DD7976E10F1D2D3100496A84 /* ShapeOperations */ = { isa = PBXGroup; children = ( - DDD140520F310324009F7F13 /* AbstractShape.h */, - DDD140530F310324009F7F13 /* AbstractShape.cpp */, - DDD13F910F2FD641009F7F13 /* BasePoint.h */, - DDD13F920F2FD641009F7F13 /* BasePoint.cpp */, - DDD13FA90F30B2E4009F7F13 /* Box.h */, - DDD13FAA0F30B2E4009F7F13 /* Box.cpp */, DDC9DD8815937B2F00A0E5BA /* CsvFileUtils.cpp */, DDC9DD8915937B2F00A0E5BA /* CsvFileUtils.h */, - DD64A6AB0F2A7A81006B1E6D /* DBF.h */, - DD64A6AC0F2A7A81006B1E6D /* DBF.cpp */, DD579B68160BDAFE00BF8D53 /* DorlingCartogram.cpp */, DD579B69160BDAFE00BF8D53 /* DorlingCartogram.h */, A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */, @@ -1123,17 +1661,6 @@ DD694684130307C00072386B /* RateSmoothing.cpp */, DD9373F51AC1FEAA0066AF21 /* PolysToContigWeights.cpp */, DD9373F61AC1FEAA0066AF21 /* PolysToContigWeights.h */, - DD27EF030F2F6CBE009C5C42 /* ShapeFile.h */, - DD27EF040F2F6CBE009C5C42 /* ShapeFile.cpp */, - DD5FA1D80F320DD50055A0E5 /* ShapeFileHdr.h */, - DD5FA1D90F320DD50055A0E5 /* ShapeFileHdr.cpp */, - DDD13F6D0F2FC802009F7F13 /* ShapeFileTriplet.h */, - DDD13F6E0F2FC802009F7F13 /* ShapeFileTriplet.cpp */, - DDD13F720F2FCEE8009F7F13 /* ShapeFileTypes.h */, - DDDC11EB1159783700E515BB /* ShapeUtils.cpp */, - DDDC11EC1159783700E515BB /* ShapeUtils.h */, - DD9373B41AC1F99D0066AF21 /* SimplePoint.cpp */, - DD9373B51AC1F99D0066AF21 /* SimplePoint.h */, DD307DB719F0483B001E5E89 /* SmoothingUtils.cpp */, DD307DB819F0483B001E5E89 /* SmoothingUtils.h */, DDD593AE12E9F42100F7A7C4 /* WeightsManager.h */, @@ -1151,27 +1678,9 @@ path = ShapeOperations; sourceTree = ""; }; - DD972054150A6EE4000206F4 /* CmdLineUtils */ = { - isa = PBXGroup; - children = ( - DD972055150A6F17000206F4 /* sp_tm_conv */, - ); - name = CmdLineUtils; - sourceTree = ""; - }; - DD972055150A6F17000206F4 /* sp_tm_conv */ = { - isa = PBXGroup; - children = ( - DD972056150A6F44000206F4 /* sp_tm_conv.cpp */, - ); - name = sp_tm_conv; - sourceTree = ""; - }; DDDFB96D134B6B73005EF636 /* DataViewer */ = { isa = PBXGroup; children = ( - DD8DCE0C19C0FD8F00E62C3D /* DataChangeType.cpp */, - DD8DCE0D19C0FD8F00E62C3D /* DataChangeType.h */, A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */, A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */, DD2A6FDE178C7F7C00197093 /* DataSource.cpp */, @@ -1184,10 +1693,6 @@ DDF85D1713B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.h */, DDA73B7E13672821003783BC /* DataViewerResizeColDlg.cpp */, DDA73B7F13672821003783BC /* DataViewerResizeColDlg.h */, - DDFE0E0717502E810099FFEC /* DbfColContainer.h */, - DDFE0E0817502E810099FFEC /* DbfColContainer.cpp */, - DD497478176F59670007BB9F /* DbfTable.h */, - DD497479176F59670007BB9F /* DbfTable.cpp */, DDB252B213BBFD6700A7CE26 /* MergeTableDlg.cpp */, DDB252B313BBFD6700A7CE26 /* MergeTableDlg.h */, A1E77FDB17889BE200CC1037 /* OGRTable.h */, @@ -1249,7 +1754,7 @@ DD79747D0F1D1B6600496A84 /* Resources */, DD79747E0F1D1B6600496A84 /* Sources */, DD79747F0F1D1B6600496A84 /* Frameworks */, - DD2EB0FF19E6EF940073E36F /* CopyFiles */, + A12007F623749AC200CBA5B1 /* CopyFiles */, ); buildRules = ( ); @@ -1267,17 +1772,24 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 0510; + LastUpgradeCheck = 1120; + TargetAttributes = { + DD7974800F1D1B6600496A84 = { + DevelopmentTeam = 3VRCAMAT4L; + ProvisioningStyle = Automatic; + }; + }; }; - buildConfigurationList = DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa-leopard" */; + buildConfigurationList = DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa.new" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, - Japanese, - French, - German, + en, + ja, + Base, + de, + fr, ); mainGroup = DD7974650F1D1B0700496A84 /* ../../ */; productRefGroup = DD7974820F1D1B6600496A84 /* Products */; @@ -1294,9 +1806,34 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + A12007EF237497E400CBA5B1 /* data_viewer_dialogs.xrc in Resources */, + A12007F0237497E400CBA5B1 /* dialogs.xrc in Resources */, + A12007F1237497E400CBA5B1 /* toolbar.xrc in Resources */, + A12007F2237497E400CBA5B1 /* menus.xrc in Resources */, DD5A579716E53EC40047DBB1 /* GeoDa.icns in Resources */, + A4D9A31F1E4D5F3800EF584C /* gdaldata in Resources */, A19F51501756A11E006E31B4 /* plugins in Resources */, - DDBDFE6A19E73E07004CCEDA /* web_plugins in Resources */, + A4404A05208E9E390007753D /* lang in Resources */, + A496C99E1E6A184C008F87DD /* samples.sqlite in Resources */, + A496C9A81E6A43C0008F87DD /* BaltimoreHomeSales.png in Resources */, + A496C9AA1E6A43CC008F87DD /* BostonHomeSales.png in Resources */, + A496C9AC1E6A43D0008F87DD /* BuenosAiresElections.png in Resources */, + A496C9AE1E6A43D6008F87DD /* ColombiaMalaria.png in Resources */, + A496C9B01E6A43DA008F87DD /* ColumbusCrime.png in Resources */, + A496C9B21E6A43E5008F87DD /* Milwaukee2000Census.png in Resources */, + A1230E5F212DF54D002AB30A /* switch-off.png in Resources */, + A496C9B41E6A43E8008F87DD /* NAT.png in Resources */, + A496C9B61E6A43EE008F87DD /* NepalAid.png in Resources */, + A496C9B91E6A43FA008F87DD /* no_map.png in Resources */, + A496C9BB1E6A43FE008F87DD /* NYCData.png in Resources */, + A496C9BD1E6A4402008F87DD /* PhoenixACS.png in Resources */, + A496C9BF1E6A4405008F87DD /* SanFranCrime.png in Resources */, + A496C9C11E6A440A008F87DD /* SIDSNC.png in Resources */, + A496C9C51E6A441D008F87DD /* watermark-20.png in Resources */, + A4404A0F209270FB0007753D /* pofiles in Resources */, + A496C9C31E6A4417008F87DD /* USHomicides.png in Resources */, + A1230E5E212DF54D002AB30A /* switch-on.png in Resources */, + A4DB2CBC1EEA3A3E00BD4A54 /* Guerry.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1307,166 +1844,249 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A4502B3824E1F67C001D378F /* SCHCDlg.cpp in Sources */, DD7974C80F1D250A00496A84 /* TemplateCanvas.cpp in Sources */, + A4ED7D5B209A6B81008685D6 /* HDBScanDlg.cpp in Sources */, A1EF332F18E35D8300E19375 /* LocaleSetupDlg.cpp in Sources */, DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */, - DD79756C0F1D296F00496A84 /* ASC2SHPDlg.cpp in Sources */, + A43D124C1F1DE1D80073D408 /* MaxpDlg.cpp in Sources */, + A4502B3524E1F66F001D378F /* MapViewHelper.cpp in Sources */, DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */, + A4F875771E94123F0079734E /* KMeansDlg.cpp in Sources */, DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */, DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */, DD79757C0F1D296F00496A84 /* HistIntervalDlg.cpp in Sources */, DD79757F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp in Sources */, + A19483942118BAAA009A87A2 /* divided.cpp in Sources */, + A4D5423D1F45037B00572878 /* redcap.cpp in Sources */, DD7975820F1D296F00496A84 /* PCPDlg.cpp in Sources */, + A46099A22416E41B000A53E2 /* linpack_lite.c in Sources */, DD7975830F1D296F00496A84 /* PermutationCounterDlg.cpp in Sources */, DD7975850F1D296F00496A84 /* RandomizationDlg.cpp in Sources */, DD7975890F1D296F00496A84 /* RegressionDlg.cpp in Sources */, + A40A6A7E20226B3C003CDD79 /* PreferenceDlg.cpp in Sources */, DD79758B0F1D296F00496A84 /* RegressionReportDlg.cpp in Sources */, + A4ED7D442097EC55008685D6 /* ANN.cpp in Sources */, A1C9F3ED18B55EE000E14394 /* FieldNameCorrectionDlg.cpp in Sources */, + A43D31581E845C3D007488D9 /* LocalGearyMapNewView.cpp in Sources */, + A11EF98E21ED569A00B77413 /* MultiVarSettingsDlg.cpp in Sources */, DD7975920F1D296F00496A84 /* SaveSelectionDlg.cpp in Sources */, - DD7975940F1D296F00496A84 /* SHP2ASCDlg.cpp in Sources */, + A194839D2118BAAA009A87A2 /* drawn.cpp in Sources */, DD7975980F1D296F00496A84 /* VariableSettingsDlg.cpp in Sources */, DD7975D20F1D2A9000496A84 /* 3DPlotView.cpp in Sources */, + A42018061FB4CF980029709C /* SkaterDlg.cpp in Sources */, DD7975D60F1D2A9000496A84 /* Geom3D.cpp in Sources */, + A432E84720A672EB007B8B25 /* distmatrix.cpp in Sources */, DD7976B80F1D2CA800496A84 /* DenseMatrix.cpp in Sources */, + A48814EB20A50B0F005490A7 /* fastcluster.cpp in Sources */, DD7976B90F1D2CA800496A84 /* DenseVector.cpp in Sources */, + A4F5D6221F513EA1007ADF25 /* MDSDlg.cpp in Sources */, DD7976BA0F1D2CA800496A84 /* DiagnosticReport.cpp in Sources */, DD7976BC0F1D2CA800496A84 /* mix.cpp in Sources */, + A47F792420AA084B000AFE57 /* distmat_kernel.cl in Sources */, + A19483972118BAAA009A87A2 /* bmpshape.cpp in Sources */, DD7976BD0F1D2CA800496A84 /* ML_im.cpp in Sources */, DD7976BE0F1D2CA800496A84 /* PowerLag.cpp in Sources */, + A414C88B207BED2700520546 /* MatfileReader.cpp in Sources */, + A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */, DD7976BF0F1D2CA800496A84 /* PowerSymLag.cpp in Sources */, DD7976C10F1D2CA800496A84 /* smile2.cpp in Sources */, DD7976C20F1D2CA800496A84 /* SparseMatrix.cpp in Sources */, DD7976C30F1D2CA800496A84 /* SparseRow.cpp in Sources */, + A47F792220AA082A000AFE57 /* lisa_kernel.cl in Sources */, + A4A591F424A515DA00BEA1FF /* ConditionalBoxPlotView.cpp in Sources */, DD7976C40F1D2CA800496A84 /* SparseVector.cpp in Sources */, DD7976C50F1D2CA800496A84 /* Weights.cpp in Sources */, + A4BBABA12444D82B00BD4E57 /* smacof.c in Sources */, DD7976F30F1D2D3100496A84 /* Randik.cpp in Sources */, + A46099A62416E41B000A53E2 /* loessf.c in Sources */, DD64A2880F20FE06006B1E6D /* GeneralWxUtils.cpp in Sources */, + A438249A24775CB90001497D /* pam.cpp in Sources */, DD64A5580F2910D2006B1E6D /* logger.cpp in Sources */, - DD64A6AD0F2A7A81006B1E6D /* DBF.cpp in Sources */, DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */, - DD27EF050F2F6CBE009C5C42 /* ShapeFile.cpp in Sources */, DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */, - DDD13F6F0F2FC802009F7F13 /* ShapeFileTriplet.cpp in Sources */, + A42018031FB3C0AC0029709C /* skater.cpp in Sources */, + A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */, A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */, - DDD13F930F2FD641009F7F13 /* BasePoint.cpp in Sources */, - DDD13FAB0F30B2E4009F7F13 /* Box.cpp in Sources */, - DDD140540F310324009F7F13 /* AbstractShape.cpp in Sources */, - DD5FA1DA0F320DD50055A0E5 /* ShapeFileHdr.cpp in Sources */, + A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */, + A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */, DDB0E42C10B34DBB00F96D57 /* AddIdVariable.cpp in Sources */, + A194839E2118BAAA009A87A2 /* ogldiag.cpp in Sources */, + A1894C3F213F29DC00718FFC /* SpatialJoinDlg.cpp in Sources */, DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */, DDAA6540117F9B5D00D1010C /* Project.cpp in Sources */, DDB37A0811CBBB730020C8A9 /* TemplateLegend.cpp in Sources */, DD115EA312BBDDA000E1CC73 /* ProgressDlg.cpp in Sources */, DDD593AC12E9F34C00F7A7C4 /* GeodaWeight.cpp in Sources */, + A46099A52416E41B000A53E2 /* predict.c in Sources */, + A41C2BB32400442400C341A2 /* nbrMatchDlg.cpp in Sources */, DDD593B012E9F42100F7A7C4 /* WeightsManager.cpp in Sources */, + A194839C2118BAAA009A87A2 /* mfutils.cpp in Sources */, + A4A591FA24ABB80900BEA1FF /* DBScanDlg.cpp in Sources */, + A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */, + A194839A2118BAAA009A87A2 /* lines.cpp in Sources */, DDD593C712E9F90000F7A7C4 /* GalWeight.cpp in Sources */, + A4C76B0E225BC4BB00A0729A /* GroupingMapView.cpp in Sources */, DDD593CA12E9F90C00F7A7C4 /* GwtWeight.cpp in Sources */, DD694685130307C00072386B /* RateSmoothing.cpp in Sources */, + A4E00F1020FD8ECD0038BA80 /* localjc_kernel.cl in Sources */, DDF14CDA139432B000363FA1 /* DataViewerDeleteColDlg.cpp in Sources */, + A1E5BC841DBFE661005739E9 /* ReportBugDlg.cpp in Sources */, DDF14CDC139432C100363FA1 /* DataViewerResizeColDlg.cpp in Sources */, DDF14CDD139432CB00363FA1 /* DataViewerAddColDlg.cpp in Sources */, DDB77C0D139820CB00569A1E /* GStatCoordinator.cpp in Sources */, - A15609181E52442C009F4178 /* ReportBugDlg.cpp in Sources */, DD209598139F129900B9E648 /* GetisOrdChoiceDlg.cpp in Sources */, DD181BC813A90445004B0EC2 /* SaveToTableDlg.cpp in Sources */, + A1230E652130E81A002AB30A /* MapLayerTree.cpp in Sources */, + A45DBDFA1EDDEE4D00C2AA8A /* maxp.cpp in Sources */, DDF85D1813B257B6006C1B08 /* DataViewerEditFieldPropertiesDlg.cpp in Sources */, + A41C2BAE2400441500C341A2 /* splittree.cpp in Sources */, DDB252B513BBFD6700A7CE26 /* MergeTableDlg.cpp in Sources */, DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */, DD89C87413D86BC7006C068D /* FieldNewCalcBinDlg.cpp in Sources */, DD89C87513D86BC7006C068D /* FieldNewCalcLagDlg.cpp in Sources */, + A45DBDF41EDDEDAD00C2AA8A /* pca.cpp in Sources */, DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */, DD89C87713D86BC7006C068D /* FieldNewCalcSheetDlg.cpp in Sources */, DD89C87813D86BC7006C068D /* FieldNewCalcUniDlg.cpp in Sources */, DDB77F3E140D3CEF0032C7E4 /* FieldNewCalcSpecialDlg.cpp in Sources */, DD6B7289141A61400026D223 /* FramesManager.cpp in Sources */, + A416A1771F84122B001F2884 /* PCASettingsDlg.cpp in Sources */, DD7D5C711427F89B00DCFE5C /* LisaCoordinator.cpp in Sources */, + A4A763F41F69FB3B00EE79DD /* ColocationMapView.cpp in Sources */, A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */, DDA8D55214479228008156FB /* ScatterNewPlotView.cpp in Sources */, - DDA8D5681447948B008156FB /* ShapeUtils.cpp in Sources */, DD6456CA14881EA700AABF59 /* TimeChooserDlg.cpp in Sources */, DD203F9D14C0C960006A731B /* MapNewView.cpp in Sources */, DDF1636B15064B7800E3E6BD /* LisaMapNewView.cpp in Sources */, DDF1637015064C2900E3E6BD /* GetisOrdMapNewView.cpp in Sources */, DD7E91D3151A8F3A001AAC4C /* LisaScatterPlotView.cpp in Sources */, DD2B42B11522552B00888E51 /* BoxNewPlotView.cpp in Sources */, + A41C2BB42400442400C341A2 /* tSNEDlg.cpp in Sources */, DD2B433F1522A93700888E51 /* HistogramView.cpp in Sources */, DD2B43421522A95100888E51 /* PCPNewView.cpp in Sources */, + A19483952118BAAA009A87A2 /* constrnt.cpp in Sources */, DDC9DD8515937AA000A0E5BA /* ExportCsvDlg.cpp in Sources */, DDC9DD8A15937B2F00A0E5BA /* CsvFileUtils.cpp in Sources */, DDC9DD9C15937C0200A0E5BA /* ImportCsvDlg.cpp in Sources */, + A14735B721A65F1800CA69B2 /* bd_fix_rad_search.cpp in Sources */, DD75A04115E81AF9008A7F8C /* VoronoiUtils.cpp in Sources */, DDB2A75F15FA7DA900022ABE /* CartogramNewView.cpp in Sources */, A11F1B821850437A006F5F98 /* OGRTableOperation.cpp in Sources */, DD579B6A160BDAFE00BF8D53 /* DorlingCartogram.cpp in Sources */, + A46099A42416E41B000A53E2 /* loessc.c in Sources */, DDAD0218162754EA00748874 /* ConditionalNewView.cpp in Sources */, DDDBF286163AD1D50070610C /* ConditionalMapView.cpp in Sources */, DDDBF29B163AD2BF0070610C /* ConditionalScatterPlotView.cpp in Sources */, A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */, + A43D12521F20AE450073D408 /* SpectralClusteringDlg.cpp in Sources */, DDDBF2AE163AD3AB0070610C /* ConditionalHistogramView.cpp in Sources */, DD4E8B86164818A70014F1E7 /* ConnectivityHistView.cpp in Sources */, + A4F5D61F1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp in Sources */, DD8FACE11649595D007598CE /* DataMovieDlg.cpp in Sources */, DDA462FF164D785500EBBD8F /* TableState.cpp in Sources */, + A4ED7D562097F114008685D6 /* kd_search.cpp in Sources */, + A19483A22118BE8F009A87A2 /* MapLayoutView.cpp in Sources */, DDE3F5081677C46500D13A2C /* CatClassification.cpp in Sources */, A11F1B7F184FDFB3006F5F98 /* OGRColumn.cpp in Sources */, DDF53FF3167A39520042B453 /* CatClassifState.cpp in Sources */, + A47F792020A9F67A000AFE57 /* gpu_lisa.cpp in Sources */, + A1230E622130E783002AB30A /* MapLayer.cpp in Sources */, DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */, DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */, + A4E5FE191F624D5600D75662 /* AggregateDlg.cpp in Sources */, + A45DBDF51EDDEDAD00C2AA8A /* cluster.cpp in Sources */, + A4368CDC1FABBBC60099FA9B /* mds.cpp in Sources */, DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */, + A4BBABA02444D82B00BD4E57 /* smacof_utils.c in Sources */, + A47FC9DB1F74DE1600BEFBF2 /* MLJCCoordinator.cpp in Sources */, A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */, A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */, A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */, - DDFE0E0917502E810099FFEC /* DbfColContainer.cpp in Sources */, + A46099A82416E562000A53E2 /* misc.c in Sources */, DDFE0E2A175034EC0099FFEC /* TimeState.cpp in Sources */, - DD49747A176F59670007BB9F /* DbfTable.cpp in Sources */, + A14735B921A65F1800CA69B2 /* bd_search.cpp in Sources */, + A41C2BBB2404471D00C341A2 /* GenColor.cpp in Sources */, + A4404A02208E65DD0007753D /* wxTranslationHelper.cpp in Sources */, + A19483962118BAAA009A87A2 /* oglmisc.cpp in Sources */, DD4974B71770AC700007BB9F /* TableFrame.cpp in Sources */, DD4974BA1770AC840007BB9F /* TableBase.cpp in Sources */, DD4974E21770CE9E0007BB9F /* TableInterface.cpp in Sources */, A1E77E1A177D6A2E00CC1037 /* ExportDataDlg.cpp in Sources */, + A14735B821A65F1800CA69B2 /* kd_fix_rad_search.cpp in Sources */, + A194839B2118BAAA009A87A2 /* basic2.cpp in Sources */, A1E77FDC17889BE200CC1037 /* OGRTable.cpp in Sources */, + A14735AA21A5F72D00CA69B2 /* DistUtils.cpp in Sources */, + A4404A12209275550007753D /* hdbscan.cpp in Sources */, A1E78139178A90A100CC1037 /* OGRDatasourceProxy.cpp in Sources */, + A4ED7D552097F114008685D6 /* kd_pr_search.cpp in Sources */, A1E7813A178A90A100CC1037 /* OGRFieldProxy.cpp in Sources */, A1E7813B178A90A100CC1037 /* OGRLayerProxy.cpp in Sources */, DD2A6FE0178C7F7C00197093 /* DataSource.cpp in Sources */, A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */, + A4BBAB9F2444D82B00BD4E57 /* jacobi.c in Sources */, DD92D22417BAAF2300F8FE01 /* TimeEditorDlg.cpp in Sources */, A1DA623A17BCBC070070CAAB /* AutoCompTextCtrl.cpp in Sources */, A1B93AC017D18735007F8195 /* ProjectConf.cpp in Sources */, + A4B1F994207730FA00905246 /* matlab_mat.cpp in Sources */, + A48356BB1E456310002791C8 /* ConditionalClusterMapView.cpp in Sources */, + A4596B4E2033DB8E00C9BCC8 /* AbstractCoordinator.cpp in Sources */, DD92851C17F5FC7300B9481A /* VarOrderPtree.cpp in Sources */, DD92851F17F5FD4500B9481A /* VarOrderMapper.cpp in Sources */, + A4ED7D572097F114008685D6 /* kd_util.cpp in Sources */, DD92853D17F5FE2E00B9481A /* VarGroup.cpp in Sources */, - A156091B1E524445009F4178 /* ConditionalClusterMapView.cpp in Sources */, A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */, + A499564924FED58300BB5CB1 /* AZPDlg.cpp in Sources */, DD40B083181894F20084173C /* VarGroupingEditorDlg.cpp in Sources */, DD7B2A9D185273FF00727A91 /* SaveButtonManager.cpp in Sources */, + A4596B512033DDFF00C9BCC8 /* AbstractClusterMap.cpp in Sources */, DD3BA0D0187111DE00CA4152 /* WeightsManPtree.cpp in Sources */, DD3BA4481871EE9A00CA4152 /* DefaultVarsPtree.cpp in Sources */, DDC48EF618AE506400FD773F /* ProjectInfoDlg.cpp in Sources */, + A43F343C2412C8290096E33B /* LoessPlotCanvas.cpp in Sources */, DD0FEBBC1909B7A000930418 /* NumCategoriesDlg.cpp in Sources */, DD9C1B371910267900C0A427 /* GdaConst.cpp in Sources */, + A4A591F724ABB15500BEA1FF /* dbscan.cpp in Sources */, + A41C2BAC2400441500C341A2 /* tsne.cpp in Sources */, + A4ED7D472097EDE9008685D6 /* kd_tree.cpp in Sources */, DDEA3CBD193CEE5C0028B746 /* GdaFlexValue.cpp in Sources */, + A46099A32416E41B000A53E2 /* loess.c in Sources */, + A45CFF082453A516001F00B9 /* AnimatePlotCanvas.cpp in Sources */, DDEA3CBE193CEE5C0028B746 /* GdaLexer.cpp in Sources */, + A14735BA21A65F1800CA69B2 /* perf.cpp in Sources */, DDEA3CBF193CEE5C0028B746 /* GdaParser.cpp in Sources */, DDEA3D01193D17130028B746 /* CalculatorDlg.cpp in Sources */, + A14735B621A65F1800CA69B2 /* kd_dump.cpp in Sources */, + A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */, DDA4F0A4196311A9007645E2 /* WeightsMetaInfo.cpp in Sources */, DDA4F0AD196315AF007645E2 /* WeightUtils.cpp in Sources */, DD817EA819676AF100228B0A /* WeightsManState.cpp in Sources */, DD8183C3197054CA00228B0A /* WeightsMapCanvas.cpp in Sources */, + A178F779227773C500EB9CB7 /* GdaChoice.cpp in Sources */, DD8183C81970619800228B0A /* WeightsManDlg.cpp in Sources */, + A4B85A7324F6FF9D00748B92 /* azp.cpp in Sources */, + A47614AE20759EAD00D9F3BE /* arcgis_swm.cpp in Sources */, + A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */, + A41C2BB72400443000C341A2 /* DistancePlotView.cpp in Sources */, DD81857C19709B7800228B0A /* ConnectivityMapView.cpp in Sources */, DD4DED12197E16FF00FE29E8 /* SelectWeightsDlg.cpp in Sources */, DD5AA73D1982D200009B30C6 /* CalcHelp.cpp in Sources */, DD26CBE419A41A480092C0F2 /* WebViewExampleWin.cpp in Sources */, - DD8DCE0E19C0FD8F00E62C3D /* DataChangeType.cpp in Sources */, + A4320FC81F4735020007BE0D /* RedcapDlg.cpp in Sources */, DD2AE42A19D4F4CA00B23FB9 /* GdaJson.cpp in Sources */, + A1CE3D331C1A427A0010F170 /* PublishDlg.cpp in Sources */, + A4A6AD7B207F198E00D29677 /* ShpFile.cpp in Sources */, DD30798E19ED80E0001E5E89 /* Lowess.cpp in Sources */, DD3079C719ED9F61001E5E89 /* LowessParamObservable.cpp in Sources */, + A14735B521A65F1800CA69B2 /* bd_tree.cpp in Sources */, + A4CFBCB8250AE02C00246D81 /* quantileLisaDlg.cpp in Sources */, DD3079E319EDAE6C001E5E89 /* LowessParamDlg.cpp in Sources */, DD307DB919F0483B001E5E89 /* SmoothingUtils.cpp in Sources */, - DDCFA9961A96790100747EB7 /* DbfFile.cpp in Sources */, DD3082B319F709BB001E5E89 /* WebViewHelpWin.cpp in Sources */, DD409DFB19FF099E00C21A2B /* ScatterPlotMatView.cpp in Sources */, DD409E4C19FFD43000C21A2B /* VarTools.cpp in Sources */, DD6C9EB61A03FD0C00F124F1 /* VarsChooserDlg.cpp in Sources */, + A4CFBCBB250BE8E800246D81 /* MultiQuantileLisaDlg.cpp in Sources */, DD6C9EB71A03FD0C00F124F1 /* VarsChooserObservable.cpp in Sources */, DDC906921A129CFF002334D2 /* SimpleAxisCanvas.cpp in Sources */, DDC906931A129CFF002334D2 /* SimpleHistCanvas.cpp in Sources */, @@ -1475,40 +2095,34 @@ DD76D15A1A15430600A01FA5 /* LineChartCanvas.cpp in Sources */, DD6CDA7A1A255CEF00FCF2B8 /* LineChartStats.cpp in Sources */, DD88CF081A4253B700803196 /* CovSpView.cpp in Sources */, + A4ED7D582097F114008685D6 /* kd_split.cpp in Sources */, + A41C2BAD2400441500C341A2 /* distanceplot.cpp in Sources */, DD88CF0B1A4254D000803196 /* CovSpHLStateProxy.cpp in Sources */, DD6EE55F1A434302003AB41E /* DistancesCalc.cpp in Sources */, + A19483982118BAAA009A87A2 /* basic.cpp in Sources */, + A45CFF092453A516001F00B9 /* wxGLString.cpp in Sources */, DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */, - DDE4DFE91A96411A005B9158 /* ShpFile.cpp in Sources */, + A49F56DD1E956FCC000309CE /* HClusterDlg.cpp in Sources */, DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */, + A4C4ABFB1F97DA2D00085D47 /* MLJCMapNewView.cpp in Sources */, DD7686D71A9FF47B009EFC6D /* gdiam.cpp in Sources */, DDEFAAA71AA4F07200F6AAFA /* PointSetAlgs.cpp in Sources */, DD72C19A1AAE95480000420B /* SpatialIndAlgs.cpp in Sources */, DDD2392D1AB86D8F00E4E1BF /* NumericTests.cpp in Sources */, + A43D31541E845985007488D9 /* LocalGearyCoordinator.cpp in Sources */, + A4BBAB9E2444D82B00BD4E57 /* lapacke.c in Sources */, + A43D124F1F2088D50073D408 /* spectral.cpp in Sources */, + A42B6F781F666C57004AFAB8 /* FieldNewCalcDateTimeDlg.cpp in Sources */, DDFFC7CC1AC0E58B00F7DD6D /* CorrelogramView.cpp in Sources */, DDFFC7CD1AC0E58B00F7DD6D /* CorrelParamsObservable.cpp in Sources */, DDFFC7D51AC0E7DC00F7DD6D /* CorrelParamsDlg.cpp in Sources */, + A19483932118BAAA009A87A2 /* composit.cpp in Sources */, + A19483992118BAAA009A87A2 /* canvas.cpp in Sources */, + A14735BB21A65F1800CA69B2 /* bd_pr_search.cpp in Sources */, DDFFC7F21AC1C7CF00F7DD6D /* HighlightState.cpp in Sources */, - DD9373B61AC1F99D0066AF21 /* SimplePoint.cpp in Sources */, DD9373F71AC1FEAA0066AF21 /* PolysToContigWeights.cpp in Sources */, DDCCB5CC1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp in Sources */, A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */, - A14CB4651C866E110082B436 /* AdjustYAxisDlg.cpp in Sources */, - A14CB4661C866E110082B436 /* BasemapConfDlg.cpp in Sources */, - A14CB46E1C86705B0082B436 /* PublishDlg.cpp in Sources */, - A16D406E1CD4233A0025C64C /* AutoUpdateDlg.cpp in Sources */, - A1D766D91D7A2196002365D6 /* CsvFieldConfDlg.cpp in Sources */, - A1546D241F5B52D2002FC3DF /* cluster.cpp in Sources */, - A1546D251F5B52D2002FC3DF /* maxp.cpp in Sources */, - A1546D271F5B52D2002FC3DF /* pca.cpp in Sources */, - A1546D281F5B52D2002FC3DF /* redcap.cpp in Sources */, - A1546D291F5B52D2002FC3DF /* spectral.cpp in Sources */, - A1546D381F5B53A7002FC3DF /* AbstractClusterDlg.cpp in Sources */, - A1546D391F5B53A7002FC3DF /* HClusterDlg.cpp in Sources */, - A1546D3A1F5B53A7002FC3DF /* KMeansDlg.cpp in Sources */, - A1546D3B1F5B53A7002FC3DF /* MaxpDlg.cpp in Sources */, - A1546D3C1F5B53A7002FC3DF /* MDSDlg.cpp in Sources */, - A1546D3D1F5B53A7002FC3DF /* RedcapDlg.cpp in Sources */, - A1546D3E1F5B53A7002FC3DF /* SpectralClusteringDlg.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1518,12 +2132,38 @@ DD7974680F1D1B0700496A84 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_MODEL_TUNING = ""; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_PKGINFO_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 10.6; ONLY_ACTIVE_ARCH = YES; @@ -1535,11 +2175,37 @@ DD7974690F1D1B0700496A84 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_MODEL_TUNING = ""; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 2; GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; GENERATE_PKGINFO_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 10.6; OTHER_LDFLAGS = ""; @@ -1550,10 +2216,17 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = 3VRCAMAT4L; + ENABLE_HARDENED_RUNTIME = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = ""; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = NO; @@ -1565,26 +2238,41 @@ "\"$(SRCROOT)/../..\"", "\"$(SRCROOT)/../../ogr/ogrsf_frmts/oci\"", ); + MACOSX_DEPLOYMENT_TARGET = 10.12; + MARKETING_VERSION = 1.14; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", - "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.0", - "-I./libraries/include/wx-3.0/", + "-I/usr/local/opt/gdal/include", + "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.1", + "-I./libraries/include/wx-3.1/", "-I./libraries/include/boost", "-I./libraries/include", + "-I./libraries/include/eigen3", + "-I./temp/spectra/include", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", "-D__WXOSX_COCOA__", "-D__WXDEBUG__", "-DDEBUG", + "-DEIGEN_NO_DEBUG", ); OTHER_LDFLAGS = ( "-L/usr/lib", "-liconv", - "-L./libraries/lib", + "-L/usr/local/opt/gdal/lib", + "-lgdal", ./libraries/include/boost/stage/lib/libboost_date_time.a, ./libraries/include/boost/stage/lib/libboost_system.a, + ./libraries/include/boost/stage/lib/libboost_chrono.a, ./libraries/include/boost/stage/lib/libboost_thread.a, + /Users/xun/Dropbox/json_spirit/lib/libjson_spirit.a, + "./temp/CLAPACK-3.2.1/blas.a", + "./temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a", + "./temp/CLAPACK-3.2.1/lapack.a", + "-L./libraries/lib", + "-framework", + OpenCL, "-framework", IOKit, "-framework", @@ -1599,38 +2287,35 @@ OpenGL, "-framework", AGL, - "./libraries/lib/libwx_osx_cocoau_xrc-3.0.a", - "./libraries/lib/libwx_osx_cocoau_html-3.0.a", - "./libraries/lib/libwx_osx_cocoau_qa-3.0.a", - "./libraries/lib/libwx_osx_cocoau_adv-3.0.a", - "./libraries/lib/libwx_osx_cocoau_core-3.0.a", - "./libraries/lib/libwx_osx_cocoau_webview-3.0.a", - "./libraries/lib/libwx_baseu_xml-3.0.a", - "./libraries/lib/libwx_baseu_net-3.0.a", - "./libraries/lib/libwx_baseu-3.0.a", - "./libraries/lib/libwx_osx_cocoau_gl-3.0.a", - "./libraries/lib/libwx_osx_cocoau_richtext-3.0.a", - "./libraries/lib/libwx_osx_cocoau_aui-3.0.a", - "-lwxpng-3.0", - "-lwxjpeg-3.0", "-framework", WebKit, + "-lwx_baseu-3.1", + "-lwx_osx_cocoau_xrc-3.1", + "-lwx_osx_cocoau_html-3.1", + "-lwx_osx_cocoau_qa-3.1", + "-lwx_osx_cocoau_adv-3.1", + "-lwx_osx_cocoau_core-3.1", + "-lwx_osx_cocoau_webview-3.1", + "-lwx_baseu_xml-3.1", + "-lwx_baseu_net-3.1", + "-lwx_osx_cocoau_gl-3.1", + "-lwx_osx_cocoau_richtext-3.1", + "-lwx_osx_cocoau_aui-3.1", + "-lwxtiff-3.1", + "-lwxjpeg-3.1", + "-lwxpng-3.1", + "-lwxregexu-3.1", + "-lwxscintilla-3.1", "-lexpat", - "-lwxregexu-3.0", "-lz", "-lpthread", - "-liconv", - "./temp/CLAPACK-3.2.1/blas.a", - "./temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a", - "./temp/CLAPACK-3.2.1/lapack.a", - "-L./libraries/lib", - "-lgdal", "-lcurl", - ./libraries/lib/libjson_spirit.a, ); - PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_BUNDLE_IDENTIFIER = edu.uchicago.edu; PRODUCT_NAME = GeoDa; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = macosx; SHARED_PRECOMPS_DIR = ""; }; name = Debug; @@ -1639,11 +2324,19 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_FIX_AND_CONTINUE = NO; + DEVELOPMENT_TEAM = 3VRCAMAT4L; + ENABLE_HARDENED_RUNTIME = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_MODEL_TUNING = ""; + GCC_OPTIMIZATION_LEVEL = 3; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; INFOPLIST_FILE = "GeoDa-Xcode-Info.plist"; @@ -1653,17 +2346,21 @@ "\"$(SRCROOT)/../..\"", "\"$(SRCROOT)/../../ogr/ogrsf_frmts/oci\"", ); + MACOSX_DEPLOYMENT_TARGET = 10.12; + MARKETING_VERSION = 1.14; ONLY_ACTIVE_ARCH = YES; OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", - "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.0", - "-I./libraries/include/wx-3.0/", + "-I./libraries/lib/wx/include/osx_cocoa-unicode-static-3.1", + "-I./libraries/include/wx-3.1/", "-I./libraries/include/boost", "-I./libraries/include", + "-I./libraries/include/eigen3", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", "-D__WXOSX__", "-D__WXOSX_COCOA__", + "-DEIGEN_NO_DEBUG", ); OTHER_LDFLAGS = ( "-L/usr/lib", @@ -1673,6 +2370,8 @@ ./libraries/include/boost/stage/lib/libboost_system.a, ./libraries/include/boost/stage/lib/libboost_thread.a, "-framework", + OpenCL, + "-framework", IOKit, "-framework", Carbon, @@ -1686,25 +2385,25 @@ OpenGL, "-framework", AGL, - "./libraries/lib/libwx_osx_cocoau_xrc-3.0.a", - "./libraries/lib/libwx_osx_cocoau_html-3.0.a", - "./libraries/lib/libwx_osx_cocoau_qa-3.0.a", - "./libraries/lib/libwx_osx_cocoau_adv-3.0.a", - "./libraries/lib/libwx_osx_cocoau_core-3.0.a", - "./libraries/lib/libwx_osx_cocoau_webview-3.0.a", - "./libraries/lib/libwx_baseu_xml-3.0.a", - "./libraries/lib/libwx_baseu_net-3.0.a", - "./libraries/lib/libwx_baseu-3.0.a", - "./libraries/lib/libwx_osx_cocoau_gl-3.0.a", - "./libraries/lib/libwx_osx_cocoau_richtext-3.0.a", - "./libraries/lib/libwx_osx_cocoau_aui-3.0.a", - "-lwxpng-3.0", - "-lwxjpeg-3.0", + "./libraries/lib/libwx_osx_cocoau_xrc-3.1.a", + "./libraries/lib/libwx_osx_cocoau_html-3.1.a", + "./libraries/lib/libwx_osx_cocoau_qa-3.1.a", + "./libraries/lib/libwx_osx_cocoau_adv-3.1.a", + "./libraries/lib/libwx_osx_cocoau_core-3.1.a", + "./libraries/lib/libwx_osx_cocoau_webview-3.1.a", + "./libraries/lib/libwx_baseu_xml-3.1.a", + "./libraries/lib/libwx_baseu_net-3.1.a", + "./libraries/lib/libwx_baseu-3.1.a", + "./libraries/lib/libwx_osx_cocoau_gl-3.1.a", + "./libraries/lib/libwx_osx_cocoau_richtext-3.1.a", + "./libraries/lib/libwx_osx_cocoau_aui-3.1.a", + "-lwxpng-3.1", + "-lwxjpeg-3.1", "-framework", WebKit, "-lexpat", - "-lwxregexu-3.0", - "-lwxtiff-3.0", + "-lwxregexu-3.1", + "-lwxtiff-3.1", "-lz", "-lpthread", "-liconv", @@ -1716,9 +2415,11 @@ "-lcurl", ./libraries/lib/libjson_spirit.a, ); - PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; + PRODUCT_BUNDLE_IDENTIFIER = edu.uchicago.edu; PRODUCT_NAME = GeoDa; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = macosx; SHARED_PRECOMPS_DIR = ""; VALID_ARCHS = x86_64; ZERO_LINK = NO; @@ -1728,7 +2429,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa-leopard" */ = { + DD79746A0F1D1B0700496A84 /* Build configuration list for PBXProject "GeoDa.new" */ = { isa = XCConfigurationList; buildConfigurations = ( DD7974680F1D1B0700496A84 /* Debug */, diff --git a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj index e83e8ed73..3b362f799 100644 --- a/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj +++ b/BuildTools/macosx/GeoDa.xcodeproj/project.pbxproj @@ -8,6 +8,10 @@ /* Begin PBXBuildFile section */ A10EF2F021273E7E00564FE1 /* AbstractCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A10EF2EE21273E7E00564FE1 /* AbstractCanvas.cpp */; }; + A119BEBD243BE845006E1BE6 /* smacof.c in Sources */ = {isa = PBXBuildFile; fileRef = A119BEB8243BE844006E1BE6 /* smacof.c */; }; + A119BEBE243BE845006E1BE6 /* smacof_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A119BEBA243BE844006E1BE6 /* smacof_utils.c */; }; + A119BEBF243BE845006E1BE6 /* lapacke.c in Sources */ = {isa = PBXBuildFile; fileRef = A119BEBB243BE844006E1BE6 /* lapacke.c */; }; + A119BEC0243BE845006E1BE6 /* jacobi.c in Sources */ = {isa = PBXBuildFile; fileRef = A119BEBC243BE844006E1BE6 /* jacobi.c */; }; A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11B85BB1B18DC9C008B64EA /* Basemap.cpp */; }; A11EF98E21ED569A00B77413 /* MultiVarSettingsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11EF98D21ED569A00B77413 /* MultiVarSettingsDlg.cpp */; }; A11F1B7F184FDFB3006F5F98 /* OGRColumn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A11F1B7D184FDFB3006F5F98 /* OGRColumn.cpp */; }; @@ -16,9 +20,12 @@ A1230E5F212DF54D002AB30A /* switch-off.png in Resources */ = {isa = PBXBuildFile; fileRef = A1230E5D212DF54D002AB30A /* switch-off.png */; }; A1230E622130E783002AB30A /* MapLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1230E602130E783002AB30A /* MapLayer.cpp */; }; A1230E652130E81A002AB30A /* MapLayerTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1230E632130E81A002AB30A /* MapLayerTree.cpp */; }; + A128C5862441368000EAEDFA /* wxGLString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A128C5842441367D00EAEDFA /* wxGLString.cpp */; }; A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */; }; A1311C6720FFDF7100008D7F /* localjc_kernel.cl in CopyFiles */ = {isa = PBXBuildFile; fileRef = A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */; }; A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */; }; + A144201D23FF2EDB00BD6F93 /* nbrMatchDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A144201B23FF2EDB00BD6F93 /* nbrMatchDlg.cpp */; }; + A14420202405DB7400BD6F93 /* GenColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A144201E2405DB7300BD6F93 /* GenColor.cpp */; }; A14735AA21A5F72D00CA69B2 /* DistUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735A921A5F72D00CA69B2 /* DistUtils.cpp */; }; A14735B521A65F1800CA69B2 /* bd_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AB21A65F1600CA69B2 /* bd_tree.cpp */; }; A14735B621A65F1800CA69B2 /* kd_dump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735AC21A65F1600CA69B2 /* kd_dump.cpp */; }; @@ -29,7 +36,15 @@ A14735BB21A65F1800CA69B2 /* bd_pr_search.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B221A65F1700CA69B2 /* bd_pr_search.cpp */; }; A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14735B321A65F1700CA69B2 /* brute.cpp */; }; A14C496F1D76174000D9831C /* CsvFieldConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */; }; + A152ACBE2483551500BFC788 /* pam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A152ACBC2483551500BFC788 /* pam.cpp */; }; + A161939F244CDCE9004269A7 /* AnimatePlotCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A161939E244CDCE8004269A7 /* AnimatePlotCanvas.cpp */; }; + A165BFEF249C113A00D1CC10 /* ConditionalBoxPlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A165BFEE249C113A00D1CC10 /* ConditionalBoxPlotView.cpp */; }; + A166C58524FEA8B600D4EBA6 /* AZPDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A166C58324FEA8B600D4EBA6 /* AZPDlg.cpp */; }; A16BA470183D626200D3B7DA /* DatasourceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */; }; + A170116C24AAAA4F00844D84 /* dbscan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A170116B24AAAA4F00844D84 /* dbscan.cpp */; }; + A170116F24ABFBA100844D84 /* DBScanDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A170116D24ABFBA000844D84 /* DBScanDlg.cpp */; }; + A1717C1524F611FE003B898C /* azp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1717C1324F611FD003B898C /* azp.cpp */; }; + A177E6F1250A9A0B0086F734 /* MultiQuantileLisaDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A177E6F0250A9A0B0086F734 /* MultiQuantileLisaDlg.cpp */; }; A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */; }; A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F774227772FC00EB9CB7 /* GdaListBox.cpp */; }; A178F779227773C500EB9CB7 /* GdaChoice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A178F777227773C500EB9CB7 /* GdaChoice.cpp */; }; @@ -48,10 +63,24 @@ A194839D2118BAAA009A87A2 /* drawn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A194838C2118BAA9009A87A2 /* drawn.cpp */; }; A194839E2118BAAA009A87A2 /* ogldiag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483912118BAAA009A87A2 /* ogldiag.cpp */; }; A19483A22118BE8F009A87A2 /* MapLayoutView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19483A02118BE8E009A87A2 /* MapLayoutView.cpp */; }; + A195809D2409A8760089C6CE /* LoessPlotCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A195809C2409A8760089C6CE /* LoessPlotCanvas.cpp */; }; + A19580AC240E15020089C6CE /* loessc.c in Sources */ = {isa = PBXBuildFile; fileRef = A195809F240E15000089C6CE /* loessc.c */; }; + A19580AD240E15020089C6CE /* loessf.c in Sources */ = {isa = PBXBuildFile; fileRef = A19580A0240E15010089C6CE /* loessf.c */; }; + A19580B0240E15020089C6CE /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = A19580A5240E15010089C6CE /* misc.c */; }; + A19580B1240E15020089C6CE /* predict.c in Sources */ = {isa = PBXBuildFile; fileRef = A19580A6240E15010089C6CE /* predict.c */; }; + A19580B3240E15020089C6CE /* loess.c in Sources */ = {isa = PBXBuildFile; fileRef = A19580A8240E15020089C6CE /* loess.c */; }; + A19580B6241992CA0089C6CE /* linpack_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = A19580B4241992CA0089C6CE /* linpack_lite.c */; }; + A19D5A1024CB97AB006425B3 /* MapViewHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A19D5A0E24CB97AB006425B3 /* MapViewHelper.cpp */; }; A19F51501756A11E006E31B4 /* plugins in Resources */ = {isa = PBXBuildFile; fileRef = A19F514D1756A11E006E31B4 /* plugins */; }; + A1AAF2912509E70F00578A90 /* quantileLisaDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1AAF28F2509E70F00578A90 /* quantileLisaDlg.cpp */; }; A1AC05BF1C8645F300B6FE5F /* AdjustYAxisDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */; }; A1B04ADD1B1921710045AA6F /* basemap_cache in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1B04ADC1B1921710045AA6F /* basemap_cache */; }; A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */; }; + A1B18E9D23F36F0900465937 /* distanceplot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B18E9C23F36F0900465937 /* distanceplot.cpp */; }; + A1B18EA223F4C29E00465937 /* DistancePlotView.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B18EA123F4C29E00465937 /* DistancePlotView.cpp */; }; + A1B18EAC23FDE29200465937 /* tSNEDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B18EAA23FDE29100465937 /* tSNEDlg.cpp */; }; + A1B18EB223FEF50400465937 /* tsne.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B18EB023FEF50300465937 /* tsne.cpp */; }; + A1B18EB323FEF50400465937 /* splittree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B18EB123FEF50400465937 /* splittree.cpp */; }; A1B93AC017D18735007F8195 /* ProjectConf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1B93ABF17D18735007F8195 /* ProjectConf.cpp */; }; A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */; }; A1C194A31B38FC67003DA7CA /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A1C194A21B38FC67003DA7CA /* libc++.dylib */; }; @@ -69,6 +98,7 @@ A1EF332F18E35D8300E19375 /* LocaleSetupDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1EF332D18E35D8300E19375 /* LocaleSetupDlg.cpp */; }; A1F1BA5C178D3B46005A46E5 /* GdaCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */; }; A1F1BA99178D46B8005A46E5 /* cache.sqlite in CopyFiles */ = {isa = PBXBuildFile; fileRef = A1F1BA98178D46B8005A46E5 /* cache.sqlite */; }; + A1F37C8124B4F85C007E98F0 /* SCHCDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F37C7F24B4F85B007E98F0 /* SCHCDlg.cpp */; }; A1FD8C19186908B800C35C41 /* CustomClassifPtree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */; }; A40A6A7E20226B3C003CDD79 /* PreferenceDlg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A40A6A7D20226B3B003CDD79 /* PreferenceDlg.cpp */; }; A40AB92120F559F500F94543 /* scatterplot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A40AB92020F559F500F94543 /* scatterplot.cpp */; }; @@ -319,6 +349,11 @@ /* Begin PBXFileReference section */ A10EF2EE21273E7E00564FE1 /* AbstractCanvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AbstractCanvas.cpp; sourceTree = ""; }; A10EF2EF21273E7E00564FE1 /* AbstractCanvas.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = AbstractCanvas.hpp; sourceTree = ""; }; + A119BEB8243BE844006E1BE6 /* smacof.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = smacof.c; path = Algorithms/smacof.c; sourceTree = ""; }; + A119BEB9243BE844006E1BE6 /* smacof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = smacof.h; path = Algorithms/smacof.h; sourceTree = ""; }; + A119BEBA243BE844006E1BE6 /* smacof_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = smacof_utils.c; path = Algorithms/smacof_utils.c; sourceTree = ""; }; + A119BEBB243BE844006E1BE6 /* lapacke.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lapacke.c; path = Algorithms/lapacke.c; sourceTree = ""; }; + A119BEBC243BE844006E1BE6 /* jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jacobi.c; path = Algorithms/jacobi.c; sourceTree = ""; }; A11B85BA1B18DC89008B64EA /* Basemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Basemap.h; sourceTree = ""; }; A11B85BB1B18DC9C008B64EA /* Basemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Basemap.cpp; sourceTree = ""; }; A11EF98C21ED569A00B77413 /* MultiVarSettingsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiVarSettingsDlg.h; sourceTree = ""; }; @@ -333,10 +368,16 @@ A1230E612130E783002AB30A /* MapLayer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = MapLayer.hpp; sourceTree = ""; }; A1230E632130E81A002AB30A /* MapLayerTree.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MapLayerTree.cpp; sourceTree = ""; }; A1230E642130E81A002AB30A /* MapLayerTree.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = MapLayerTree.hpp; sourceTree = ""; }; + A128C5842441367D00EAEDFA /* wxGLString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wxGLString.cpp; sourceTree = ""; }; + A128C5852441367E00EAEDFA /* wxGLString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wxGLString.h; sourceTree = ""; }; A12E0F4D1705087A00B6059C /* OGRDataAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGRDataAdapter.h; sourceTree = ""; }; A12E0F4E1705087A00B6059C /* OGRDataAdapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGRDataAdapter.cpp; sourceTree = ""; }; A13B6B9218760CF100F93ACF /* SaveAsDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveAsDlg.h; sourceTree = ""; }; A13B6B9318760CF100F93ACF /* SaveAsDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveAsDlg.cpp; sourceTree = ""; }; + A144201B23FF2EDB00BD6F93 /* nbrMatchDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nbrMatchDlg.cpp; sourceTree = ""; }; + A144201C23FF2EDB00BD6F93 /* nbrMatchDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nbrMatchDlg.h; sourceTree = ""; }; + A144201E2405DB7300BD6F93 /* GenColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenColor.cpp; sourceTree = ""; }; + A144201F2405DB7300BD6F93 /* GenColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenColor.h; sourceTree = ""; }; A14735A821A5F72D00CA69B2 /* DistUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DistUtils.h; sourceTree = ""; }; A14735A921A5F72D00CA69B2 /* DistUtils.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DistUtils.cpp; sourceTree = ""; }; A14735AB21A65F1600CA69B2 /* bd_tree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bd_tree.cpp; sourceTree = ""; }; @@ -351,10 +392,30 @@ A14735B421A65F1700CA69B2 /* bd_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bd_tree.h; sourceTree = ""; }; A14C496D1D76174000D9831C /* CsvFieldConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CsvFieldConfDlg.cpp; sourceTree = ""; }; A14C496E1D76174000D9831C /* CsvFieldConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsvFieldConfDlg.h; sourceTree = ""; }; + A152ACBC2483551500BFC788 /* pam.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pam.cpp; path = Algorithms/pam.cpp; sourceTree = ""; }; + A152ACBD2483551500BFC788 /* pam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pam.h; path = Algorithms/pam.h; sourceTree = ""; }; + A161939D244CDCE8004269A7 /* AnimatePlotCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimatePlotCanvas.h; sourceTree = ""; }; + A161939E244CDCE8004269A7 /* AnimatePlotCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimatePlotCanvas.cpp; sourceTree = ""; }; + A165BFED249C112D00D1CC10 /* ConditionalBoxPlotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionalBoxPlotView.h; sourceTree = ""; }; + A165BFEE249C113A00D1CC10 /* ConditionalBoxPlotView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConditionalBoxPlotView.cpp; sourceTree = ""; }; + A166C58324FEA8B600D4EBA6 /* AZPDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AZPDlg.cpp; sourceTree = ""; }; + A166C58424FEA8B600D4EBA6 /* AZPDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AZPDlg.h; sourceTree = ""; }; A16BA46E183D626200D3B7DA /* DatasourceDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DatasourceDlg.cpp; sourceTree = ""; }; A16BA46F183D626200D3B7DA /* DatasourceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatasourceDlg.h; sourceTree = ""; }; + A170116324AA6F4000844D84 /* dbscan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = dbscan.h; path = Algorithms/dbscan.h; sourceTree = ""; }; + A170116824AAA8DB00844D84 /* ANNperf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNperf.h; path = ANN/ANNperf.h; sourceTree = ""; }; + A170116924AAA8DB00844D84 /* ANN.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANN.h; path = ANN/ANN.h; sourceTree = ""; }; + A170116A24AAA8DB00844D84 /* ANNx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNx.h; path = ANN/ANNx.h; sourceTree = ""; }; + A170116B24AAAA4F00844D84 /* dbscan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dbscan.cpp; path = Algorithms/dbscan.cpp; sourceTree = ""; }; + A170116D24ABFBA000844D84 /* DBScanDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBScanDlg.cpp; sourceTree = ""; }; + A170116E24ABFBA100844D84 /* DBScanDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DBScanDlg.h; sourceTree = ""; }; + A1717C1324F611FD003B898C /* azp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = azp.cpp; path = Algorithms/azp.cpp; sourceTree = ""; }; + A1717C1424F611FE003B898C /* azp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = azp.h; path = Algorithms/azp.h; sourceTree = ""; }; + A1717C1624F61584003B898C /* rng.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rng.h; path = Algorithms/rng.h; sourceTree = ""; }; A171FBFE1792332A000DD5A0 /* GdaException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaException.h; sourceTree = ""; }; A17336821C06917B00579354 /* WeightsManInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightsManInterface.h; path = VarCalc/WeightsManInterface.h; sourceTree = ""; }; + A177E6EF250A9A0B0086F734 /* MultiQuantileLisaDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiQuantileLisaDlg.h; sourceTree = ""; }; + A177E6F0250A9A0B0086F734 /* MultiQuantileLisaDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultiQuantileLisaDlg.cpp; sourceTree = ""; }; A178F771227381CA00EB9CB7 /* DissolveDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DissolveDlg.h; sourceTree = ""; }; A178F772227381CB00EB9CB7 /* DissolveDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DissolveDlg.cpp; sourceTree = ""; }; A178F774227772FC00EB9CB7 /* GdaListBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaListBox.cpp; sourceTree = ""; }; @@ -395,12 +456,38 @@ A19483922118BAAA009A87A2 /* drawn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drawn.h; sourceTree = ""; }; A19483A02118BE8E009A87A2 /* MapLayoutView.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MapLayoutView.cpp; sourceTree = ""; }; A19483A12118BE8F009A87A2 /* MapLayoutView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapLayoutView.h; sourceTree = ""; }; + A195809B2409A8750089C6CE /* LoessPlotCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoessPlotCanvas.h; sourceTree = ""; }; + A195809C2409A8760089C6CE /* LoessPlotCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoessPlotCanvas.cpp; sourceTree = ""; }; + A195809F240E15000089C6CE /* loessc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loessc.c; path = Algorithms/loessc.c; sourceTree = ""; }; + A19580A0240E15010089C6CE /* loessf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loessf.c; path = Algorithms/loessf.c; sourceTree = ""; }; + A19580A5240E15010089C6CE /* misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = misc.c; path = Algorithms/misc.c; sourceTree = ""; }; + A19580A6240E15010089C6CE /* predict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = predict.c; path = Algorithms/predict.c; sourceTree = ""; }; + A19580A8240E15020089C6CE /* loess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loess.c; path = Algorithms/loess.c; sourceTree = ""; }; + A19580A9240E15020089C6CE /* S.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = S.h; path = Algorithms/S.h; sourceTree = ""; }; + A19580AB240E15020089C6CE /* loess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = loess.h; path = Algorithms/loess.h; sourceTree = ""; }; + A19580B4241992CA0089C6CE /* linpack_lite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = linpack_lite.c; path = Algorithms/linpack_lite.c; sourceTree = ""; }; + A19D5A0E24CB97AB006425B3 /* MapViewHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MapViewHelper.cpp; sourceTree = ""; }; + A19D5A0F24CB97AB006425B3 /* MapViewHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewHelper.h; sourceTree = ""; }; A19F514D1756A11E006E31B4 /* plugins */ = {isa = PBXFileReference; lastKnownFileType = folder; name = plugins; path = BuildTools/macosx/plugins; sourceTree = ""; }; + A1AAF28F2509E70F00578A90 /* quantileLisaDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quantileLisaDlg.cpp; sourceTree = ""; }; + A1AAF2902509E70F00578A90 /* quantileLisaDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quantileLisaDlg.h; sourceTree = ""; }; A1AC05BD1C8645F300B6FE5F /* AdjustYAxisDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AdjustYAxisDlg.cpp; sourceTree = ""; }; A1AC05BE1C8645F300B6FE5F /* AdjustYAxisDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdjustYAxisDlg.h; sourceTree = ""; }; A1B04ADC1B1921710045AA6F /* basemap_cache */ = {isa = PBXFileReference; lastKnownFileType = folder; name = basemap_cache; path = BuildTools/CommonDistFiles/basemap_cache; sourceTree = ""; }; A1B13EE11C3EDFF90064AD87 /* BasemapConfDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasemapConfDlg.h; sourceTree = ""; }; A1B13EE21C3EDFF90064AD87 /* BasemapConfDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BasemapConfDlg.cpp; sourceTree = ""; }; + A1B18E9C23F36F0900465937 /* distanceplot.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = distanceplot.cpp; path = Algorithms/distanceplot.cpp; sourceTree = ""; }; + A1B18E9E23F474B700465937 /* threadpool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = threadpool.h; path = Algorithms/threadpool.h; sourceTree = ""; }; + A1B18E9F23F4815000465937 /* distanceplot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = distanceplot.h; path = Algorithms/distanceplot.h; sourceTree = ""; }; + A1B18EA023F4C28900465937 /* DistancePlotView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DistancePlotView.h; sourceTree = ""; }; + A1B18EA123F4C29E00465937 /* DistancePlotView.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DistancePlotView.cpp; sourceTree = ""; }; + A1B18EAA23FDE29100465937 /* tSNEDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tSNEDlg.cpp; sourceTree = ""; }; + A1B18EAB23FDE29100465937 /* tSNEDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tSNEDlg.h; sourceTree = ""; }; + A1B18EAD23FEF50200465937 /* vptree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vptree.h; path = Algorithms/vptree.h; sourceTree = ""; }; + A1B18EAE23FEF50300465937 /* tsne.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tsne.h; path = Algorithms/tsne.h; sourceTree = ""; }; + A1B18EAF23FEF50300465937 /* splittree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = splittree.h; path = Algorithms/splittree.h; sourceTree = ""; }; + A1B18EB023FEF50300465937 /* tsne.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tsne.cpp; path = Algorithms/tsne.cpp; sourceTree = ""; }; + A1B18EB123FEF50400465937 /* splittree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = splittree.cpp; path = Algorithms/splittree.cpp; sourceTree = ""; }; A1B93ABE17D18735007F8195 /* ProjectConf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectConf.h; sourceTree = ""; }; A1B93ABF17D18735007F8195 /* ProjectConf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectConf.cpp; sourceTree = ""; }; A1BE9E4F174DD85F007B9C64 /* GdaAppResources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaAppResources.cpp; sourceTree = ""; }; @@ -432,6 +519,8 @@ A1F1BA5A178D3B46005A46E5 /* GdaCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GdaCache.cpp; sourceTree = ""; }; A1F1BA5B178D3B46005A46E5 /* GdaCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GdaCache.h; sourceTree = ""; }; A1F1BA98178D46B8005A46E5 /* cache.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; name = cache.sqlite; path = BuildTools/CommonDistFiles/cache.sqlite; sourceTree = ""; }; + A1F37C7F24B4F85B007E98F0 /* SCHCDlg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SCHCDlg.cpp; sourceTree = ""; }; + A1F37C8024B4F85B007E98F0 /* SCHCDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SCHCDlg.h; sourceTree = ""; }; A1FD8C17186908B800C35C41 /* CustomClassifPtree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CustomClassifPtree.cpp; path = DataViewer/CustomClassifPtree.cpp; sourceTree = ""; }; A1FD8C18186908B800C35C41 /* CustomClassifPtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomClassifPtree.h; path = DataViewer/CustomClassifPtree.h; sourceTree = ""; }; A40A6A7C20226B3B003CDD79 /* PreferenceDlg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferenceDlg.h; sourceTree = ""; }; @@ -919,6 +1008,16 @@ path = Weights; sourceTree = ""; }; + A170116724AAA8C800844D84 /* ANN */ = { + isa = PBXGroup; + children = ( + A170116924AAA8DB00844D84 /* ANN.h */, + A170116824AAA8DB00844D84 /* ANNperf.h */, + A170116A24AAA8DB00844D84 /* ANNx.h */, + ); + name = ANN; + sourceTree = ""; + }; A19483772118BA8B009A87A2 /* ogl */ = { isa = PBXGroup; children = ( @@ -953,6 +1052,33 @@ path = ogl; sourceTree = ""; }; + A195809E240E14E70089C6CE /* dloess */ = { + isa = PBXGroup; + children = ( + A19580B4241992CA0089C6CE /* linpack_lite.c */, + A19580A8240E15020089C6CE /* loess.c */, + A19580AB240E15020089C6CE /* loess.h */, + A195809F240E15000089C6CE /* loessc.c */, + A19580A0240E15010089C6CE /* loessf.c */, + A19580A5240E15010089C6CE /* misc.c */, + A19580A6240E15010089C6CE /* predict.c */, + A19580A9240E15020089C6CE /* S.h */, + ); + name = dloess; + sourceTree = ""; + }; + A1A97FCD2437F91F00636483 /* smacof */ = { + isa = PBXGroup; + children = ( + A119BEBC243BE844006E1BE6 /* jacobi.c */, + A119BEBB243BE844006E1BE6 /* lapacke.c */, + A119BEBA243BE844006E1BE6 /* smacof_utils.c */, + A119BEB8243BE844006E1BE6 /* smacof.c */, + A119BEB9243BE844006E1BE6 /* smacof.h */, + ); + name = smacof; + sourceTree = ""; + }; A40AB91A20F5336600F94543 /* arizona */ = { isa = PBXGroup; children = ( @@ -1003,6 +1129,17 @@ A45DBDEF1EDDDD2600C2AA8A /* Algorithms */ = { isa = PBXGroup; children = ( + A1717C1324F611FD003B898C /* azp.cpp */, + A1717C1424F611FE003B898C /* azp.h */, + A152ACBC2483551500BFC788 /* pam.cpp */, + A152ACBD2483551500BFC788 /* pam.h */, + A1A97FCD2437F91F00636483 /* smacof */, + A195809E240E14E70089C6CE /* dloess */, + A1B18EB123FEF50400465937 /* splittree.cpp */, + A1B18EAF23FEF50300465937 /* splittree.h */, + A1B18EB023FEF50300465937 /* tsne.cpp */, + A1B18EAE23FEF50300465937 /* tsne.h */, + A1B18EAD23FEF50200465937 /* vptree.h */, A4E00F0F20FD8ECC0038BA80 /* localjc_kernel.cl */, A47F792320AA084B000AFE57 /* distmat_kernel.cl */, A47F792120AA082A000AFE57 /* lisa_kernel.cl */, @@ -1030,6 +1167,12 @@ A45DBDF01EDDEDAD00C2AA8A /* pca.h */, A45DBDF31EDDEDAD00C2AA8A /* cluster.cpp */, A45DBDF21EDDEDAD00C2AA8A /* cluster.h */, + A1B18E9F23F4815000465937 /* distanceplot.h */, + A1B18E9C23F36F0900465937 /* distanceplot.cpp */, + A1B18E9E23F474B700465937 /* threadpool.h */, + A170116324AA6F4000844D84 /* dbscan.h */, + A170116B24AAAA4F00844D84 /* dbscan.cpp */, + A1717C1624F61584003B898C /* rng.h */, ); name = Algorithms; sourceTree = ""; @@ -1098,6 +1241,7 @@ A4ED7D3F2097EC0F008685D6 /* kNN */ = { isa = PBXGroup; children = ( + A170116724AAA8C800844D84 /* ANN */, A14735AD21A65F1700CA69B2 /* bd_fix_rad_search.cpp */, A14735B221A65F1700CA69B2 /* bd_pr_search.cpp */, A14735AF21A65F1700CA69B2 /* bd_search.cpp */, @@ -1163,6 +1307,8 @@ A19F514D1756A11E006E31B4 /* plugins */, DD3BA4471871EE9A00CA4152 /* DefaultVarsPtree.h */, DD3BA4461871EE9A00CA4152 /* DefaultVarsPtree.cpp */, + A144201F2405DB7300BD6F93 /* GenColor.h */, + A144201E2405DB7300BD6F93 /* GenColor.cpp */, DD9C1B361910267900C0A427 /* GdaConst.h */, DD9C1B351910267900C0A427 /* GdaConst.cpp */, A171FBFE1792332A000DD5A0 /* GdaException.h */, @@ -1232,6 +1378,20 @@ DD7974FE0F1D296F00496A84 /* DialogTools */ = { isa = PBXGroup; children = ( + A177E6F0250A9A0B0086F734 /* MultiQuantileLisaDlg.cpp */, + A177E6EF250A9A0B0086F734 /* MultiQuantileLisaDlg.h */, + A1AAF28F2509E70F00578A90 /* quantileLisaDlg.cpp */, + A1AAF2902509E70F00578A90 /* quantileLisaDlg.h */, + A166C58324FEA8B600D4EBA6 /* AZPDlg.cpp */, + A166C58424FEA8B600D4EBA6 /* AZPDlg.h */, + A1F37C7F24B4F85B007E98F0 /* SCHCDlg.cpp */, + A1F37C8024B4F85B007E98F0 /* SCHCDlg.h */, + A170116D24ABFBA000844D84 /* DBScanDlg.cpp */, + A170116E24ABFBA100844D84 /* DBScanDlg.h */, + A144201B23FF2EDB00BD6F93 /* nbrMatchDlg.cpp */, + A144201C23FF2EDB00BD6F93 /* nbrMatchDlg.h */, + A1B18EAA23FDE29100465937 /* tSNEDlg.cpp */, + A1B18EAB23FDE29100465937 /* tSNEDlg.h */, A178F777227773C500EB9CB7 /* GdaChoice.cpp */, A178F778227773C500EB9CB7 /* GdaChoice.h */, A178F774227772FC00EB9CB7 /* GdaListBox.cpp */, @@ -1375,6 +1535,14 @@ DD7975B70F1D2A9000496A84 /* Explore */ = { isa = PBXGroup; children = ( + A19D5A0E24CB97AB006425B3 /* MapViewHelper.cpp */, + A19D5A0F24CB97AB006425B3 /* MapViewHelper.h */, + A161939E244CDCE8004269A7 /* AnimatePlotCanvas.cpp */, + A161939D244CDCE8004269A7 /* AnimatePlotCanvas.h */, + A128C5842441367D00EAEDFA /* wxGLString.cpp */, + A128C5852441367E00EAEDFA /* wxGLString.h */, + A195809C2409A8760089C6CE /* LoessPlotCanvas.cpp */, + A195809B2409A8750089C6CE /* LoessPlotCanvas.h */, A4C76B0D225BC4BB00A0729A /* GroupingMapView.cpp */, A4C76B0C225BC4BA00A0729A /* GroupingMapView.h */, A4596B502033DDFF00C9BCC8 /* AbstractClusterMap.cpp */, @@ -1427,6 +1595,8 @@ DDDBF29A163AD2BF0070610C /* ConditionalScatterPlotView.cpp */, DD4E8B84164818A70014F1E7 /* ConnectivityHistView.cpp */, DD4E8B85164818A70014F1E7 /* ConnectivityHistView.h */, + A165BFEE249C113A00D1CC10 /* ConditionalBoxPlotView.cpp */, + A165BFED249C112D00D1CC10 /* ConditionalBoxPlotView.h */, DD81857A19709B7800228B0A /* ConnectivityMapView.cpp */, DD81857B19709B7800228B0A /* ConnectivityMapView.h */, DD88CF091A4254D000803196 /* CovSpHLStateProxy.cpp */, @@ -1494,6 +1664,8 @@ A1230E612130E783002AB30A /* MapLayer.hpp */, A1230E632130E81A002AB30A /* MapLayerTree.cpp */, A1230E642130E81A002AB30A /* MapLayerTree.hpp */, + A1B18EA023F4C28900465937 /* DistancePlotView.h */, + A1B18EA123F4C29E00465937 /* DistancePlotView.cpp */, ); path = Explore; sourceTree = ""; @@ -1758,10 +1930,12 @@ DD7975670F1D296F00496A84 /* 3DControlPan.cpp in Sources */, A43D124C1F1DE1D80073D408 /* MaxpDlg.cpp in Sources */, DD79756D0F1D296F00496A84 /* Bnd2ShpDlg.cpp in Sources */, + A19580B0240E15020089C6CE /* misc.c in Sources */, A4F875771E94123F0079734E /* KMeansDlg.cpp in Sources */, A40AB92920F675B600F94543 /* oglstuff.cpp in Sources */, DD7975700F1D296F00496A84 /* CreateGridDlg.cpp in Sources */, DD7975710F1D296F00496A84 /* CreatingWeightDlg.cpp in Sources */, + A14420202405DB7400BD6F93 /* GenColor.cpp in Sources */, A40AB92120F559F500F94543 /* scatterplot.cpp in Sources */, DD79757C0F1D296F00496A84 /* HistIntervalDlg.cpp in Sources */, DD79757F0F1D296F00496A84 /* LisaWhat2OpenDlg.cpp in Sources */, @@ -1796,6 +1970,7 @@ DD7976BE0F1D2CA800496A84 /* PowerLag.cpp in Sources */, A414C88B207BED2700520546 /* MatfileReader.cpp in Sources */, A178F776227772FD00EB9CB7 /* GdaListBox.cpp in Sources */, + A1B18EB323FEF50400465937 /* splittree.cpp in Sources */, DD7976BF0F1D2CA800496A84 /* PowerSymLag.cpp in Sources */, DD7976C10F1D2CA800496A84 /* smile2.cpp in Sources */, DD7976C20F1D2CA800496A84 /* SparseMatrix.cpp in Sources */, @@ -1804,12 +1979,15 @@ DD7976C40F1D2CA800496A84 /* SparseVector.cpp in Sources */, DD7976C50F1D2CA800496A84 /* Weights.cpp in Sources */, DD7976F30F1D2D3100496A84 /* Randik.cpp in Sources */, + A177E6F1250A9A0B0086F734 /* MultiQuantileLisaDlg.cpp in Sources */, DD64A2880F20FE06006B1E6D /* GeneralWxUtils.cpp in Sources */, + A195809D2409A8760089C6CE /* LoessPlotCanvas.cpp in Sources */, DD64A5580F2910D2006B1E6D /* logger.cpp in Sources */, DD27ECBC0F2E43B5009C5C42 /* GenUtils.cpp in Sources */, DDD13F060F2F8BE1009F7F13 /* GenGeomAlgs.cpp in Sources */, A42018031FB3C0AC0029709C /* skater.cpp in Sources */, A178F773227381CB00EB9CB7 /* DissolveDlg.cpp in Sources */, + A165BFEF249C113A00D1CC10 /* ConditionalBoxPlotView.cpp in Sources */, A186F0A11C16508A00AEBA13 /* GdaCartoDB.cpp in Sources */, A1B13EE31C3EDFF90064AD87 /* BasemapConfDlg.cpp in Sources */, A1EBC88F1CD2B2FD001DCFE9 /* AutoUpdateDlg.cpp in Sources */, @@ -1817,9 +1995,12 @@ A194839E2118BAAA009A87A2 /* ogldiag.cpp in Sources */, A1894C3F213F29DC00718FFC /* SpatialJoinDlg.cpp in Sources */, DD00ADE811138A2C008FE572 /* TemplateFrame.cpp in Sources */, + A1B18EB223FEF50400465937 /* tsne.cpp in Sources */, DDAA6540117F9B5D00D1010C /* Project.cpp in Sources */, DDB37A0811CBBB730020C8A9 /* TemplateLegend.cpp in Sources */, + A119BEBE243BE845006E1BE6 /* smacof_utils.c in Sources */, DD115EA312BBDDA000E1CC73 /* ProgressDlg.cpp in Sources */, + A152ACBE2483551500BFC788 /* pam.cpp in Sources */, DDD593AC12E9F34C00F7A7C4 /* GeodaWeight.cpp in Sources */, DDD593B012E9F42100F7A7C4 /* WeightsManager.cpp in Sources */, A194839C2118BAAA009A87A2 /* mfutils.cpp in Sources */, @@ -1827,10 +2008,12 @@ A194839A2118BAAA009A87A2 /* lines.cpp in Sources */, DDD593C712E9F90000F7A7C4 /* GalWeight.cpp in Sources */, A4C76B0E225BC4BB00A0729A /* GroupingMapView.cpp in Sources */, + A1B18EA223F4C29E00465937 /* DistancePlotView.cpp in Sources */, DDD593CA12E9F90C00F7A7C4 /* GwtWeight.cpp in Sources */, DD694685130307C00072386B /* RateSmoothing.cpp in Sources */, A4E00F1020FD8ECD0038BA80 /* localjc_kernel.cl in Sources */, DDF14CDA139432B000363FA1 /* DataViewerDeleteColDlg.cpp in Sources */, + A144201D23FF2EDB00BD6F93 /* nbrMatchDlg.cpp in Sources */, A1E5BC841DBFE661005739E9 /* ReportBugDlg.cpp in Sources */, DDF14CDC139432C100363FA1 /* DataViewerResizeColDlg.cpp in Sources */, DDF14CDD139432CB00363FA1 /* DataViewerAddColDlg.cpp in Sources */, @@ -1843,6 +2026,7 @@ DDB252B513BBFD6700A7CE26 /* MergeTableDlg.cpp in Sources */, DD0DC4BA13CBA7B10022B65A /* RangeSelectionDlg.cpp in Sources */, DD89C87413D86BC7006C068D /* FieldNewCalcBinDlg.cpp in Sources */, + A166C58524FEA8B600D4EBA6 /* AZPDlg.cpp in Sources */, DD89C87513D86BC7006C068D /* FieldNewCalcLagDlg.cpp in Sources */, A45DBDF41EDDEDAD00C2AA8A /* pca.cpp in Sources */, DD89C87613D86BC7006C068D /* FieldNewCalcRateDlg.cpp in Sources */, @@ -1864,11 +2048,14 @@ DD2B433F1522A93700888E51 /* HistogramView.cpp in Sources */, DD2B43421522A95100888E51 /* PCPNewView.cpp in Sources */, A19483952118BAAA009A87A2 /* constrnt.cpp in Sources */, + A1F37C8124B4F85C007E98F0 /* SCHCDlg.cpp in Sources */, + A19D5A1024CB97AB006425B3 /* MapViewHelper.cpp in Sources */, DDC9DD8515937AA000A0E5BA /* ExportCsvDlg.cpp in Sources */, DDC9DD8A15937B2F00A0E5BA /* CsvFileUtils.cpp in Sources */, DDC9DD9C15937C0200A0E5BA /* ImportCsvDlg.cpp in Sources */, A14735B721A65F1800CA69B2 /* bd_fix_rad_search.cpp in Sources */, DD75A04115E81AF9008A7F8C /* VoronoiUtils.cpp in Sources */, + A19580AC240E15020089C6CE /* loessc.c in Sources */, DDB2A75F15FA7DA900022ABE /* CartogramNewView.cpp in Sources */, A11F1B821850437A006F5F98 /* OGRTableOperation.cpp in Sources */, DD579B6A160BDAFE00BF8D53 /* DorlingCartogram.cpp in Sources */, @@ -1879,9 +2066,11 @@ A13B6B9418760CF100F93ACF /* SaveAsDlg.cpp in Sources */, A43D12521F20AE450073D408 /* SpectralClusteringDlg.cpp in Sources */, DDDBF2AE163AD3AB0070610C /* ConditionalHistogramView.cpp in Sources */, + A19580B1240E15020089C6CE /* predict.c in Sources */, DD4E8B86164818A70014F1E7 /* ConnectivityHistView.cpp in Sources */, A4F5D61F1F4EA0D2007ADF25 /* AbstractClusterDlg.cpp in Sources */, DD8FACE11649595D007598CE /* DataMovieDlg.cpp in Sources */, + A1B18E9D23F36F0900465937 /* distanceplot.cpp in Sources */, DDA462FF164D785500EBBD8F /* TableState.cpp in Sources */, A4ED7D562097F114008685D6 /* kd_search.cpp in Sources */, A19483A22118BE8F009A87A2 /* MapLayoutView.cpp in Sources */, @@ -1892,15 +2081,18 @@ A1230E622130E783002AB30A /* MapLayer.cpp in Sources */, DDF5400B167A39CA0042B453 /* CatClassifDlg.cpp in Sources */, DD60546816A83EEF0004BF02 /* CatClassifManager.cpp in Sources */, + A119BEBF243BE845006E1BE6 /* lapacke.c in Sources */, A4E5FE191F624D5600D75662 /* AggregateDlg.cpp in Sources */, A45DBDF51EDDEDAD00C2AA8A /* cluster.cpp in Sources */, A4368CDC1FABBBC60099FA9B /* mds.cpp in Sources */, DD64925C16DFF63400B3B0AB /* GeoDa.cpp in Sources */, + A19580B6241992CA0089C6CE /* linpack_lite.c in Sources */, A47FC9DB1F74DE1600BEFBF2 /* MLJCCoordinator.cpp in Sources */, A12E0F4F1705087A00B6059C /* OGRDataAdapter.cpp in Sources */, A1D82DEF174D3EB6003DE20A /* ConnectDatasourceDlg.cpp in Sources */, A1BE9E51174DD85F007B9C64 /* GdaAppResources.cpp in Sources */, DDFE0E2A175034EC0099FFEC /* TimeState.cpp in Sources */, + A1AAF2912509E70F00578A90 /* quantileLisaDlg.cpp in Sources */, A14735B921A65F1800CA69B2 /* bd_search.cpp in Sources */, A4404A02208E65DD0007753D /* wxTranslationHelper.cpp in Sources */, A19483962118BAAA009A87A2 /* oglmisc.cpp in Sources */, @@ -1911,8 +2103,10 @@ A14735B821A65F1800CA69B2 /* kd_fix_rad_search.cpp in Sources */, A10EF2F021273E7E00564FE1 /* AbstractCanvas.cpp in Sources */, A194839B2118BAAA009A87A2 /* basic2.cpp in Sources */, + A1717C1524F611FE003B898C /* azp.cpp in Sources */, A1E77FDC17889BE200CC1037 /* OGRTable.cpp in Sources */, A14735AA21A5F72D00CA69B2 /* DistUtils.cpp in Sources */, + A19580B3240E15020089C6CE /* loess.c in Sources */, A4404A12209275550007753D /* hdbscan.cpp in Sources */, A1E78139178A90A100CC1037 /* OGRDatasourceProxy.cpp in Sources */, A4ED7D552097F114008685D6 /* kd_pr_search.cpp in Sources */, @@ -1939,6 +2133,7 @@ DDC48EF618AE506400FD773F /* ProjectInfoDlg.cpp in Sources */, DD0FEBBC1909B7A000930418 /* NumCategoriesDlg.cpp in Sources */, DD9C1B371910267900C0A427 /* GdaConst.cpp in Sources */, + A1B18EAC23FDE29200465937 /* tSNEDlg.cpp in Sources */, A4ED7D472097EDE9008685D6 /* kd_tree.cpp in Sources */, DDEA3CBD193CEE5C0028B746 /* GdaFlexValue.cpp in Sources */, DDEA3CBE193CEE5C0028B746 /* GdaLexer.cpp in Sources */, @@ -1955,13 +2150,17 @@ DD8183C81970619800228B0A /* WeightsManDlg.cpp in Sources */, A47614AE20759EAD00D9F3BE /* arcgis_swm.cpp in Sources */, A14735BC21A65F1800CA69B2 /* brute.cpp in Sources */, + A170116F24ABFBA100844D84 /* DBScanDlg.cpp in Sources */, DD81857C19709B7800228B0A /* ConnectivityMapView.cpp in Sources */, DD4DED12197E16FF00FE29E8 /* SelectWeightsDlg.cpp in Sources */, DD5AA73D1982D200009B30C6 /* CalcHelp.cpp in Sources */, DD26CBE419A41A480092C0F2 /* WebViewExampleWin.cpp in Sources */, + A170116C24AAAA4F00844D84 /* dbscan.cpp in Sources */, + A161939F244CDCE9004269A7 /* AnimatePlotCanvas.cpp in Sources */, A40AB92820F675B600F94543 /* mathstuff.cpp in Sources */, A4320FC81F4735020007BE0D /* RedcapDlg.cpp in Sources */, DD2AE42A19D4F4CA00B23FB9 /* GdaJson.cpp in Sources */, + A119BEC0243BE845006E1BE6 /* jacobi.c in Sources */, A1CE3D331C1A427A0010F170 /* PublishDlg.cpp in Sources */, A4A6AD7B207F198E00D29677 /* ShpFile.cpp in Sources */, DD30798E19ED80E0001E5E89 /* Lowess.cpp in Sources */, @@ -1969,6 +2168,7 @@ A14735B521A65F1800CA69B2 /* bd_tree.cpp in Sources */, DD3079E319EDAE6C001E5E89 /* LowessParamDlg.cpp in Sources */, DD307DB919F0483B001E5E89 /* SmoothingUtils.cpp in Sources */, + A128C5862441368000EAEDFA /* wxGLString.cpp in Sources */, DD3082B319F709BB001E5E89 /* WebViewHelpWin.cpp in Sources */, DD409DFB19FF099E00C21A2B /* ScatterPlotMatView.cpp in Sources */, DD409E4C19FFD43000C21A2B /* VarTools.cpp in Sources */, @@ -1986,6 +2186,7 @@ DD6EE55F1A434302003AB41E /* DistancesCalc.cpp in Sources */, A19483982118BAAA009A87A2 /* basic.cpp in Sources */, DDE4DFD61A963B07005B9158 /* GdaShape.cpp in Sources */, + A119BEBD243BE845006E1BE6 /* smacof.c in Sources */, A49F56DD1E956FCC000309CE /* HClusterDlg.cpp in Sources */, DD0FC7E81A9EC17500A6715B /* CorrelogramAlgs.cpp in Sources */, A4C4ABFB1F97DA2D00085D47 /* MLJCMapNewView.cpp in Sources */, @@ -2004,6 +2205,7 @@ A14735BB21A65F1800CA69B2 /* bd_pr_search.cpp in Sources */, DDFFC7F21AC1C7CF00F7DD6D /* HighlightState.cpp in Sources */, DD9373F71AC1FEAA0066AF21 /* PolysToContigWeights.cpp in Sources */, + A19580AD240E15020089C6CE /* loessf.c in Sources */, DDCCB5CC1AD47C200067D6C4 /* SimpleBinsHistCanvas.cpp in Sources */, A11B85BC1B18DC9C008B64EA /* Basemap.cpp in Sources */, ); @@ -2047,7 +2249,9 @@ DD7974850F1D1B6600496A84 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ADDITIONAL_SDKS = ""; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; CLANG_CXX_LIBRARY = "compiler-default"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; @@ -2058,6 +2262,7 @@ GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; + GCC_VERSION = ""; INFOPLIST_FILE = "GeoDa-Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( @@ -2072,6 +2277,7 @@ "-I./libraries/include/wx-3.1/", "-I./libraries/include/boost", "-I./libraries/include", + "-I./temp/spectra/include", "-I./libraries/include/eigen3", "-D_FILE_OFFSET_BITS=64", "-D__WXMAC__", @@ -2138,6 +2344,7 @@ PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_NAME = GeoDa; + SDKROOT = /Applications/Xcode9.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk; SHARED_PRECOMPS_DIR = ""; }; name = Debug; @@ -2145,7 +2352,9 @@ DD7974860F1D1B6600496A84 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ADDITIONAL_SDKS = ""; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; CLANG_CXX_LIBRARY = "compiler-default"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; @@ -2156,6 +2365,7 @@ GCC_OPTIMIZATION_LEVEL = 3; GCC_PRECOMPILE_PREFIX_HEADER = NO; GCC_PREFIX_HEADER = ""; + GCC_VERSION = ""; INFOPLIST_FILE = "GeoDa-Xcode-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( @@ -2234,6 +2444,7 @@ PREBINDING = NO; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; PRODUCT_NAME = GeoDa; + SDKROOT = /Applications/Xcode9.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk; SHARED_PRECOMPS_DIR = ""; VALID_ARCHS = x86_64; ZERO_LINK = NO; diff --git a/BuildTools/ubuntu/build_bionic.sh b/BuildTools/ubuntu/build_bionic.sh index 00b775890..b9144b4e0 100755 --- a/BuildTools/ubuntu/build_bionic.sh +++ b/BuildTools/ubuntu/build_bionic.sh @@ -97,7 +97,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL tar -xf $LIB_FILENAME fi @@ -133,7 +133,7 @@ echo $LIB_NAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL unzip $LIB_FILENAME fi @@ -163,14 +163,15 @@ echo "% Building: Xerces %" echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="xerces-c-3.1.1" - LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/xerces-c-3.1.1.tar.gz" + LIB_URL="https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/xerces-c-3.1.1.tar.gz" LIB_CHECKER="libxerces-c.a" LIB_FILENAME=$(basename "$LIB_URL" ".tar") echo $LIB_FILENAME + echo $LIB_URL cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL tar -xf $LIB_FILENAME fi @@ -197,21 +198,21 @@ install_library geos-3.6.2 https://download.osgeo.org/geos/geos-3.6.2.tar.bz2 l ######################################################################### # install PROJ.4 ######################################################################### -install_library proj-4.8.0 https://s3.us-east-2.amazonaws.com/geodabuild/proj-4.8.0.tar.gz libproj.a +install_library proj-4.8.0 https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/proj-4.8.0.tar.gz libproj.a ######################################################################### # install FreeXL ######################################################################### -#install_library freexl-1.0.0f https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz libfreexl.a +#install_library freexl-1.0.0f https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/freexl-1.0.0f.tar.gz libfreexl.a LIB_NAME=freexl-1.0.0f -LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/freexl-1.0.0f.tar.gz +LIB_URL=https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/freexl-1.0.0f.tar.gz LIB_CHECKER=libfreexl.a LIB_FILENAME=$LIB_NAME.tar.gz echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -f "$LIB_FILENAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL fi if ! [ -d "$LIB_NAME" ]; then @@ -234,19 +235,19 @@ fi ######################################################################### # install SQLite ######################################################################### -install_library sqlite-autoconf-3071602 https://s3.us-east-2.amazonaws.com/geodabuild/sqlite-autoconf-3071602.tar.gz libsqlite3.a +install_library sqlite-autoconf-3071602 https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/sqlite-autoconf-3071602.tar.gz libsqlite3.a ######################################################################### # install PostgreSQL ######################################################################### # libreadline, zlib echo "install libreadline, zlib" -install_library postgresql-9.2.4 https://s3.us-east-2.amazonaws.com/geodabuild/postgresql-9.2.4.tar.bz2 libpq.a +install_library postgresql-9.2.4 https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/postgresql-9.2.4.tar.bz2 libpq.a ######################################################################### # install libjpeg ######################################################################### -install_library jpeg-8 https://s3.us-east-2.amazonaws.com/geodabuild/jpegsrc.v8.tar.gz libjpeg.a +install_library jpeg-8 https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/jpegsrc.v8.tar.gz libjpeg.a ######################################################################### # install libkml requires 1.3 @@ -260,13 +261,13 @@ echo "%%%%%%%%%%%%%%%%%%%%" { LIB_NAME="libkml" LIB_CHECKER="libkmlbase.a" - LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libkml-r680.tar.gz + LIB_URL=https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/libkml-r680.tar.gz LIB_FILENAME=libkml-r680.tar.gz echo $LIB_NAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL fi if ! [ -d "$LIB_NAME" ]; then @@ -328,14 +329,14 @@ echo "% Building: Spatialite %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=libspatialite-4.0.0 - LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/libspatialite-4.0.0.tar.gz + LIB_URL=https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/libspatialite-4.0.0.tar.gz LIB_FILENAME=$(basename "$LIB_URL" ".tar") LIB_CHECKER=libspatialite.a echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL tar -xf $LIB_FILENAME fi @@ -362,13 +363,13 @@ echo "% Building: MySQL %" echo "%%%%%%%%%%%%%%%%%%%" { LIB_NAME=mysql-5.6.14 - LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/mysql-5.6.14.tar.gz + LIB_URL=https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/mysql-5.6.14.tar.gz LIB_CHECKER=libmysqlclient.a echo $LIB_NAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL tar -xf $LIB_NAME.tar.gz #cp $GEODA_HOME/dep/mysql/my_default.h $GEODA_HOME/temp/mysql-5.6.14/include/my_default.h fi @@ -396,14 +397,14 @@ echo "%%%%%%%%%%%%%%%%%%%" # Eigen3 ######################################################################### LIB_NAME=eigen3 -LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/eigen3.zip +LIB_URL=https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/eigen3.zip LIB_CHECKER=Dense LIB_FILENAME=$LIB_NAME.zip echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -f "$LIB_FILENAME" ] ; then - curl -O $LIB_URL + curl -LO $LIB_URL fi if ! [ -d "$LIB_NAME" ]; then @@ -431,7 +432,7 @@ echo "% Building: Boost 1.57 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%" { LIB_NAME=boost_1_57_0 - LIB_URL=https://s3.us-east-2.amazonaws.com/geodabuild/boost_1_57_0.tar.gz + LIB_URL=http://sourceforge.net/projects/boost/files/boost/1.57.0/boost_1_57_0.tar.gz LIB_FILENAME=boost_1_57_0.tar.gz LIB_CHECKER=libboost_thread.a echo $LIB_FILENAME @@ -439,7 +440,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -f "$LIB_FILENAME" ]; then echo "$LIB_FILENAME not found. Downloading..." - curl -O $LIB_URL + curl -LO $LIB_URL else echo "$LIB_FILENAME found. Skipping download." fi @@ -478,7 +479,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%" echo "% Building: JSON Spirit %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_NAME="json_spirit_v4.08" -LIB_URL="https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip" +LIB_URL="https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/json_spirit_v4.08.zip" LIB_CHECKER="libjson_spirit.a" LIB_FILENAME="json_spirit_v4.08.zip" echo $LIB_FILENAME @@ -486,7 +487,7 @@ echo $LIB_FILENAME cd $DOWNLOAD_HOME if ! [ -d "$LIB_NAME" ]; then - curl -O https://s3.us-east-2.amazonaws.com/geodabuild/json_spirit_v4.08.zip + curl -LO https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/json_spirit_v4.08.zip unzip $LIB_FILENAME fi @@ -526,7 +527,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -d "$CLAPACK_NAME" ]; then - curl -O https://s3.us-east-2.amazonaws.com/geodabuild/clapack.tgz + curl -LO https://github.com/GeoDaCenter/geodabuild/releases/download/1.14/clapack.tgz tar -xvf clapack.tgz fi @@ -569,16 +570,16 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" LIB_CHECKER=libjson-c.a if ! [ -d "$LIB_NAME" ] ; then - git clone https://github.com/json-c/json-c.git + git clone https://github.com/json-c/json-c.git fi if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then cd $LIB_NAME - sh autogen.sh + sh autogen.sh ./configure --prefix=$PREFIX - make - make install + make + make install fi #if ! [ -f "$PREFIX/lib/$LIB_CHECKER" ] ; then @@ -587,6 +588,22 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" #fi } +######################################################################### +# install Spectra +######################################################################### +echo "" +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +echo "% Building: Spectra " +echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" +{ + + LIB_NAME=spectra + + if ! [ -d "$LIB_NAME" ] ; then + git clone https://github.com/yixuan/spectra.git + fi +} + ######################################################################### # install GDAL/OGR ######################################################################### @@ -635,12 +652,12 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" ######################################################################### echo "" echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" -echo "% Building wxWidgets 3.0.2 %" +echo "% Building wxWidgets 3.1.2 %" echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" # sudo apt-get install libgtk2.0-dev libglu1-mesa-dev libgl1-mesa-dev { LIB_NAME=wxWidgets-3.1.2 - LIB_URL="https://geodabuild.s3.us-east-2.amazonaws.com/wxWidgets-3.1.2.tar.bz2" + LIB_URL="https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.tar.bz2" LIB_FILENAME=$(basename "$LIB_URL" ".tar.bz2") LIB_CHECKER=wx-config @@ -648,7 +665,7 @@ echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%" cd $DOWNLOAD_HOME if ! [ -f "$LIB_FILENAME" ] ; then - curl -k -o $LIB_FILENAME $LIB_URL + curl -OL $LIB_URL fi if ! [ -d "$LIB_NAME" ]; then diff --git a/BuildTools/ubuntu/create_deb_bionic.sh b/BuildTools/ubuntu/create_deb_bionic.sh index daa5b0cab..4368fccac 100755 --- a/BuildTools/ubuntu/create_deb_bionic.sh +++ b/BuildTools/ubuntu/create_deb_bionic.sh @@ -39,7 +39,7 @@ fi rm -f *.deb if [ $# -ne 1 ]; then - dpkg -b product/ geoda_1.14-1bionic1_amd64.deb + dpkg -b product/ geoda_1.16-1bionic1_amd64.deb else - dpkg -b product/ geoda_1.14-1$1.deb + dpkg -b product/ geoda_1.16-1$1.deb fi diff --git a/BuildTools/ubuntu/create_deb_disco.sh b/BuildTools/ubuntu/create_deb_disco.sh index 6b487896a..ffe07b0f7 100755 --- a/BuildTools/ubuntu/create_deb_disco.sh +++ b/BuildTools/ubuntu/create_deb_disco.sh @@ -39,7 +39,7 @@ fi rm -f *.deb if [ $# -ne 1 ]; then - dpkg -b product/ geoda_1.14-1disco1_amd64.deb + dpkg -b product/ geoda_1.16-1disco1_amd64.deb else - dpkg -b product/ geoda_1.14-1$1.deb + dpkg -b product/ geoda_1.16-1$1.deb fi diff --git a/BuildTools/ubuntu/create_deb_xenial.sh b/BuildTools/ubuntu/create_deb_xenial.sh index 8af427c40..8761e8d29 100755 --- a/BuildTools/ubuntu/create_deb_xenial.sh +++ b/BuildTools/ubuntu/create_deb_xenial.sh @@ -39,7 +39,7 @@ fi rm -f *.deb if [ $# -ne 1 ]; then - dpkg -b product/ geoda_1.14-1xenial1_amd64.deb + dpkg -b product/ geoda_1.16-1xenial1_amd64.deb else - dpkg -b product/ geoda_1.14-1$1.deb + dpkg -b product/ geoda_1.16-1$1.deb fi diff --git a/BuildTools/ubuntu/package/DEBIAN/control b/BuildTools/ubuntu/package/DEBIAN/control index 1ebbfb6b5..3bfd2e239 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control +++ b/BuildTools/ubuntu/package/DEBIAN/control @@ -1,5 +1,5 @@ Package: geoda -Version: 1.12-1xenial1 +Version: 1.16-1xenial1 Architecture: i386 Priority: optional Section: graphics diff --git a/BuildTools/ubuntu/package/DEBIAN/control1804 b/BuildTools/ubuntu/package/DEBIAN/control1804 index 285e53c50..a94150982 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control1804 +++ b/BuildTools/ubuntu/package/DEBIAN/control1804 @@ -1,5 +1,5 @@ Package: geoda -Version: 1.14-1bionic1 +Version: 1.16-1bionic1 Architecture: amd64 Priority: optional Section: graphics diff --git a/BuildTools/ubuntu/package/DEBIAN/control64 b/BuildTools/ubuntu/package/DEBIAN/control64 index 6c1d5d9ea..f9419f0e6 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control64 +++ b/BuildTools/ubuntu/package/DEBIAN/control64 @@ -1,5 +1,5 @@ Package: geoda -Version: 1.14-1xenial1 +Version: 1.16-1xenial1 Architecture: amd64 Priority: optional Section: graphics diff --git a/BuildTools/ubuntu/package/DEBIAN/control_disco b/BuildTools/ubuntu/package/DEBIAN/control_disco index d4d1aa3b2..728af56d4 100644 --- a/BuildTools/ubuntu/package/DEBIAN/control_disco +++ b/BuildTools/ubuntu/package/DEBIAN/control_disco @@ -1,5 +1,5 @@ Package: geoda -Version: 1.14-1disco1 +Version: 1.16-1disco1 Architecture: amd64 Priority: optional Section: graphics diff --git a/BuildTools/windows/GeoDa.vcxproj b/BuildTools/windows/GeoDa.vcxproj index 24831e552..92d0694a5 100644 --- a/BuildTools/windows/GeoDa.vcxproj +++ b/BuildTools/windows/GeoDa.vcxproj @@ -125,7 +125,7 @@ temp\wxWidgets-3.1.0\include;%(AdditionalIncludeDirectories) - opencl.lib;zlibstat.lib;gdal_i.lib;libcurl.lib;libboost_date_time-vc100-mt-gd-1_57.lib;libboost_thread-vc100-mt-gd-1_57.lib;libboost_atomic-vc100-mt-gd-1_57.lib;libboost_regex-vc100-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;sqlite3_i.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) + opencl.lib;zlibstat.lib;gdal_i.lib;libcurl.lib;libboost_date_time-vc100-mt-gd-1_57.lib;libboost_thread-vc100-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;sqlite3_i.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) C:\Intel\OpenCL\sdk\lib\x86;dep\zlib\lib;C:\OSGeo4W\lib;temp\wxWidgets-3.1.0\lib\vc_dll;temp\CLAPACK-3.1.1-VisualStudio\LIB\Win32;temp\boost_1_57_0\stage\lib;temp\json_spirit_v4.08\Debug;%(AdditionalLibraryDirectories) false %(IgnoreSpecificDefaultLibraries) @@ -170,7 +170,7 @@ Disabled - C:\Intel\OpenCL\sdk\include;dep\zlib\include;C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;%(AdditionalIncludeDirectories) + C:\Intel\OpenCL\sdk\include;dep\zlib\include;C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswud;temp\json_spirit_v4.08;temp\eigen3;temp\spectra\include;%(AdditionalIncludeDirectories) WIN32;DEBUG;_DEBUG;_WINDOWS;__WXMSW__;__WXDEBUG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) false EnableFastChecks @@ -192,7 +192,7 @@ temp\wxWidgets-3.1.0\include;%(AdditionalIncludeDirectories) - opencl.lib;zlibstat.lib;gdal_i.lib;libcurl.lib;libboost_date_time-vc100-mt-gd-1_57.lib;libboost_atomic-vc100-mt-gd-1_57.lib;libboost_thread-vc100-mt-gd-1_57.lib;libboost_regex-vc100-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) + opencl.lib;zlibstat.lib;gdal_i.lib;libcurl.lib;libboost_atomic-vc100-mt-gd-1_57.lib;libboost_regex-vc100-mt-gd-1_57.lib;libboost_date_time-vc100-mt-gd-1_57.lib;libboost_thread-vc100-mt-gd-1_57.lib;BLAS.lib;clapack.lib;libf2c.lib;json_spirit_lib.lib;GlU32.lib;OpenGL32.lib;wxmsw31ud.lib;wxmsw31ud_gl.lib;wxtiffd.lib;wxjpegd.lib;wxpngd.lib;wxzlibd.lib;wxregexud.lib;wxexpatd.lib;wsock32.lib;comctl32.lib;winmm.lib;rpcrt4.lib;%(AdditionalDependencies) C:\Intel\OpenCL\sdk\lib\x64;dep\zlib\lib;C:\OSGeo4W\lib;temp\wxWidgets-3.1.0\lib\vc_x64_dll;temp\CLAPACK-3.1.1-VisualStudio\LIB\x64;temp\boost_1_57_0\stage\lib;temp\json_spirit_v4.08\Debug;%(AdditionalLibraryDirectories) @@ -270,7 +270,7 @@ - C:\Intel\OpenCL\sdk\include;C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswu;temp\json_spirit_v4.08;temp\eigen3;dep\zlib\include;%(AdditionalIncludeDirectories) + C:\Intel\OpenCL\sdk\include;C:\OSGeo4W\include;temp\boost_1_57_0;temp\wxWidgets-3.1.0\include;temp\wxWidgets-3.1.0\lib\vc_x64_dll\mswu;temp\json_spirit_v4.08;temp\eigen3;dep\zlib\include;temp\spectra\include;%(AdditionalIncludeDirectories) WIN32;_WINDOWS;__WXMSW__;__NO_VC_CRTDBG__;WXUSINGDLL;UNICODE;%(PreprocessorDefinitions) MultiThreadedDLL @@ -312,17 +312,33 @@ + + + + + + + + + + + + + + + + @@ -331,8 +347,10 @@ + + @@ -342,22 +360,29 @@ + + + + + + + @@ -366,6 +391,7 @@ + @@ -373,11 +399,13 @@ + + @@ -390,6 +418,7 @@ + @@ -438,19 +467,29 @@ + + + + + + + + + + @@ -472,10 +511,12 @@ + + @@ -488,27 +529,34 @@ + + + + + + + @@ -518,6 +566,7 @@ + @@ -526,12 +575,14 @@ + + @@ -548,6 +599,7 @@ + diff --git a/BuildTools/windows/GeoDa.vcxproj.filters b/BuildTools/windows/GeoDa.vcxproj.filters index f66e8c1e6..268453aea 100644 --- a/BuildTools/windows/GeoDa.vcxproj.filters +++ b/BuildTools/windows/GeoDa.vcxproj.filters @@ -56,6 +56,12 @@ {dcde4097-4967-4ebe-98cd-897b7657a5d2} + + {d0a2af4e-5095-4527-93ef-766cbb72f6f5} + + + {499e618f-f33a-4130-81c6-09205aad99f8} + @@ -862,6 +868,73 @@ Explore + + Algorithms + + + DialogTools + + + Algorithms\loess + + + Algorithms\loess + + + DialogTools + + + + Explore + + + Algorithms + + + Explore + + + Algorithms + + + Algorithms + + + Algorithms\smacof + + + Explore + + + Algorithms + + + Explore + + + Algorithms + + + DialogTools + + + Explore + + + DialogTools + + + DialogTools + + + DialogTools + + + DialogTools + + + Algorithms + @@ -1563,5 +1636,90 @@ Explore + + Algorithms + + + DialogTools + + + Algorithms\loess + + + Algorithms\loess + + + Algorithms\loess + + + Algorithms\loess + + + Algorithms\loess + + + Algorithms\loess + + + DialogTools + + + + Explore + + + Algorithms + + + Explore + + + Algorithms + + + Algorithms\smacof + + + Algorithms\smacof + + + Algorithms\smacof + + + Algorithms\smacof + + + Explore + + + Algorithms + + + Explore + + + Algorithms + + + DialogTools + + + Explore + + + DialogTools + + + DialogTools + + + DialogTools + + + DialogTools + + + Algorithms + \ No newline at end of file diff --git a/BuildTools/windows/installer/32bit/GeoDa.iss b/BuildTools/windows/installer/32bit/GeoDa.iss index 8df63de15..06c7b2ae9 100644 --- a/BuildTools/windows/installer/32bit/GeoDa.iss +++ b/BuildTools/windows/installer/32bit/GeoDa.iss @@ -5,7 +5,7 @@ AppPublisherURL=https://spatial.uchiago.edu/ AppSupportURL=https://spatial.uchiago.edu/ AppUpdatesURL=https://spatial.uchiago.edu/ AppSupportPhone=(480)965-7533 -AppVersion=1.14 +AppVersion=1.16 DefaultDirName={pf}\GeoDa Software DefaultGroupName=GeoDa Software ; Since no icons will be created in "{group}", we don't need the wizard diff --git a/BuildTools/windows/installer/64bit/GeoDa.iss b/BuildTools/windows/installer/64bit/GeoDa.iss index 4ce84d57c..2c0f2ccc0 100644 --- a/BuildTools/windows/installer/64bit/GeoDa.iss +++ b/BuildTools/windows/installer/64bit/GeoDa.iss @@ -5,7 +5,7 @@ AppPublisherURL=https://spatial.uchiago.edu/ AppSupportURL=https://spatial.uchiago.edu/ AppUpdatesURL=https://spatial.uchiago.edu/ AppSupportPhone=(480)965-7533 -AppVersion=1.14 +AppVersion=1.16 DefaultDirName={pf}\GeoDa Software DefaultGroupName=GeoDa Software ; Since no icons will be created in "{group}", we don't need the wizard diff --git a/DataViewer/DataViewerEditFieldPropertiesDlg.cpp b/DataViewer/DataViewerEditFieldPropertiesDlg.cpp index 5a17873f0..68a96f83b 100644 --- a/DataViewer/DataViewerEditFieldPropertiesDlg.cpp +++ b/DataViewer/DataViewerEditFieldPropertiesDlg.cpp @@ -449,17 +449,18 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) wxArrayInt wx_col_order; wxGrid* grid = project->FindTableGrid(); int n_cols = table_int->GetNumberCols(); + double cur_col_size = 0; + // insert new col + int from_col = table_int->FindColId(var_name); + int to_col = table_int->InsertCol(new_type, tmp_name, from_col); + if (grid) { for (int i=0; iGetColPos(i)); } + cur_col_size = grid->GetColSize(from_col); } - // insert new col - int from_col = table_int->FindColId(var_name); - double cur_col_size = grid->GetColSize(from_col); - int to_col = table_int->InsertCol(new_type, tmp_name, from_col); - // get col index of old var again from_col = table_int->FindColId(var_name); int num_rows = table_int->GetNumberRows(); @@ -503,9 +504,10 @@ void DataViewerEditFieldPropertiesDlg::OnCellChanging( wxGridEvent& ev ) for (int i=0; iGetNumberCols(); i++) { grid->SetColPos(i, wx_col_order[i]); } + // adjust the column size + grid->SetColSize(to_col, cur_col_size); } - // adjust the column size - grid->SetColSize(to_col, cur_col_size); + } catch(GdaLocalSeparatorException& e) { return; diff --git a/DataViewer/MergeTableDlg.cpp b/DataViewer/MergeTableDlg.cpp index d111ea859..75f07fc73 100644 --- a/DataViewer/MergeTableDlg.cpp +++ b/DataViewer/MergeTableDlg.cpp @@ -70,8 +70,8 @@ MergeTableDlg::MergeTableDlg(wxWindow* parent, Project* _project_s, SetParent(parent); m_wx_encoding = NULL; - table_int = project_s->GetTableInt(), - frames_manager = project_s->GetFramesManager(), + table_int = project_s->GetTableInt(); + frames_manager = project_s->GetFramesManager(); CreateControls(); Init(); @@ -173,12 +173,12 @@ void MergeTableDlg::Init() std::set field_name_set; std::vector col_id_map; table_int->FillColIdMap(col_id_map); - for (size_t i=0; iGetColName(id); table_fnames.insert(group_name); int tms = table_int->IsColTimeVariant(id) ? table_int->GetColTimeSteps(id) : 1; - for (size_t t=0; tGetColType(id, i); wxString field_name = table_int->GetColName(id, i); // only String, Integer can be keys for merging @@ -255,7 +255,7 @@ void MergeTableDlg::OnOpenClick( wxCommandEvent& ev ) m_include_list->Clear(); m_exclude_list->Clear(); - for (size_t i=0; i < merge_layer_proxy->GetNumFields(); i++) { + for (int i=0; i < merge_layer_proxy->GetNumFields(); i++) { GdaConst::FieldType field_type = merge_layer_proxy->GetFieldType(i); wxString name = merge_layer_proxy->GetFieldName(i); wxString dedup_name = name; @@ -349,7 +349,7 @@ bool MergeTableDlg::CheckKeys(wxString key_name, vector& key_vec, { std::map > dup_dict; // value:[] - for (int i=0, iend=key_vec.size(); i& merged_fnames_dict) // show a field name correction dialog GdaConst::DataSourceType ds_type = table_int->GetDataSourceType(); FieldNameCorrectionDlg fc_dlg(ds_type, + table_fnames, merged_fnames_dict, merged_field_names, dup_merged_field_names, @@ -441,6 +442,7 @@ void MergeTableDlg::OnMergeClick( wxCommandEvent& ev ) } OuterJoinMerge(); } + //Init(); ev.Skip(); } @@ -565,7 +567,7 @@ void MergeTableDlg::OuterJoinMerge() return; int n_rows = table_int->GetNumberRows(); - int n_merge_field = merged_field_names.size(); + //int n_merge_field = (int)merged_field_names.size(); map rowid_map; @@ -637,8 +639,8 @@ void MergeTableDlg::OuterJoinMerge() // start to merge std::vector geoms; std::vector in_geoms; - OGRSpatialReference* spatial_ref; - Shapefile::ShapeType shape_type; + OGRSpatialReference* spatial_ref = NULL; + Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; if (!project_s->IsTableOnlyProject()) { // geometric dataset. If table-only dataset, only out join table @@ -669,7 +671,7 @@ void MergeTableDlg::OuterJoinMerge() std::vector new_geoms = geoms; vector new_key_vec = key1_vec; map idx2_dict; - int idx2 = key1_vec.size(); + int idx2 = (int)key1_vec.size(); for (int i=0; i undefs(new_rows, true); @@ -708,7 +710,7 @@ void MergeTableDlg::OuterJoinMerge() } } // all columns from datasource - int in_cols = merged_field_names.size(); + int in_cols = (int)merged_field_names.size(); bool overwrite_field = m_overwrite_field->IsChecked(); for (int i=0; iGetNumberRows(); - int n_merge_field = merged_field_names.size(); + int n_merge_field = (int)merged_field_names.size(); map rowid_map; if (m_key_val_rb->GetValue()==1) { // check merge by key/record order @@ -832,7 +834,7 @@ void MergeTableDlg::LeftJoinMerge() m_wx_encoding)); } if (CheckKeys(key2_name, key2_vec, key2_map) == false) { - return; + //return; } // make sure key1 <= key2, and store their mappings diff --git a/DataViewer/OGRTable.cpp b/DataViewer/OGRTable.cpp index 2c582f373..cf5361ba7 100644 --- a/DataViewer/OGRTable.cpp +++ b/DataViewer/OGRTable.cpp @@ -1631,7 +1631,7 @@ bool OGRTable::IsValidDBColName(const wxString& col_nm, if ( field_len < col_nm.length() ) { if ( fld_warn_msg ) { *fld_warn_msg = _("The length of field name should be between 1 and %d.\nCurrent field length (%d) is not valid"); - *fld_warn_msg = wxString::Format(*fld_warn_msg, field_len, col_nm.length()); + *fld_warn_msg = wxString::Format(*fld_warn_msg, (int)field_len, (int)col_nm.length()); } return false; } diff --git a/DataViewer/TableBase.cpp b/DataViewer/TableBase.cpp index d07e21f43..c10babc39 100644 --- a/DataViewer/TableBase.cpp +++ b/DataViewer/TableBase.cpp @@ -120,6 +120,7 @@ void wxGridCellInt64Editor::BeginEdit(int row, int col, wxGrid* grid) } DoBeginEdit(value); } else { + m_value = 0; DoBeginEdit("0"); } } @@ -223,7 +224,6 @@ wxString wxGridCellDoubleRenderer::GetString(const wxGrid& grid, int row, int co double val; wxString text = table->GetValue(row, col); - LOG_MSG(text); if ( text.ToDouble(&val) ) { long double v; sscanf(text.c_str(), "%Lf", &v); @@ -287,7 +287,7 @@ void wxGridCellDoubleEditor::Create(wxWindow* parent, wxGridCellTextEditor::Create(parent, id, evtHandler); #if wxUSE_VALIDATORS - wxString name_chars="-+.0123456789"; + wxString name_chars="-+.,0123456789"; wxTextValidator name_validator(wxFILTER_INCLUDE_CHAR_LIST); name_validator.SetCharIncludes(name_chars); Text()->SetValidator(name_validator); diff --git a/DataViewer/TableInterface.cpp b/DataViewer/TableInterface.cpp index 8c8fd81cf..ea580963a 100644 --- a/DataViewer/TableInterface.cpp +++ b/DataViewer/TableInterface.cpp @@ -18,6 +18,7 @@ */ #include #include +#include "../GeneralWxUtils.h" #include "../GenUtils.h" #include "../logger.h" #include "TableInterface.h" @@ -275,6 +276,70 @@ void TableInterface::GetColData(int col, int time, std::vector str_id_vec(GetNumberRows()); + int col = FindColId(id); + if (GetColType(col) == GdaConst::long64_type) { + GetColData(col, 0, str_id_vec); + + } else if (GetColType(col) == GdaConst::string_type) { + // to handle string field with only numbers + // Note: can't handle real string (a-zA-Z) here since it's hard + // to control in weights file (.gal/.gwt/..) + GetColData(col, 0, str_id_vec); + + wxRegEx regex; + regex.Compile("^[0-9a-zA-Z_]+$"); + + for (size_t i=0, iend=str_id_vec.size(); i dup_ids; + std::set id_set; + std::map > dup_dict; // value:[] + + for (size_t i=0, iend=str_id_vec.size(); i ids; + dup_dict[str_id] = ids; + } + dup_dict[str_id].push_back((int)i); + } + if (id_set.size() != GetNumberRows()) { + wxString msg = id + _(" has duplicate values. Please choose a different ID Variable.\n\nDetails:"); + wxString details = "value, row\n"; + + std::map >::iterator it; + for (it=dup_dict.begin(); it!=dup_dict.end(); it++) { + wxString val = it->first; + std::vector& ids = it->second; + if (ids.size() > 1) { + for (int i=0; iShow(true); + + return false; + } + return true; +} wxString TableInterface::GetEncodingName() { diff --git a/DataViewer/TableInterface.h b/DataViewer/TableInterface.h index af7eca9f6..c28e04834 100644 --- a/DataViewer/TableInterface.h +++ b/DataViewer/TableInterface.h @@ -340,7 +340,10 @@ class TableInterface const wxString& val) = 0; virtual std::map GetMetaData(int col_id) = 0; - + + // check the column "id" can be used as an unique ID variable + virtual bool CheckID(const wxString& id); + protected: wxString open_err_msg; diff --git a/DataViewer/VarOrderPtree.cpp b/DataViewer/VarOrderPtree.cpp index 92338e9e2..f8097aa68 100644 --- a/DataViewer/VarOrderPtree.cpp +++ b/DataViewer/VarOrderPtree.cpp @@ -298,7 +298,8 @@ bool VarOrderPtree::CorrectVarGroups(const std::vector& ds_var_list, } // Append all items in ds_var_list not in var_set - BOOST_FOREACH(const wxString& v, ds_var_list) { + for (int i=0; iBind(wxEVT_LEFT_UP, &C3DControlPan::OnLineColorClick, this); } void C3DControlPan::UpdateAxesLabels(const wxString& x, const wxString& y, @@ -224,3 +243,49 @@ void C3DControlPan::OnCSlzsUpdated( wxCommandEvent& event ) if (this->m_select->GetValue()) template_frame->canvas->UpdateSelect(); template_frame->canvas->Refresh(); } + +void C3DControlPan::OnQuanlityUpdated( wxCommandEvent& event ) +{ + template_frame->canvas->quality = (int) m_quality->GetValue(); + template_frame->canvas->Refresh(); +} + +void C3DControlPan::OnRadiusUpdated( wxCommandEvent& event ) +{ + template_frame->canvas->radius = (double) m_radius->GetValue() / 100.0; + template_frame->canvas->Refresh(); +} + +void C3DControlPan::OnCShowNbrsClick( wxCommandEvent& event ) +{ + template_frame->canvas->ShowNeighbors = m_show_neighbors->GetValue(); + template_frame->canvas->Refresh(); +} + +void C3DControlPan::OnCShowConnectionClick( wxCommandEvent& event ) +{ + template_frame->canvas->ShowConnections = m_show_connections->GetValue(); + template_frame->canvas->Refresh(); +} + +void C3DControlPan::OnLineWidthUpdate( wxCommandEvent& event ) +{ + template_frame->canvas->linewidth = (double) m_linewidth->GetValue(); + template_frame->canvas->Refresh(); +} + +void C3DControlPan::OnLineColorClick( wxMouseEvent& event ) +{ + wxColourData clr_data; + clr_data.SetColour(template_frame->canvas->linecolor); + clr_data.SetChooseFull(true); + wxColourDialog dialog(this, &clr_data); + dialog.SetTitle(_("Choose Line Color")); + if (dialog.ShowModal() != wxID_OK) return; + + wxColourData retData = dialog.GetColourData(); + template_frame->canvas->linecolor = retData.GetColour(); + template_frame->canvas->Refresh(); + + m_linecolor->SetBackgroundColour(retData.GetColour()); +} diff --git a/DialogTools/3DControlPan.h b/DialogTools/3DControlPan.h index 3b596193a..232e3aeb0 100644 --- a/DialogTools/3DControlPan.h +++ b/DialogTools/3DControlPan.h @@ -66,6 +66,14 @@ class C3DControlPan: public wxPanel void OnCSlysUpdated( wxCommandEvent& event ); void OnCSlzpUpdated( wxCommandEvent& event ); void OnCSlzsUpdated( wxCommandEvent& event ); + void OnQuanlityUpdated( wxCommandEvent& event ); + void OnRadiusUpdated( wxCommandEvent& event ); + void OnCShowNbrsClick( wxCommandEvent& event ); + void OnCShowConnectionClick( wxCommandEvent& event ); + void OnLineWidthUpdate(wxCommandEvent& event); + void OnLineColorClick(wxMouseEvent& event); + + wxCheckBox* m_data; wxCheckBox* m_prox; @@ -84,6 +92,12 @@ class C3DControlPan: public wxPanel wxSlider* m_ys; wxSlider* m_zp; wxSlider* m_zs; + wxSlider* m_quality; + wxSlider* m_radius; + wxCheckBox* m_show_neighbors; + wxCheckBox* m_show_connections; + wxSlider* m_linewidth; + wxStaticBitmap* m_linecolor; C3DPlotFrame* template_frame; }; diff --git a/DialogTools/AZPDlg.cpp b/DialogTools/AZPDlg.cpp new file mode 100644 index 000000000..a029a9fc5 --- /dev/null +++ b/DialogTools/AZPDlg.cpp @@ -0,0 +1,719 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../Explore/MapNewView.h" +#include "../Project.h" +#include "../Algorithms/cluster.h" +#include "../Algorithms/azp.h" + +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "SaveToTableDlg.h" +#include "AZPDlg.h" + + +BEGIN_EVENT_TABLE( AZPDlg, wxDialog ) +EVT_CLOSE( AZPDlg::OnClose ) +END_EVENT_TABLE() + +AZPDlg::AZPDlg(wxFrame* parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("AZP Settings")) +{ + wxLogMessage("Open AZP dialog."); + CreateControls(); +} + +AZPDlg::~AZPDlg() +{ + wxLogMessage("On AZPDlg::~AZPDlg"); +} + +void AZPDlg::CreateControls() +{ + wxLogMessage("On AZPDlg::CreateControls"); + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(800,820), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate( 5, 5 ); + + wxPanel *panel = new wxPanel(scrl); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + AddSimpleInputCtrls(panel, vbox, false, true/*show spatial weights controls*/); + + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(9,2,5,0); + + // Number of Regions + wxStaticText* st_region = new wxStaticText(panel, wxID_ANY, _("Number of Regions:")); + txt_regions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); + txt_regions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + gbox->Add(st_region, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_regions, 1, wxEXPAND); + + // Method + wxStaticText* st19 = new wxStaticText(panel, wxID_ANY, _("Method:")); + wxString choices19[] = {"AZP", "AZP-Tabu Search", "AZP-Simulated Annealing"}; + m_localsearch = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 3, choices19); + m_localsearch->SetSelection(0); + wxBoxSizer *hbox19_1 = new wxBoxSizer(wxHORIZONTAL); + hbox19_1->Add(new wxStaticText(panel, wxID_ANY, _("Tabu Length:"))); + m_tabulength = new wxTextCtrl(panel, wxID_ANY, "10"); + hbox19_1->Add(m_tabulength); + m_tabulength->Disable(); + wxBoxSizer *hbox19_2 = new wxBoxSizer(wxHORIZONTAL); + hbox19_2->Add(new wxStaticText(panel, wxID_ANY, _("Cooling Rate:"))); + m_coolrate= new wxTextCtrl(panel, wxID_ANY, "0.85"); + hbox19_2->Add(m_coolrate); + m_coolrate->Disable(); + wxBoxSizer *vbox19 = new wxBoxSizer(wxVERTICAL); + vbox19->Add(m_localsearch, 1, wxEXPAND); + vbox19->Add(hbox19_1, 1, wxEXPAND); + vbox19->Add(hbox19_2, 1, wxEXPAND); + gbox->Add(st19, 0, wxALIGN_TOP | wxRIGHT | wxLEFT, 10); + gbox->Add(vbox19, 1, wxEXPAND); + + // Minimum Bound Control + AddMinBound(panel, gbox); + + // Min regions + st_minregions = new wxStaticText(panel, wxID_ANY, _("Min Region Size:")); + txt_minregions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); + txt_minregions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + gbox->Add(st_minregions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_minregions, 1, wxEXPAND); + + // Initial Regions + wxStaticText* st18 = new wxStaticText(panel, wxID_ANY, _("Initial Regions:")); + wxBoxSizer *hbox18 = new wxBoxSizer(wxHORIZONTAL); + chk_lisa = new wxCheckBox(panel, wxID_ANY, ""); + combo_lisa = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(160,-1)); + + hbox18->Add(chk_lisa,0, wxALIGN_CENTER_VERTICAL); + hbox18->Add(combo_lisa,0,wxALIGN_CENTER_VERTICAL); + combo_lisa->Disable(); + gbox->Add(st18, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox18, 1, wxEXPAND); + + InitLISACombobox(); + + wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("# Iterations:")); + m_iterations = new wxTextCtrl(panel, wxID_ANY, "99", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_iterations, 1, wxEXPAND); + st11->Hide(); + m_iterations->Hide(); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); + wxString choices13[] = {"Euclidean", "Manhattan"}; + m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); + m_distance->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_distance, 1, wxEXPAND); + + // Transformation + AddTransformation(panel, gbox); + + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); + + hbox17->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + hbox17->Add(seedButton,0,wxALIGN_CENTER_VERTICAL); + seedButton->Disable(); + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox17, 1, wxEXPAND); + + if (GdaConst::use_gda_user_seed) { + chk_seed->SetValue(true); + seedButton->Enable(); + } + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // Output + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); + m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); + //wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(m_textbox, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); + + // Buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, + wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + // Summary control + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + wxNotebook* notebook = AddSimpleReportCtrls(panel); + vbox1->Add(notebook, 1, wxEXPAND|wxALL,20); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(vbox1, 1, wxEXPAND | wxALL); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + okButton->Bind(wxEVT_BUTTON, &AZPDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &AZPDlg::OnClickClose, this); + chk_seed->Bind(wxEVT_CHECKBOX, &AZPDlg::OnSeedCheck, this); + seedButton->Bind(wxEVT_BUTTON, &AZPDlg::OnChangeSeed, this); + chk_lisa->Bind(wxEVT_CHECKBOX, &AZPDlg::OnLISACheck, this); + m_localsearch->Bind(wxEVT_CHOICE, &AZPDlg::OnLocalSearch, this); + +} + +void AZPDlg::OnLocalSearch(wxCommandEvent& event) +{ + wxLogMessage("On AZPDlg::OnLocalSearch"); + if ( m_localsearch->GetSelection() == 0) { + m_tabulength->Disable(); + m_coolrate->Disable(); + } else if ( m_localsearch->GetSelection() == 1) { + m_tabulength->Enable(); + m_coolrate->Disable(); + } else if ( m_localsearch->GetSelection() == 2) { + m_tabulength->Disable(); + m_coolrate->Enable(); + } +} +void AZPDlg::OnCheckMinBound(wxCommandEvent& event) +{ + wxLogMessage("On AZPDlg::OnLISACheck"); + AbstractClusterDlg::OnCheckMinBound(event); + + if (chk_floor->IsChecked()) { + //st_minregions->Disable(); + txt_minregions->Disable(); + } else { + //st_minregions->Enable(); + txt_minregions->Enable(); + } +} + +void AZPDlg::OnLISACheck(wxCommandEvent& event) +{ + wxLogMessage("On AZPDlg::OnLISACheck"); + bool use_lisa_seed = chk_lisa->GetValue(); + + if (use_lisa_seed) { + combo_lisa->Enable(); + } else { + combo_lisa->Disable(); + } +} + +void AZPDlg::OnSeedCheck(wxCommandEvent& event) +{ + wxLogMessage("On AZPDlg::OnSeedCheck"); + bool use_user_seed = chk_seed->GetValue(); + + if (use_user_seed) { + seedButton->Enable(); + if (GdaConst::use_gda_user_seed == false && GdaConst::gda_user_seed == 0) { + OnChangeSeed(event); + return; + } + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + seedButton->Disable(); + } +} + +void AZPDlg::OnChangeSeed(wxCommandEvent& event) +{ + wxLogMessage("On AZPDlg::OnChangeSeed"); + // prompt user to enter user seed (used globally) + wxString m; + m << _("Enter a seed value for random number generator:"); + + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << GdaConst::gda_user_seed; + + wxTextEntryDialog dlg(NULL, m, _("Enter a seed value"), cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + uint64_t new_seed_val = val; + GdaConst::gda_user_seed = new_seed_val; + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + wxString str_gda_user_seed; + str_gda_user_seed << GdaConst::gda_user_seed; + ogr_adapt.AddEntry("gda_user_seed", str_gda_user_seed.ToStdString()); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + wxString m = _("\"%s\" is not a valid seed. Seed unchanged."); + m = wxString::Format(m, dlg_val); + wxMessageDialog dlg(NULL, m, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + } +} + +void AZPDlg::InitLISACombobox() +{ + wxLogMessage("On AZPDlg::InitVariableCombobox"); + wxArrayString items; + + combo_lisa->Clear(); + + int cnt_lisa = 0; + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + GdaConst::FieldType ftype = table_int->GetColType(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + if (ftype == GdaConst::long64_type) + combo_lisa->Insert(nm, cnt_lisa++); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + if (ftype == GdaConst::long64_type) + combo_lisa->Insert(name, cnt_lisa++); + } + } + + combo_lisa->SetSelection(-1); + combo_lisa->SetStringSelection(select_lisa); +} + +void AZPDlg::update(TableState* o) +{ + InitVariableCombobox(combo_var); + InitLISACombobox(); +} + +void AZPDlg::OnClickClose(wxCommandEvent& event ) +{ + wxLogMessage("OnClickClose AZPDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void AZPDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close AZPDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +wxString AZPDlg::_printConfiguration() +{ + wxString txt; + + txt << _("Weights:") << "\t" << m_spatial_weights->GetString(m_spatial_weights->GetSelection()) << "\n"; + + //txt << _("# iterations:\t") << m_iterations->GetValue() << "\n"; + + txt << _("Number of regions:\t") << txt_minregions->GetValue() << "\n"; + + int local_search_method = m_localsearch->GetSelection(); + if (local_search_method == 0) { + txt << _("Local search:") << "\t" << _("AZP") << "\n"; + } else if (local_search_method == 1) { + txt << _("Local search:") << "\t" << _("AZP-Tabu") << "\n"; + txt << _("Tabu length:") << "\t" << m_tabulength->GetValue() << "\n"; + } else if (local_search_method == 2) { + txt << _("Local search:") << "\t" << _("AZP-Simulated Annealing") << "\n"; + txt << _("Cooling rate:") << "\t" << m_coolrate->GetValue() << "\n"; + } + if (chk_floor && chk_floor->IsChecked() && combo_floor->GetSelection() >= 0) { + int idx = combo_floor->GetSelection(); + wxString nm = name_to_nm[combo_floor->GetString(idx)]; + txt << _("Minimum bound:\t") << txt_floor->GetValue() << "(" << nm << ")" << "\n"; + } + + wxString min_region = txt_minregions->GetValue(); + if (!min_region.IsEmpty()) { + txt << _("Minimum # per pegion:\t") << min_region << "\n"; + } + + if (chk_lisa->IsChecked() && combo_lisa->GetSelection() >=0) { + txt << _("Initial rroups:\t") << combo_lisa->GetString(combo_lisa->GetSelection()) << "\n"; + } + txt << _("Initial value of objective function:") << "\t" << initial_of << "\n"; + txt << _("Final value of objective function:") << "\t" << final_of << "\n"; + txt << _("Distance function:\t") << m_distance->GetString(m_distance->GetSelection()) << "\n"; + + txt << _("Transformation:\t") << combo_tranform->GetString(combo_tranform->GetSelection()) << "\n"; + + return txt; +} + +void AZPDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click AZPDlg::OnOK"); + + if (GdaConst::use_gda_user_seed) { + setrandomstate(GdaConst::gda_user_seed); + resetrandom(); + } else { + setrandomstate(-1); + resetrandom(); + } + + // Get input data + int transform = combo_tranform->GetSelection(); + bool success = GetInputData(transform, 1); + if (!success) { + return; + } + + //wxString str_initial = m_iterations->GetValue(); + //if (str_initial.IsEmpty()) { + // wxString err_msg = _("Please enter iteration number"); + // wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + // dlg.ShowModal(); + // return; + //} + + // field name + wxString field_name = m_textbox->GetValue(); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving clustering results."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // Get Distance Selection + char dist = 'e'; // euclidean + int dist_sel = m_distance->GetSelection(); + char dist_choices[] = {'e','b'}; + dist = dist_choices[dist_sel]; + + // Weights selection + GalWeight* gw = CheckSpatialWeights(); + if (gw == NULL) { + return; + } + + // Check connectivity + if (!CheckConnectivity(gw)) { + wxString msg = _("The connectivity of selected spatial weights is incomplete, please adjust the spatial weights."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + } + + // Get p regions + wxString str_p = txt_regions->GetValue(); + long l_p; + if (str_p.ToLong(&l_p) == false) { + wxString err_msg = _("Please enter a valid number of regions."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int p = (int)l_p; + + // Get iteration numbers: not used + //int initial = 99; + //long value_initial; + //if(str_initial.ToLong(&value_initial)) { + // initial = value_initial; + //} + + // Get initial seed e.g LISA clusters + std::vector init_regions; + bool use_init_regions = chk_lisa->GetValue(); + if (use_init_regions) { + int idx = combo_lisa->GetSelection(); + if (idx < 0) { + use_init_regions = false; + } else { + select_lisa = combo_lisa->GetString(idx); + wxString nm = name_to_nm[select_lisa]; + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), nm); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int tm = name_to_tm_id[combo_lisa->GetString(idx)]; + std::vector vals; + table_int->GetColData(col, tm, vals); + init_regions.resize(vals.size()); + for (int i=0; i controllers; + + // Get Min regions + wxString str_min_region = txt_minregions->GetValue(); + long l_min_region = 0; + if (!str_min_region.IsEmpty() && str_min_region.ToLong(&l_min_region) == false) { + wxString err_msg = _("Please enter a valid number for Min Region Size."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + if (l_min_region > 0) { + std::vector ids(rows, 1); + ZoneControl zc(ids); + zc.AddControl(ZoneControl::SUM, + ZoneControl::MORE_THAN, l_min_region); + controllers.push_back(zc); + } + + // Get Bounds + double min_bound = GetMinBound(); + double* bound_vals = GetBoundVals(); + if (chk_floor->IsChecked()) { + if (combo_floor->GetSelection() < 0) { + wxString err_msg = _("Please enter minimum bound value"); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + select_floor = combo_floor->GetString(combo_floor->GetSelection()); + ZoneControl zc(rows, bound_vals); + zc.AddControl(ZoneControl::SUM, + ZoneControl::MORE_THAN, min_bound); + controllers.push_back(zc); + delete[] bound_vals; + } + + // Get local search method + int local_search_method = m_localsearch->GetSelection(); + int tabu_length = 10; + double cool_rate = 0.85; + if ( local_search_method == 0) { + m_tabulength->Disable(); + m_coolrate->Disable(); + } else if ( local_search_method == 1) { + wxString str_tabulength= m_tabulength->GetValue(); + long n_tabulength; + if (str_tabulength.ToLong(&n_tabulength)) { + tabu_length = (int)n_tabulength; + } + if (tabu_length < 1) { + wxString err_msg = _("Tabu length for Tabu Search algorithm has to be an integer number larger than 1 (e.g. 85)."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + } else if ( local_search_method == 2) { + wxString str_coolrate = m_coolrate->GetValue(); + str_coolrate.ToDouble(&cool_rate); + if ( cool_rate > 1 || cool_rate <= 0) { + wxString err_msg = _("Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + } + + // Get random seed + long long rnd_seed = (long long) time(0); + if (chk_seed->GetValue()) rnd_seed = GdaConst::gda_user_seed; + + //azp + int transpose = 0; // row wise + double** ragged_distances = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); + RawDistMatrix dm(ragged_distances); + + std::vector final_solution; + RegionMaker* azp; + if ( local_search_method == 0) { + azp = new AZP(p, gw->gal, input_data, &dm, rows, columns, + controllers, init_regions, rnd_seed); + + } else if ( local_search_method == 1) { + int convergence_criteria = std::max(10, rows / p); // vs 230 * sqrt(p) + azp = new AZPTabu(p, gw->gal, input_data, &dm, rows, columns, + controllers, tabu_length, convergence_criteria, + init_regions, rnd_seed); + } else { + int max_iter = 1; + azp = new AZPSA(p, gw->gal, input_data, &dm, rows, columns, + controllers, cool_rate, max_iter, init_regions, rnd_seed); + } + if (azp->IsSatisfyControls() == false) { + wxString msg = _("The clustering results violate the requirement of minimum bound or minimum number per region. Please adjust the input and try again."); + wxMessageDialog dlg(NULL, msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + } + final_solution = azp->GetResults(); + initial_of = azp->GetInitObjectiveFunction(); + final_of = azp->GetFinalObjectiveFunction(); + delete azp; + + vector > cluster_ids; + std::map > solution; + for (int i=0; i >::iterator it; + for (it = solution.begin(); it != solution.end(); ++it) { + cluster_ids.push_back(it->second); + } + + for (int i = 1; i < rows; i++) free(ragged_distances[i]); + free(ragged_distances); + + int ncluster = cluster_ids.size(); + vector clusters(rows, 0); + vector clusters_undef(rows, false); + + // sort result + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + + for (int i=0; i < ncluster; i++) { + int c = i + 1; + for (int j=0; jFindColId(field_name); + if ( col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + + col = table_int->InsertCol(GdaConst::long64_type, field_name, col_insert_pos, time_steps, m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (col > 0) { + table_int->SetColData(col, time, clusters); + table_int->SetColUndefined(col, time, clusters_undef); + } + + // show a cluster map + if (project->IsTableOnlyProject()) { + return; + } + std::vector new_var_info; + std::vector new_col_ids; + new_col_ids.resize(1); + new_var_info.resize(1); + new_col_ids[0] = col; + new_var_info[0].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[0].name = field_name; + new_var_info[0].is_time_variant = table_int->IsColTimeVariant(col); + table_int->GetMinMaxVals(new_col_ids[0], new_var_info[0].min, new_var_info[0].max); + new_var_info[0].sync_with_global_time = new_var_info[0].is_time_variant; + new_var_info[0].fixed_scale = true; + + + MapFrame* nf = new MapFrame(parent, project, + new_var_info, new_col_ids, + CatClassification::unique_values, + MapCanvas::no_smoothing, 4, + boost::uuids::nil_uuid(), + wxDefaultPosition, + GdaConst::map_default_size); + wxString ttl; + ttl << "AZP " << _("Cluster Map ") << "("; + ttl << ncluster; + ttl << " clusters)"; + nf->SetTitle(ttl); +} diff --git a/DialogTools/AZPDlg.h b/DialogTools/AZPDlg.h new file mode 100644 index 000000000..34cbb08ed --- /dev/null +++ b/DialogTools/AZPDlg.h @@ -0,0 +1,83 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_AZP_DLG_H___ +#define __GEODA_CENTER_AZP_DLG_H___ + +#include +#include +#include +#include + + +#include "../FramesManager.h" +#include "../VarTools.h" +#include "AbstractClusterDlg.h" + +class Project; +class TableInterface; + +class AZPDlg : public AbstractClusterDlg +{ +public: + AZPDlg(wxFrame *parent, Project* project); + virtual ~AZPDlg(); + + void CreateControls(); + + void OnOK( wxCommandEvent& event ); + void OnClickClose( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnLocalSearch(wxCommandEvent& event); + void OnSeedCheck(wxCommandEvent& event); + void OnChangeSeed(wxCommandEvent& event); + void OnLISACheck(wxCommandEvent& event); + + virtual void update(TableState* o); + virtual void OnCheckMinBound(wxCommandEvent& event); + virtual void InitLISACombobox(); + virtual wxString _printConfiguration(); + +private: + wxCheckBox* chk_seed; + wxCheckBox* chk_lisa; + + wxChoice* combo_lisa; + + wxChoice* m_localsearch; + wxChoice* m_distance; + wxTextCtrl* m_textbox; + wxTextCtrl* m_iterations; + + wxStaticText* st_minregions; + wxTextCtrl* txt_minregions; + wxTextCtrl* txt_regions; + wxTextCtrl* m_tabulength; + wxTextCtrl* m_coolrate; + wxButton* seedButton; + + wxString select_floor; + wxString select_lisa; + + double initial_of; + double final_of; + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/AbstractClusterDlg.cpp b/DialogTools/AbstractClusterDlg.cpp index 725ea2063..565cb20dd 100644 --- a/DialogTools/AbstractClusterDlg.cpp +++ b/DialogTools/AbstractClusterDlg.cpp @@ -28,48 +28,45 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "../VarCalc/WeightsManInterface.h" #include "../ShapeOperations/VoronoiUtils.h" +#include "../ShapeOperations/WeightsManState.h" #include "../ShapeOperations/PolysToContigWeights.h" #include "../Algorithms/texttable.h" #include "../Project.h" #include "../GeneralWxUtils.h" #include "../GenUtils.h" - +#include "../GdaConst.h" +#include "../GeoDa.h" #include "SaveToTableDlg.h" #include "AbstractClusterDlg.h" +bool AbstractClusterDlg::check_spatial_ref = true; AbstractClusterDlg::AbstractClusterDlg(wxFrame* parent_s, Project* project_s, wxString title) : frames_manager(project_s->GetFramesManager()), table_state(project_s->GetTableState()), + w_man_state(project_s->GetWManState()), wxDialog(NULL, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER), validator(wxFILTER_INCLUDE_CHAR_LIST), input_data(NULL), mask(NULL), weight(NULL), m_use_centroids(NULL), m_weight_centroids(NULL), m_wc_txt(NULL), chk_floor(NULL), combo_floor(NULL), txt_floor(NULL), txt_floor_pct(NULL), - slider_floor(NULL), combo_var(NULL), m_reportbox(NULL), gal(NULL) + slider_floor(NULL), combo_var(NULL), m_reportbox(NULL), gal(NULL), + return_additional_summary(false), m_spatial_weights(NULL), + has_x_cent(false), has_y_cent(false) { wxLogMessage("Open AbstractClusterDlg."); wxArrayString list; - wxString valid_chars(".0123456789"); + wxString valid_chars(".,0123456789"); size_t len = valid_chars.Length(); - for (size_t i=0; iregisterObserver(this); table_state->registerObserver(this); + w_man_state->registerObserver(this); } AbstractClusterDlg::~AbstractClusterDlg() @@ -95,6 +93,7 @@ AbstractClusterDlg::~AbstractClusterDlg() CleanData(); frames_manager->removeObserver(this); table_state->removeObserver(this); + w_man_state->removeObserver(this); } void AbstractClusterDlg::CleanData() @@ -124,7 +123,7 @@ bool AbstractClusterDlg::Init() if (table_int == NULL) return false; - num_obs = project->GetNumRecords(); + rows = project->GetNumRecords(); table_int->GetTimeStrings(tm_strs); return true; @@ -139,30 +138,28 @@ void AbstractClusterDlg::update(TableState* o) InitVariableCombobox(combo_var); } -bool AbstractClusterDlg::GetDefaultContiguity() +void AbstractClusterDlg::update(WeightsManState* o) { - if (gal== NULL) { - bool is_queen = true; - - if (project->IsPointTypeData()) { - std::vector > nbr_map; - project->GetVoronoiQueenNeighborMap(nbr_map); - gal = Gda::VoronoiUtils::NeighborMapToGal(nbr_map); - } else { - // assume polygons (no lines) - gal = PolysToContigWeights(project->main_data, is_queen); - } + // Need to refresh weights list + if (m_spatial_weights) { + InitSpatialWeights(m_spatial_weights); } - return gal != NULL; } bool AbstractClusterDlg::CheckConnectivity(GalWeight* gw) { - if (num_obs == 0 || gw == NULL) return false; + if (rows == 0 || gw == NULL) return false; GalElement* W = gw->gal; if (W == NULL) return false; - + + return CheckConnectivity(W); +} + +bool AbstractClusterDlg::CheckConnectivity(GalElement* W) +{ + if (W == NULL) return false; + // start from first node in W if (W[0].Size() == 0) return false; @@ -171,9 +168,9 @@ bool AbstractClusterDlg::CheckConnectivity(GalWeight* gw) std::list magzine; for (int i=0; iAdd(st, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); hbox0->Add(combo_var, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); - + + // add spatial weights selection control + wxBitmap w_bitmap(wxXmlResource::Get()->LoadBitmap("SpatialWeights_Bmp")); + weights_btn = new wxBitmapButton(panel, wxID_ANY, w_bitmap, wxDefaultPosition, + w_bitmap.GetSize(), wxTRANSPARENT_WINDOW | wxBORDER_NONE); + st_spatial_w = new wxStaticText(panel, wxID_ANY, _("Select Spatial Weights:")); + m_spatial_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(150,-1)); + wxBoxSizer *hbox_spatial_w = new wxBoxSizer(wxHORIZONTAL); + hbox_spatial_w->Add(st_spatial_w, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); + hbox_spatial_w->Add(m_spatial_weights, 0, wxALIGN_CENTER_VERTICAL| wxRIGHT, 10); + hbox_spatial_w->Add(weights_btn, 0, wxALIGN_CENTER_VERTICAL); + // init the spatial weights control + InitSpatialWeights(m_spatial_weights); + hbox0->Add(hbox_spatial_w, 0, wxLEFT | wxRIGHT | wxTOP, 10); + + if (!show_spatial_weights) { + st_spatial_w->Hide(); + m_spatial_weights->Hide(); + weights_btn->Hide(); + } else { + weights_btn->Bind(wxEVT_BUTTON, &AbstractClusterDlg::OnSpatialWeights, this); + } + vbox->Add(hbox0, 1, wxEXPAND | wxTOP | wxLEFT, 10); } void AbstractClusterDlg::AddInputCtrls(wxPanel *panel, wxBoxSizer* vbox, - bool show_auto_button) + bool show_auto_button, bool show_spatial_weights, + bool single_variable, bool add_centroids) { - wxStaticText* st = new wxStaticText (panel, wxID_ANY, _("Select Variables")); - + wxString ttl = single_variable ? _("Select a Variable") : _("Select Variables"); + wxStaticText* st = new wxStaticText (panel, wxID_ANY, ttl); + + long style = wxLB_HSCROLL| wxLB_NEEDED_SB; + if (!single_variable) style = style | wxLB_MULTIPLE; + combo_var = new wxListBox(panel, wxID_ANY, wxDefaultPosition, - wxSize(250,250), 0, NULL, - wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); - InitVariableCombobox(combo_var); + wxSize(250,250), 0, NULL, style); + InitVariableCombobox(combo_var, add_centroids); - m_use_centroids = new wxCheckBox(panel, wxID_ANY, - _("Use geometric centroids")); + m_use_centroids = new wxCheckBox(panel, wxID_ANY, _("Use geometric centroids")); auto_btn = new wxButton(panel, wxID_OK, _("Auto Weighting")); - auto_btn->Bind(wxEVT_BUTTON, &AbstractClusterDlg::OnAutoWeightCentroids, - this); - if (!show_auto_button) auto_btn->Hide(); + auto_btn->Bind(wxEVT_BUTTON, &AbstractClusterDlg::OnAutoWeightCentroids, this); + wxBoxSizer *hbox_c = new wxBoxSizer(wxHORIZONTAL); hbox_c->Add(m_use_centroids, 0); hbox_c->Add(auto_btn, 0); @@ -255,22 +276,55 @@ void AbstractClusterDlg::AddInputCtrls(wxPanel *panel, wxBoxSizer* vbox, m_weight_centroids = new wxSlider(panel, wxID_ANY, 100, 0, 100, wxDefaultPosition, wxSize(140, -1), wxSL_HORIZONTAL); + m_weight_centroids->SetRange(0,100); + m_weight_centroids->SetValue(100); m_wc_txt = new wxTextCtrl(panel, wxID_ANY, "1", wxDefaultPosition, - wxSize(40,-1), 0, validator); + wxSize(80,-1), 0, validator); wxBoxSizer *hbox_w = new wxBoxSizer(wxHORIZONTAL); hbox_w->Add(st_wc, 0, wxLEFT, 20); hbox_w->Add(st_w0, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5); hbox_w->Add(m_weight_centroids, 0, wxEXPAND); hbox_w->Add(st_w1, 0, wxALIGN_CENTER_VERTICAL); hbox_w->Add(m_wc_txt, 0, wxALIGN_TOP|wxLEFT, 5); - - - wxStaticBoxSizer *hbox0 = new wxStaticBoxSizer(wxVERTICAL, panel, - _("Input:")); + + // add spatial weights selection control + wxBitmap w_bitmap(wxXmlResource::Get()->LoadBitmap("SpatialWeights_Bmp")); + weights_btn = new wxBitmapButton(panel, wxID_ANY, w_bitmap, wxDefaultPosition, + w_bitmap.GetSize(), wxTRANSPARENT_WINDOW | wxBORDER_NONE); + st_spatial_w = new wxStaticText(panel, wxID_ANY, _("Select Spatial Weights:")); + m_spatial_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(150,-1)); + wxBoxSizer *hbox_spatial_w = new wxBoxSizer(wxHORIZONTAL); + hbox_spatial_w->Add(st_spatial_w, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); + hbox_spatial_w->Add(m_spatial_weights, 0, wxALIGN_CENTER_VERTICAL| wxRIGHT, 10); + hbox_spatial_w->Add(weights_btn, 0, wxALIGN_CENTER_VERTICAL); + // init the spatial weights control + InitSpatialWeights(m_spatial_weights); + + if (!show_auto_button) { + m_use_centroids->Hide(); + auto_btn->Hide(); + st_wc->Hide(); + st_w0->Hide(); + st_w1->Hide(); + m_weight_centroids->Hide(); + m_wc_txt->Hide(); + } else { + st_spatial_w->Disable(); + m_spatial_weights->Disable(); + weights_btn->Disable(); + } + if (!show_spatial_weights) { + st_spatial_w->Hide(); + m_spatial_weights->Hide(); + weights_btn->Hide(); + } + + wxStaticBoxSizer *hbox0 = new wxStaticBoxSizer(wxVERTICAL, panel, _("Input:")); hbox0->Add(st, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 10); hbox0->Add(combo_var, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10); hbox0->Add(hbox_c, 0, wxLEFT | wxRIGHT, 10); hbox0->Add(hbox_w, 0, wxLEFT | wxRIGHT, 10); + hbox0->Add(hbox_spatial_w, 0, wxLEFT | wxRIGHT | wxTOP, 10); vbox->Add(hbox0, 1, wxEXPAND | wxALL, 10); @@ -280,11 +334,36 @@ void AbstractClusterDlg::AddInputCtrls(wxPanel *panel, wxBoxSizer* vbox, m_weight_centroids->Disable(); m_wc_txt->Disable(); auto_btn->Disable(); - m_use_centroids->Bind(wxEVT_CHECKBOX, - &AbstractClusterDlg::OnUseCentroids, this); - m_weight_centroids->Bind(wxEVT_SLIDER, - &AbstractClusterDlg::OnSlideWeight, this); + m_use_centroids->Bind(wxEVT_CHECKBOX, &AbstractClusterDlg::OnUseCentroids, this); + m_weight_centroids->Bind(wxEVT_SLIDER, &AbstractClusterDlg::OnSlideWeight, this); m_wc_txt->Bind(wxEVT_TEXT, &AbstractClusterDlg::OnInputWeights, this); + weights_btn->Bind(wxEVT_BUTTON, &AbstractClusterDlg::OnSpatialWeights, this); +} + +void AbstractClusterDlg::InitSpatialWeights(wxChoice* combo_weights) +{ + // init spatial weights + combo_weights->Clear(); + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + + size_t sel_pos=0; + for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); + if (w_man_int->GetDefault() == weights_ids[i]) { + sel_pos = i; + } + } + if (weights_ids.size() > 0) { + combo_weights->SetSelection(sel_pos); + } +} + +void AbstractClusterDlg::OnSpatialWeights(wxCommandEvent& ev) +{ + // user click weights manager button + GdaFrame::GetGdaFrame()->OnToolsWeightsManager(ev); } void AbstractClusterDlg::OnInputWeights(wxCommandEvent& ev) @@ -292,7 +371,7 @@ void AbstractClusterDlg::OnInputWeights(wxCommandEvent& ev) wxString val = m_wc_txt->GetValue(); double w_val; if (val.ToDouble(&w_val)) { - m_weight_centroids->SetValue(w_val * 100); + m_weight_centroids->SetValue( (int)(w_val * 100)); } } @@ -305,28 +384,45 @@ void AbstractClusterDlg::OnSlideWeight(wxCommandEvent& ev) void AbstractClusterDlg::OnUseCentroids(wxCommandEvent& event) { - if (m_use_centroids->IsChecked()) { - m_weight_centroids->Enable(); - m_weight_centroids->SetValue(100); - m_wc_txt->SetValue("1.00"); - m_wc_txt->Enable(); - auto_btn->Enable(); - } else { - m_weight_centroids->SetValue(false); - m_weight_centroids->Disable(); - m_wc_txt->SetValue("0.00"); - m_wc_txt->Disable(); - auto_btn->Disable(); + bool use_cent = m_use_centroids->IsChecked(); + m_weight_centroids->Enable(use_cent); + m_weight_centroids->SetValue(use_cent ? 100 : 0); + m_wc_txt->SetValue(use_cent? "1.00" : "0.00"); + m_wc_txt->Enable(use_cent); + auto_btn->Enable(use_cent); + st_spatial_w->Enable(use_cent); + m_spatial_weights->Enable(use_cent); + weights_btn->Enable(use_cent); +} + +GalWeight* AbstractClusterDlg::GetInputSpatialWeights() +{ + GalWeight* gal = 0; + if (m_spatial_weights) { + int sel = m_spatial_weights->GetSelection(); + if (sel >= 0) { + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + + if (sel >= weights_ids.size()) { + sel = weights_ids.size() - 1; + } + + boost::uuids::uuid w_id = weights_ids[sel]; + gal = w_man_int->GetGal(w_id); + } } + return gal; } -bool AbstractClusterDlg::CheckContiguity(double w, double& ssd) +bool AbstractClusterDlg::CheckContiguity(GalWeight* weights, double w, double& ssd) { int val = w * 100; m_weight_centroids->SetValue(val); m_wc_txt->SetValue(wxString::Format("%f", w)); - vector clusters; + std::vector clusters; if (Run(clusters) == false) { m_weight_centroids->SetValue(100); m_wc_txt->SetValue("1.0"); @@ -335,70 +431,90 @@ bool AbstractClusterDlg::CheckContiguity(double w, double& ssd) // not show print bool print_result = false; - ssd = CreateSummary(clusters, print_result); + ssd = CreateSummary(clusters, print_result, return_additional_summary); - if (GetDefaultContiguity() == false) return false; + return CheckContiguity(weights->gal, clusters); +} - map > groups; - map >::iterator it; +bool AbstractClusterDlg::CheckContiguity(GalElement* gal, std::vector& clusters) +{ + std::map > groups; + std::map >::iterator it; for (int i=0; i g; - g.insert(i); - groups[c] = g; - } else { - groups[c].insert(i); - } + groups[c][i] = false; } - bool is_cont = true; - set::iterator item_it; for (it = groups.begin(); it != groups.end(); it++) { // check each group if contiguity - set g = it->second; - for (item_it=g.begin(); item_it!=g.end(); item_it++) { - int idx = *item_it; - const vector& nbrs = gal[idx].GetNbrs(); - bool not_in_group = true; + // start from 1st object, do BFS and add all objects has c=it->first + int cid = it->first; + std::map& g = it->second; + int fid = g.begin()->first; + + std::stack processed_ids; + processed_ids.push(fid); + + while (processed_ids.empty() == false) { + fid = processed_ids.top(); + processed_ids.pop(); + g[fid] = true; // mark fid from current group as processed + const std::vector& nbrs = gal[fid].GetNbrs(); for (int i=0; i::iterator item_it; + for (item_it = g.begin(); item_it != g.end(); ++item_it) { + if (item_it->second == false) { + return false; } } - if (!is_cont) break; } - return is_cont; + return true; } -void AbstractClusterDlg::BinarySearch(double left, double right, - std::vector >& ssd_pairs) +double AbstractClusterDlg::BinarySearch(GalWeight* weights, double left, double right) { - double delta = right - left; - - if ( delta < 0.01 ) return; + double w = 1.0; // init value of w (weighting value) + std::stack > ranges; + ranges.push(std::make_pair(left, right)); - double mid = left + delta /2.0; + while (ranges.empty() == false) { + std::pair& rng = ranges.top(); + ranges.pop(); - // assume left is always not contiguity and right is always contiguity - double m_ssd = 0; - bool m_conti = CheckContiguity(mid, m_ssd); + left = rng.first; + right = rng.second; - if ( m_conti ) { - ssd_pairs.push_back( std::make_pair(mid, m_ssd) ); - return BinarySearch(left, mid, ssd_pairs); + double delta = right - left; + double mid = left + delta /2.0; - } else { - return BinarySearch(mid, right, ssd_pairs); + if (mid < 0.01 || mid > 0.99) { + break; + } + + if ( delta > GdaConst::gda_autoweight_stop ) { + double m_ssd = 0; + // assume left is always not contiguity and right is always contiguity + bool m_conti = CheckContiguity(weights, mid, m_ssd); + if (m_conti) { + if (mid < w) { + w = mid; + } + ranges.push(std::make_pair(left,mid)); + } else { + ranges.push(std::make_pair(mid, right)); + } + } } + return w; } bool AbstractClusterDlg::CheckAllInputs() @@ -408,39 +524,57 @@ bool AbstractClusterDlg::CheckAllInputs() wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - ncluster = value_ncluster; + ncluster = (int)value_ncluster; } - if (ncluster < 2 || ncluster > num_obs) { + if (ncluster < 2 || ncluster > rows) { wxString err_msg = _("Please enter a valid number of clusters."); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); return false; } + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } return true; } +GalWeight* AbstractClusterDlg::CheckSpatialWeights() +{ + GalWeight* weights = GetInputSpatialWeights(); + if (weights == NULL) { + wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify a spatial weights."), _("No Weights Found"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + } + return weights; +} + void AbstractClusterDlg::OnAutoWeightCentroids(wxCommandEvent& event) { - if (CheckAllInputs() == false) return; + // check if centroids are not projected + if (check_spatial_ref) { + bool cont = project->CheckSpatialProjection(check_spatial_ref); + if (cont == false) { + return; + } + } + + // start from 1.0 on the far right side + m_weight_centroids->SetValue(100); + m_wc_txt->SetValue("1.0"); + if (CheckAllInputs() == false) return; + + GalWeight* weights = CheckSpatialWeights(); + if (weights == NULL) return; + // apply custom algorithm to find optimal weighting value between 0 and 1 // when w = 1 (fully geometry based) // when w = 0 (fully attributes based) - std::vector > ssd_pairs; - BinarySearch(0.0, 1.0, ssd_pairs); - - if (ssd_pairs.empty()) return; - - double w = ssd_pairs[0].first; - double ssd = ssd_pairs[0].second; - - for (int i=1; i ssd) { - ssd = ssd_pairs[i].second; - w = ssd_pairs[i].first; - } - } - + double w = BinarySearch(weights, 0.0, 1.0); int val = w * 100; m_weight_centroids->SetValue(val); m_wc_txt->SetValue(wxString::Format("%f", w)); @@ -449,10 +583,10 @@ void AbstractClusterDlg::OnAutoWeightCentroids(wxCommandEvent& event) void AbstractClusterDlg::AddTransformation(wxPanel *panel, wxFlexGridSizer* gbox) { wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Transformation:")); - const wxString _transform[4] = {"Raw", "Demean", "Standardize (Z)", - "Standardize (MAD)"}; + const wxString _transform[6] = {"Raw", "Demean", "Standardize (Z)", + "Standardize (MAD)", "Range Adjust", "Range Standardize"}; combo_tranform = new wxChoice(panel, wxID_ANY, wxDefaultPosition, - wxSize(140,-1), 4, _transform); + wxSize(180,-1), 6, _transform); combo_tranform->SetSelection(2); gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(combo_tranform, 1, wxEXPAND); @@ -465,7 +599,7 @@ void AbstractClusterDlg::AddNumberOfClusterCtrl(wxPanel *panel, wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Number of Clusters:")); combo_n = new wxComboBox(panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200,-1), 0, NULL); - max_n_clusters = num_obs < 100 ? num_obs : 100; + max_n_clusters = rows < 100 ? rows : 100; if (allow_dropdown) { for (int i=2; iAppend(wxString::Format("%d", i)); @@ -507,7 +641,8 @@ void AbstractClusterDlg::AddMinBound(wxPanel *panel, wxFlexGridSizer* gbox, chk_floor->Bind(wxEVT_CHECKBOX, &AbstractClusterDlg::OnCheckMinBound, this); combo_floor->Bind(wxEVT_CHOICE, &AbstractClusterDlg::OnSelMinBound, this); - txt_floor->Bind(wxEVT_TEXT, &AbstractClusterDlg::OnTypeMinBound, this); + txt_floor->Bind(wxEVT_KEY_DOWN, &AbstractClusterDlg::OnTypeMinBound, this); + txt_floor_pct->Bind(wxEVT_KEY_DOWN, &AbstractClusterDlg::OnTypeMinPctBound, this); slider_floor->Bind(wxEVT_SLIDER, &AbstractClusterDlg::OnSlideMinBound, this); if (!show_checkbox) { @@ -522,6 +657,7 @@ void AbstractClusterDlg::AddMinBound(wxPanel *panel, wxFlexGridSizer* gbox, txt_floor_pct->Disable(); } + void AbstractClusterDlg::OnSlideMinBound(wxCommandEvent& event) { int idx = combo_floor->GetSelection(); @@ -538,6 +674,7 @@ void AbstractClusterDlg::OnSlideMinBound(wxCommandEvent& event) } } } + void AbstractClusterDlg::OnCheckMinBound(wxCommandEvent& event) { if (chk_floor->IsChecked() ) { @@ -554,6 +691,7 @@ void AbstractClusterDlg::OnCheckMinBound(wxCommandEvent& event) txt_floor->SetValue(""); } } + void AbstractClusterDlg::OnSelMinBound(wxCommandEvent& event) { int rows = project->GetNumRecords(); @@ -562,7 +700,7 @@ void AbstractClusterDlg::OnSelMinBound(wxCommandEvent& event) slider_floor->Enable(); txt_floor_pct->Enable(); - vector floor_variable(rows, 1); + std::vector floor_variable(rows, 1); wxString nm = name_to_nm[combo_floor->GetString(idx)]; int col = table_int->FindColId(nm); if (col == wxNOT_FOUND) { @@ -592,16 +730,70 @@ void AbstractClusterDlg::OnSelMinBound(wxCommandEvent& event) txt_floor_pct->SetValue("10%"); } } -void AbstractClusterDlg::OnTypeMinBound(wxCommandEvent& event) + +void AbstractClusterDlg::OnTypeMinBound(wxKeyEvent& event) { - wxString tmp_val = txt_floor->GetValue(); - tmp_val.Trim(false); - tmp_val.Trim(true); - long input_min_k; - bool is_valid = tmp_val.ToLong(&input_min_k); - if (is_valid) { + if (event.GetKeyCode() == WXK_RETURN) { + wxString tmp_val = txt_floor->GetValue(); + tmp_val.Trim(false); + tmp_val.Trim(true); + + double input_val; + bool is_valid = tmp_val.ToDouble(&input_val); + if (is_valid) { + // adjust slider + // adjust percentage text ctrl + int idx = combo_floor->GetSelection(); + if (idx >= 0) { + if (idx_sum.find(idx) != idx_sum.end()) { + double slide_val = input_val / idx_sum[idx] * 100.0; + if (slide_val < 0) slide_val = 0; + if (slide_val > 100) slide_val = 100; + slider_floor->SetValue(slide_val); + + wxString t_val = wxString::Format("%f%%", slide_val); + txt_floor_pct->SetValue(t_val); + } + } + } } + event.Skip(); } + +void AbstractClusterDlg::OnTypeMinPctBound(wxKeyEvent& event) +{ + if (event.GetKeyCode() == WXK_RETURN) { + // input could be 14% or 0.14 + wxString tmp_val = txt_floor_pct->GetValue(); + tmp_val.Trim(false); + tmp_val.Trim(true); + + bool has_percentage = tmp_val.Find('%') > 0; + if (has_percentage) { + tmp_val = tmp_val.SubString(0, tmp_val.Find('%')-1); + } + double input_val; + bool is_valid = tmp_val.ToDouble(&input_val); + if (is_valid) { + // adjust bound text ctrl + // adjust slider + int idx = combo_floor->GetSelection(); + if (idx >= 0) { + if (idx_sum.find(idx) != idx_sum.end()) { + double pct_val = has_percentage ? input_val / 100.0 : input_val; + if (pct_val < 0) pct_val = 0; + if (pct_val > 1) pct_val = 1; + + double bound_val = pct_val * idx_sum[idx]; + txt_floor->SetValue(wxString::Format("%f", bound_val)); + slider_floor->SetValue(pct_val * 100); + } + } + } + } + event.Skip(); +} + bool AbstractClusterDlg::CheckMinBound() { if (chk_floor->IsChecked()) { @@ -617,7 +809,7 @@ bool AbstractClusterDlg::CheckMinBound() } void AbstractClusterDlg::InitVariableCombobox(wxListBox* var_box, - bool integer_only) + bool integer_only, bool add_centroids) { combo_var->Clear(); var_items.Clear(); @@ -625,7 +817,7 @@ void AbstractClusterDlg::InitVariableCombobox(wxListBox* var_box, std::vector col_id_map; if (integer_only) table_int->FillIntegerColIdMap(col_id_map); else table_int->FillNumericColIdMap(col_id_map); - for (int i=0, iend=col_id_map.size(); iGetColName(id); if (table_int->IsColTimeVariant(id)) { @@ -642,6 +834,17 @@ void AbstractClusterDlg::InitVariableCombobox(wxListBox* var_box, var_items.Add(name); } } + + if (add_centroids) { + // Add centroids variable + var_items.Add(""); + name_to_nm[""] = ""; + name_to_tm_id[""] = 0; + var_items.Add(""); + name_to_nm[""] = ""; + name_to_tm_id[""] = 0; + } + if (!var_items.IsEmpty()) { var_box->InsertItems(var_items,0); } @@ -657,6 +860,7 @@ bool AbstractClusterDlg::IsUseCentroids() if (m_use_centroids) use_centroids = m_use_centroids->GetValue(); if (use_centroids && m_weight_centroids) { + //std::cout << m_weight_centroids->GetValue() << std::endl; if (m_weight_centroids->GetValue() == 0) { use_centroids = false; } @@ -682,11 +886,9 @@ bool AbstractClusterDlg::GetInputData(int transform, int min_num_var) wxArrayInt selections; combo_var->GetSelections(selections); - int num_var = selections.size(); + int num_var = (int)selections.size(); if (num_var < min_num_var && !use_centroids) { - wxString err_msg = - wxString::Format(_("Please select at least %d variables."), - min_num_var); + wxString err_msg = wxString::Format(_("Please select at least %d variables."), min_num_var); wxMessageDialog dlg(NULL, err_msg, _("Info"), wxOK | wxICON_ERROR); dlg.ShowModal(); return false; @@ -694,50 +896,77 @@ bool AbstractClusterDlg::GetInputData(int transform, int min_num_var) col_names.clear(); select_vars.clear(); - - if ((!use_centroids && num_var>0) || - (use_centroids && m_weight_centroids && - m_weight_centroids->GetValue() != 1)) + col_ids.clear(); + var_info.clear(); + + if ( num_var > 0 || + (use_centroids && m_weight_centroids && m_weight_centroids->GetValue() != 0)) { - col_ids.resize(num_var); - var_info.resize(num_var); - + has_x_cent = false; + has_y_cent = false; + for (int i=0; iGetString(idx); select_vars.push_back(sel_str); + col_names.push_back(sel_str); wxString nm = name_to_nm[sel_str]; - int col = table_int->FindColId(nm); - if (col == wxNOT_FOUND) { - wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), nm); - wxMessageDialog dlg(NULL, err_msg, _("Error"), - wxOK | wxICON_ERROR); - dlg.ShowModal(); - return false; + if (nm == "") { + has_x_cent = true; + } else if (nm == "") { + has_y_cent = true; + } else { + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), nm); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; + } + int tm = name_to_tm_id[combo_var->GetString(idx)]; + + GdaVarTools::VarInfo v; + v.time = tm; + // Set Primary GdaVarTools::VarInfo attributes + v.name = nm; + v.is_time_variant = table_int->IsColTimeVariant(nm); + // v.time already set above + table_int->GetMinMaxVals(col, v.min, v.max); + v.sync_with_global_time = v.is_time_variant; + v.fixed_scale = true; + col_ids.push_back(col); + var_info.push_back(v); } - int tm = name_to_tm_id[combo_var->GetString(idx)]; - col_names.push_back(sel_str); - col_ids[i] = col; - var_info[i].time = tm; - // Set Primary GdaVarTools::VarInfo attributes - var_info[i].name = nm; - var_info[i].is_time_variant = table_int->IsColTimeVariant(nm); - // var_info[i].time already set above - table_int->GetMinMaxVals(col_ids[i], var_info[i].min, var_info[i].max); - var_info[i].sync_with_global_time = var_info[i].is_time_variant; - var_info[i].fixed_scale = true; } // Call function to set all Secondary Attributes based on Primary Attributes GdaVarTools::UpdateVarInfoSecondaryAttribs(var_info); columns = 0; rows = project->GetNumRecords(); - std::vector > data; - data.resize(num_var); + std::vector > data(num_var - has_x_cent - has_y_cent); for (int i=0; iGetColData(col_ids[i], var_info[i].time, data[i]); } - // if use centroids + + // for special table variables: , + if (has_x_cent) { + std::vector cents = project->GetCentroids(); + std::vector xvals(rows); + for (int i=0; i< rows; i++) { + xvals[i] = cents[i]->GetX(); + } + data.push_back(xvals); + } + if (has_y_cent) { + std::vector cents = project->GetCentroids(); + std::vector yvals(rows); + for (int i=0; i< rows; i++) { + yvals[i] = cents[i]->GetY(); + } + data.push_back(yvals); + } + + // if use centroids (checkbox) if (use_centroids) { columns += 2; col_names.insert(col_names.begin(), "CENTY"); @@ -765,13 +994,19 @@ bool AbstractClusterDlg::GetInputData(int transform, int min_num_var) if (use_centroids) { std::vector cents = project->GetCentroids(); - std::vector cent_xs; - std::vector cent_ys; + cent_xs.clear(); + cent_ys.clear(); for (int i=0; i< rows; i++) { cent_xs.push_back(cents[i]->GetX()); cent_ys.push_back(cents[i]->GetY()); } - if (transform == 3) { + if (transform == 5) { + GenUtils::RangeStandardize(cent_xs); + GenUtils::RangeStandardize(cent_ys); + } else if (transform == 4) { + GenUtils::RangeAdjust(cent_xs); + GenUtils::RangeAdjust(cent_ys); + } else if (transform == 3) { GenUtils::MeanAbsoluteDeviation(cent_xs); GenUtils::MeanAbsoluteDeviation(cent_ys); } else if (transform == 2) { @@ -787,9 +1022,13 @@ bool AbstractClusterDlg::GetInputData(int transform, int min_num_var) } col_ii = 2; } - for (int i=0; i& vals = data[i]; - if (transform == 3) { + if (transform == 5) { + GenUtils::RangeStandardize(vals); + } else if (transform == 4) { + GenUtils::RangeAdjust(vals); + } else if (transform == 3) { GenUtils::MeanAbsoluteDeviation(vals); } else if (transform == 2) { GenUtils::StandardizeData(vals); @@ -824,9 +1063,9 @@ double* AbstractClusterDlg::GetWeights(int columns) wc = sel_wc / 100.0; double n_var_cols = (double)(columns - 2); for (int j=0; jGetString(idx)]; int col = table_int->FindColId(nm); if (col != wxNOT_FOUND) { - vector floor_variable(rows, 1); + std::vector floor_variable(rows, 1); int tm = name_to_tm_id[combo_floor->GetString(idx)]; table_int->GetColData(col, tm, floor_variable); for (int i=0; i& clusters, - bool show_print) +double AbstractClusterDlg::CreateSummary(const std::vector& clusters, + bool show_print, + bool return_additional_summary) { - vector > solution; - vector isolated; + std::vector > solution; + std::vector isolated; for (int i=0; i solution.size()) solution.resize(c); if (c-1 >= 0) @@ -897,19 +1137,28 @@ double AbstractClusterDlg::CreateSummary(const vector& clusters, else isolated.push_back(i); } - return CreateSummary(solution, isolated, show_print); + return CreateSummary(solution, isolated, show_print, return_additional_summary); } -double AbstractClusterDlg::CreateSummary(const vector >& solution, - const vector& isolated, - bool show_print) +double AbstractClusterDlg::CreateSummary(const std::vector >& solution, + const std::vector& isolated, + bool show_print, + bool return_additional_summary) { + // get noise data (not clustered) + std::vector noises(rows, true); + for (int i=0; i > mean_centers = _getMeanCenters(solution); + std::vector > mean_centers = _getMeanCenters(solution); // totss - double totss = _getTotalSumOfSquares(); + double totss = _getTotalSumOfSquares(noises); // withinss - vector withinss = _getWithinSumOfSquares(solution); + std::vector withinss = _getWithinSumOfSquares(solution); // tot.withiness double totwithiness = GenUtils::Sum(withinss); // betweenss @@ -920,7 +1169,7 @@ double AbstractClusterDlg::CreateSummary(const vector >& solution, wxString summary; summary << "------\n"; if (isolated.size()>0) - summary << _("Number of not clustered observations: ") << isolated.size() << "\n"; + summary << _("Number of observations not in a cluster: ") << isolated.size() << "\n"; summary << _printConfiguration(); // auto weighting @@ -946,6 +1195,7 @@ double AbstractClusterDlg::CreateSummary(const vector >& solution, } summary << "\n"; + summary << _printMeanCenters(mean_centers); summary << _("The total sum of squares:\t") << totss << "\n"; summary << _printWithinSS(withinss); @@ -953,6 +1203,12 @@ double AbstractClusterDlg::CreateSummary(const vector >& solution, summary << _("The between-cluster sum of squares:\t") << betweenss << "\n"; summary << _("The ratio of between to total sum of squares:\t") << ratio << "\n\n"; + // allow any inherited class to report additional text in summary + double additional_ratio = 0; + summary << _additionalSummary(solution, additional_ratio); + if (return_additional_summary) { + ratio = additional_ratio; + } if (m_reportbox && show_print) { wxString report = m_reportbox->GetValue(); report = summary + report; @@ -962,10 +1218,10 @@ double AbstractClusterDlg::CreateSummary(const vector >& solution, return ratio; } -vector > AbstractClusterDlg::_getMeanCenters(const vector >& solutions) +std::vector > AbstractClusterDlg::_getMeanCenters(const std::vector >& solutions) { - int n_clusters = solutions.size(); - vector > result(n_clusters); + int n_clusters = (int)solutions.size(); + std::vector > result(n_clusters); if (columns <= 0 || rows <= 0) return result; @@ -975,8 +1231,25 @@ vector > AbstractClusterDlg::_getMeanCenters(const vectorGetColData(col_ids[i], var_info[i].time, raw_data[i]); } + if (has_x_cent) { + std::vector cents = project->GetCentroids(); + std::vector xvals(rows); + for (int i=0; i< rows; i++) { + xvals[i] = cents[i]->GetX(); + } + raw_data.push_back(xvals); + } + if (has_y_cent) { + std::vector cents = project->GetCentroids(); + std::vector yvals(rows); + for (int i=0; i< rows; i++) { + yvals[i] = cents[i]->GetY(); + } + raw_data.push_back(yvals); + } + for (int i=0; i means; + std::vector means; int end = columns; if (IsUseCentroids()) { end = columns - 2; @@ -1003,18 +1276,20 @@ vector > AbstractClusterDlg::_getMeanCenters(const vector& noises) { if (columns <= 0 || rows <= 0) return 0; double ssq = 0.0; for (int i=0; i vals; + } + std::vector vals; for (int j=0; j AbstractClusterDlg::_getWithinSumOfSquares(const vector >& solution) +std::vector AbstractClusterDlg::_getWithinSumOfSquares(const std::vector >& solution) { // solution is a list of lists of region ids [[1,7,2],[0,4,3],...] such // that the first solution has areas 1,7,2 the second solution 0,4,3 and so // on. cluster_ids does not have to be exhaustive - vector wss; + std::vector wss; for (int i=0; i AbstractClusterDlg::_getWithinSumOfSquares(const vector& cluster_ids) +double AbstractClusterDlg::_calcSumOfSquares(const std::vector& cluster_ids) { if (cluster_ids.empty() || input_data==NULL || mask == NULL) return 0; @@ -1044,9 +1319,10 @@ double AbstractClusterDlg::_calcSumOfSquares(const vector& cluster_ids) double ssq = 0; for (int i=0; i vals; + } + std::vector vals; for (int j=0; j& cluster_ids) } -wxString AbstractClusterDlg::_printMeanCenters(const vector >& mean_centers) +wxString AbstractClusterDlg::_printMeanCenters(const std::vector >& mean_centers) { wxString txt; txt << _("Cluster centers:") << mean_center_type << "\n"; @@ -1087,7 +1363,7 @@ wxString AbstractClusterDlg::_printMeanCenters(const vector >& me ss << "C" << i+1; t.add(ss.str()); - const vector& vals = mean_centers[i]; + const std::vector& vals = mean_centers[i]; for (int j=0; j >& me return txt; } -wxString AbstractClusterDlg::_printWithinSS(const vector& within_ss) +wxString AbstractClusterDlg::_printWithinSS(const std::vector& within_ss, + const wxString& title, const wxString& header) { wxString summary; - summary << _("Within-cluster sum of squares:\n"); + summary << title; // # obs Within cluster SS // C1 12 62.1 // C2 3 42.3 // C3 - wxString ss_str = _("Within cluster S.S."); + wxString ss_str = header; stringstream ss; TextTable t( TextTable::MD ); @@ -1146,3 +1423,56 @@ wxString AbstractClusterDlg::_printWithinSS(const vector& within_ss) return summary; } + +wxString AbstractClusterDlg::_printWithinSS(const std::vector& within_ss, + const std::vector& avgs, + const wxString& title, + const wxString& header1, + const wxString& header2) +{ + wxString summary; + summary << title; + + // # obs Within cluster SS Average + // C1 12 62.1 x + // C2 3 42.3 x + // C3 + + wxString ss_str = header1; + wxString ss_str2 = header2; + stringstream ss; + TextTable t( TextTable::MD ); + + // first row + t.add(""); + //t.add("#obs"); + t.add(ss_str.ToStdString()); + t.add(ss_str2.ToStdString()); + t.endOfRow(); + + // second row + for (int i=0; i #include -#include -#include +#include #include #include "../GeneralWxUtils.h" #include "../FramesManager.h" #include "../VarTools.h" #include "../DataViewer/TableStateObserver.h" +#include "../ShapeOperations/WeightsManStateObserver.h" #include "../ShapeOperations/GalWeight.h" -using namespace std; - class Project; class TableInterface; +// Abstract class for Cluster Dialog class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, - public TableStateObserver + public TableStateObserver, public WeightsManStateObserver { public: AbstractClusterDlg(wxFrame *parent, Project* project, wxString title); virtual ~AbstractClusterDlg(); - + + // Clean the table data used in Cluster Dialog; Used for refresh the dialog void CleanData(); /** Implementation of FramesManagerObserver interface */ @@ -54,40 +54,55 @@ class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, virtual bool AllowTimelineChanges() { return true; } virtual bool AllowGroupModify(const wxString& grp_nm) { return true; } virtual bool AllowObservationAddDelete() { return false; } - - + + /** Implementation of WeightsManStateObserver interface */ + virtual void update(WeightsManState* o); + virtual int numMustCloseToRemove(boost::uuids::uuid id) const { return 0; } + virtual void closeObserver(boost::uuids::uuid id) {}; + protected: + static bool check_spatial_ref; wxFrame *parent; Project* project; TableInterface* table_int; FramesManager* frames_manager; TableState* table_state; + WeightsManState* w_man_state; GalElement* gal; - vector > z; - vector undefs; + std::vector > z; + std::vector undefs; + + // number of selected variables in table int num_vars; - + + // number of observations int rows; + + // number of columns int columns; - int num_obs; - - vector col_names; + + // column names + std::vector col_names; + + // time/group names std::vector tm_strs; + // std::map name_to_nm; std::map name_to_tm_id; std::map idx_sum; - + + std::vector cent_xs; + std::vector cent_ys; + wxTextValidator validator; wxArrayString var_items; - - virtual bool GetDefaultContiguity(); - + virtual bool Init(); virtual bool CheckAllInputs(); - virtual bool Run(vector& clusters) { return false;} + virtual bool Run(std::vector& clusters) { return false;} virtual double* GetWeights(int columns); @@ -98,8 +113,11 @@ class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, // Utils bool IsUseCentroids(); bool CheckConnectivity(GalWeight* gw); + bool CheckConnectivity(GalElement* W); // Input related + bool has_x_cent; + bool has_y_cent; std::vector var_info; std::vector col_ids; std::vector select_vars; @@ -112,32 +130,41 @@ class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, wxButton* auto_btn; wxSlider* m_weight_centroids; wxTextCtrl* m_wc_txt; + wxStaticText* st_spatial_w; + wxChoice* m_spatial_weights; + wxBitmapButton* weights_btn; // -- functions virtual void AddInputCtrls(wxPanel *panel, wxBoxSizer* vbox, - bool show_auto_button = false); - virtual void AddSimpleInputCtrls(wxPanel *panel, - wxBoxSizer* vbox, - bool integer_only = false); - void OnUseCentroids(wxCommandEvent& event); - void OnSlideWeight(wxCommandEvent& event); + bool show_auto_button = false, + bool show_spatial_weights = true, + bool single_variable = false, + bool add_centroids = true); + virtual void AddSimpleInputCtrls(wxPanel *panel, wxBoxSizer* vbox, + bool integer_only = false, + bool show_spatial_weights = false, + bool add_centroids = true); + virtual void OnUseCentroids(wxCommandEvent& event); + virtual void OnSlideWeight(wxCommandEvent& event); virtual void InitVariableCombobox(wxListBox* var_box, - bool integer_only=false); - bool GetInputData(int transform, int min_num_var=2); - void OnInputWeights(wxCommandEvent& event); + bool integer_only=false, + bool add_centroids=true); + virtual bool GetInputData(int transform, int min_num_var=2); + virtual void OnInputWeights(wxCommandEvent& event); - bool CheckContiguity(double w, double& ssd); - void BinarySearch(double left, double right, - std::vector >& ssd_pairs); + virtual bool CheckContiguity(GalWeight* weights, double w, double& ssd); + virtual bool CheckContiguity(GalElement* gal, std::vector& clusters); + virtual double BinarySearch(GalWeight* weights, double left, double right); virtual void OnAutoWeightCentroids(wxCommandEvent& event); - + virtual void InitSpatialWeights(wxChoice* combo_weights); + virtual GalWeight* GetInputSpatialWeights(); + virtual GalWeight* CheckSpatialWeights(); + virtual void OnSpatialWeights(wxCommandEvent& event); + // Transformation control // -- variables wxChoice* combo_tranform; // -- functions; - virtual void AddTransformation( - wxPanel* panel, - wxFlexGridSizer* gbox); - + virtual void AddTransformation(wxPanel* panel, wxFlexGridSizer* gbox); // Minimum Bound related // -- variables @@ -147,15 +174,13 @@ class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, wxTextCtrl* txt_floor_pct; wxSlider* slider_floor; // -- functions - virtual void AddMinBound( - wxPanel *panel, - wxFlexGridSizer* gbox, - bool show_checkbox=true); - virtual void OnCheckMinBound(wxCommandEvent& event); - virtual void OnSelMinBound(wxCommandEvent& event); - virtual void OnTypeMinBound(wxCommandEvent& event); - virtual void OnSlideMinBound(wxCommandEvent& event); - virtual bool CheckMinBound(); + virtual void AddMinBound(wxPanel *panel, wxFlexGridSizer* gbox, bool show_checkbox=true); + virtual void OnCheckMinBound(wxCommandEvent& event); + virtual void OnSelMinBound(wxCommandEvent& event); + virtual void OnTypeMinBound(wxKeyEvent& event); + virtual void OnTypeMinPctBound(wxKeyEvent& event); + virtual void OnSlideMinBound(wxCommandEvent& event); + virtual bool CheckMinBound(); // output controls wxComboBox* combo_n; @@ -174,16 +199,33 @@ class AbstractClusterDlg : public wxDialog, public FramesManagerObserver, wxString mean_center_type; SimpleReportTextCtrl* m_reportbox; wxNotebook* AddSimpleReportCtrls(wxPanel *panel); + bool return_additional_summary; // -- functions - double _getTotalSumOfSquares(); - double _calcSumOfSquares(const vector& cluster_ids); - virtual vector > _getMeanCenters(const vector >& solution); - vector _getWithinSumOfSquares(const vector >& solution); - virtual wxString _printMeanCenters(const vector >& mean_centers); - wxString _printWithinSS(const vector& within_ss); + virtual double _getTotalSumOfSquares(const std::vector& noises); + virtual double _calcSumOfSquares(const std::vector& cluster_ids); + virtual std::vector > _getMeanCenters(const std::vector >& solution); + virtual std::vector _getWithinSumOfSquares(const std::vector >& solution); + virtual wxString _printMeanCenters(const std::vector >& mean_centers); + virtual wxString _printWithinSS(const std::vector& within_ss, + const wxString& title = _("Within-cluster sum of squares:\n"), + const wxString& header = _("Within cluster S.S.")); + virtual wxString _printWithinSS(const std::vector& within_ss, + const std::vector& avgs, + const wxString& title = _("Within-cluster sum of squares:\n"), + const wxString& header1 = _("Within cluster S.S."), + const wxString& header2 = _("Averages")); virtual wxString _printConfiguration()=0; - double CreateSummary(const vector& clusters, bool show_print = true); - double CreateSummary(const vector >& solution, const vector& isolated = vector(), bool show_print = true); + virtual double CreateSummary(const std::vector& clusters, + bool show_print = true, + bool return_additional_summary = false); + virtual double CreateSummary(const std::vector >& solution, + const std::vector& isolated = std::vector(), + bool show_print = true, + bool return_additional_summary = false); + + // get addtional content for summary,e.g. medoids (within distance to median) + virtual wxString _additionalSummary(const std::vector >& solution, + double& additional_ratio) { return wxEmptyString;} }; #endif diff --git a/DialogTools/AggregateDlg.cpp b/DialogTools/AggregateDlg.cpp index d3a53a433..d0babc6f3 100644 --- a/DialogTools/AggregateDlg.cpp +++ b/DialogTools/AggregateDlg.cpp @@ -302,6 +302,7 @@ void AggregationDlg::OnOKClick( wxCommandEvent& ev ) } } else { // should not be here + delete mem_table; return; } new_fields_dict[key1_name] = key_col; diff --git a/DialogTools/Bnd2ShpDlg.cpp b/DialogTools/Bnd2ShpDlg.cpp index 2e6612e85..dcc645c18 100644 --- a/DialogTools/Bnd2ShpDlg.cpp +++ b/DialogTools/Bnd2ShpDlg.cpp @@ -148,6 +148,7 @@ void Bnd2ShpDlg::OnCreateClick( wxCommandEvent& event ) } else { + delete[] pts; wxMessageBox(_("This format is not supported.")); return; } diff --git a/DialogTools/CalculatorDlg.cpp b/DialogTools/CalculatorDlg.cpp index ee7eaa5b1..f6a9eaf0b 100644 --- a/DialogTools/CalculatorDlg.cpp +++ b/DialogTools/CalculatorDlg.cpp @@ -557,8 +557,10 @@ void CalculatorDlg::AssignOrSelect(bool assign) wxString t_str = ""; if (V_tms > 1) { // will use current time period - t = project->GetTimeState()->GetCurrTime(); - t_str = project->GetTimeState()->GetCurrTimeString(); + if (project) { + t = project->GetTimeState()->GetCurrTime(); + t_str = project->GetTimeState()->GetCurrTimeString(); + } } int num_obs_sel = 0; vector selected(obs); @@ -575,25 +577,25 @@ void CalculatorDlg::AssignOrSelect(bool assign) if (selected[i]) ++num_obs_sel; } } - - HighlightState& hs = *project->GetHighlightState(); - std::vector& h = hs.GetHighlight(); - bool selection_changed = false; - - for (size_t i=0; iGetHighlightState(); + std::vector& h = hs.GetHighlight(); + bool selection_changed = false; + + for (size_t i=0; iShow(project->GetTableInt()->IsTimeVariant()); preview_var_choice->Clear(); - //preview_var_choice->Append(unif_dist_txt); - //preview_var_choice->SetSelection(0); - //preview_var_tm_choice->Show(project->GetTableInt()->IsTimeVariant()); preview_var_tm_choice->Show(false); unif_dist_min_lbl = wxDynamicCast(FindWindow(XRCID("ID_UNIF_DIST_MIN_LBL")), @@ -1033,13 +1031,31 @@ void CatClassifPanel::OnBreaksChoice(wxCommandEvent& event) cc_data.cat_classif_type = cl_type; int choice = breaks_choice->GetSelection(); - if (choice == 0 || choice == 2 || choice == 3) { - cc_data.color_scheme = CatClassification::sequential_color_scheme; - } else if (choice == 1) { + if (choice == 1) { // for unique values, set automatic_labels to false, so that // in MapCanavas it won't create labels using breaks cc_data.automatic_labels = false; cc_data.color_scheme = CatClassification::qualitative_color_scheme; + // disable Categories control + num_cats_choice->Enable(false); + // hide break radio buttons + for (int i=0; iEnable(false); + brk_txt[i]->Enable(false); + } + // hide slider bar + brk_slider->Hide(); + } else { + cc_data.color_scheme = CatClassification::sequential_color_scheme; + // enable Categories control + num_cats_choice->Enable(true); + // show break radio buttons + for (int i=0; iEnable(true); + brk_txt[i]->Enable(true); + } + // show slider bar + brk_slider->Show(); } // Verify that cc data is self-consistent and correct if not. This @@ -1064,6 +1080,17 @@ void CatClassifPanel::OnColorSchemeChoice(wxCommandEvent& event) wxLogMessage("CatClassifPanel::OnColorSchemeChoice"); if (!all_init) return; + + if (has_custom_color) { + // check with user if they want to keep custom color + wxString msg = _("Customized color was detected. Do you want to appy pre-defined color scheme on breaks?."); + wxMessageDialog ed(NULL, msg, _("Information"), wxYES_NO | wxICON_INFORMATION); + if (ed.ShowModal() == wxID_NO) { + return; + } + } + + has_custom_color = false; // the following will set pre-defined colors cc_data.color_scheme = GetColorSchemeChoice(); if (cc_data.color_scheme != CatClassification::custom_color_scheme) { CatClassification::PickColorSet(cc_data.colors, @@ -1077,7 +1104,7 @@ void CatClassifPanel::OnColorSchemeChoice(wxCommandEvent& event) cc_data.color_scheme, cc_data.num_cats, false); for (size_t i=0; iSetBackgroundColour(cc_data.colors[0]); + cat_color_button[i]->SetBackgroundColour(cc_data.colors[i]); } } cc_data.cat_classif_type = CatClassification::custom; @@ -1157,8 +1184,9 @@ void CatClassifPanel::OnNumCatsChoice(wxCommandEvent& event) cc_data.cat_classif_type = CatClassification::custom; // check if breaks have same values std::set brks; - for (int i=0; iChangeAll(&preview_data, cc_data.break_vals_type, &cc_data.breaks, &cc_data.colors); + + // notify user custom color + has_custom_color = true; Refresh(); } @@ -2558,14 +2589,18 @@ void CatClassifPanel::UpdateCCState() vector titles; CatClassifManager* ccm = project->GetCatClassifManager(); ccm->GetTitles(titles); - - sm->Append(XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), _("Create New Custom"), _("Create new custom categories classification.")); + sm->Append(XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"), + _("Create New Custom"), + _("Create new custom categories classification.")); sm->AppendSeparator(); - for (size_t j=0; jAppend(GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0+j, titles[j]); } - GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, &GdaFrame::OnCustomCategoryClick, GdaFrame::GetGdaFrame(), GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); + GdaFrame::GetGdaFrame()->Bind(wxEVT_COMMAND_MENU_SELECTED, + &GdaFrame::OnCustomCategoryClick, + GdaFrame::GetGdaFrame(), + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0, + GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0 + titles.size()); } } } @@ -2615,8 +2650,6 @@ CatClassifFrame::CatClassifFrame(wxFrame *parent, Project* project, wxSize(70, -1)); Connect(XRCID("ID_PREVIEW_VAR_TM_CHOICE"), wxEVT_CHOICE, wxCommandEventHandler(CatClassifFrame::OnPreviewVarTmChoice)); - - wxBoxSizer* histo_h_szr = new wxBoxSizer(wxHORIZONTAL); histo_h_szr->Add(preview_var_text, 0, wxALIGN_CENTER_VERTICAL); diff --git a/DialogTools/CatClassifDlg.h b/DialogTools/CatClassifDlg.h index 36e5c241a..0d3085326 100644 --- a/DialogTools/CatClassifDlg.h +++ b/DialogTools/CatClassifDlg.h @@ -288,7 +288,8 @@ class CatClassifPanel: public wxPanel, public TableStateObserver bool all_init; bool unif_dist_mode; - + bool has_custom_color; + DECLARE_EVENT_TABLE() }; diff --git a/DialogTools/ConnectDatasourceDlg.cpp b/DialogTools/ConnectDatasourceDlg.cpp index 9d30be0c3..6e1355fda 100644 --- a/DialogTools/ConnectDatasourceDlg.cpp +++ b/DialogTools/ConnectDatasourceDlg.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +75,17 @@ bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames) { wxString fpath = filenames[0]; wxFileName fn = wxFileName::FileName(fpath); + + // activate file/dir access permission for osx 10.15+ + wxFileName dirname = wxFileName::DirName(fpath); + wxString dir_path = dirname.GetPath(); + wxDir dir; + dir.Open(dir_path); + if ( dir.IsOpened() ) { + wxString filename; + dir.GetFirst(&filename); + } + m_pOwner->ds_file_path = fn; wxCommandEvent ev; m_pOwner->OnOkClick(ev); @@ -377,7 +389,6 @@ wxString RecentDatasource::GetLayerName(wxString ds_name) BEGIN_EVENT_TABLE( ConnectDatasourceDlg, wxDialog ) EVT_BUTTON(XRCID("IDC_OPEN_IASC"), ConnectDatasourceDlg::OnBrowseDSfileBtn) EVT_BUTTON(XRCID("ID_BTN_LOOKUP_TABLE"), ConnectDatasourceDlg::OnLookupDSTableBtn) - //EVT_BUTTON(XRCID("ID_CARTODB_LOOKUP_TABLE"), ConnectDatasourceDlg::OnLookupCartoDBTableBtn) //EVT_BUTTON(XRCID("ID_BTN_LOOKUP_WSLAYER"), ConnectDatasourceDlg::OnLookupWSLayerBtn) EVT_BUTTON(wxID_OK, ConnectDatasourceDlg::OnOkClick ) //EVT_BUTTON(wxID_CANCEL, ConnectDatasourceDlg::OnCancelClick ) @@ -670,7 +681,7 @@ void ConnectDatasourceDlg::CreateControls() // create controls defined in parent class DatasourceDlg::CreateControls(); - + // setup WSF auto-completion std::vector ws_url_cands = OGRDataAdapter::GetInstance().GetHistory("ws_url"); m_webservice_url->SetAutoList(ws_url_cands); @@ -821,11 +832,6 @@ void ConnectDatasourceDlg::OnOkClick( wxCommandEvent& event ) } else if (datasource_type == 2) { // Web Service tab is selected - if (layer_name.IsEmpty()) PromptDSLayers(datasource); - layername = layer_name; - - } else if (datasource_type == 3) { - // CartoDB Service tab is selected if (layer_name.IsEmpty()) PromptDSLayers(datasource); layername = layer_name; @@ -1001,32 +1007,7 @@ IDataSource* ConnectDatasourceDlg::CreateDataSource() // prompt user to select a layer from WFS //if (layer_name.IsEmpty()) PromptDSLayers(datasource); } - - } else if ( datasource_type == 3 ) { - - wxString user =m_cartodb_uname->GetValue().Trim(); - wxString key = m_cartodb_key->GetValue().Trim(); - - if (user.empty()) { - wxString msg = _("Please input Carto User Name."); - throw GdaException(msg.mb_str()); - } - if (key.empty()) { - wxString msg = _("Please input Carto App Key."); - throw GdaException(msg.mb_str()); - } - - CPLSetConfigOption("CARTODB_API_KEY", (const char*)key.mb_str()); - OGRDataAdapter::GetInstance().AddEntry("cartodb_key", key); - OGRDataAdapter::GetInstance().AddEntry("cartodb_user", user); - CartoDBProxy::GetInstance().SetKey(key); - CartoDBProxy::GetInstance().SetUserName(user); - - wxString url = "Carto:" + user; - - datasource = new WebServiceDataSource(GdaConst::ds_cartodb, url); - } - + } return datasource; } diff --git a/DialogTools/CreateGridDlg.cpp b/DialogTools/CreateGridDlg.cpp index 22cae41ca..493f228b7 100644 --- a/DialogTools/CreateGridDlg.cpp +++ b/DialogTools/CreateGridDlg.cpp @@ -31,6 +31,7 @@ #include "../TemplateCanvas.h" #include "../ShapeOperations/OGRDatasourceProxy.h" #include "../ShapeOperations/OGRLayerProxy.h" +#include "../Explore/MapLayer.hpp" #include "CreateGridDlg.h" #include "ExportDataDlg.h" #include "ConnectDatasourceDlg.h" @@ -53,10 +54,15 @@ BEGIN_EVENT_TABLE( CreateGridDlg, wxDialog ) EVT_RADIOBUTTON( XRCID("IDC_RADIO1"), CreateGridDlg::OnCRadio1Selected ) EVT_RADIOBUTTON( XRCID("IDC_RADIO2"), CreateGridDlg::OnCRadio2Selected ) EVT_RADIOBUTTON( XRCID("IDC_RADIO3"), CreateGridDlg::OnCRadio3Selected ) + EVT_RADIOBUTTON( XRCID("IDC_RADIO_LAYERS"), CreateGridDlg::OnMapLayerSelected ) + EVT_CHOICE( XRCID("IDC_GRID_LAYERS"), CreateGridDlg::OnMapLayerChoice ) END_EVENT_TABLE() CreateGridDlg::~CreateGridDlg( ) { + if (spatial_ref) { + delete spatial_ref; + } } void CreateGridDlg::OnClose(wxCloseEvent& event) @@ -66,14 +72,15 @@ void CreateGridDlg::OnClose(wxCloseEvent& event) Destroy(); } -CreateGridDlg::CreateGridDlg( wxWindow* parent, wxWindowID id, +CreateGridDlg::CreateGridDlg( wxWindow* parent, Project* project, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) +: spatial_ref(NULL), p_project(project) { isCreated = false; Create(parent, id, caption, pos, size, style); - + Init(); m_check = 1; @@ -93,6 +100,19 @@ CreateGridDlg::CreateGridDlg( wxWindow* parent, wxWindowID id, isCreated = true; } +void CreateGridDlg::Init() +{ + if (p_project) { + m_layers->Clear(); + // fill current layers + m_layers->Append(p_project->layername); + std::vector layer_names = p_project->GetLayerNames(); + for (int i=0; iAppend(layer_names[i]); + } + } +} + bool CreateGridDlg::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) @@ -119,7 +139,11 @@ void CreateGridDlg::CreateControls() m_inputfileshp->SetMaxLength(0); m_rows = XRCCTRL(*this, "IDC_EDIT7", wxTextCtrl); m_cols = XRCCTRL(*this, "IDC_EDIT8", wxTextCtrl); - + m_layers = XRCCTRL(*this, "IDC_GRID_LAYERS", wxChoice); + m_layers->Enable(false); + if (p_project == NULL) { + XRCCTRL(*this, "IDC_RADIO_LAYERS", wxRadioButton)->Enable(false); + } if (FindWindow(XRCID("IDC_EDIT1"))) { FindWindow(XRCID("IDC_EDIT1"))-> SetValidator( wxTextValidator(wxFILTER_NUMERIC, & s_lower_x) ); @@ -264,6 +288,7 @@ void CreateGridDlg::OnCReferencefile2Click( wxCommandEvent& event ) OGRDatasourceProxy* ogr_ds = new OGRDatasourceProxy(ds_name, ds_type, false); OGRLayerProxy* ogr_layer = ogr_ds->GetLayerProxy(layer_name); bool validExt = ogr_layer->GetExtent(m_xBot, m_yBot, m_xTop, m_yTop); + spatial_ref = ogr_layer->GetSpatialReference()->Clone(); delete ogr_ds; ogr_ds = NULL; if ( validExt ) { @@ -291,7 +316,6 @@ void CreateGridDlg::OnCreateClick( wxCommandEvent& event ) wxMessageBox(_("Please fix the grid bounding box.")); return; } - wxMessageBox(_("Grid file was successfully created.")); event.Skip(); } @@ -316,6 +340,33 @@ void CreateGridDlg::OnCRadio3Selected( wxCommandEvent& event ) EnableItems(); } +void CreateGridDlg::OnMapLayerSelected( wxCommandEvent& event ) +{ + m_check = 4; + EnableItems(); + OnMapLayerChoice(event); // trigger map layer choice +} + +void CreateGridDlg::OnMapLayerChoice( wxCommandEvent& event ) +{ + if (p_project) { + wxString layer_name = m_layers->GetString(m_layers->GetSelection()); + BackgroundMapLayer* bg_layer = p_project->GetMapLayer(layer_name); + if (bg_layer) { + bg_layer->GetExtent(m_xBot, m_yBot, m_xTop, m_yTop); + } else { + p_project->GetMapExtent(m_xBot, m_yBot, m_xTop, m_yTop); + } + spatial_ref = p_project->GetSpatialReference()->Clone(); + m_inputfileshp->SetValue(layer_name); + EnableItems(); + + } else { + wxMessageBox(_("Can't get bounding box information from this datasource. Please try another datasource.")); + } +} + + void CreateGridDlg::EnableItems() { FindWindow(XRCID("IDC_EDIT1"))->Enable((m_check == 1)); @@ -324,6 +375,7 @@ void CreateGridDlg::EnableItems() FindWindow(XRCID("IDC_EDIT4"))->Enable((m_check == 1)); FindWindow(XRCID("IDC_REFERENCEFILE"))->Enable((m_check == 2)); FindWindow(XRCID("IDC_REFERENCEFILE2"))->Enable((m_check == 3)); + FindWindow(XRCID("IDC_GRID_LAYERS"))->Enable((m_check == 4)); //wxString m_oSHAPE = m_outputfile->GetValue(); @@ -393,8 +445,8 @@ bool CreateGridDlg::CreateGrid() } - ExportDataDlg export_dlg(this, grids, Shapefile::POLYGON); - + ExportDataDlg export_dlg(this, Shapefile::POLYGON, grids, spatial_ref, NULL); + bool result = export_dlg.ShowModal() == wxID_OK; m_nCount = nMaxCount; @@ -403,7 +455,7 @@ bool CreateGridDlg::CreateGrid() FindWindow(XRCID("IDCANCEL"))->Enable(true); for(size_t i=0; iEnable(false); m_power->Enable(false); m_power_knn->Enable(false); + m_include_lower->Enable(false); m_nb_weights_type->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, &CreatingWeightDlg::OnWeightTypeSelect, this); @@ -294,7 +295,7 @@ void CreatingWeightDlg::UpdateThresholdValuesMultiVars() wxArrayInt selections; m_Vars->GetSelections(selections); - int num_var = selections.size(); + int num_var = (int)selections.size(); if (num_var <= 0) { return; } @@ -345,7 +346,7 @@ void CreatingWeightDlg::OnDistanceWeightsInputUpdate( wxBookCtrlEvent& event ) } else { wxArrayInt selections; m_Vars->GetSelections(selections); - int n_sel = selections.GetCount(); + int n_sel = (int)selections.GetCount(); if (n_sel <= 0 || m_dist_choice_vars->GetSelection() == 0) { m_thres_val_valid = false; m_threshold->ChangeValue("0"); @@ -377,7 +378,6 @@ void CreatingWeightDlg::OnCreateNewIdClick( wxCommandEvent& event ) table_int->FillColIdMap(col_id_map); InitFields(); m_id_field->SetSelection(0); - bool valid = m_id_field->GetSelection() != wxNOT_FOUND; UpdateCreateButtonState(); OnIdVariableSelected(event); } else { @@ -729,6 +729,14 @@ void CreatingWeightDlg::OnCSpinOrderofcontiguityUpdated( wxSpinEvent& event ) wxString val; val << m_spincont->GetValue(); m_contiguity->SetValue(val); + long l_val; + if (val.ToLong(&l_val) ) { + if (l_val > 1) { + m_include_lower->Enable(true); + } else { + m_include_lower->Enable(false); + } + } } void CreatingWeightDlg::OnCSpinKnnUpdated( wxSpinEvent& event ) @@ -790,7 +798,7 @@ void CreatingWeightDlg::InitFields() ResetThresXandYCombo(); - for (int i=0, iend=col_id_map.size(); iGetColName(col); @@ -819,7 +827,7 @@ void CreatingWeightDlg::InitFields() if (table_int->IsTimeVariant()) { std::vector tm_strs; table_int->GetTimeStrings(tm_strs); - for (int t=0, sz=tm_strs.size(); tAppend(tm_strs[t]); m_Y_time->Append(tm_strs[t]); } @@ -852,7 +860,7 @@ bool CreatingWeightDlg::CheckID(const wxString& id) wxRegEx regex; regex.Compile("^[0-9a-zA-Z_]+$"); - for (int i=0, iend=str_id_vec.size(); i id_set; std::map > dup_dict; // value:[] - for (int i=0, iend=str_id_vec.size(); inum_obs = w.size(); + Wp->num_obs = (int)w.size(); Wp->is_symmetric = false; Wp->symmetry_checked = true; Wp->gwt = new GwtElement[Wp->num_obs]; for (size_t i=0; igwt[i]; - e.alloc(w[i].size()); + e.alloc((int)w[i].size()); for (size_t j=0; jGetValue(); int m_kNN = m_spinneigh->GetValue(); int m_kernel_kNN = m_spinn_kernel->GetValue(); - int m_alpha = 1; + //int m_alpha = 1; bool done = false; wxString str_X = m_X->GetString(m_X->GetSelection()); @@ -1488,9 +1496,20 @@ void CreatingWeightDlg::CreateWeights() } else { dist_values = WeightsMetaInfo::DV_vars; } + + // check if using unprojected points in distance weights + if (m_nb_weights_type->GetSelection() > 0 && // for distance weights only + (m_X->GetSelection() <= 1 || m_Y->GetSelection() <=1)) // for centroids + { + bool is_arc = (dist_metric == WeightsMetaInfo::DM_arc); + bool cont_proceed = project->CheckSpatialProjection(check_projection, is_arc); + if (cont_proceed == false) { + return; + } + } bool m_check1 = m_include_lower->GetValue(); - + if (m_nb_weights_type->GetSelection()== 0) { // queen/rook GalWeight* Wp = new GalWeight; @@ -1513,6 +1532,7 @@ void CreatingWeightDlg::CreateWeights() wxMessageDialog dlg(NULL, msg, _("Voronoi Contiguity Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); + return; } } else if (project->main_data.header.shape_type == Shapefile::POINT_TYP) { diff --git a/DialogTools/CreatingWeightDlg.h b/DialogTools/CreatingWeightDlg.h index f3e2fb2e0..981af2af3 100644 --- a/DialogTools/CreatingWeightDlg.h +++ b/DialogTools/CreatingWeightDlg.h @@ -116,7 +116,8 @@ public TableStateObserver, public WeightsManStateObserver protected: bool all_init; - + bool check_projection; + // controls wxChoice* m_id_field; // contiguity weight diff --git a/DialogTools/DBScanDlg.cpp b/DialogTools/DBScanDlg.cpp new file mode 100644 index 000000000..8ebb5e5ef --- /dev/null +++ b/DialogTools/DBScanDlg.cpp @@ -0,0 +1,777 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "../Explore/MapNewView.h" +#include "../Project.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "../Algorithms/dbscan.h" +#include "../Algorithms/cluster.h" +#include "../Algorithms/pam.h" +#include "../Algorithms/distmatrix.h" +#include "../Weights/DistUtils.h" +#include "SaveToTableDlg.h" +#include "DBScanDlg.h" + +BEGIN_EVENT_TABLE( DBScanDlg, wxDialog ) +EVT_CLOSE( DBScanDlg::OnClose ) +END_EVENT_TABLE() + + +DBScanDlg::DBScanDlg(wxFrame* parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("DBScan Clustering Settings")) +{ + wxLogMessage("Open DBScanDlg."); + parent = parent_s; + project = project_s; + + highlight_state = project->GetHighlightState(); + + bool init_success = Init(); + + if (init_success == false) { + EndDialog(wxID_CANCEL); + } else { + CreateControls(); + } + + highlight_state->registerObserver(this); +} + +DBScanDlg::~DBScanDlg() +{ + highlight_state->removeObserver(this); +} + +void DBScanDlg::Highlight(int id) +{ + vector& hs = highlight_state->GetHighlight(); + + for (int i=0; iSetEventType(HLStateInt::delta); + highlight_state->notifyObservers(this); +} + +void DBScanDlg::Highlight(vector& ids) +{ + vector& hs = highlight_state->GetHighlight(); + + for (int i=0; iSetEventType(HLStateInt::delta); + highlight_state->notifyObservers(this); +} + +bool DBScanDlg::Init() +{ + if (project == NULL) + return false; + + table_int = project->GetTableInt(); + if (table_int == NULL) + return false; + + rows = project->GetNumRecords(); + table_int->GetTimeStrings(tm_strs); + + return true; +} + +void DBScanDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(880,720), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate( 5, 5 ); + + wxPanel *panel = new wxPanel(scrl); + + // Input + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + AddSimpleInputCtrls(panel, vbox); + + // Methods + wxFlexGridSizer* gbox_method = new wxFlexGridSizer(3,2,5,0); + wxStaticText* st_dbscan = new wxStaticText(panel, wxID_ANY, _("DBScan:")); + chk_dbscan = new wxCheckBox(panel, wxID_ANY, ""); + gbox_method->Add(st_dbscan, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox_method->Add(chk_dbscan, 1, wxEXPAND); + chk_dbscan->SetValue(true); + + wxStaticText* st_dbscanstar = new wxStaticText(panel, wxID_ANY, _("DBScan*:")); + chk_dbscanstar = new wxCheckBox(panel, wxID_ANY, ""); + gbox_method->Add(st_dbscanstar, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox_method->Add(chk_dbscanstar, 1, wxEXPAND); + + wxStaticBoxSizer *hbox_method = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Method:")); + hbox_method->Add(gbox_method, 1, wxEXPAND); + + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(10,2,5,0); + + wxStaticText* st2 = new wxStaticText(panel, wxID_ANY, _("Distance Threshold (epsilon):")); + wxTextValidator validator(wxFILTER_INCLUDE_CHAR_LIST); + wxArrayString list; + wxString valid_chars(".0123456789"); + size_t len = valid_chars.Length(); + for (size_t i=0; iAdd(st2, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_eps, 1, wxEXPAND); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Min Points:")); + m_minsamples = new wxTextCtrl(panel, wxID_ANY, "4", wxDefaultPosition, wxSize(120, -1),0); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_minsamples, 1, wxEXPAND); + + wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, _("Min Cluster Size:")); + m_minpts = new wxTextCtrl(panel, wxID_ANY, "4", wxDefaultPosition,wxSize(120, -1),0); + gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_minpts, 1, wxEXPAND); + m_minpts->Disable(); + + // Transformation + AddTransformation(panel, gbox); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); + wxString choices13[] = {"Euclidean", "Manhattan"}; + wxChoice* box13 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 2, choices13); + box13->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(box13, 1, wxEXPAND); + + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // Output + wxFlexGridSizer* gbox1 = new wxFlexGridSizer(5,2,5,0); + + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); + wxTextCtrl *box3 = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(120,-1)); + gbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(box3, 1, wxALIGN_CENTER_VERTICAL); + + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); + hbox1->Add(gbox1, 1, wxEXPAND); + + // Buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); + saveButton = new wxButton(panel, wxID_SAVE, _("Save/Show Map"), wxDefaultPosition, wxDefaultSize); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(saveButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 0, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox_method, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox, 0, wxEXPAND | wxALL, 10); + vbox->Add(hbox1, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + // Summary control + notebook = new wxNotebook( panel, wxID_ANY); + m_dendrogram = new wxDBScanDendrogram(notebook, wxID_ANY); + notebook->AddPage(m_dendrogram, _("Dendrogram")); + m_reportbox = new SimpleReportTextCtrl(notebook, wxID_ANY, ""); + notebook->AddPage(m_reportbox, _("Summary")); + notebook->Connect(wxEVT_NOTEBOOK_PAGE_CHANGING, wxBookCtrlEventHandler(DBScanDlg::OnNotebookChange), NULL, this); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(notebook,1, wxEXPAND | wxALL); + + panel->SetSizerAndFit(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Content + m_textbox = box3; + m_distance = box13; + + // Events + okButton->Bind(wxEVT_BUTTON, &DBScanDlg::OnOKClick, this); + saveButton->Bind(wxEVT_BUTTON, &DBScanDlg::OnSaveClick, this); + closeButton->Bind(wxEVT_BUTTON, &DBScanDlg::OnClickClose, this); + combo_var->Bind(wxEVT_LISTBOX, &DBScanDlg::OnSelectVars, this); + m_distance->Bind(wxEVT_CHOICE, &DBScanDlg::OnSelectVars, this); + combo_tranform->Bind(wxEVT_CHOICE, &DBScanDlg::OnSelectVars, this); + chk_dbscan->Bind(wxEVT_CHECKBOX, &DBScanDlg::OnDBscanCheck, this); + chk_dbscanstar->Bind(wxEVT_CHECKBOX, &DBScanDlg::OnDBscanStarCheck, this); + m_eps->Bind(wxEVT_TEXT, &DBScanDlg::OnEpsInput, this); + + saveButton->Disable(); +} + +void DBScanDlg::OnEpsInput(wxCommandEvent& ev) +{ + if (chk_dbscanstar->GetValue()) { + wxString val = m_eps->GetValue(); + double eps_val; + if (val.ToDouble(&eps_val)) { + m_dendrogram->OnSplitLineChange(eps_val, m_min_pts, false /* dont respond*/); + } + } +} + +void DBScanDlg::OnNotebookChange(wxBookCtrlEvent& event) +{ + int tab_idx = event.GetOldSelection(); + m_dendrogram->SetActive(tab_idx == 1 && chk_dbscanstar->GetValue()); +} + +void DBScanDlg::OnDBscanCheck(wxCommandEvent& event ) +{ + if (event.IsChecked()) { + chk_dbscanstar->SetValue(false); + m_dendrogram->SetBlank(true); + saveButton->Disable(); + m_minpts->Disable(); + } else { + chk_dbscanstar->SetValue(true); + m_dendrogram->SetBlank(false); + m_minpts->Enable(); + } +} + +void DBScanDlg::OnDBscanStarCheck(wxCommandEvent& event ) +{ + if (event.IsChecked()) { + chk_dbscan->SetValue(false); + m_dendrogram->SetBlank(false); + m_minpts->Enable(); + } else { + chk_dbscan->SetValue(true); + saveButton->Disable(); + m_dendrogram->SetBlank(true); + m_minpts->Disable(); + } +} + +void DBScanDlg::OnSelectVars(wxCommandEvent& event) +{ + // when user select variables, update the eps value + int transform = combo_tranform->GetSelection(); + if ( GetInputData(transform,1) == false) return; + weight = GetWeights(columns); + double** data = input_data; + + if (weight) { + // add weight to input_data + data = new double*[rows]; + for (int i=0; iGetSelection(); + char dist_choices[] = {'e','b'}; + dist = dist_choices[dist_sel]; + int metric = dist == 'e' ? ANNuse_euclidean_dist : ANNuse_manhattan_dist; + Gda::DistUtils dist_util(data, rows, columns, metric); + double m_thres = dist_util.GetMinThreshold(); + m_eps->SetValue(wxString::Format("%f", m_thres)); + if (weight) { + for (int i=0; iGetSelection() + 2; + wxString tmp_val = m_cluster->GetValue(); + tmp_val.Trim(false); + tmp_val.Trim(true); + long sel_ncluster; + bool is_valid = tmp_val.ToLong(&sel_ncluster); + if (is_valid) { + //sel_ncluster += 2; + // update dendrogram + //m_panel->UpdateCluster(sel_ncluster, clusters); + } +} + +void DBScanDlg::UpdateClusterChoice(int n, std::vector& _clusters) +{ + //int sel = n - 2; + //combo_n->SetSelection(sel); + wxString str_n; + str_n << n; + m_cluster->SetValue(str_n); + for (int i=0; i col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0; iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + if (!items.IsEmpty()) + var_box->InsertItems(items,0); + + for (int i=0; iSetStringSelection(select_vars[i], true); + } +} + +void DBScanDlg::update(HLStateInt* o) +{ + std::vector& hs = o->GetHighlight(); + std::vector hl_ids; + for (int i=0; iSetHighlight(hl_ids); + } +} + +void DBScanDlg::OnClickClose(wxCommandEvent& event ) +{ + wxLogMessage("OnClickClose DBScanDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); +} + +void DBScanDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close DBScanDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +wxString DBScanDlg::_printConfiguration() +{ + wxString txt; + wxString method = chk_dbscanstar->GetValue() ? "DBScan*" : "DBScan"; + txt << "Method:\t" << method << "\n"; + txt << "Distance Threshold (epsilon):\t" << m_eps->GetValue() << "\n"; + txt << "Min Points:\t" << m_minsamples->GetValue() << "\n"; + txt << "Transformation:\t" << combo_tranform->GetString(combo_tranform->GetSelection()) << "\n"; + txt << "Distance function:\t" << m_distance->GetString(m_distance->GetSelection()) << "\n"; + txt << "Number of clusters (output):\t" << cluster_ids.size() << "\n"; + + return txt; +} + +bool DBScanDlg::CheckAllInputs() +{ + if (m_eps->GetValue().ToDouble(&eps) == false) { + wxString err_msg = _("Please input a valid numeric number for epsilon."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return false; + } + + m_min_samples = 1; + long l_min_samples; + if (m_minsamples->GetValue().ToLong(&l_min_samples)) { + m_min_samples = (int)l_min_samples; + } + if (m_min_samples < 1 || m_min_samples > rows) { + wxString err_msg = _("Min points (self included) should be greater than 1 and less than N."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return false; + } + + if (chk_dbscanstar->GetValue()) { + m_min_pts = 0; + long l_min_pts; + if (m_minpts->GetValue().ToLong(&l_min_pts)) { + m_min_pts = (int)l_min_pts; + } + if (m_min_pts<=1 || m_min_pts > rows) { + wxString err_msg = _("Minimum cluster size should be greater than one, and less than the number of observations."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return false; + } + } + + int transform = combo_tranform->GetSelection(); + if ( GetInputData(transform,1) == false) return false; + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } + + dist = 'e'; + int dist_sel = m_distance->GetSelection(); + char dist_choices[] = {'e','b'}; + dist = dist_choices[dist_sel]; + + return true; +} + +bool DBScanDlg::RunStar() +{ + // DBScan * star + // NOTE input_data should be retrieved first!! + // get input: weights (auto) + weight = GetWeights(columns); + // add weight to input_data + double** data = input_data; + if (weight) { + data = new double*[rows]; + for (int i=0; i core_dist = Gda::HDBScan::ComputeCoreDistance(data, rows, columns, m_min_samples, dist); + int transpose = 0; // row wise + double** raw_dist = distancematrix(rows, columns, data, mask, weight, dist, transpose); + RawDistMatrix dist_matrix(raw_dist); + double alpha = 1.0; + std::vector mst_edges = Gda::HDBScan::mst_linkage_core_vector(columns, core_dist, &dist_matrix, alpha); + std::vector tree(rows-1); + Gda::UnionFind U(rows); + for (int i=0; iorig; + int b = e->dest; + double delta = e->length; + int aa = U.fast_find(a); + int bb = U.fast_find(b); + tree[i].left = aa; + tree[i].right = bb; + tree[i].distance = delta; + U.Union(aa, bb); + } + bool use_split_line = true; + m_dendrogram->Setup(tree, eps, use_split_line); + m_dendrogram->OnSplitLineChange(eps, m_min_pts); + + // update delta value if needed + if (eps != m_dendrogram->GetCutoff()) { + wxString delta_lbl; + delta_lbl << m_dendrogram->GetCutoff(); + m_eps->SetValue(delta_lbl); + } + + if (weight) { + for (int i=0; i& cluster_labels, + std::vector >& cluster_groups) +{ + wxString cutoff_lbl; + cutoff_lbl << cutoff; + m_eps->SetValue(cutoff_lbl); + + clusters = cluster_labels; + cluster_ids = cluster_groups; +} + +bool DBScanDlg::Run(vector& clusters) +{ + cluster_ids.clear(); + clusters.clear(); + clusters.resize(rows, 0); + + // NOTE input_data should be retrieved first!! + // get input: weights (auto) + weight = GetWeights(columns); + // add weight to input_data + double** data = input_data; + if (weight) { + data = new double*[rows]; + for (int i=0; i 100 * m_min_samples) { + wxString err_msg = _("There are very many neighbors found. Epsilon may be too large."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + } + std::vector labels = dbscan.getResults(); + + // process results and sort the clusters, label = -1 means noise + int n_cluster = 0; + bool has_noise = false; + for (int i=0; i n_cluster) { + // label = -1 means noise + n_cluster = labels[i]; + } + if (labels[i] == -1) { + has_noise = true; + } + } + n_cluster += 1; + cluster_ids.resize(n_cluster); + // group into clusters + for (int i=0; i < labels.size(); i++) { + if (labels[i] >= 0) { + cluster_ids[ labels[i] ].push_back(i); + } + } + // sort clusters + std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); + // reassign labels + clusters.resize(rows, 0); // 0 as not clustered + for (int i=0; i < n_cluster; i++) { + int c = i+1; + for (int j=0; jGetValue()) { + // DBScan + if (Run(clusters) == false) { + return; + } + saveButton->Disable(); + wxCommandEvent ev; + OnSaveClick(ev); + notebook->SetSelection(1); // show summary tab + } else { + // DBScan* + notebook->SetSelection(0); // show dendrogram tab + if (RunStar() == false) { + return; + } + saveButton->Enable(); // allow user to save results + } +} + +void DBScanDlg::GetClusterFromDendrogram(vector& clusters) +{ + cluster_ids.clear(); + clusters.clear(); + clusters.resize(rows, 0); + + cluster_ids = m_dendrogram->GetClusters(m_min_pts); + + // re-assign cluster lables + for (int i=0, cluster_idx=1; iGetValue()) { + // Get results from DBScan* and dendrogram + GetClusterFromDendrogram(clusters); + } + + // save to table + wxString field_name = m_textbox->GetValue(); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving clustering results."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // in case not clustered + int not_clustered =0; + for (int i=0; iFindColId(field_name); + if ( col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + + col = table_int->InsertCol(GdaConst::long64_type, field_name, col_insert_pos, time_steps, m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (col > 0) { + vector clusters_undef(rows, false); + table_int->SetColData(col, time, clusters); + table_int->SetColUndefined(col, time, clusters_undef); + } + + // show a cluster map + if (project->IsTableOnlyProject()) return; + + std::vector new_var_info; + std::vector new_col_ids; + new_col_ids.resize(1); + new_var_info.resize(1); + new_col_ids[0] = col; + new_var_info[0].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[0].name = field_name; + new_var_info[0].is_time_variant = table_int->IsColTimeVariant(col); + table_int->GetMinMaxVals(new_col_ids[0], new_var_info[0].min, new_var_info[0].max); + new_var_info[0].sync_with_global_time = new_var_info[0].is_time_variant; + new_var_info[0].fixed_scale = true; + + + MapFrame* nf = new MapFrame(parent, project, + new_var_info, new_col_ids, + CatClassification::unique_values, + MapCanvas::no_smoothing, 4, + boost::uuids::nil_uuid(), + wxDefaultPosition, + GdaConst::map_default_size); + wxString tmp = _("DBScan Cluster Map (%d clusters)"); + if (chk_dbscanstar->GetValue()) { + tmp = _("DBScan* Cluster Map (%d clusters)"); + } + int n_clsts = (int)cluster_ids.size(); + wxString ttl = wxString::Format(tmp, n_clsts); + nf->SetTitle(ttl); + if (not_clustered >0) nf->SetLegendLabel(0, _("Not Clustered")); +} diff --git a/DialogTools/DBScanDlg.h b/DialogTools/DBScanDlg.h new file mode 100644 index 000000000..143b4b1f0 --- /dev/null +++ b/DialogTools/DBScanDlg.h @@ -0,0 +1,144 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_DBSCAN_DLG_H___ +#define __GEODA_CENTER_DBSCAN_DLG_H___ + +#include +#include + +#include "../FramesManager.h" +#include "../VarTools.h" +#include "../logger.h" +#include "HClusterDlg.h" +#include "AbstractClusterDlg.h" +#include "HDBScanDlg.h" +#include "../Algorithms/dbscan.h" + +struct GdaNode; +class Project; +class TableInterface; +class wxDBScanDendrogram; + +class DBScanDlg : public AbstractClusterDlg, public HighlightStateObserver +{ +public: + DBScanDlg(wxFrame *parent, Project* project); + virtual ~DBScanDlg(); + + void CreateControls(); + virtual bool Init(); + + void OnOKClick( wxCommandEvent& event ); + void OnSaveClick( wxCommandEvent& event ); + void OnClickClose( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnEpsInput(wxCommandEvent& ev); + void OnClusterChoice(wxCommandEvent& event); + void OnSelectVars(wxCommandEvent& event); + void OnNotebookChange(wxBookCtrlEvent& event); + void InitVariableCombobox(wxListBox* var_box); + void OnDBscanCheck(wxCommandEvent& event); + void OnDBscanStarCheck(wxCommandEvent& event); + void UpdateFromDendrogram(double cutoff, std::vector& cluster_labels, + std::vector >& cluster_groups); + + virtual void update(HLStateInt* o); + + virtual wxString _printConfiguration(); + + HLStateInt* highlight_state; + + void UpdateClusterChoice(int n, std::vector& clusters); + void Highlight(int id); + void Highlight(vector& ids); + +protected: + virtual bool Run(vector& clusters); + virtual bool RunStar(); + virtual bool CheckAllInputs(); + virtual void GetClusterFromDendrogram(vector& clusters); + +protected: + char dist; + int m_min_samples; + int m_min_pts; + double eps; + + vector > cluster_ids; + + double cutoffDistance; + vector clusters; + + wxChoice* combo_n; + wxChoice* combo_cov; + wxTextCtrl* m_textbox; + wxChoice* m_distance; + wxTextCtrl* m_eps; + wxTextCtrl* m_minsamples; + wxTextCtrl* m_minpts; + wxTextCtrl* m_cluster; + wxNotebook* notebook; + wxCheckBox* chk_dbscanstar; + wxCheckBox* chk_dbscan; + wxDBScanDendrogram* m_dendrogram; + wxButton* saveButton; + + DECLARE_EVENT_TABLE() +}; + + +class wxDBScanDendrogram : public wxDendrogram +{ +public: + wxDBScanDendrogram(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize) + : wxDendrogram(parent, id, pos, size) { + + } + virtual ~wxDBScanDendrogram() {} + virtual void NotifySelection(double cutoff, std::vector& cluster_labels) + { + wxWindow* parent = GetParent(); + while (parent) { + wxWindow* w = parent; + DBScanDlg* dlg = dynamic_cast(w); + if (dlg) { + dlg->UpdateFromDendrogram(cutoff, cluster_labels, clusters); + break; + } + parent = w->GetParent(); + } + } + virtual void UpdateHighlight() + { + wxWindow* parent = GetParent(); + while (parent) { + wxWindow* w = parent; + DBScanDlg* dlg = dynamic_cast(w); + if (dlg) { + dlg->Highlight(hl_ids); + break; + } + parent = w->GetParent(); + } + } +}; +#endif diff --git a/DialogTools/DatasourceDlg.cpp b/DialogTools/DatasourceDlg.cpp index 96878d06b..a56f5b4a1 100644 --- a/DialogTools/DatasourceDlg.cpp +++ b/DialogTools/DatasourceDlg.cpp @@ -44,7 +44,6 @@ #include "../GdaException.h" #include "../GeneralWxUtils.h" #include "../GdaJson.h" -#include "../GdaCartoDB.h" #include "DatasourceDlg.h" using namespace std; @@ -109,11 +108,6 @@ void DatasourceDlg::CreateControls() m_ds_notebook->SetBackgroundColour(*wxWHITE); #endif m_ds_browse_file_btn = XRCCTRL(*this, "IDC_OPEN_IASC",wxBitmapButton); - - m_cartodb_uname = XRCCTRL(*this, "IDC_CARTODB_USERNAME",wxTextCtrl); - m_cartodb_key = XRCCTRL(*this, "IDC_CARTODB_KEY",wxTextCtrl); - m_cartodb_table = XRCCTRL(*this, "IDC_CARTODB_TABLE_NAME",wxTextCtrl); - m_cartodb_tablename = XRCCTRL(*this, "IDC_STATIC_CARTODB_TABLE_NAME",wxStaticText); m_database_type->Append(DBTYPE_POSTGIS); m_database_type->Append(DBTYPE_ORACLE); @@ -186,26 +180,6 @@ void DatasourceDlg::CreateControls() LOG_MSG(msg); } } - - // get a latest CartoDB account - vector cartodb_user = OGRDataAdapter::GetInstance().GetHistory("cartodb_user"); - if (!cartodb_user.empty()) { - wxString user = cartodb_user[0]; - CartoDBProxy::GetInstance().SetUserName(user); - // control - m_cartodb_uname->SetValue(user); - } - - vector cartodb_key = OGRDataAdapter::GetInstance().GetHistory("cartodb_key"); - if (!cartodb_key.empty()) { - wxString key = cartodb_key[0]; - CartoDBProxy::GetInstance().SetKey(key); - // control - m_cartodb_key->SetValue(key); - } - - m_cartodb_table->Hide(); - m_cartodb_tablename->Hide(); } void DatasourceDlg::OnDropFiles(wxDropFilesEvent& event) diff --git a/DialogTools/DatasourceDlg.h b/DialogTools/DatasourceDlg.h index 1b2015c50..8a7c177b4 100644 --- a/DialogTools/DatasourceDlg.h +++ b/DialogTools/DatasourceDlg.h @@ -60,11 +60,6 @@ class DatasourceDlg : public wxDialog wxNotebook* m_ds_notebook; wxMenu* m_ds_menu; wxString layer_name; - - wxTextCtrl* m_cartodb_uname; - wxTextCtrl* m_cartodb_key; - wxTextCtrl* m_cartodb_table; - wxStaticText* m_cartodb_tablename; wxArrayString ds_names; diff --git a/DialogTools/DissolveDlg.cpp b/DialogTools/DissolveDlg.cpp index e837dd67d..57bc40a83 100644 --- a/DialogTools/DissolveDlg.cpp +++ b/DialogTools/DissolveDlg.cpp @@ -298,6 +298,7 @@ void DissolveDlg::OnOKClick( wxCommandEvent& ev ) } } else { // should not be here + delete mem_table; return; } new_fields_dict[key1_name] = key_col; diff --git a/DialogTools/ExportDataDlg.cpp b/DialogTools/ExportDataDlg.cpp index 6d0f5c8b4..b9bc837c4 100644 --- a/DialogTools/ExportDataDlg.cpp +++ b/DialogTools/ExportDataDlg.cpp @@ -197,9 +197,21 @@ void ExportDataDlg::CreateControls() } m_crs_input = XRCCTRL(*this, "IDC_FIELD_CRS", wxTextCtrl); if (project_p == NULL || project_p->IsTableOnlyProject()) { - // if table only ds, disable CRS controls - m_crs_input->Disable(); - XRCCTRL(*this, "IDC_OPEN_CRS", wxBitmapButton)->Disable(); + if (project_p == NULL && spatial_ref) { + // for case of creating grid, a spatial reference could be there + // from existing map layer + char* tmp = new char[1024]; + if (spatial_ref->exportToProj4(&tmp) == OGRERR_NONE) { + wxString str_prj4 = tmp; + m_crs_input->SetValue(str_prj4); + } + delete[] tmp; + + } else if (spatial_ref){ + // if table only ds, disable CRS controls + m_crs_input->Disable(); + XRCCTRL(*this, "IDC_OPEN_CRS", wxBitmapButton)->Disable(); + } } else { OGRSpatialReference* sr = project_p->GetSpatialReference(); if (sr) { @@ -213,9 +225,6 @@ void ExportDataDlg::CreateControls() } // Create the rest controls from parent DatasourceDlg::CreateControls(); - - m_cartodb_table->Show(); - m_cartodb_tablename->Show(); } void ExportDataDlg::OnOpenCRS( wxCommandEvent& event ) @@ -463,15 +472,19 @@ void ExportDataDlg::OnOkClick( wxCommandEvent& event ) // save project file wxFileName new_proj_fname(proj_fname); wxString proj_title = new_proj_fname.GetName(); - LayerConfiguration* layer_conf = project_conf->GetLayerConfiguration(); - layer_conf->SetName(layer_name); - layer_conf->UpdateDataSource(datasource); - project_conf->Save(proj_fname); - - // in export case, delete cloned project_conf - if ( proj_fname.empty() ) { - delete project_conf; - //delete datasource; Note: it is deleted in project_conf + if (project_conf) { + LayerConfiguration* layer_conf = project_conf->GetLayerConfiguration(); + if (layer_conf) { + layer_conf->SetName(layer_name); + layer_conf->UpdateDataSource(datasource); + } + project_conf->Save(proj_fname); + + // in export case, delete cloned project_conf + if ( proj_fname.empty() ) { + delete project_conf; + //delete datasource; Note: it is deleted in project_conf + } } } } catch (GdaException& e) { @@ -647,7 +660,7 @@ ExportDataDlg::CreateOGRLayer(wxString& ds_name, bool is_table, OGRDataAdapter::GetInstance().StopExport(); //here new_layer will be deleted - if (!is_geometry_only) { + if (!is_geometry_only && table_p != NULL) { for (size_t i=0; i < geometries.size(); i++) { delete geometries[i]; } @@ -723,30 +736,6 @@ IDataSource* ExportDataDlg::GetDatasource() ds_format = IDataSource::GetDataTypeNameByGdaDSType(ds_type); return new DBDataSource(ds_type, dbname,dbhost,dbport,dbuser,dbpwd); - } else { - std::string user(m_cartodb_uname->GetValue().Trim().mb_str()); - std::string key(m_cartodb_key->GetValue().Trim().mb_str()); - - if (user.empty()) { - wxString msg = _("Please input Carto User Name."); - throw GdaException(msg.mb_str()); - } - if (key.empty()) { - wxString msg = _("Please input Carto App Key."); - throw GdaException(msg.mb_str()); - } - - CPLSetConfigOption("CARTODB_API_KEY", key.c_str()); - OGRDataAdapter::GetInstance().AddEntry("cartodb_key", key.c_str()); - OGRDataAdapter::GetInstance().AddEntry("cartodb_user", user.c_str()); - CartoDBProxy::GetInstance().SetKey(key); - CartoDBProxy::GetInstance().SetUserName(user); - - wxString url = "Carto:" + user; - - ds_format = IDataSource::GetDataTypeNameByGdaDSType(GdaConst::ds_cartodb); - - return new WebServiceDataSource(GdaConst::ds_cartodb, url); } return NULL; } diff --git a/DialogTools/FieldNameCorrectionDlg.cpp b/DialogTools/FieldNameCorrectionDlg.cpp index 918ac907f..f340056fb 100644 --- a/DialogTools/FieldNameCorrectionDlg.cpp +++ b/DialogTools/FieldNameCorrectionDlg.cpp @@ -95,6 +95,7 @@ ds_type(ds_type), need_correction(false) ScrolledWidgetsPane::ScrolledWidgetsPane(wxWindow* parent, wxWindowID id, GdaConst::DataSourceType ds_type, + std::set table_fnames, map& fnames_dict, vector& merged_field_names, set& dup_fname, @@ -103,7 +104,8 @@ ScrolledWidgetsPane::ScrolledWidgetsPane(wxWindow* parent, wxWindowID id, field_names_dict(fnames_dict), ds_type(ds_type), merged_field_names(merged_field_names), -need_correction(true) +need_correction(true), +table_fnames(table_fnames) { is_case_sensitive = OGRLayerProxy::IsFieldCaseSensitive(ds_type); Init(merged_field_names, dup_fname, bad_fname); @@ -481,7 +483,8 @@ wxString ScrolledWidgetsPane::RenameDupFieldName(const wxString& old_name) // prevent same field name been added in dataset, no matter if its // case-sensitive or not - while (field_dict.find(new_name.Lower()) != field_dict.end()) { + while (field_dict.find(new_name.Lower()) != field_dict.end() || + table_fnames.find(new_name) != table_fnames.end()) { // duplicated name, try to append suffix in the form "_x" wxRegEx regex; @@ -667,6 +670,7 @@ FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, FieldNameCorrectionDlg:: FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, + std::set table_fnames, map& fnames_dict, vector& merged_field_names, set& dup_fname, @@ -683,6 +687,7 @@ FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); fieldPane = new ScrolledWidgetsPane(panel, wxID_ANY, ds_type, + table_fnames, fnames_dict, merged_field_names, dup_fname, diff --git a/DialogTools/FieldNameCorrectionDlg.h b/DialogTools/FieldNameCorrectionDlg.h index 7ba682ae3..378db78ea 100644 --- a/DialogTools/FieldNameCorrectionDlg.h +++ b/DialogTools/FieldNameCorrectionDlg.h @@ -45,7 +45,8 @@ class ScrolledWidgetsPane : public wxScrolledWindow vector old_field_names; vector new_field_names; - + std::set table_fnames; + public: // Variable number of controls size_t num_controls; @@ -66,6 +67,7 @@ class ScrolledWidgetsPane : public wxScrolledWindow vector& all_fname); ScrolledWidgetsPane(wxWindow* parent, wxWindowID id, GdaConst::DataSourceType ds_type, + std::set table_fnames, map& fnames_dict, vector& merged_field_names, set& dup_fname, @@ -105,6 +107,7 @@ class FieldNameCorrectionDlg: public wxDialog wxString title="Update Field Name"); FieldNameCorrectionDlg(GdaConst::DataSourceType ds_type, + std::set table_fnames, map& fnames_dict, vector& merged_field_names, set& dup_fname, diff --git a/DialogTools/FieldNewCalcUniDlg.cpp b/DialogTools/FieldNewCalcUniDlg.cpp index 009d22a97..ca86bd16a 100644 --- a/DialogTools/FieldNewCalcUniDlg.cpp +++ b/DialogTools/FieldNewCalcUniDlg.cpp @@ -60,7 +60,7 @@ FieldNewCalcUniDlg::FieldNewCalcUniDlg(Project* project_s, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) -: all_init(false), op_string(10), project(project_s), +: all_init(false), op_string(12), project(project_s), table_int(project_s->GetTableInt()), m_valid_const(false), m_const(1), m_var_sel(wxNOT_FOUND), is_space_time(project_s->GetTableInt()->IsTimeVariant()) @@ -78,7 +78,9 @@ is_space_time(project_s->GetTableInt()->IsTimeVariant()) op_string[dev_from_mean_op] = "DEVIATION FROM MEAN"; op_string[standardize_op] = "STANDARDIZED (Z)"; op_string[mad_op] = "STANDARDIZED (MAD)"; - op_string[shuffle_op] = "SHUFFLE"; + op_string[shuffle_op] = "SHUFFLE"; + op_string[range_adjust_op] = "RANGE ADJUST"; + op_string[range_standardize_op] = "RANGE STANDARDIZE"; for (int i=0, iend=op_string.size(); iAppend(op_string[i]); @@ -314,7 +316,25 @@ void FieldNewCalcUniDlg::Apply() if (undefined[r]) r_data[r] = 0; } } - break; + break; + case range_adjust_op: + { + for (int i=0; i op_string; }; diff --git a/DialogTools/HClusterDlg.cpp b/DialogTools/HClusterDlg.cpp index f10975c53..1a834c962 100644 --- a/DialogTools/HClusterDlg.cpp +++ b/DialogTools/HClusterDlg.cpp @@ -60,8 +60,9 @@ EVT_CLOSE( HClusterDlg::OnClose ) END_EVENT_TABLE() -HClusterDlg::HClusterDlg(wxFrame* parent_s, Project* project_s) -: AbstractClusterDlg(parent_s, project_s, _("Hierarchical Clustering Settings")) +HClusterDlg::HClusterDlg(wxFrame* parent_s, Project* project_s, bool show_centroids) +: AbstractClusterDlg(parent_s, project_s, _("Hierarchical Clustering Settings")), +show_centroids(show_centroids) { wxLogMessage("Open HClusterDlg."); htree = NULL; @@ -122,7 +123,7 @@ bool HClusterDlg::Init() if (table_int == NULL) return false; - num_obs = project->GetNumRecords(); + rows = project->GetNumRecords(); table_int->GetTimeStrings(tm_strs); return true; @@ -137,12 +138,16 @@ void HClusterDlg::CreateControls() // Input wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); - bool show_auto_ctrl = true; - AddInputCtrls(panel, vbox, show_auto_ctrl); + if (show_centroids) { + AddInputCtrls(panel, vbox, true); + } else { + // for SCHC, show spatial weights control + AddSimpleInputCtrls(panel, vbox, false, true); + } // Parameters wxFlexGridSizer* gbox = new wxFlexGridSizer(7,2,5,0); - + // NumberOfCluster Control AddNumberOfClusterCtrl(panel, gbox); @@ -163,24 +168,6 @@ void HClusterDlg::CreateControls() box13->SetSelection(0); gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(box13, 1, wxEXPAND); - - - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Spatial Constraint:")); - chk_contiguity = new wxCheckBox(panel, wxID_ANY, ""); - gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(chk_contiguity, 1, wxEXPAND); - chk_contiguity->Disable(); - - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, ""); - combo_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, - wxSize(200,-1)); - gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(combo_weights, 1, wxEXPAND); - combo_weights->Disable(); - - st17->Hide(); - chk_contiguity->Hide(); - combo_weights->Hide(); wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); hbox->Add(gbox, 1, wxEXPAND); @@ -240,45 +227,23 @@ void HClusterDlg::CreateControls() // Content m_textbox = box3; - //m_iterations = box11; m_method = box12; m_distance = box13; + m_distance->SetSelection(0); + m_distance->Enable(false); + combo_n->SetSelection(0); - // init weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - size_t sel_pos=0; - for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); - if (w_man_int->GetDefault() == weights_ids[i]) - sel_pos = i; - } - if (weights_ids.size() > 0) combo_weights->SetSelection(sel_pos); - // Events okButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnOKClick, this); saveButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnSave, this); closeButton->Bind(wxEVT_BUTTON, &HClusterDlg::OnClickClose, this); combo_n->Connect(wxEVT_TEXT, wxCommandEventHandler(HClusterDlg::OnClusterChoice), NULL, this); combo_n->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(HClusterDlg::OnClusterChoice), NULL, this); + m_method->Bind(wxEVT_CHOICE, &HClusterDlg::OnMethodChoice, this); - chk_contiguity->Bind(wxEVT_CHECKBOX, &HClusterDlg::OnSpatialConstraintCheck, this); saveButton->Disable(); } -void HClusterDlg::OnSpatialConstraintCheck(wxCommandEvent& event) -{ - wxLogMessage("On HClusterDlg::OnSpatialConstraintCheck"); - bool checked = chk_contiguity->GetValue(); - - if (checked) { - combo_weights->Enable(); - } else { - combo_weights->Disable(); - } -} void HClusterDlg::OnNotebookChange(wxBookCtrlEvent& event) { int tab_idx = event.GetOldSelection(); @@ -351,23 +316,21 @@ void HClusterDlg::OnSave(wxCommandEvent& event ) GdaConst::map_default_size); wxString ttl; - ttl << "Hierachical " << _("Cluster Map ") << "("; + ttl << "Hierarchical " << _("Cluster Map ") << "("; ttl << combo_n->GetValue(); ttl << " clusters)"; nf->SetTitle(ttl); } -void HClusterDlg::OnDistanceChoice(wxCommandEvent& event) +void HClusterDlg::OnMethodChoice(wxCommandEvent& event) { - - if (m_distance->GetSelection() == 0) { - m_distance->SetSelection(1); - } else if (m_distance->GetSelection() == 3) { - m_distance->SetSelection(4); - } else if (m_distance->GetSelection() == 6) { - m_distance->SetSelection(7); - } else if (m_distance->GetSelection() == 9) { - m_distance->SetSelection(10); + int method_sel = m_method->GetSelection(); + if (method_sel == 1) { + // ward + m_distance->SetSelection(0); + m_distance->Enable(false); + } else { + m_distance->Enable(true); } } @@ -381,7 +344,7 @@ void HClusterDlg::OnClusterChoice(wxCommandEvent& event) if (is_valid && m_panel) { //sel_ncluster += 2; // update dendrogram - m_panel->UpdateCluster(sel_ncluster, clusters); + m_panel->UpdateCluster((int)sel_ncluster, clusters); } } @@ -403,7 +366,7 @@ void HClusterDlg::InitVariableCombobox(wxListBox* var_box) std::vector col_id_map; table_int->FillNumericColIdMap(col_id_map); - for (int i=0, iend=col_id_map.size(); iGetColName(id); if (table_int->IsColTimeVariant(id)) { @@ -430,6 +393,15 @@ void HClusterDlg::InitVariableCombobox(wxListBox* var_box) void HClusterDlg::update(HLStateInt* o) { + std::vector& hs = o->GetHighlight(); + std::vector hl_ids; + for (size_t i=0; iSetHighlight(hl_ids); + } } void HClusterDlg::OnClickClose(wxCommandEvent& event ) @@ -438,6 +410,7 @@ void HClusterDlg::OnClickClose(wxCommandEvent& event ) event.Skip(); EndDialog(wxID_CANCEL); + Destroy(); } void HClusterDlg::OnClose(wxCloseEvent& ev) @@ -469,9 +442,9 @@ bool HClusterDlg::CheckAllInputs() wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - n_cluster = value_ncluster; + n_cluster = (int)value_ncluster; } - if (n_cluster < 2 || n_cluster > num_obs) { + if (n_cluster < 2 || n_cluster > rows) { wxString err_msg = _("Please enter a valid number of clusters."); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); @@ -480,7 +453,14 @@ bool HClusterDlg::CheckAllInputs() int transform = combo_tranform->GetSelection(); if(GetInputData(transform,1) == false) return false; - + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } + method = 's'; int method_sel = m_method->GetSelection(); char method_choices[] = {'s','w', 'm','a'}; @@ -499,7 +479,7 @@ bool HClusterDlg::Run(vector& clusters) // NOTE input_data should be retrieved first!! // get input: weights (auto) weight = GetWeights(columns); - + double* pwdist = NULL; if (dist == 'e') { pwdist = DataUtils::getPairWiseDistance(input_data, weight, rows, @@ -538,21 +518,23 @@ bool HClusterDlg::Run(vector& clusters) int i=0; fastcluster::union_find nodes(rows); for (fastcluster::node const * NN=Z2[0]; NN!=Z2[rows-1]; ++NN, ++i) { - // Find the cluster identifiers for these points. - node1 = nodes.Find(NN->node1); - node2 = nodes.Find(NN->node2); - // Merge the nodes in the union-find data structure by making them - // children of a new node. - nodes.Union(node1, node2); - - node2 = node2 < rows ? node2 : rows-node2-1; - node1 = node1 < rows ? node1 : rows-node1-1; - - //cout << i<< ":" << node2 <<", " << node1 << ", " << Z2[i]->dist <dist; + if (NN) { + // Find the cluster identifiers for these points. + node1 = nodes.Find(NN->node1); + node2 = nodes.Find(NN->node2); + // Merge the nodes in the union-find data structure by making them + // children of a new node. + nodes.Union(node1, node2); + + node2 = node2 < rows ? node2 : rows-node2-1; + node1 = node1 < rows ? node1 : rows-node1-1; + + //cout << i<< ":" << node2 <<", " << node1 << ", " << Z2[i]->dist <dist; + } } clusters.clear(); int* clusterid = new int[rows]; @@ -581,53 +563,6 @@ void HClusterDlg::OnOKClick(wxCommandEvent& event ) saveButton->Enable(); } -void HClusterDlg::SpatialConstraintClustering() -{ - int transpose = 0; // row wise - fastcluster::cluster_result Z2(rows-1); - - if (chk_contiguity->GetValue()) { - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); - - if (gw == NULL) { - wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); - dlg.ShowModal(); - return; - } - //GeoDaWeight* weights = w_man_int->GetGal(w_id); - // Check connectivity - if (!CheckConnectivity(gw)) { - wxString msg = _("The connectivity of selected spatial weights is incomplete, please adjust the spatial weights."); - wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); - dlg.ShowModal(); - return; - } - - double** ragged_distances = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); - double** distances = DataUtils::fullRaggedMatrix(ragged_distances, rows, rows); - for (int i = 1; i < rows; i++) free(ragged_distances[i]); - free(ragged_distances); - std::vector undefs(rows, false); - SpanningTreeClustering::AbstractClusterFactory* redcap = new SpanningTreeClustering::FirstOrderSLKRedCap(rows, columns, distances, input_data, undefs, gw->gal, NULL, 0); - for (int i=0; iordered_edges.size(); i++) { - Z2[i]->node1 = redcap->ordered_edges[i]->orig->id; - Z2[i]->node2 = redcap->ordered_edges[i]->dest->id; - Z2[i]->dist = redcap->ordered_edges[i]->length; - } - - delete redcap; - } -} - IMPLEMENT_ABSTRACT_CLASS(DendrogramPanel, wxPanel) BEGIN_EVENT_TABLE(DendrogramPanel, wxPanel) @@ -639,7 +574,11 @@ END_EVENT_TABLE() DendrogramPanel::DendrogramPanel(int _max_n_clusters, wxWindow* parent, wxWindowID id, const wxPoint &pos, const wxSize &size) -: wxPanel(parent, id, pos, size), max_n_clusters(_max_n_clusters) +: wxPanel(parent, id, pos, size), +isMovingSelectBox(false), +max_n_clusters(_max_n_clusters), +select_box(0), +hs(_max_n_clusters) { SetBackgroundStyle(wxBG_STYLE_CUSTOM); SetBackgroundColour(*wxWHITE); @@ -680,6 +619,20 @@ void DendrogramPanel::SetActive(bool flag) isWindowActive = flag; } +void DendrogramPanel::SetHighlight(const std::vector& ids) +{ + hl_ids = ids; + for (size_t i=0; icontains(startPos)) { - hl_ids.push_back(end_nodes[i]->idx); - } - } - // highlight i selected - wxWindow* parent = GetParent(); - while (parent) { - wxWindow* w = parent; - HClusterDlg* dlg = dynamic_cast(w); - if (dlg) { - dlg->Highlight(hl_ids); - break; + // test end_nodes + if (select_box == 0) { + select_box = new wxRect(startPos.x, startPos.y, 0, 0); + } else { + if (select_box->Contains(startPos)) { + // drag&move select box + isMovingSelectBox = true; + } else { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iSetPosition(startPos); + select_box->SetWidth(0); + select_box->SetHeight(0); + + for (int i=0;icontains(startPos)) { + hl_ids.push_back(end_nodes[i]->idx); + hs[end_nodes[i]->idx] = true; + } + } } - parent = w->GetParent(); + NotifySelection(); } } } else if (event.Dragging()) { if (isLeftDown) { isLeftMove = true; - // moving + // moving split line if (isMovingSplitLine && split_line) { - split_line->move(event.GetPosition(), startPos); + wxPoint pt = event.GetPosition(); + wxSize sz = GetClientSize(); + + if (sz.GetWidth()> 0 && pt.x > sz.GetWidth() - 10) + pt.x = sz.GetWidth() - 10; + + split_line->move(pt, startPos); int x = split_line->getX(); + //std::cout << x << "," << pt.x << std::endl; Refresh(); OnSplitLineChange(x); + startPos = pt; + } else { + // if using select box + if (select_box != 0) { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iOffset(event.GetPosition() - startPos); + } else { + select_box->SetBottomRight(event.GetPosition()); + //std::cout <width << select_box->height <intersects(*select_box)) { + hl_ids.push_back(end_nodes[i]->idx); + hs[end_nodes[i]->idx] = true; + } + } + // highlight i selected + NotifySelection(); + Refresh(); + } + startPos = event.GetPosition(); } - startPos = event.GetPosition(); + } } else if (event.LeftUp()) { if (isLeftMove) { @@ -733,11 +726,35 @@ void DendrogramPanel::OnEvent( wxMouseEvent& event ) isMovingSplitLine = false; } else { // only left click + if (select_box) { + delete select_box; + select_box = 0; + NotifySelection(); + Refresh(); + } } + isMovingSelectBox = false; isLeftDown = false; } } +void DendrogramPanel::NotifySelection() +{ + wxWindow* parent = GetParent(); + while (parent) { + wxWindow* w = parent; + HClusterDlg* dlg = dynamic_cast(w); + if (dlg) { + dlg->Highlight(hl_ids); + break; + } + parent = w->GetParent(); + } + if (!clusters.empty()) { + init(); + } +} + void DendrogramPanel::OnSize( wxSizeEvent& event) { isResize = true; @@ -756,7 +773,10 @@ void DendrogramPanel::OnIdle(wxIdleEvent& event) layer_bm = 0; } - double scale_factor = GetContentScaleFactor(); + double scale_factor = 1.0; + if (GdaConst::enable_high_dpi_support) { + scale_factor = GetContentScaleFactor(); + } layer_bm = new wxBitmap; layer_bm->CreateScaled(sz.x, sz.y, 32, scale_factor); @@ -779,6 +799,11 @@ void DendrogramPanel::OnPaint( wxPaintEvent& event ) if (split_line) { split_line->draw(paint_dc); } + if (select_box) { + paint_dc.SetPen(*wxBLACK_PEN); + paint_dc.SetBrush(*wxTRANSPARENT_BRUSH); + paint_dc.DrawRectangle(*select_box); + } dc.SelectObject(wxNullBitmap); } else { @@ -818,26 +843,34 @@ void DendrogramPanel::Setup(GdaNode* _root, int _nelements, int _nclusters, levels = countLevels(-(nelements-2) - 1, 0); maxDistance = root[nelements-2].distance; - - init(); + minDistance = root[0].distance; + + if (clusters.size() > 0) { + init(); + } } void DendrogramPanel::OnSplitLineChange(int x) { wxSize sz = this->GetClientSize(); - double hh = sz.y; double ww = sz.x; cutoffDistance = maxDistance * (ww - margin - 30 - x) / (double) (ww - margin*2 - 30); - for (int i = nelements-2; i >= 0; i--) - { + bool all_nodes = true; + for (int i = nelements-2; i >= 0; --i) { if (cutoffDistance >= root[i].distance) { nclusters = nelements - i - 1; + all_nodes = false; break; } } + + if (all_nodes) nclusters = nelements; + if (cutoffDistance < minDistance) cutoffDistance = minDistance; + //std::cout << "x:" << x << ", cutoff:" << cutoffDistance << "nclusters:" << nclusters << std::endl; + if (nclusters > max_n_clusters) nclusters = max_n_clusters; int* clusterid = new int[nelements]; @@ -917,12 +950,12 @@ void DendrogramPanel::UpdateCluster(int _nclusters, std::vector& _clust nclusters = _nclusters; color_vec.clear(); CatClassification::PickColorSet(color_vec, nclusters); - init(); } } -void DendrogramPanel::init() { +void DendrogramPanel::init() +{ isLayerValid = false; @@ -937,7 +970,10 @@ void DendrogramPanel::init() { if (layer_bm == NULL) { - double scale_factor = GetContentScaleFactor(); + double scale_factor = 1.0; + if (GdaConst::enable_high_dpi_support) { + scale_factor = GetContentScaleFactor(); + } layer_bm = new wxBitmap; layer_bm->CreateScaled(ww, hh, 32, scale_factor); } @@ -957,7 +993,6 @@ void DendrogramPanel::init() { int start_y = 0; accessed_node.clear(); - bool draw_node = nelements < 10000; if (draw_node) { doDraw(dc, -(nelements-2) - 1, start_y); @@ -987,9 +1022,7 @@ void DendrogramPanel::init() { DendroColorPoint DendrogramPanel::doDraw(wxDC &dc, int node_idx, int y) { - wxSize sz = this->GetClientSize(); - double hh = sz.y; double ww = sz.x; if (node_idx >= 0) { @@ -997,7 +1030,7 @@ DendroColorPoint DendrogramPanel::doDraw(wxDC &dc, int node_idx, int y) wxColour clr = color_vec[clusters[node_idx] -1]; RectNode* end = new RectNode(node_idx, x, currentY, clr); - end->draw(dc); + end->draw(dc, hs[node_idx]); end_nodes.push_back(end); int resultX = x; @@ -1024,8 +1057,9 @@ DendroColorPoint DendrogramPanel::doDraw(wxDC &dc, int node_idx, int y) wxPoint p1 = cp1.pt; wxColour c1 = cp1.color; - //dc.DrawRectangle(wxRect(p0.x-2, p0.y-2, 4, 4)); - //dc.DrawRectangle(wxRect(p1.x-2, p1.y-2, 4, 4)); + dc.SetPen(*wxTRANSPARENT_PEN); + //dc.DrawRectangle(wxRect(p0.x-1, p0.y-1, 2, 2)); + //dc.DrawRectangle(wxRect(p1.x-1, p1.y-1, 2, 2)); double dist = level_node[node_idx]; int vx = ww - margin - 30 - (ww - 2*margin - 30) * dist / maxDistance ; diff --git a/DialogTools/HClusterDlg.h b/DialogTools/HClusterDlg.h index 837e93734..e8a4f9987 100644 --- a/DialogTools/HClusterDlg.h +++ b/DialogTools/HClusterDlg.h @@ -41,9 +41,9 @@ class RectNode y = _y; w = 20; - h = 8; + h = 4; - rec = wxRect(x + 8, y - 5,w,h); + rec = wxRect(x + 8, y - 2,w,h); color = _color; } ~RectNode() { @@ -55,16 +55,27 @@ class RectNode return rec.Contains(cur_pos); } - void draw(wxDC& dc) { + bool intersects(const wxRect& rect) { + int x_left = rect.width >= 0 ? rect.x : rect.x + rect.width; + int x_right = rect.width >= 0 ? rect.x + rect.width : rect.x; + int y_top = rect.height >= 0 ? rect.y : rect.y + rect.height; + int y_bottom = rect.height >= 0 ? rect.y + rect.height : rect.y; + + return !(rec.x + rec.width < x_left || rec.x > x_right || + rec.y > y_bottom || rec.y + rec.height < y_top); + //return rec.Intersects(rect); + } + + void draw(wxDC& dc, bool is_hl=false) { wxBrush brush(color); wxPen pen(color); dc.SetBrush(brush); dc.SetPen(pen); - dc.DrawRectangle(wxRect(x, y-2, 4, 4)); - + //dc.DrawRectangle(wxRect(x, y-2, 4, 4)); + + if (is_hl) + dc.SetPen(*wxRED); dc.DrawRectangle(rec); - dc.SetPen(*wxBLACK_PEN); - dc.SetBrush(*wxTRANSPARENT_BRUSH); } int idx; @@ -137,7 +148,8 @@ class DendroSplitLine class DendroColorPoint { public: - DendroColorPoint(){ + DendroColorPoint() { + color = *wxBLACK; is_valid = false; } DendroColorPoint(const wxPoint& _pt, const wxColour& _clr){ @@ -175,10 +187,11 @@ class DendrogramPanel : public wxPanel void OnSplitLineChange(int x); void SetActive(bool flag); + void SetHighlight(const std::vector& ids); private: bool isWindowActive; - + bool isMovingSelectBox; int leaves; int levels; int nelements; @@ -191,6 +204,7 @@ class DendrogramPanel : public wxPanel double heightPerLeaf; double widthPerLevel; double maxDistance; + double minDistance; double cutoffDistance; bool isResize; @@ -204,6 +218,7 @@ class DendrogramPanel : public wxPanel bool isMovingSplitLine; wxPoint startPos; std::vector hl_ids; + std::vector hs; std::map accessed_node; std::map level_node; @@ -211,6 +226,7 @@ class DendrogramPanel : public wxPanel std::vector clusters; std::vector color_vec; DendroSplitLine* split_line; + wxRect* select_box; int countLeaves(GdaNode* node); @@ -221,6 +237,7 @@ class DendrogramPanel : public wxPanel DendroColorPoint doDraw(wxDC &dc, int node_idx, int y); void init(); + void NotifySelection(); DECLARE_ABSTRACT_CLASS(DendrogramPanel) DECLARE_EVENT_TABLE() @@ -229,7 +246,7 @@ class DendrogramPanel : public wxPanel class HClusterDlg : public AbstractClusterDlg, public HighlightStateObserver { public: - HClusterDlg(wxFrame *parent, Project* project); + HClusterDlg(wxFrame *parent, Project* project, bool show_centroids=true); virtual ~HClusterDlg(); void CreateControls(); @@ -239,11 +256,10 @@ class HClusterDlg : public AbstractClusterDlg, public HighlightStateObserver void OnOKClick( wxCommandEvent& event ); void OnClickClose( wxCommandEvent& event ); void OnClose(wxCloseEvent& ev); - void OnDistanceChoice(wxCommandEvent& event); void OnClusterChoice(wxCommandEvent& event); void OnNotebookChange(wxBookCtrlEvent& event); void InitVariableCombobox(wxListBox* var_box); - void OnSpatialConstraintCheck(wxCommandEvent& event); + void OnMethodChoice(wxCommandEvent& event); virtual void update(HLStateInt* o); @@ -259,8 +275,6 @@ class HClusterDlg : public AbstractClusterDlg, public HighlightStateObserver virtual bool Run(vector& clusters); virtual bool CheckAllInputs(); - void SpatialConstraintClustering(); - GdaNode* htree; int n_cluster; char dist; @@ -268,16 +282,16 @@ class HClusterDlg : public AbstractClusterDlg, public HighlightStateObserver double cutoffDistance; vector clusters; + bool show_centroids; wxButton *saveButton; wxChoice* combo_cov; - wxChoice* combo_weights; wxTextCtrl* m_textbox; wxChoice* m_method; wxChoice* m_distance; DendrogramPanel* m_panel; wxNotebook* notebook; - wxCheckBox* chk_contiguity; + wxStaticText* m_sctxt; DECLARE_EVENT_TABLE() }; diff --git a/DialogTools/HDBScanDlg.cpp b/DialogTools/HDBScanDlg.cpp index 858d23491..d26c758d6 100644 --- a/DialogTools/HDBScanDlg.cpp +++ b/DialogTools/HDBScanDlg.cpp @@ -44,7 +44,7 @@ #include "../GenUtils.h" #include "../Algorithms/DataUtils.h" #include "../Algorithms/distmatrix.h" - +#include "../Algorithms/pam.h" #include "SaveToTableDlg.h" #include "HDBScanDlg.h" @@ -59,7 +59,6 @@ HDBScanDlg::HDBScanDlg(wxFrame* parent_s, Project* project_s) wxLogMessage("Open HDBScanDlg."); parent = parent_s; project = project_s; - highlight_state = project->GetHighlightState(); bool init_success = Init(); @@ -109,7 +108,7 @@ bool HDBScanDlg::Init() if (table_int == NULL) return false; - num_obs = project->GetNumRecords(); + rows = project->GetNumRecords(); table_int->GetTimeStrings(tm_strs); return true; @@ -117,20 +116,19 @@ bool HDBScanDlg::Init() void HDBScanDlg::CreateControls() { - wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(880,780), wxHSCROLL|wxVSCROLL ); + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(880,680), wxHSCROLL|wxVSCROLL ); scrl->SetScrollRate( 5, 5 ); wxPanel *panel = new wxPanel(scrl); // Input wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); - bool show_auto_ctrl = true; - AddInputCtrls(panel, vbox, show_auto_ctrl); + AddSimpleInputCtrls(panel, vbox); // Parameters wxFlexGridSizer* gbox = new wxFlexGridSizer(10,2,5,0); - wxStaticText* st2 = new wxStaticText(panel, wxID_ANY, _("Min cluster size:")); + wxStaticText* st2 = new wxStaticText(panel, wxID_ANY, _("Min Cluster Size:")); wxTextValidator validator(wxFILTER_INCLUDE_CHAR_LIST); wxArrayString list; wxString valid_chars(".0123456789"); @@ -139,33 +137,44 @@ void HDBScanDlg::CreateControls() list.Add(wxString(valid_chars.GetChar(i))); } validator.SetIncludes(list); - m_minpts = new wxTextCtrl(panel, wxID_ANY, "10", wxDefaultPosition, wxSize(120, -1),0,validator); + wxString default_minpts; + if (rows < 10) default_minpts << rows; + else default_minpts = "10"; + m_minpts = new wxTextCtrl(panel, wxID_ANY, default_minpts, wxDefaultPosition, wxSize(120, -1),0,validator); gbox->Add(st2, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_minpts, 1, wxEXPAND); - wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Min samples:")); + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Min Points:")); m_minsamples = new wxTextCtrl(panel, wxID_ANY, "10", wxDefaultPosition, wxSize(120, -1),0,validator); gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_minsamples, 1, wxEXPAND); + // hide Min Points option + //st14->Hide(); + //m_minsamples->Hide(); wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, _("Alpha:")); m_ctl_alpha = new wxTextCtrl(panel, wxID_ANY, "1.0", wxDefaultPosition, wxSize(120, -1),0,validator); gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_ctl_alpha, 1, wxEXPAND); + st15->Hide(); + m_ctl_alpha->Hide(); - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Method of selecting clusters:")); + wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Method of Selecting Clusters:")); wxString choices16[] = {"Excess of Mass", "Leaf"}; m_select_method = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(138,-1), 2, choices16); m_select_method->SetSelection(0); gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_select_method, 1, wxEXPAND); + st16->Hide(); + m_select_method->Hide(); - - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Allow a single cluster:")); + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Allow a Single Cluster:")); chk_allowsinglecluster = new wxCheckBox(panel, wxID_ANY, ""); gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(chk_allowsinglecluster, 1, wxEXPAND); - + st17->Hide(); + chk_allowsinglecluster->Hide(); + // Transformation AddTransformation(panel, gbox); @@ -182,16 +191,6 @@ void HDBScanDlg::CreateControls() // Output wxFlexGridSizer* gbox1 = new wxFlexGridSizer(5,2,5,0); - - /* - wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("Number of Clusters:"), - wxDefaultPosition, wxDefaultSize); - max_n_clusters = num_obs < 60 ? num_obs : 60; - m_cluster = new wxTextCtrl(panel, wxID_ANY, "5", wxDefaultPosition, wxSize(120, -1),0,validator); - - gbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox1->Add(m_cluster, 1, wxEXPAND); - */ wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); wxTextCtrl *box3 = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(120,-1)); @@ -218,8 +217,10 @@ void HDBScanDlg::CreateControls() // Summary control notebook = new wxNotebook( panel, wxID_ANY); - //m_panel = new DendrogramPanel(max_n_clusters, notebook, wxID_ANY); - //notebook->AddPage(m_panel, _("Dendrogram")); + m_dendrogram = new wxHDBScanDendrogram(notebook, wxID_ANY); + notebook->AddPage(m_dendrogram, _("Dendrogram")); + m_condensedtree = new wxHDBScanCondensedTree(notebook, wxID_ANY); + notebook->AddPage(m_condensedtree, _("Condensed Tree")); m_reportbox = new SimpleReportTextCtrl(notebook, wxID_ANY, ""); notebook->AddPage(m_reportbox, _("Summary")); notebook->Connect(wxEVT_NOTEBOOK_PAGE_CHANGING, wxBookCtrlEventHandler(HDBScanDlg::OnNotebookChange), NULL, this); @@ -247,7 +248,6 @@ void HDBScanDlg::CreateControls() m_textbox = box3; m_distance = box13; - // Events okButton->Bind(wxEVT_BUTTON, &HDBScanDlg::OnOKClick, this); saveButton->Bind(wxEVT_BUTTON, &HDBScanDlg::OnSave, this); @@ -255,14 +255,13 @@ void HDBScanDlg::CreateControls() //m_cluster->Connect(wxEVT_TEXT, wxCommandEventHandler(HDBScanDlg::OnClusterChoice), NULL, this); saveButton->Disable(); - //combo_n->Disable(); - //m_cluster->Disable(); } void HDBScanDlg::OnNotebookChange(wxBookCtrlEvent& event) { - int tab_idx = event.GetOldSelection(); - //m_panel->SetActive(tab_idx == 1); + int tab_idx = event.GetSelection(); + m_dendrogram->SetActive(tab_idx == 0); + m_condensedtree->SetActive(tab_idx == 1); } void HDBScanDlg::OnSave(wxCommandEvent& event ) @@ -301,20 +300,6 @@ void HDBScanDlg::OnSave(wxCommandEvent& event ) event.Skip(); } -void HDBScanDlg::OnDistanceChoice(wxCommandEvent& event) -{ - - if (m_distance->GetSelection() == 0) { - m_distance->SetSelection(1); - } else if (m_distance->GetSelection() == 3) { - m_distance->SetSelection(4); - } else if (m_distance->GetSelection() == 6) { - m_distance->SetSelection(7); - } else if (m_distance->GetSelection() == 9) { - m_distance->SetSelection(10); - } -} - void HDBScanDlg::OnClusterChoice(wxCommandEvent& event) { //int sel_ncluster = combo_n->GetSelection() + 2; @@ -350,7 +335,7 @@ void HDBScanDlg::InitVariableCombobox(wxListBox* var_box) std::vector col_id_map; table_int->FillNumericColIdMap(col_id_map); - for (int i=0, iend=col_id_map.size(); iGetColName(id); if (table_int->IsColTimeVariant(id)) { @@ -377,6 +362,19 @@ void HDBScanDlg::InitVariableCombobox(wxListBox* var_box) void HDBScanDlg::update(HLStateInt* o) { + std::vector& hs = o->GetHighlight(); + std::vector hl_ids; + for (size_t i=0; iSetHighlight(hl_ids); + } + if (m_condensedtree) { + m_condensedtree->SetHighlight(hl_ids); + } } void HDBScanDlg::OnClickClose(wxCommandEvent& event ) @@ -399,11 +397,11 @@ wxString HDBScanDlg::_printConfiguration() { wxString txt; txt << "Minimum cluster size:\t" << m_minpts->GetValue() << "\n"; - txt << "Minimum samples:\t" << m_minsamples->GetValue() << "\n"; - txt << "Alpha:\t" << m_ctl_alpha->GetValue() << "\n"; + txt << "Minimum points:\t" << m_minsamples->GetValue() << "\n"; + //txt << "Alpha:\t" << m_ctl_alpha->GetValue() << "\n"; txt << "Method of selecting cluster:\t" << m_select_method->GetStringSelection() << "\n"; wxString single_cluster = chk_allowsinglecluster->IsChecked() ? "Yes" : "No"; - txt << "Allow a single cluster:\t" << single_cluster << "\n"; + //txt << "Allow a single cluster:\t" << single_cluster << "\n"; txt << "Transformation:\t" << combo_tranform->GetString(combo_tranform->GetSelection()) << "\n"; txt << "Distance function:\t" << m_distance->GetString(m_distance->GetSelection()) << "\n"; txt << "Number of clusters (output):\t" << cluster_ids.size() << "\n"; @@ -416,22 +414,23 @@ bool HDBScanDlg::CheckAllInputs() m_min_pts = 0; long l_min_pts; if (m_minpts->GetValue().ToLong(&l_min_pts)) { - m_min_pts = l_min_pts; + m_min_pts = (int)l_min_pts; } - if (m_min_pts<=1) { - wxString err_msg = _("Minimum cluster size should be greater than one."); + if (m_min_pts<=1 || m_min_pts > rows) { + wxString err_msg = _("Minimum cluster size should be greater than one, and less than the number of observations."); wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); dlg.ShowModal(); return false; } - m_min_samples = 10; + m_min_samples = m_min_pts; + long l_min_samples; if (m_minsamples->GetValue().ToLong(&l_min_samples)) { - m_min_samples = l_min_samples; + m_min_samples = (int)l_min_samples; } - if (m_min_samples <= 1) { - wxString err_msg = _("Minimum samples should be greater than zero."); + if (m_min_samples < 1) { + wxString err_msg = _("Minimum points should be greater than zero."); wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); dlg.ShowModal(); return false; @@ -447,7 +446,14 @@ bool HDBScanDlg::CheckAllInputs() int transform = combo_tranform->GetSelection(); if ( GetInputData(transform,1) == false) return false; - + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } + dist = 'e'; int dist_sel = m_distance->GetSelection(); char dist_choices[] = {'e','b'}; @@ -473,35 +479,69 @@ bool HDBScanDlg::Run(vector& clusters) data[i][j] = input_data[i][j] * weight[j]; } } - core_dist = Gda::HDBScan::ComputeCoreDistance( - data, rows, columns, m_min_samples, dist); + + // compute core distances + core_dist = Gda::HDBScan::ComputeCoreDistance(data, rows, columns, m_min_samples, dist); + + // compute raw distance matrix: lower triangular part + int transpose = 0; // row wise + char dist = 'b'; // city-block + if (m_distance->GetSelection()== 0) dist = 'e'; + double** raw_dist = distancematrix(rows, columns, data, mask, weight, dist, transpose); + RawDistMatrix dist_matrix(raw_dist); for (int i=0; i tree(rows-1); + + Gda::UnionFind U(rows); + for (int i=0; iorig; + int b = e->dest; + double delta = e->length; + + int aa = U.fast_find(a); + int bb = U.fast_find(b); + + tree[i].left = aa; + tree[i].right = bb; + tree[i].distance = delta; - int ncluster = cluster_ids.size(); + U.Union(aa, bb); + } + + m_dendrogram->Setup(tree); + + // Setup condensed tree + m_condensedtree->Setup(hdb.condensed_tree, hdb.clusters); + + // clean raw dist + for (int i=1; i > ordered_cids; + for (int i=0; i& clusters) } } + // update dendrogram and consended tree + m_dendrogram->UpdateColor(clusters, (int)cluster_ids.size() + 1); + m_condensedtree->UpdateColor(ordered_cids); + return true; } @@ -606,20 +650,148 @@ void HDBScanDlg::OnOKClick(wxCommandEvent& event ) saveButton->Enable(); - // draw dendrogram - // GdaNode* _root, int _nelements, int _nclusters, std::vector& _clusters, double _cutoff - /*double** sltree =hdb.single_linkage_tree; - GdaNode* htree = new GdaNode[rows-1]; - - for (int i=0; iGetSelection()==0) { + m_dendrogram->SetActive(true); + m_condensedtree->SetActive(false); + m_dendrogram->Refresh(); + } else if (notebook->GetSelection()==1) { + m_dendrogram->SetActive(false); + m_condensedtree->SetActive(true); + m_condensedtree->Refresh(); } - m_panel->Setup(htree, rows, not_clustered > 0 ? ncluster +1 : ncluster, clusters, 0); - // free(htree); should be freed in m_panel since drawing still needs it's instance - */ - saveButton->Enable(); } + +IMPLEMENT_ABSTRACT_CLASS(wxHTree, wxPanel) + +BEGIN_EVENT_TABLE(wxHTree, wxPanel) +EVT_MOUSE_EVENTS(wxHTree::OnEvent) +EVT_IDLE(wxHTree::OnIdle) +EVT_PAINT(wxHTree::OnPaint) +EVT_SIZE(wxHTree::OnSize) +END_EVENT_TABLE() + +wxHTree::wxHTree(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) +: wxPanel(parent, id, pos, size), +isLeftDown(false), isLeftMove(false), isMovingSelectBox(false), +isLayerValid(false), isWindowActive(false), +isResize(false) , layer_bm(NULL) +{ + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + SetBackgroundColour(*wxWHITE); + select_box = NULL; +} + +wxHTree::~wxHTree() +{ + if (layer_bm) { + delete layer_bm; + layer_bm= NULL; + } +} + +void wxHTree::InitCanvas() +{ + if (layer_bm == NULL) { + wxSize sz = this->GetClientSize(); + int ww = sz.GetWidth(); + int hh = sz.GetHeight(); + + // for Hdpi painting + double scale_factor = 1.0; + if (GdaConst::enable_high_dpi_support) { + scale_factor = GetContentScaleFactor(); + } + layer_bm = new wxBitmap; + layer_bm->CreateScaled(ww, hh, 32, scale_factor); + } +} + +void wxHTree::OnIdle(wxIdleEvent &event) { + if (isResize && isWindowActive) { + isResize = false; + isLayerValid = false; + wxSize sz = GetClientSize(); + if (sz.x > 0 && sz.y > 0) { + if (layer_bm) { + delete layer_bm; + layer_bm = NULL; + } + InitCanvas(); + isLayerValid = DoDraw(); + } + } + event.Skip(); +} + +void wxHTree::OnEvent(wxMouseEvent &event) { + if (event.LeftDown()) { + // mouse left down + isLeftDown = true; + startPos = event.GetPosition(); + } else if (event.Dragging()) { + if (isLeftDown) { + isLeftMove = true; + } + } else if (event.LeftUp()) { + if (isLeftMove) { + isLeftMove = false; + // stop move + //isMovingSplitLine = false; + } else { + // only left click + if (select_box) { + delete select_box; + select_box = 0; + //NotifySelection(); + Refresh(); + } + } + isMovingSelectBox = false; + isLeftDown = false; + } +} + +void wxHTree::OnSize(wxSizeEvent &event) { + isResize = true; + wxSize sz = this->GetClientSize(); + screen_w = sz.GetWidth(); + screen_h = sz.GetHeight(); + virtual_screen_w = screen_w; + virtual_screen_h = screen_h; + event.Skip(); +} + +void wxHTree::OnPaint(wxPaintEvent &event) { + wxSize sz = GetClientSize(); + if (layer_bm && isLayerValid) { + // flush layer_bm to scren + wxMemoryDC dc; + dc.SelectObject(*layer_bm); + + wxPaintDC paint_dc(this); + paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); + + AfterDraw(paint_dc); + + // paint selection box + if (select_box) { + paint_dc.SetPen(*wxBLACK_PEN); + paint_dc.SetBrush(*wxTRANSPARENT_BRUSH); + paint_dc.DrawRectangle(*select_box); + } + dc.SelectObject(wxNullBitmap); + } else { + // draw blank canvas + wxAutoBufferedPaintDC dc(this); + dc.Clear(); + dc.SetPen(*wxTRANSPARENT_PEN); + wxBrush Brush; + Brush.SetColour(GdaConst::canvas_background_color); + dc.SetBrush(Brush); + dc.DrawRectangle(wxRect(0, 0, sz.x, sz.y)); + } + event.Skip(); +} diff --git a/DialogTools/HDBScanDlg.h b/DialogTools/HDBScanDlg.h index d0c1cd703..497f11298 100644 --- a/DialogTools/HDBScanDlg.h +++ b/DialogTools/HDBScanDlg.h @@ -26,48 +26,1353 @@ #include "../FramesManager.h" #include "../VarTools.h" #include "../logger.h" +#include "../Algorithms/hdbscan.h" +#include "../GenColor.h" #include "HClusterDlg.h" #include "AbstractClusterDlg.h" -#include "../Algorithms/hdbscan.h" -struct GdaNode; class Project; class TableInterface; +struct TreeNode{ + int parent; + int left; + int right; + double distance; +}; -class HDBScanDlg : public AbstractClusterDlg, public HighlightStateObserver +// base wxWidgets control of Hierachical Tree +class wxHTree : public wxPanel { +protected: + bool isLeftDown; + bool isLeftMove; + bool isMovingSelectBox; + bool isLayerValid; + bool isWindowActive; + bool isResize; + wxPoint startPos; + std::vector hl_ids; + std::vector hs; + wxRect* select_box; + wxBitmap* layer_bm; + + int screen_w; + int screen_h; + int virtual_screen_w; + int virtual_screen_h; + public: - HDBScanDlg(wxFrame *parent, Project* project); - virtual ~HDBScanDlg(); - - void CreateControls(); - virtual bool Init(); + wxHTree(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize); + virtual ~wxHTree(); + + virtual void OnIdle(wxIdleEvent& event); + virtual void OnEvent(wxMouseEvent& event ); + virtual void OnSize(wxSizeEvent& event); + virtual void OnPaint(wxPaintEvent& event); + + virtual void InitCanvas(); + + virtual bool DoDraw() = 0; + virtual void AfterDraw(wxDC& dc) {} + + virtual void SetActive(bool flag) { + isWindowActive = flag; + } + virtual void SetBlank(bool flag) { + isLayerValid = !flag; + Refresh(); + } + + DECLARE_ABSTRACT_CLASS(wxHTree) + DECLARE_EVENT_TABLE() +}; + +// wxWidgets control of Condensed Tree in HDBScan +class wxCondensedTree : public wxHTree +{ +protected: + std::vector tree; + + int margin_left, margin_right, margin_top, margin_bottom; + double ratio_w; + double ratio_h; + double offset_x; + double offset_y; + wxPoint zoomPos; + double zoom; + + double tree_left; + double tree_right; + double tree_h; + double tree_w; + double tree_t; + double tree_b; + + int n_nodes; + int max_cluster_size; + std::map node_lambda; + std::map cluster_left, cluster_right, cluster_sz; + std::map cluster_birth; + std::map cluster_isleft; + //std::vector cluster_ids; + std::map > cluster_children; + std::set select_treeclusters; + std::map cluster_death; + + std::vector colors; + std::map cluster_brush; + + std::map cluster_colors; + + bool setup; + +public: + wxCondensedTree(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize) + : wxHTree(parent, id, pos, size), setup(false) { + margin_top = 10; + margin_bottom = 50; + margin_left = 120; + margin_right = 100; + n_nodes = 0; + offset_x = 0; + offset_y = 0; + } + virtual ~wxCondensedTree() {} + + virtual std::set GetSelectInBox() { + if (select_box == NULL || select_box->GetWidth() <=0 || select_box->GetHeight() == 0) + return std::set(); + + int x1 = select_box->GetLeft(); + int x2 = select_box->GetRight(); + int y1 = select_box->GetTop(); + int y2 = select_box->GetBottom(); + + double x_left = (x1 - margin_left - offset_x) / ratio_w + tree_left; + double x_right = (x2 - margin_left - offset_x) / ratio_w + tree_left; + double y_top = (y1 - margin_top - offset_y) / ratio_h + tree_t; + double y_bottom = (y2 - margin_top - offset_y) / ratio_h + tree_t; + + // check which clusters are selected + std::vector target_clusters; + std::map::iterator it; + for (it = cluster_left.begin(); it != cluster_left.end(); ++it) { + int c = it->first; + int c_left = it->second; + int c_right = cluster_right[c]; + double c_top = cluster_birth[c]; + double c_bottom = cluster_death[c]; + + if (x_right < c_left || x_left > c_right || + y_top > c_bottom || y_bottom < c_top) { + // not intersect with this cluster + continue; + } + target_clusters.push_back(c); + } + + std::set select_nodes; + // check what leaf nodes in the selecte cluster + for (int i=0; i leaves = GetLeaves(c); + if (cluster_isleft[c]) { + for (int j=c_left, k=0; j x_left && j < x_right && lambda > y_top ) { + select_nodes.insert(node); + } + } + } else { + for (int j=c_right, k=0; j> c_left && k x_left && j < x_right && lambda > y_top ) { + select_nodes.insert(node); + } + } + } + } + + return select_nodes; + } + + virtual std::vector GetLeaves(int c) { + // get subclusters of c + std::map all_clusters; + std::stack clusters; + clusters.push(c); + while (!clusters.empty()) { + int c = clusters.top(); + all_clusters[c] = true; + clusters.pop(); + std::vector& children = cluster_children[c]; + for (int i=0; i leaves; + // get leaf nodes + for (int i=0; i >& ordered_cids) + { + int nclusters = (int)select_treeclusters.size(); + std::vector colors; + + CatClassification::PickColorSet(colors, CatClassification::unique_color_scheme, nclusters+1, false/*reversed*/); + + for (int i=0; i are the id of clusters in hdbscan's condensed tree + virtual void Setup(std::vector& _tree, + std::set treeclusters) + { + // clean up + node_lambda.clear(); + cluster_left.clear(); + cluster_right.clear(); + cluster_sz.clear(); + cluster_birth.clear(); + cluster_death.clear(); + cluster_children.clear(); + select_treeclusters.clear(); + cluster_brush.clear(); + cluster_colors.clear(); + tree.clear(); + + this->select_treeclusters = treeclusters; + + offset_x = 0; + offset_y = 0; + zoom = 1.0; + + // color for number of clusters + ColorSpace::Rgb a(8,29,88), b(253,227,32); // BluYl + colors = ColorSpace::ColorSpectrumHSV(a, b, 101); // 0-100 + + // copy tree + tree.resize(_tree.size()); + for (int i=0; iparent; + tree[i].child = _tree[i]->child; + tree[i].lambda_val = _tree[i]->lambda_val; + tree[i].child_size = _tree[i]->child_size; + if (tree[i].lambda_val == DBL_MAX) { + tree[i].lambda_val = 0; + } + } + + // get the data range of the tree: width, height, where to draw clusters + // and how to draw clusters + tree_t = 0; + tree_b = 0; + + int n = 0; + int root = tree[0].parent; + + // get max lambda value; and size of each cluster (number of items) + for (int i=0; i parent) { + // sub clusters + if (cluster_children[parent][0] == child) { + // left child + cluster_left[child] = cluster_left[parent] - cluster_sz[parent]; + cluster_right[child] = cluster_left[child] + cluster_sz[child]; + if (cluster_left[child] < tree_left) { + tree_left = cluster_left[child]; + } + if (cluster_birth[child] < lambda) { + cluster_birth[child] = lambda; + } + cluster_isleft[child] = true; + } else { + // right child + cluster_right[child] = cluster_right[parent] + cluster_sz[parent]; + cluster_left[child] = cluster_right[parent] - cluster_sz[child]; + if (cluster_right[child] > tree_right) { + tree_right = cluster_right[child]; + } + if (cluster_birth[child] < lambda) { + cluster_birth[child] = lambda; + } + cluster_isleft[child] = false; + } + } + } + + // make some buffer zone + int buffer = (tree_right - tree_left) * 0.05; + tree_left = tree_left - buffer; + tree_right = tree_right + buffer; + + tree_w = tree_right - tree_left; + tree_h = tree_b - tree_t; + + // setup brush color + max_cluster_size = 0; + std::map::iterator it; + for (it = cluster_sz.begin(); it != cluster_sz.end(); ++it) { + int sz = it->second; + if (max_cluster_size < sz) { + max_cluster_size = sz; + } + ColorSpace::Rgb clr = GetColor(sz); + cluster_brush[it->first] = new wxBrush(wxColour(clr.r, clr.g, clr.b)); + } + } + + virtual void SetupProjection() { + if (screen_w <= margin_left + margin_right || + screen_h <= margin_top + margin_bottom) { + return; + } + // available screen width and height + double av_screen_w = screen_w - margin_left - margin_right; + double av_screen_h = screen_h - margin_top - margin_bottom; + + // original mouse position in data space + double x0 = (zoomPos.x - margin_left - offset_x) / ratio_w + tree_left; + double y0 = (zoomPos.y - margin_top - offset_y) / ratio_h + tree_t; + + // get ratio of screen to data + ratio_w = av_screen_w * zoom / tree_w; + ratio_h = av_screen_h * zoom / tree_h; + + if (zoom != 1) { + // get offset of screen + offset_x = (zoomPos.x - margin_left) - (x0 - tree_left) / tree_w * (av_screen_w * zoom); + offset_y = (zoomPos.y - margin_top) - (y0 - tree_t) / tree_h * (av_screen_h * zoom); + } + } + + virtual void SetHighlight(const std::vector& ids) + { + if (setup == false) { + return; + } + hl_ids = ids; + for (size_t i=0; i cluster_startx; + + for (int i=0; i::iterator it; + for (it = cluster_birth.begin(); it != cluster_birth.end(); ++it) { + int c = it->first; + double x1 = cluster_left[c] - cluster_sz[c]; + double x2 = cluster_right[c] + cluster_sz[c]; + + if (!cluster_children[c].empty()) { + // it's children's birth + double y2 = cluster_birth[cluster_children[c][0]]; + // draw horizontal line + DrawHLine(dc, x1, x2, y2); + } + // draw selected ellipse + if (select_treeclusters.find(c) != select_treeclusters.end()) { + DrawSelectCluster(dc, c); + } + } + + // draw legend; + DrawLegend(dc); + DrawAxis(dc); + + // wxbitmap is ready to paint on screen + dc.SelectObject(wxNullBitmap); + Refresh(); + + return true; // set isLayerValid + } + + virtual void DrawSelectCluster(wxDC&dc, int c) { + double w = cluster_sz[c]; + double x = cluster_isleft[c] ? cluster_left[c] : cluster_right[c] - w; + double y = cluster_birth[c]; + double h = std::abs(cluster_death[c] - cluster_birth[c]); + + // minimium ellipse contains rectangle + double w1 = w * sqrt(2.0); + double h1 = h * 1.1; //sqrt(2.0); + + // if (h1 GetClientSize(); + int sch = sz.GetHeight() - margin_top*4 - margin_bottom*4; + int scw = sz.GetWidth(); + + // draw white background + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(*wxWHITE_BRUSH); + dc.DrawRectangle(sz.GetWidth() - margin_right, 0, margin_right, sz.GetHeight()); + + // 0-100 legend + double ratio_h = 101 / (double)sch; + int w = 20; // legend width + + for (int i=0; i<101; ++i) { + ColorSpace::Rgb rgb = colors[100-i]; + int x = scw - margin_right + 30; + int y = i / ratio_h + margin_top*4; + int h = 1 / ratio_h + 2; + + dc.SetBrush(wxBrush(wxColour(rgb.r, rgb.g, rgb.b))); + dc.DrawRectangle(x, y, w, h); + + if (i % 20 == 0) { + int sz = max_cluster_size * (100 - i) / 100.0; + wxString sz_lbl; + sz_lbl << sz; + dc.SetPen(*wxBLACK_PEN); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawText(sz_lbl, x + w + 5, y); + } + } + wxString legend_lbl = _("Number of Points"); + wxSize extent(dc.GetTextExtent(legend_lbl)); + double x = extent.GetWidth(); + dc.DrawRotatedText(legend_lbl, scw - 10, (sch + x) / 2.0, 90.0); + } + + virtual void DrawAxis(wxDC& dc) { + wxSize sz = this->GetClientSize(); + int sch = sz.GetHeight(); + + // draw white background + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(*wxWHITE_BRUSH); + dc.DrawRectangle(0, 0, margin_left, sz.GetHeight()); + + // draw label + wxString legend_lbl = _("lambda value"); + wxSize extent(dc.GetTextExtent(legend_lbl)); + double lbl_w = extent.GetWidth(); + dc.DrawRotatedText(legend_lbl, 5, (sch + lbl_w) / 2.0, 90.0); + + // draw a verticle line + int xpad = 40; + int x = margin_left - xpad; + int y0 = margin_top; + int y1 = sch - margin_bottom; + + dc.SetPen(*wxBLACK_PEN); + dc.DrawLine(x, y0, x, y1); + + // from tree_top to tree_bottom + double range = tree_b - tree_t; + double itv = range / 5.0; + + for (int i=0; i<5; i++) { + double lambda = itv * i; + + wxString str_lambda; + str_lambda << lambda; + + wxSize extent(dc.GetTextExtent(str_lambda)); + int str_w = extent.GetWidth(); + + int x1 = margin_left - xpad - str_w - 10; + int y1 = (lambda - tree_t) * ratio_h + margin_top + offset_y; + + dc.DrawText(str_lambda, x1, y1); + dc.DrawLine(margin_left -xpad -5, y1, margin_left-xpad, y1); + } + + // last one + wxString str_lambda; + str_lambda << tree_b; + wxSize extent1(dc.GetTextExtent(str_lambda)); + int str_w = extent1.GetWidth(); + int x1 = margin_left - xpad - str_w - 10; + y1 = (tree_b - tree_t) * ratio_h + margin_top + offset_y; + + dc.DrawText(str_lambda, x1, y1); + dc.DrawLine(margin_left -xpad -5, y1, margin_left-xpad, y1); + } + + virtual void UpdateHighlight() + { + // should be implemented by inherited classes + } + + virtual void OnEvent(wxMouseEvent& event) + { + if (event.LeftDown()) { + isLeftDown = true; + + startPos = event.GetPosition(); + if (select_box == 0) { + select_box = new wxRect(startPos.x, startPos.y, 0, 0); + } else { + if (select_box->Contains(startPos)) { + // drag&move select box + isMovingSelectBox = true; + } else { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iSetPosition(startPos); + select_box->SetWidth(0); + select_box->SetHeight(0); + UpdateHighlight(); + } + } + } else if (event.Dragging()) { + if (isLeftDown) { + isLeftMove = true; + // if using select box + if (select_box != 0) { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iOffset(event.GetPosition() - startPos); + } else { + select_box->SetBottomRight(event.GetPosition()); + } + UpdateHighlight(); + Refresh(); + } + startPos = event.GetPosition(); + } + } else if (event.LeftUp()) { + if (isLeftMove) { + isLeftMove = false; + // stop move + } else { + // only left click + if (select_box) { + delete select_box; + select_box = 0; + } + } + hl_ids.clear(); + for (size_t i=0; i htree; + std::map node_elevation; + std::map node_position; + std::vector leaves; + + double position_min; + double position_max; + double elevation_min; + double elevation_max; + + int margin_left, margin_right, margin_top, margin_bottom; + double ratio_w; + double ratio_h; - void OnSave(wxCommandEvent& event ); - void OnOKClick( wxCommandEvent& event ); - void OnClickClose( wxCommandEvent& event ); - void OnClose(wxCloseEvent& ev); - void OnDistanceChoice(wxCommandEvent& event); - void OnClusterChoice(wxCommandEvent& event); - void OnNotebookChange(wxBookCtrlEvent& event); - void InitVariableCombobox(wxListBox* var_box); + double cutoff; + DendroSplitLine* split_line; + std::vector end_nodes; + + bool setup; + bool isMovingSplitLine; + bool isDrawSplitLine; + std::vector colors; + std::vector cluster_ids; - virtual void update(HLStateInt* o); + std::vector > clusters; + + // for highlight + std::vector hl_ids; + std::vector hs; + +public: + wxDendrogram(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize) + : wxHTree(parent, id, pos, size), margin_left(10), + margin_right(10), margin_top(10), margin_bottom(50), + setup(false), cutoff(0) { + split_line = NULL; + isMovingSplitLine = false; + isDrawSplitLine = false; + } + virtual ~wxDendrogram() { + if (split_line) { + delete split_line; + split_line = NULL; + } + for (int i=0; i > GetClusters(int min_pts) { + if (isDrawSplitLine) { + if (clusters.empty()) { + OnSplitLineChange(cutoff, min_pts); + } + } + return clusters; + } + + virtual void SetupProjection() { + if (screen_w <= margin_left + margin_right || + screen_h <= margin_top + margin_bottom) { + return; + } + + // available screen width and height + double av_screen_w = screen_w - margin_left - margin_right; + double av_screen_h = screen_h - margin_top - margin_bottom; + + ratio_w = av_screen_w / elevation_max; + ratio_h = av_screen_h / position_max; + } + + virtual void UpdateColor(std::vector& _cluster_ids, int nclusters) { + isLayerValid = false; + + this->cluster_ids = _cluster_ids; + colors.clear(); + + CatClassification::PickColorSet(colors, CatClassification::unique_color_scheme, nclusters, false/*reversed*/); + + // update color for parent nodes + for (int i=0; i& tree, + double in_cutoff = 0, + bool use_spllit_line=false) { + setup = false; // anytime this function is called, don't draw/update + + // clean up if this function is for updating + leaves.clear(); + node_position.clear(); + node_elevation.clear(); + + htree = tree; + isDrawSplitLine = use_spllit_line; + int nn = (int)htree.size(); + int n_nodes = nn + 1; + + // setup highlight + hs.clear(); + hl_ids.clear(); + hs.resize(n_nodes, false); + for (int i=0; i elevation_max) { + elevation_max = d; + } + } + + this->cutoff = in_cutoff; + if (cutoff > elevation_max ) { + cutoff = elevation_max; + } else if (cutoff < 0) { + cutoff = 0; + } + } + + virtual void DrawLine(wxDC &dc, double x0, double y0, double x1, double y1) { + int xx0 = -margin_right + screen_w - x0 * ratio_w; + int xx1 = -margin_right + screen_w - x1 * ratio_w; + int yy0 = margin_top + y0 * ratio_h; + int yy1 = margin_top + y1 * ratio_h; + dc.DrawLine(xx0, yy0, xx1, yy1); + } + + virtual void DrawBranch(wxDC &dc, int a, int b, double dist) { + // ----------- b (node_position[b]) + // | + // | + // ---- a (node_position[a]) + // + // |<---dist------------ + // |<---elevation[b] + // |<---elevation[a] + double x0 = dist, x1 = node_elevation[b], x2 = node_elevation[a]; + double y0 = node_position[b], y1 = node_position[a]; + + if (!cluster_ids.empty()) { + // draw with color (defined for each cluster) + dc.SetPen(*wxBLACK_PEN); + int cluster_id = (int)cluster_ids[a]; + if (cluster_id >= 0) { + wxColor c = colors[cluster_id]; + dc.SetPen(wxPen(c)); + } + DrawLine(dc, x0, y1, x2, y1); + + dc.SetPen(*wxBLACK_PEN); + cluster_id = (int)cluster_ids[b]; + if (cluster_id >= 0) { + wxColor c = colors[cluster_ids[b]]; + dc.SetPen(wxPen(c)); + } + DrawLine(dc, x0, y0, x1, y0); + + if (cluster_ids[a] != cluster_ids[b]) { + dc.SetPen(*wxBLACK_PEN); + } + DrawLine(dc, dist, y0, dist, y1); + + } else { + + dc.SetPen(*wxBLACK_PEN); + DrawLine(dc, x0, y0, x1, y0); + DrawLine(dc, x0, y1, x2, y1); + DrawLine(dc, dist, y0, dist, y1); + } + } + + virtual void DrawNode(wxDC &dc, int node) { + double elevation = node_elevation[node]; + if (elevation > 0) { + return; + } + double position = node_position[node]; + // rectangle + int xx = -margin_right + screen_w - elevation * ratio_w; + int yy = margin_left + position * ratio_h; + + wxColor c = cluster_ids.empty() ? *wxBLACK : colors[cluster_ids[node]]; + RectNode* end = new RectNode(node, xx - 8, yy, c); + end->draw(dc, hs[node]); + end_nodes.push_back(end); + + if (!cluster_ids.empty()) { + wxColor c = colors[cluster_ids[node]]; + dc.SetBrush(wxBrush(c)); + dc.SetPen(*wxTRANSPARENT_PEN); + } + //dc.DrawRectangle(wxRect(xx-4, yy-2, 8, 4)); + } + + virtual void DrawAxis(wxDC& dc) { + // elevation_max elevation_min + int x1 = -margin_right + screen_w - elevation_max * ratio_w; + int x2 = -margin_right + screen_w - elevation_min * ratio_w; + int y = screen_h - margin_bottom + 10; + + dc.SetPen(*wxBLACK_PEN); + dc.DrawLine(x1, y, x2, y); + + double range = elevation_max - elevation_min; + double itv = range / 5.0; + + for (int i=0; i< 5; ++i) { + double val = elevation_min + (i * itv); + int x = -margin_right + screen_w - val * ratio_w; + int y1 = y + 10; + dc.DrawLine(x, y1, x, y); + wxString lbl; + lbl << val; + dc.DrawText(lbl, x, y1); + } + dc.DrawLine(x1, y+5, x1, y); + wxString lbl; + lbl << elevation_max; + dc.DrawText(lbl, x1 - 2, y + 10); + // draw label + wxString ttl = _("Mutual Reachability Distance"); + if (clusters.size() > 0 ) { + ttl << " (" << clusters.size() << " clusters)"; + } + wxSize extent(dc.GetTextExtent(ttl)); + double ttl_w = extent.GetWidth(); + dc.DrawText(ttl, (screen_w - margin_right - margin_right -ttl_w) / 2.0 + margin_left, y + 23); + } + + virtual void DrawSplitLine() { + // split between elevation_max elevation_min + wxSize sz = this->GetClientSize(); + int x = (elevation_max - cutoff) / elevation_max * (screen_w-margin_right-margin_left) + margin_left; + wxPoint v_p0(x, 0); + wxPoint v_p1(x, sz.GetHeight()); + if (split_line == NULL) { + split_line = new DendroSplitLine(v_p0, v_p1); + } else { + split_line->update(v_p0, v_p1); + } + } - virtual wxString _printConfiguration(); + virtual void NotifySelection(double cutoff, std::vector& cluster_labels) + { + // should be implemented by inherited classes + } + + virtual void UpdateHighlight() + { + // should be implemented by inherited classes + } + + virtual double GetCurrentCutoff(int x) { + double val = elevation_max * (1 - (x - margin_left) / (double)(screen_w-margin_right-margin_left)); + return val; + } + + virtual void OnSplitLineChange(double in_cutoff, int min_pts = 0, bool notify_change = true) + { + cutoff = in_cutoff; + + if (cutoff >= elevation_max) { + cutoff = elevation_max; + } else if (cutoff <= 0) { + cutoff = 0; + } + + // get clusters at cutoff elevation + clusters.clear(); + std::map visited_nodes; + + // process from top node + int n = (int)htree.size(); + int n_nodes = n + 1; + for (int i= n-1; i>=0; --i) { + if (cutoff < htree[i].distance) { + continue; + } + if (visited_nodes.find(htree[i].left) != visited_nodes.end() && + visited_nodes.find(htree[i].right) != visited_nodes.end()) { + continue; + } + // start extracting clusters + // get all children + std::vector cluster; + std::stack nodes; + nodes.push(htree[i].left); + nodes.push(htree[i].right); + while (!nodes.empty()) { + int cur = nodes.top(); + visited_nodes[cur] = true; + nodes.pop(); + if (cur < n_nodes) { + cluster.push_back(cur); + } else { + // process left and right nodes + int next = cur - n_nodes; + int left = htree[next].left; + int right = htree[next].right; + nodes.push(left); + nodes.push(right); + } + } + if (cluster.size() >= min_pts) { + clusters.push_back(cluster); + } + } + + // sort cluster by size + std::sort(clusters.begin(), clusters.end(), GenUtils::less_vectors); + + // assign cluster label (0 means noise) for each item + std::vector cluster_labels(n_nodes, 0); + + if (clusters.size() == 1 && clusters[0].size() == n_nodes) { + // single cluster + clusters.clear(); + } else { + for (int i=0; idraw(dc); + } + } - void UpdateClusterChoice(int n, std::vector& clusters); - void Highlight(int id); - void Highlight(vector& ids); + virtual void OnEvent(wxMouseEvent& event) + { + if (event.LeftDown()) { + isLeftDown = true; + + startPos = event.GetPosition(); + // test SplitLine + if (split_line) { + if (split_line->contains(startPos)) { + isMovingSplitLine = true; + } + } + if (!isMovingSplitLine) { + // test end_nodes + if (select_box == 0) { + select_box = new wxRect(startPos.x, startPos.y, 0, 0); + } else { + if (select_box->Contains(startPos)) { + // drag&move select box + isMovingSelectBox = true; + } else { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iSetPosition(startPos); + select_box->SetWidth(0); + select_box->SetHeight(0); + // highlight objects + for (int i=0;icontains(startPos)) { + hl_ids.push_back(end_nodes[i]->idx); + hs[end_nodes[i]->idx] = true; + } + } + UpdateHighlight(); + } + } + } + } else if (event.Dragging()) { + if (isLeftDown) { + isLeftMove = true; + // moving split line + if (isMovingSplitLine && split_line) { + wxPoint pt = event.GetPosition(); + wxSize sz = GetClientSize(); + + if (sz.GetWidth()> 0 && pt.x > sz.GetWidth() - 10) + pt.x = sz.GetWidth() - 10; + + split_line->move(pt, startPos); + int x = split_line->getX(); + OnSplitLineChange(GetCurrentCutoff(x)); + startPos = pt; + Refresh(); + } else { + // if using select box + if (select_box != 0) { + if ( !event.ShiftDown() && !event.CmdDown() ) { + hl_ids.clear(); + for (size_t i=0; iOffset(event.GetPosition() - startPos); + } else { + select_box->SetBottomRight(event.GetPosition()); + } + // highlight object + for (int i=0;iintersects(*select_box)) { + hl_ids.push_back(end_nodes[i]->idx); + hs[end_nodes[i]->idx] = true; + } + } + UpdateHighlight(); + Refresh(); + } + startPos = event.GetPosition(); + } + + } + } else if (event.LeftUp()) { + if (isLeftMove) { + isLeftMove = false; + // stop move + isMovingSplitLine = false; + } else { + // only left click + if (select_box) { + delete select_box; + select_box = 0; + Refresh(); + } + } + isMovingSelectBox = false; + isLeftDown = false; + } + } -protected: - virtual bool Run(vector& clusters); - virtual bool CheckAllInputs(); + void SetHighlight(const std::vector& ids) + { + if (setup == false) { + return; + } + hl_ids = ids; + for (size_t i=0; i bfs_htree() { + std::vector leaves; // return + int nn = (int)htree.size(); + int n_nodes = nn + 1; + std::stack nodes; + // process top node + int top = nn - 1; + nodes.push(htree[top].left); + nodes.push(htree[top].right); + + while (!nodes.empty()) { + int cur = nodes.top(); + nodes.pop(); + + if (cur < n_nodes) { + // leaf node + leaves.push_back(cur); + } else { + // process left and right nodes + int next = cur - n_nodes; + int left = htree[next].left; + int right = htree[next].right; + nodes.push(left); + nodes.push(right); + } + } + return leaves; + } +}; + + +class wxHDBScanDendrogram; +class wxHDBScanCondensedTree; + +// HDBScan Dialog +class HDBScanDlg : public AbstractClusterDlg, public HighlightStateObserver +{ char dist; int m_min_pts; int m_min_samples; @@ -78,19 +1383,21 @@ class HDBScanDlg : public AbstractClusterDlg, public HighlightStateObserver vector core_dist; vector probabilities; vector outliers; + vector hdbscan_clusters; vector > cluster_ids; int max_n_clusters; - + double cutoffDistance; vector clusters; - + wxButton *saveButton; wxChoice* combo_n; wxChoice* combo_cov; wxTextCtrl* m_textbox; wxChoice* m_distance; - DendrogramPanel* m_panel; + wxHDBScanCondensedTree* m_condensedtree; + wxHDBScanDendrogram* m_dendrogram; wxTextCtrl* m_minpts; wxTextCtrl* m_minsamples; wxTextCtrl* m_ctl_alpha; @@ -99,8 +1406,98 @@ class HDBScanDlg : public AbstractClusterDlg, public HighlightStateObserver wxChoice* m_select_method; wxCheckBox* chk_allowsinglecluster; +public: + HDBScanDlg(wxFrame *parent, Project* project); + virtual ~HDBScanDlg(); + + void CreateControls(); + virtual bool Init(); + + void OnSave(wxCommandEvent& event ); + void OnOKClick( wxCommandEvent& event ); + void OnClickClose( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnClusterChoice(wxCommandEvent& event); + void OnNotebookChange(wxBookCtrlEvent& event); + void InitVariableCombobox(wxListBox* var_box); + + virtual void update(HLStateInt* o); + + virtual wxString _printConfiguration(); + + HLStateInt* highlight_state; + + void UpdateClusterChoice(int n, std::vector& clusters); + void Highlight(int id); + void Highlight(vector& ids); + +protected: + virtual bool Run(vector& clusters); + virtual bool CheckAllInputs(); DECLARE_EVENT_TABLE() }; + +class wxHDBScanDendrogram : public wxDendrogram +{ +public: + wxHDBScanDendrogram(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize) + : wxDendrogram(parent, id, pos, size) { + + } + virtual ~wxHDBScanDendrogram() {} + + virtual void UpdateHighlight() + { + wxWindow* parent = GetParent(); + while (parent) { + wxWindow* w = parent; + HDBScanDlg* dlg = dynamic_cast(w); + if (dlg) { + dlg->Highlight(hl_ids); + break; + } + parent = w->GetParent(); + } + } +}; + +class wxHDBScanCondensedTree : public wxCondensedTree +{ +public: + wxHDBScanCondensedTree(wxWindow* parent, + wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, + const wxSize &size=wxDefaultSize) + : wxCondensedTree(parent, id, pos, size) { + + } + virtual ~wxHDBScanCondensedTree() {} + + virtual void UpdateHighlight() + { + // should be implemented by inherited classes + std::set select_ids = GetSelectInBox(); + std::set::iterator it; + for (it = select_ids.begin(); it != select_ids.end(); ++it) { + int sel_id = *it; + hl_ids.push_back(sel_id); + hs[sel_id] = true; + } + + wxWindow* parent = GetParent(); + while (parent) { + wxWindow* w = parent; + HDBScanDlg* dlg = dynamic_cast(w); + if (dlg) { + dlg->Highlight(hl_ids); + break; + } + parent = w->GetParent(); + } + } +}; + #endif diff --git a/DialogTools/KMeansDlg.cpp b/DialogTools/KMeansDlg.cpp index bd2533a00..773a65c3d 100644 --- a/DialogTools/KMeansDlg.cpp +++ b/DialogTools/KMeansDlg.cpp @@ -43,6 +43,7 @@ #include "../Explore/MapNewView.h" #include "../Project.h" #include "../Algorithms/cluster.h" +#include "../Algorithms/pam.h" #include "../GeneralWxUtils.h" #include "../GenUtils.h" #include "SaveToTableDlg.h" @@ -68,7 +69,7 @@ KClusterDlg::~KClusterDlg() void KClusterDlg::CreateControls() { - wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(880,820), wxHSCROLL|wxVSCROLL ); + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(940,820), wxHSCROLL|wxVSCROLL ); scrl->SetScrollRate( 5, 5 ); wxPanel *panel = new wxPanel(scrl); @@ -111,7 +112,7 @@ void KClusterDlg::CreateControls() gbox->Add(st10, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_pass, 1, wxEXPAND); - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:")); + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); @@ -152,7 +153,6 @@ void KClusterDlg::CreateControls() wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); hbox->Add(gbox, 1, wxEXPAND); - // Output wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); @@ -312,7 +312,7 @@ wxString KClusterDlg::_printConfiguration() wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - ncluster = value_ncluster; + ncluster = (int)value_ncluster; } wxString txt; @@ -346,9 +346,9 @@ bool KClusterDlg::CheckAllInputs() wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - n_cluster = value_ncluster; + n_cluster = (int)value_ncluster; } - if (n_cluster < 2 || n_cluster > num_obs) { + if (n_cluster < 2 || n_cluster > rows) { wxString err_msg = _("Please enter a valid number of clusters."); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); @@ -358,6 +358,13 @@ bool KClusterDlg::CheckAllInputs() transform = combo_tranform->GetSelection(); if (GetInputData(transform,1) == false) return false; + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } if (!CheckMinBound()) return false; @@ -365,14 +372,14 @@ bool KClusterDlg::CheckAllInputs() wxString str_pass = m_pass->GetValue(); long l_pass; if(str_pass.ToLong(&l_pass)) { - n_pass = l_pass; + n_pass = (int)l_pass; } n_maxiter = 300; // max iteration of EM wxString iterations = m_iterations->GetValue(); long l_maxiter; if(iterations.ToLong(&l_maxiter)) { - n_maxiter = l_maxiter; + n_maxiter = (int)l_maxiter; } meth_sel = combo_method->GetSelection(); @@ -385,7 +392,7 @@ bool KClusterDlg::CheckAllInputs() bool KClusterDlg::Run(vector& clusters) { if (GdaConst::use_gda_user_seed) { - setrandomstate(GdaConst::gda_user_seed); + setrandomstate((int)GdaConst::gda_user_seed); resetrandom(); } else { setrandomstate(-1); @@ -416,7 +423,7 @@ bool KClusterDlg::Run(vector& clusters) int s1 = 0; if (GdaConst::use_gda_user_seed) { - srand(GdaConst::gda_user_seed); + srand((int)GdaConst::gda_user_seed); s1 = rand(); } @@ -487,7 +494,7 @@ void KClusterDlg::OnOK(wxCommandEvent& event ) cluster_ids[ clusters[i] - 1 ].push_back(i); } std::sort(cluster_ids.begin(), cluster_ids.end(), GenUtils::less_vectors); - + for (int i=0; i < n_cluster; i++) { int c = i + 1; for (int j=0; j 0) { - vector clusters_undef(num_obs, false); + vector clusters_undef(rows, false); table_int->SetColData(col, time, clusters); table_int->SetColUndefined(col, time, clusters_undef); } @@ -619,6 +626,8 @@ KMediansDlg::KMediansDlg(wxFrame *parent, Project* project) show_iteration = true; cluster_method = "KMedians"; mean_center_type = " (median)"; + return_additional_summary = true; // for binary search, using kmedian measure + CreateControls(); m_distance->SetSelection(1); // set manhattan m_distance->Disable(); @@ -656,7 +665,7 @@ void KMediansDlg::doRun(int s1,int ncluster, int npass, int n_maxiter, int meth_ vector > KMediansDlg::_getMeanCenters(const vector >& solutions) { - int n_clusters = solutions.size(); + int n_clusters = (int)solutions.size(); vector > result(n_clusters); if (columns <= 0 || rows <= 0) return result; @@ -667,7 +676,24 @@ vector > KMediansDlg::_getMeanCenters(const vector >& table_int->GetColData(col_ids[i], var_info[i].time, raw_data[i]); } - int start = IsUseCentroids() ? 2 : 0; + if (has_x_cent) { + std::vector cents = project->GetCentroids(); + std::vector xvals(rows); + for (int i=0; i< rows; i++) { + xvals[i] = cents[i]->GetX(); + } + raw_data.push_back(xvals); + } + if (has_y_cent) { + std::vector cents = project->GetCentroids(); + std::vector yvals(rows); + for (int i=0; i< rows; i++) { + yvals[i] = cents[i]->GetY(); + } + raw_data.push_back(yvals); + } + + //int start = IsUseCentroids() ? 2 : 0; for (int i=0; i medians; int end = columns; @@ -677,7 +703,7 @@ vector > KMediansDlg::_getMeanCenters(const vector >& medians.push_back(0); // CENT_Y } for (int c=0; c > KMediansDlg::_getMeanCenters(const vector >& return result; } +double KMediansDlg::_calcSumOfSquaresMedian(const vector& cluster_ids) +{ + if (cluster_ids.empty() || input_data==NULL || mask == NULL) + return 0; + + double ssq = 0; + + for (int i=0; i vals; + for (int j=0; j& cluster_ids) +{ + if (cluster_ids.empty() || input_data==NULL || mask == NULL) + return 0; + + double ssq = 0; + + for (int i=0; i vals; + for (int j=0; j >& solution, + double& additional_ratio) +{ + // computing Sum of Square Differences from Medoids + if (columns <= 0 || rows <= 0) return wxEmptyString; + + int dist_sel = m_distance->GetSelection(); + + double totss = 0, totwithiness, betweenss, ratio; + vector withinss, avgs; + + wxString summary; + + if (dist_sel == 0) { + // euclidean distance + summary << _("(Using Euclidean distance (squared) to medians)\n"); + // totss double totss = _getTotalSumOfSquares(); + for (int i=0; i vals; + for (int j=0; j vals; + for (int j=0; jSetSelection(1); // set manhattan @@ -723,6 +875,235 @@ KMedoidsDlg::~KMedoidsDlg() wxLogMessage("In ~KMedoidsDlg()"); } +void KMedoidsDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(940,840), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate( 5, 5 ); + + wxPanel *panel = new wxPanel(scrl); + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + bool show_auto_button = true; + AddInputCtrls(panel, vbox, show_auto_button); + + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(13, 2, 5, 0); + + // NumberOfCluster Control + AddNumberOfClusterCtrl(panel, gbox); + + // Minimum Bound Control + // AddMinBound(panel, gbox); + + // Transformation Control + AddTransformation(panel, gbox); + + // KMedoids method + wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, _("Method:")); + wxString choices15[] = {"FastPAM", "FastCLARA", "FastCLARANS"}; + combo_method = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(200,-1), 3, choices15); + combo_method->SetSelection(0); + + gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(combo_method, 1, wxEXPAND); + + // Initialization Method + txt_initmethod = new wxStaticText(panel, wxID_ANY, _("Initialization Method:")); + wxString choices16[] = {"BUILD", "LAB"}; + combo_initmethod = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(200,-1), 2, choices16); + combo_initmethod->SetSelection(1); + //txt_initmethod->Hide(); + //combo_initmethod->Hide(); + + gbox->Add(txt_initmethod, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(combo_initmethod, 1, wxEXPAND); + + txt_iterations = new wxStaticText(panel, wxID_ANY, _("Maximum Iterations:")); + m_iterations = new wxTextCtrl(panel, wxID_ANY, "10", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(txt_iterations, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_iterations, 1, wxEXPAND); + txt_iterations->Hide(); + m_iterations->Hide(); + + wxStaticText* st10 = new wxStaticText(panel, wxID_ANY, ""); + m_fastswap = new wxCheckBox(panel, wxID_ANY, _("Use Additonal Swaps (FastPAM2)")); + m_fastswap->SetValue(true); // default 1 + gbox->Add(st10, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_fastswap, 1, wxEXPAND); + st10->Hide(); + m_fastswap->Hide(); + + // FastCLARA and FastCLARANS + txt_numsamples = new wxStaticText(panel, wxID_ANY, _("Number of Samples/Iterations:")); + m_numsamples = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(txt_numsamples, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_numsamples, 1, wxEXPAND); + + txt_sampling = new wxStaticText(panel, wxID_ANY, _("Sample Size/Rate:")); + m_sampling = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(txt_sampling, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_sampling, 1, wxEXPAND); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, ""); + m_keepmed = new wxCheckBox(panel, wxID_ANY, "Include Previous Medoids"); + m_keepmed->SetValue(true); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_keepmed, 1, wxEXPAND); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); + wxString choices13[] = {"Euclidean", "Manhattan"}; + m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); + m_distance->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_distance, 1, wxEXPAND); + if (!show_distance) { + st13->Hide(); + m_distance->Hide(); + m_distance->SetSelection(1); // set manhattan + } + + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); + + hbox17->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + hbox17->Add(seedButton,0,wxALIGN_CENTER_VERTICAL); + seedButton->Disable(); + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox17, 1, wxEXPAND); + + if (GdaConst::use_gda_user_seed) { + chk_seed->SetValue(true); + seedButton->Enable(); + } + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // Output + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); + m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); + //wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(m_textbox, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, 5); + + // Buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + + // Summary control + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + wxNotebook* notebook = AddSimpleReportCtrls(panel); + vbox1->Add(notebook, 1, wxEXPAND|wxALL,20); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(vbox1, 1, wxEXPAND | wxALL); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + okButton->Bind(wxEVT_BUTTON, &KClusterDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &KClusterDlg::OnClickClose, this); + chk_seed->Bind(wxEVT_CHECKBOX, &KClusterDlg::OnSeedCheck, this); + seedButton->Bind(wxEVT_BUTTON, &KClusterDlg::OnChangeSeed, this); + combo_method->Bind(wxEVT_CHOICE, &KMedoidsDlg::OnMethodChoice, this); + m_distance->Bind(wxEVT_CHOICE, &KClusterDlg::OnDistanceChoice, this); + + wxCommandEvent ev; + OnMethodChoice(ev); +} + +void KMedoidsDlg::OnMethodChoice(wxCommandEvent& evt) +{ + long k = 0; + combo_n->GetValue().ToLong(&k); + + if (evt.GetSelection() == 0) { + // FastPAM + bool flag = true; + txt_initmethod->Enable(flag); + combo_initmethod->Enable(flag); + txt_iterations->Enable(flag); + m_iterations->Enable(flag); + m_fastswap->Enable(flag); + + flag = false; + txt_numsamples->Enable(flag); + m_numsamples->Enable(flag); + txt_sampling->Enable(flag); + m_sampling->Enable(flag); + m_keepmed->Enable(flag); + } else if (evt.GetSelection() == 1) { + // FastCLARA + bool flag = true; + txt_initmethod->Enable(flag); + combo_initmethod->Enable(flag); + txt_iterations->Enable(flag); + m_iterations->Enable(flag); + m_fastswap->Enable(flag); + + txt_numsamples->Enable(flag); + m_numsamples->Enable(flag); + txt_sampling->Enable(flag); + m_sampling->Enable(flag); + m_keepmed->Enable(flag); + m_keepmed->SetValue(true); + + m_numsamples->SetValue(rows <= 100 ? "5" : "10"); + // Larger sample size, used by Schubert and Rousseeuw, 2019 + // 80 + 4. * k + int ns = rows <= 100 ? 40 + 2*k : 80 + 4*k; + if (ns >= rows) ns = rows; + m_sampling->SetValue(wxString::Format("%d", ns)); + } else { + // FastCLARANS + bool flag = false; + txt_initmethod->Enable(flag); + combo_initmethod->Enable(flag); + txt_iterations->Enable(flag); + m_iterations->Enable(flag); + m_fastswap->Enable(flag); + + flag = true; + txt_numsamples->Enable(flag); + m_numsamples->Enable(flag); + txt_sampling->Enable(flag); + m_sampling->Enable(flag); + m_keepmed->Enable(!flag); + + m_numsamples->SetValue("2"); + m_sampling->SetValue(wxString::Format("%f", 0.025)); + } +} + void KMedoidsDlg::ComputeDistMatrix(int dist_sel) { int transpose = 0; // row wise @@ -732,45 +1113,189 @@ void KMedoidsDlg::ComputeDistMatrix(int dist_sel) distmatrix = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); } -void KMedoidsDlg::doRun(int s1,int ncluster, int npass, int n_maxiter, int meth_sel, int dist_sel, double min_bound, double* bound_vals) +bool KMedoidsDlg::CheckAllInputs() { - double error; - int ifound; - int* clusterid = new int[rows]; + n_cluster = 0; + wxString str_ncluster = combo_n->GetValue(); + long value_ncluster; + if (str_ncluster.ToLong(&value_ncluster)) { + n_cluster = (int)value_ncluster; + } + if (n_cluster < 1 || n_cluster > rows) { + wxString err_msg = _("Please enter a valid number of clusters."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; + } + + transform = combo_tranform->GetSelection(); + + if (GetInputData(transform,1) == false) return false; + + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } + + n_maxiter = 10; + wxString iterations = m_iterations->GetValue(); + long l_maxiter; + if(iterations.ToLong(&l_maxiter)) { + n_maxiter = (int)l_maxiter; + } + + dist_sel = m_distance->GetSelection(); + + return true; +} + +int KMedoidsDlg::GetFirstMedoid(double** distmatrix) +{ + int n = 0; + double min_sum = DBL_MAX, tmp_sum=0; + for (size_t i=0; i j ? distmatrix[i][j] : distmatrix[j][i]; + } + } + if (tmp_sum < min_sum) { + n = i; + min_sum = tmp_sum; + } + } + + return n; +} + +bool KMedoidsDlg::Run(vector& clusters) +{ + if (GdaConst::use_gda_user_seed) { + setrandomstate((int)GdaConst::gda_user_seed); + resetrandom(); + } else { + setrandomstate(-1); + resetrandom(); + } + + double cost; + std::vector clusterid; + + // NOTE input_data should be retrieved first!! + // get input: weights (auto) + // this function has to be called when use auto-weighting + weight = GetWeights(columns); - int s2 = s1==0 ? 0 : s1 + npass; + // compute distance matrix + ComputeDistMatrix(dist_sel); + RawDistMatrix dist_matrix(distmatrix); + first_medoid = GetFirstMedoid(distmatrix); + + double pam_fasttol = m_fastswap->GetValue() ? 1 : 0; + int init_method = combo_initmethod->GetSelection(); + bool keepmed = m_keepmed->GetValue(); + int method = combo_method->GetSelection(); - kmedoids(ncluster, rows, distmatrix, npass, n_maxiter, clusterid, &error, &ifound, bound_vals, min_bound, s1, s2); - - set centers; - map > c_dist; - for (int i=0; i clusters(rows); - set::iterator it; - for (it=centers.begin(); it!=centers.end(); it++) { - vector& ids = c_dist[*it]; - for (int i=0; iGetValue().ToLong(&samples); + double sample_rate = 0.025; + m_sampling->GetValue().ToDouble(&sample_rate); + + if (sample_rate <= 1 && sample_rate*rows < 3 * n_cluster) { + wxString err_msg = _("The sampling rate is set to a small value, please set another value to make sample size larger than 3*k."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; + } + + FastCLARA clara(rows, &dist_matrix, pam_init, n_cluster, 0, + pam_fasttol, (int)samples, sample_rate, !keepmed, seed); + cost = clara.run(); + clusterid = clara.getResults(); + medoid_ids = clara.getMedoids(); + } + delete pam_init; + + } else if (combo_method->GetSelection() == 2) { + // FastCLARANS + long samples = 2; + m_numsamples->GetValue().ToLong(&samples); + double sample_rate = 0.025; + m_sampling->GetValue().ToDouble(&sample_rate); + + if (sample_rate <=0 || sample_rate > 1.0) { + wxString err_msg = _("Please input a valid value between 0 and 1 for sample rate."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; } - cid += 1; + + FastCLARANS clarans(rows, &dist_matrix, n_cluster, (int)samples, sample_rate, seed); + cost = clarans.run(); + clusterid = clarans.getResults(); + medoid_ids = clarans.getMedoids(); } - sub_clusters[error] = clusters; - - delete[] clusterid; + + for (int i=0; i > KMedoidsDlg::_getMeanCenters( const vector >& solutions) { - // The centroid is defined as the element with the - // smallest sum of distances to the other elements. - int n_clusters = solutions.size(); + // Using medoids instead of mean centers + int n_clusters = (int)solutions.size(); vector > result(n_clusters); - + + // update order of medoids using solutions + boost::unordered_map medoids_dict; + for (int i=0; i ordered_medoids; + std::vector::iterator it; + for (int i=0; i > raw_data; @@ -779,24 +1304,21 @@ vector > KMedoidsDlg::_getMeanCenters( table_int->GetColData(col_ids[i], var_info[i].time, raw_data[i]); } - vector centroid_ids(n_clusters,0); - vector errors(n_clusters); - for (int j=0; j cents = project->GetCentroids(); + std::vector xvals(rows); + for (int i=0; i< rows; i++) { + xvals[i] = cents[i]->GetX(); + } + raw_data.push_back(xvals); + } + if (has_y_cent) { + std::vector cents = project->GetCentroids(); + std::vector yvals(rows); + for (int i=0; i< rows; i++) { + yvals[i] = cents[i]->GetY(); } + raw_data.push_back(yvals); } for (int i=0; i > KMedoidsDlg::_getMeanCenters( int end = columns; if (IsUseCentroids()) { end = columns - 2; - means.push_back(0); // CENT_X - means.push_back(0); // CENT_Y + means.push_back(cent_xs[medoid_ids[i]]); // CENT_X + means.push_back(cent_ys[medoid_ids[i]]); // CENT_Y } - for (int c=0; c > KMedoidsDlg::_getMeanCenters( return result; } + +wxString KMedoidsDlg::_printConfiguration() +{ + int ncluster = 0; + wxString str_ncluster = combo_n->GetValue(); + long value_ncluster; + if (str_ncluster.ToLong(&value_ncluster)) { + ncluster = (int)value_ncluster; + } + + wxString txt; + txt << _("Method:\t") << cluster_method << " ("; + txt << combo_method->GetString(combo_method->GetSelection()) << ")" << "\n"; + txt << _("Number of clusters:\t") << ncluster << "\n"; + + //if (chk_floor && chk_floor->IsChecked()) { + // int idx = combo_floor->GetSelection(); + // wxString nm = name_to_nm[combo_floor->GetString(idx)]; + // txt << _("Minimum bound:\t") << txt_floor->GetValue() << "(" << nm << ")" << "\n"; + //} + + if (combo_method->GetSelection() < 2) { + txt << _("Initialization method:\t") << combo_initmethod->GetString(combo_initmethod->GetSelection()) << "\n"; + //txt << _("Maximum iterations:\t") << m_iterations->GetValue() << "\n"; + if (m_fastswap->GetValue()) { + //txt << _("\tUse additional swaps(FastPAM2).\n"); + } + if (combo_method->GetSelection() == 1 ) { + txt << _("Number of samples/iterations:\t") << m_numsamples->GetValue() << "\n"; + txt << _("Sample size/rate:\t") << m_sampling->GetValue() << "\n"; + if (m_keepmed->GetValue()) { + txt << _("\tInclude previous medoids\n"); + } + } + } else if (combo_method->GetSelection() == 2) { + txt << _("Number of samples/iterations:\t") << m_numsamples->GetValue() << "\n"; + txt << _("Sample size/rate:\t") << m_sampling->GetValue() << "\n"; + + } + + txt << _("Transformation:\t") << combo_tranform->GetString(combo_tranform->GetSelection()) << "\n"; + + txt << _("Distance function:\t") << m_distance->GetString(m_distance->GetSelection()) << "\n"; + + txt << _("Medoids:\n"); + for (int i=0; i& cluster_ids, int medoid_idx) +{ + if (cluster_ids.empty() || input_data==NULL || mask == NULL) + return 0; + + double ssq = 0; + + for (int i=0; i vals; + for (int j=0; j& cluster_ids, int medoid_idx) +{ + if (cluster_ids.empty() || input_data==NULL || mask == NULL) + return 0; + + double ssq = 0; + + for (int i=0; i vals; + for (int j=0; j >& solution, + double& additional_ratio) +{ + // computing Sum of Square Differences from Medoids + if (columns <= 0 || rows <= 0) return wxEmptyString; + + int dist_sel = m_distance->GetSelection(); + + double totss = 0, totwithiness, betweenss, ratio; + vector withinss, avgs; + + wxString summary; + + if (dist_sel == 0) { + // euclidean distance + summary << _("(Using Euclidean distance (squared) to medoids)\n"); + // totss double totss = _getTotalSumOfSquares(); + for (int i=0; i vals; + for (int j=0; j vals; + for (int j=0; j #include #include +#include #include #include @@ -41,7 +42,7 @@ class KClusterDlg : public AbstractClusterDlg KClusterDlg(wxFrame *parent, Project* project, wxString title=""); virtual ~KClusterDlg(); - void CreateControls(); + virtual void CreateControls(); void OnOK( wxCommandEvent& event ); void OnClickClose( wxCommandEvent& event ); @@ -77,14 +78,14 @@ class KClusterDlg : public AbstractClusterDlg wxCheckBox* chk_seed; wxChoice* combo_method; - + wxChoice* combo_cov; wxTextCtrl* m_textbox; wxTextCtrl* m_iterations; wxTextCtrl* m_pass; wxChoice* m_distance; wxButton* seedButton; - + wxString cluster_method; unsigned int row_lim; @@ -96,10 +97,14 @@ class KClusterDlg : public AbstractClusterDlg map > sub_clusters; - DECLARE_EVENT_TABLE() }; +//////////////////////////////////////////////////////////////////////// +// +// KMeansDlg +//////////////////////////////////////////////////////////////////////// + class KMeansDlg : public KClusterDlg { public: @@ -109,6 +114,10 @@ class KMeansDlg : public KClusterDlg virtual void doRun(int s1, int ncluster, int npass, int n_maxiter, int meth_sel, int dist_sel, double min_bound, double* bound_vals); }; +//////////////////////////////////////////////////////////////////////// +// +// KMediansDlg +//////////////////////////////////////////////////////////////////////// class KMediansDlg : public KClusterDlg { public: @@ -117,16 +126,61 @@ class KMediansDlg : public KClusterDlg virtual void doRun(int s1, int ncluster, int npass, int n_maxiter, int meth_sel, int dist_sel, double min_bound, double* bound_vals); virtual vector > _getMeanCenters(const vector >& solution); + +protected: + // get addtional content for summary,e.g. medoids (within distance to median) + virtual wxString _additionalSummary(const vector >& solution, + double& additional_ratio); + + double _calcSumOfSquaresMedian(const vector& cluster_ids); + + double _calcSumOfManhattanMedian(const vector& cluster_ids); }; +//////////////////////////////////////////////////////////////////////// +// +// KMedoids +//////////////////////////////////////////////////////////////////////// class KMedoidsDlg : public KClusterDlg { public: KMedoidsDlg(wxFrame *parent, Project* project); virtual ~KMedoidsDlg(); - + + virtual void CreateControls(); + virtual void ComputeDistMatrix(int dist_sel); virtual void doRun(int s1, int ncluster, int npass, int n_maxiter, int meth_sel, int dist_sel, double min_bound, double* bound_vals); virtual vector > _getMeanCenters(const vector >& solution); + virtual wxString _printConfiguration(); + void OnMethodChoice(wxCommandEvent& evt); + +protected: + virtual bool Run(vector& clusters); + virtual bool CheckAllInputs(); + + // get addtional content for summary,e.g. medoids (within distance to median) + virtual wxString _additionalSummary(const vector >& solution, + double& additional_ratio); + + int GetFirstMedoid(double** distmatrix); + + double _calcSumOfSquaresMedoid(const vector& cluster_ids, int medoid_idx); + + double _calcSumOfManhattanMedoid(const vector& cluster_ids, int medoid_idx); + + wxStaticText* txt_iterations; + wxStaticText* txt_initmethod; + wxChoice* combo_initmethod; + wxCheckBox* m_fastswap; + wxStaticText* txt_numsamples; + wxTextCtrl* m_numsamples; + wxStaticText* txt_sampling; + wxTextCtrl* m_sampling; + wxCheckBox* m_keepmed; + + std::vector medoid_ids; + // first medoid is the medoid when cluster number is specified to 1 + int first_medoid; }; #endif diff --git a/DialogTools/LisaWhat2OpenDlg.cpp b/DialogTools/LisaWhat2OpenDlg.cpp index 96a6495a3..7497aef4a 100644 --- a/DialogTools/LisaWhat2OpenDlg.cpp +++ b/DialogTools/LisaWhat2OpenDlg.cpp @@ -50,7 +50,11 @@ void LisaWhat2OpenDlg::CreateControls() //if (FindWindow(XRCID("IDC_CHECK4"))) // m_check4 = wxDynamicCast(FindWindow(XRCID("IDC_CHECK4")), wxCheckBox); } - + +void LisaWhat2OpenDlg::HideMoranScatter() +{ + m_check3->Hide(); +} void LisaWhat2OpenDlg::OnOkClick( wxCommandEvent& event ) { m_SigMap = m_check1->GetValue(); diff --git a/DialogTools/LisaWhat2OpenDlg.h b/DialogTools/LisaWhat2OpenDlg.h index c68fc6bb5..b9f5b13d3 100644 --- a/DialogTools/LisaWhat2OpenDlg.h +++ b/DialogTools/LisaWhat2OpenDlg.h @@ -32,8 +32,9 @@ class LisaWhat2OpenDlg: public wxDialog const wxSize& size = wxDefaultSize, long style = wxCAPTION|wxDEFAULT_DIALOG_STYLE ); void CreateControls(); - void OnOkClick( wxCommandEvent& event ); - + void OnOkClick( wxCommandEvent& event ); + void HideMoranScatter(); + wxCheckBox* m_check1; wxCheckBox* m_check2; wxCheckBox* m_check3; diff --git a/DialogTools/MDSDlg.cpp b/DialogTools/MDSDlg.cpp index c21503836..50262c9b0 100644 --- a/DialogTools/MDSDlg.cpp +++ b/DialogTools/MDSDlg.cpp @@ -23,6 +23,10 @@ #include #include #include +#include +#include +#include +#include #include "../FramesManager.h" #include "../DataViewer/TableInterface.h" @@ -30,7 +34,9 @@ #include "../Algorithms/DataUtils.h" #include "../Algorithms/cluster.h" #include "../Algorithms/mds.h" +#include "../Algorithms/smacof.h" #include "../Explore/ScatterNewPlotView.h" +#include "../Explore/3DPlotView.h" #include "SaveToTableDlg.h" #include "MDSDlg.h" @@ -42,7 +48,6 @@ MDSDlg::MDSDlg(wxFrame *parent_s, Project* project_s) : AbstractClusterDlg(parent_s, project_s, _("MDS Settings")) { wxLogMessage("Open MDSDlg."); - CreateControls(); } @@ -52,7 +57,7 @@ MDSDlg::~MDSDlg() void MDSDlg::CreateControls() { - wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(420,560), wxHSCROLL|wxVSCROLL ); + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(430,740), wxHSCROLL|wxVSCROLL ); scrl->SetScrollRate( 5, 5 ); wxPanel *panel = new wxPanel(scrl); @@ -63,42 +68,91 @@ void MDSDlg::CreateControls() AddSimpleInputCtrls(panel, vbox); // parameters - wxFlexGridSizer* gbox = new wxFlexGridSizer(5,2,10,0); - + wxFlexGridSizer* gbox = new wxFlexGridSizer(8,2,10,0); + + // method + wxStaticText* st12 = new wxStaticText(panel, wxID_ANY, _("Method:")); + const wxString _methods[2] = {"classic metric", "smacof"}; + combo_method = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(120,-1), 2, _methods); + combo_method->SetSelection(0); + gbox->Add(st12, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(combo_method, 1, wxEXPAND); + // power iteration option approximation - wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, _("Use Power Iteration:")); + txt_usepower= new wxStaticText(panel, wxID_ANY, _("Use Power Iteration:")); wxBoxSizer *hbox15 = new wxBoxSizer(wxHORIZONTAL); chk_poweriteration = new wxCheckBox(panel, wxID_ANY, ""); - lbl_poweriteration = new wxStaticText(panel, wxID_ANY, _("# Max Iteration:")); - txt_poweriteration = new wxTextCtrl(panel, wxID_ANY, "100",wxDefaultPosition, wxSize(70,-1)); - txt_poweriteration->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + chk_poweriteration->Bind(wxEVT_CHECKBOX, &MDSDlg::OnCheckPowerIteration, this); - if (project->GetNumRecords() < 150) { - lbl_poweriteration->Disable(); - txt_poweriteration->Disable(); - } else { - chk_poweriteration->SetValue(true); - } + hbox15->Add(chk_poweriteration); - hbox15->Add(lbl_poweriteration); - hbox15->Add(txt_poweriteration); - gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_usepower, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(hbox15, 1, wxEXPAND); - + // smacof + txt_maxit = new wxStaticText(panel, wxID_ANY, _("Maximum # of Iterations:")); + m_iterations = new wxTextCtrl(panel, wxID_ANY, "1000", wxDefaultPosition, wxSize(200,-1)); + m_iterations->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + gbox->Add(txt_maxit, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_iterations, 1, wxEXPAND); + + if (project->GetNumRecords() < 150) { + txt_maxit->Disable(); + m_iterations->Disable(); + } else { + chk_poweriteration->SetValue(true); + } + + txt_eps = new wxStaticText(panel, wxID_ANY, _("Convergence Criterion:")); + m_eps = new wxTextCtrl(panel, wxID_ANY, "0.000001", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(txt_eps, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_eps, 1, wxEXPAND); + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); wxString choices13[] = {"Euclidean", "Manhattan"}; m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); m_distance->SetSelection(0); gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_distance, 1, wxEXPAND); - + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Category Variable:")); + wxBoxSizer *hbox18 = new wxBoxSizer(wxHORIZONTAL); + chk_group = new wxCheckBox(panel, wxID_ANY, ""); + { + std::vector col_id_map; + table_int->FillStringAndIntegerColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (!table_int->IsColTimeVariant(id)) { + cat_var_items.Add(name); + } + } + } + m_group = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(128,-1), cat_var_items); + hbox18->Add(chk_group,0, wxALIGN_CENTER_VERTICAL); + hbox18->Add(m_group,0,wxALIGN_CENTER_VERTICAL); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox18, 1, wxEXPAND); + + // Transformation AddTransformation(panel, gbox); wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); hbox->Add(gbox, 1, wxEXPAND); - + + // Output + wxStaticText* st1 = new wxStaticText(panel, wxID_ANY, _("# of Dimensions:"), wxDefaultPosition, wxSize(160,-1)); + const wxString dims[2] = {"2", "3"}; + combo_n = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 2, dims); + combo_n->SetSelection(0); + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); + hbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(combo_n, 1, wxEXPAND); + // buttons wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); @@ -110,11 +164,12 @@ void MDSDlg::CreateControls() // Container vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox1, 0, wxEXPAND | wxALL, 10); vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); - + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); container->Add(vbox); - + panel->SetSizer(container); wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); @@ -133,31 +188,37 @@ void MDSDlg::CreateControls() // Events okButton->Bind(wxEVT_BUTTON, &MDSDlg::OnOK, this); closeButton->Bind(wxEVT_BUTTON, &MDSDlg::OnCloseClick, this); + combo_method->Bind(wxEVT_CHOICE, &MDSDlg::OnMethodChoice, this); + + wxCommandEvent evt; + OnMethodChoice(evt); } -void MDSDlg::OnDistanceChoice(wxCommandEvent& event) +void MDSDlg::OnMethodChoice(wxCommandEvent &event) { - - if (m_distance->GetSelection() == 0) { - m_distance->SetSelection(1); - } else if (m_distance->GetSelection() == 3) { - m_distance->SetSelection(4); - } else if (m_distance->GetSelection() == 6) { - m_distance->SetSelection(7); - } else if (m_distance->GetSelection() == 9) { - m_distance->SetSelection(10); - } - + bool flag = combo_method->GetSelection() == 0 ? false : true; + + m_iterations->Enable(flag); + m_eps->Enable(flag); + m_distance->Enable(flag); + txt_maxit->Enable(flag); + m_iterations->Enable(flag); + txt_eps->Enable(flag); + if (flag) chk_poweriteration->SetValue(false); + + chk_poweriteration->Enable(!flag); + txt_usepower->Enable(!flag); + if (!flag) m_distance->SetSelection(0); } void MDSDlg::OnCheckPowerIteration(wxCommandEvent& event) -{ - if (chk_poweriteration->IsChecked()) { - txt_poweriteration->Enable(); - lbl_poweriteration->Enable(); - } else { - txt_poweriteration->Disable(); - lbl_poweriteration->Disable(); +{ + if (chk_poweriteration->IsChecked()) { + m_iterations->Enable(); + txt_maxit->Enable(); + } else { + m_iterations->Disable(); + txt_maxit->Disable(); } } @@ -212,14 +273,59 @@ wxString MDSDlg::_printConfiguration() return ""; } +double MDSDlg::_calculateRankCorr(char dist, int rows, double **ragged_distances, + const std::vector >& result) +{ + double d; + std::vector x, y; + for (size_t r=1; r >& result) +{ + double d, tmp; + double sum_dist = 0; + double sum_diff = 0; + double stress = 0; + for (size_t r=1; rGetSelection(); - - if (!GetInputData(transform, 2)) - return; + + if (!GetInputData(transform, 2)) + return; double* weight = GetWeights(columns); @@ -228,47 +334,151 @@ void MDSDlg::OnOK(wxCommandEvent& event ) int dist_sel = m_distance->GetSelection(); char dist_choices[] = {'e','b'}; dist = dist_choices[dist_sel]; - - int new_col = 2; + + wxString str_iterations = m_iterations->GetValue(); + long n_iter; + if (!str_iterations.ToLong(&n_iter)) { + wxString err_msg = _("Please enter a valid number for maximum number of iterations."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + wxString str_eps = m_eps->GetValue(); + double eps; + if (!str_eps.ToDouble(&eps)) { + wxString err_msg = _("Please enter a valid value for convergence criterion."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + groups.clear(); + group_labels.clear(); + if (chk_group->IsChecked()) { + int idx = m_group->GetSelection(); + wxString nm = m_group->GetString(idx); + int col = table_int->FindColId(nm); + if (col != wxNOT_FOUND) { + if (table_int->IsColNumeric(col)) { + std::vector group_variable(rows, 0); + table_int->GetColData(col, 0, group_variable); + std::map > group_ids; + std::map >::iterator it; + for (size_t i=0; isecond); + group_labels.push_back(wxString::Format("%d",it->first)); + } + } else { + + std::vector group_variable(rows); + table_int->GetColData(col, 0, group_variable); + std::map > group_ids; + std::map >::iterator it; + for (size_t i=0; isecond); + group_labels.push_back(it->first); + } + + } + } + } + + int new_col = combo_n->GetSelection() == 0 ? 2 : 3; vector > results; - - if (chk_poweriteration->IsChecked()) { - double** ragged_distances = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); - - vector > distances = DataUtils::copyRaggedMatrix(ragged_distances, rows, rows); - for (int i = 1; i < rows; i++) free(ragged_distances[i]); - free(ragged_distances); - - if (dist == 'b') { - for (int i=0; i > output_vals; + + double **ragged_distances = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); + + if (combo_method->GetSelection() == 1) { + // column-wise lower-triangle matrix for SMACOF + size_t idx = 0; + double *delta = new double[rows * (rows-1)/2]; + for (size_t i=0; i< rows-1; ++i) { // col idx + for (size_t j=1+i; j < rows; ++j) { // row idx + delta[idx] = ragged_distances[j][i]; + idx += 1; } } - - wxString str_iterations; - str_iterations = txt_poweriteration->GetValue(); - long l_iterations = 0; - str_iterations.ToLong(&l_iterations); - FastMDS mds(distances, 2, (int)l_iterations); - results = mds.GetResult(); - - } else { + int m = (int)idx; + + // init random xold for smacof + boost::mt19937 rng((const unsigned int)GdaConst::gda_user_seed); + boost::uniform_01 X(rng); + double *xold = new double[m * new_col]; + for (size_t i=0; i< m * new_col; ++i) { + xold[i] = X(); + } + + double *xnew; + stress = runSmacof(delta, m, new_col, (int)n_iter, eps, xold, &itel, &xnew); + delete[] delta; + results.resize(new_col); - for (int i=0; iIsChecked()) { + // classical MDS with power iteration and full matrix + vector > distances = DataUtils::copyRaggedMatrix(ragged_distances, rows, rows); + if (dist == 'b') { + for (size_t i=0; iGetValue(); + long l_iterations = 0; + str_iterations.ToLong(&l_iterations); + FastMDS mds(distances, new_col, (int)l_iterations); + results = mds.GetResult(); + } else { + // classical MDS + results.resize(new_col); + for (size_t i=0; i new_data(new_col); @@ -292,13 +502,24 @@ void MDSDlg::OnOK(wxCommandEvent& event ) SaveToTableDlg dlg(project, this, new_data, _("Save Results: MDS"), wxDefaultPosition, wxSize(400,400)); + wxString method_str = combo_method->GetStringSelection(); + std::vector info_str; + for (size_t k=0; k& new_col_ids = dlg.new_col_ids; std::vector& new_col_names = dlg.new_col_names; - + + // at least 2 variables + if (new_col_ids.size() < 2) return; + + size_t num_new_vars = new_col_ids.size(); + std::vector new_var_info; - new_var_info.resize(2); + new_var_info.resize(num_new_vars); new_var_info[0].time = 0; // Set Primary GdaVarTools::VarInfo attributes @@ -315,18 +536,39 @@ void MDSDlg::OnOK(wxCommandEvent& event ) table_int->GetMinMaxVals(new_col_ids[1], new_var_info[1].min, new_var_info[1].max); new_var_info[1].sync_with_global_time = new_var_info[1].is_time_variant; new_var_info[1].fixed_scale = true; - - wxString title = _("MDS Plot - ") + new_col_names[0] + ", " + new_col_names[1]; - - MDSPlotFrame* subframe = - new MDSPlotFrame(parent, project, + + if (num_new_vars == 2) { + wxString title = _("MDS Plot (%s) - %s, %s"); + title = wxString::Format(title, method_str, new_col_names[0], new_col_names[1]); + + MDSPlotFrame* subframe = + new MDSPlotFrame(parent, project, groups, group_labels, + info_str, output_vals, new_var_info, new_col_ids, false, title, wxDefaultPosition, GdaConst::scatterplot_default_size, wxDEFAULT_FRAME_STYLE); - wxCommandEvent ev; - subframe->OnViewLinearSmoother(ev); - subframe->OnDisplayStatistics(ev); + + } else if (num_new_vars == 3) { + + new_var_info[2].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[2].name = new_col_names[2]; + new_var_info[2].is_time_variant = table_int->IsColTimeVariant(new_col_ids[2]); + table_int->GetMinMaxVals(new_col_ids[2], new_var_info[2].min, new_var_info[2].max); + new_var_info[2].sync_with_global_time = new_var_info[2].is_time_variant; + new_var_info[2].fixed_scale = true; + + wxString title = _("MDS 3D Plot (%s) - %s, %s, %s"); + title = wxString::Format(title, method_str, new_col_names[0], new_col_names[1], new_col_names[2]); + + C3DPlotFrame *subframe = + new C3DPlotFrame(parent, project, + new_var_info, new_col_ids, + title, info_str, output_vals, wxDefaultPosition, + GdaConst::three_d_default_size, + wxDEFAULT_FRAME_STYLE); + } } } diff --git a/DialogTools/MDSDlg.h b/DialogTools/MDSDlg.h index 930f6926f..0b0141ba1 100644 --- a/DialogTools/MDSDlg.h +++ b/DialogTools/MDSDlg.h @@ -40,22 +40,39 @@ class MDSDlg : public AbstractClusterDlg void OnCloseClick( wxCommandEvent& event ); void OnClose(wxCloseEvent& ev); - void OnDistanceChoice( wxCommandEvent& event ); void OnCheckPowerIteration( wxCommandEvent& event ); - + void OnMethodChoice(wxCommandEvent &event); void InitVariableCombobox(wxListBox* var_box); - + + double _calculateStress(char dist, int rows, double **ragged_distances, + const std::vector >& result); + double _calculateRankCorr(char dist, int rows, double **ragged_distances, + const std::vector >& result); + virtual wxString _printConfiguration(); std::vector var_info; std::vector col_ids; -protected: +protected: + std::vector > groups; + std::vector group_labels; + + wxChoice* combo_method; + SimpleReportTextCtrl* m_textbox; + wxTextCtrl* m_iterations; + wxTextCtrl* m_eps; + wxChoice* combo_n; wxChoice* m_distance; wxCheckBox* chk_poweriteration; - wxTextCtrl* txt_poweriteration; - wxStaticText* lbl_poweriteration; + wxStaticText* txt_usepower; + wxStaticText* txt_maxit; + wxStaticText* txt_eps; + + wxChoice* m_group; + wxCheckBox* chk_group; + wxArrayString cat_var_items; DECLARE_EVENT_TABLE() }; diff --git a/DialogTools/MaxpDlg.cpp b/DialogTools/MaxpDlg.cpp index d9c11e09d..4dcdaa4c5 100644 --- a/DialogTools/MaxpDlg.cpp +++ b/DialogTools/MaxpDlg.cpp @@ -76,22 +76,16 @@ void MaxpDlg::CreateControls() wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); // Input - AddSimpleInputCtrls(panel, vbox); + AddSimpleInputCtrls(panel, vbox, false, true/*show spatial weights controls*/); // Parameters wxFlexGridSizer* gbox = new wxFlexGridSizer(9,2,5,0); - - // Weights Control - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Weights:")); - combo_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1)); - gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(combo_weights, 1, wxEXPAND); // Minimum Bound Control AddMinBound(panel, gbox); // Min regions - st_minregions = new wxStaticText(panel, wxID_ANY, _("Min # per Region:")); + st_minregions = new wxStaticText(panel, wxID_ANY, _("Min Region Size:")); txt_minregions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); txt_minregions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); gbox->Add(st_minregions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); @@ -146,7 +140,7 @@ void MaxpDlg::CreateControls() // Transformation AddTransformation(panel, gbox); - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:")); + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); @@ -210,24 +204,7 @@ void MaxpDlg::CreateControls() SetAutoLayout(true); sizerAll->Fit(this); - Centre(); - - // Content - InitVariableCombobox(combo_var, false); - - // init weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - size_t sel_pos=0; - for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); - if (w_man_int->GetDefault() == weights_ids[i]) - sel_pos = i; - } - if (weights_ids.size() > 0) combo_weights->SetSelection(sel_pos); // Events okButton->Bind(wxEVT_BUTTON, &MaxpDlg::OnOK, this); @@ -375,6 +352,12 @@ void MaxpDlg::InitLISACombobox() combo_lisa->SetStringSelection(select_lisa); } +void MaxpDlg::update(TableState* o) +{ + InitVariableCombobox(combo_var); + InitLISACombobox(); +} + void MaxpDlg::OnClickClose(wxCommandEvent& event ) { wxLogMessage("OnClickClose MaxpDlg."); @@ -396,7 +379,7 @@ wxString MaxpDlg::_printConfiguration() { wxString txt; - txt << _("Weights:") << "\t" << combo_weights->GetString(combo_weights->GetSelection()) << "\n"; + txt << _("Weights:") << "\t" << m_spatial_weights->GetString(m_spatial_weights->GetSelection()) << "\n"; if (chk_floor && chk_floor->IsChecked() && combo_floor->GetSelection() >= 0) { int idx = combo_floor->GetSelection(); @@ -472,20 +455,8 @@ void MaxpDlg::OnOK(wxCommandEvent& event ) dist = dist_choices[dist_sel]; // Weights selection - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); - + GalWeight* gw = CheckSpatialWeights(); if (gw == NULL) { - wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); - dlg.ShowModal(); return; } @@ -546,6 +517,7 @@ void MaxpDlg::OnOK(wxCommandEvent& event ) wxString nm = name_to_nm[select_lisa]; int col = table_int->FindColId(nm); if (col == wxNOT_FOUND) { + if (bound_vals) delete[] bound_vals; wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), nm); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); @@ -580,6 +552,7 @@ void MaxpDlg::OnOK(wxCommandEvent& event ) wxString str_coolrate = m_coolrate->GetValue(); str_coolrate.ToDouble(&cool_rate); if ( cool_rate > 1 || cool_rate <= 0) { + if (bound_vals) delete[] bound_vals; wxString err_msg = _("Cooling rate for Simulated Annealing algorithm has to be a float number between 0 and 1 (e.g. 0.85)."); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); @@ -600,9 +573,10 @@ void MaxpDlg::OnOK(wxCommandEvent& event ) } z.push_back(vals); } - Maxp maxp(gw->gal, z, min_bound, bound_vals, initial, seeds, local_search_method, tabu_length, cool_rate, rnd_seed, dist); - - delete[] bound_vals; + Maxp maxp(gw->gal, z, min_bound, bound_vals, initial, seeds, + local_search_method, tabu_length, cool_rate, rnd_seed, dist); + + if (bound_vals) delete[] bound_vals; vector > cluster_ids = maxp.GetRegions(); int ncluster = cluster_ids.size(); diff --git a/DialogTools/MaxpDlg.h b/DialogTools/MaxpDlg.h index e181548bd..b8bb7b778 100644 --- a/DialogTools/MaxpDlg.h +++ b/DialogTools/MaxpDlg.h @@ -49,7 +49,7 @@ class MaxpDlg : public AbstractClusterDlg void OnChangeSeed(wxCommandEvent& event); void OnLISACheck(wxCommandEvent& event); virtual void OnCheckMinBound(wxCommandEvent& event); - + virtual void update(TableState* o); virtual void InitLISACombobox(); virtual wxString _printConfiguration(); @@ -58,7 +58,6 @@ class MaxpDlg : public AbstractClusterDlg wxCheckBox* chk_seed; wxCheckBox* chk_lisa; - wxChoice* combo_weights; wxChoice* combo_lisa; wxChoice* m_localsearch; diff --git a/DialogTools/MultiQuantileLisaDlg.cpp b/DialogTools/MultiQuantileLisaDlg.cpp new file mode 100644 index 000000000..0f39ec1ff --- /dev/null +++ b/DialogTools/MultiQuantileLisaDlg.cpp @@ -0,0 +1,451 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightsManager.h" +#include "../ShapeOperations/WeightUtils.h" +#include "../ShapeOperations/GwtWeight.h" +#include "../ShapeOperations/GalWeight.h" +#include "../Explore/MLJCCoordinator.h" +#include "../Explore/MLJCMapNewView.h" +#include "../GenUtils.h" +#include "../Project.h" +#include "MultiQuantileLisaDlg.h" + +BEGIN_EVENT_TABLE( MultiQuantileLisaDlg, wxDialog ) +EVT_CLOSE( MultiQuantileLisaDlg::OnClose ) +END_EVENT_TABLE() + +MultiQuantileLisaDlg::MultiQuantileLisaDlg(wxFrame *parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("Multivariate Quantile LISA Dialog")) +{ + wxLogMessage("Open MultiQuantileLisaDlg Dialog."); + + CreateControls(); +} + +MultiQuantileLisaDlg::~MultiQuantileLisaDlg() +{ +} + +void MultiQuantileLisaDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, + wxSize(800,560), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate(5, 5); + + wxPanel *panel = new wxPanel(scrl); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + wxStaticBoxSizer *hbox_quantile = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Add a Variable for Quantile LISA:")); + wxBoxSizer* left_box = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* middle_box = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* right_box = new wxBoxSizer(wxVERTICAL); + + + // variable list + combo_var = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(280,250), 0, NULL, + wxLB_SINGLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + InitVariableCombobox(combo_var, false, false); + // parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(15,2,10,0); + + // Quantiles + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Number of Quantiles:")); + txt_quantiles = new wxTextCtrl(panel, wxID_ANY, "5",wxDefaultPosition, wxSize(70,-1)); + txt_quantiles->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_quantiles, 1, wxEXPAND); + + // Select Quantile + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Select a Quantile for LISA:")); + wxString choices13[] = {"1", "2", "3", "4", "5"}; + cho_quantile = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(70,-1), 5, choices13); + cho_quantile->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(cho_quantile, 1, wxEXPAND); + + // Quantiles + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Save Quantile Selection in Field:")); + txt_output_field = new wxTextCtrl(panel, wxID_ANY, "QT1",wxDefaultPosition, wxSize(70,-1)); + + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_output_field, 1, wxEXPAND); + + wxBoxSizer* var_box = new wxBoxSizer(wxVERTICAL); + var_box->Add(combo_var, 1, wxEXPAND | wxALL, 10); + var_box->Add(gbox, 0, wxEXPAND); + + // list contrl + lst_quantile = new wxListCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(400, 180), wxLC_REPORT); + lst_quantile->AppendColumn(_("Variable")); + lst_quantile->SetColumnWidth(0, 80); + lst_quantile->AppendColumn(_("Number of Quantiles"), wxLIST_FORMAT_RIGHT); + lst_quantile->SetColumnWidth(1, 120); + lst_quantile->AppendColumn(_("Select Quantile"), wxLIST_FORMAT_RIGHT); + lst_quantile->SetColumnWidth(2, 120); + lst_quantile->AppendColumn(_("New Field")); + lst_quantile->SetColumnWidth(3, 80); + + + // move buttons + move_left = new wxButton(panel, wxID_ANY, "<", wxDefaultPosition, wxSize(25,25)); + move_right = new wxButton(panel, wxID_ANY, ">", wxDefaultPosition, wxSize(25,25)); + middle_box->Add(move_right, 0, wxTOP, 100); + middle_box->Add(move_left, 0, wxTOP, 10); + + left_box->Add(var_box); + right_box->Add(lst_quantile, 1, wxALL|wxEXPAND, 5); + + hbox_quantile->Add(left_box); + hbox_quantile->Add(middle_box); + hbox_quantile->Add(right_box, 1, wxALL|wxEXPAND); + + // add spatial weights selection control + wxBitmap w_bitmap(wxXmlResource::Get()->LoadBitmap("SpatialWeights_Bmp")); + weights_btn = new wxBitmapButton(panel, wxID_ANY, w_bitmap, wxDefaultPosition, + w_bitmap.GetSize(), wxTRANSPARENT_WINDOW | wxBORDER_NONE); + st_spatial_w = new wxStaticText(panel, wxID_ANY, _("Select Spatial Weights:")); + m_spatial_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(150,-1)); + wxBoxSizer *hbox_spatial_w = new wxBoxSizer(wxHORIZONTAL); + hbox_spatial_w->Add(st_spatial_w, 0, wxALIGN_CENTER_VERTICAL | wxLEFT| wxRIGHT, 10); + hbox_spatial_w->Add(m_spatial_weights, 0, wxALIGN_CENTER_VERTICAL| wxRIGHT, 10); + hbox_spatial_w->Add(weights_btn, 0, wxALIGN_CENTER_VERTICAL); + // init the spatial weights control + InitSpatialWeights(m_spatial_weights); + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox_quantile, 1, wxEXPAND | wxALL, 10); + vbox->Add(hbox_spatial_w, 0, wxALIGN_LEFT | wxALL, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox, 1, wxEXPAND); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + txt_quantiles->Bind(wxEVT_KEY_UP, &MultiQuantileLisaDlg::OnChangeQuantiles, this); + move_left->Bind(wxEVT_BUTTON, &MultiQuantileLisaDlg::OnRemoveRow, this); + move_right->Bind(wxEVT_BUTTON, &MultiQuantileLisaDlg::OnAddRow, this); + + weights_btn->Bind(wxEVT_BUTTON, &MultiQuantileLisaDlg::OnSpatialWeights, this); + okButton->Bind(wxEVT_BUTTON, &MultiQuantileLisaDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &MultiQuantileLisaDlg::OnCloseClick, this); +} + +std::list MultiQuantileLisaDlg::GetListSel(wxListCtrl* lc) +{ + std::list l; + if (!lc) return l; + long item = -1; + for ( ;; ) { + item = lc->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if ( item == -1 ) break; + l.push_back(item); + } + return l; +} + +void MultiQuantileLisaDlg::OnRemoveRow(wxCommandEvent& event) +{ + std::list sels = GetListSel(lst_quantile); + sels.sort(); + sels.reverse(); + if (!sels.empty()) { + BOOST_FOREACH(int i, sels) { + wxString field_name = lst_quantile->GetItemText(i, 3); + new_fields.erase(field_name); + lst_quantile->DeleteItem(i); + } + } +} + +void MultiQuantileLisaDlg::OnAddRow(wxCommandEvent& event) +{ + // check if inputs are valid + if (project == NULL) return; + + // get selected variable + int sel_var = combo_var->GetSelection(); + if (sel_var < 0) { + wxString err_msg = _("Please select a variable for Quantile LISA."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + wxString var_name = combo_var->GetString(sel_var); + wxString col_name = name_to_nm[var_name]; + + int col = table_int->FindColId(col_name); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), col_name); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // get num quantiles + long l_quantiles = 0; + wxString tmp_quantiles = txt_quantiles->GetValue(); + if (tmp_quantiles.ToLong(&l_quantiles) == false) { + wxString err_msg = _("The input value for the number of quantiles is not valid."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // get select quantile + int sel_quantile = cho_quantile->GetSelection() + 1; + + // save the binary data in table + wxString field_name = txt_output_field->GetValue(); + if (field_name.IsEmpty() || new_fields.find(field_name) != new_fields.end()) { + wxString err_msg = _("Please enter a valid and non-duplicated field name for saving the quantile selection as binary data in table."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + // add as a new row to listctrol + int new_row = lst_quantile->GetItemCount(); + lst_quantile->InsertItem(new_row, var_name); + lst_quantile->SetItem(new_row, 1, tmp_quantiles); + lst_quantile->SetItem(new_row, 2, wxString::Format("%d", sel_quantile)); + lst_quantile->SetItem(new_row, 3, field_name); + + // save for detect duplicates + new_fields.insert(field_name); + + // update the suggested field name + wxString suggest_field_nm = "QT"; + suggest_field_nm << lst_quantile->GetItemCount()+1; + txt_output_field->SetValue(suggest_field_nm); +} + + +void MultiQuantileLisaDlg::update(TableState* o) +{ + InitVariableCombobox(combo_var, /*integer + real*/false, /* no centroids*/false); +} + +void MultiQuantileLisaDlg::OnChangeQuantiles(wxKeyEvent& event) +{ + wxString tmp_val = txt_quantiles->GetValue(); + tmp_val.Trim(false); + tmp_val.Trim(true); + + if (tmp_val.IsEmpty()) return; + + long quantiles = 0; + if (tmp_val.ToLong(&quantiles) == false || quantiles < 2) { + wxString err_msg = _("The input value for the number of quantiles is not valid. Please enter an integer number greater than 1."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + txt_quantiles->SetValue("5"); + return; + } + // change dropdown list items in cho_quantiles + cho_quantile->Clear(); + for (int i=0; iAppend(wxString::Format("%d", i+1)); + } + cho_quantile->SetSelection(0); + event.Skip(); +} + +void MultiQuantileLisaDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close MultiQuantileLisaDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void MultiQuantileLisaDlg::OnCloseClick(wxCommandEvent& event ) +{ + wxLogMessage("Close MultiQuantileLisaDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void MultiQuantileLisaDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click MultiQuantileLisaDlg::OnOK"); + + if (project == NULL) return; + + // Weights selection + GalWeight* gw = CheckSpatialWeights(); + if (gw == NULL) { + return; + } + + // get selected variable + int num_vars = lst_quantile->GetItemCount(); + + if (num_vars < 2) { + wxString err_msg = _("Please use the > button to specify more than one variable for Multivarite Quantile LISA."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + std::vector col_ids(num_vars); + std::vector var_info(num_vars); + wxString var_details; + + for (int i=0; iGetItemText(i, 0); + wxString col_name = name_to_nm[var_name]; + int tm = name_to_tm_id[var_name]; + int col = table_int->FindColId(col_name); + std::vector data; + table_int->GetColData(col, tm, data); + + wxString tmp_quantiles = lst_quantile->GetItemText(i, 1); + long l_quantiles = 0; + tmp_quantiles.ToLong(&l_quantiles); + int n_quantiles = l_quantiles; + + wxString tmp_selquantile = lst_quantile->GetItemText(i, 2); + long l_selquantile = 0; + tmp_selquantile.ToLong(&l_selquantile); + int sel_quantile = l_selquantile; + + wxString field_name = lst_quantile->GetItemText(i, 3); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving the quantile selection as binary data in table."); + wxMessageDialog dlg(NULL, err_msg, _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + var_details << var_name << "/" << sel_quantile << "/" << n_quantiles; + if (i < num_vars-1) var_details << ","; + + // compute quantile of selected variable + std::vector breaks(n_quantiles - 1); + std::vector sort_data = data; + std::sort(sort_data.begin(), sort_data.end()); + for (int i=0; i < breaks.size(); ++i) { + breaks[i] = Gda::percentile(((i+1.0)*100.0)/((double) n_quantiles), sort_data); + } + breaks.insert(breaks.begin(), std::numeric_limits::min()); + breaks.push_back(std::numeric_limits::max()); + + // create a binary data for selected quantile + std::vector bin_data(rows, 0); + double lower_bound = breaks[sel_quantile-1]; + double upper_bound = breaks[sel_quantile]; + + for (int i=0; i < data.size(); ++i) { + if (lower_bound < data[i] && data[i] <= upper_bound) { + bin_data[i] = 1; + } + } + int time=0; + int new_col = table_int->FindColId(field_name); + if ( new_col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + new_col = table_int->InsertCol(GdaConst::long64_type, field_name, + col_insert_pos, time_steps, + m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(new_col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (new_col > 0) { + std::vector clusters_undef(rows, false); + table_int->SetColData(new_col, time, bin_data); + table_int->SetColUndefined(col, time, clusters_undef); + } + + col_ids[i] = new_col; + var_info[i].time = 0; + var_info[i].name = field_name; + var_info[i].is_time_variant = false; + table_int->GetMinMaxVals(new_col, var_info[i].min, var_info[i].max); + var_info[i].sync_with_global_time = false; + var_info[i].fixed_scale = true; + } + + // compute binary local Join count + int sel = m_spatial_weights->GetSelection(); + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (sel >= weights_ids.size()) { + sel = (int)weights_ids.size() - 1; + } + boost::uuids::uuid w_id = weights_ids[sel]; + + JCCoordinator* lc = new JCCoordinator(w_id, project, var_info, col_ids); + MLJCMapFrame *sf = new MLJCMapFrame(parent, project, lc, false); + + wxString ttl = _("Multivariate Quantile LISA Map (%s)"); + ttl = wxString::Format(ttl, var_details); + sf->SetTitle(ttl); +} diff --git a/DialogTools/MultiQuantileLisaDlg.h b/DialogTools/MultiQuantileLisaDlg.h new file mode 100644 index 000000000..8020dae1d --- /dev/null +++ b/DialogTools/MultiQuantileLisaDlg.h @@ -0,0 +1,67 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_MULTIQUANTILELISA_DLG_H__ +#define __GEODA_CENTER_MULTIQUANTILELISA_DLG_H__ + +#include +#include +#include +#include +#include +#include +#include + +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../DataViewer/TableInterface.h" +#include "AbstractClusterDlg.h" + +class MultiQuantileLisaDlg : public AbstractClusterDlg +{ +public: + MultiQuantileLisaDlg(wxFrame *parent, Project* project); + virtual ~MultiQuantileLisaDlg(); + + void CreateControls(); + + void OnOK( wxCommandEvent& event ); + void OnChangeQuantiles(wxKeyEvent& event); + void OnCloseClick( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnRemoveRow(wxCommandEvent& event); + void OnAddRow(wxCommandEvent& event); + std::list GetListSel(wxListCtrl* lc); + + virtual wxString _printConfiguration() {return wxEmptyString;} + virtual void update(TableState* o); + +protected: + wxTextCtrl* txt_quantiles; + wxChoice* cho_quantile; + wxTextCtrl* txt_output_field; + wxListCtrl* lst_quantile; + wxButton* move_left; + wxButton* move_right; + + std::set new_fields; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/PCASettingsDlg.cpp b/DialogTools/PCASettingsDlg.cpp index a0de44478..227fe4d04 100644 --- a/DialogTools/PCASettingsDlg.cpp +++ b/DialogTools/PCASettingsDlg.cpp @@ -90,8 +90,8 @@ void PCASettingsDlg::CreateControls() combo_n = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 0, NULL); wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); - hbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL); - hbox1->Add(combo_n, 1, wxEXPAND); + hbox1->Add(st1, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); + hbox1->Add(combo_n, 1, wxEXPAND | wxALL, 5); // buttons @@ -216,7 +216,7 @@ void PCASettingsDlg::OnOK(wxCommandEvent& event ) int max_sel_name_len = 0; for (int i=0; i max_sel_name_len) { - max_sel_name_len = col_names[i].length(); + max_sel_name_len = (int)col_names[i].length(); } } @@ -299,7 +299,7 @@ void PCASettingsDlg::OnOK(wxCommandEvent& event ) if (header == false) { pca_log << wxString::Format("%-*s", max_sel_name_len+4, ""); - int n_len = token.length(); + int n_len = (int)token.length(); int pos = 0; bool start = false; int sub_len = 0; @@ -308,7 +308,11 @@ void PCASettingsDlg::OnOK(wxCommandEvent& event ) while (pos < n_len){ if ( start && sub_len > 0 && (token[pos] == ' ' || pos == n_len-1) ) { // end of a number - pca_log << wxString::Format("%*s%d", sub_len-1, "PC", pc_idx++); + if (pc_idx < 10) { + pca_log << wxString::Format("%*s%d", sub_len-1, "PC", pc_idx++); + } else { + pca_log << wxString::Format("%*s%d", sub_len-2, "PC", pc_idx++); + } sub_len = 1; start = false; } else { @@ -329,13 +333,12 @@ void PCASettingsDlg::OnOK(wxCommandEvent& event ) } if (scores.size() != nrows * ncols) { - row_lim = (nrows < ncols)? nrows : ncols, + row_lim = (nrows < ncols)? nrows : ncols; col_lim = (ncols < nrows)? ncols : nrows; } else { row_lim = nrows; col_lim = ncols; } - //https://stats.stackexchange.com/questions/143905/loadings-vs-eigenvectors-in-pca-when-to-use-one-or-another /* pca_log << "\n\nRotated data: \n"; diff --git a/DialogTools/PreferenceDlg.cpp b/DialogTools/PreferenceDlg.cpp index fe7900a5e..086d12f65 100644 --- a/DialogTools/PreferenceDlg.cpp +++ b/DialogTools/PreferenceDlg.cpp @@ -196,9 +196,19 @@ void PreferenceDlg::Init() } cmb33->SetSelection(0); cmb33->Bind(wxEVT_COMBOBOX, &PreferenceDlg::OnChoice3, this); - - grid_sizer1->Add(lbl_txt3, 1, wxEXPAND); - grid_sizer1->Add(cmb33, 0, wxALIGN_RIGHT); + grid_sizer1->Add(lbl_txt3, 1, wxEXPAND); + grid_sizer1->Add(cmb33, 0, wxALIGN_RIGHT); + + grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("Draw the values of selected variable on map (input font size):")), 1, + wxEXPAND); + wxBoxSizer* box29 = new wxBoxSizer(wxHORIZONTAL); + cbox_lbl = new wxCheckBox(vis_page, XRCID("PREF_DRAW_LABELS"), "", pos); + txt_lbl_font = new wxTextCtrl(vis_page, XRCID("PREF_DRAW_LABEL_FONT_SIZE"), "8", pos, wxSize(85, -1), txt_num_style); + box29->Add(cbox_lbl); + box29->Add(txt_lbl_font); + grid_sizer1->Add(box29, 0, wxALIGN_RIGHT); + cbox_lbl->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnDrawLabels, this); + txt_lbl_font->Bind(wxEVT_COMMAND_TEXT_UPDATED, &PreferenceDlg::OnLabelFontSizeEnter, this); grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("Plots:")), 1, wxTOP | wxBOTTOM, 10); @@ -239,11 +249,6 @@ void PreferenceDlg::Init() slider7->Bind(wxEVT_SLIDER, &PreferenceDlg::OnSlider7, this); - grid_sizer1->Add(new wxStaticText(vis_page, wxID_ANY, _("System:")), 1, - wxTOP | wxBOTTOM, 10); - grid_sizer1->AddSpacer(10); - - wxString lbl113 = _("Language:"); wxStaticText* lbl_txt113 = new wxStaticText(vis_page, wxID_ANY, lbl113); cmb113 = new wxComboBox(vis_page, wxID_ANY, "", pos, wxDefaultSize, 0, @@ -260,14 +265,14 @@ void PreferenceDlg::Init() grid_sizer1->Add(lbl_txt113, 1, wxEXPAND); grid_sizer1->Add(cmb113, 0, wxALIGN_RIGHT); - wxString lbl8 = _("Show Recent/Sample Data panel in Connect Datasource Dialog:"); + wxString lbl8 = _("Show Recent/Sample data panel in Connect Datasource Dialog:"); wxStaticText* lbl_txt8 = new wxStaticText(vis_page, wxID_ANY, lbl8); cbox8 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_RECENT"), "", pos); grid_sizer1->Add(lbl_txt8, 1, wxEXPAND); grid_sizer1->Add(cbox8, 0, wxALIGN_RIGHT); cbox8->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnShowRecent, this); - wxString lbl9 = _("Show CSV Configuration in Merge Data Dialog:"); + wxString lbl9 = _("Show CSV configuration in Merge Data Dialog:"); wxStaticText* lbl_txt9 = new wxStaticText(vis_page, wxID_ANY, lbl9); cbox9 = new wxCheckBox(vis_page, XRCID("PREF_SHOW_CSV_IN_MERGE"), "", pos); grid_sizer1->Add(lbl_txt9, 1, wxEXPAND); @@ -335,7 +340,7 @@ void PreferenceDlg::Init() grid_sizer1->Add(txt_poweriter_eps, 0, wxALIGN_RIGHT); txt_poweriter_eps->Bind(wxEVT_COMMAND_TEXT_UPDATED, &PreferenceDlg::OnPowerEpsEnter, this); - wxString lbl20 = _("Use GPU to Accelerate computation:"); + wxString lbl20 = _("Use GPU to accelerate computation:"); wxStaticText* lbl_txt20 = new wxStaticText(vis_page, wxID_ANY, lbl20); cbox_gpu = new wxCheckBox(vis_page, XRCID("PREF_USE_GPU"), "", pos); grid_sizer1->Add(lbl_txt20, 1, wxEXPAND); @@ -359,8 +364,11 @@ void PreferenceDlg::Init() #ifdef __WIN32__ gdal_page->SetBackgroundColour(*wxWHITE); #endif - notebook->AddPage(gdal_page, "Data Source"); - wxFlexGridSizer* grid_sizer2 = new wxFlexGridSizer(10, 2, 8, 10); + notebook->AddPage(gdal_page, "Data"); + wxFlexGridSizer* grid_sizer2 = new wxFlexGridSizer(12, 2, 8, 10); + + grid_sizer2->Add(new wxStaticText(gdal_page, wxID_ANY, _("Source:")), 1); + grid_sizer2->AddSpacer(10); wxString lbl21 = _("Hide system table in Postgresql connection:"); wxStaticText* lbl_txt21 = new wxStaticText(gdal_page, wxID_ANY, lbl21); @@ -377,7 +385,6 @@ void PreferenceDlg::Init() grid_sizer2->Add(cbox22, 0, wxALIGN_RIGHT); cbox22->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnHideTableSQLITE, this); - wxString lbl23 = _("Http connection timeout (seconds) for e.g. WFS, Geojson etc.:"); wxStaticText* lbl_txt23 = new wxStaticText(gdal_page, wxID_ANY, lbl23); txt23 = new wxTextCtrl(gdal_page, XRCID("ID_HTTP_TIMEOUT"), "", pos, @@ -385,7 +392,10 @@ void PreferenceDlg::Init() grid_sizer2->Add(lbl_txt23, 1, wxEXPAND); grid_sizer2->Add(txt23, 0, wxALIGN_RIGHT); txt23->Bind(wxEVT_TEXT, &PreferenceDlg::OnTimeoutInput, this); - + + grid_sizer2->Add(new wxStaticText(gdal_page, wxID_ANY, _("Table:")), 1, wxTOP, 10); + grid_sizer2->AddSpacer(10); + wxString lbl24 = _("Date/Time formats (using comma to separate formats):"); wxStaticText* lbl_txt24 = new wxStaticText(gdal_page, wxID_ANY, lbl24); txt24 = new wxTextCtrl(gdal_page, XRCID("ID_DATETIME_FORMATS"), "", pos, @@ -409,6 +419,17 @@ void PreferenceDlg::Init() grid_sizer2->Add(cbox_csvt, 0, wxALIGN_RIGHT); cbox_csvt->Bind(wxEVT_CHECKBOX, &PreferenceDlg::OnCreateCSVT, this); + grid_sizer2->Add(new wxStaticText(gdal_page, wxID_ANY, _("Clustering:")), 1, wxTOP, 10); + grid_sizer2->AddSpacer(10); + + wxString lbl28 = _("Stop criterion for auto-weighting:"); + wxStaticText* lbl_txt28 = new wxStaticText(gdal_page, wxID_ANY, lbl28); + txt26 = new wxTextCtrl(gdal_page, XRCID("ID_AUTO_WEIGHT_STOP"), "", pos, + wxSize(85, -1), txt_num_style); + grid_sizer2->Add(lbl_txt28, 1, wxEXPAND); + grid_sizer2->Add(txt26, 0, wxALIGN_RIGHT); + txt26->Bind(wxEVT_TEXT, &PreferenceDlg::OnAutoWeightStopCriterion, this); + grid_sizer2->AddGrowableCol(0, 1); wxBoxSizer *nb_box2 = new wxBoxSizer(wxVERTICAL); @@ -459,8 +480,10 @@ void PreferenceDlg::OnReset(wxCommandEvent& ev) GdaConst::gda_use_gpu = false; GdaConst::gda_ui_language = 0; GdaConst::gda_eigen_tol = 1.0E-8; + GdaConst::gda_draw_map_labels = false; + GdaConst::gda_map_label_font_size = 8; GdaConst::gda_set_cpu_cores = true; - GdaConst::gda_cpu_cores = 8; + GdaConst::gda_cpu_cores = 6; GdaConst::use_cross_hatching = false; GdaConst::transparency_highlighted = 255; GdaConst::transparency_unhighlighted = 100; @@ -480,6 +503,7 @@ void PreferenceDlg::OnReset(wxCommandEvent& ev) GdaConst::use_gda_user_seed= true; GdaConst::gda_user_seed = 123456789; GdaConst::default_display_decimals = 6; + GdaConst::gda_autoweight_stop = 0.0001; GdaConst::gda_datetime_formats_str = "%Y-%m-%d %H:%M:%S,%Y/%m/%d %H:%M:%S,%d.%m.%Y %H:%M:%S,%m/%d/%Y %H:%M:%S,%Y-%m-%d,%m/%d/%Y,%Y/%m/%d,%H:%M:%S,%H:%M,%Y/%m/%d %H:%M %p"; GdaConst::gda_enable_set_transparency_windows = false; if (!GdaConst::gda_datetime_formats_str.empty()) { @@ -514,14 +538,17 @@ void PreferenceDlg::OnReset(wxCommandEvent& ev) ogr_adapt.AddEntry("use_gda_user_seed", "1"); ogr_adapt.AddEntry("gda_user_seed", "123456789"); ogr_adapt.AddEntry("gda_datetime_formats_str", "%Y-%m-%d %H:%M:%S,%Y/%m/%d %H:%M:%S,%d.%m.%Y %H:%M:%S,%m/%d/%Y %H:%M:%S,%Y-%m-%d,%m/%d/%Y,%Y/%m/%d,%H:%M:%S,%H:%M,%Y/%m/%d %H:%M %p"); - ogr_adapt.AddEntry("gda_cpu_cores", "8"); + ogr_adapt.AddEntry("gda_cpu_cores", "6"); ogr_adapt.AddEntry("gda_set_cpu_cores", "1"); ogr_adapt.AddEntry("gda_eigen_tol", "1.0E-8"); ogr_adapt.AddEntry("gda_ui_language", "0"); ogr_adapt.AddEntry("gda_use_gpu", "0"); ogr_adapt.AddEntry("gda_displayed_decimals", "6"); + ogr_adapt.AddEntry("gda_autoweight_stop", "0.0001"); ogr_adapt.AddEntry("gda_enable_set_transparency_windows", "0"); ogr_adapt.AddEntry("gda_create_csvt", "0"); + ogr_adapt.AddEntry("gda_draw_map_labels", "0"); + ogr_adapt.AddEntry("gda_map_label_font_size", "8"); } void PreferenceDlg::SetupControls() @@ -555,6 +582,7 @@ void PreferenceDlg::SetupControls() txt23->SetValue(wxString::Format("%d", GdaConst::gdal_http_timeout)); txt24->SetValue(GdaConst::gda_datetime_formats_str); txt25->SetValue(wxString::Format("%d", GdaConst::default_display_decimals)); + txt26->SetValue(wxString::Format("%f", GdaConst::gda_autoweight_stop)); cbox6->SetValue(GdaConst::use_gda_user_seed); wxString t_seed; @@ -576,6 +604,11 @@ void PreferenceDlg::SetupControls() cbox26->SetValue(GdaConst::gda_enable_set_transparency_windows); cbox_csvt->SetValue(GdaConst::gda_create_csvt); + + cbox_lbl->SetValue(GdaConst::gda_draw_map_labels); + wxString t_lbl_font_size; + t_lbl_font_size << GdaConst::gda_map_label_font_size; + txt_lbl_font->SetValue(t_lbl_font_size); } void PreferenceDlg::ReadFromCache() @@ -840,6 +873,35 @@ void PreferenceDlg::ReadFromCache() } } + vector gda_autoweight_stop = ogr_adapt.GetHistory("gda_autoweight_stop"); + if (!gda_autoweight_stop.empty()) { + double sel_l = 0; + wxString sel = gda_autoweight_stop[0]; + if (sel.ToDouble(&sel_l)) { + GdaConst::gda_autoweight_stop = sel_l; + } + } + + vector gda_draw_map_labels = ogr_adapt.GetHistory("gda_draw_map_labels"); + if (!gda_draw_map_labels.empty()) { + long sel_l = 0; + wxString sel = gda_draw_map_labels[0]; + if (sel.ToLong(&sel_l)) { + if (sel_l == 1) + GdaConst::gda_draw_map_labels = true; + else if (sel_l == 0) + GdaConst::gda_draw_map_labels = false; + } + } + vector gda_map_label_font_size = ogr_adapt.GetHistory("gda_map_label_font_size"); + if (!gda_map_label_font_size.empty()) { + long sel_l = 0; + wxString sel = gda_map_label_font_size[0]; + if (sel.ToLong(&sel_l)) { + GdaConst::gda_map_label_font_size = sel_l; + } + } + // following are not in this UI, but still global variable vector gda_user_email = ogr_adapt.GetHistory("gda_user_email"); if (!gda_user_email.empty()) { @@ -914,6 +976,20 @@ void PreferenceDlg::OnDisplayDecimal(wxCommandEvent& ev) } } +void PreferenceDlg::OnAutoWeightStopCriterion(wxCommandEvent& ev) +{ + wxString val = txt26->GetValue(); + double _val; + if (val.ToDouble(&_val)) { + GdaConst::gda_autoweight_stop = _val; + OGRDataAdapter::GetInstance().AddEntry("gda_autoweight_stop", val); + if (table_state) { + table_state->SetRefreshEvtTyp(); + table_state->notifyObservers(); + } + } +} + void PreferenceDlg::OnTimeoutInput(wxCommandEvent& ev) { wxString sec_str = txt23->GetValue(); @@ -1171,11 +1247,35 @@ void PreferenceDlg::OnCPUCoresEnter(wxCommandEvent& ev) wxString val = txt_cores->GetValue(); long _val; if (val.ToLong(&_val)) { - GdaConst::gda_cpu_cores = _val; + GdaConst::gda_cpu_cores = (int)_val; OGRDataAdapter::GetInstance().AddEntry("gda_cpu_cores", val); } } +void PreferenceDlg::OnDrawLabels(wxCommandEvent& ev) +{ + int sel = ev.GetSelection(); + if (sel == 0) { + GdaConst::gda_draw_map_labels = false; + OGRDataAdapter::GetInstance().AddEntry("gda_draw_map_labels", "0"); + txt_lbl_font->Disable(); + } + else { + GdaConst::gda_draw_map_labels = true; + OGRDataAdapter::GetInstance().AddEntry("gda_draw_map_labels", "1"); + txt_lbl_font->Enable(); + } +} +void PreferenceDlg::OnLabelFontSizeEnter(wxCommandEvent& ev) +{ + wxString val = txt_lbl_font->GetValue(); + long _val; + if (val.ToLong(&_val)) { + GdaConst::gda_map_label_font_size = (int)_val; + OGRDataAdapter::GetInstance().AddEntry("gda_map_label_font_size", val); + } +} + void PreferenceDlg::OnPowerEpsEnter(wxCommandEvent& ev) { wxString val = txt_poweriter_eps->GetValue(); diff --git a/DialogTools/PreferenceDlg.h b/DialogTools/PreferenceDlg.h index d13efe864..56848db07 100644 --- a/DialogTools/PreferenceDlg.h +++ b/DialogTools/PreferenceDlg.h @@ -102,6 +102,8 @@ class PreferenceDlg : public wxDialog wxTextCtrl* txt24; // displayed decimals wxTextCtrl* txt25; + // stop criterion for auto-weighting + wxTextCtrl* txt26; // cpu cores wxCheckBox* cbox18; wxTextCtrl* txt_cores; @@ -115,6 +117,9 @@ class PreferenceDlg : public wxDialog wxCheckBox* cbox26; // csvt wxCheckBox* cbox_csvt; + // labels + wxCheckBox* cbox_lbl; + wxTextCtrl* txt_lbl_font; void Init(); void SetupControls(); @@ -140,7 +145,8 @@ class PreferenceDlg : public wxDialog void OnDisplayDecimal(wxCommandEvent& ev); void OnUseSpecifiedSeed(wxCommandEvent& ev); void OnSeedEnter(wxCommandEvent& ev); - + void OnAutoWeightStopCriterion(wxCommandEvent& ev); + void OnSetCPUCores(wxCommandEvent& ev); void OnCPUCoresEnter(wxCommandEvent& ev); @@ -149,6 +155,9 @@ class PreferenceDlg : public wxDialog void OnCreateCSVT(wxCommandEvent& ev); void OnEnableTransparencyWin(wxCommandEvent& ev); + void OnDrawLabels(wxCommandEvent& ev); + void OnLabelFontSizeEnter(wxCommandEvent& ev); + void OnReset(wxCommandEvent& ev); }; diff --git a/DialogTools/RandomizationDlg.cpp b/DialogTools/RandomizationDlg.cpp index 430466c24..0ab49c453 100644 --- a/DialogTools/RandomizationDlg.cpp +++ b/DialogTools/RandomizationDlg.cpp @@ -147,41 +147,21 @@ void InferenceSettingsDlg::Init(double* p_vals, int n, double current_p) // sort all p-values from smallest to largets std::sort(pvals.begin(), pvals.end()); - int i_0 = -1; - bool stop = false; - double p_start = current_p; - - while (!stop) { - // find the i_0 that corresponds to p = alpha - for (int i=1; i<=n; i++) { - if (pvals[i] >= p_start) { - if (i_0 == i) { - stop = true; - } - i_0 = i; - break; - } + fdr = 0; + + for (size_t i=0; i= val) { + break; } - if (i_0 < 0) - stop = true; - - // compute p* = i_0 x alpha / N - p_start = i_0 * current_p / (double)n ; - } - - wxString fdr_str; - - if (i_0 >= 0) - fdr_str = wxString::Format("%g", p_start); - else { - fdr_str = "nan"; - p_start = 0.0; + fdr = val; } + wxString fdr_str = wxString::Format("%g", fdr); m_txt_fdr->SetLabel(fdr_str); bo = bonferroni_bound; - fdr = p_start; } void InferenceSettingsDlg::OnAlphaTextCtrl(wxCommandEvent& ev) @@ -331,9 +311,9 @@ void RandomizationPanel::CalcMoran() double Wdata = 0; if (is_bivariate) { - Wdata = W[i].SpatialLag(raw_data2); + Wdata = W[i].SpatialLag(raw_data2, true, i); } else { - Wdata = W[i].SpatialLag(raw_data1); + Wdata = W[i].SpatialLag(raw_data1, true, i); } X.push_back(raw_data1[i]); Y.push_back(Wdata); @@ -406,7 +386,7 @@ void RandomizationPanel::RunRandomTrials() if (undefs[perm[i]] || W[i].Size() == 0) { continue; } - newMoran += (W[i].SpatialLag(raw_data2, perm) + newMoran += (W[i].SpatialLag(raw_data2, perm, i) * raw_data1[perm[i]]); } } else { @@ -414,7 +394,7 @@ void RandomizationPanel::RunRandomTrials() if (undefs[perm[i]] || W[i].Size() == 0) { continue; } - newMoran += (W[i].SpatialLag(raw_data1, perm) + newMoran += (W[i].SpatialLag(raw_data1, perm, i) * raw_data1[perm[i]]); } } diff --git a/DialogTools/RedcapDlg.cpp b/DialogTools/RedcapDlg.cpp index 4d9a70e73..b46049519 100644 --- a/DialogTools/RedcapDlg.cpp +++ b/DialogTools/RedcapDlg.cpp @@ -22,21 +22,9 @@ #include #include - -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include "../VarCalc/WeightsManInterface.h" #include "../ShapeOperations/OGRDataAdapter.h" @@ -45,9 +33,6 @@ #include "../Project.h" #include "../Algorithms/DataUtils.h" #include "../Algorithms/cluster.h" - - - #include "../GeneralWxUtils.h" #include "../GenUtils.h" #include "SaveToTableDlg.h" @@ -66,8 +51,7 @@ RedcapDlg::RedcapDlg(wxFrame* parent_s, Project* project_s) parent = parent_s; project = project_s; - weights = NULL; - + bool init_success = Init(); if (init_success == false) { @@ -114,17 +98,16 @@ void RedcapDlg::CreateControls() wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); // Input - AddSimpleInputCtrls(panel, vbox); + AddSimpleInputCtrls(panel, vbox, false, true/*show spatial weights control*/); // Parameters wxFlexGridSizer* gbox = new wxFlexGridSizer(11,2,5,0); - - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Weights:")); - combo_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, - wxSize(200,-1)); - gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(combo_weights, 1, wxEXPAND); - + + wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("Number of Regions:")); + m_max_region = new wxTextCtrl(panel, wxID_ANY, "5", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_max_region, 1, wxEXPAND); + wxStaticText* st20 = new wxStaticText(panel, wxID_ANY, _("Method:")); wxString choices20[] = {"FirstOrder-SingleLinkage", "FullOrder-CompleteLinkage", "FullOrder-AverageLinkage", "FullOrder-SingleLinkage"}; combo_method = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 4, choices20); @@ -136,12 +119,14 @@ void RedcapDlg::CreateControls() // Minimum Bound Control AddMinBound(panel, gbox); - wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("Maximum # of regions:")); - m_max_region = new wxTextCtrl(panel, wxID_ANY, "5", wxDefaultPosition, wxSize(200,-1)); - gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(m_max_region, 1, wxEXPAND); - - wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); + // Min regions + st_minregions = new wxStaticText(panel, wxID_ANY, _("Min Region Size:")); + txt_minregions = new wxTextCtrl(panel, wxID_ANY, "", wxDefaultPosition, wxSize(200,-1)); + txt_minregions->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + gbox->Add(st_minregions, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_minregions, 1, wxEXPAND); + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); wxString choices13[] = {"Euclidean", "Manhattan"}; m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); m_distance->SetSelection(0); @@ -150,8 +135,8 @@ void RedcapDlg::CreateControls() // Transformation AddTransformation(panel, gbox); - - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:")); + + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); @@ -170,7 +155,6 @@ void RedcapDlg::CreateControls() wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); hbox->Add(gbox, 1, wxEXPAND); - // Output wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("Save Cluster in Field:")); m_textbox = new wxTextCtrl(panel, wxID_ANY, "CL", wxDefaultPosition, wxSize(158,-1)); @@ -230,22 +214,6 @@ void RedcapDlg::CreateControls() Centre(); - // Content - //InitVariableCombobox(combo_var); - - // init weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - size_t sel_pos=0; - for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); - if (w_man_int->GetDefault() == weights_ids[i]) - sel_pos = i; - } - if (weights_ids.size() > 0) combo_weights->SetSelection(sel_pos); - // Events okButton->Bind(wxEVT_BUTTON, &RedcapDlg::OnOK, this); saveButton->Bind(wxEVT_BUTTON, &RedcapDlg::OnSaveTree, this); @@ -254,6 +222,20 @@ void RedcapDlg::CreateControls() seedButton->Bind(wxEVT_BUTTON, &RedcapDlg::OnChangeSeed, this); } +void RedcapDlg::OnCheckMinBound(wxCommandEvent& event) +{ + wxLogMessage("On SkaterDlg::OnLISACheck"); + AbstractClusterDlg::OnCheckMinBound(event); + + if (chk_floor->IsChecked()) { + st_minregions->Disable(); + txt_minregions->Disable(); + } else { + st_minregions->Enable(); + txt_minregions->Enable(); + } +} + void RedcapDlg::OnSeedCheck(wxCommandEvent& event) { wxLogMessage("On RedcapDlg::OnSeedCheck"); @@ -366,7 +348,7 @@ void RedcapDlg::OnClose(wxCloseEvent& ev) wxString RedcapDlg::_printConfiguration() { wxString txt; - txt << _("Weights:") << "\t" << combo_weights->GetString(combo_weights->GetSelection()) << "\n"; + txt << _("Weights:") << "\t" << m_spatial_weights->GetString(m_spatial_weights->GetSelection()) << "\n"; txt << _("Method:\t") << combo_method->GetString(combo_method->GetSelection()) << "\n"; @@ -374,6 +356,8 @@ wxString RedcapDlg::_printConfiguration() int idx = combo_floor->GetSelection(); wxString nm = name_to_nm[combo_floor->GetString(idx)]; txt << _("Minimum bound:\t") << txt_floor->GetValue() << "(" << nm << ")" << "\n"; + } else { + txt << "Minimum region size:\t" << txt_minregions->GetValue() << "\n"; } txt << _("Minimum region size:\t") << m_textbox->GetValue() << "\n"; @@ -386,7 +370,7 @@ wxString RedcapDlg::_printConfiguration() void RedcapDlg::OnSaveTree(wxCommandEvent& event ) { - if (weights && redcap) { + if (redcap) { wxString filter = "GWT|*.gwt"; wxFileDialog dialog(NULL, _("Save Spanning Tree to a Weights File"), wxEmptyString, @@ -395,15 +379,9 @@ void RedcapDlg::OnSaveTree(wxCommandEvent& event ) if (dialog.ShowModal() != wxID_OK) { return; } + // get info from input weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); + GalWeight* gw = GetInputSpatialWeights(); GeoDaWeight* gdw = (GeoDaWeight*)gw; wxString id = gdw->GetIDName(); int col = table_int->FindColId(id); @@ -457,6 +435,7 @@ void RedcapDlg::OnSaveTree(wxCommandEvent& event ) file.Close(); // Load the weights file into Weights Manager + WeightsManInterface* w_man_int = project->GetWManInt(); WeightUtils::LoadGwtInMan(w_man_int, new_txt, table_int, id, WeightsMetaInfo::WT_tree); } @@ -474,17 +453,15 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) // Get input data int transform = combo_tranform->GetSelection(); bool success = GetInputData(transform, 1); - if (!success) { - return; - } - - wxString str_max_region = m_max_region->GetValue(); - if (str_max_region.IsEmpty()) { - wxString err_msg = _("Please enter maximum number of regions."); - wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); - dlg.ShowModal(); - return; + if (!success) return; + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return; + } } + bool check_floor = false; if (chk_floor->IsChecked()) { wxString str_floor = txt_floor->GetValue(); if (str_floor.IsEmpty() || combo_floor->GetSelection() < 0) { @@ -493,6 +470,7 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) dlg.ShowModal(); return; } + check_floor = true; } wxString field_name = m_textbox->GetValue(); @@ -504,23 +482,11 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) } // Get Weights Selection - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); - + GalWeight* gw = CheckSpatialWeights(); if (gw == NULL) { - wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); - dlg.ShowModal(); return; } - weights = w_man_int->GetGal(w_id); + // Check connectivity if (!CheckConnectivity(gw)) { wxString msg = _("The connectivity of selected spatial weights is incomplete, please adjust the spatial weights."); @@ -528,11 +494,44 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) dlg.ShowModal(); return; } - + + wxString str_max_region = m_max_region->GetValue(); + if (str_max_region.IsEmpty()) { + if (txt_minregions->GetValue().IsEmpty() && check_floor == false) { + wxString err_msg = _("Please enter number of regions, or minimum bound value, or minimum region size."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + } + // Get Bounds double min_bound = GetMinBound(); + if (chk_floor->IsChecked()) { + wxString str_floor = txt_floor->GetValue(); + if (str_floor.IsEmpty()) { + wxString err_msg = _("Please enter minimum bound value"); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + check_floor = true; + } + double* bound_vals = GetBoundVals(); - + + if (bound_vals == NULL) { + wxString str_min_regions = txt_minregions->GetValue(); + long val_min_regions; + if (str_min_regions.ToLong(&val_min_regions)) { + min_bound = val_min_regions; + check_floor = true; + } + bound_vals = new double[rows]; + for (int i=0; iGetSelection(); @@ -540,7 +539,7 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) dist = dist_choices[dist_sel]; // Get number of regions - int n_regions = 0; + int n_regions = std::numeric_limits::max(); long value_n_region; if(str_max_region.ToLong(&value_n_region)) { n_regions = value_n_region; @@ -577,6 +576,8 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) if (redcap==NULL) { + for (int i = 1; i < rows; i++) delete[] distances[i]; + delete[] distances; delete[] bound_vals; bound_vals = NULL; return; @@ -588,7 +589,7 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) int ncluster = cluster_ids.size(); - if (ncluster < n_regions) { + if (n_regions != std::numeric_limits::max() && ncluster < n_regions) { // show message dialog to user wxString warn_str = _("The number of identified clusters is less than "); warn_str << n_regions; @@ -645,8 +646,8 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) } // free memory - for (int i = 1; i < rows; i++) free(distances[i]); - free(distances); + for (int i = 1; i < rows; i++) delete[] distances[i]; + delete[] distances; delete[] bound_vals; bound_vals = NULL; @@ -678,7 +679,7 @@ void RedcapDlg::OnOK(wxCommandEvent& event ) GdaConst::map_default_size); wxString ttl; ttl << "REDCAP " << _("Cluster Map ") << "("; - ttl << n_regions; + ttl << ncluster; ttl << " clusters)"; nf->SetTitle(ttl); diff --git a/DialogTools/RedcapDlg.h b/DialogTools/RedcapDlg.h index 124e7fc8d..8e44275ee 100644 --- a/DialogTools/RedcapDlg.h +++ b/DialogTools/RedcapDlg.h @@ -25,7 +25,6 @@ #include #include - #include "../FramesManager.h" #include "../VarTools.h" #include "AbstractClusterDlg.h" @@ -52,6 +51,7 @@ class RedcapDlg : public AbstractClusterDlg void OnSeedCheck(wxCommandEvent& event); void OnChangeSeed(wxCommandEvent& event); + void OnCheckMinBound(wxCommandEvent& event); void InitVariableCombobox(wxListBox* var_box); @@ -59,7 +59,6 @@ class RedcapDlg : public AbstractClusterDlg protected: wxChoice* combo_method; - wxChoice* combo_weights; wxTextCtrl* m_max_region; @@ -68,16 +67,17 @@ class RedcapDlg : public AbstractClusterDlg wxTextCtrl* m_textbox; wxChoice* m_method; - wxChoice* m_distance; - + + wxStaticText* st_minregions; + wxTextCtrl* txt_minregions; + wxButton* seedButton; wxButton* saveButton; wxCheckBox* chk_save_mst; SpanningTreeClustering::AbstractClusterFactory* redcap; - GeoDaWeight* weights; DECLARE_EVENT_TABLE() }; diff --git a/DialogTools/RegressionDlg.cpp b/DialogTools/RegressionDlg.cpp index bace41aa7..8b91ab27a 100644 --- a/DialogTools/RegressionDlg.cpp +++ b/DialogTools/RegressionDlg.cpp @@ -477,7 +477,8 @@ void RegressionDlg::OnRunClick( wxCommandEvent& event ) } } } - + bool is_new_gal = false; + if (m_WeightCheck) { boost::uuids::uuid id = GetWeightsId(); GalElement* gal_weight = NULL; @@ -490,6 +491,8 @@ void RegressionDlg::OnRunClick( wxCommandEvent& event ) // construct a new weights with only valid records if (gw) { gal_weight = new GalElement[valid_obs]; + is_new_gal = true; + int cnt = 0; for (int i=0; i. + */ + +#include +#include + +#include +#include + +#include "../Explore/MapNewView.h" +#include "../Project.h" +#include "../Algorithms/cluster.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "../Algorithms/DataUtils.h" +#include "../Algorithms/fastcluster.h" +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightUtils.h" + +#include "../Algorithms/redcap.h" +#include "SaveToTableDlg.h" +#include "SCHCDlg.h" + +BEGIN_EVENT_TABLE( SCHCDlg, wxDialog ) +EVT_CLOSE( SCHCDlg::OnClose ) +END_EVENT_TABLE() + +SCHCDlg::SCHCDlg(wxFrame* parent_s, Project* project_s) +: HClusterDlg(parent_s, project_s, false /*dont show centroids control*/) +{ + wxLogMessage("Open SCHCDlg."); + SetTitle(_("Spatial Constrained Hierarchical Clustering Settings")); + + // disable number of cluster control + combo_n->Disable(); + + // bind new event + saveButton->Bind(wxEVT_BUTTON, &SCHCDlg::OnSave, this); +} + +SCHCDlg::~SCHCDlg() +{ +} + +void SCHCDlg::OnSave(wxCommandEvent& event ) +{ + long user_select_n; + combo_n->GetValue().ToLong(&user_select_n); + if (user_select_n < cutoff_n_cluster) { + wxString msg = _("The selected number of clusters is %d. It is less than the minimum number of clusters (%d) that guarantees spatially constrained results.\n\nDo you want to continue?"); + wxMessageDialog dlg(NULL, wxString::Format(msg, (int)user_select_n, cutoff_n_cluster), + _("Warning"), wxYES_NO | wxNO_DEFAULT | wxICON_WARNING); + if (dlg.ShowModal() == wxID_NO) { + return; + } + } + + HClusterDlg::OnSave(event); + + // check cluster connectivity + GalWeight* gw = CheckSpatialWeights(); + if (gw == NULL) return ; + + if (CheckContiguity(gw->gal, clusters) == false) { + wxString err_msg = _("The clustering result is not spatially constrained. Please adjust the number of clusters."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + } +} + +bool SCHCDlg::Run(vector& clusters) +{ + // NOTE input_data should be retrieved first!! + // get input: weights (auto) + weight = GetWeights(columns); + + // Check weights + GalWeight* gw = CheckSpatialWeights(); + if (gw == NULL) { + return false; + } + // Check connectivity + if (!CheckConnectivity(gw)) { + wxString msg = _("The connectivity of selected spatial weights is incomplete, please adjust the spatial weights."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return false; + } + + // get pairwise distance + double* pwdist = NULL; + if (dist == 'e') { + pwdist = DataUtils::getContiguityPairWiseDistance(gw->gal, input_data, weight, rows, + columns, + DataUtils::EuclideanDistance); + } else { + pwdist = DataUtils::getContiguityPairWiseDistance(gw->gal, input_data, weight, rows, + columns, + DataUtils::ManhattanDistance); + } + + fastcluster::auto_array_ptr members; + if (htree != NULL) { + delete[] htree; + htree = NULL; + } + htree = new GdaNode[rows-1]; + fastcluster::cluster_result Z2(rows-1); + + if (method == 's') { + fastcluster::MST_linkage_core(rows, pwdist, Z2); + } else if (method == 'w') { + members.init(rows, 1); + fastcluster::NN_chain_core(rows, pwdist, members, Z2); + } else if (method == 'm') { + fastcluster::NN_chain_core(rows, pwdist, NULL, Z2); + } else if (method == 'a') { + members.init(rows, 1); + fastcluster::NN_chain_core(rows, pwdist, members, Z2); + } + + delete[] pwdist; + + std::stable_sort(Z2[0], Z2[rows-1]); + t_index node1, node2; + int i=0, clst_cnt=0; + fastcluster::union_find nodes(rows); + + n_cluster = 0; + for (fastcluster::node const * NN=Z2[0]; NN!=Z2[rows-1]; ++NN, ++i) { + if (NN) { + // Find the cluster identifiers for these points. + node1 = nodes.Find(NN->node1); + node2 = nodes.Find(NN->node2); + // Merge the nodes in the union-find data structure by making them + // children of a new node. + nodes.Union(node1, node2); + + node2 = node2 < rows ? node2 : rows-node2-1; + node1 = node1 < rows ? node1 : rows-node1-1; + + //cout << i<< ":" << node2 <<", " << node1 << ", " << Z2[i]->dist <dist; + if (dist == DBL_MAX) { + n_cluster += 1; + } + + clst_cnt += 1; + htree[i].distance = clst_cnt; + } + } + + if (n_cluster == 0) n_cluster = 2; + CutTree(rows, htree, n_cluster, clusters); + + // check if additional cluster/split is needed + if (CheckContiguity(gw->gal, clusters) == false) { + n_cluster += 1; + CutTree(rows, htree, n_cluster, clusters); + } + + cutoff_n_cluster = n_cluster; + + combo_n->SetValue(wxString::Format("%d", n_cluster)); + combo_n->Enable(); + + return true; +} + +void SCHCDlg::CutTree(int rows, GdaNode* htree, int n_cluster, std::vector& clusters) +{ + clusters.clear(); + int* clusterid = new int[rows]; + cutoffDistance = cuttree (rows, htree, n_cluster, clusterid); + for (int i=0; i. + */ + +#ifndef __GEODA_CENTER_SCHCCLUSTER_DLG_H___ +#define __GEODA_CENTER_SCHCCLUSTER_DLG_H___ + +#include +#include + +#include "../FramesManager.h" +#include "../VarTools.h" +#include "../logger.h" +#include "AbstractClusterDlg.h" +#include "HClusterDlg.h" + +struct GdaNode; +class Project; +class TableInterface; + +class SCHCDlg : public HClusterDlg +{ +public: + SCHCDlg(wxFrame *parent, Project* project); + virtual ~SCHCDlg(); + + void OnSave(wxCommandEvent& event ); + +protected: + virtual bool Run(vector& clusters); + + void CutTree(int rows, GdaNode* htree, int n_cluster, std::vector& clusters); + + int cutoff_n_cluster; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/SaveSelectionDlg.cpp b/DialogTools/SaveSelectionDlg.cpp index 9d86479b4..66443ef80 100644 --- a/DialogTools/SaveSelectionDlg.cpp +++ b/DialogTools/SaveSelectionDlg.cpp @@ -23,6 +23,8 @@ #include #include "../GdaConst.h" #include "../Project.h" +#include "../ShapeOperations/WeightsManager.h" +#include "../ShapeOperations/GalWeight.h" #include "../DataViewer/DataViewerAddColDlg.h" #include "../DataViewer/TableInterface.h" #include "../DataViewer/TimeState.h" @@ -53,10 +55,15 @@ SaveSelectionDlg::SaveSelectionDlg(Project* project_s, const wxPoint& pos, const wxSize& size, long style ) : project(project_s), table_int(project_s->GetTableInt()), -m_all_init(false), is_space_time(project_s->GetTableInt()->IsTimeVariant()) +m_all_init(false), is_space_time(project_s->GetTableInt()->IsTimeVariant()), +gal_weights(NULL) { wxLogMessage("Open SaveSelectionDlg."); - + + WeightsManInterface* w_man_int = project->GetWManInt(); + boost::uuids::uuid w_id = w_man_int->GetDefault(); + gal_weights = w_man_int->GetGal(w_id); + SetParent(parent); CreateControls(); Centre(); @@ -85,6 +92,13 @@ void SaveSelectionDlg::CreateControls() wxChoice); } + m_inc_neighbors = wxDynamicCast(FindWindow(XRCID("ID_SEL_CHB_INCLUDE_NBRS")), + wxCheckBox); + if (gal_weights == NULL) { + m_inc_neighbors->Hide(); + wxDynamicCast(FindWindow(XRCID("ID_TXT_CHB_INCLUDE_NBRS")), + wxStaticText)->Hide(); + } m_sel_check_box = wxDynamicCast(FindWindow(XRCID("ID_SEL_CHECK_BOX")), wxCheckBox); @@ -336,12 +350,19 @@ void SaveSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) m_save_field_choice_tm) { sf_tm = m_save_field_choice_tm->GetSelection(); } - + + bool with_neighbors = false; + if (gal_weights != NULL) { + if (m_inc_neighbors->IsChecked()) { + with_neighbors = true; + } + } + std::vector& h = project->GetHighlightState()->GetHighlight(); // write_col now refers to a valid field in grid base, so write out // results to that field. int obs = h.size(); - std::vector undefined; + std::vector undefined, selected(obs, false); if (table_int->GetColType(write_col) == GdaConst::long64_type) { wxInt64 sel_c_i = sel_c; wxInt64 unsel_c_i = unsel_c; @@ -352,13 +373,24 @@ void SaveSelectionDlg::OnApplySaveClick( wxCommandEvent& event ) for (int i=0; igal[i]; + for (int j=0, jend=e.Size(); jgal[i]; + for (int j=0, jend=e.Size(); j #include +class GalWeight; class TableInterface; class Project; @@ -64,7 +65,9 @@ class SaveSelectionDlg: public wxDialog wxCheckBox* m_unsel_check_box; wxTextCtrl* m_unsel_val_text; wxButton* m_apply_save_button; - + wxCheckBox* m_inc_neighbors; + + GalWeight* gal_weights; bool m_all_init; bool is_space_time; void CheckApplySaveSettings(); diff --git a/DialogTools/SaveToTableDlg.cpp b/DialogTools/SaveToTableDlg.cpp index 45b504589..7b3450852 100644 --- a/DialogTools/SaveToTableDlg.cpp +++ b/DialogTools/SaveToTableDlg.cpp @@ -118,6 +118,13 @@ all_init(false) all_init = true; } +void SaveToTableDlg::SetCheck(size_t i, bool flag) +{ + if (i < data.size()) { + m_check[i]->SetValue(flag); + } +} + void SaveToTableDlg::CreateControls() { wxBoxSizer *top_sizer = new wxBoxSizer(wxVERTICAL); @@ -126,14 +133,14 @@ void SaveToTableDlg::CreateControls() //space_sizer->AddSpacer(400); //top_sizer->Add(space_sizer, 0, wxALL, 1); - int fg_cols = is_space_time ? 4 : 3; + //int fg_cols = is_space_time ? 4 : 3; // data.size() rows, fg_cols columns, vgap=3, hgap=3 wxFlexGridSizer *fg_sizer = new wxFlexGridSizer((int) data.size() + 1, 2, 3, 3); fg_sizer->AddSpacer(10); fg_sizer->Add(m_field_label, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); //wxBoxSizer* fg_sizer = new wxBoxSizer(wxVERTICAL); - for (int i=0, iend=data.size(); iAdd(m_check[i], 0, wxALIGN_CENTRE_VERTICAL | wxALL, 5); //fg_sizer->Add(m_add_button[i], 0, wxALIGN_CENTRE_VERTICAL | wxALL, 5); //fg_sizer->Add(m_field[i], 0, wxALIGN_CENTRE_VERTICAL | wxALL, 5); diff --git a/DialogTools/SaveToTableDlg.h b/DialogTools/SaveToTableDlg.h index a2d6688be..953d60e26 100644 --- a/DialogTools/SaveToTableDlg.h +++ b/DialogTools/SaveToTableDlg.h @@ -64,7 +64,8 @@ class SaveToTableDlg: public wxDialog void OnTimeChoice( wxCommandEvent& event ); void OnOkClick( wxCommandEvent& event ); void OnCloseClick( wxCommandEvent& event ); - + void SetCheck(size_t i, bool flag); + std::vector new_col_ids; std::vector new_col_names; diff --git a/DialogTools/SkaterDlg.cpp b/DialogTools/SkaterDlg.cpp index 44fc18204..eb818d636 100644 --- a/DialogTools/SkaterDlg.cpp +++ b/DialogTools/SkaterDlg.cpp @@ -85,21 +85,15 @@ void SkaterDlg::CreateControls() wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); // Input - AddSimpleInputCtrls(panel, vbox); + AddSimpleInputCtrls(panel, vbox, false, true/*show spatial weights*/); // Parameters wxFlexGridSizer* gbox = new wxFlexGridSizer(9,2,5,0); - wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("Number of Clusters:")); + wxStaticText* st11 = new wxStaticText(panel, wxID_ANY, _("Number of Regions:")); m_max_region = new wxTextCtrl(panel, wxID_ANY, "5", wxDefaultPosition, wxSize(200,-1)); gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(m_max_region, 1, wxEXPAND); - - // Weights Control - wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Weights:")); - combo_weights = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1)); - gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(combo_weights, 1, wxEXPAND); // Minimum Bound Control AddMinBound(panel, gbox); @@ -120,7 +114,7 @@ void SkaterDlg::CreateControls() AddTransformation(panel, gbox); - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:")); + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); @@ -189,31 +183,16 @@ void SkaterDlg::CreateControls() scrl->SetSizer(panelSizer); - wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); SetSizer(sizerAll); SetAutoLayout(true); sizerAll->Fit(this); - Centre(); // Content - InitVariableCombobox(combo_var); - - // init weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - - size_t sel_pos=0; - for (size_t i=0; iAppend(w_man_int->GetShortDispName(weights_ids[i])); - if (w_man_int->GetDefault() == weights_ids[i]) - sel_pos = i; - } - if (weights_ids.size() > 0) combo_weights->SetSelection(sel_pos); + //InitVariableCombobox(combo_var); // Events okButton->Bind(wxEVT_BUTTON, &SkaterDlg::OnOK, this); @@ -236,14 +215,7 @@ void SkaterDlg::OnSaveTree(wxCommandEvent& event ) return; } // get info from input weights - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); + GalWeight* gw = GetInputSpatialWeights(); GeoDaWeight* gdw = (GeoDaWeight*)gw; wxString id = gdw->GetIDName(); int col = table_int->FindColId(id); @@ -297,6 +269,8 @@ void SkaterDlg::OnSaveTree(wxCommandEvent& event ) file.Close(); // Load the weights file into Weights Manager + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); WeightUtils::LoadGwtInMan(w_man_int, new_txt, table_int, id, WeightsMetaInfo::WT_tree); } @@ -433,7 +407,7 @@ wxString SkaterDlg::_printConfiguration() txt << "Number of clusters:\t" << m_max_region->GetValue() << "\n"; - txt << "Weights:\t" << combo_weights->GetString(combo_weights->GetSelection()) << "\n"; + txt << "Weights:\t" << m_spatial_weights->GetString(m_spatial_weights->GetSelection()) << "\n"; if (chk_floor && chk_floor->IsChecked()) { int idx = combo_floor->GetSelection(); @@ -465,16 +439,13 @@ void SkaterDlg::OnOK(wxCommandEvent& event ) // Get input data int transform = combo_tranform->GetSelection(); bool success = GetInputData(transform, 1); - if (!success) { - return; - } - - wxString str_initial = m_max_region->GetValue(); - if (str_initial.IsEmpty()) { - wxString err_msg = _("Please enter number of regions"); - wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); - dlg.ShowModal(); - return; + if (!success) return; + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return; + } } wxString field_name = m_textbox->GetValue(); @@ -493,17 +464,8 @@ void SkaterDlg::OnOK(wxCommandEvent& event ) dist = dist_choices[dist_sel]; // Weights selection - vector weights_ids; - WeightsManInterface* w_man_int = project->GetWManInt(); - w_man_int->GetIds(weights_ids); - int sel = combo_weights->GetSelection(); - if (sel < 0) sel = 0; - if (sel >= weights_ids.size()) sel = weights_ids.size()-1; - boost::uuids::uuid w_id = weights_ids[sel]; - GalWeight* gw = w_man_int->GetGal(w_id); + GalWeight* gw = CheckSpatialWeights(); if (gw == NULL) { - wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); - dlg.ShowModal(); return; } @@ -542,8 +504,19 @@ void SkaterDlg::OnOK(wxCommandEvent& event ) bound_vals[i] = 1; } + wxString str_initial = m_max_region->GetValue(); + if (str_initial.IsEmpty()) { + // check if + if (txt_minregions->GetValue().IsEmpty() && check_floor == false) { + wxString err_msg = _("Please enter number of regions, or minimum bound value, or minimum region size."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + } + // Get region numbers - int n_regions = 0; + int n_regions = std::numeric_limits::max(); // user can ignore region numbers long value_initial; if(str_initial.ToLong(&value_initial)) { n_regions = value_initial; @@ -611,7 +584,7 @@ void SkaterDlg::OnOK(wxCommandEvent& event ) int ncluster = cluster_ids.size(); - if (ncluster < n_regions) { + if (n_regions != std::numeric_limits::max() && ncluster < n_regions) { // show message dialog to user wxString warn_str = _("The number of identified clusters is less than "); warn_str << n_regions; diff --git a/DialogTools/SkaterDlg.h b/DialogTools/SkaterDlg.h index 42c4c90a7..6a345506f 100644 --- a/DialogTools/SkaterDlg.h +++ b/DialogTools/SkaterDlg.h @@ -22,9 +22,7 @@ #include #include -#include -#include - +#include #include "../FramesManager.h" #include "../VarTools.h" @@ -58,7 +56,6 @@ class SkaterDlg : public AbstractClusterDlg wxCheckBox* chk_seed; wxCheckBox* chk_lisa; - wxChoice* combo_weights; wxChoice* combo_lisa; wxChoice* m_distance; diff --git a/DialogTools/SpatialJoinDlg.cpp b/DialogTools/SpatialJoinDlg.cpp index 2ccd149cb..bc143b503 100644 --- a/DialogTools/SpatialJoinDlg.cpp +++ b/DialogTools/SpatialJoinDlg.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "../Project.h" #include "../MapLayerStateObserver.h" @@ -28,7 +29,7 @@ SpatialJoinWorker::SpatialJoinWorker(BackgroundMapLayer* _ml, Project* _project) project = _project; int n_joins = project->GetNumRecords(); spatial_counts.resize(n_joins); - spatial_joins.resize(n_joins); + //spatial_joins.resize(n_joins); join_ids.resize(n_joins); // always use points to create a rtree, since in normal case // the number of points are larger than the number of polygons @@ -49,7 +50,7 @@ bool SpatialJoinWorker::JoinVariable() return join_variable; } -vector SpatialJoinWorker::GetJoinResults() +std::vector > SpatialJoinWorker::GetJoinResults() { return spatial_joins; } @@ -62,7 +63,8 @@ vector SpatialJoinWorker::GetResults() void SpatialJoinWorker::Run() { int initial = num_polygons; - int nCPUs = boost::thread::hardware_concurrency();; + int nCPUs = boost::thread::hardware_concurrency(); + if (GdaConst::gda_set_cpu_cores) nCPUs = GdaConst::gda_cpu_cores; int quotient = initial / nCPUs; int remainder = initial % nCPUs; int tot_threads = (quotient > 0) ? nCPUs : remainder; @@ -98,28 +100,35 @@ void SpatialJoinWorker::Run() // join variable if needed if (join_variable) { - int n_values = join_values.size(); + int n_vars = (int)join_values.size(); + spatial_joins.resize(n_vars); + for (size_t k=0; k vals(cnt, 0); - for (size_t j=0; j vals(cnt, 0); + + for (size_t j=0; j join_variable_nm, + std::vector _op) : SpatialJoinWorker(_ml, _project) { is_spatial_assign = false; join_operation = _op; - join_variable = _ml->GetDoubleColumnData(join_variable_nm, join_values); + int n_vars = (int)join_operation.size(); + join_values.resize(n_vars); + join_variable = false; // default false: no need to join variables + for (int i=0; iGetDoubleColumnData(join_variable_nm[i], join_values[i]); + } num_polygons = project->GetNumRecords(); // using selected layer (points) to create rtree - int n = ml->shapes.size(); + int n = (int)ml->shapes.size(); double x, y; for (int i=0; ishapes[i]->center_o.x; - y = ml->shapes[i]->center_o.y; - rtree.insert(std::make_pair(pt_2d(x,y), i)); + if (ml->shapes[i]) { + x = ml->shapes[i]->center_o.x; + y = ml->shapes[i]->center_o.y; + rtree.insert(std::make_pair(pt_2d(x,y), i)); + } } } @@ -169,6 +185,9 @@ void CountPointsInPolygon::sub_run(int start, int end) double y = v.first.get<1>(); OGRPoint ogr_pt(x, y); if (ogr_pt.Within(ogr_poly)) { + if (i == 12) { + std::cout << pt_idx << std::endl; + } spatial_counts[i] += 1; if (join_variable) { mutex.lock(); @@ -192,14 +211,18 @@ AssignPolygonToPoint::AssignPolygonToPoint(BackgroundMapLayer* _ml, num_polygons = ml->GetNumRecords(); // using current map(points) to create rtree Shapefile::Main& main_data = project->main_data; + OGRLayerProxy* ogr_layer = project->layer_proxy; Shapefile::PointContents* pc; int n = project->GetNumRecords(); double x, y; for (int i=0; ix; - y = pc->y; - rtree.insert(std::make_pair(pt_2d(x,y), i)); + OGRGeometry* ogr_pt = ogr_layer->GetGeometry(i); + if (ogr_pt) { + pc = (Shapefile::PointContents*)main_data.records[i].contents_p; + x = pc->x; + y = pc->y; + rtree.insert(std::make_pair(pt_2d(x,y), i)); + } spatial_counts[i] = -1; } } @@ -233,19 +256,22 @@ void AssignPolygonToPoint::sub_run(int start, int end) CountLinesInPolygon::CountLinesInPolygon(BackgroundMapLayer* _ml, Project* _project, - wxString join_variable_nm, - Operation _op) + std::vector join_variable_nm, + std::vector _op) : SpatialJoinWorker(_ml, _project) { is_spatial_assign = false; join_operation = _op; - join_variable = _ml->GetDoubleColumnData(join_variable_nm, join_values); - + int n_vars = (int)join_operation.size(); + join_values.resize(n_vars); + join_variable = false; // default false: no need to join variables + for (int i=0; iGetDoubleColumnData(join_variable_nm[i], join_values[i]); + } num_polygons = project->GetNumRecords(); // using selected layer (lines) to create rtree - int n = ml->shapes.size(); - double x, y; + int n = (int)ml->shapes.size(); for (int i=0; igeoms[i]; OGREnvelope bbox; @@ -339,19 +365,22 @@ void AssignPolygonToLine::sub_run(int start, int end) CountPolygonInPolygon::CountPolygonInPolygon(BackgroundMapLayer* _ml, Project* _project, - wxString join_variable_nm, - Operation _op) + std::vector join_variable_nm, + std::vector _op) : SpatialJoinWorker(_ml, _project) { is_spatial_assign = false; join_operation = _op; - join_variable = _ml->GetDoubleColumnData(join_variable_nm, join_values); - + int n_vars = (int)join_operation.size(); + join_values.resize(n_vars); + join_variable = false; // default false: no need to join variables + for (int i=0; iGetDoubleColumnData(join_variable_nm[i], join_values[i]); + } num_polygons = project->GetNumRecords(); // using selected layer (polygons) to create rtree - int n = ml->shapes.size(); - double x, y; + int n = (int)ml->shapes.size(); for (int i=0; igeoms[i]; OGREnvelope bbox; @@ -394,9 +423,10 @@ void CountPolygonInPolygon::sub_run(int start, int end) } SpatialJoinDlg::SpatialJoinDlg(wxWindow* parent, Project* _project) -: wxDialog(parent, wxID_ANY, "Spatial Join", wxDefaultPosition, wxSize(350, 250)) +: wxDialog(parent, wxID_ANY, "Spatial Join", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) { project = _project; + panel = new wxPanel(this, -1); wxString info = _("Please select a map layer to apply " @@ -412,8 +442,17 @@ SpatialJoinDlg::SpatialJoinDlg(wxWindow* parent, Project* _project) mbox->Add(field_st, 0, wxALIGN_CENTER | wxALL, 5); mbox->Add(field_list, 0, wxALIGN_CENTER | wxALL, 5); + rb_spatial_count = new wxRadioButton(panel, -1, _("Spatial Count"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); + rb_spatial_join = new wxRadioButton(panel, -1, _("Spatial Join"), wxDefaultPosition, wxDefaultSize); + wxBoxSizer* rb_box = new wxBoxSizer(wxHORIZONTAL); + rb_box->Add(rb_spatial_count, 0, wxLEFT, 200); + rb_box->Add(rb_spatial_join, 0, wxLEFT, 10); + rb_spatial_count->SetValue(true); + join_var_st = new wxStaticText(panel, wxID_ANY, _("Join Variable:")); - join_var_list = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(160,-1)); + join_var_list = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(160, 110), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); wxBoxSizer* join_box = new wxBoxSizer(wxHORIZONTAL); join_box->Add(join_var_st, 0, wxALIGN_LEFT | wxALL, 0); join_box->Add(join_var_list, 0, wxALIGN_LEFT | wxLEFT, 12); @@ -424,13 +463,35 @@ SpatialJoinDlg::SpatialJoinDlg(wxWindow* parent, Project* _project) join_op_box->Add(join_op_st, 0, wxALIGN_LEFT | wxTOP, 5); join_op_box->Add(join_op_list, 0, wxALIGN_LEFT | wxTOP, 5); + wxBoxSizer* left_box = new wxBoxSizer(wxVERTICAL); + left_box->Add(join_box, 0, wxALIGN_LEFT | wxLEFT, 10); + left_box->Add(join_op_box, 0, wxALIGN_LEFT | wxLEFT, 10); + + // list contrl + lst_join = new wxListCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(320, 140), wxLC_REPORT); + lst_join->AppendColumn(_("Variable"), wxLIST_FORMAT_RIGHT); + lst_join->SetColumnWidth(0, 120); + lst_join->AppendColumn(_("Join Operation"), wxLIST_FORMAT_RIGHT); + lst_join->SetColumnWidth(1, 120); + + // move buttons + move_left = new wxButton(panel, wxID_ANY, "<", wxDefaultPosition, wxSize(25,25)); + move_right = new wxButton(panel, wxID_ANY, ">", wxDefaultPosition, wxSize(25,25)); + wxBoxSizer* middle_box = new wxBoxSizer(wxVERTICAL); + middle_box->Add(move_right, 0, wxTOP, 10); + middle_box->Add(move_left, 0, wxTOP, 10); + + wxBoxSizer* main_box = new wxBoxSizer(wxHORIZONTAL); + main_box->Add(left_box); + main_box->Add(middle_box, 0, wxALL, 5); + main_box->Add(lst_join, 1, wxALL, 0); + cbox = new wxBoxSizer(wxVERTICAL); cbox->Add(st, 0, wxALIGN_CENTER | wxALL, 15); cbox->Add(mbox, 0, wxALIGN_CENTER | wxALL, 10); cbox->AddSpacer(10); - cbox->Add(join_box, 0, wxALIGN_LEFT | wxLEFT, 10); - cbox->Add(join_op_box, 0, wxALIGN_LEFT | wxLEFT, 10); - panel->SetSizerAndFit(cbox); + cbox->Add(rb_box, 0, wxALL, 10); + cbox->Add(main_box, wxALL, 10); wxButton* ok_btn = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); @@ -442,25 +503,117 @@ SpatialJoinDlg::SpatialJoinDlg(wxWindow* parent, Project* _project) hbox->Add(ok_btn, 0, wxALIGN_CENTER | wxALL, 5); hbox->Add(cancel_btn, 0, wxALIGN_CENTER | wxALL, 5); - vbox = new wxBoxSizer(wxVERTICAL); - vbox->Add(panel, 1, wxALL, 15); - vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + wxBoxSizer *container = new wxBoxSizer(wxVERTICAL); + container->Add(cbox, 0, wxALIGN_CENTER | wxALL, 10); + container->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); - SetSizer(vbox); - vbox->Fit(this); - - Center(); + panel->SetSizer(container); + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + map_list->Bind(wxEVT_CHOICE, &SpatialJoinDlg::OnLayerSelect, this); ok_btn->Bind(wxEVT_BUTTON, &SpatialJoinDlg::OnOK, this); join_var_list->Bind(wxEVT_CHOICE, &SpatialJoinDlg::OnJoinVariableSel, this); + move_left->Bind(wxEVT_BUTTON, &SpatialJoinDlg::OnRemoveRow, this); + move_right->Bind(wxEVT_BUTTON, &SpatialJoinDlg::OnAddRow, this); + rb_spatial_count->Bind(wxEVT_RADIOBUTTON, &SpatialJoinDlg::OnRadioButton, this); + rb_spatial_join->Bind(wxEVT_RADIOBUTTON, &SpatialJoinDlg::OnRadioButton, this); InitMapList(); - //field_st->Disable(); - //field_list->Disable(); - + wxCommandEvent e; OnLayerSelect(e); + OnRadioButton(e); + + SetSizer(panelSizer); + SetAutoLayout(true); + panelSizer->Fit(this); + + Center(); +} + +void SpatialJoinDlg::OnRadioButton(wxCommandEvent& e) +{ + bool flag = !rb_spatial_count->GetValue(); + join_var_st->Enable(flag); + join_op_st->Enable(flag); + join_var_list->Enable(flag); + join_op_list->Enable(flag); + move_left->Enable(flag); + move_right->Enable(flag); + lst_join->Enable(flag); +} + +void SpatialJoinDlg::OnAddRow(wxCommandEvent& e) +{ + // get join operation + wxString join_op; + int op_sel = join_op_list->GetSelection(); + if (op_sel == 0) { + join_op = "Sum"; + } else if (op_sel == 1) { + join_op = "Mean"; + } else if (op_sel == 2) { + join_op = "Median"; + } else if (op_sel == 3) { + join_op = "Standard Deviation"; + } + + bool show_warning = false; + // get selected variables + wxArrayInt selections; + join_var_list->GetSelections(selections); + int num_var = (int)selections.size(); + for (int i=0; iGetString(idx); + std::pair element; + element.first = var_name; + element.second = join_op; + if (var_set.find(element) != var_set.end() && !show_warning) { + // warning + wxString err_msg = _("%s and %s have already been added for spatial join."); + wxMessageDialog dlg(NULL, wxString::Format(err_msg, var_name, join_op), + _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + show_warning = true; + } else { + var_set.insert(element); + int new_row = lst_join->GetItemCount(); + lst_join->InsertItem(new_row, element.first); + lst_join->SetItem(new_row, 1, element.second); + } + } +} + +std::list SpatialJoinDlg::GetListSel(wxListCtrl* lc) +{ + std::list l; + if (!lc) return l; + long item = -1; + for ( ;; ) { + item = lc->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if ( item == -1 ) break; + l.push_back(item); + } + return l; +} + +void SpatialJoinDlg::OnRemoveRow(wxCommandEvent& e) +{ + std::list sels = GetListSel(lst_join); + sels.sort(); + sels.reverse(); + if (!sels.empty()) { + BOOST_FOREACH(int i, sels) { + wxString var_name = lst_join->GetItemText(i, 0); + wxString join_op = lst_join->GetItemText(i, 1); + var_set.erase(std::make_pair(var_name, join_op)); + lst_join->DeleteItem(i); + } + } + e.Skip(); } void SpatialJoinDlg::InitMapList() @@ -503,11 +656,19 @@ void SpatialJoinDlg::UpdateFieldList(wxString name) join_var_st->Hide(); join_op_list->Hide(); join_op_st->Hide(); + + rb_spatial_count->Hide(); + rb_spatial_join->Hide(); + lst_join->Hide(); + + move_left->Hide(); + move_right->Hide(); } else { + // spatial count field_list->Clear(); field_list->Hide(); field_st->Hide(); - + join_var_list->Show(); join_var_st->Show(); join_op_list->Show(); @@ -515,31 +676,20 @@ void SpatialJoinDlg::UpdateFieldList(wxString name) // spatial join join_var_list->Clear(); vector field_names = ml->GetNumericFieldNames(); - join_var_list->Append("(Spatial Count)"); for (int i=0; iAppend(field_names[i]); } - join_var_list->SetSelection(0); join_op_list->Clear(); - join_op_list->Append(""); + join_op_list->Append("Sum"); join_op_list->Append("Mean"); join_op_list->Append("Median"); join_op_list->Append("Standard Deviation"); - join_op_list->Append("Sum"); - join_op_list->Disable(); } } } void SpatialJoinDlg::OnJoinVariableSel(wxCommandEvent& e) { - int sel = join_var_list->GetSelection(); - if (sel == 0) { - join_op_list->SetSelection(0); - join_op_list->Disable(); - } else { - join_op_list->Enable(); - } } void SpatialJoinDlg::OnLayerSelect(wxCommandEvent& e) @@ -576,7 +726,7 @@ void SpatialJoinDlg::OnOK(wxCommandEvent& e) wxString label = "Spatial Count"; wxString field_name = "SC"; - SpatialJoinWorker* sj; + SpatialJoinWorker* sj = NULL; if (project->GetShapeType() == Shapefile::POINT_TYP || project->GetShapeType() == Shapefile::POLY_LINE) { // working layer is Points/Lines @@ -608,39 +758,43 @@ void SpatialJoinDlg::OnOK(wxCommandEvent& e) } else { // working layer is Polygon: spatial count - int join_list_sel = join_var_list->GetSelection(); - bool join_variable = join_list_sel > 0; - if (join_variable) { - label = "Spatial Join"; - field_name = "SJ"; - if (join_op_list->GetSelection() == 0) { - wxMessageDialog dlg (this, _("Please select Join Operation with Join Variable."), - _("Warning"), wxOK | wxICON_INFORMATION); - dlg.ShowModal(); - return; - } + label = "Spatial Join"; + field_name = rb_spatial_count->GetValue() ? "SC" : "SJ"; + + int join_list_sel = lst_join->GetItemCount(); + if (rb_spatial_join->GetValue() && join_list_sel == 0) { + wxMessageDialog dlg (this, _("Please select at least one Join Operation with Join Variable."), + _("Warning"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + return; } - wxString var_nm = ""; - SpatialJoinWorker::Operation join_op = SpatialJoinWorker::NONE; - if (join_variable) { - int op_sel = join_op_list->GetSelection(); - if (op_sel == 1) { + + std::vector join_var_nms; + std::vector join_ops; + + for (int i=0; iGetItemText(i, 0); + wxString op_name = lst_join->GetItemText(i, 1); + SpatialJoinWorker::Operation join_op = SpatialJoinWorker::SUM; + if (op_name == "Sum") { + join_op = SpatialJoinWorker::SUM; + } else if (op_name == "Mean") { join_op = SpatialJoinWorker::MEAN; - } else if (op_sel == 2) { + } else if (op_name == "Median") { join_op = SpatialJoinWorker::MEDIAN; - } else if (op_sel == 3) { + } else if (op_name == "Standard Deviation") { join_op = SpatialJoinWorker::STD; - } else if (op_sel == 4) { - join_op = SpatialJoinWorker::SUM; } - if (op_sel >0) var_nm = join_var_list->GetString(join_list_sel); + join_var_nms.push_back(var_name); + join_ops.push_back(join_op); } + if (ml->GetShapeType() == Shapefile::POINT_TYP) { - sj = new CountPointsInPolygon(ml, project, var_nm, join_op); + sj = new CountPointsInPolygon(ml, project, join_var_nms, join_ops); } else if (ml->GetShapeType() == Shapefile::POLY_LINE) { - sj = new CountLinesInPolygon(ml, project, var_nm, join_op); + sj = new CountLinesInPolygon(ml, project, join_var_nms, join_ops); } else if (ml->GetShapeType() == Shapefile::POLYGON) { - sj = new CountPolygonInPolygon(ml, project, var_nm, join_op); + sj = new CountPolygonInPolygon(ml, project, join_var_nms, join_ops); } else { wxMessageDialog dlg (this, _("Spatial Join can not be applied on " "unknonwn layers. Please select " @@ -662,15 +816,18 @@ void SpatialJoinDlg::OnOK(wxCommandEvent& e) if (sj->JoinVariable()) { // Spatial Join with variable - vector spatial_joins = sj->GetJoinResults(); - int new_col = 1; + std::vector > spatial_joins = sj->GetJoinResults(); + int new_col = (int)spatial_joins.size(); std::vector new_data(new_col); vector undefs(project->GetNumRecords(), false); - new_data[0].d_val = &spatial_joins; - new_data[0].label = label; - new_data[0].field_default = field_name; - new_data[0].type = GdaConst::double_type; - new_data[0].undefined = &undefs; + for (int i=0; i GetResults(); - vector GetJoinResults(); + std::vector GetResults(); + std::vector > GetJoinResults(); virtual void sub_run(int start, int end) = 0; protected: @@ -44,13 +44,15 @@ class SpatialJoinWorker bool duplicate_count; // results - vector spatial_counts; - vector spatial_joins; + std::vector spatial_counts; + std::vector > spatial_joins; // for join variable bool join_variable; - std::vector join_values; - Operation join_operation; + + std::vector > join_values; + std::vector join_operation; + std::vector > join_ids; }; @@ -58,7 +60,8 @@ class CountPointsInPolygon : public SpatialJoinWorker { public: CountPointsInPolygon(BackgroundMapLayer* ml, Project* project, - wxString join_variable_nm, Operation op); + std::vector join_variable_nm, + std::vector op); virtual void sub_run(int start, int end); protected: rtree_pt_2d_t rtree; @@ -68,7 +71,8 @@ class CountLinesInPolygon : public SpatialJoinWorker { public: CountLinesInPolygon(BackgroundMapLayer* ml, Project* project, - wxString join_variable_nm, Operation op); + std::vector join_variable_nm, + std::vector op); virtual void sub_run(int start, int end); protected: rtree_box_2d_t rtree; @@ -80,7 +84,8 @@ class CountPolygonInPolygon : public SpatialJoinWorker rtree_box_2d_t rtree; public: CountPolygonInPolygon(BackgroundMapLayer* ml, Project* project, - wxString join_variable_nm, Operation op); + std::vector join_variable_nm, + std::vector op); virtual void sub_run(int start, int end); }; @@ -110,7 +115,7 @@ class SpatialJoinDlg : public wxDialog { Project* project; wxChoice* map_list; - wxChoice* join_var_list; + wxListBox* join_var_list; wxChoice* join_op_list; wxChoice* field_list; wxStaticText* field_st; @@ -119,8 +124,16 @@ class SpatialJoinDlg : public wxDialog wxBoxSizer* vbox; wxBoxSizer* cbox; wxPanel* panel; + wxListCtrl* lst_join; + wxButton* move_left; + wxButton* move_right; + wxRadioButton* rb_spatial_count; + wxRadioButton* rb_spatial_join; + + std::set > var_set; void UpdateFieldList(wxString name); + std::list GetListSel(wxListCtrl* lc); public: SpatialJoinDlg(wxWindow* parent, Project* project); @@ -128,6 +141,9 @@ class SpatialJoinDlg : public wxDialog void OnOK(wxCommandEvent& e); void OnLayerSelect(wxCommandEvent& e); void OnJoinVariableSel(wxCommandEvent& e); + void OnRemoveRow(wxCommandEvent& e); + void OnAddRow(wxCommandEvent& e); + void OnRadioButton(wxCommandEvent& e); void InitMapList(); }; diff --git a/DialogTools/SpectralClusteringDlg.cpp b/DialogTools/SpectralClusteringDlg.cpp index d4c924ff8..248dd3a60 100644 --- a/DialogTools/SpectralClusteringDlg.cpp +++ b/DialogTools/SpectralClusteringDlg.cpp @@ -43,7 +43,7 @@ #include "../Algorithms/cluster.h" #include "../Algorithms/spectral.h" #include "../Algorithms/DataUtils.h" - +#include "../kNN/ANN/ANN.h" #include "../GeneralWxUtils.h" #include "../GenUtils.h" #include "SaveToTableDlg.h" @@ -94,7 +94,7 @@ void SpectralClusteringDlg::CreateControls() { wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, - wxSize(820,880), + wxSize(820,900), wxHSCROLL|wxVSCROLL ); scrl->SetScrollRate( 5, 5 ); @@ -112,33 +112,62 @@ void SpectralClusteringDlg::CreateControls() // NumberOfCluster Control AddNumberOfClusterCtrl(panel, gbox); + // Affinity heading + gbox->Add(new wxStaticText(panel, wxID_ANY,"Affinity"), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(new wxStaticText(panel, wxID_ANY,""), 1, wxEXPAND); + // Spectral controls: KNN - lbl_knn = new wxStaticText(panel, wxID_ANY, _("Affinity with K-NN:")); + int suggest_k = ceil(log10((double)rows)); + wxString str_k; + str_k << suggest_k; + lbl_knn = new wxStaticText(panel, wxID_ANY, _(" K-NN:")); wxBoxSizer* hbox19 = new wxBoxSizer(wxHORIZONTAL); chk_knn = new wxCheckBox(panel, wxID_ANY, ""); lbl_neighbors = new wxStaticText(panel, wxID_ANY, _("# Neighors:")); - m_knn = new wxTextCtrl(panel, wxID_ANY, "4", wxDefaultPosition, wxSize(40,-1)); + m_knn = new wxComboBox(panel, wxID_ANY, str_k, wxDefaultPosition, + wxSize(80,-1), 0, NULL); + m_knn->Append(wxString::Format("%d", suggest_k)); + // ln(n) + m_knn->Append(wxString::Format("%d", (int)(ceil(log((double)rows))))); + hbox19->Add(chk_knn); hbox19->Add(lbl_neighbors); hbox19->Add(m_knn); gbox->Add(lbl_knn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(hbox19, 1, wxEXPAND); + // Mutual KNN + wxStaticText *lbl_mknn = new wxStaticText(panel, wxID_ANY, _(" Mutual K-NN:")); + wxBoxSizer* hbox20 = new wxBoxSizer(wxHORIZONTAL); + chk_mknn = new wxCheckBox(panel, wxID_ANY, ""); + lbl_m_neighbors = new wxStaticText(panel, wxID_ANY, _("# Neighors:")); + m_mknn = new wxComboBox(panel, wxID_ANY, str_k, wxDefaultPosition, + wxSize(80,-1), 0, NULL); + // ln(n) + m_mknn->Append(wxString::Format("%d", suggest_k)); + m_mknn->Append(wxString::Format("%d", (int)(ceil(log((double)rows))))); + hbox20->Add(chk_mknn); + hbox20->Add(lbl_m_neighbors); + hbox20->Add(m_mknn); + gbox->Add(lbl_mknn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox20, 1, wxEXPAND); + m_mknn->Enable(false); + // Spectral Controls: Kernel - double suggest_sigma = sqrt(1.0/(double)num_obs); - wxString str_sigma; - str_sigma << suggest_sigma; - lbl_kernel = new wxStaticText(panel, wxID_ANY, _("Affinity with Kernel:")); + lbl_kernel = new wxStaticText(panel, wxID_ANY, _(" Gaussian:")); wxBoxSizer* hbox18 = new wxBoxSizer(wxHORIZONTAL); chk_kernel = new wxCheckBox(panel, wxID_ANY, ""); - lbl_sigma = new wxStaticText(panel, wxID_ANY, _("(Gaussian) Sigma:")); - m_sigma = new wxTextCtrl(panel, wxID_ANY, str_sigma, - wxDefaultPosition, wxSize(40,-1)); + lbl_sigma = new wxStaticText(panel, wxID_ANY, _(" Sigma:")); + m_sigma = new wxComboBox(panel, wxID_ANY, "", wxDefaultPosition, + wxSize(80,-1), 0, NULL); + hbox18->Add(chk_kernel); hbox18->Add(lbl_sigma); hbox18->Add(m_sigma); gbox->Add(lbl_kernel, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(hbox18, 1, wxEXPAND); + wxCommandEvent ev; + UpdateGaussian(ev); // Weights (not enabled) lbl_weights = new wxStaticText(panel, wxID_ANY, _("Use Weights:")); @@ -150,31 +179,7 @@ void SpectralClusteringDlg::CreateControls() hbox22->Add(combo_weights); gbox->Add(lbl_weights, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(hbox22, 1, wxEXPAND); - - // power iteration option approximation - wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, - _("Use Power Iteration:")); - wxBoxSizer *hbox15 = new wxBoxSizer(wxHORIZONTAL); - chk_poweriteration = new wxCheckBox(panel, wxID_ANY, ""); - lbl_poweriteration = new wxStaticText(panel, wxID_ANY, _("# Max Iteration:")); - txt_poweriteration = new wxTextCtrl(panel, wxID_ANY, "300", - wxDefaultPosition, wxSize(70,-1)); - txt_poweriteration->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); - chk_poweriteration->Bind(wxEVT_CHECKBOX, - &SpectralClusteringDlg::OnCheckPowerIteration, - this); - if (project->GetNumRecords() < 100) { - lbl_poweriteration->Disable(); - txt_poweriteration->Disable(); - } else { - chk_poweriteration->SetValue(true); - } - hbox15->Add(chk_poweriteration); - hbox15->Add(lbl_poweriteration); - hbox15->Add(txt_poweriteration); - gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(hbox15, 1, wxEXPAND); - + // Transformation AddTransformation(panel, gbox); @@ -201,7 +206,7 @@ void SpectralClusteringDlg::CreateControls() gbox->Add(st10, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(box10, 1, wxEXPAND); - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:")); + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); @@ -222,17 +227,7 @@ void SpectralClusteringDlg::CreateControls() wxTextCtrl *box11 = new wxTextCtrl(panel, wxID_ANY, "300"); gbox->Add(st11, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); gbox->Add(box11, 1, wxEXPAND); - - /* - wxStaticText* st12 = new wxStaticText(panel, wxID_ANY, _("Method:"), - wxDefaultPosition, wxSize(128,-1)); - wxString choices12[] = {"Arithmetic Mean", "Arithmetic Median"}; - wxChoice* box12 = new wxChoice(panel, wxID_ANY, wxDefaultPosition, - wxSize(160,-1), 2, choices12); - box12->SetSelection(0); - gbox->Add(st12, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); - gbox->Add(box12, 1, wxEXPAND); - */ + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); wxString choices13[] = {"Euclidean", "Manhattan"}; @@ -303,16 +298,17 @@ void SpectralClusteringDlg::CreateControls() // temp solution: chk_kernel->SetValue(false); - lbl_kernel->Disable(); + //lbl_kernel->Disable(); lbl_sigma->Disable(); m_sigma->Disable(); chk_knn->SetValue(true); - lbl_knn ->Enable(); + //lbl_knn ->Enable(); lbl_neighbors->Enable(); m_knn->Enable(); + lbl_m_neighbors->Disable(); chk_weights->SetValue(false); chk_weights->Disable(); lbl_weights->Disable(); @@ -330,27 +326,14 @@ void SpectralClusteringDlg::CreateControls() // Events chk_kernel->Bind(wxEVT_CHECKBOX, &SpectralClusteringDlg::OnKernelCheck, this); chk_knn->Bind(wxEVT_CHECKBOX, &SpectralClusteringDlg::OnKNNCheck, this); + chk_mknn->Bind(wxEVT_CHECKBOX, &SpectralClusteringDlg::OnMutualKNNCheck, this); chk_weights->Bind(wxEVT_CHECKBOX, &SpectralClusteringDlg::OnWeightsCheck, this); okButton->Bind(wxEVT_BUTTON, &SpectralClusteringDlg::OnOK, this); closeButton->Bind(wxEVT_BUTTON, &SpectralClusteringDlg::OnClickClose, this); chk_seed->Bind(wxEVT_CHECKBOX, &SpectralClusteringDlg::OnSeedCheck, this); seedButton->Bind(wxEVT_BUTTON, &SpectralClusteringDlg::OnChangeSeed, this); - - m_distance->Connect(wxEVT_CHOICE, - wxCommandEventHandler(SpectralClusteringDlg::OnDistanceChoice), - NULL, this); -} - -void SpectralClusteringDlg::OnCheckPowerIteration(wxCommandEvent& event) -{ - if (chk_poweriteration->IsChecked()) { - txt_poweriteration->Enable(); - lbl_poweriteration->Enable(); - } else { - txt_poweriteration->Disable(); - lbl_poweriteration->Disable(); - } + combo_var->Bind(wxEVT_LISTBOX, &SpectralClusteringDlg::UpdateGaussian, this); } void SpectralClusteringDlg::OnWeightsCheck(wxCommandEvent& event) @@ -358,17 +341,41 @@ void SpectralClusteringDlg::OnWeightsCheck(wxCommandEvent& event) } +void SpectralClusteringDlg::UpdateGaussian(wxCommandEvent& event) +{ + if (m_sigma) { + m_sigma->Clear(); + wxArrayInt selections; + combo_var->GetSelections(selections); + if (selections.size() > 0) { + // sklearn: gamma = 1.0 / NV, gamma = 1/(2sigma^2) => sigma = sqrt(1/gamma/ 2.0); + // suggest_sigma = sqrt(NV/2.0); + m_sigma->Append(wxString::Format("%f", sqrt(1/(double)selections.size()))); + } + m_sigma->Append(wxString::Format("%f", log10((double)rows)+1)); + m_sigma->Append(wxString::Format("%f", log((double)rows)+1)); + m_sigma->SetSelection(0); + } +} void SpectralClusteringDlg::OnKernelCheck(wxCommandEvent& event) { bool flag = chk_kernel->IsChecked(); + lbl_sigma->Enable(flag); + m_sigma->Enable(flag); + if (flag) { + wxCommandEvent ev; + UpdateGaussian(ev); + } + chk_knn->SetValue(!flag); lbl_neighbors->Enable(!flag); m_knn->Enable(!flag); - lbl_knn->Enable(!flag); - lbl_kernel->Enable(flag); - lbl_sigma->Enable(flag); - m_sigma->Enable(flag); + if (flag) { + chk_mknn->SetValue(!flag); + lbl_m_neighbors->Enable(!flag); + m_mknn->Enable(!flag); + } } void SpectralClusteringDlg::OnKNNCheck(wxCommandEvent& event) @@ -376,12 +383,33 @@ void SpectralClusteringDlg::OnKNNCheck(wxCommandEvent& event) bool flag = chk_knn->IsChecked(); lbl_neighbors->Enable(flag); m_knn->Enable(flag); - lbl_knn->Enable(flag); - chk_kernel->SetValue(!flag); - lbl_kernel->Enable(!flag); - lbl_sigma->Enable(!flag); - m_sigma->Enable(!flag); + chk_mknn->SetValue(!flag); + lbl_m_neighbors->Enable(!flag); + m_mknn->Enable(!flag); + + if (flag) { + chk_kernel->SetValue(!flag); + lbl_sigma->Enable(!flag); + m_sigma->Enable(!flag); + } +} + +void SpectralClusteringDlg::OnMutualKNNCheck(wxCommandEvent& event) +{ + bool flag = chk_mknn->IsChecked(); + lbl_m_neighbors->Enable(flag); + m_mknn->Enable(flag); + + chk_knn->SetValue(!flag); + lbl_neighbors->Enable(!flag); + m_knn->Enable(!flag); + + if (flag) { + chk_kernel->SetValue(!flag); + lbl_sigma->Enable(!flag); + m_sigma->Enable(!flag); + } } void SpectralClusteringDlg::OnSeedCheck(wxCommandEvent& event) @@ -441,27 +469,13 @@ void SpectralClusteringDlg::OnChangeSeed(wxCommandEvent& event) } } -void SpectralClusteringDlg::OnDistanceChoice(wxCommandEvent& event) -{ - - if (m_distance->GetSelection() == 0) { - m_distance->SetSelection(1); - } else if (m_distance->GetSelection() == 3) { - m_distance->SetSelection(4); - } else if (m_distance->GetSelection() == 6) { - m_distance->SetSelection(7); - } else if (m_distance->GetSelection() == 9) { - m_distance->SetSelection(10); - } -} - void SpectralClusteringDlg::InitVariableCombobox(wxListBox* var_box) { wxArrayString items; std::vector col_id_map; table_int->FillNumericColIdMap(col_id_map); - for (int i=0, iend=col_id_map.size(); iGetColName(id); if (table_int->IsColTimeVariant(id)) { @@ -505,20 +519,18 @@ wxString SpectralClusteringDlg::_printConfiguration() wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - ncluster = value_ncluster; + ncluster = (int)value_ncluster; } wxString txt; txt << _("Number of clusters:\t") << ncluster << "\n"; if (chk_kernel->IsChecked()) { - txt << _("Affinity with Guassian Kernel:\tSigma=") << m_sigma->GetValue() << "\n"; - } - if (chk_knn->IsChecked()) { + txt << _("Affinity with Gaussian Kernel:\tSigma=") << m_sigma->GetValue() << "\n"; + } else if (chk_knn->IsChecked()) { txt << _("Affinity with K-Nearest Neighbors:\tK=") << m_knn->GetValue() << "\n"; - } - if (chk_poweriteration->IsChecked()) { - txt << _("Use Power Iteration method:\tMax iterations=") << txt_poweriteration->GetValue() << "\n"; + } else if (chk_mknn->IsChecked()) { + txt << _("Affinity with Mutual K-Nearest Neighbors:\tK=") << m_mknn->GetValue() << "\n"; } txt << _("Transformation:\t") << combo_tranform->GetString(combo_tranform->GetSelection()) << "\n"; @@ -536,32 +548,28 @@ bool SpectralClusteringDlg::CheckAllInputs() // get input: variables and data, and auto weights transform = combo_tranform->GetSelection(); if( GetInputData(transform, 1) == false) return false; - + // check if X-Centroids selected but not projected + if ((has_x_cent || has_y_cent) && check_spatial_ref) { + bool cont_process = project->CheckSpatialProjection(check_spatial_ref); + if (cont_process == false) { + return false; + } + } + // get input: number of cluster n_cluster = 0; wxString str_ncluster = combo_n->GetValue(); long value_ncluster; if (str_ncluster.ToLong(&value_ncluster)) { - n_cluster = value_ncluster; + n_cluster = (int)value_ncluster; } - if (n_cluster < 2 || n_cluster > num_obs) { + if (n_cluster < 2 || n_cluster > rows) { wxString err_msg = _("Please enter a valid number of cluster."); wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); dlg.ShowModal(); return false; } - // get input: iterations - n_power_iter = 0; - long l_iterations; - if (chk_poweriteration->IsChecked()) { - wxString str_iterations; - str_iterations = txt_poweriteration->GetValue(); - if (str_iterations.ToLong(&l_iterations)) { - n_power_iter = l_iterations; - } - } - // get input: sigma value_sigma = 0.018; double d_value_sigma; @@ -575,7 +583,29 @@ bool SpectralClusteringDlg::CheckAllInputs() wxString str_knn = m_knn->GetValue(); long value_knn; if(str_knn.ToLong(&value_knn)) { - knn = value_knn; + knn = (int)value_knn; + } + + if (chk_knn->GetValue() && (knn >= rows || knn < 1)) { + wxString err_msg = _("Please enter a valid number of KNN neighbors."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; + } + + // get input: mutual knn + mutual_knn = 4; + wxString str_mknn = m_mknn->GetValue(); + long value_mknn; + if(str_mknn.ToLong(&value_mknn)) { + mutual_knn = (int)value_mknn; + } + + if (chk_mknn->GetValue() && (mutual_knn >= rows || mutual_knn < 1)) { + wxString err_msg = _("Please enter a valid number of mutual KNN neighbors."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return false; } // get input: kmeans init @@ -587,7 +617,7 @@ bool SpectralClusteringDlg::CheckAllInputs() wxString str_pass = m_pass->GetValue(); long value_pass; if(str_pass.ToLong(&value_pass)) { - npass = value_pass; + npass = (int)value_pass; } // get input: kmeans max iteration @@ -595,7 +625,7 @@ bool SpectralClusteringDlg::CheckAllInputs() wxString iterations = m_iterations->GetValue(); long l_maxiter; if(iterations.ToLong(&l_maxiter)) { - n_maxiter = l_maxiter; + n_maxiter = (int)l_maxiter; } // get input: distance @@ -613,16 +643,18 @@ bool SpectralClusteringDlg::CheckAllInputs() bool SpectralClusteringDlg::Run(vector& clusters) { if (GdaConst::use_gda_user_seed) { - setrandomstate(GdaConst::gda_user_seed); + setrandomstate((int)GdaConst::gda_user_seed); resetrandom(); } else { setrandomstate(-1); resetrandom(); } - // NOTE input_data should be retrieved first!! + // NOTE input_data should be retrieved first!! (see CheckAllInput()) // get input: weights (auto) + // this function has to be called when use auto-weighting weight = GetWeights(columns); + // add weight to input_data double** data = new double*[rows]; for (int i=0; i& clusters) Spectral spectral; spectral.set_data(data, rows, columns); spectral.set_centers(n_cluster); - spectral.set_power_iters(n_power_iter); if (affinity_type == 0) { spectral.set_kernel(0); spectral.set_sigma(value_sigma); } else { - spectral.set_knn(knn); + bool is_mutual = chk_mknn->GetValue(); + int k = is_mutual ? mutual_knn : knn; + spectral.set_knn(k, is_mutual); } spectral.set_kmeans_dist(dist); spectral.set_kmeans_method(method); @@ -649,8 +682,10 @@ bool SpectralClusteringDlg::Run(vector& clusters) spectral.cluster(affinity_type); clusters = spectral.get_assignments(); - for (int i=0; i > cluster_ids(n_cluster); @@ -674,7 +709,6 @@ bool SpectralClusteringDlg::Run(vector& clusters) void SpectralClusteringDlg::OnOK(wxCommandEvent& event ) { wxLogMessage("Click SpectralClusteringDlg::OnOK"); - if (CheckAllInputs() == false) return; // get input: save to field name wxString field_name = m_textbox->GetValue(); @@ -685,7 +719,7 @@ void SpectralClusteringDlg::OnOK(wxCommandEvent& event ) return; } - vector clusters; + if (CheckAllInputs() == false) return; if (Run(clusters) == false) return; diff --git a/DialogTools/SpectralClusteringDlg.h b/DialogTools/SpectralClusteringDlg.h index 2cd9c45d7..1a6d56227 100644 --- a/DialogTools/SpectralClusteringDlg.h +++ b/DialogTools/SpectralClusteringDlg.h @@ -25,6 +25,9 @@ #include #include #include +#include + +using namespace Eigen; #include "../FramesManager.h" #include "../VarTools.h" @@ -46,13 +49,12 @@ class SpectralClusteringDlg : public AbstractClusterDlg void OnClickClose( wxCommandEvent& event ); void OnClose(wxCloseEvent& ev); - void OnCheckPowerIteration(wxCommandEvent& event); void OnWeightsCheck(wxCommandEvent& event); void OnKernelCheck(wxCommandEvent& event); void OnKNNCheck(wxCommandEvent& event); + void OnMutualKNNCheck(wxCommandEvent& event); void OnSeedCheck(wxCommandEvent& event); void OnChangeSeed(wxCommandEvent& event); - void OnDistanceChoice(wxCommandEvent& event); virtual void InitVariableCombobox(wxListBox* var_box); @@ -61,18 +63,20 @@ class SpectralClusteringDlg : public AbstractClusterDlg protected: virtual bool Run(vector& clusters); virtual bool CheckAllInputs(); + void UpdateGaussian(wxCommandEvent& event); protected: int transform; int n_cluster; - int n_power_iter; double value_sigma; int knn; + int mutual_knn; char method; int npass; int n_maxiter; char dist; int affinity_type; + std::vector clusters; wxCheckBox* chk_seed; wxChoice* combo_method; @@ -81,7 +85,7 @@ class SpectralClusteringDlg : public AbstractClusterDlg wxTextCtrl* m_iterations; wxTextCtrl* m_pass; - wxTextCtrl* m_sigma; + wxComboBox* m_sigma; wxChoice* combo_kernel; wxChoice* m_method; wxChoice* m_distance; @@ -90,18 +94,17 @@ class SpectralClusteringDlg : public AbstractClusterDlg wxStaticText* lbl_sigma; wxCheckBox* chk_knn; + wxCheckBox* chk_mknn; wxStaticText* lbl_knn; wxStaticText* lbl_neighbors; - wxTextCtrl* m_knn; + wxStaticText* lbl_m_neighbors; + wxComboBox* m_knn; + wxComboBox* m_mknn; wxStaticText* lbl_weights; wxCheckBox* chk_weights; wxChoice* combo_weights; - wxCheckBox* chk_poweriteration; - wxTextCtrl* txt_poweriteration; - wxStaticText* lbl_poweriteration; - wxButton* seedButton; DECLARE_EVENT_TABLE() diff --git a/DialogTools/WeightsManDlg.cpp b/DialogTools/WeightsManDlg.cpp index e14974d52..e17a3b9b0 100644 --- a/DialogTools/WeightsManDlg.cpp +++ b/DialogTools/WeightsManDlg.cpp @@ -88,11 +88,16 @@ create_btn(0), load_btn(0), remove_btn(0), w_list(0) _("Connectivity Graph"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); intersection_btn = new wxButton(panel, XRCID("ID_INTERSECTION_BTN"), - _("Weights Intersection"), wxDefaultPosition, + _("Intersection"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); union_btn = new wxButton(panel, XRCID("ID_UNION_BTN"), - _("Weights Union"), wxDefaultPosition, + _("Union"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); + symmetric_btn = new wxButton(panel, XRCID("ID_SYMMETRIC_BTN"), + _("Make Symmetric"), wxDefaultPosition, + wxDefaultSize, wxBU_EXACTFIT); + mutual_chk = new wxCheckBox(panel, XRCID("ID_MUTUAL_CHK"), + _("mutual")); Connect(XRCID("ID_CREATE_BTN"), wxEVT_BUTTON, wxCommandEventHandler(WeightsManFrame::OnCreateBtn)); Connect(XRCID("ID_LOAD_BTN"), wxEVT_BUTTON, @@ -109,6 +114,8 @@ create_btn(0), load_btn(0), remove_btn(0), w_list(0) wxCommandEventHandler(WeightsManFrame::OnIntersectionBtn)); Connect(XRCID("ID_UNION_BTN"), wxEVT_BUTTON, wxCommandEventHandler(WeightsManFrame::OnUnionBtn)); + Connect(XRCID("ID_SYMMETRIC_BTN"), wxEVT_BUTTON, + wxCommandEventHandler(WeightsManFrame::OnSymmetricBtn)); w_list = new wxListCtrl(panel, XRCID("ID_W_LIST"), wxDefaultPosition, wxSize(-1, 100), wxLC_REPORT); // Note: search for "ungrouped_list" for examples of wxListCtrl usage. @@ -149,6 +156,10 @@ create_btn(0), load_btn(0), remove_btn(0), w_list(0) btns_row3_h_szr->AddSpacer(5); btns_row3_h_szr->Add(union_btn, 0, wxALIGN_CENTER_VERTICAL); btns_row3_h_szr->AddSpacer(5); + btns_row3_h_szr->Add(symmetric_btn, 0, wxALIGN_CENTER_VERTICAL); + btns_row3_h_szr->Add(mutual_chk, 0, wxALIGN_CENTER_VERTICAL); + btns_row3_h_szr->AddSpacer(5); + wxBoxSizer* wghts_list_h_szr = new wxBoxSizer(wxHORIZONTAL); wghts_list_h_szr->Add(w_list); @@ -199,6 +210,7 @@ void WeightsManFrame::OnHistogramBtn(wxCommandEvent& ev) wxLogMessage("WeightsManFrame::OnHistogramBtn()"); boost::uuids::uuid id = GetHighlightId(); if (id.is_nil()) return; + // memory will be managed by wxWidgets ConnectivityHistFrame* f = new ConnectivityHistFrame(this, project_p, id); } @@ -317,6 +329,54 @@ void WeightsManFrame::OnIntersectionBtn(wxCommandEvent& ev) } } +void WeightsManFrame::OnSymmetricBtn(wxCommandEvent& ev) +{ + wxLogMessage("WeightsManFrame::OnSymmetricBtn()"); + boost::uuids::uuid w_id = GetHighlightId(); + if (w_id.is_nil()) return; + + GeoDaWeight* w = w_man_int->GetWeights(w_id); + + if (w) { + // construct new symmetric weights: W + W' or W*W' + std::vector > nbr_dict(w->GetNumObs()); + bool is_mutual = mutual_chk->GetValue(); + for (int i=0; iGetNumObs(); ++i) { + const std::vector& nbrs = w->GetNeighbors(i); + for (int j=0; jCheckNeighbor(nbr, i)) { + nbr_dict[i].insert(nbr); + nbr_dict[nbr].insert(i); + } + } else { + nbr_dict[i].insert(nbr); + nbr_dict[nbr].insert(i); + } + } + } + // create actual GAL weights file + std::set::iterator it; + GalElement* gal = new GalElement[w->GetNumObs()]; + for (int i=0; iGetNumObs(); ++i) { + const std::set& nbrs = nbr_dict[i]; + gal[i].SetSizeNbrs(nbrs.size()); + int j=0; + for (it = nbrs.begin(); it != nbrs.end(); ++it) { + gal[i].SetNbr(j++, *it); + } + } + GalWeight* new_w = new GalWeight(); + new_w->num_obs = w->GetNumObs(); + new_w->gal = gal; + new_w->is_symmetric = true; + new_w->id_field = w->GetIDName(); + SaveGalWeightsFile(new_w); + delete new_w; + } +} + void WeightsManFrame::OnUnionBtn(wxCommandEvent& ev) { wxLogMessage("WeightsManFrame::OnUnionBtn()"); @@ -962,12 +1022,16 @@ void WeightsManFrame::UpdateButtons() if (histogram_btn) histogram_btn->Enable(any_sel); if (connectivity_map_btn) connectivity_map_btn->Enable(any_sel); if (connectivity_graph_btn) connectivity_graph_btn->Enable(any_sel); - if (project_p->isTableOnly) { - connectivity_map_btn->Disable(); - connectivity_graph_btn->Disable(); + if (project_p && project_p->isTableOnly) { + if (connectivity_map_btn) connectivity_map_btn->Disable(); + if (connectivity_graph_btn) connectivity_graph_btn->Disable(); + } + if (w_list) { + int sel_w_cnt = w_list->GetSelectedItemCount(); + if (intersection_btn) intersection_btn->Enable(sel_w_cnt >= 2); + if (union_btn) union_btn->Enable(sel_w_cnt >= 2); + if (symmetric_btn) symmetric_btn->Enable(sel_w_cnt == 1); + if (mutual_chk) mutual_chk->Enable(sel_w_cnt == 1); } - int sel_w_cnt = w_list->GetSelectedItemCount(); - if (intersection_btn) intersection_btn->Enable(sel_w_cnt >= 2); - if (union_btn) union_btn->Enable(sel_w_cnt >= 2); } diff --git a/DialogTools/WeightsManDlg.h b/DialogTools/WeightsManDlg.h index 3c9670d9b..065108ef1 100644 --- a/DialogTools/WeightsManDlg.h +++ b/DialogTools/WeightsManDlg.h @@ -32,6 +32,7 @@ #include #include #include +#include #include "../TemplateCanvas.h" #include "../TemplateFrame.h" #include "../ShapeOperations/WeightsManStateObserver.h" @@ -70,6 +71,7 @@ class WeightsManFrame : public TemplateFrame, public WeightsManStateObserver void OnConnectGraphBtn(wxCommandEvent& ev); void OnIntersectionBtn(wxCommandEvent& ev); void OnUnionBtn(wxCommandEvent& ev); + void OnSymmetricBtn(wxCommandEvent& ev); /** Implementation of WeightsManStateObserver interface */ virtual void update(WeightsManState* o); @@ -112,6 +114,8 @@ class WeightsManFrame : public TemplateFrame, public WeightsManStateObserver wxListCtrl* w_list; // ID_W_LIST wxButton* intersection_btn; wxButton* union_btn; + wxButton* symmetric_btn; + wxCheckBox* mutual_chk; static const long TITLE_COL = 0; wxWebView* details_win; diff --git a/DialogTools/nbrMatchDlg.cpp b/DialogTools/nbrMatchDlg.cpp new file mode 100644 index 000000000..a319a40f8 --- /dev/null +++ b/DialogTools/nbrMatchDlg.cpp @@ -0,0 +1,1711 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightsManager.h" +#include "../ShapeOperations/WeightUtils.h" +#include "../ShapeOperations/GwtWeight.h" +#include "../ShapeOperations/GalWeight.h" +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../FramesManager.h" +#include "../DataViewer/TableInterface.h" +#include "../Project.h" +#include "../GenUtils.h" +#include "../SpatialIndAlgs.h" +#include "../Algorithms/DataUtils.h" +#include "../Algorithms/cluster.h" +#include "../Algorithms/mds.h" +#include "../Algorithms/vptree.h" +#include "../Algorithms/splittree.h" +#include "../Algorithms/tsne.h" +#include "../Algorithms/threadpool.h" +#include "../Explore/ScatterNewPlotView.h" +#include "../Explore/3DPlotView.h" +#include "../kNN/ANN/ANN.h" +#include "PermutationCounterDlg.h" +#include "RandomizationDlg.h" +#include "../GeoDa.h" +#include "../Explore/MapNewView.h" +#include "../GenColor.h" +#include "SaveToTableDlg.h" +#include "nbrMatchDlg.h" + +BEGIN_EVENT_TABLE( NbrMatchDlg, wxDialog ) +EVT_CLOSE( NbrMatchDlg::OnClose ) +END_EVENT_TABLE() + +NbrMatchDlg::NbrMatchDlg(wxFrame *parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("Local Neighbor Match Test Settings")) +{ + wxLogMessage("Open NbrMatchDlg Dialog."); + + CreateControls(); +} + +NbrMatchDlg::~NbrMatchDlg() +{ +} + +void NbrMatchDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, + wxSize(440,620), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate( 5, 5 ); + + wxPanel *panel = new wxPanel(scrl); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + AddSimpleInputCtrls(panel, vbox); + + // parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(15,2,10,0); + + // knn + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Number of Neighbors:")); + txt_knn = new wxTextCtrl(panel, wxID_ANY, "6",wxDefaultPosition, wxSize(70,-1)); + txt_knn->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_knn, 1, wxEXPAND); + + // distance function + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Variable Distance Function:")); + wxString choices13[] = {"Euclidean", "Manhattan"}; + m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); + m_distance->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_distance, 1, wxEXPAND); + + // geo distance function + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Geographic Distance Metric:")); + wxString choices14[] = {"Euclidean Distance", "Arc Distance (mile)", "Arc Distance (km)"}; + m_geo_dist_metric = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 3, choices14); + m_geo_dist_metric->SetSelection(0); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_geo_dist_metric, 1, wxEXPAND); + + // Transformation + AddTransformation(panel, gbox); + + // seed + wxStaticText* st27 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); + + hbox17->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + hbox17->Add(seedButton,0,wxALIGN_CENTER_VERTICAL); + seedButton->Disable(); + gbox->Add(st27, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox17, 1, wxEXPAND); + + if (GdaConst::use_gda_user_seed) { + chk_seed->SetValue(true); + seedButton->Enable(); + } + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, + wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + okButton->Bind(wxEVT_BUTTON, &NbrMatchDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &NbrMatchDlg::OnCloseClick, this); +} + + +void NbrMatchDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close NbrMatchDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void NbrMatchDlg::OnCloseClick(wxCommandEvent& event ) +{ + wxLogMessage("Close NbrMatchDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void NbrMatchDlg::OnSeedCheck(wxCommandEvent& event) +{ + bool use_user_seed = chk_seed->GetValue(); + + if (use_user_seed) { + seedButton->Enable(); + if (GdaConst::use_gda_user_seed == false && GdaConst::gda_user_seed == 0) { + OnChangeSeed(event); + return; + } + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + + seedButton->Disable(); + } +} + +void NbrMatchDlg::OnChangeSeed(wxCommandEvent& event) +{ + // prompt user to enter user seed (used globally) + wxString m; + m << _("Enter a seed value for random number generator:"); + + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << GdaConst::gda_user_seed; + + wxTextEntryDialog dlg(NULL, m, _("Enter a seed value"), cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + uint64_t new_seed_val = val; + GdaConst::gda_user_seed = new_seed_val; + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + wxString str_gda_user_seed; + str_gda_user_seed << GdaConst::gda_user_seed; + ogr_adapt.AddEntry("gda_user_seed", str_gda_user_seed.ToStdString()); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + wxString m = _("\"%s\" is not a valid seed. Seed unchanged."); + m = wxString::Format(m, dlg_val); + wxMessageDialog dlg(NULL, m, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + } +} + +void NbrMatchDlg::InitVariableCombobox(wxListBox* var_box) +{ + wxLogMessage("InitVariableCombobox NbrMatchDlg."); + + wxArrayString items; + + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (size_t i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + if (!items.IsEmpty()) + var_box->InsertItems(items,0); +} + +wxString NbrMatchDlg::_printConfiguration() +{ + return ""; +} + +void NbrMatchDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click NbrMatchDlg::OnOK"); + + int transform = combo_tranform->GetSelection(); + + if (!GetInputData(transform, 1)) + return; + + // knn + long knn; + wxString val = txt_knn->GetValue(); + if (!val.ToLong(&knn)) { + wxString err_msg = _("Please input a valid numeric value for number of neighbors."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + if (knn >= project->GetNumRecords() || knn < 1) { + wxString err_msg = _("The number of neighbors should be less than number of observations."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + char dist = 'e'; // euclidean + int dist_sel = m_distance->GetSelection(); + char dist_choices[] = {'e','b'}; + dist = dist_choices[dist_sel]; + + // create knn spatial weights GAL + bool is_arc = m_geo_dist_metric->GetSelection() > 0; + bool is_mile = m_geo_dist_metric->GetSelection() == 1; + bool is_inverse = false; + double power = 1.0; + std::vector xcoo, ycoo; + project->GetCentroids(xcoo, ycoo); + GwtWeight* sw = SpatialIndAlgs::knn_build(xcoo, ycoo, (int)knn, is_arc, + is_mile, is_inverse, power); + + // create knn variable weights + double eps = 0; // error bound + if (dist == 'e') ANN_DIST_TYPE = 2; // euclidean + else if (dist == 'b') ANN_DIST_TYPE = 1; // manhattan + + // since KNN search will always return the query point itself, so add 1 + // to make sure returning min_samples number of results + //min_samples = min_samples + 1; + GalElement* gal = new GalElement[rows]; + + ANNkd_tree* kdTree = new ANNkd_tree(input_data, rows, columns); + ANNidxArray nnIdx = new ANNidx[knn+1]; + ANNdistArray dists = new ANNdist[knn+1]; + for (size_t i=0; iannkSearch(input_data[i], (int)knn+1, nnIdx, dists, eps); + //core_d[i] = sqrt(dists[min_samples-1]); + gal[i].SetSizeNbrs(knn); + for (size_t j=0; jnum_obs = rows; + gw->wflnm = ""; + gw->id_field = ""; + gw->gal = gal; + gw->GetNbrStats(); + + // intersection weights + std::vector two_weights; + two_weights.push_back(sw); + two_weights.push_back(gw); + GalWeight* intersect_w = WeightUtils::WeightsIntersection(two_weights); + + + // compute cnbrs (number of common neighbors), p value + gal = intersect_w->gal; + std::vector val_cnbrs(rows); + for (size_t i=0; i pval_dict(knn,0); + for (size_t v=1; v val_p(rows); + for (size_t i=0; iGetNumObs(); + wmi.SetMinNumNbrs(intersect_w->GetMinNumNbrs()); + wmi.SetMaxNumNbrs(intersect_w->GetMaxNumNbrs()); + wmi.SetMeanNumNbrs(intersect_w->GetMeanNumNbrs()); + wmi.SetMedianNumNbrs(intersect_w->GetMedianNumNbrs()); + wmi.SetSparsity(intersect_w->GetSparsity()); + wmi.SetDensity(intersect_w->GetDensity()); + wmi.weights_type = WeightsMetaInfo::WT_internal; + + WeightsManInterface* w_man_int = project->GetWManInt(); + boost::uuids::uuid id = w_man_int->RequestWeights(wmi); + if (id.is_nil()) { + wxString msg = _("There was a problem requesting the weights file."); + wxMessageDialog dlg(this, msg, _("Error"), wxOK|wxICON_ERROR); + dlg.ShowModal(); + return; + } + + if (!((WeightsNewManager*) w_man_int)->AssociateGal(id, intersect_w)) { + wxString msg = _("There was a problem associating the weights file."); + wxMessageDialog dlg(this, msg, _("Error"), wxOK|wxICON_ERROR); + dlg.ShowModal(); + delete intersect_w; + return; + } + + //w_man_int->MakeDefault(id); + + // save the results: cnbrs (number of common neighbors), p value + size_t new_col = 2; + std::vector new_data(new_col); + std::vector > vals(new_col); + std::vector undefs(rows, false); + + wxString field_name = "card"; + + new_data[0].l_val = &val_cnbrs; + new_data[0].label = "Cardinality"; + new_data[0].field_default = field_name; + new_data[0].type = GdaConst::long64_type; + new_data[0].undefined = &undefs; + + new_data[1].d_val = &val_p; + new_data[1].label = "Probability"; + new_data[1].field_default = "cpval"; + new_data[1].type = GdaConst::double_type; + new_data[1].undefined = &undefs; + + SaveToTableDlg dlg(project, this, new_data, + _("Save Results: Local Neighbor Match Test"), + wxDefaultPosition, wxSize(400,400)); + if (dlg.ShowModal() != wxID_OK) + return; + + // show map + wxString var_name; + wxArrayInt selections; + combo_var->GetSelections(selections); + for (size_t i=0; iGetString(selections[i]); + var_name << sel_str; + if (i > groups(k); + for (int i=0; i >& groups, + const std::vector& pval, + boost::uuids::uuid weights_id, + const wxPoint& pos, const wxSize& size) +:MapCanvas(parent, t_frame, project, vector(0), vector(0), CatClassification::no_theme, no_smoothing, 1, weights_id, pos, size), +groups(groups), pval(pval) +{ + wxLogMessage("Entering LocalMatchMapCanvas::LocalMatchMapCanvas"); + + display_weights_graph = true; + graph_color = *wxRED; + CreateAndUpdateCategories(); + UpdateStatusBar(); + + wxLogMessage("Exiting LocalMatchMapCanvas::LocalMatchMapCanvas"); +} + +LocalMatchMapCanvas::~LocalMatchMapCanvas() +{ + wxLogMessage("In LocalMatchMapCanvas::~LocalMatchMapCanvas"); +} + +void LocalMatchMapCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + wxLogMessage("Entering LocalMatchMapCanvas::DisplayRightClickMenu"); + // Workaround for right-click not changing window focus in OSX / wxW 3.0 + wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); + ((LocalMatchMapFrame*) template_frame)->OnActivate(ae); + + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_LOCALMATCH_VIEW_MENU_OPTIONS"); + AddTimeVariantOptionsToMenu(optMenu); + SetCheckMarks(optMenu); + + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); + wxLogMessage("Exiting LocalMatchMapCanvas::DisplayRightClickMenu"); +} + +wxString LocalMatchMapCanvas::GetCanvasTitle() +{ + return "Cardinality"; +} + +bool LocalMatchMapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, SmoothingType new_map_smoothing) +{ + wxLogMessage("In LocalMatchMapCanvas::ChangeMapType"); + return false; +} + +void LocalMatchMapCanvas::SetCheckMarks(wxMenu* menu) +{ + MapCanvas::SetCheckMarks(menu); +} + +void LocalMatchMapCanvas::TimeChange() +{ + wxLogMessage("Entering LocalMatchMapCanvas::TimeChange"); + wxLogMessage("Exiting LocalMatchMapCanvas::TimeChange"); +} + +void LocalMatchMapCanvas::CreateAndUpdateCategories() +{ + int num_categories = (int)groups.size(); + if (num_categories == 0) return; + + int t = 0; + //cat_data.CreateEmptyCategories(1, num_obs); + cat_data.CreateCategoriesAtCanvasTm(num_categories, t); + cat_data.ClearAllCategoryIds(); + // update color scheme + wxColour BuGn[][9] = {{wxColour(229,245,249)}, {wxColour(229,245,249),wxColour(153,216,201)},{wxColour(229,245,249),wxColour(153,216,201),wxColour(44,162,95)}, /*4*/{wxColour(237,248,251),wxColour(178,226,226),wxColour(102,194,164),wxColour(35,139,69)},/*5*/{wxColour(237,248,251),wxColour(178,226,226),wxColour(102,194,164),wxColour(44,162,95),wxColour(0,109,44)},/*6*/{wxColour(237,248,251),wxColour(204,236,230),wxColour(153,216,201),wxColour(102,194,164),wxColour(44,162,95),wxColour(0,109,44)},/*7*/{wxColour(237,248,251),wxColour(204,236,230),wxColour(153,216,201),wxColour(102,194,164),wxColour(65,174,118),wxColour(35,139,69), wxColour(0,88,36)},/*8*/{wxColour(247,252,253),wxColour(229,245,249),wxColour(204,236,230),wxColour(153,216,201),wxColour(102,194,164),wxColour(65,174,118),wxColour(35,139,69),wxColour(0,88,36)},/*9*/{wxColour(247,252,253),wxColour(229,245,249),wxColour(204,236,230),wxColour(153,216,201),wxColour(102,194,164),wxColour(65,174,118),wxColour(35,139,69),wxColour(0,109,44),wxColour(0,68,27)}}; + + if (num_categories <= 9) { + for (int i=0; i color = ColorSpace::ColorSpectrumHSV(a, b, num_categories); + for (int i=0; iGetStatusBar(); + } + if (!sb) + return; + wxString s; + s << _("#obs=") << project->GetNumRecords() <<" "; + + if ( highlight_state->GetTotalHighlighted() > 0) { + // for highlight from other windows + s << _("#selected=") << highlight_state->GetTotalHighlighted()<< " "; + } + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << _("#hover obs ") << hover_obs[0]+1; + s << " p=" << wxString::Format("%f", pval[hover_obs[0]]); + } + if (total_hover_obs >= 2) { + s << ", "; + s << _("obs ") << hover_obs[1]+1; + } + if (total_hover_obs >= 3) { + s << ", "; + s << _("obs ") << hover_obs[2]+1; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + sb->SetStatusText(s); +} +/////////////////////////////////////////////////////////////////////////////// +// +// NbrMatchSaveWeightsDialog +// +/////////////////////////////////////////////////////////////////////////////// +NbrMatchSaveWeightsDialog::NbrMatchSaveWeightsDialog(TableInterface* table_int, const wxString & title) + : wxDialog(NULL, -1, title, wxDefaultPosition, wxSize(250, 230)), +table_int(table_int) +{ + wxPanel *panel = new wxPanel(this, -1); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Select ID Variable")); + m_id_field = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 0, NULL); + table_int->FillColIdMap(col_id_map); + for (size_t i=0, iend=col_id_map.size(); iGetColName(col); + if (table_int->GetColType(col) == GdaConst::long64_type || + table_int->GetColType(col) == GdaConst::string_type) { + if (!table_int->IsColTimeVariant(col)) { + m_id_field->Append(table_int->GetColName(col)); + } + } + } + m_id_field->SetSelection(-1); + m_id_field->Connect(wxEVT_CHOICE, + wxCommandEventHandler(NbrMatchSaveWeightsDialog::OnIdVariableSelected), + NULL, this); + + wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st14, 1, wxRIGHT, 5); + hbox1->Add(m_id_field, 1, wxLEFT, 5); + + wxButton *okButton = new wxButton(this, wxID_OK, _("Ok"), + wxDefaultPosition, wxSize(70, 30)); + wxButton *closeButton = new wxButton(this, wxID_CANCEL, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + hbox->Add(okButton, 1); + hbox->Add(closeButton, 1, wxLEFT, 5); + + vbox->Add(hbox1, 1, wxALL, 10); + vbox->Add(hbox, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, 10); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(panelSizer, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + //SetSizer(vbox); + Centre(); +} + +void NbrMatchSaveWeightsDialog::OnIdVariableSelected( wxCommandEvent& event ) +{ + wxLogMessage("Click CreatingWeightDlg::OnIdVariableSelected"); + // we must have key id variable + bool isValid = m_id_field->GetSelection() != wxNOT_FOUND; + if (!isValid) + return; + + wxString id = m_id_field->GetString(m_id_field->GetSelection()); + if (!CheckID(id)) { + m_id_field->SetSelection(-1); + return; + } +} + +wxString NbrMatchSaveWeightsDialog::GetSelectID() +{ + int sel_idx = m_id_field->GetSelection(); + if (sel_idx < 0) { + wxMessageBox(_("Please select a ID variable.")); + return wxEmptyString; + } + return m_id_field->GetString(sel_idx); +} + +bool NbrMatchSaveWeightsDialog::CheckID(const wxString& id) +{ + std::vector str_id_vec(table_int->GetNumberRows()); + int col = table_int->FindColId(id); + if (table_int->GetColType(col) == GdaConst::long64_type){ + table_int->GetColData(col, 0, str_id_vec); + + } else if (table_int->GetColType(col) == GdaConst::string_type) { + // to handle string field with only numbers + // Note: can't handle real string (a-zA-Z) here since it's hard + // to control in weights file (.gal/.gwt/..) + table_int->GetColData(col, 0, str_id_vec); + + wxRegEx regex; + regex.Compile("^[0-9a-zA-Z_]+$"); + + for (size_t i=0, iend=str_id_vec.size(); i dup_ids; + std::set id_set; + std::map > dup_dict; // value:[] + + for (size_t i=0, iend=str_id_vec.size(); i ids; + dup_dict[str_id] = ids; + } + dup_dict[str_id].push_back((int)i); + } + if (id_set.size() != table_int->GetNumberRows()) { + wxString msg = id + _(" has duplicate values. Please choose a different ID Variable.\n\nDetails:"); + wxString details = "value, row\n"; + + std::map >::iterator it; + for (it=dup_dict.begin(); it!=dup_dict.end(); it++) { + wxString val = it->first; + std::vector& ids = it->second; + if (ids.size() > 1) { + for (int i=0; iShow(true); + + return false; + } + return true; +} +/////////////////////////////////////////////////////////////////////////////// +// +// LocalMatchMapFrame +// +/////////////////////////////////////////////////////////////////////////////// +IMPLEMENT_CLASS(LocalMatchMapFrame, MapFrame) + BEGIN_EVENT_TABLE(LocalMatchMapFrame, MapFrame) + EVT_ACTIVATE(LocalMatchMapFrame::OnActivate) +END_EVENT_TABLE() + +LocalMatchMapFrame::LocalMatchMapFrame(wxFrame *parent, Project* project, + const std::vector >& groups, + const std::vector& pval, + boost::uuids::uuid weights_id, const wxString& title, const wxPoint& pos, const wxSize& size) +:MapFrame(parent, project, pos, size), weights_id(weights_id) +{ + wxLogMessage("Entering LocalMatchMapFrame::LocalMatchMapFrame"); + + SetTitle(title); + + int width, height; + GetClientSize(&width, &height); + + wxSplitterWindow* splitter_win = new wxSplitterWindow(this,wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win->SetMinimumPaneSize(10); + + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new LocalMatchMapCanvas(rpanel, this, project, groups, pval, weights_id); + template_canvas->SetScrollRate(1,1); + wxBoxSizer* rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new MapNewLegend(lpanel, template_canvas, + wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); + + wxPanel* toolbar_panel = new wxPanel(this,wxID_ANY, wxDefaultPosition); + wxBoxSizer* toolbar_sizer= new wxBoxSizer(wxVERTICAL); + toolbar = wxXmlResource::Get()->LoadToolBar(toolbar_panel, "ToolBar_MAP"); + SetupToolbar(); + toolbar_sizer->Add(toolbar, 0, wxEXPAND|wxALL); + toolbar_panel->SetSizerAndFit(toolbar_sizer); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + //splitter_win->SetSize(wxSize(width,height)); + + SetAutoLayout(true); + DisplayStatusBar(true); + + Show(true); + wxLogMessage("Exiting LocalMatchMapFrame::LocalMatchMapFrame"); +} + +LocalMatchMapFrame::~LocalMatchMapFrame() +{ + wxLogMessage("In LocalMatchMapFrame::~LocalMatchMapFrame"); +} + +void LocalMatchMapFrame::OnActivate(wxActivateEvent& event) +{ + wxLogMessage("In LocalMatchMapFrame::OnActivate"); + if (event.GetActive()) { + RegisterAsActive("LocalMatchMapFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) template_canvas->SetFocus(); +} + +void LocalMatchMapFrame::MapMenus() +{ + wxLogMessage("In LocalMatchMapFrame::MapMenus"); + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_LOCALMATCH_VIEW_MENU_OPTIONS"); + //((MapCanvas*) template_canvas)->AddTimeVariantOptionsToMenu(optMenu); + ((LocalMatchMapCanvas*) template_canvas)->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); + UpdateOptionMenuItems(); + + wxMenuItem* save_menu = optMenu->FindItem(XRCID("ID_SAVE_LOCALMATCH_WEIGHTS")); + Connect(save_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(LocalMatchMapFrame::OnSave)); +} + +void LocalMatchMapFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu(_("Options")); + if (menu == wxNOT_FOUND) { + wxLogMessage("LocalMatchMapFrame::UpdateOptionMenuItems: " + "Options menu not found"); + } else { + ((LocalMatchMapCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +/** Implementation of WeightsManStateObserver interface */ +void LocalMatchMapFrame::update(WeightsManState* o) +{ + // do nothing since it has its own weights structure +} + +void LocalMatchMapFrame::UpdateContextMenuItems(wxMenu* menu) +{ + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + +void LocalMatchMapFrame::OnSave(wxCommandEvent& event) +{ + NbrMatchSaveWeightsDialog dlg(project->GetTableInt(), _("Save Local Match Weights")); + if(dlg.ShowModal() == wxID_OK) { + wxString id_var = dlg.GetSelectID(); + + TableInterface* table_int = project->GetTableInt(); + int m_num_obs = table_int->GetNumberRows(); + + if (table_int && !id_var.IsEmpty()) { + int col = project->GetTableInt()->FindColId(id_var); + if (col < 0) return; + + bool flag = false; + wxString wildcard = _("GAL files (*.gal)|*.gal"); + wxString defaultFile(project->GetProjectTitle()); + defaultFile += "_match.gal"; + + wxString working_dir = project->GetWorkingDir().GetPath(); + wxFileDialog dlg(this, _("Choose an output weights file name."), + working_dir, defaultFile, wildcard, + wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + + wxString ofn; + if (dlg.ShowModal() != wxID_OK) return; + ofn = dlg.GetPath(); + + wxString layer_name = project->GetProjectTitle(); + + WeightsManInterface* w_man_int = project->GetWManInt(); + GalWeight* w = w_man_int->GetGal(weights_id); + + if (table_int->GetColType(col) == GdaConst::long64_type){ + std::vector id_vec(m_num_obs); + table_int->GetColData(col, 0, id_vec); + flag = Gda::SaveGal(w->gal, layer_name, ofn, id_var, id_vec); + + } else if (table_int->GetColType(col) == GdaConst::string_type) { + std::vector id_vec(m_num_obs); + table_int->GetColData(col, 0, id_vec); + flag = Gda::SaveGal(w->gal, layer_name, ofn, id_var, id_vec); + } + if (!flag) { + wxString msg = _("Failed to create the weights file."); + wxMessageDialog dlg(NULL, msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + } else { + wxString msg = _("Weights file created successfully."); + wxMessageDialog dlg(NULL, msg, _("Success"), wxOK | wxICON_INFORMATION); + dlg.ShowModal(); + } + } + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// LocalMatchCoordinator +// +/////////////////////////////////////////////////////////////////////////////// +LocalMatchCoordinator::LocalMatchCoordinator(GwtWeight* spatial_w, GalWeight* variable_w, const std::vector& cadinality, int permutations, uint64_t last_seed_used, bool reuse_last_seed) +: spatial_w(spatial_w), variable_w(variable_w), cadinality(cadinality), +last_seed_used(last_seed_used), reuse_last_seed(reuse_last_seed), permutations(permutations), num_obs(spatial_w->num_obs) +{ + SetSignificanceFilter(1); + user_sig_cutoff = 0; + + sigVal.resize(num_obs); + sigCat.resize(num_obs); + run(); +} + +LocalMatchCoordinator::~LocalMatchCoordinator() +{ + +} + +void LocalMatchCoordinator::job(size_t nbr_sz, size_t idx, uint64_t seed_start) +{ + GeoDaSet workPermutation(num_obs); + int max_rand = num_obs-1; + + int rand=0, newRandom, countLarger=0; + double rng_val; + + for (size_t i=0; igwt[newRandom].Size()>0) // neighborless is out of shuffle + { + workPermutation.Push(newRandom); + rand++; + } + } + // compute common local match + int perm_nbr, match = 0; + for (int cp=0; cpCheckNeighbor(idx, perm_nbr)) { + match += 1; + } + } + if (match >= cadinality[idx]) { + countLarger += 1; + } + } + + // pick the smallest + if (permutations-countLarger <= countLarger) { + countLarger = permutations-countLarger; + } + // compute pseudo-p-value + sigVal[idx] = (countLarger + 1.0)/(permutations+1); + + if (sigVal[idx] <= 0.0001) sigCat[idx] = 4; + else if (sigVal[idx] <= 0.001) sigCat[idx] = 3; + else if (sigVal[idx] <= 0.01) sigCat[idx] = 2; + else if (sigVal[idx] <= 0.05) sigCat[idx]= 1; + else sigCat[idx]= 0; +} + +void LocalMatchCoordinator::run() +{ + long nbr_sz; + for(size_t i=0; i< num_obs; ++i) { + // for each observation, get random neighbors + nbr_sz = spatial_w->gwt[i].Size(); + uint64_t seed_start = reuse_last_seed ? last_seed_used + i : i; + job(nbr_sz, i, seed_start); + } +} + +void LocalMatchCoordinator::SetSignificanceFilter(int filter_id) +{ + wxLogMessage("Entering LocalMatchCoordinator::SetSignificanceFilter()"); + if (filter_id == -1) { + // user input cutoff + significance_filter = filter_id; + return; + } + // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + if (filter_id < 1 || filter_id > 4) return; + significance_filter = filter_id; + if (filter_id == 1) significance_cutoff = 0.05; + if (filter_id == 2) significance_cutoff = 0.01; + if (filter_id == 3) significance_cutoff = 0.001; + if (filter_id == 4) significance_cutoff = 0.0001; + wxLogMessage("Exiting AbstractCoordinator::SetSignificanceFilter()"); +} + +std::vector LocalMatchCoordinator::GetDefaultCategories() +{ + std::vector cats; + cats.push_back("p = 0.05"); + cats.push_back("p = 0.01"); + cats.push_back("p = 0.001"); + cats.push_back("p = 0.0001"); + return cats; +} + +std::vector LocalMatchCoordinator::GetDefaultCutoffs() +{ + std::vector cutoffs; + cutoffs.push_back(0.05); + cutoffs.push_back(0.01); + cutoffs.push_back(0.001); + cutoffs.push_back(0.0001); + return cutoffs; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// LocalMatchSignificanceCanvas +// +/////////////////////////////////////////////////////////////////////////////// + +IMPLEMENT_CLASS(LocalMatchSignificanceCanvas, MapCanvas) +BEGIN_EVENT_TABLE(LocalMatchSignificanceCanvas, MapCanvas) + EVT_PAINT(TemplateCanvas::OnPaint) + EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) + EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + + +LocalMatchSignificanceCanvas:: +LocalMatchSignificanceCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, LocalMatchCoordinator* gs_coordinator, const wxPoint& pos, const wxSize& size) +: MapCanvas(parent, t_frame, project, std::vector(0), std::vector(0), CatClassification::no_theme, no_smoothing, 1, boost::uuids::nil_uuid(), pos, size), +gs_coord(gs_coordinator) +{ + wxLogMessage("Entering LocalMatchSignificanceCanvas::LocalMatchSignificanceCanvas"); + + str_sig = _("Not Significant"); + str_low = _("No Colocation"); + str_med = _("Has Colocation"); + str_high = _("Colocation Cluster"); + str_undefined = _("Undefined"); + str_neighborless = _("Neighborless"); + str_p005 = "p = 0.05"; + str_p001 = "p = 0.01"; + str_p0001 = "p = 0.001"; + str_p00001 ="p = 0.0001"; + + SetPredefinedColor(str_sig, wxColour(240, 240, 240)); + SetPredefinedColor(str_high, wxColour(255, 0, 0)); + SetPredefinedColor(str_med, wxColour(0, 255, 0)); + SetPredefinedColor(str_low, wxColour(0, 0, 255)); + SetPredefinedColor(str_undefined, wxColour(70, 70, 70)); + SetPredefinedColor(str_neighborless, wxColour(140, 140, 140)); + SetPredefinedColor(str_p005, wxColour(75, 255, 80)); + SetPredefinedColor(str_p001, wxColour(6, 196, 11)); + SetPredefinedColor(str_p0001, wxColour(3, 116, 6)); + SetPredefinedColor(str_p00001, wxColour(1, 70, 3)); + + cat_classif_def.cat_classif_type = CatClassification::no_theme; + + // must set var_info times from JCCoordinator initially + //var_info = gs_coord->var_info; + //template_frame->ClearAllGroupDependencies(); + //for (int t=0, sz=var_info.size(); tAddGroupDependancy(var_info[t].name); + //} + + CreateAndUpdateCategories(); + UpdateStatusBar(); + + wxLogMessage("Exiting LocalMatchSignificanceCanvas::LocalMatchSignificanceCanvas"); +} + +LocalMatchSignificanceCanvas::~LocalMatchSignificanceCanvas() +{ + wxLogMessage("In LocalMatchSignificanceCanvas::~LocalMatchSignificanceCanvas"); +} + +void LocalMatchSignificanceCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + wxLogMessage("Entering LocalMatchSignificanceCanvas::DisplayRightClickMenu"); + // Workaround for right-click not changing window focus in OSX / wxW 3.0 + wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); + ((LocalMatchSignificanceFrame*) template_frame)->OnActivate(ae); + + wxMenu* optMenu = wxXmlResource::Get()-> + LoadMenu("ID_LOCALJOINCOUNT_NEW_VIEW_MENU_OPTIONS"); + AddTimeVariantOptionsToMenu(optMenu); + SetCheckMarks(optMenu); + + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); + wxLogMessage("Exiting LocalMatchSignificanceCanvas::DisplayRightClickMenu"); +} + +wxString LocalMatchSignificanceCanvas::GetCanvasTitle() +{ + wxString new_title; + + new_title << _("Local Neighbor Match Test"); + new_title << " Significance Map "; + new_title << wxString::Format(", pseudo p (%d perm)", gs_coord->permutations); + + return new_title; +} + +wxString LocalMatchSignificanceCanvas::GetVariableNames() +{ + wxString new_title; + + return new_title; +} + +/** This method definition is empty. It is here to override any call + to the parent-class method since smoothing and theme changes are not + supported by MLJC maps */ +bool LocalMatchSignificanceCanvas::ChangeMapType(CatClassification::CatClassifType new_theme, SmoothingType new_smoothing) +{ + wxLogMessage("In LocalMatchSignificanceCanvas::ChangeMapType"); + return false; +} + +void LocalMatchSignificanceCanvas::SetCheckMarks(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + MapCanvas::SetCheckMarks(menu); + + int sig_filter = ((LocalMatchSignificanceFrame*) template_frame)->GetLocalMatchCoordinator()->GetSignificanceFilter(); + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_05"), + sig_filter == 1); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_01"), + sig_filter == 2); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_001"), + sig_filter == 3); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_0001"), + sig_filter == 4); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SIGNIFICANCE_FILTER_SETUP"), + sig_filter == -1); + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_USE_SPECIFIED_SEED"), + gs_coord->IsReuseLastSeed()); +} + +void LocalMatchSignificanceCanvas::TimeChange() +{ + wxLogMessage("Entering LocalMatchSignificanceCanvas::TimeChange"); + + wxLogMessage("Exiting LocalMatchSignificanceCanvas::TimeChange"); +} + +/** Update Categories based on info in JCCoordinator */ +void LocalMatchSignificanceCanvas::CreateAndUpdateCategories() +{ + //SyncVarInfoFromCoordinator(); + template_frame->ClearAllGroupDependencies(); + is_any_time_variant = false; + is_any_sync_with_global_time = false; + ref_var_index = -1; + num_time_vals = 1; + //map_valid = true; + //map_error_message = ""; + + int t = 0; + int num_cats = 0; + double stop_sig = 0; + + + int set_perm = gs_coord->permutations; + stop_sig = 1.0 / (1.0 + set_perm); + double sig_cutoff = gs_coord->significance_cutoff; + + if (gs_coord->GetSignificanceFilter() < 0) { + // user specified cutoff + num_cats += 2; + } else { + num_cats += 6 - gs_coord->GetSignificanceFilter(); + + if ( sig_cutoff >= 0.0001 && stop_sig > 0.0001) { + num_cats -= 1; + } + if ( sig_cutoff >= 0.001 && stop_sig > 0.001 ) { + num_cats -= 1; + } + if ( sig_cutoff >= 0.01 && stop_sig > 0.01 ) { + num_cats -= 1; + } + } + + cat_data.CreateCategoriesAtCanvasTm(num_cats, t); + cat_data.ClearAllCategoryIds(); + + cat_data.SetCategoryLabel(t, 0, str_sig); + cat_data.SetCategoryColor(t, 0, lbl_color_dict[str_sig]); + + if (gs_coord->GetSignificanceFilter() < 0) { + // user specified cutoff + wxString lbl = wxString::Format("p = %g", gs_coord->significance_cutoff); + cat_data.SetCategoryLabel(t, 1, lbl); + cat_data.SetCategoryColor(t, 1, wxColour(3, 116, 6)); + + } else { + int s_f = gs_coord->GetSignificanceFilter(); + int set_perm = gs_coord->permutations; + stop_sig = 1.0 / (1.0 + set_perm); + + wxString def_cats[4] = {str_p005, str_p001, str_p0001, str_p00001}; + double def_cutoffs[4] = {0.05, 0.01, 0.001, 0.0001}; + + int cat_idx = 1; + for (int j=s_f-1; j < 4; j++) { + if (def_cutoffs[j] >= stop_sig) { + cat_data.SetCategoryLabel(t, cat_idx, def_cats[j]); + cat_data.SetCategoryColor(t, cat_idx++, lbl_color_dict[def_cats[j]]); + } + } + } + + std::vector p_val = gs_coord->sigVal; + std::vector cluster = gs_coord->sigCat; + if (gs_coord->GetSignificanceFilter() < 0) { + // user specified cutoff + int s_f = 1; + double sig_cutoff = gs_coord->significance_cutoff; + for (size_t i=0, iend=gs_coord->num_obs; iGetSignificanceFilter(); + for (size_t i=0, iend=gs_coord->num_obs; iGetStatusBar(); + } + if (!sb) + return; + wxString s; + s << _("#obs=") << project->GetNumRecords() <<" "; + + if ( highlight_state->GetTotalHighlighted() > 0) { + // for highlight from other windows + s << _("#selected=") << highlight_state->GetTotalHighlighted()<< " "; + } + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << _("#hover obs ") << hover_obs[0]+1; + } + if (total_hover_obs >= 2) { + s << ", "; + s << _("obs ") << hover_obs[1]+1; + } + if (total_hover_obs >= 3) { + s << ", "; + s << _("obs ") << hover_obs[2]+1; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + if (is_clust && gs_coord) { + double p_val = gs_coord->significance_cutoff; + wxString inf_str = wxString::Format(" p <= %g", p_val); + s << inf_str; + } + sb->SetStatusText(s); +} + +void LocalMatchSignificanceCanvas::TimeSyncVariableToggle(int var_index) +{ + wxLogMessage("In LocalMatchSignificanceCanvas::TimeSyncVariableToggle"); +} + +/** Copy everything in var_info except for current time field for each + variable. Also copy over is_any_time_variant, is_any_sync_with_global_time, + ref_var_index, num_time_vales, map_valid and map_error_message */ +void LocalMatchSignificanceCanvas::SyncVarInfoFromCoordinator() +{ +} + +IMPLEMENT_CLASS(LocalMatchSignificanceFrame, MapFrame) + BEGIN_EVENT_TABLE(LocalMatchSignificanceFrame, MapFrame) + EVT_ACTIVATE(LocalMatchSignificanceFrame::OnActivate) +END_EVENT_TABLE() + +LocalMatchSignificanceFrame::LocalMatchSignificanceFrame(wxFrame *parent, Project* project, LocalMatchCoordinator* gs_coordinator, const wxPoint& pos, const wxSize& size, const long style) +: MapFrame(parent, project, pos, size, style), gs_coord(gs_coordinator) +{ + wxLogMessage("Entering LocalMatchSignificanceFrame::LocalMatchSignificanceFrame"); + + no_update_weights = true; + int width, height; + GetClientSize(&width, &height); + + DisplayStatusBar(true); + + wxSplitterWindow* splitter_win = new wxSplitterWindow(this,wxID_ANY, + wxDefaultPosition, wxDefaultSize, + wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + splitter_win->SetMinimumPaneSize(10); + + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new LocalMatchSignificanceCanvas(rpanel, this, project, gs_coordinator); + template_canvas->SetScrollRate(1,1); + wxBoxSizer* rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + + //WeightsManInterface* w_man_int = project->GetWManInt(); + //((MapCanvas*) template_canvas)->SetWeightsId(w_man_int->GetDefault()); + + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new MapNewLegend(lpanel, template_canvas, wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); + + + wxPanel* toolbar_panel = new wxPanel(this,wxID_ANY, wxDefaultPosition); + wxBoxSizer* toolbar_sizer= new wxBoxSizer(wxVERTICAL); + toolbar = wxXmlResource::Get()->LoadToolBar(toolbar_panel, "ToolBar_MAP"); + SetupToolbar(); + toolbar_sizer->Add(toolbar, 0, wxEXPAND|wxALL); + toolbar_panel->SetSizerAndFit(toolbar_sizer); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(toolbar_panel, 0, wxEXPAND|wxALL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + SetAutoLayout(true); + + SetTitle(template_canvas->GetCanvasTitle()); + Show(true); + wxLogMessage("Exiting LocalMatchSignificanceFrame::LocalMatchSignificanceFrame"); +} + +LocalMatchSignificanceFrame::~LocalMatchSignificanceFrame() +{ + wxLogMessage("In LocalMatchSignificanceFrame::~LocalMatchSignificanceFrame"); + if (gs_coord) { + delete gs_coord; + gs_coord = 0; + } +} + +void LocalMatchSignificanceFrame::OnActivate(wxActivateEvent& event) +{ + wxLogMessage("In LocalMatchSignificanceFrame::OnActivate"); + if (event.GetActive()) { + RegisterAsActive("LocalMatchSignificanceFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) template_canvas->SetFocus(); +} + +void LocalMatchSignificanceFrame::MapMenus() +{ + wxLogMessage("In LocalMatchSignificanceFrame::MapMenus"); + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_LOCALJOINCOUNT_NEW_VIEW_MENU_OPTIONS"); + ((MapCanvas*) template_canvas)->AddTimeVariantOptionsToMenu(optMenu); + ((MapCanvas*) template_canvas)->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); + UpdateOptionMenuItems(); +} + +void LocalMatchSignificanceFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu(_("Options")); + if (menu == wxNOT_FOUND) { + wxLogMessage("LocalMatchSignificanceFrame::UpdateOptionMenuItems: Options menu not found"); + } else { + ((LocalMatchSignificanceCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void LocalMatchSignificanceFrame::UpdateContextMenuItems(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + +void LocalMatchSignificanceFrame::RanXPer(int permutation) +{ + if (permutation < 9) permutation = 9; + if (permutation > 99999) permutation = 99999; + gs_coord->permutations = permutation; + gs_coord->run(); +} + +void LocalMatchSignificanceFrame::OnRan99Per(wxCommandEvent& event) +{ + RanXPer(99); +} + +void LocalMatchSignificanceFrame::OnRan199Per(wxCommandEvent& event) +{ + RanXPer(199); +} + +void LocalMatchSignificanceFrame::OnRan499Per(wxCommandEvent& event) +{ + RanXPer(499); +} + +void LocalMatchSignificanceFrame::OnRan999Per(wxCommandEvent& event) +{ + RanXPer(999); +} + +void LocalMatchSignificanceFrame::OnRanOtherPer(wxCommandEvent& event) +{ + PermutationCounterDlg dlg(this); + if (dlg.ShowModal() == wxID_OK) { + long num; + wxString input = dlg.m_number->GetValue(); + input.ToLong(&num); + RanXPer(num); + } +} + +void LocalMatchSignificanceFrame::OnUseSpecifiedSeed(wxCommandEvent& event) +{ + gs_coord->SetReuseLastSeed(!gs_coord->IsReuseLastSeed()); +} + +void LocalMatchSignificanceFrame::OnSpecifySeedDlg(wxCommandEvent& event) +{ + uint64_t last_seed = gs_coord->GetLastUsedSeed(); + wxString m; + m << "The last seed used by the pseudo random\nnumber "; + m << "generator was " << last_seed << ".\n"; + m << "Enter a seed value to use:"; + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << last_seed; + + wxTextEntryDialog dlg(NULL, m, "\nEnter a seed value", cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + + wxLogMessage(dlg_val); + + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + if (!gs_coord->IsReuseLastSeed()) gs_coord->SetLastUsedSeed(true); + uint64_t new_seed_val = val; + gs_coord->SetLastUsedSeed(new_seed_val); + } else { + wxString m; + m << "\"" << dlg_val << "\" is not a valid seed. Seed unchanged."; + wxMessageDialog dlg(NULL, m, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + } +} + +void LocalMatchSignificanceFrame::SetSigFilterX(int filter) +{ + if (filter == gs_coord->GetSignificanceFilter()) + return; + gs_coord->SetSignificanceFilter(filter); + + //gs_coord->notifyObservers(); + LocalMatchSignificanceCanvas* lc = (LocalMatchSignificanceCanvas*) template_canvas; + lc->CreateAndUpdateCategories(); + if (template_legend) template_legend->Recreate(); + SetTitle(lc->GetCanvasTitle()); + lc->Refresh(); + lc->UpdateStatusBar(); + + UpdateOptionMenuItems(); +} + +void LocalMatchSignificanceFrame::OnSigFilter05(wxCommandEvent& event) +{ + SetSigFilterX(1); +} + +void LocalMatchSignificanceFrame::OnSigFilter01(wxCommandEvent& event) +{ + SetSigFilterX(2); +} + +void LocalMatchSignificanceFrame::OnSigFilter001(wxCommandEvent& event) +{ + SetSigFilterX(3); +} + +void LocalMatchSignificanceFrame::OnSigFilter0001(wxCommandEvent& event) +{ + SetSigFilterX(4); +} + +void LocalMatchSignificanceFrame::OnSigFilterSetup(wxCommandEvent& event) +{ + LocalMatchSignificanceCanvas* lc = (LocalMatchSignificanceCanvas*)template_canvas; + int n = gs_coord->num_obs; + double* p_val = new double[n]; + for (size_t i=0; isigVal[i]; + + wxString ttl = _("Inference Settings"); + ttl << " (" << gs_coord->permutations << " perm)"; + + double user_sig = gs_coord->significance_cutoff; + if (gs_coord->GetSignificanceFilter()<0) + user_sig = gs_coord->user_sig_cutoff; + + if (n > 0) { + InferenceSettingsDlg dlg(this, user_sig, p_val, n, ttl); + if (dlg.ShowModal() == wxID_OK) { + gs_coord->SetSignificanceFilter(-1); + gs_coord->significance_cutoff = dlg.GetAlphaLevel(); + gs_coord->user_sig_cutoff = dlg.GetUserInput(); + //gs_coord->notifyObservers(); + gs_coord->bo = dlg.GetBO(); + gs_coord->fdr = dlg.GetFDR(); + UpdateOptionMenuItems(); + } + delete[] p_val; + } +} + +void LocalMatchSignificanceFrame::OnSaveMLJC(wxCommandEvent& event) +{ + wxString title = _("Save Results: Local Match Test, "); + title += wxString::Format("pseudo p (%d perm), ", gs_coord->permutations); + + int num_obs = gs_coord->num_obs; + std::vector p_undefs(num_obs, false); + std::vector c_val = gs_coord->sigCat; + + std::vector pp_val = gs_coord->sigVal; + wxString pp_label = "Pseudo p-value"; + wxString pp_field_default = "PP_VAL"; + + int num_data = 1; + + std::vector data(num_data); + std::vector undefs(gs_coord->num_obs, false); + + int data_i = 0; + + data[data_i].d_val = &pp_val; + data[data_i].label = pp_label; + data[data_i].field_default = pp_field_default; + data[data_i].type = GdaConst::double_type; + data[data_i].undefined = &p_undefs; + data_i++; + + SaveToTableDlg dlg(project, this, data, title, + wxDefaultPosition, wxSize(400,400)); + dlg.ShowModal(); +} + +void LocalMatchSignificanceFrame::CoreSelectHelper(const std::vector& elem) +{ + HighlightState* highlight_state = project->GetHighlightState(); + std::vector& hs = highlight_state->GetHighlight(); + bool selection_changed = false; + + for (int i=0; inum_obs; i++) { + if (!hs[i] && elem[i]) { + hs[i] = true; + selection_changed = true; + } else if (hs[i] && !elem[i]) { + hs[i] = false; + selection_changed = true; + } + } + if (selection_changed ) { + highlight_state->SetEventType(HLStateInt::delta); + highlight_state->notifyObservers(); + } +} + +void LocalMatchSignificanceFrame::OnSelectCores(wxCommandEvent& event) +{ + wxLogMessage("Entering LocalMatchSignificanceFrame::OnSelectCores"); + wxLogMessage("Exiting LocalMatchSignificanceFrame::OnSelectCores"); +} + +void LocalMatchSignificanceFrame::OnSelectNeighborsOfCores(wxCommandEvent& event) +{ + wxLogMessage("Entering LocalMatchSignificanceFrame::OnSelectNeighborsOfCores"); + wxLogMessage("Exiting LocalMatchSignificanceFrame::OnSelectNeighborsOfCores"); +} + +void LocalMatchSignificanceFrame::OnSelectCoresAndNeighbors(wxCommandEvent& event) +{ + wxLogMessage("Entering LocalMatchSignificanceFrame::OnSelectCoresAndNeighbors"); + wxLogMessage("Exiting LocalMatchSignificanceFrame::OnSelectCoresAndNeighbors"); +} + +void LocalMatchSignificanceFrame::OnShowAsConditionalMap(wxCommandEvent& event) +{ + VariableSettingsDlg dlg(project, VariableSettingsDlg::bivariate, + false, false, + _("Conditional Local Match Test Map"), + _("Horizontal Cells"), + _("Vertical Cells")); + + if (dlg.ShowModal() != wxID_OK) { + return; + } +} + + diff --git a/DialogTools/nbrMatchDlg.h b/DialogTools/nbrMatchDlg.h new file mode 100644 index 000000000..72099bb70 --- /dev/null +++ b/DialogTools/nbrMatchDlg.h @@ -0,0 +1,301 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_NEIGHBORMATCH_DLG_H__ +#define __GEODA_CENTER_NEIGHBORMATCH_DLG_H__ + +#include +#include +#include +#include +#include + +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../DataViewer/TableInterface.h" +#include "../VarTools.h" +#include "../Explore/MapNewView.h" +#include "AbstractClusterDlg.h" + +class NbrMatchDlg : public AbstractClusterDlg +{ +public: + NbrMatchDlg(wxFrame *parent, Project* project); + virtual ~NbrMatchDlg(); + + void CreateControls(); + + void OnOK( wxCommandEvent& event ); + + void OnCloseClick( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnSeedCheck(wxCommandEvent& event); + void OnChangeSeed(wxCommandEvent& event); + void InitVariableCombobox(wxListBox* var_box); + + virtual wxString _printConfiguration(); + + std::vector var_info; + std::vector col_ids; + +protected: + + wxChoice* m_distance; + wxChoice* m_geo_dist_metric; + wxTextCtrl* txt_knn; + + wxCheckBox* chk_seed; + wxButton* seedButton; + + DECLARE_EVENT_TABLE() +}; + +class NbrMatchSaveWeightsDialog : public wxDialog +{ + wxChoice* m_id_field; + std::vector col_id_map; + TableInterface* table_int; +public: + NbrMatchSaveWeightsDialog(TableInterface* table_int, const wxString& title); + void OnIdVariableSelected( wxCommandEvent& event ); + bool CheckID(const wxString& id); + wxString GetSelectID(); +}; + +class LocalMatchMapCanvas : public MapCanvas +{ + DECLARE_CLASS(LocalMatchMapCanvas) +public: + LocalMatchMapCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const std::vector >& groups, + const std::vector& pval, + boost::uuids::uuid weights_id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~LocalMatchMapCanvas(); + + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual wxString GetCanvasTitle(); + virtual bool ChangeMapType(CatClassification::CatClassifType new_map_theme, + SmoothingType new_map_smoothing); + virtual void SetCheckMarks(wxMenu* menu); + virtual void TimeChange(); + virtual void CreateAndUpdateCategories(); + virtual void TimeSyncVariableToggle(int var_index); + virtual void UpdateStatusBar(); + + std::vector > groups; + std::vector pval; + + DECLARE_EVENT_TABLE() +}; + +class LocalMatchMapFrame : public MapFrame +{ + DECLARE_CLASS(LocalMatchMapFrame) +public: + LocalMatchMapFrame(wxFrame *parent, Project* project, + const std::vector >& groups, + const std::vector& pval, + boost::uuids::uuid weights_id = boost::uuids::nil_uuid(), + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = GdaConst::map_default_size); + virtual ~LocalMatchMapFrame(); + + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void UpdateContextMenuItems(wxMenu* menu); + virtual void update(WeightsManState* o); + void OnSave(wxCommandEvent& event); + + boost::uuids::uuid weights_id; + + DECLARE_EVENT_TABLE() +}; + + + +class LocalMatchCoordinator +{ +public: + LocalMatchCoordinator(GwtWeight* spatial_w, GalWeight* variable_w, + const std::vector& cadinality, + int permutations, + uint64_t last_seed_used, + bool reuse_last_seed=false); + virtual ~LocalMatchCoordinator(); + + bool IsOk() { return true; } + wxString GetErrorMessage() { return "Error Message"; } + + void run(); + void job(size_t nbr_sz, size_t idx, uint64_t seed_start); + + int num_obs; + GwtWeight* spatial_w; + GalWeight* variable_w; + std::vector sigVal; + std::vector sigCat; + std::vector cadinality; + + int significance_filter; // 0: >0.05 1: 0.05, 2: 0.01, 3: 0.001, 4: 0.0001 + double significance_cutoff; // either 0.05, 0.01, 0.001 or 0.0001 + void SetSignificanceFilter(int filter_id); + int GetSignificanceFilter() { return significance_filter; } + int permutations; // any number from 9 to 99999, 99 will be default + double bo; //Bonferroni bound + double fdr; //False Discovery Rate + double user_sig_cutoff; // user defined cutoff + uint64_t last_seed_used; + bool reuse_last_seed; + + uint64_t GetLastUsedSeed() { return last_seed_used;} + + void SetLastUsedSeed(uint64_t seed) { + reuse_last_seed = true; + last_seed_used = seed; + // update global one + GdaConst::use_gda_user_seed = true; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + GdaConst::gda_user_seed = last_seed_used; + wxString val; + val << last_seed_used; + OGRDataAdapter::GetInstance().AddEntry("gda_user_seed", val); + } + + bool IsReuseLastSeed() { return reuse_last_seed; } + void SetReuseLastSeed(bool reuse) { + reuse_last_seed = reuse; + // update global one + GdaConst::use_gda_user_seed = reuse; + if (reuse) { + last_seed_used = GdaConst::gda_user_seed; + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "1"); + } else { + OGRDataAdapter::GetInstance().AddEntry("use_gda_user_seed", "0"); + } + } + + virtual std::vector GetDefaultCategories(); + virtual std::vector GetDefaultCutoffs(); +}; + + +class LocalMatchSignificanceCanvas : public MapCanvas +{ + DECLARE_CLASS(LocalMatchSignificanceCanvas) +public: + LocalMatchSignificanceCanvas(wxWindow *parent, + TemplateFrame* t_frame, + Project* project, + LocalMatchCoordinator* lm_coord, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~LocalMatchSignificanceCanvas(); + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual wxString GetCanvasTitle(); + virtual wxString GetVariableNames(); + virtual bool ChangeMapType(CatClassification::CatClassifType new_map_theme, + SmoothingType new_map_smoothing); + virtual void SetCheckMarks(wxMenu* menu); + virtual void TimeChange(); + void SyncVarInfoFromCoordinator(); + virtual void CreateAndUpdateCategories(); + virtual void TimeSyncVariableToggle(int var_index); + virtual void UpdateStatusBar(); + virtual void SetWeightsId(boost::uuids::uuid id) { weights_id = id; } + + double bo; + double fdr; + +protected: + LocalMatchCoordinator* gs_coord; + bool is_clust; // true = cluster map, false = significance map + + wxString str_sig; + wxString str_high; + wxString str_med; + wxString str_low; + wxString str_undefined; + wxString str_neighborless; + wxString str_p005; + wxString str_p001; + wxString str_p0001; + wxString str_p00001; + + DECLARE_EVENT_TABLE() +}; + +class LocalMatchSignificanceFrame : public MapFrame +{ + DECLARE_CLASS(LocalMatchSignificanceFrame) +public: + + LocalMatchSignificanceFrame(wxFrame *parent, Project* project, + LocalMatchCoordinator* gs_coordinator, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = GdaConst::map_default_size, + const long style = wxDEFAULT_FRAME_STYLE); + virtual ~LocalMatchSignificanceFrame(); + + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void UpdateContextMenuItems(wxMenu* menu); + virtual void update(WeightsManState* o){} + + void RanXPer(int permutation); + void OnRan99Per(wxCommandEvent& event); + void OnRan199Per(wxCommandEvent& event); + void OnRan499Per(wxCommandEvent& event); + void OnRan999Per(wxCommandEvent& event); + void OnRanOtherPer(wxCommandEvent& event); + + void OnUseSpecifiedSeed(wxCommandEvent& event); + void OnSpecifySeedDlg(wxCommandEvent& event); + + void SetSigFilterX(int filter); + void OnSigFilter05(wxCommandEvent& event); + void OnSigFilter01(wxCommandEvent& event); + void OnSigFilter001(wxCommandEvent& event); + void OnSigFilter0001(wxCommandEvent& event); + void OnSigFilterSetup(wxCommandEvent& event); + + void OnSaveMLJC(wxCommandEvent& event); + + void OnSelectCores(wxCommandEvent& event); + void OnSelectNeighborsOfCores(wxCommandEvent& event); + void OnSelectCoresAndNeighbors(wxCommandEvent& event); + + void OnShowAsConditionalMap(wxCommandEvent& event); + + LocalMatchCoordinator* GetLocalMatchCoordinator() { return gs_coord; } + +protected: + void CoreSelectHelper(const std::vector& elem); + LocalMatchCoordinator* gs_coord; + + DECLARE_EVENT_TABLE() +}; + + + +#endif diff --git a/DialogTools/quantileLisaDlg.cpp b/DialogTools/quantileLisaDlg.cpp new file mode 100644 index 000000000..778fb24e4 --- /dev/null +++ b/DialogTools/quantileLisaDlg.cpp @@ -0,0 +1,312 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/WeightsManager.h" +#include "../ShapeOperations/WeightUtils.h" +#include "../ShapeOperations/GwtWeight.h" +#include "../ShapeOperations/GalWeight.h" +#include "../Explore/MLJCCoordinator.h" +#include "../Explore/MLJCMapNewView.h" +#include "../GenUtils.h" +#include "../Project.h" +#include "quantileLisaDlg.h" + +BEGIN_EVENT_TABLE( QuantileLisaDlg, wxDialog ) +EVT_CLOSE( QuantileLisaDlg::OnClose ) +END_EVENT_TABLE() + +QuantileLisaDlg::QuantileLisaDlg(wxFrame *parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("Quantile LISA Dialog")) +{ + wxLogMessage("Open QuantileLisaDlg Dialog."); + + CreateControls(); +} + +QuantileLisaDlg::~QuantileLisaDlg() +{ +} + +void QuantileLisaDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, + wxSize(420,560), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate(5, 5); + + wxPanel *panel = new wxPanel(scrl); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + AddInputCtrls(panel, vbox, false/*no auto button*/, true/*spatial weights*/, + /*single variable*/true, /*add centroids*/true); + + // parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(15,2,10,0); + + // Quantiles + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Number of Quantiles:")); + txt_quantiles = new wxTextCtrl(panel, wxID_ANY, "5",wxDefaultPosition, wxSize(150,-1)); + txt_quantiles->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_quantiles, 1, wxEXPAND); + + // Select Quantile + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Select a Quantile for LISA:")); + wxString choices13[] = {"1", "2", "3", "4", "5"}; + cho_quantile = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(150,-1), 5, choices13); + cho_quantile->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(cho_quantile, 1, wxEXPAND); + + // Quantiles + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Save Quantile Selection in Field:")); + txt_output_field = new wxTextCtrl(panel, wxID_ANY, "QT",wxDefaultPosition, wxSize(150,-1)); + + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_output_field, 1, wxEXPAND); + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + txt_quantiles->Bind(wxEVT_KEY_UP, &QuantileLisaDlg::OnChangeQuantiles, this); + okButton->Bind(wxEVT_BUTTON, &QuantileLisaDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &QuantileLisaDlg::OnCloseClick, this); +} + +void QuantileLisaDlg::update(TableState* o) +{ + InitVariableCombobox(combo_var, /*integer + real*/false, /* no centroids*/false); +} + +void QuantileLisaDlg::OnChangeQuantiles(wxKeyEvent& event) +{ + wxString tmp_val = txt_quantiles->GetValue(); + tmp_val.Trim(false); + tmp_val.Trim(true); + + if (tmp_val.IsEmpty()) return; + + long quantiles = 0; + if (tmp_val.ToLong(&quantiles) == false || quantiles < 2) { + wxString err_msg = _("The input value for the number of quantiles is not valid. Please enter an integer number greater than 1."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + // change dropdown list items in cho_quantiles + cho_quantile->Clear(); + for (int i=0; iAppend(wxString::Format("%d", i+1)); + } + cho_quantile->SetSelection(0); + event.Skip(); +} + +void QuantileLisaDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close QuantileLisaDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void QuantileLisaDlg::OnCloseClick(wxCommandEvent& event ) +{ + wxLogMessage("Close QuantileLisaDlg."); + + event.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void QuantileLisaDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click QuantileLisaDlg::OnOK"); + + if (project == NULL) return; + + // get selected variable + int sel_var = combo_var->GetSelection(); + if (sel_var < 0) { + wxString err_msg = _("Please select a variable for Quantile LISA."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + wxString var_name = combo_var->GetString(sel_var); + wxString col_name = name_to_nm[var_name]; + + int col = table_int->FindColId(col_name); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), col_name); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int tm = name_to_tm_id[var_name]; + std::vector data; + table_int->GetColData(col, tm, data); + + // Weights selection + GalWeight* gw = CheckSpatialWeights(); + if (gw == NULL) { + return; + } + + // get num quantiles + long l_quantiles = 0; + wxString tmp_quantiles = txt_quantiles->GetValue(); + if (tmp_quantiles.ToLong(&l_quantiles) == false) { + wxString err_msg = _("The input value for the number of quantiles is not valid."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int n_quantiles = l_quantiles; + + // get select quantile + int sel_quantile = cho_quantile->GetSelection() + 1; + + // compute quantile of selected variable + std::vector breaks(n_quantiles - 1); + std::vector sort_data = data; + std::sort(sort_data.begin(), sort_data.end()); + for (int i=0; i < breaks.size(); ++i) { + breaks[i] = Gda::percentile(((i+1.0)*100.0)/((double) n_quantiles), sort_data); + } + breaks.insert(breaks.begin(), std::numeric_limits::min()); + breaks.push_back(std::numeric_limits::max()); + + // create a binary data for selected quantile + std::vector bin_data(rows, 0); + double lower_bound = breaks[sel_quantile-1]; + double upper_bound = breaks[sel_quantile]; + + for (int i=0; i < data.size(); ++i) { + if (lower_bound < data[i] && data[i] <= upper_bound) { + bin_data[i] = 1; + } + } + + // save the binary data in table + wxString field_name = txt_output_field->GetValue(); + if (field_name.IsEmpty()) { + wxString err_msg = _("Please enter a field name for saving the quantile selection as binary data in table."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int time=0; + int new_col = table_int->FindColId(field_name); + if ( new_col == wxNOT_FOUND) { + int col_insert_pos = table_int->GetNumberCols(); + int time_steps = 1; + int m_length_val = GdaConst::default_dbf_long_len; + int m_decimals_val = 0; + new_col = table_int->InsertCol(GdaConst::long64_type, field_name, + col_insert_pos, time_steps, + m_length_val, m_decimals_val); + } else { + // detect if column is integer field, if not raise a warning + if (table_int->GetColType(new_col) != GdaConst::long64_type ) { + wxString msg = _("This field name already exists (non-integer type). Please input a unique name."); + wxMessageDialog dlg(this, msg, _("Warning"), wxOK | wxICON_WARNING ); + dlg.ShowModal(); + return; + } + } + + if (new_col > 0) { + vector clusters_undef(rows, false); + table_int->SetColData(new_col, time, bin_data); + table_int->SetColUndefined(col, time, clusters_undef); + } + + // compute binary local Join count + int sel = m_spatial_weights->GetSelection(); + std::vector weights_ids; + WeightsManInterface* w_man_int = project->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (sel >= weights_ids.size()) { + sel = weights_ids.size() - 1; + } + boost::uuids::uuid w_id = weights_ids[sel]; + + std::vector col_ids; + col_ids.push_back(new_col); + + std::vector var_info; + var_info.resize(1); + var_info[0].time = 0; + var_info[0].name = field_name; + var_info[0].is_time_variant = false; + table_int->GetMinMaxVals(new_col, var_info[0].min, var_info[0].max); + var_info[0].sync_with_global_time = false; + var_info[0].fixed_scale = true; + + JCCoordinator* lc = new JCCoordinator(w_id, project, var_info, col_ids); + MLJCMapFrame *sf = new MLJCMapFrame(parent, project, lc, false); + + wxString ttl = _("Quantile LISA Map (%s, # of quantiles=%d, select quantile=%d)"); + ttl = wxString::Format(ttl, var_name, n_quantiles, sel_quantile); + sf->SetTitle(ttl); +} diff --git a/DialogTools/quantileLisaDlg.h b/DialogTools/quantileLisaDlg.h new file mode 100644 index 000000000..ceb718a98 --- /dev/null +++ b/DialogTools/quantileLisaDlg.h @@ -0,0 +1,58 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_QUANTILELISA_DLG_H__ +#define __GEODA_CENTER_QUANTILELISA_DLG_H__ + +#include +#include +#include +#include +#include +#include + +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../DataViewer/TableInterface.h" +#include "AbstractClusterDlg.h" + +class QuantileLisaDlg : public AbstractClusterDlg +{ +public: + QuantileLisaDlg(wxFrame *parent, Project* project); + virtual ~QuantileLisaDlg(); + + void CreateControls(); + + void OnOK( wxCommandEvent& event ); + void OnChangeQuantiles(wxKeyEvent& event); + void OnCloseClick( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + + virtual wxString _printConfiguration() {return wxEmptyString;} + virtual void update(TableState* o); + +protected: + wxTextCtrl* txt_quantiles; + wxChoice* cho_quantile; + wxTextCtrl* txt_output_field; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/DialogTools/tSNEDlg.cpp b/DialogTools/tSNEDlg.cpp new file mode 100644 index 000000000..f73f3205f --- /dev/null +++ b/DialogTools/tSNEDlg.cpp @@ -0,0 +1,943 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../FramesManager.h" +#include "../DataViewer/TableInterface.h" +#include "../Project.h" +#include "../Algorithms/DataUtils.h" +#include "../Algorithms/cluster.h" +#include "../Algorithms/mds.h" +#include "../Algorithms/vptree.h" +#include "../Algorithms/splittree.h" +#include "../Explore/ScatterNewPlotView.h" +#include "../Explore/3DPlotView.h" +#include "SaveToTableDlg.h" +#include "tSNEDlg.h" + + +// exchange data between t-SNE and UI safely +boost::lockfree::queue tsne_queue(0); + +wxDEFINE_EVENT(myEVT_THREAD_UPDATE, wxThreadEvent); +wxDEFINE_EVENT(myEVT_THREAD_DONE, wxThreadEvent); + +BEGIN_EVENT_TABLE( TSNEDlg, wxDialog ) +EVT_CLOSE( TSNEDlg::OnClose ) +END_EVENT_TABLE() + + +TSNEDlg::TSNEDlg(wxFrame *parent_s, Project* project_s) +: AbstractClusterDlg(parent_s, project_s, _("t-SNE Settings")), +data(0), Y(0), ragged_distances(0), tsne(0), tsne_job(0), +old_report(""), dist('e'), is_thread_created(false) +{ + wxLogMessage("Open tSNE Dialog."); + CreateControls(); + + this->Connect(myEVT_THREAD_UPDATE, wxThreadEventHandler(TSNEDlg::OnThreadUpdate ) ); + this->Connect(myEVT_THREAD_DONE, wxThreadEventHandler(TSNEDlg::OnThreadDone ) ); + + +} + +TSNEDlg::~TSNEDlg() +{ + if (data) delete[] data; + if (Y) delete[] Y; + if (tsne_job) { + tsne_job->join(); + delete tsne_job; + } + if (tsne) { + delete tsne; + } +} + +void TSNEDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close TSNEDlg"); + // stop tsne + if (tsne) { + tsne->set_paused(false); + tsne->stop(); + } + + if (is_thread_created) { + GetThread()->Kill(); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + // important: before terminating, we _must_ wait for our joinable + // thread to end, if it's running; in fact it uses variables of this + // instance and posts events to *this event handler + if (GetThread() && // DoStartALongTask() may have not been called + GetThread()->IsRunning()) { + GetThread()->Wait(); + } + } + Destroy(); +} + +void TSNEDlg::OnCloseClick(wxCommandEvent& event ) +{ + wxLogMessage("Close TSNEDlg."); + wxCloseEvent ev; + OnClose(ev); + event.Skip(); +} + +void TSNEDlg::CreateControls() +{ + wxScrolledWindow* scrl = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, + wxSize(880,880), wxHSCROLL|wxVSCROLL ); + scrl->SetScrollRate( 5, 5 ); + + wxPanel *panel = new wxPanel(scrl); + + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Input + AddSimpleInputCtrls(panel, vbox); + + // parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(15,2,10,0); + + // perplexity + size_t num_obs = project->GetNumRecords(); + wxString str_perplexity; + if ((int)((num_obs - 1) / 3) < 30) str_perplexity << (int)((num_obs - 1) / 3); + else str_perplexity << 30; + + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Perplexity:")); + txt_perplexity = new wxTextCtrl(panel, wxID_ANY, str_perplexity,wxDefaultPosition, wxSize(70,-1)); + txt_perplexity->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st17, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_perplexity, 1, wxEXPAND); + + // theta + wxStaticText* st16 = new wxStaticText(panel, wxID_ANY, _("Theta:")); + txt_theta = new wxTextCtrl(panel, wxID_ANY, "0.5",wxDefaultPosition, wxSize(70,-1)); + txt_theta->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st16, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_theta, 1, wxEXPAND); + + // max iteration + wxStaticText* st15 = new wxStaticText(panel, wxID_ANY, _("Max Iteration:")); + txt_iteration = new wxTextCtrl(panel, wxID_ANY, "5000",wxDefaultPosition, wxSize(70,-1)); + txt_iteration->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st15, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_iteration, 1, wxEXPAND); + + + // lr + wxStaticText* st21 = new wxStaticText(panel, wxID_ANY, _("Learning Rate:")); + txt_learningrate = new wxTextCtrl(panel, wxID_ANY, "200",wxDefaultPosition, wxSize(70,-1)); + txt_learningrate->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st21, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_learningrate, 1, wxEXPAND); + + // momentum + wxStaticText* st18 = new wxStaticText(panel, wxID_ANY, _("Momentum:")); + txt_momentum = new wxTextCtrl(panel, wxID_ANY, "0.5",wxDefaultPosition, wxSize(70,-1)); + txt_momentum->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st18, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_momentum, 1, wxEXPAND); + + // final momentum + wxStaticText* st19 = new wxStaticText(panel, wxID_ANY, _("Final Momentum:")); + txt_finalmomentum = new wxTextCtrl(panel, wxID_ANY, "0.8",wxDefaultPosition, wxSize(70,-1)); + txt_finalmomentum->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st19, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_finalmomentum, 1, wxEXPAND); + + // mom_switch_iter + wxStaticText* st20 = new wxStaticText(panel, wxID_ANY, _("# Iteration Switch Momentum:")); + txt_mom_switch_iter = new wxTextCtrl(panel, wxID_ANY, "250",wxDefaultPosition, wxSize(70,-1)); + txt_mom_switch_iter->SetValidator( wxTextValidator(wxFILTER_NUMERIC) ); + + gbox->Add(st20, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(txt_mom_switch_iter, 1, wxEXPAND); + + + wxStaticText* st13 = new wxStaticText(panel, wxID_ANY, _("Distance Function:")); + wxString choices13[] = {"Euclidean", "Manhattan"}; + m_distance = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); + m_distance->SetSelection(0); + gbox->Add(st13, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_distance, 1, wxEXPAND); + + wxStaticText* st14 = new wxStaticText(panel, wxID_ANY, _("Category Variable:")); + wxBoxSizer *hbox18 = new wxBoxSizer(wxHORIZONTAL); + chk_group = new wxCheckBox(panel, wxID_ANY, ""); + { + std::vector col_id_map; + table_int->FillStringAndIntegerColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (!table_int->IsColTimeVariant(id)) { + cat_var_items.Add(name); + } + } + } + m_group = new wxChoice(panel, wxID_ANY, wxDefaultPosition, + wxSize(128,-1), cat_var_items); + hbox18->Add(chk_group,0, wxALIGN_CENTER_VERTICAL); + hbox18->Add(m_group,0,wxALIGN_CENTER_VERTICAL); + gbox->Add(st14, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox18, 1, wxEXPAND); + + // Transformation + AddTransformation(panel, gbox); + + // seed + wxStaticText* st27 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:")); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, _("Change Seed")); + + hbox17->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + hbox17->Add(seedButton,0,wxALIGN_CENTER_VERTICAL); + seedButton->Disable(); + gbox->Add(st27, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(hbox17, 1, wxEXPAND); + + if (GdaConst::use_gda_user_seed) { + chk_seed->SetValue(true); + seedButton->Enable(); + } + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + // Output + /* + wxStaticText* st3 = new wxStaticText (panel, wxID_ANY, _("# of Dimensions:")); + const wxString dims[2] = {"2", "3"}; + combo_n = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(120,-1), 2, dims); + combo_n->Enable(false); + + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Output:")); + //wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + hbox1->Add(st3, 0, wxALIGN_CENTER_VERTICAL); + hbox1->Add(combo_n, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, 5); + */ + + // buttons + runButton = new wxButton(panel, wxID_OK, _("Run"), wxDefaultPosition, + wxSize(70, 30)); + stopButton = new wxButton(panel, wxID_OK, _("Stop"), wxDefaultPosition, + wxSize(70, 30)); + saveButton = new wxButton(panel, wxID_OK, _("Save"), wxDefaultPosition, + wxSize(70, 30)); + saveButton->Enable(false); + stopButton->Enable(false); + closeButton = new wxButton(panel, wxID_EXIT, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(runButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(stopButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(saveButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + // Container + vbox->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + //vbox->Add(hbox1, 0, wxALL |wxEXPAND, 10); + vbox->Add(hbox2, 0, wxALIGN_CENTER | wxALL, 10); + + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + int n = project->GetNumRecords(); + std::vector X(n, 0), Y(n,0); + std::vector X_undef(n, false), Y_undef(n,false); + int style = AnimatePlotcanvas::DEFAULT_STYLE | AnimatePlotcanvas::show_vert_axis_through_origin | AnimatePlotcanvas::show_data_points | AnimatePlotcanvas::show_horiz_axis_through_origin; + m_animate = new AnimatePlotcanvas(this, NULL, project, X, Y, X_undef, Y_undef, + "", "", style, std::vector >(), + "", "", wxDefaultPosition, + wxSize(300, 300)); + + wxBoxSizer *hbox_4 = new wxBoxSizer(wxHORIZONTAL); + wxStaticText* st29 = new wxStaticText(panel, wxID_ANY, _("Iteration"), + wxDefaultPosition, wxSize(60, 30)); + m_slider = new wxSlider(panel, wxID_ANY, 0, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_LABELS); + m_slider->Enable(false); + hbox_4->Add(st29, 0, wxALIGN_CENTER_VERTICAL | wxTOP, 15); + hbox_4->Add(m_slider, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5); + + wxBoxSizer *hbox_3 = new wxBoxSizer(wxHORIZONTAL); + playButton = new wxButton(panel, wxID_OK, _(">"), wxDefaultPosition, wxSize(30, 30)); + pauseButton = new wxButton(panel, wxID_OK, _("||"), wxDefaultPosition, wxSize(30, 30)); + //stopButton = new wxButton(panel, wxID_OK, _("■"), wxDefaultPosition, wxSize(30, 30)); + playButton->Enable(false); + pauseButton->Enable(false); + //stopButton->Enable(false); + wxStaticText* st28 = new wxStaticText(panel, wxID_ANY, _("Speed"), + wxDefaultPosition, wxSize(40, 30)); + m_speed_slider = new wxSlider(panel, wxID_ANY, 100, 0, 100, wxDefaultPosition, wxSize(70, 30), wxSL_HORIZONTAL); + + hbox_3->Add(playButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox_3->Add(pauseButton, 0, wxALIGN_CENTER | wxALL, 5); + //hbox_3->Add(stopButton, 0, wxALIGN_CENTER | wxALL, 5); + hbox_3->Add(st28, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxLEFT, 10); + hbox_3->Add(m_speed_slider, 1, wxALIGN_CENTER | wxALL, 5); + + m_textbox = new SimpleReportTextCtrl(panel, XRCID("ID_TEXTCTRL"), "", wxDefaultPosition, wxSize(300,400)); + vbox1->Add(m_animate, 1, wxEXPAND|wxLEFT|wxRIGHT,20); + vbox1->Add(hbox_4, 0, wxEXPAND|wxLEFT|wxRIGHT,20); + vbox1->Add(hbox_3, 0, wxEXPAND|wxLEFT|wxRIGHT,20); + vbox1->Add(m_textbox, 0, wxEXPAND|wxALL,20); + + wxBoxSizer *container = new wxBoxSizer(wxHORIZONTAL); + container->Add(vbox); + container->Add(vbox1,1, wxEXPAND | wxALL); + + panel->SetSizer(container); + + wxBoxSizer* panelSizer = new wxBoxSizer(wxVERTICAL); + panelSizer->Add(panel, 1, wxEXPAND|wxALL, 0); + + scrl->SetSizer(panelSizer); + + wxBoxSizer* sizerAll = new wxBoxSizer(wxVERTICAL); + sizerAll->Add(scrl, 1, wxEXPAND|wxALL, 0); + SetSizer(sizerAll); + SetAutoLayout(true); + sizerAll->Fit(this); + + Centre(); + + // Events + runButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnOK, this); + playButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnPlay, this); + pauseButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnPause, this); + stopButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnStop, this); + saveButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnSave, this); + closeButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnCloseClick, this); + chk_seed->Bind(wxEVT_CHECKBOX, &TSNEDlg::OnSeedCheck, this); + seedButton->Bind(wxEVT_BUTTON, &TSNEDlg::OnChangeSeed, this); + m_slider->Bind(wxEVT_SLIDER, &TSNEDlg::OnSlider, this); + m_speed_slider->Bind(wxEVT_SLIDER, &TSNEDlg::OnSpeedSlider, this); +} + +void TSNEDlg::OnSeedCheck(wxCommandEvent& event) +{ + bool use_user_seed = chk_seed->GetValue(); + + if (use_user_seed) { + seedButton->Enable(); + if (GdaConst::use_gda_user_seed == false && GdaConst::gda_user_seed == 0) { + OnChangeSeed(event); + return; + } + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + + seedButton->Disable(); + } +} + +void TSNEDlg::OnChangeSeed(wxCommandEvent& event) +{ + // prompt user to enter user seed (used globally) + wxString m; + m << _("Enter a seed value for random number generator:"); + + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << GdaConst::gda_user_seed; + + wxTextEntryDialog dlg(NULL, m, _("Enter a seed value"), cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + uint64_t new_seed_val = val; + GdaConst::gda_user_seed = new_seed_val; + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + wxString str_gda_user_seed; + str_gda_user_seed << GdaConst::gda_user_seed; + ogr_adapt.AddEntry("gda_user_seed", str_gda_user_seed.ToStdString()); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + wxString m = _("\"%s\" is not a valid seed. Seed unchanged."); + m = wxString::Format(m, dlg_val); + wxMessageDialog dlg(NULL, m, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + } +} + +void TSNEDlg::InitVariableCombobox(wxListBox* var_box) +{ + wxLogMessage("InitVariableCombobox TSNEDlg."); + + wxArrayString items; + + std::vector col_id_map; + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + items.Add(name); + } + } + if (!items.IsEmpty()) + var_box->InsertItems(items,0); +} + +wxString TSNEDlg::_printConfiguration() +{ + return ""; +} + +double TSNEDlg::_calculateRankCorr(const std::vector >& result) +{ + double d; + std::vector x, y; + for (size_t r=1; rIsEnabled()) { + int idx = m_slider->GetValue(); + m_animate->UpdateCanvas(idx, tsne_results); + } +} + +void TSNEDlg::OnSpeedSlider(wxCommandEvent& ev) +{ + if (m_speed_slider->IsEnabled()) { + if (tsne) { + int idx = 100 - m_speed_slider->GetValue(); + tsne->set_speed(idx); + } + } +} + +void TSNEDlg::OnPlay(wxCommandEvent& event ) +{ + if (tsne) { + tsne->set_paused(false); + playButton->Enable(false); + pauseButton->Enable(true); + stopButton->Enable(true); + closeButton->Enable(false); + } +} + +void TSNEDlg::OnPause(wxCommandEvent& event ) +{ + if (tsne) { + tsne->set_paused(true); + playButton->Enable(true); + pauseButton->Enable(false); + stopButton->Enable(true); + closeButton->Enable(true); + } +} + +void TSNEDlg::OnStop(wxCommandEvent& event ) +{ + if (tsne) { + tsne->set_paused(false); + runButton->Enable(true); + playButton->Enable(false); + pauseButton->Enable(false); + stopButton->Enable(false); + closeButton->Enable(true); + tsne->stop(); + } +} + +void TSNEDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Click TSNEDlg::OnOK"); + + int transform = combo_tranform->GetSelection(); + + if (!GetInputData(transform, 1)) + return; + + double* weight = GetWeights(columns); + + double perplexity = 0; + int suggest_perp = (int)((project->GetNumRecords() - 1) / 3); + wxString val = txt_perplexity->GetValue(); + if (!val.ToDouble(&perplexity)) { + wxString err_msg = _("Please input a valid numeric value for perplexity."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + if (perplexity > suggest_perp) { + wxString err_msg = _("Perplexity parameter should not be larger than %d."); + wxMessageDialog dlg(NULL, wxString::Format(err_msg, suggest_perp), _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + double theta; + val = txt_theta->GetValue(); + if (!val.ToDouble(&theta)) { + wxString err_msg = _("Please input a valid numeric value for theta."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + double momentum; + val = txt_momentum->GetValue(); + if (!val.ToDouble(&momentum)) { + wxString err_msg = _("Please input a valid numeric value for momentum."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + double finalmomentum; + val = txt_finalmomentum->GetValue(); + if (!val.ToDouble(&finalmomentum)) { + wxString err_msg = _("Please input a valid numeric value for final momentum."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + double learningrate; + val = txt_learningrate->GetValue(); + if (!val.ToDouble(&learningrate)) { + wxString err_msg = _("Please input a valid numeric value for learning rate."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + val = txt_iteration->GetValue(); + if (!val.ToLong(&max_iteration)) { + wxString err_msg = _("Please input a valid numeric value for max iterations."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + long mom_switch_iter; + val = txt_mom_switch_iter->GetValue(); + if (!val.ToLong(&mom_switch_iter)) { + wxString err_msg = _("Please input a valid numeric value for iterations for momentum switch."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + groups.clear(); + group_labels.clear(); + if (chk_group->IsChecked()) { + int idx = m_group->GetSelection(); + wxString nm = m_group->GetString(idx); + int col = table_int->FindColId(nm); + if (col != wxNOT_FOUND) { + if (table_int->IsColNumeric(col)) { + std::vector group_variable(rows, 0); + table_int->GetColData(col, 0, group_variable); + std::map > group_ids; + std::map >::iterator it; + for (size_t i=0; isecond); + group_labels.push_back(wxString::Format("%d",it->first)); + } + } else { + + std::vector group_variable(rows); + table_int->GetColData(col, 0, group_variable); + std::map > group_ids; + std::map >::iterator it; + for (size_t i=0; isecond); + group_labels.push_back(it->first); + } + + } + m_animate->CreateAndUpdateCategories(groups); + } + } + + runButton->Enable(false); + saveButton->Enable(false); + + playButton->Enable(false); + pauseButton->Enable(true); + stopButton->Enable(true); + + m_slider->Enable(false); + m_textbox->SetValue(""); + + long out_dim = 2; //combo_n->GetSelection() == 0 ? 2 : 3; + + int new_col = out_dim; + + if (data) delete[] data; + data = new double[rows * columns]; + for (size_t i=0; iGetSelection(); + char dist_choices[] = {'e','b'}; + dist = dist_choices[dist_sel]; + + if (ragged_distances) { + for (size_t i=1; i< rows; ++i) free(ragged_distances[i]); + free(ragged_distances); + } + ragged_distances = distancematrix(rows, columns, input_data, mask, weight, dist, transpose); + + if (Y) delete[] Y; + Y = new double[rows * new_col]; + + m_slider->SetMin(1); + m_slider->SetMax(max_iteration); + + int num_threads = 1; + int verbose = 0; +#ifdef DEBUG + verbose = 1; +#endif + double early_exaggeration = 12; // default from R-tSNE + final_cost = 0; + m_textbox->SetValue(""); // clean text box + + int iter; + while (tsne_queue.pop(iter)){} // clean tsne_queue + + // start tsne instance + if (tsne) { + delete tsne; + } + tsne = new TSNE(data, rows, columns, Y, new_col, perplexity, theta, num_threads, + max_iteration, (int)mom_switch_iter, + (int)GdaConst::gda_user_seed, !GdaConst::use_gda_user_seed, + verbose, early_exaggeration, learningrate, &final_cost); + int idx = 100 - m_speed_slider->GetValue(); + tsne->set_speed(idx); + + // run tsne in a separate thread + tsne_results.clear(); + tsne_results.resize(max_iteration); + tsne_log.clear(); + + if (tsne_job) { + int t = 100 - m_speed_slider->GetValue(); + if (t > 0) tsne_job->interrupt(); + + if (tsne_job->joinable()) { + tsne_job->join(); + } + delete tsne_job; + } + tsne_job = new boost::thread(&TSNE::run, tsne, boost::ref(tsne_queue), + boost::ref(tsne_log), boost::ref(tsne_results)); + + // we want to start a long task, but we don't want our GUI to block + // while it's executed, so we use a thread to do it. + if (is_thread_created == false) { + is_thread_created = true; + if (CreateThread(wxTHREAD_JOINABLE) != wxTHREAD_NO_ERROR) { + wxLogError("Could not create the worker thread!"); + return; + } + } + + // start ui thread to listen to changes in tsne + if (GetThread()->IsRunning() == false) { + if (GetThread()->Run() != wxTHREAD_NO_ERROR) { + wxLogError("Could not run the worker thread!"); + return; + } + } + + pauseButton->Enable(true); + closeButton->Enable(false); +} + +void TSNEDlg::OnThreadUpdate(wxThreadEvent& evt) +{ + int iter = evt.GetInt(); + if (iter < 0 ) { + // pause and stop + max_iteration = m_slider->GetValue(); + m_slider->SetMax(max_iteration); + m_animate->UpdateCanvas(iter, tsne_results); + m_slider->Enable(true); + saveButton->Enable(true); + } else if (iter < max_iteration) { + m_animate->UpdateCanvas(iter, tsne_results); + m_slider->SetValue(iter+1); + + wxString log; + for (int i=tsne_log.size()-1; i >=0; --i) { + log << tsne_log[i]; + } + m_textbox->SetValue(log); + } +} + +void TSNEDlg::OnThreadDone(wxThreadEvent& evt) +{ + saveButton->Enable(true); + runButton->Enable(true); + + playButton->Enable(false); + pauseButton->Enable(false); + stopButton->Enable(false); + closeButton->Enable(true); + m_slider->Enable(true); + m_speed_slider->Enable(true); + + if (m_slider->GetValue() < m_slider->GetMax()) { + m_slider->Enable(false); + } + + wxString tsne_log; + tsne_log << _("---\n\nt-SNE: "); + tsne_log << "\nfinal cost:" << final_cost; + tsne_log << "\n"; + + tsne_log << m_textbox->GetValue(); + tsne_log << old_report; + m_textbox->SetValue(tsne_log); + + old_report = tsne_log; +} + +wxThread::ExitCode TSNEDlg::Entry() +{ + // IMPORTANT: + // this function gets executed in the secondary thread context! + // here we do our long task, periodically calling TestDestroy(): + while (!GetThread()->TestDestroy()) + { + int iter = 0; + while (iter < max_iteration - 1) { + int processed_iter = 0; + while (tsne_queue.pop(iter)) { + processed_iter++; + } + if (processed_iter > 0) { + wxThreadEvent* te = new wxThreadEvent(myEVT_THREAD_UPDATE); + te->SetInt(iter); + wxQueueEvent(this, te); + } + if (GetThread()->IsRunning()) { + GetThread()->Sleep(100); + } + } + + // VERY IMPORTANT: do not call any GUI function inside this + // function; rather use wxQueueEvent(): + wxQueueEvent(this, new wxThreadEvent(myEVT_THREAD_DONE)); + // we used pointer 'this' assuming it's safe; see OnClose() + } + // TestDestroy() returned true (which means the main thread asked us + // to terminate as soon as possible) or we ended the long task... + return (wxThread::ExitCode)0; +} + +void TSNEDlg::OnSave( wxCommandEvent& event ) { + long new_col = 2;//combo_n->GetSelection() == 0 ? 2 : 3; + + int sel_iter = m_slider->GetValue() - 1; + + // get results from selected iteration + const std::vector& data = tsne_results[sel_iter]; + std::vector X(rows), Y(rows); + for (int j = 0; j < rows; ++j) { + X[j] = data[j*new_col]; + } + for (int j = 0; j < rows; ++j) { + Y[j] = data[j*new_col + 1]; + } + std::vector > results; + results.push_back(X); + results.push_back(Y); + + // compute rank correlation + double rank_corr = _calculateRankCorr(results); + + std::vector > output_vals; + output_vals.push_back(std::make_pair("iterations", sel_iter + 1)); + output_vals.insert(output_vals.begin(), std::make_pair("rank correlation", rank_corr)); + output_vals.insert(output_vals.begin(), std::make_pair("final cost", final_cost)); + + if (!results.empty()) { + wxString method_str = "t-SNE"; + std::vector info_str; + for (size_t k=0; k new_data(new_col); + std::vector > vals(new_col); + std::vector > undefs(new_col); + + for (int j = 0; j < new_col; ++j) { + vals[j].resize(rows); + undefs[j].resize(rows); + for (int i = 0; i < rows; ++i) { + vals[j][i] = double(results[j][i]); + undefs[j][i] = false; + } + new_data[j].d_val = &vals[j]; + new_data[j].label = wxString::Format("V%d", j+1); + new_data[j].field_default = wxString::Format("V%d", j+1); + new_data[j].type = GdaConst::double_type; + new_data[j].undefined = &undefs[j]; + } + + SaveToTableDlg dlg(project, this, new_data, + _("Save Results: t-SNE"), + wxDefaultPosition, wxSize(400,400)); + if (dlg.ShowModal() == wxID_OK) { + // show in a scatter plot + std::vector& new_col_ids = dlg.new_col_ids; + std::vector& new_col_names = dlg.new_col_names; + + // at least 2 variables + if (new_col_ids.size() < 2) return; + + int num_new_vars = new_col_ids.size(); + + std::vector new_var_info; + new_var_info.resize(num_new_vars); + + new_var_info[0].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[0].name = new_col_names[0]; + new_var_info[0].is_time_variant = table_int->IsColTimeVariant(new_col_ids[0]); + table_int->GetMinMaxVals(new_col_ids[0], new_var_info[0].min, new_var_info[0].max); + new_var_info[0].sync_with_global_time = new_var_info[0].is_time_variant; + new_var_info[0].fixed_scale = true; + + new_var_info[1].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[1].name = new_col_names[1]; + new_var_info[1].is_time_variant = table_int->IsColTimeVariant(new_col_ids[1]); + table_int->GetMinMaxVals(new_col_ids[1], new_var_info[1].min, new_var_info[1].max); + new_var_info[1].sync_with_global_time = new_var_info[1].is_time_variant; + new_var_info[1].fixed_scale = true; + + if (num_new_vars == 2) { + wxString title = _("t-SNE Plot (%s) - %s, %s"); + title = wxString::Format(title, method_str, new_col_names[0], new_col_names[1]); + MDSPlotFrame* subframe = + new MDSPlotFrame(parent, project, groups, group_labels, + info_str, output_vals, + new_var_info, new_col_ids, + false, title, wxDefaultPosition, + GdaConst::scatterplot_default_size, + wxDEFAULT_FRAME_STYLE); + + } else if (num_new_vars == 3) { + + new_var_info[2].time = 0; + // Set Primary GdaVarTools::VarInfo attributes + new_var_info[2].name = new_col_names[2]; + new_var_info[2].is_time_variant = table_int->IsColTimeVariant(new_col_ids[2]); + table_int->GetMinMaxVals(new_col_ids[2], new_var_info[2].min, new_var_info[2].max); + new_var_info[2].sync_with_global_time = new_var_info[2].is_time_variant; + new_var_info[2].fixed_scale = true; + + + wxString title = _("t-SNE 3D Plot - %s, %s, %s"); + title = wxString::Format(title, new_col_names[0], new_col_names[1], new_col_names[2]); + + C3DPlotFrame *subframe = + new C3DPlotFrame(parent, project, + new_var_info, new_col_ids, + title, info_str, output_vals, wxDefaultPosition, + GdaConst::three_d_default_size, + wxDEFAULT_FRAME_STYLE); + } + } + + } +} diff --git a/DialogTools/tSNEDlg.h b/DialogTools/tSNEDlg.h new file mode 100644 index 000000000..6f3d3e798 --- /dev/null +++ b/DialogTools/tSNEDlg.h @@ -0,0 +1,121 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_TSNE_DLG_H__ +#define __GEODA_CENTER_TSNE_DLG_H__ + +#include +#include +#include +#include +#include +#include +#include + +#include "../VarTools.h" +#include "../Explore/AnimatePlotCanvas.h" +#include "AbstractClusterDlg.h" +#include "../Algorithms/tsne.h" + +wxDECLARE_EVENT(myEVT_THREAD_UPDATE, wxThreadEvent); +wxDECLARE_EVENT(myEVT_THREAD_DONE, wxThreadEvent); + + +class TSNEDlg : public AbstractClusterDlg, public wxThreadHelper +{ +public: + TSNEDlg(wxFrame *parent, Project* project); + virtual ~TSNEDlg(); + + void CreateControls(); + void OnThreadUpdate(wxThreadEvent& evt); + void OnThreadDone(wxThreadEvent& evt); + + void OnOK( wxCommandEvent& event ); + void OnPlay( wxCommandEvent& event ); + void OnPause( wxCommandEvent& event ); + void OnStop( wxCommandEvent& event ); + void OnCloseClick( wxCommandEvent& event ); + void OnClose(wxCloseEvent& ev); + void OnSeedCheck(wxCommandEvent& event); + void OnChangeSeed(wxCommandEvent& event); + void InitVariableCombobox(wxListBox* var_box); + void OnSlider(wxCommandEvent& ev); + void OnSpeedSlider(wxCommandEvent& ev); + void OnSave( wxCommandEvent& event ); + virtual wxString _printConfiguration(); + double _calculateRankCorr(const std::vector >& result); + + std::vector var_info; + std::vector col_ids; + +protected: + virtual wxThread::ExitCode Entry(); + + double final_cost; + std::string old_report; + char dist; + long max_iteration; + double *data ; + double* Y; + double **ragged_distances; + TSNE *tsne; + boost::thread *tsne_job; + + std::vector > groups; + std::vector group_labels; + std::vector > tsne_results; + std::vector tsne_log; + + AnimatePlotcanvas* m_animate; + SimpleReportTextCtrl* m_textbox; + wxButton* saveButton; + wxButton* runButton; + wxButton* playButton; + wxButton* pauseButton; + wxButton* stopButton; + wxButton *closeButton; + + wxSlider* m_slider; + wxSlider* m_speed_slider; + + wxChoice* m_distance; + //wxChoice* combo_n; + wxChoice* m_group; + wxCheckBox* chk_group; + wxArrayString cat_var_items; + + wxTextCtrl* txt_iteration; + wxTextCtrl* txt_perplexity; + wxTextCtrl* txt_theta; + wxTextCtrl* txt_momentum; + wxTextCtrl* txt_finalmomentum; + wxTextCtrl* txt_mom_switch_iter; + wxTextCtrl* txt_learningrate; + + wxCheckBox* chk_seed; + wxButton* seedButton; + + wxStaticText* lbl_poweriteration; + bool is_thread_created; + DECLARE_EVENT_TABLE() + +}; + +#endif diff --git a/Explore/3DPlotView.cpp b/Explore/3DPlotView.cpp index 44f053c27..a3763cf33 100644 --- a/Explore/3DPlotView.cpp +++ b/Explore/3DPlotView.cpp @@ -30,12 +30,15 @@ #include "../DataViewer/TimeState.h" #include "../DialogTools/3DControlPan.h" #include "../FramesManager.h" +#include "../VarCalc/WeightsManInterface.h" +#include "../ShapeOperations/GalWeight.h" #include "Geom3D.h" #include "../GdaConst.h" #include "../GeneralWxUtils.h" #include "../GeoDa.h" #include "../Project.h" #include "3DPlotView.h" +#include "wxGLString.h" BEGIN_EVENT_TABLE(C3DPlotCanvas, wxGLCanvas) EVT_SIZE(C3DPlotCanvas::OnSize) @@ -62,15 +65,20 @@ var_info(v_info), data(v_info.size()), data_undef(v_info.size()), scaled_d(v_info.size()), -c3d_plot_frame(t_frame) +c3d_plot_frame(t_frame), +ShowNeighbors(true), +ShowConnections(true), +quality(10), radius(0.03), linewidth(1.0) { wxLogMessage("Open C3DPlotCanvas."); + hs = highlight_state->GetHighlight(); m_context = new wxGLContext(this); selectable_fill_color = GdaConst::three_d_plot_default_point_colour; highlight_color = GdaConst::three_d_plot_default_highlight_colour; canvas_background_color=GdaConst::three_d_plot_default_background_colour; - + linecolor = GdaConst::three_d_plot_default_point_colour; + data_stats.resize(var_info.size()); var_min.resize(var_info.size()); var_max.resize(var_info.size()); @@ -202,7 +210,6 @@ void C3DPlotCanvas::OnPaint( wxPaintEvent& event ) wxPaintDC dc(this); wxGLCanvas::SetCurrent(*m_context); - /* initialize OpenGL */ if (isInit == false) { @@ -214,6 +221,8 @@ void C3DPlotCanvas::OnPaint( wxPaintEvent& event ) RenderScene(); end_redraw(); + + if (bSelect) { double world11[3],world12[3], world22[3], world21[3]; int pixel11[2], pixel12[2], pixel22[2], pixel21[2]; @@ -647,6 +656,8 @@ void C3DPlotCanvas::SetCanvasBackgroundColor(wxColour color) void C3DPlotCanvas::RenderScene() { + glEnable(GL_LINE_SMOOTH); + int xt = var_info[0].time; int yt = var_info[1].time; int zt = var_info[2].time; @@ -654,19 +665,9 @@ void C3DPlotCanvas::RenderScene() GLUquadric* myQuad = 0; myQuad = gluNewQuadric(); if (m_d) { - //glColor3f(1.0, 1.0, 1.0); - glColor3f(((GLfloat) selectable_fill_color.Red())/((GLfloat) 255.0), - ((GLfloat) selectable_fill_color.Green())/((GLfloat) 255.0), - ((GLfloat) selectable_fill_color.Blue())/((GLfloat) 255.0)); - for (int i=0; i draw_pts(num_obs, false); + + // draw highlighted points //glColor3f(1.0, 1.0, 0.0); glColor3f(((GLfloat) highlight_color.Red())/((GLfloat) 255.0), ((GLfloat) highlight_color.Green())/((GLfloat) 255.0), @@ -674,17 +675,98 @@ void C3DPlotCanvas::RenderScene() for (int i=0; iGetWManInt(); + boost::uuids::uuid weights_id = w_man_int->GetDefault(); + GalWeight* gal_weights = w_man_int->GetGal(weights_id); + if (gal_weights) { + // Enable blending + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + // connection lines + if (ShowConnections) { + glDisable(GL_LIGHTING); + glDepthMask(false); + glColor4f(((GLfloat) linecolor.Red())/((GLfloat) 255.0), + ((GLfloat) linecolor.Green())/((GLfloat) 255.0), + ((GLfloat) linecolor.Blue())/((GLfloat) 255.0), + 0.9); + glLineWidth(linewidth); + for (int i=0; igal[i]; + for (int j=0, jend=e.Size(); jgal[i]; + for (int j=0, jend=e.Size(); j& var_info, const std::vector& col_ids, - const wxString& title, const wxPoint& pos, + const wxString& title, + const std::vector& info_text, + const std::vector >& output_vals, + const wxPoint& pos, const wxSize& size, const long style) : TemplateFrame(parent, project, title, pos, size, style) { @@ -1082,17 +1170,66 @@ C3DPlotFrame::C3DPlotFrame(wxFrame *parent, Project* project, wxGLAttributes glAttributes; //glAttributes.Defaults().RGBA().DoubleBuffer().Depth(16).Stencil(8).SampleBuffers(1).Samplers(4).EndList(); glAttributes.PlatformDefaults().RGBA().DoubleBuffer().Depth(24).EndList(); - - canvas = new C3DPlotCanvas(project, this, glAttributes, - project->GetHighlightState(), - var_info, col_ids, - m_splitter); - control = new C3DControlPan(m_splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxCAPTION|wxDEFAULT_DIALOG_STYLE); control->template_frame = this; - m_splitter->SplitVertically(control, canvas, 70); + + if (output_vals.empty()) { + canvas = new C3DPlotCanvas(project, this, glAttributes, + project->GetHighlightState(), + var_info, col_ids, + m_splitter); + m_splitter->SplitVertically(control, canvas, 70); + } else { + wxPanel *panel = new wxPanel(m_splitter); + panel->SetBackgroundColour(*wxBLACK); + + canvas = new C3DPlotCanvas(project, this, glAttributes, + project->GetHighlightState(), + var_info, col_ids, + panel); + + wxBoxSizer *container = new wxBoxSizer(wxVERTICAL); + container->Add(canvas, 1, wxEXPAND | wxALL); + + int idx = 0; + int display_precision = 3; + wxString out_text; + + for (size_t i=0; iSetForegroundColour(*wxWHITE); + container->Add(st1, 0, wxALIGN_CENTER | wxALL, 0); + + wxString tmp_info_str; + for (size_t k=0; kSetForegroundColour(*wxWHITE); + container->Add(st2, 0, wxALIGN_CENTER | wxALL, 0); + + panel->SetSizer(container); + + wxBoxSizer *vbox = new wxBoxSizer(wxHORIZONTAL); + vbox->Add(panel, 0, wxEXPAND | wxALL, 10); + + m_splitter->SplitVertically(control, panel, 70); + } UpdateTitle(); SetMinSize(wxSize(600,400)); diff --git a/Explore/3DPlotView.h b/Explore/3DPlotView.h index 625a6a813..80ca5fe97 100644 --- a/Explore/3DPlotView.h +++ b/Explore/3DPlotView.h @@ -21,6 +21,7 @@ #define __GEODA_CENTER_3D_PLOT_VIEW_H__ #include +#include #include "../FramesManagerObserver.h" #include "../HLStateInt.h" #include "../HighlightStateObserver.h" @@ -86,6 +87,7 @@ class C3DPlotCanvas: public wxGLCanvas, public HighlightStateObserver int height, width; double bb_min[3], bb_max[3]; + wxColour linecolor; wxColour selectable_fill_color; wxColour highlight_color; wxColour canvas_background_color; @@ -96,6 +98,11 @@ class C3DPlotCanvas: public wxGLCanvas, public HighlightStateObserver Arcball* ball; double xs, xp, ys, yp, zs, zp; + float linewidth; + int quality; + double radius; + bool ShowNeighbors; + bool ShowConnections; bool ShowFirst; bool m_d; bool m_z; @@ -147,7 +154,10 @@ class C3DPlotFrame: public TemplateFrame C3DPlotFrame(wxFrame *parent, Project* project, const std::vector& var_info, const std::vector& col_ids, - const wxString& title, const wxPoint& pos, + const wxString& title, + const std::vector& info_text, + const std::vector >& output_vals, + const wxPoint& pos, const wxSize& size, const long style); virtual ~C3DPlotFrame(); diff --git a/Explore/AbstractClusterMap.cpp b/Explore/AbstractClusterMap.cpp index 8ddfec286..e3434b65e 100644 --- a/Explore/AbstractClusterMap.cpp +++ b/Explore/AbstractClusterMap.cpp @@ -280,13 +280,16 @@ void AbstractMapCanvas::CreateAndUpdateCategories() // issue #474 only show significance levels that can // be mapped for the given number of permutations, // e.g., for 99 it would stop at 0.01, for 999 at 0.001, etc. - if ( sig_cutoff >= def_cutoffs[3] && stop_sig > def_cutoffs[3] ){ //0.0001 + if ( sig_cutoff >= def_cutoffs[3] && stop_sig > def_cutoffs[3] ) { + //0.0001 num_cats -= 1; } - if ( sig_cutoff >= def_cutoffs[2] && stop_sig > def_cutoffs[2] ){ //0.001 + if ( sig_cutoff >= def_cutoffs[2] && stop_sig > def_cutoffs[2] ) { + //0.001 num_cats -= 1; } - if ( sig_cutoff >= def_cutoffs[1] && stop_sig > def_cutoffs[1] ){ //0.01 + if ( sig_cutoff >= def_cutoffs[1] && stop_sig > def_cutoffs[1] ) { + //0.01 num_cats -= 1; } cat_data.CreateCategoriesAtCanvasTm(num_cats, t); diff --git a/Explore/AbstractCoordinator.cpp b/Explore/AbstractCoordinator.cpp index 2ba53ec3a..1e1f26a7c 100644 --- a/Explore/AbstractCoordinator.cpp +++ b/Explore/AbstractCoordinator.cpp @@ -517,9 +517,13 @@ void AbstractCoordinator::CalcPseudoP_range(int obs_start, int obs_end, w = Gal_vecs[t]->gal; if (w[cnt].Size() > numNeighbors) { numNeighbors = w[cnt].Size(); + if (w[cnt].Check(cnt)) { + // exclude self from neighbors + numNeighbors -= 1; + } } int* _sigCat = sig_cat_vecs[t]; - if (w[cnt].Size() == 0) { + if (numNeighbors == 0) { _sigCat[cnt] = 5; } } diff --git a/Explore/AnimatePlotCanvas.cpp b/Explore/AnimatePlotCanvas.cpp new file mode 100644 index 000000000..632e0fff5 --- /dev/null +++ b/Explore/AnimatePlotCanvas.cpp @@ -0,0 +1,457 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include // std::pair +#include +#include +#include +#include +#include "../TemplateFrame.h" +#include "../GdaShape.h" +#include "../HighlightState.h" +#include "../GeneralWxUtils.h" +#include "../logger.h" +#include "../Project.h" +#include "AnimatePlotCanvas.h" + + +IMPLEMENT_CLASS(AnimatePlotcanvas, TemplateCanvas) +BEGIN_EVENT_TABLE(AnimatePlotcanvas, TemplateCanvas) +EVT_PAINT(TemplateCanvas::OnPaint) +EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) +EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) +EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + +AnimatePlotcanvas:: +AnimatePlotcanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, + const std::vector& X, const std::vector& Y, + const std::vector& X_undef, const std::vector& Y_undef, + const wxString& Xname, const wxString& Yname, int style, + const std::vector >& groups, + const wxString& right_click_menu_id, const wxString& title, + const wxPoint& pos, const wxSize& size) +:TemplateCanvas(parent, t_frame, project, project->GetHighlightState(), pos, size, false, true), +X(X), Y(Y), X_undef(X_undef), Y_undef(Y_undef), +orgX(X), orgY(Y), Xname(Xname), Yname(Yname), +right_click_menu_id(right_click_menu_id), style(style), is_drawing(false), groups(groups) +{ + // setup colors + use_category_brushes = true; + draw_sel_shps_by_z_val = false; + highlight_color = GdaConst::scatterplot_regression_selected_color; + selectable_fill_color = GdaConst::scatterplot_regression_excluded_color; + selectable_outline_color = GdaConst::scatterplot_regression_color; + + // setup margins + int virtual_screen_marg_top = 20;//20; + int virtual_screen_marg_right = 5;//20; + int virtual_screen_marg_bottom = 5;//45; + int virtual_screen_marg_left = 5;//45; + + if (style & show_axes) { + virtual_screen_marg_bottom = 40;//45; + virtual_screen_marg_left = 30;//45; + } + last_scale_trans.SetMargin(virtual_screen_marg_top, + virtual_screen_marg_bottom, + virtual_screen_marg_left, + virtual_screen_marg_right); + + // setup data range + last_scale_trans.SetData(0, 0, 100, 100); + n_pts = X.size(); + Xmin = DBL_MAX; Ymin = DBL_MAX; + Xmax = DBL_MIN; Ymax = DBL_MIN; + for (size_t i=0; i X[i]) Xmin = X[i]; + if (Xmax < X[i]) Xmax = X[i]; + if (Ymin > Y[i]) Ymin = Y[i]; + if (Ymax < Y[i]) Ymax = Y[i]; + } + + int num_categories = (int)groups.size(); + if (num_categories <= 1) { + // put all scatter points in 1 category + cat_data.CreateCategoriesAllCanvasTms(1 /*time*/, 1/*cats*/, X.size()); + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); + cat_data.SetCategoryBrushColor(0, 0, *wxWHITE); + for (int i=0, sz=X.size(); i m_predef_colors; + GdaColorUtils::GetUnique20Colors(m_predef_colors); + for (int i=0; iregisterObserver(this); +} + +AnimatePlotcanvas::~AnimatePlotcanvas() +{ + wxLogMessage("Entering AnimatePlotcanvas::~AnimatePlotcanvas"); + if (highlight_state) highlight_state->removeObserver(this); + wxLogMessage("Exiting AnimatePlotcanvas::~AnimatePlotcanvas"); +} + +void AnimatePlotcanvas::CreateAndUpdateCategories(const std::vector >& groups) +{ + int num_categories = (int)groups.size(); + if (num_categories == 0) return; + + int t = 0; + cat_data.CreateCategoriesAtCanvasTm(num_categories, t); + cat_data.ClearAllCategoryIds(); + + if (num_categories <= 1) { + // put all scatter points in 1 category + cat_data.CreateCategoriesAllCanvasTms(1 /*time*/, 1/*cats*/, X.size()); + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); + cat_data.SetCategoryBrushColor(0, 0, *wxWHITE); + for (int i=0, sz=X.size(); i m_predef_colors; + GdaColorUtils::GetUnique20Colors(m_predef_colors); + for (int i=0; iLoadMenu("ID_SCATTER_PLOT_MAT_MENU_OPTIONS"); + //template_frame->UpdateContextMenuItems(optMenu); + //template_frame->PopupMenu(optMenu, pos + GetPosition()); + //template_frame->UpdateOptionMenuItems(); + wxLogMessage("Exiting AnimatePlotcanvas::DisplayRightClickMenu"); +} + +void AnimatePlotcanvas::UpdateCanvas(int idx, const std::vector >& tsne_results) +{ + if (idx < tsne_results.size() && tsne_results[idx].size() > 0) { + const std::vector& data = tsne_results[idx]; + size_t new_col = 2; // hard coded to 2 + for (size_t i=0; i X[i]) Xmin = X[i]; + if (Xmax < X[i]) Xmax = X[i]; + if (Ymin > Y[i]) Ymin = Y[i]; + if (Ymax < Y[i]) Ymax = Y[i]; + } + if (is_drawing == false) { + is_drawing = true; + PopulateCanvas(); + Refresh(); + } else { + std::cout << "not drawing: " << idx << std::endl; + } + } +} + +void AnimatePlotcanvas::DrawLayers() +{ + wxMutexLocker lock(mutex_prerender); // make sure prerender lock is released + TemplateCanvas::DrawLayers(); +} + +void AnimatePlotcanvas::OnPaint(wxPaintEvent& event) +{ + //TemplateCanvas::OnPaint(event); + if (layer2_bm) { + wxSize sz = GetClientSize(); + wxMemoryDC dc(*layer2_bm); + wxPaintDC paint_dc(this); + paint_dc.Blit(0, 0, sz.x, sz.y, &dc, 0, 0); + // Draw optional control objects if needed + PaintControls(paint_dc); + helper_PaintSelectionOutline(paint_dc); + is_drawing = false; + } + event.Skip(); +} + +void AnimatePlotcanvas::UpdateSelection(bool shiftdown, bool pointsel) +{ + wxMutexLocker lock(mutex_prerender); // make sure prerender lock is released + TemplateCanvas::UpdateSelection(shiftdown, pointsel); +} + +/** + Override of TemplateCanvas method. We must still call the + TemplateCanvas method after we update the regression lines + as needed. */ +void AnimatePlotcanvas::update(HLStateInt* o) +{ + TemplateCanvas::update(o); +} + +void AnimatePlotcanvas::AddTimeVariantOptionsToMenu(wxMenu* menu) +{ +} + +wxString AnimatePlotcanvas::GetCanvasTitle() +{ + wxString s = _("Animate Plot- x: %s, y: %s"); + s = wxString::Format(s, Xname, Yname); + return s; +} + +wxString AnimatePlotcanvas::GetVariableNames() +{ + wxString s; + s << Xname << ", " << Yname; + return s; +} + +void AnimatePlotcanvas::UpdateStatusBar() +{ +} + +void AnimatePlotcanvas::TimeSyncVariableToggle(int var_index) +{ +} + +void AnimatePlotcanvas::FixedScaleVariableToggle(int var_index) +{ + TemplateCanvas::FixedScaleVariableToggle(var_index); +} + +void AnimatePlotcanvas::SetSelectableOutlineColor(wxColour color) +{ + selectable_outline_color = color; + TemplateCanvas::SetSelectableOutlineColor(color); + PopulateCanvas(); +} + +void AnimatePlotcanvas::SetHighlightColor(wxColour color) +{ + highlight_color = color; + PopulateCanvas(); +} + +void AnimatePlotcanvas::SetSelectableFillColor(wxColour color) +{ + // In Scatter Plot, Fill color is for points + selectable_fill_color = color; + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); + TemplateCanvas::SetSelectableFillColor(color); + PopulateCanvas(); +} + +void AnimatePlotcanvas::ShowAxes(bool display) +{ + if (display) style = style | show_axes; + UpdateMargins(); + PopulateCanvas(); +} + + +void AnimatePlotcanvas::OnIdle(wxIdleEvent& event) +{ + if (isResize) { + wxMutexLocker lock(mutex_prerender); // make sure prerender lock is released + isResize = false; + int cs_w=0, cs_h=0; + GetClientSize(&cs_w, &cs_h); + last_scale_trans.SetView(cs_w, cs_h); + resizeLayerBms(cs_w, cs_h); + ResizeSelectableShps(cs_w, cs_h); + event.RequestMore(); // render continuously, not only once on idle + } + if (!layer2_valid || !layer1_valid || !layer0_valid) { + DrawLayers(); + event.RequestMore(); // render continuously, not only once on idle + } +} + +void AnimatePlotcanvas::PopulateCanvas() +{ + LOG_MSG("Entering AnimatePlotcanvas::PopulateCanvas"); + mutex_prerender.Lock(); + BOOST_FOREACH( GdaShape* shp, background_shps ) { delete shp; } + background_shps.clear(); + BOOST_FOREACH( GdaShape* shp, selectable_shps ) { delete shp; } + selectable_shps.clear(); + BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } + foreground_shps.clear(); + + wxSize size(GetVirtualSize()); + last_scale_trans.SetView(size.GetWidth(), size.GetHeight()); + + // Recall: Xmin/max Ymin/max can be smaller/larger than min/max in X/Y + // if X/Y are particular time-slices of time-variant variables and + // if global scaling is being used. + double x_min = Xmin; + double x_max = Xmax; + double y_min = Ymin; + double y_max = Ymax; + + // create axis + double data_min_s = x_min; + double data_max_s = x_max; + double x_pad = 0.1 * (x_max - x_min); + + if (style & add_auto_padding_min) data_min_s = x_min - x_pad; + if (style & add_auto_padding_max) data_max_s = x_max - x_pad; + + axis_scale_x = AxisScale(data_min_s, data_max_s, 5, axis_display_precision, + axis_display_fixed_point); + + //std::cout << data_min_s << "," << data_max_s << std::endl; + double axis_min = y_min; + double axis_max = y_max; + double y_pad = 0.1 * (y_max - y_min); + + if (style & add_auto_padding_min) axis_min = y_min - y_pad; + if (style & add_auto_padding_max) axis_max = y_max - y_pad; + + // check if user specifies the y-axis range + if (!def_y_min.IsEmpty()) def_y_min.ToDouble(&axis_min); + if (!def_y_max.IsEmpty()) def_y_max.ToDouble(&axis_max); + + axis_scale_y = AxisScale(axis_min, axis_max, 5, axis_display_precision, + axis_display_fixed_point); + + // Populate TemplateCanvas::selectable_shps + scaleX = 100.0 / (axis_scale_x.scale_range); + scaleY = 100.0 / (axis_scale_y.scale_range); + + if (style & show_data_points) { + selectable_shps.resize(X.size()); + selectable_shps_undefs.resize(X.size()); + + if (style & use_larger_filled_circles) { + selectable_shps_type = circles; + for (size_t i=0, sz=X.size(); isetPen(GdaConst::scatterplot_regression_excluded_color); + c->setBrush(GdaConst::scatterplot_regression_excluded_color); + selectable_shps[i] = c; + } + } else { + selectable_shps_type = points; + for (size_t i=0, sz=X.size(); isetPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(x_baseline); + } + + if (style & show_axes) { + y_baseline = new GdaAxis(Yname, axis_scale_y, + wxRealPoint(0,0), wxRealPoint(0, 100)); + y_baseline->setPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(y_baseline); + } + + // create optional axes through origin + if ( (style & show_horiz_axis_through_origin) && + axis_scale_y.scale_min < 0 && axis_scale_y.scale_max > 0) + { + GdaPolyLine* x_axis_through_origin = new GdaPolyLine(0,50,100,50); + double y_scale_range = axis_scale_y.scale_max-axis_scale_y.scale_min; + double y_inter = 100.0 * ((-axis_scale_y.scale_min) / y_scale_range); + x_axis_through_origin->operator=(GdaPolyLine(0,y_inter,100,y_inter)); + x_axis_through_origin->setPen(*GdaConst::scatterplot_origin_axes_pen); + foreground_shps.push_back(x_axis_through_origin); + } + + if ( (style & show_vert_axis_through_origin) && + axis_scale_x.scale_min < 0 && axis_scale_x.scale_max > 0) + { + GdaPolyLine* y_axis_through_origin = new GdaPolyLine(50,0,50,100); + double x_scale_range = axis_scale_x.scale_max-axis_scale_x.scale_min; + double x_inter = 100.0 * ((-axis_scale_x.scale_min) / x_scale_range); + y_axis_through_origin->operator=(GdaPolyLine(x_inter,0,x_inter,100)); + y_axis_through_origin->setPen(*GdaConst::scatterplot_origin_axes_pen); + foreground_shps.push_back(y_axis_through_origin); + } + + ResizeSelectableShps(); + mutex_prerender.Unlock(); + LOG_MSG("Exiting AnimatePlotcanvas::PopulateCanvas"); +} + +void AnimatePlotcanvas::UpdateMargins() +{ + int virtual_screen_marg_top = 20;//20; + int virtual_screen_marg_right = 5;//20; + int virtual_screen_marg_bottom = 5;//45; + int virtual_screen_marg_left = 5;//45; + + if (style & show_axes) { + virtual_screen_marg_bottom = 40;//45; + virtual_screen_marg_left = 30;//45; + } + last_scale_trans.SetMargin(virtual_screen_marg_top, + virtual_screen_marg_bottom, + virtual_screen_marg_left, + virtual_screen_marg_right); +} diff --git a/Explore/AnimatePlotCanvas.h b/Explore/AnimatePlotCanvas.h new file mode 100644 index 000000000..286296f5f --- /dev/null +++ b/Explore/AnimatePlotCanvas.h @@ -0,0 +1,141 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_ANIMATEPLOT_CANVAS_VIEW_H__ +#define __GEODA_CENTER_ANIMATEPLOT_CANVAS_VIEW_H__ + +#include +#include +#include +#include +#include + +#include "../TemplateCanvas.h" +#include "../GdaShape.h" + +class HighlightState; +class Project; + +class AnimatePlotcanvas : public TemplateCanvas +{ +public: + DECLARE_CLASS(AnimatePlotcanvas) + + enum Style { + DEFAULT_STYLE = 0, + add_auto_padding_min = 1, //0b00000001 + add_auto_padding_max = 2, //0b00000010 + use_larger_filled_circles = 4, + show_axes = 8, + show_horiz_axis_through_origin = 16, + show_vert_axis_through_origin = 32, + show_data_points = 64, + view_standardized_data = 128 + }; + + AnimatePlotcanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undf, + const std::vector& Y_undef, + const wxString& Xname, + const wxString& Yname, + int style, + const std::vector >& groups, + const wxString& right_click_menu_id = wxEmptyString, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~AnimatePlotcanvas(); + + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual void AddTimeVariantOptionsToMenu(wxMenu* menu); + virtual void update(HLStateInt* o); + virtual wxString GetCanvasTitle(); + virtual wxString GetVariableNames(); + virtual void UpdateStatusBar(); + virtual void UpdateSelection(bool shiftdown, bool pointsel); + + virtual void TimeSyncVariableToggle(int var_index); + virtual void FixedScaleVariableToggle(int var_index); + + virtual void DrawLayers(); + virtual void OnPaint(wxPaintEvent& event); + virtual void OnIdle(wxIdleEvent& event); + + void SetSelectableOutlineColor(wxColour color); + void SetSelectableFillColor(wxColour color); + void SetHighlightColor(wxColour color); + + void ShowAxes(bool display); + void ShowRegimes(bool display); + bool IsShowAxes() { return show_axes; } + void UpdateCanvas(int idx, const std::vector >& tsne_results); + void CreateAndUpdateCategories(const std::vector >& groups); + + +protected: + + virtual void PopulateCanvas(); + void UpdateMargins(); + + bool is_drawing; + wxMutex mutex_prerender; + + //ScatterPlotPens pens; + // data + size_t n_pts; + std::vector X; + std::vector Y; + std::vector W; + std::vector X_undef; + std::vector Y_undef; + const std::vector& orgX; + const std::vector& orgY; + std::vector > groups; + + // x,y labels or variable name + wxString Xname; + wxString Yname; + // used for scaling, so can be smaller/larger than min/max in X/Y + double Xmin, Xmax, Ymin, Ymax; + + // user defined y-axis range + wxString def_y_min; + wxString def_y_max; + + // axis + AxisScale axis_scale_x; + AxisScale axis_scale_y; + + double scaleX; + double scaleY; + + // axes + GdaAxis* x_baseline; + GdaAxis* y_baseline; + + // style + int style; + wxString right_click_menu_id; + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/Explore/Basemap.cpp b/Explore/Basemap.cpp index 78549fc64..2bff9e4da 100644 --- a/Explore/Basemap.cpp +++ b/Explore/Basemap.cpp @@ -154,6 +154,8 @@ XYFraction::XYFraction(double _x, double _y) yfrac = modf(_y, &yint); } +const char *Basemap::USER_AGENT = "GeoDa 1.14 contact spatial@uchiago.edu"; + Basemap::Basemap(BasemapItem& _basemap_item, Screen* _screen, MapLayer* _map, @@ -229,26 +231,22 @@ void Basemap::SetupMapType(BasemapItem& _basemap_item) basemap_item = _basemap_item; basemapName = basemap_item.group + "." + basemap_item.name; basemapUrl = basemap_item.url; - - if (basemapUrl.Find("png") != wxNOT_FOUND || - basemapUrl.Find("PNG") != wxNOT_FOUND) { + + wxString content_type = GetContentType(); + if (content_type.IsEmpty()) content_type = GetContentType(); + + content_type.MakeUpper(); + if (content_type.Find("PNG") != wxNOT_FOUND) { imageSuffix = ".png"; - } else if (basemapUrl.Find("jpeg") != wxNOT_FOUND || - basemapUrl.Find("JPEG") != wxNOT_FOUND) { + } else if (content_type.Find("JPG") != wxNOT_FOUND) { + imageSuffix = ".jpg"; + } else if (content_type.Find("JPEG") != wxNOT_FOUND) { imageSuffix = ".jpeg"; + } else if (content_type.Find("GIF") != wxNOT_FOUND) { + imageSuffix = ".gif"; } else { - if (basemapUrl.Find("ArcGIS")) { - imageSuffix = ".jpeg"; - } else if (basemapUrl.Find("autonavi")) { - imageSuffix = ".png"; - } else { - imageSuffix = ".png"; - } - + imageSuffix = ".png"; } - // if ( !hdpi ) { - // basemapUrl.Replace("@2x", ""); - // } // get a latest HERE account vector nokia_user = OGRDataAdapter::GetInstance().GetHistory("nokia_user"); @@ -277,7 +275,8 @@ void Basemap::Reset() map->west= origMap->west; map->east= origMap->east; GetEasyZoomLevel(); - SetupMapType(basemap_item); + //SetupMapType(basemap_item); + GetTiles(); } void Basemap::Reset(int map_type) @@ -306,7 +305,8 @@ void Basemap::Extent(double _n, double _w, double _s, double _e, origMap->west= _w; origMap->east= _e; GetEasyZoomLevel(); - SetupMapType(basemap_item); + //SetupMapType(basemap_item); + GetTiles(); } void Basemap::ResizeScreen(int _width, int _height) @@ -314,12 +314,13 @@ void Basemap::ResizeScreen(int _width, int _height) if (screen) { screen->width = _width; screen->height = _height; - } - //isTileDrawn = false; - GetEasyZoomLevel(); - - SetupMapType(basemap_item); + //isTileDrawn = false; + GetEasyZoomLevel(); + + //SetupMapType(basemap_item); + GetTiles(); + } } void Basemap::Pan(int x0, int y0, int x1, int y1) @@ -332,7 +333,10 @@ void Basemap::Pan(int x0, int y0, int x1, int y1) double offsetLat = p1->lat - p0->lat; double offsetLon = p1->lng - p0->lng; - + + delete p0; + delete p1; + if (map->Pan(-offsetLat, -offsetLon)) { //isTileDrawn = false; //isTileReady = false; @@ -367,6 +371,9 @@ bool Basemap::Zoom(bool is_zoomin, int x0, int y0, int x1, int y1) double west = p0->lng; double south = p1->lat; double east = p1->lng; + + delete p0; + delete p1; map->UpdateExtent(west, south, east, north); @@ -594,8 +601,7 @@ bool Basemap::IsDownloading() size_t curlCallback(void *ptr, size_t size, size_t nmemb, void* userdata) { FILE* stream = (FILE*)userdata; - if (!stream) - { + if (!stream) { printf("!!! No stream\n"); return 0; } @@ -604,6 +610,37 @@ size_t curlCallback(void *ptr, size_t size, size_t nmemb, void* userdata) return written; } +wxString Basemap::GetContentType() +{ + wxString url = GetTileUrl(16, 11); // guerry + wxString content_type; + CURL *curl = curl_easy_init(); + CURLcode res; + if(curl) { + curl_easy_setopt(curl, CURLOPT_URL, url.ToUTF8().data()); + curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); + curl_easy_setopt(curl, CURLOPT_USERAGENT, Basemap::USER_AGENT); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 1L); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1L); + curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L); + res = curl_easy_perform(curl); + + if(!res) { + /* extract the content-type */ + char *ct = NULL; + res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); + if(!res && ct) { + content_type = ct; + } + } + curl_easy_cleanup(curl); + } + //std::cout << "ContentType():" << content_type << "," << url.c_str() << "," << url.ToUTF8().data() << std::endl; + return content_type; +} + void Basemap::DownloadTile(int x, int y) { if (x < 0 || y < 0) @@ -615,10 +652,8 @@ void Basemap::DownloadTile(int x, int y) if (!wxFileExists(filepathStr) || wxFileName::GetSize(filepathStr) == 0) { // otherwise, download the image - wxString urlStr = GetTileUrl(x, y); - char* url = new char[urlStr.length() + 1]; - std::strcpy(url, urlStr.c_str()); - + wxString url = GetTileUrl(x, y); + FILE* fp; CURL* image; CURLcode imgResult; @@ -631,8 +666,9 @@ void Basemap::DownloadTile(int x, int y) fp = fopen(GET_ENCODED_FILENAME(filepathStr), "wb"); #endif if (fp) { - curl_easy_setopt(image, CURLOPT_URL, url); + curl_easy_setopt(image, CURLOPT_URL, url.ToUTF8().data()); curl_easy_setopt(image, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); + curl_easy_setopt(image, CURLOPT_USERAGENT, Basemap::USER_AGENT); curl_easy_setopt(image, CURLOPT_WRITEFUNCTION, curlCallback); curl_easy_setopt(image, CURLOPT_WRITEDATA, fp); //curl_easy_setopt(image, CURLOPT_FOLLOWLOCATION, 1); @@ -650,7 +686,6 @@ void Basemap::DownloadTile(int x, int y) fclose(fp); } } - delete[] url; } mutex.lock(); @@ -675,7 +710,7 @@ LatLng* Basemap::XYToLatLng(XYFraction &xy, bool isLL) double lat = 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n))); if (!isLL && poCT) { - poCT->TransformEx(1, &lng, &lat); + poCT->Transform(1, &lng, &lat); } return new LatLng(lat, lng); } @@ -762,7 +797,7 @@ wxString Basemap::GetTileUrl(int x, int y) url.Replace("HERE_APP_ID", nokia_id); url.Replace("HERE_APP_CODE", nokia_code); url.Replace("{s}", GetRandomSubdomain(url)); - std::cout << url.c_str() << std::endl; + //std::cout << url.c_str() << std::endl; return url; } diff --git a/Explore/Basemap.h b/Explore/Basemap.h index 800b467c3..4b409c614 100644 --- a/Explore/Basemap.h +++ b/Explore/Basemap.h @@ -24,84 +24,16 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include #include -using namespace std; -using namespace boost; +#include "../Algorithms/threadpool.h" -typedef boost::function job_t; +using namespace std; namespace Gda { - class thread_pool - { - private: - mutex mx; - condition_variable cv; - - boost::container::deque _queue; - - boost::thread_group pool; - - boost::atomic_bool shutdown; - static void worker_thread(thread_pool& q) - { - while (optional job = q.dequeue()) - (*job)(); - } - - public: - thread_pool() : shutdown(false) { - int cores = boost::thread::hardware_concurrency(); - if (cores > 1) cores = cores -1; - for (unsigned i = 0; i < cores; ++i) - pool.create_thread(boost::bind(worker_thread, boost::ref(*this))); - } - - void enqueue(job_t job) - { - lock_guard lk(mx); - _queue.push_back(job); - - cv.notify_one(); - } - - optional dequeue() - { - unique_lock lk(mx); - namespace phx = boost::phoenix; - - cv.wait(lk, phx::ref(shutdown) || !phx::empty(phx::ref(_queue))); - if (_queue.empty()) - return none; - - job_t job = _queue.front(); - _queue.pop_front(); - - return job; - } - - ~thread_pool() - { - shutdown = true; - { - lock_guard lk(mx); - cv.notify_all(); - } - - pool.join_all(); - } - }; /** * BasemapItem is for "Basemap Source Configuration" dialog @@ -426,7 +358,8 @@ namespace Gda { OGRCoordinateTransformation* _poCT, double scale_factor = 1.0); ~Basemap(); - + + static const char* USER_AGENT; OGRCoordinateTransformation *poCT; BasemapItem basemap_item; wxString basemapName; @@ -459,8 +392,7 @@ namespace Gda { Screen* screen; MapLayer* map; MapLayer* origMap; - - + double Deg2Rad (double degree) { return degree * M_PI / 180.0; } double Rad2Deg (double radians) { return radians * 180.0 / M_PI;} XYFraction* LatLngToXY(LatLng &latlng); @@ -488,7 +420,7 @@ namespace Gda { void SetupMapType(BasemapItem& basemap_item); void CleanCache(); - + wxString GetContentType(); }; } diff --git a/Explore/BoxNewPlotView.cpp b/Explore/BoxNewPlotView.cpp index 670fab770..4e7d3497f 100644 --- a/Explore/BoxNewPlotView.cpp +++ b/Explore/BoxNewPlotView.cpp @@ -642,7 +642,7 @@ void BoxPlotCanvas::PopulateCanvas() 3, 10, 0, 30); foreground_shps.push_back(s); } - + // draw box: lines and rectangles s = new GdaPolyLine(xM-plot_width_const/3.0, (y0-y_min)*scaleY, xM+plot_width_const/3.0, (y0-y_min)*scaleY); foreground_shps.push_back(s); @@ -671,7 +671,7 @@ void BoxPlotCanvas::PopulateCanvas() wxRealPoint(orig_x_pos[t-cur_first_ind], 0), 0, GdaShapeText::h_center, GdaShapeText::v_center, 0, 18); foreground_shps.push_back(s); - + // draw points in IQRs for (int i=0; i < symbols + for (int ival=0; ival& color_vec, int num_color) { for (int i=0; i& color_vec, break; default: for (int i = 0; i < num_color; i++) { - color_vec[i] = Color1[colpos[num_color] + num_color - i-1]; + color_vec[i] = Color1[colpos[num_color] + i]; } break; } @@ -2807,6 +2824,30 @@ wxColour CatClassifData::GetCategoryBrushColor(int canvas_tm, int cat) return categories[canvas_tm].cat_vec[cat].brush.GetColour(); } +wxColour CatClassifData::GetCategoryColorById(int canvas_tm, int id) +{ + if (canvas_tm >= categories.size()) + return *wxWHITE; + + const CategoryVec& cv = categories[canvas_tm]; + if (id >= cv.id_to_cat.size()) + return *wxWHITE; + const int cat = cv.id_to_cat[id]; + return categories[canvas_tm].cat_vec[cat].brush.GetColour(); +} + +wxPen CatClassifData::GetCategoryPenById(int canvas_tm, int id) +{ + if (canvas_tm >= categories.size()) + return *wxWHITE; + + const CategoryVec& cv = categories[canvas_tm]; + if (id >= cv.id_to_cat.size()) + return *wxWHITE; + const int cat = cv.id_to_cat[id]; + return categories[canvas_tm].cat_vec[cat].pen; +} + wxColour CatClassifData::GetCategoryColor(int canvas_tm, int cat) { if (cat <0 || cat >= categories[canvas_tm].cat_vec.size()) diff --git a/Explore/CatClassification.h b/Explore/CatClassification.h index 8ae2c1f5a..50a37b55f 100644 --- a/Explore/CatClassification.h +++ b/Explore/CatClassification.h @@ -56,7 +56,8 @@ namespace CatClassification { }; enum ColorScheme { sequential_color_scheme, diverging_color_scheme, - qualitative_color_scheme, custom_color_scheme, unique_color_scheme + qualitative_color_scheme, custom_color_scheme, unique_color_scheme, + bugn_color_scheme }; @@ -218,6 +219,8 @@ struct CatClassifData { void SetCategoryPenColor(int canvas_tm, int cat, wxColour color); wxColour GetCategoryPenColor(int canvas_tm, int cat); wxColour GetCategoryBrushColor(int canvas_tm, int cat); + wxColour GetCategoryColorById(int canvas_tm, int id); + wxPen GetCategoryPenById(int canvas_tm, int id); wxColour GetCategoryColor(int canvas_tm, int cat); wxBrush GetCategoryBrush(int canvas_tm, int cat); wxPen GetCategoryPen(int canvas_tm, int cat); diff --git a/Explore/ColocationMapView.cpp b/Explore/ColocationMapView.cpp index 921ce6d78..1490dfed6 100644 --- a/Explore/ColocationMapView.cpp +++ b/Explore/ColocationMapView.cpp @@ -307,7 +307,7 @@ void ColocationSelectDlg::OnVarSelect( wxCommandEvent& event) vector tms; combo_var->GetSelections(var_selections); - int num_var = var_selections.size(); + size_t num_var = var_selections.size(); if (num_var >= 2) { // check selected variables for any co-located values, and add them to choice box col_ids.resize(num_var); @@ -526,6 +526,7 @@ void ColocationSelectDlg::OnOK( wxCommandEvent& event) ttl << " - "; } } + // memory will be managed by wxWidgets ColocationMapFrame* nf = new ColocationMapFrame(parent, project, select_vars, sel_vals, sel_clrs, sel_lbls, sel_ids, w_id, ttl, wxDefaultPosition, GdaConst::map_default_size); } diff --git a/Explore/ConditionalBoxPlotView.cpp b/Explore/ConditionalBoxPlotView.cpp new file mode 100644 index 000000000..8093310fa --- /dev/null +++ b/Explore/ConditionalBoxPlotView.cpp @@ -0,0 +1,739 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include // std::sort +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../DataViewer/TableInterface.h" +#include "../GdaConst.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "../logger.h" +#include "../GeoDa.h" +#include "../GenGeomAlgs.h" +#include "../Project.h" + +#include "ConditionalBoxPlotView.h" + + +IMPLEMENT_CLASS(ConditionalBoxPlotCanvas, ConditionalNewCanvas) + BEGIN_EVENT_TABLE(ConditionalBoxPlotCanvas, ConditionalNewCanvas) + EVT_PAINT(TemplateCanvas::OnPaint) + EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) + EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) + EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + +const int ConditionalBoxPlotCanvas::BOX_VAR = 2; // box var +const double ConditionalBoxPlotCanvas::left_pad_const = 20; + +ConditionalBoxPlotCanvas:: +ConditionalBoxPlotCanvas(wxWindow *parent, + TemplateFrame* t_frame, + Project* project_s, + const std::vector& v_info, + const std::vector& col_ids, + const wxPoint& pos, const wxSize& size) +: ConditionalNewCanvas(parent, t_frame, project_s, v_info, col_ids, + false, true, pos, size) +{ + full_map_redraw_needed = true; + hinge_15 = true; + show_axes = true; + // NOTE: define Box Plot defaults + selectable_fill_color = GdaConst::boxplot_point_color; + highlight_color = GdaConst::highlight_color; + + last_scale_trans.SetData(0, 0, 100, 100); + last_scale_trans.SetMargin(25, 75, 75, 25); + last_scale_trans.SetFixedAspectRatio(false); // stretch with screen + + VarInfoAttributeChange(); + InitBoxPlot(); + PopulateCanvas(); + + all_init = true; + SetBackgroundStyle(wxBG_STYLE_CUSTOM); // default style +} + +ConditionalBoxPlotCanvas::~ConditionalBoxPlotCanvas() +{ +} + +void ConditionalBoxPlotCanvas::InitBoxPlot() +{ + // Init box plots (data and stats) by rows and columns + for (int t=0; t undefs(num_obs, false); + for (int i=0; iOnActivate(ae); + + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_COND_BOXPLOT_VIEW_MENU_OPTIONS"); + AddTimeVariantOptionsToMenu(optMenu); + TemplateCanvas::AppendCustomCategories(optMenu, project->GetCatClassifManager()); + SetCheckMarks(optMenu); + + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); +} + +void ConditionalBoxPlotCanvas::SetCheckMarks(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + ConditionalNewCanvas::SetCheckMarks(menu); + + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_SHOW_AXES"), show_axes); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_BOXPLOT_HINGE15"), hinge_15); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_BOXPLOT_HINGE30"), !hinge_15); +} + +void ConditionalBoxPlotCanvas::OnShowAxes(wxCommandEvent& evt) +{ + show_axes = !show_axes; + + PopulateCanvas(); +} + +void ConditionalBoxPlotCanvas::OnHinge15(wxCommandEvent& evt) +{ + hinge_15 = true; + + PopulateCanvas(); +} + +void ConditionalBoxPlotCanvas::OnHinge30(wxCommandEvent& evt) +{ + hinge_15 = false; + + PopulateCanvas(); +} + +/** Override of TemplateCanvas method. */ +void ConditionalBoxPlotCanvas::update(HLStateInt* o) +{ + ResetBrushing(); + + layer1_valid = false; + Refresh(); +} + +wxString ConditionalBoxPlotCanvas::GetCanvasTitle() +{ + wxString v; + v << "Cond. Box Plot - "; + v << "x: " << GetNameWithTime(HOR_VAR); + v << ", y: " << GetNameWithTime(VERT_VAR); + v << ", Box plot: " << GetNameWithTime(BOX_VAR); + return v; +} + +wxString ConditionalBoxPlotCanvas::GetVariableNames() +{ + wxString v; + v << GetNameWithTime(BOX_VAR); + return v; +} + +void ConditionalBoxPlotCanvas::ResizeSelectableShps(int virtual_scrn_w, + int virtual_scrn_h) +{ + // NOTE: we do not support both fixed_aspect_ratio_mode + // and fit_to_window_mode being false currently. + int vs_w = virtual_scrn_w; + int vs_h = virtual_scrn_h; + + if (vs_w <= 0 && vs_h <= 0) { + GetVirtualSize(&vs_w, &vs_h); + } + + // last_scale_trans is only used in calls made to ApplyLastResizeToShp + // which are made in ScaterNewPlotView + GdaScaleTrans **st = new GdaScaleTrans*[vert_num_cats]; + for (int i=0; i v_brk_ref(n_rows); + std::vector h_brk_ref(n_cols); + + for (int row=0; rowapplyScaleTrans(background_st); + } + + // draw box plots in each cell + int t = var_info[BOX_VAR].time; + + // need to scale height data so that y_min and y_max are between 0 and 100 + double y_min = hinge_stats[0].min_val; + double y_max = hinge_stats[0].max_val; + for (int r=0; r y_max) y_max = ext_upper; + if (ext_lower < y_min) y_min = ext_lower; + ext_upper = (hinge_15 ? hinge_stats[h_idx].extreme_upper_val_15 : hinge_stats[h_idx].extreme_upper_val_30); + ext_lower = (hinge_15 ? hinge_stats[h_idx].extreme_lower_val_15 : hinge_stats[h_idx].extreme_lower_val_30); + if (ext_upper > y_max) y_max = ext_upper; + if (ext_lower < y_min) y_min = ext_lower; + } + } + double scaleY = 100.0 / (y_max-y_min); + axis_scale_y = AxisScale(y_min, y_max, 3, axis_display_precision, axis_display_fixed_point); + + // set box plot in each cell takes half the width + double box_width = del_width / 2.0; + int i=0; + for (int r=0; rapplyScaleTrans(st[r][c]); + foreground_shps.push_back(y_ax); + } + + // create boxplot in a cell + int h_idx = r*horiz_num_cats + c; + if (cell_data[h_idx].empty()) { + continue; // empty cell + } + double xM = left_pad_const + box_width; // center of cell + double x0r = xM - box_width/2.2; + double x1r = xM + box_width/2.2; + double x0 = xM - box_width/2.0; + double y0 = (hinge_15 ? hinge_stats[h_idx].extreme_lower_val_15 : hinge_stats[h_idx].extreme_lower_val_30); + double x1 = xM + box_width/2.0; + double y1 = (hinge_15 ? hinge_stats[h_idx].extreme_upper_val_15 : hinge_stats[h_idx].extreme_upper_val_30); + + s = new GdaPolyLine(xM-box_width/3.0, (y0-y_min)*scaleY, + xM+box_width/3.0, (y0-y_min)*scaleY); + s->applyScaleTrans(st[r][c]); + foreground_shps.push_back(s); + s = new GdaPolyLine(xM-box_width/3.0, (y1-y_min)*scaleY, + xM+box_width/3.0, (y1-y_min)*scaleY); + s->applyScaleTrans(st[r][c]); + foreground_shps.push_back(s); + s = new GdaPolyLine(xM, (y0-y_min)*scaleY, + xM, (y1-y_min)*scaleY); + s->applyScaleTrans(st[r][c]); + foreground_shps.push_back(s); + // mean circle + s = new GdaCircle(wxRealPoint(xM, (data_stats[h_idx].mean-y_min)*scaleY), 5.0); + s->setPen(selectable_fill_color); + s->setBrush(GdaConst::boxplot_mean_point_color); + s->applyScaleTrans(st[r][c]); + foreground_shps.push_back(s); + + double y0m = (hinge_stats[h_idx].Q2-y_min)*scaleY - 0.5; + double y1m = (hinge_stats[h_idx].Q2-y_min)*scaleY + 0.5; + s = new GdaRectangle(wxRealPoint(x0, y0m), wxRealPoint(x1, y1m)); + s->setPen(GdaConst::boxplot_median_color); + s->setBrush(GdaConst::boxplot_median_color); + s->applyScaleTrans(st[r][c]); + foreground_shps.push_back(s); + + // draw details in IQRs + for (int i=0; i hinge_stats[h_idx].Q3) { + s = new GdaPoint(xM, (val-y_min) * scaleY); + s->setPen(selectable_fill_color); + s->setBrush(*wxWHITE_BRUSH); + s->applyScaleTrans(st[r][c]); + selectable_shps[orig_idx] = s; + } else { + int prev = i - 1 < 0 ? i : i -1; + int next = i + 1 < data_sorted[h_idx].size() ? i + 1 : i; + y0 = (((data_sorted[h_idx][i].first + data_sorted[h_idx][prev].first)/2.0) - y_min)*scaleY; + y1 = (((data_sorted[h_idx][i].first + data_sorted[h_idx][next].first)/2.0) - y_min)*scaleY; + s= new GdaRectangle(wxRealPoint(x0r, y0), wxRealPoint(x1r, y1)); + s->setPen(GdaConst::boxplot_q1q2q3_color); + s->setBrush(GdaConst::boxplot_q1q2q3_color); + s->applyScaleTrans(st[r][c]); + selectable_shps[orig_idx] = s; + } + } + } + } + + layer0_valid = false; + Refresh(); + + for (int i=0; iGetStatusBar(); + if (!sb) return; + wxString s; + + const std::vector& hl = highlight_state->GetHighlight(); + + if (highlight_state->GetTotalHighlighted()> 0) { + int n_total_hl = highlight_state->GetTotalHighlighted(); + s << _("#selected=") << n_total_hl << " "; + } + + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << _("#hover obs ") << hover_obs[0]+1 << " = "; + s << data[BOX_VAR][var_info[BOX_VAR].time][hover_obs[0]]; + } + if (total_hover_obs >= 2) { + s << ", "; + s << _("obs ") << hover_obs[1]+1 << " = "; + s << data[BOX_VAR][var_info[BOX_VAR].time][hover_obs[1]]; + } + if (total_hover_obs >= 3) { + s << ", "; + s << _("obs ") << hover_obs[2]+1 << " = "; + s << data[BOX_VAR][var_info[BOX_VAR].time][hover_obs[2]]; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + sb->SetStatusText(s); +} + + +IMPLEMENT_CLASS(ConditionalBoxPlotFrame, ConditionalNewFrame) +BEGIN_EVENT_TABLE(ConditionalBoxPlotFrame, ConditionalNewFrame) + EVT_ACTIVATE(ConditionalBoxPlotFrame::OnActivate) +END_EVENT_TABLE() + +ConditionalBoxPlotFrame::ConditionalBoxPlotFrame(wxFrame *parent, + Project* project, + const std::vector& var_info, + const std::vector& col_ids, + const wxString& title, const wxPoint& pos, + const wxSize& size, const long style) +: ConditionalNewFrame(parent, project, var_info, col_ids, title, pos, + size, style) +{ + wxLogMessage("Open ConditionalBoxPlotFrame."); + int width, height; + GetClientSize(&width, &height); + + template_canvas = new ConditionalBoxPlotCanvas(this, this, project, + var_info, col_ids, + wxDefaultPosition, + wxSize(width,height)); + SetTitle(template_canvas->GetCanvasTitle()); + template_canvas->SetScrollRate(1,1); + DisplayStatusBar(true); + + Show(true); +} + +ConditionalBoxPlotFrame::~ConditionalBoxPlotFrame() +{ + DeregisterAsActive(); +} + +void ConditionalBoxPlotFrame::OnActivate(wxActivateEvent& event) +{ + if (event.GetActive()) { + RegisterAsActive("ConditionalBoxPlotFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) + template_canvas->SetFocus(); +} + +void ConditionalBoxPlotFrame::MapMenus() +{ + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + // Map Options Menus + wxMenu* optMenu = wxXmlResource::Get()->LoadMenu("ID_COND_BOXPLOT_VIEW_MENU_OPTIONS"); + ((ConditionalBoxPlotCanvas*)template_canvas)->AddTimeVariantOptionsToMenu(optMenu); + TemplateCanvas::AppendCustomCategories(optMenu, project->GetCatClassifManager()); + ((ConditionalBoxPlotCanvas*)template_canvas)->SetCheckMarks(optMenu); + GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); + UpdateOptionMenuItems(); + + // connect menu event handler + wxMenuItem* axes_menu = optMenu->FindItem(XRCID("ID_COND_BOXPLOT_SHOW_AXES")); + Connect(axes_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(ConditionalBoxPlotFrame::OnShowAxes)); + + wxMenuItem* hinge15_menu = optMenu->FindItem(XRCID("ID_BOXPLOT_HINGE15")); + Connect(hinge15_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(ConditionalBoxPlotFrame::OnHinge15)); + + wxMenuItem* hinge30_menu = optMenu->FindItem(XRCID("ID_BOXPLOT_HINGE30")); + Connect(hinge30_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(ConditionalBoxPlotFrame::OnHinge30)); +} + +void ConditionalBoxPlotFrame::OnShowAxes(wxCommandEvent& evt) +{ + ((ConditionalBoxPlotCanvas*)template_canvas)->OnShowAxes(evt); +} + +void ConditionalBoxPlotFrame::OnHinge15(wxCommandEvent& evt) +{ + ((ConditionalBoxPlotCanvas*)template_canvas)->OnHinge15(evt); +} + +void ConditionalBoxPlotFrame::OnHinge30(wxCommandEvent& evt) +{ + ((ConditionalBoxPlotCanvas*)template_canvas)->OnHinge30(evt); +} + +void ConditionalBoxPlotFrame::UpdateOptionMenuItems() +{ + TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu(_("Options")); + if (menu == wxNOT_FOUND) { + } else { + ((ConditionalBoxPlotCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void ConditionalBoxPlotFrame::UpdateContextMenuItems(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + +/** Implementation of TimeStateObserver interface */ +void ConditionalBoxPlotFrame::update(TimeState* o) +{ + template_canvas->TimeChange(); + UpdateTitle(); +} + +void ConditionalBoxPlotFrame::OnSaveCanvasImageAs(wxCommandEvent& event) +{ + if (!template_canvas) return; + wxString title = project->GetProjectTitle(); + GeneralWxUtils::SaveWindowAsImage(template_canvas, title); +} + diff --git a/Explore/ConditionalBoxPlotView.h b/Explore/ConditionalBoxPlotView.h new file mode 100644 index 000000000..6640ecbc6 --- /dev/null +++ b/Explore/ConditionalBoxPlotView.h @@ -0,0 +1,125 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_CONDITIONAL_BOX_PLOT_VIEW_H__ +#define __GEODA_CENTER_CONDITIONAL_BOX_PLOT_VIEW_H__ + +#include "../GenUtils.h" +#include "ConditionalNewView.h" + +class ConditionalBoxPlotFrame; +class ConditionalBoxPlotCanvas; + +class ConditionalBoxPlotCanvas : public ConditionalNewCanvas { + DECLARE_CLASS(ConditionalBoxPlotCanvas) +public: + + ConditionalBoxPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const std::vector& var_info, + const std::vector& col_ids, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~ConditionalBoxPlotCanvas(); + + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual wxString GetCanvasTitle(); + virtual wxString GetVariableNames(); + virtual void SetCheckMarks(wxMenu* menu); + virtual void update(HLStateInt* o); + virtual void ResizeSelectableShps(int virtual_scrn_w = 0, + int virtual_scrn_h = 0); + //virtual void UpdateSelection(bool shiftdown = false, + // bool pointsel = false); + + virtual void TimeSyncVariableToggle(int var_index); + + /// Override from TemplateCanvas + virtual void SetSelectableFillColor(wxColour color); + /// Override from TemplateCanvas + virtual void SetSelectableOutlineColor(wxColour color); + + virtual void UpdateStatusBar(); + + virtual void UserChangedCellCategories(); + + void OnShowAxes(wxCommandEvent& evt); + + void OnHinge15(wxCommandEvent& evt); + + void OnHinge30(wxCommandEvent& evt); + +protected: + virtual void PopulateCanvas(); + + void InitBoxPlot(); + + static const int BOX_VAR; // box variable + static const double left_pad_const; + + std::vector hinge_stats; + std::vector data_stats; + std::vector > cell_data; + std::vector > data_valid; + std::vector > data_sorted; + int max_plots; // min of time_steps and MAX_BOX_PLOTS + // 1 <= cur_num_plots <= max_plots <= MAX_BOX_PLOTS + int cur_num_plots; // number of plots actually shown + + bool hinge_15; + bool show_axes; + + AxisScale axis_scale_y; + GdaAxis* y_axis; + + DECLARE_EVENT_TABLE() +}; + + +class ConditionalBoxPlotFrame : public ConditionalNewFrame +{ + DECLARE_CLASS(ConditionalBoxPlotFrame) +public: + ConditionalBoxPlotFrame(wxFrame *parent, Project* project, + const std::vector& var_info, + const std::vector& col_ids, + const wxString& title = _("Conditional Box Plot"), + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + const long style = wxDEFAULT_FRAME_STYLE); + virtual ~ConditionalBoxPlotFrame(); + + void OnActivate(wxActivateEvent& event); + virtual void MapMenus(); + virtual void UpdateOptionMenuItems(); + virtual void UpdateContextMenuItems(wxMenu* menu); + + /** Implementation of TimeStateObserver interface */ + virtual void update(TimeState* o); + + virtual void OnSaveCanvasImageAs(wxCommandEvent& event); + + void OnShowAxes(wxCommandEvent& evt); + void OnHinge15(wxCommandEvent& evt); + void OnHinge30(wxCommandEvent& evt); + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/Explore/ConditionalClusterMapView.cpp b/Explore/ConditionalClusterMapView.cpp index f1665b69a..b0b422bd2 100644 --- a/Explore/ConditionalClusterMapView.cpp +++ b/Explore/ConditionalClusterMapView.cpp @@ -421,20 +421,22 @@ void ConditionalClusterMapCanvas::ResizeSelectableShps(int virtual_scrn_w, BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } foreground_shps.clear(); - + + bool is_vert_number = VERT_VAR_NUM && cat_classif_def_vert.cat_classif_type != CatClassification::unique_values; + bool is_horz_number = HOR_VAR_NUM && cat_classif_def_horiz.cat_classif_type != CatClassification::unique_values; double bg_xmin = marg_left; double bg_xmax = scn_w-marg_right; double bg_ymin = marg_bottom; double bg_ymax = scn_h-marg_top; - int n_rows = VERT_VAR_NUM ? vert_num_cats-1 : vert_num_cats; - int n_cols = HOR_VAR_NUM ? horiz_num_cats-1 : horiz_num_cats; + int n_rows = is_vert_number ? vert_num_cats-1 : vert_num_cats; + int n_cols = is_horz_number ? horiz_num_cats-1 : horiz_num_cats; vector v_brk_ref(n_rows); vector h_brk_ref(n_cols); for (int row=0; row v_brk_ref(n_rows); vector h_brk_ref(n_cols); for (int row=0; row::iterator it=foreground_shps.begin(); bg_shp_i < bg_shp_cnt && it != foreground_shps.end(); @@ -956,8 +961,8 @@ void ConditionalHistogramCanvas::sel_shp_to_cell_gen(int i, int cols, int ivals) { int t = cols*ivals; - r = i/t; - t = i%t; + r = t > 0 ? i/t : 0; + t = t > 0 ? i%t : i; c = t/ivals; ival = t%ivals; } diff --git a/Explore/ConditionalMapView.cpp b/Explore/ConditionalMapView.cpp index 717a2480d..5ce4354f9 100644 --- a/Explore/ConditionalMapView.cpp +++ b/Explore/ConditionalMapView.cpp @@ -384,8 +384,7 @@ void ConditionalMapCanvas::NewCustomCatClassifMap() /** This method initializes data array according to values in var_info and col_ids. It calls CreateAndUpdateCategories which does all of the category classification. */ -void ConditionalMapCanvas::ChangeCatThemeType( - CatClassification::CatClassifType new_cat_theme, +void ConditionalMapCanvas::ChangeCatThemeType(CatClassification::CatClassifType new_cat_theme, int num_categories_s, const wxString& custom_classif_title) { @@ -585,20 +584,22 @@ void ConditionalMapCanvas::ResizeSelectableShps(int virtual_scrn_w, BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } foreground_shps.clear(); - - double bg_xmin = marg_left; + + bool is_vert_number = VERT_VAR_NUM && cat_classif_def_vert.cat_classif_type != CatClassification::unique_values; + bool is_horz_number = HOR_VAR_NUM && cat_classif_def_horiz.cat_classif_type != CatClassification::unique_values; + double bg_xmin = marg_left; double bg_xmax = scn_w-marg_right; double bg_ymin = marg_bottom; double bg_ymax = scn_h-marg_top; - int n_rows = VERT_VAR_NUM ? vert_num_cats-1 : vert_num_cats; - int n_cols = HOR_VAR_NUM ? horiz_num_cats-1 : horiz_num_cats; + int n_rows = is_vert_number ? vert_num_cats-1 : vert_num_cats; + int n_cols = is_horz_number ? horiz_num_cats-1 : horiz_num_cats; vector v_brk_ref(n_rows); vector h_brk_ref(n_cols); for (int row=0; row v_brk_ref(vert_num_cats-1); - std::vector h_brk_ref(horiz_num_cats-1); - - for (int row=0; row v_brk_ref(n_rows); + std::vector h_brk_ref(n_cols); + + for (int row=0; rowapplyScaleTrans(st[row_c][col_c]); } - isResize = true; layer0_valid = false; Refresh(); diff --git a/Explore/ConnectivityHistView.cpp b/Explore/ConnectivityHistView.cpp index 2b69dcccd..801751ea6 100644 --- a/Explore/ConnectivityHistView.cpp +++ b/Explore/ConnectivityHistView.cpp @@ -116,10 +116,12 @@ void ConnectivityHistCanvas::DisplayRightClickMenu(const wxPoint& pos) optMenu = wxXmlResource::Get()-> LoadMenu("ID_CONNECTIVITY_HIST_VIEW_MENU_OPTIONS"); SetCheckMarks(optMenu); - - template_frame->UpdateContextMenuItems(optMenu); - template_frame->PopupMenu(optMenu, cp_pos + GetPosition()); - template_frame->UpdateOptionMenuItems(); + + if (template_frame) { + template_frame->UpdateContextMenuItems(optMenu); + template_frame->PopupMenu(optMenu, cp_pos + GetPosition()); + template_frame->UpdateOptionMenuItems(); + } } void ConnectivityHistCanvas::SetCheckMarks(wxMenu* menu) diff --git a/Explore/ConnectivityMapView.cpp b/Explore/ConnectivityMapView.cpp index 46bd60c2b..304526970 100644 --- a/Explore/ConnectivityMapView.cpp +++ b/Explore/ConnectivityMapView.cpp @@ -119,7 +119,7 @@ void ConnectivityMapCanvas::OnMouseEvent(wxMouseEvent& event) } else if (brushtype == line) { brush_shape = new GdaPolyLine(sel1, sel2); } - if (brush_shape->Contains(prev)) { + if (brush_shape && brush_shape->Contains(prev)) { // brushing is_brushing = true; remember_shiftdown = false; // brush will cancel shift @@ -246,6 +246,11 @@ void ConnectivityMapCanvas::OnMouseEvent(wxMouseEvent& event) // all GdaShape selectable objects. void ConnectivityMapCanvas::UpdateSelection(bool shiftdown, bool pointsel) { + // notify other windows to update + is_updating = false; + // clean any select_with_neighbor since it's users operation + select_with_neighbor.clear(); + size_t sel_shps_sz = selectable_shps.size(); sel_cores.clear(); diff --git a/Explore/CorrelParamsDlg.cpp b/Explore/CorrelParamsDlg.cpp index 651758c8e..765bf4cf2 100644 --- a/Explore/CorrelParamsDlg.cpp +++ b/Explore/CorrelParamsDlg.cpp @@ -209,7 +209,7 @@ help_btn(0), apply_btn(0) wxBoxSizer* random_opt_h_szr = new wxBoxSizer(wxHORIZONTAL); { - wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use specified seed:"), + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:"), wxDefaultPosition, wxSize(128,-1)); wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); chk_seed = new wxCheckBox(panel, wxID_ANY, ""); diff --git a/Explore/DistancePlotView.cpp b/Explore/DistancePlotView.cpp new file mode 100644 index 000000000..ab92f4050 --- /dev/null +++ b/Explore/DistancePlotView.cpp @@ -0,0 +1,985 @@ +#include +#include +#include + +#include "../Project.h" +#include "../HighlightState.h" +#include"../DataViewer/TableInterface.h" +#include "../ShapeOperations/OGRDataAdapter.h" +#include "../DialogTools/AdjustYAxisDlg.h" +#include "../Algorithms/distanceplot.h" +#include "../Explore/DistancePlotView.h" +#include "../GeneralWxUtils.h" +#include "../GenUtils.h" +#include "../GeoDa.h" +#include "LoessPlotCanvas.h" +#include "SimpleScatterPlotCanvas.h" +#include "DistancePlotView.h" + +IMPLEMENT_CLASS(DistancePlotCanvas, LoessPlotCanvas) +BEGIN_EVENT_TABLE(DistancePlotCanvas, LoessPlotCanvas) +END_EVENT_TABLE() + +const int DistancePlotCanvas::default_style = LoessPlotCanvas::DEFAULT_STYLE | +LoessPlotCanvas::show_axes | LoessPlotCanvas::show_lowess_smoother; + +DistancePlotCanvas::DistancePlotCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undef, + const std::vector& Y_undef, + double x_min, double x_max, + double y_min, double y_max, + const wxString& X_label, + const wxString& Y_label, + const wxPoint& pos, + const wxSize& size) +: LoessPlotCanvas(parent, t_frame, project, project->GetHighlightState(), + X, Y, X_undef, Y_undef, X_label, Y_label, default_style, + "ID_DISTPLOT_MENU_OPTIONS", "", pos, size), +use_def_y_range(false),prev_y_axis_min(DBL_MIN), prev_y_axis_max(DBL_MAX) +{ + +} + +DistancePlotCanvas::~DistancePlotCanvas() +{ + +} + +void DistancePlotCanvas::DisplayRightClickMenu(const wxPoint& pos) +{ + wxMenu* optMenu; + optMenu = wxXmlResource::Get()->LoadMenu("ID_DISTPLOT_MENU_OPTIONS"); + if (!optMenu) return; + + template_frame->UpdateContextMenuItems(optMenu); + + SetCheckMarks(optMenu); + template_frame->UpdateOptionMenuItems(); + + wxMenuItem* save_menu = optMenu->FindItem(XRCID("ID_SAVE_DISTPLOT")); + Connect(save_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnSaveResult)); + + wxMenuItem* toggle_menu = optMenu->FindItem(XRCID("ID_DISTPLOT_SHOW_POINTS")); + Connect(toggle_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnToggleDataPoints)); + + //Connect(XRCID("ID_DISTPLOT_SHOW_CONFIDENCE_INTERVAL"), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnToggleConfidenceInterval)); + + Connect(XRCID("ID_EDIT_LOESS_PARAMS"), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnEditLoess)); + + Connect(XRCID("ID_USE_ADJUST_Y_AXIS"), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnUseAdjustYAxis)); + Connect(XRCID("ID_ADJUST_Y_AXIS"), wxEVT_MENU, wxCommandEventHandler(DistancePlotCanvas::OnAdjustYAxis)); + + PopupMenu(optMenu, pos); +} + +void DistancePlotCanvas::OnUseAdjustYAxis(wxCommandEvent& event) +{ + if (use_def_y_range == false) { + use_def_y_range = true; + OnAdjustYAxis(event); + + } else { + use_def_y_range = false; + def_y_min = ""; + def_y_max = ""; + invalidateBms(); + PopulateCanvas(); + Refresh(); + } +} + +void DistancePlotCanvas::OnAdjustYAxis(wxCommandEvent& event) +{ + double y_axis_min = axis_scale_y.scale_min; + double y_axis_max = axis_scale_y.scale_max; + + AdjustYAxisDlg dlg(y_axis_min, y_axis_max, this); + if (dlg.ShowModal () != wxID_OK) + return; + + def_y_min = dlg.s_min_val; + def_y_max = dlg.s_max_val; + + invalidateBms(); + PopulateCanvas(); + Refresh(); +} + +void DistancePlotCanvas::OnSaveResult(wxCommandEvent& event) +{ + wxString wildcard = _("CSV files (*.csv)|*.csv"); + wxString defaultFile(project->GetProjectTitle()); + defaultFile += "_dist.csv"; + + wxString working_dir = project->GetWorkingDir().GetPath(); + wxFileDialog dlg(this, _("Save to a csv file."), + working_dir, defaultFile, wildcard, + wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + + wxString ofn; + if (dlg.ShowModal() != wxID_OK) return; + wxFile file( dlg.GetPath(), wxFile::write ); + if( file.IsOpened() ) { + file.Write( "geo_distance, var_distance\n"); + for (size_t i=0; i< X.size(); ++i) { + file.Write(wxString::Format("%f,%f\n", X[i], Y[i])); + } + file.Close(); + } +} + +void DistancePlotCanvas::OnToggleDataPoints(wxCommandEvent& event) +{ + if (style & show_data_points) { + style = style & (~show_data_points); + } else { + style = style | show_data_points; + } + PopulateCanvas(); +} + +void DistancePlotCanvas::OnToggleConfidenceInterval(wxCommandEvent& event) +{ + if (style & show_confidence_interval) { + style = style & (~show_confidence_interval); + } else { + style = style | show_confidence_interval; + } + PopulateCanvas(); +} + + +void DistancePlotCanvas::SetCheckMarks(wxMenu* menu) +{ + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_DISTPLOT_SHOW_POINTS"), style & show_data_points); + //GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_DISTPLOT_SHOW_CONFIDENCE_INTERVAL"), style & show_confidence_interval); + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_USE_ADJUST_Y_AXIS"), use_def_y_range); +} + +IMPLEMENT_CLASS(DistancePlotFrame, TemplateFrame) +BEGIN_EVENT_TABLE(DistancePlotFrame, TemplateFrame) +EVT_ACTIVATE(DistancePlotFrame::OnActivate) +END_EVENT_TABLE() + +DistancePlotFrame::DistancePlotFrame(wxFrame *parent, Project* project, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undef, + const std::vector& Y_undef, + double x_min, double x_max, + double y_min, double y_max, + const wxString& X_label, + const wxString& Y_label, + const wxString& title, + const wxPoint& pos, const wxSize& size, + const long style) +: TemplateFrame(parent, project, title, pos, size, style) +{ + int width, height; + GetClientSize(&width, &height); + wxSplitterWindow* splitter_win = 0; + + wxPanel* panel = new wxPanel(this); + panel->SetBackgroundColour(*wxWHITE); + SetBackgroundColour(*wxWHITE); + panel->Bind(wxEVT_MOTION, &DistancePlotFrame::OnMouseEvent, this); + + template_canvas = new DistancePlotCanvas(panel, this, project, X, Y, + X_undef, Y_undef, + x_min, x_max, y_min, y_max, X_label, + Y_label); + + wxBoxSizer* bag_szr = new wxBoxSizer(wxHORIZONTAL); + bag_szr->Add(template_canvas, 1, wxEXPAND); + + wxBoxSizer* panel_v_szr = new wxBoxSizer(wxVERTICAL); + panel_v_szr->Add(bag_szr, 1, wxEXPAND); + + panel->SetSizer(panel_v_szr); + + wxBoxSizer* top_h_sizer = new wxBoxSizer(wxHORIZONTAL); + top_h_sizer->Add(panel, 1, wxEXPAND|wxALL, 8); + + SetSizer(top_h_sizer); + + //template_canvas->SetScrollRate(1,1); + DisplayStatusBar(true); + + Show(true); +} + +DistancePlotFrame::~DistancePlotFrame() +{ + DeregisterAsActive(); +} + +void DistancePlotFrame::OnMouseEvent(wxMouseEvent& event) +{ + if (event.RightDown()) { + const wxPoint& pos = event.GetPosition(); + // Workaround for right-click not changing window focus in OSX / wxW 3.0 + wxActivateEvent ae(wxEVT_NULL, true, 0, wxActivateEvent::Reason_Mouse); + OnActivate(ae); + + OnRightClick(pos); + } +} + +void DistancePlotFrame::OnActivate(wxActivateEvent& event) +{ + if (event.GetActive()) { + RegisterAsActive("DistancePlotFrame", GetTitle()); + } + if ( event.GetActive() && template_canvas ) template_canvas->SetFocus(); +} + +void DistancePlotFrame::OnRightClick(const wxPoint& pos) +{ + wxMenu* optMenu; + optMenu = wxXmlResource::Get()->LoadMenu("ID_DISTPLOT_MENU_OPTIONS"); + if (!optMenu) return; + + UpdateContextMenuItems(optMenu); + + PopupMenu(optMenu, pos); + UpdateOptionMenuItems(); + + wxMenuItem* save_menu = optMenu->FindItem(XRCID("ID_SAVE_DISTPLOT")); + //Connect(save_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(CorrelogramFrame::OnSaveResult)); +} + +void DistancePlotFrame::UpdateOptionMenuItems() +{ + //TemplateFrame::UpdateOptionMenuItems(); // set common items first + wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); + int menu = mb->FindMenu(_("Options")); + if (menu != wxNOT_FOUND) { + DistancePlotFrame::UpdateContextMenuItems(mb->GetMenu(menu)); + ((DistancePlotCanvas*)template_canvas)->SetCheckMarks(mb->GetMenu(menu)); + } +} + +void DistancePlotFrame::UpdateContextMenuItems(wxMenu* menu) +{ + // Update the checkmarks and enable/disable state for the + // following menu items if they were specified for this particular + // view in the xrc file. Items that cannot be enable/disabled, + // or are not checkable do not appear. + TemplateFrame::UpdateContextMenuItems(menu); // set common items +} + + +/////////////////////////////////////////////////////////////////////////// +BEGIN_EVENT_TABLE( DistancePlotDlg, wxDialog ) +EVT_CLOSE( DistancePlotDlg::OnClose ) +END_EVENT_TABLE() + +DistancePlotDlg::DistancePlotDlg(wxFrame* parent, Project* project) +: AbstractClusterDlg(parent, project, _("Distance Scatter Plot")) +{ + CreateControls(); +} + +DistancePlotDlg::~DistancePlotDlg() +{ + +} + +void DistancePlotDlg::CreateControls() +{ + wxPanel* panel = new wxPanel(this); + //panel->SetBackgroundColour(*wxWHITE); + + // label & listbox + wxStaticText* var_st = new wxStaticText (panel, wxID_ANY, + _("Select Variables (Multi-Selection)"), + wxDefaultPosition, wxDefaultSize); + + combo_var = new wxListBox(panel, wxID_ANY, wxDefaultPosition, + wxSize(320,200), 0, NULL, + wxLB_MULTIPLE | wxLB_HSCROLL| wxLB_NEEDED_SB); + + // variable distance + vardist_txt = new wxStaticText(panel, XRCID("ID_VARDIST_TXT"), _("Variable Distance:")); + vardist_choice = new wxChoice(panel, XRCID("ID_VARDIST_CHOICE"), + wxDefaultPosition, wxSize(160,-1)); + vardist_choice->Append("Euclidean Distance"); + vardist_choice->Append("Manhatten Distance"); + vardist_choice->SetSelection(0); + + wxBoxSizer* vardist_h_szr = new wxBoxSizer(wxHORIZONTAL); + vardist_h_szr->Add(vardist_txt, 0, wxALIGN_CENTER_VERTICAL); + vardist_h_szr->AddSpacer(5); + vardist_h_szr->Add(vardist_choice, 0, wxALIGN_CENTER_VERTICAL); + + dist_txt = new wxStaticText(panel, XRCID("ID_DIST_TXT"), _("Geographic Distance:")); + dist_choice = new wxChoice(panel, XRCID("ID_DIST_CHOICE"), + wxDefaultPosition, wxSize(160,-1)); + dist_choice->Append("Euclidean Distance"); + dist_choice->Append("Arc Distance (mi)"); + dist_choice->Append("Arc Distance (km)"); + dist_choice->SetSelection(0); + + wxBoxSizer* dist_h_szr = new wxBoxSizer(wxHORIZONTAL); + dist_h_szr->Add(dist_txt, 0, wxALIGN_CENTER_VERTICAL); + dist_h_szr->AddSpacer(5); + dist_h_szr->Add(dist_choice, 0, wxALIGN_CENTER_VERTICAL); + + Connect(XRCID("ID_DIST_CHOICE"), wxEVT_CHOICE, + wxCommandEventHandler(DistancePlotDlg::OnDistanceChoiceSelected)); + + // distance + thresh_cbx = new wxCheckBox(panel, XRCID("ID_THRESH_CBX"), _("Max Distance:")); + thresh_cbx->SetValue(true); + maxdist_choice = new wxChoice(panel, XRCID("ID_MAXDIST_CHOICE"), + wxDefaultPosition, wxSize(160,-1)); + maxdist_choice->Append("Maximum pairwise distance"); + maxdist_choice->Append("1/2 diagonal of bounding box"); + + size_t nobs = project->GetNumRecords(); + if (nobs < 10000) maxdist_choice->SetSelection(0); + else maxdist_choice->SetSelection(1); + + maxdist_choice->Bind(wxEVT_CHOICE, &DistancePlotDlg::OnMaxDistMethodChoice, this); + Connect(XRCID("ID_THRESH_CBX"), wxEVT_CHECKBOX, + wxCommandEventHandler(DistancePlotDlg::OnThreshCheckBox)); + Connect(XRCID("ID_THRESH_TCTRL"), wxEVT_TEXT_ENTER, + wxCommandEventHandler(DistancePlotDlg::OnThreshTextCtrl)); + + wxBoxSizer* thresh_h_szr = new wxBoxSizer(wxHORIZONTAL); + thresh_h_szr->Add(thresh_cbx, 0, wxALIGN_CENTER_VERTICAL); + thresh_h_szr->AddSpacer(5); + thresh_h_szr->Add(maxdist_choice, 0, wxALIGN_CENTER_VERTICAL); + + + thresh_tctrl = new wxTextCtrl(panel, XRCID("ID_THRESH_TCTRL"), "", + wxDefaultPosition, wxSize(100,-1), + wxTE_PROCESS_ENTER); + thresh_tctrl->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + thresh_tctrl->Enable(false); + thresh_tctrl->Bind(wxEVT_TEXT_ENTER, &DistancePlotDlg::OnMaxDistanceTextCtrl, this); + + thresh_slider = new wxSlider(panel, XRCID("ID_THRESH_SLDR"), + sldr_tcks/2, 0, sldr_tcks, + wxDefaultPosition, wxSize(180,-1)); + Connect(XRCID("ID_THRESH_SLDR"), wxEVT_SLIDER, + wxCommandEventHandler(DistancePlotDlg::OnThreshSlider)); + thresh_slider->Enable(false); + + UpdateThreshTctrlVal(); + + wxBoxSizer* thresh_sld_h_szr = new wxBoxSizer(wxHORIZONTAL); + thresh_sld_h_szr->AddSpacer(18); + thresh_sld_h_szr->Add(thresh_slider, 0, wxALIGN_CENTER_VERTICAL); + thresh_sld_h_szr->Add(thresh_tctrl, 0, wxALIGN_CENTER_VERTICAL); + + wxBoxSizer* thresh_v_szr = new wxBoxSizer(wxVERTICAL); + thresh_v_szr->Add(thresh_h_szr, 0, wxBOTTOM, 5); + thresh_v_szr->Add(thresh_sld_h_szr, 0, wxALIGN_CENTER_HORIZONTAL); + + all_pairs_rad = new wxRadioButton(panel, XRCID("ID_ALL_PAIRS_RAD"), + _("All Pairs"), wxDefaultPosition, + wxDefaultSize, + wxALIGN_CENTER_VERTICAL | wxRB_GROUP); + all_pairs_rad->SetValue(true); + Connect(XRCID("ID_ALL_PAIRS_RAD"), wxEVT_RADIOBUTTON, + wxCommandEventHandler(DistancePlotDlg::OnAllPairsRadioSelected)); + + est_pairs_txt = new wxStaticText(panel, XRCID("ID_EST_PAIRS_TXT"), + _("Estimated Pairs:")); + est_pairs_num_txt = new wxStaticText(panel, XRCID("ID_EST_PAIRS_NUM_TXT"), + "4,000,000"); + wxBoxSizer* est_pairs_h_szr = new wxBoxSizer(wxHORIZONTAL); + est_pairs_h_szr->Add(est_pairs_txt, 0, wxALIGN_CENTER_VERTICAL); + est_pairs_h_szr->AddSpacer(5); + est_pairs_h_szr->Add(est_pairs_num_txt, 0, wxALIGN_CENTER_VERTICAL); + wxBoxSizer* all_pairs_v_szr = new wxBoxSizer(wxVERTICAL); + all_pairs_v_szr->Add(all_pairs_rad); + all_pairs_v_szr->AddSpacer(2); + all_pairs_v_szr->Add(est_pairs_h_szr, 0, wxLEFT, 18); + + rand_samp_rad = new wxRadioButton(panel, XRCID("ID_RAND_SAMP_RAD"), + _("Random Sample"), wxDefaultPosition, + wxDefaultSize, wxALIGN_CENTER_VERTICAL); + rand_samp_rad->SetValue(false); + Connect(XRCID("ID_RAND_SAMP_RAD"), wxEVT_RADIOBUTTON, + wxCommandEventHandler(DistancePlotDlg::OnRandSampRadioSelected)); + max_iter_txt = new wxStaticText(panel, XRCID("ID_MAX_ITER_TXT"), + _("Sample Size:")); + { + size_t max_pairs = (nobs*(nobs-1))/2; + + wxString max_iterations; + if (max_pairs > 1000000) + max_iterations = "1000000"; + else + max_iterations << max_pairs; + max_iter_tctrl = new wxTextCtrl(panel, XRCID("ID_MAX_ITER_TCTRL"), + max_iterations, wxDefaultPosition, + wxSize(100,-1), wxTE_PROCESS_ENTER); + max_iter_tctrl->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + Connect(XRCID("ID_MAX_ITER_TCTRL"), wxEVT_TEXT_ENTER, + wxCommandEventHandler(DistancePlotDlg::OnMaxIterTextCtrl)); + } + wxBoxSizer* max_iter_h_szr = new wxBoxSizer(wxHORIZONTAL); + max_iter_h_szr->Add(max_iter_txt, 0, wxALIGN_CENTER_VERTICAL); + max_iter_h_szr->AddSpacer(8); + max_iter_h_szr->Add(max_iter_tctrl, 0, wxALIGN_CENTER_VERTICAL); + + wxBoxSizer* random_opt_h_szr = new wxBoxSizer(wxHORIZONTAL); + { + wxStaticText* st17 = new wxStaticText(panel, wxID_ANY, _("Use Specified Seed:"), + wxDefaultPosition, wxSize(128,-1)); + wxBoxSizer *hbox17 = new wxBoxSizer(wxHORIZONTAL); + chk_seed = new wxCheckBox(panel, wxID_ANY, ""); + seedButton = new wxButton(panel, wxID_OK, _("Change"), wxDefaultPosition, wxSize(64, -1)); + random_opt_h_szr->Add(st17, 0, wxALIGN_CENTER_VERTICAL); + random_opt_h_szr->Add(chk_seed,0, wxALIGN_CENTER_VERTICAL); + random_opt_h_szr->Add(seedButton, 0, wxALIGN_CENTER_VERTICAL); + if (GdaConst::use_gda_user_seed) { + chk_seed->SetValue(true); + seedButton->Enable(); + } + chk_seed->Bind(wxEVT_CHECKBOX, &DistancePlotDlg::OnSeedCheck, this); + seedButton->Bind(wxEVT_BUTTON, &DistancePlotDlg::OnChangeSeed, this); + } + + wxBoxSizer* rand_samp_v_szr = new wxBoxSizer(wxVERTICAL); + rand_samp_v_szr->Add(rand_samp_rad,0, wxLEFT, 2); + rand_samp_v_szr->AddSpacer(2); + rand_samp_v_szr->Add(max_iter_h_szr, 0, wxLEFT, 12); + rand_samp_v_szr->Add(random_opt_h_szr, 0, wxLEFT, 12); + + help_btn = new wxButton(panel, XRCID("ID_CANCEL_BTN"), _("Cancel"), + wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); + apply_btn = new wxButton(panel, XRCID("ID_APPLY_BTN"), _("Apply"), + wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); + + Connect(XRCID("ID_CANCEL_BTN"), wxEVT_BUTTON, + wxCommandEventHandler(DistancePlotDlg::OnCancelBtn)); + Connect(XRCID("ID_APPLY_BTN"), wxEVT_BUTTON, + wxCommandEventHandler(DistancePlotDlg::OnOK)); + + wxBoxSizer* btns_h_szr = new wxBoxSizer(wxHORIZONTAL); + btns_h_szr->Add(help_btn, 0, wxALIGN_CENTER_VERTICAL); + btns_h_szr->AddSpacer(15); + btns_h_szr->Add(apply_btn, 0, wxALIGN_CENTER_VERTICAL); + + UpdateEstPairs(); + + // Arrange above widgets in panel using sizers. + // Top level panel sizer will be panel_h_szr + // Below that will be panel_v_szr + // panel_v_szr will directly receive widgets + + wxBoxSizer* panel_v_szr = new wxBoxSizer(wxVERTICAL); + panel_v_szr->Add(var_st, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + panel_v_szr->Add(combo_var, 1, wxALL|wxEXPAND, 5); + panel_v_szr->AddSpacer(2); + panel_v_szr->Add(vardist_h_szr, 0, wxALIGN_LEFT|wxALL, 5); + panel_v_szr->AddSpacer(5); + panel_v_szr->Add(dist_h_szr, 0, wxALIGN_LEFT|wxALL, 5); + panel_v_szr->AddSpacer(2); + panel_v_szr->Add(thresh_v_szr, 0, wxALIGN_LEFT|wxALL, 5); + panel_v_szr->Add(all_pairs_v_szr, 0, wxALIGN_LEFT|wxALL, 5); + panel_v_szr->AddSpacer(5); + panel_v_szr->Add(rand_samp_v_szr, 0, wxALIGN_LEFT|wxALL, 5); + panel_v_szr->AddSpacer(10); + panel_v_szr->Add(btns_h_szr, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + wxBoxSizer* panel_h_szr = new wxBoxSizer(wxHORIZONTAL); + panel_h_szr->Add(panel_v_szr, 1, wxEXPAND); + panel->SetSizer(panel_h_szr); + + // Top Sizer for Frame + wxBoxSizer* top_h_sizer = new wxBoxSizer(wxHORIZONTAL); + top_h_sizer->Add(panel, 1, wxEXPAND|wxALL, 8); + + SetSizerAndFit(top_h_sizer); + + InitVariableCombobox(combo_var); + + wxCommandEvent ev; + if (project->GetNumRecords() > 5000) + OnRandSampRadioSelected(ev); + else + OnAllPairsRadioSelected(ev); + OnThreshCheckBox(ev); + + Centre(); +} + +void DistancePlotDlg::InitVariableCombobox(wxListBox* var_box) +{ + var_box->Clear(); + wxArrayString var_items; + + std::vector col_id_map; + TableInterface* table_int = project->GetTableInt(); + table_int->FillNumericColIdMap(col_id_map); + for (int i=0, iend=col_id_map.size(); iGetColName(id); + if (table_int->IsColTimeVariant(id)) { + for (int t=0; tGetColTimeSteps(id); t++) { + wxString nm = name; + nm << " (" << table_int->GetTimeString(t) << ")"; + name_to_nm[nm] = name; + name_to_tm_id[nm] = t; + var_items.Add(nm); + } + } else { + name_to_nm[name] = name; + name_to_tm_id[name] = 0; + var_items.Add(name); + } + } + if (!var_items.IsEmpty()) { + var_box->InsertItems(var_items,0); + } +} + +void DistancePlotDlg::GetSelectedVariables(wxListBox* var_box, + std::vector >& data, + std::vector >& data_undefs) +{ + wxArrayInt selections; + combo_var->GetSelections(selections); + int num_var = selections.size(); + + data.resize(num_var); + data_undefs.resize(num_var); + + TableInterface* table_int = project->GetTableInt(); + + for (int i=0; iGetString(idx); + //select_vars.push_back(sel_str); + wxString nm = name_to_nm[sel_str]; + int col = table_int->FindColId(nm); + if (col == wxNOT_FOUND) { + wxString err_msg = wxString::Format(_("Variable %s is no longer in the Table. Please close and reopen this dialog to synchronize with Table data."), nm); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + int tm = name_to_tm_id[combo_var->GetString(idx)]; + table_int->GetColData(col, tm, data[i]); + table_int->GetColUndefined(col, tm, data_undefs[i]); + GenUtils::StandardizeData(data[i], data_undefs[i]); + } +} + +wxString DistancePlotDlg::_printConfiguration() +{ + return ""; +} + + +void DistancePlotDlg::OnCancelBtn(wxCommandEvent &ev) +{ + ev.Skip(); + EndDialog(wxID_CANCEL); + Destroy(); +} + +void DistancePlotDlg::OnClose(wxCloseEvent& ev) +{ + wxLogMessage("Close DistancePlotDlg"); + // Note: it seems that if we don't explictly capture the close event + // and call Destory, then the destructor is not called. + Destroy(); +} + +void DistancePlotDlg::OnOK(wxCommandEvent &ev) +{ + bool is_all_pairs = all_pairs_rad->GetValue(); + bool is_threshold = thresh_cbx->GetValue(); + bool reuse_last_seed = chk_seed->GetValue(); + uint64_t last_seed_used = GdaConst::gda_user_seed; + + const std::vector& centroids = project->GetCentroids(); + std::vector > data; + std::vector > data_undefs; + GetSelectedVariables(combo_var, data, data_undefs); + + if (data.size() == 0) { + wxString err_msg = _("Please select more than one variable."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + wxString val = thresh_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + double thres; + bool is_valid = val.ToDouble(&thres); + if (is_threshold && !is_valid) { + wxString err_msg = _("Please input a valid numeric value for max distance."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + val = max_iter_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + long num_rand; + is_valid = val.ToLong(&num_rand); + if (!is_all_pairs && !is_valid) { + wxString err_msg = _("Please input a valid numeric value for sample size."); + wxMessageDialog dlg(NULL, err_msg, _("Error"), + wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + char vardist_method = vardist_choice->GetSelection()==0 ? 'e' : 'm'; + + distplot = new DistancePlot(centroids, data, data_undefs, vardist_method, + IsArc(), IsMi(), last_seed_used, reuse_last_seed); + + str_threshold = ""; + title = _("Distance Scatter Plot: "); + wxArrayInt selections; + combo_var->GetSelections(selections); + for (size_t i=0; iGetString(selections[i]); + title << sel_str; + if (i run(); + } else { + // threshold + str_threshold << thres; + if (dist_choice->GetSelection()==0) { + rtree_pt_2d_t& rtree = project->GetEucPlaneRtree(); + distplot->run(rtree, thres); + } else { + rtree_pt_3d_t& rtree = project->GetUnitSphereRtree(); + distplot->run(rtree, thres); + } + } + + } else { + // random + distplot->run(true, num_rand); + } + + const std::vector& X = distplot->GetX(); + const std::vector& Y = distplot->GetY(); + const std::vector& X_undefs = distplot->GetXUndefs(); + const std::vector& Y_undefs = distplot->GetYUndefs(); + double x_min = distplot->GetMinX(); + double x_max = distplot->GetMaxX(); + double y_min = distplot->GetMinY(); + double y_max = distplot->GetMaxY(); + + wxString X_label = _("Geographical distance"); + if (!str_threshold.IsEmpty()) + X_label << ": threshold=" << str_threshold; + if (distplot->IsArc() && distplot->IsMile()) + X_label << " (mile)"; + else if (distplot->IsArc() && !distplot->IsMile()) + X_label << " (km)"; + wxString Y_label = _("Variable distance"); + if (distplot->DistMethod() == 'e') + Y_label << " (Euclidean)"; + else if (distplot->DistMethod() == 'm') + Y_label << " (Manhanttan)"; + + wxString win_title = title; + win_title << " (" << X.size() << " data points)"; + DistancePlotFrame* f = new DistancePlotFrame(parent, project, + X, Y, X_undefs, Y_undefs, + x_min, x_max, + y_min, y_max, + X_label, Y_label, win_title); + delete distplot; +} + +DistancePlot* DistancePlotDlg::GetDistancePlot() +{ + return distplot; +} + +void DistancePlotDlg::OnDistanceChoiceSelected(wxCommandEvent& ev) +{ + UpdateThreshTctrlVal(); + ev.Skip(); +} + +void DistancePlotDlg::OnAllPairsRadioSelected(wxCommandEvent &ev) { + all_pairs_rad->SetValue(true); + est_pairs_txt->Enable(true); + est_pairs_num_txt->Enable(true); + rand_samp_rad->SetValue(false); + max_iter_txt->Enable(false); + max_iter_tctrl->Enable(false); +} + +void DistancePlotDlg::OnRandSampRadioSelected(wxCommandEvent &ev) { + all_pairs_rad->SetValue(false); + est_pairs_txt->Enable(false); + est_pairs_num_txt->Enable(false); + rand_samp_rad->SetValue(true); + max_iter_txt->Enable(true); + max_iter_tctrl->Enable(true); +} + +void DistancePlotDlg::OnThreshCheckBox(wxCommandEvent &ev) { + bool checked = thresh_cbx->GetValue(); + thresh_tctrl->Enable(checked); + thresh_slider->Enable(checked); + UpdateEstPairs(); + UpdateThreshTctrlVal(); + ev.Skip(); +} + +void DistancePlotDlg::OnMaxDistMethodChoice(wxCommandEvent &ev) { + UpdateEstPairs(); + UpdateThreshTctrlVal(); + ev.Skip(); +} + +void DistancePlotDlg::OnThreshTextCtrl(wxCommandEvent &ev) +{ + wxString val = thresh_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + double t; + bool is_valid = val.ToDouble(&t); + if (is_valid) { + if (t <= GetThreshMin()) { + thresh_slider->SetValue(0); + } else if (t >= GetThreshMax()) { + thresh_slider->SetValue(sldr_tcks); + } else { + double s = ((t-GetThreshMin())/(GetThreshMax()-GetThreshMin()) * + ((double) sldr_tcks)); + thresh_slider->SetValue((int) s); + } + } else { + UpdateThreshTctrlVal(); + } +} + +void DistancePlotDlg::OnThreshSlider(wxCommandEvent &ev) { + UpdateThreshTctrlVal(); + if (thresh_cbx && thresh_cbx->GetValue()) UpdateEstPairs(); +} + +void DistancePlotDlg::OnMaxIterTextCtrl(wxCommandEvent &ev) { + wxString val = max_iter_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + long t; + bool is_valid = val.ToLong(&t); + if (is_valid) { + if (t < 10) { // cannot be less than 10 + wxString s; + s << 10; + max_iter_tctrl->ChangeValue(s); + } else if (t > 1000000000) { // 1billion + wxString s; + s << 1000000000; + max_iter_tctrl->ChangeValue(s); + } + } else { + wxString s; + s << 1000000; // 1million + max_iter_tctrl->ChangeValue(s); + } + +} + +void DistancePlotDlg::OnMaxDistanceTextCtrl(wxCommandEvent &ev) { + wxString val = thresh_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + long t; + bool is_valid = val.ToLong(&t); + if (is_valid) { + double s = ((t-GetThreshMin())/(GetThreshMax()-GetThreshMin()) * + ((double) sldr_tcks)); + thresh_slider->SetValue((int) s); + } +} + +void DistancePlotDlg::OnMaxIterTctrlKillFocus(wxFocusEvent &ev) { + wxString val = max_iter_tctrl->GetValue(); + val.Trim(false); + val.Trim(true); + long t; + bool is_valid = val.ToLong(&t); + if (is_valid) { + if (t < 10) { + wxString s; + s << 10; + max_iter_tctrl->ChangeValue(s); + } else if (t > 1000000000) { + wxString s; + s << 1000000000; + max_iter_tctrl->ChangeValue(s); + } + } else { + wxString s; + s << 1000000; + max_iter_tctrl->ChangeValue(s); + } +} + +void DistancePlotDlg::OnSeedCheck(wxCommandEvent &event) { + bool use_user_seed = chk_seed->GetValue(); + + if (use_user_seed) { + seedButton->Enable(); + if (GdaConst::use_gda_user_seed == false && GdaConst::gda_user_seed == 0) { + OnChangeSeed(event); + return; + } + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + GdaConst::use_gda_user_seed = false; + seedButton->Disable(); + } +} + +void DistancePlotDlg::OnChangeSeed(wxCommandEvent &ev) { + // prompt user to enter user seed (used globally) + wxString m; + m << _("Enter a seed value for random number generator:"); + + long long unsigned int val; + wxString dlg_val; + wxString cur_val; + cur_val << GdaConst::gda_user_seed; + + wxTextEntryDialog dlg(NULL, m, _("Enter a seed value"), cur_val); + if (dlg.ShowModal() != wxID_OK) return; + dlg_val = dlg.GetValue(); + dlg_val.Trim(true); + dlg_val.Trim(false); + if (dlg_val.IsEmpty()) return; + if (dlg_val.ToULongLong(&val)) { + uint64_t new_seed_val = val; + GdaConst::gda_user_seed = new_seed_val; + GdaConst::use_gda_user_seed = true; + + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + wxString str_gda_user_seed; + str_gda_user_seed << GdaConst::gda_user_seed; + ogr_adapt.AddEntry("gda_user_seed", str_gda_user_seed.ToStdString()); + ogr_adapt.AddEntry("use_gda_user_seed", "1"); + } else { + wxString m = _("\"%s\" is not a valid seed. Seed unchanged."); + m = wxString::Format(m, dlg_val); + wxMessageDialog dlg(NULL, m, _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + GdaConst::use_gda_user_seed = false; + OGRDataAdapter& ogr_adapt = OGRDataAdapter::GetInstance(); + ogr_adapt.AddEntry("use_gda_user_seed", "0"); + } +} + +void DistancePlotDlg::UpdateEstPairs() { + wxString s; + size_t nobs = project->GetNumRecords(); + size_t max_pairs = (nobs*(nobs-1))/2; + if (thresh_cbx->GetValue()) { + double sf = 0.5; + if (thresh_slider) { + sf = (((double) thresh_slider->GetValue()) / ((double) sldr_tcks)); + } + double mn = (double) nobs; + double mx = (double) max_pairs; + double est = mn + (mx-mn)*sf; + long est_l = (long) est; + s << est_l; + } else { + s << max_pairs; + } + est_pairs_num_txt->SetLabelText(s); +} + +void DistancePlotDlg::UpdateThreshTctrlVal() +{ + if (!thresh_tctrl) return; + if (thresh_cbx->GetValue()==false) { + thresh_tctrl->ChangeValue(""); + return; + } + double sf = 0.5; + if (thresh_slider) { + sf = (((double) thresh_slider->GetValue()) / ((double) sldr_tcks)); + } + wxString s; + double v = GetThreshMin() + (GetThreshMax() - GetThreshMin())*sf; + s << v; + thresh_tctrl->ChangeValue(s); +} + +bool DistancePlotDlg::IsArc() +{ + return dist_choice->GetSelection() > 0; +} + +bool DistancePlotDlg::IsMi() +{ + return dist_choice->GetSelection() == 1; +} + +double DistancePlotDlg::GetThreshMin() +{ + if (IsArc()) { + double r = project->GetMin1nnDistArc(); + if (IsMi()) return GenGeomAlgs::EarthRadToMi(r); + return GenGeomAlgs::EarthRadToKm(r); + } + return project->GetMin1nnDistEuc(); +} + +double DistancePlotDlg::GetThreshMax() +{ + if (maxdist_choice->GetSelection() == 0) { + if (IsArc()) { + double r = project->GetMaxDistArc(); + if (IsMi()) return GenGeomAlgs::EarthRadToMi(r); + return GenGeomAlgs::EarthRadToKm(r); + } + return project->GetMaxDistEuc(); + } else { + // using bbox diagonal + double minx, miny, maxx, maxy; + project->GetMapExtent(minx, miny, maxx, maxy); + double xx = (maxx - minx); + double yy = (maxy - miny); + double r = sqrt(xx * xx + yy * yy) / 2.0; + + if (IsArc()) { + if (IsMi()) return GenGeomAlgs::EarthRadToMi(r); + return GenGeomAlgs::EarthRadToKm(r); + } else + return r; + } +} + + + + + diff --git a/Explore/DistancePlotView.h b/Explore/DistancePlotView.h new file mode 100644 index 000000000..7c83a97c7 --- /dev/null +++ b/Explore/DistancePlotView.h @@ -0,0 +1,181 @@ +#ifndef __DISTANCE_PLOT_VIEW_H__ +#define __DISTANCE_PLOT_VIEW_H__ + +#include +#include "ScatterNewPlotView.h" +#include "LoessPlotCanvas.h" +#include "../DialogTools/AbstractClusterDlg.h" + +class DistancePlot; + +class DistancePlotCanvas : public LoessPlotCanvas +{ + DECLARE_CLASS(DistancePlotCanvas) + bool use_def_y_range; + + double prev_y_axis_min; + double prev_y_axis_max; + + double y_axis_min; + double y_axis_max; + + const static int default_style; + +public: + DistancePlotCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undef, + const std::vector& Y_undef, + double x_min, double x_max, + double y_min, double y_max, + const wxString& X_label, + const wxString& Y_label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + + virtual ~DistancePlotCanvas(); + + virtual void DisplayRightClickMenu(const wxPoint& pos); + + virtual void update(HLStateInt* o) {} + + virtual void UpdateSelection(bool shiftdown, bool pointsel) {} // do nothing + + virtual void DrawHighlightedShapes(wxMemoryDC &dc) {} // do nothing + + void OnSaveResult(wxCommandEvent& event); + + void OnUseAdjustYAxis(wxCommandEvent& event); + + void OnAdjustYAxis(wxCommandEvent& event); + + void OnToggleDataPoints(wxCommandEvent& event); + + void OnToggleConfidenceInterval(wxCommandEvent& event); + + void SetCheckMarks(wxMenu* menu); + + DECLARE_EVENT_TABLE() +}; + +class DistancePlotFrame : public TemplateFrame +{ + DECLARE_CLASS(DistancePlotFrame) +public: + DistancePlotFrame(wxFrame *parent, Project* project, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undef, + const std::vector& Y_undef, + double x_min, double x_max, + double y_min, double y_max, + const wxString& X_label, + const wxString& Y_label, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxSize(900,800), + const long style = wxDEFAULT_FRAME_STYLE); + + virtual ~DistancePlotFrame(); + + virtual void OnActivate(wxActivateEvent& event); + + virtual void OnMouseEvent(wxMouseEvent& event); + + virtual void OnRightClick(const wxPoint& pos); + + virtual void UpdateOptionMenuItems(); + + virtual void UpdateContextMenuItems(wxMenu* menu); + + + DECLARE_EVENT_TABLE() +}; + + + + +class DistancePlotDlg : public AbstractClusterDlg +{ +public: + DistancePlotDlg(wxFrame* parent, Project* project); + virtual ~DistancePlotDlg(); + + void OnCancelBtn(wxCommandEvent& ev); + void OnOK(wxCommandEvent& ev); + + void OnAllPairsRadioSelected(wxCommandEvent& ev); + void OnRandSampRadioSelected(wxCommandEvent& ev); + void OnThreshCheckBox(wxCommandEvent& ev); + void OnThreshTextCtrl(wxCommandEvent& ev); + void OnThreshSlider(wxCommandEvent& ev); + void OnMaxIterTextCtrl(wxCommandEvent& ev); + void OnMaxDistanceTextCtrl(wxCommandEvent& ev); + void OnMaxIterTctrlKillFocus(wxFocusEvent& ev); + void OnSeedCheck(wxCommandEvent& ev); + void OnDistanceChoiceSelected(wxCommandEvent& ev); + void OnChangeSeed(wxCommandEvent& ev); + void OnMaxDistMethodChoice(wxCommandEvent& ev); + + void UpdateEstPairs(); + void OnClose(wxCloseEvent& ev); + virtual wxString _printConfiguration(); + + DistancePlot* GetDistancePlot(); + wxString title; + wxString str_threshold; + +protected: + DistancePlot* distplot; + + wxStaticText* vardist_txt; // + wxChoice* vardist_choice; // + wxStaticText* dist_txt; // ID_DIST_TXT + wxChoice* dist_choice; // ID_DIST_CHOICE + wxCheckBox* thresh_cbx; // ID_THRESH_CBX + wxTextCtrl* thresh_tctrl; // ID_THRESH_TCTRL + wxSlider* thresh_slider; // ID_THRESH_SLDR + wxRadioButton* all_pairs_rad; // ID_ALL_PAIRS_RAD + wxStaticText* est_pairs_txt; // ID_EST_PAIRS_TXT + wxStaticText* est_pairs_num_txt; // ID_EST_PAIRS_NUM_TXT + wxRadioButton* rand_samp_rad; // ID_RAND_SAMP_RAD + wxStaticText* max_iter_txt; // ID_MAX_ITER_TXT + wxTextCtrl* max_iter_tctrl; // ID_MAX_ITER_TCTRL + //wxListBox* combo_var; + wxChoice* maxdist_choice; + + wxButton* help_btn; // ID_HELP_BTN + wxButton* apply_btn; // ID_APPLY_BTN + + wxCheckBox* chk_seed; + wxButton* seedButton; + static const long sldr_tcks = 1000; + + void CreateControls(); + + std::map name_to_nm; + std::map name_to_tm_id; + + bool IsArc(); + bool IsMi(); + /** min according to current arc/euc and units */ + double GetThreshMin(); + /** max according to current arc/euc and units */ + double GetThreshMax(); + + + + void InitVariableCombobox(wxListBox* var_box); + + void GetSelectedVariables(wxListBox* var_box, + std::vector >& data, + std::vector >& data_undefs); + + void UpdateThreshTctrlVal(); + + DECLARE_EVENT_TABLE() +}; + +#endif diff --git a/Explore/GStatCoordinator.cpp b/Explore/GStatCoordinator.cpp index f76b84711..4b5e14e78 100644 --- a/Explore/GStatCoordinator.cpp +++ b/Explore/GStatCoordinator.cpp @@ -92,7 +92,7 @@ var_info(var_info_s), data(var_info_s.size()), data_undef(var_info_s.size()), last_seed_used(123456789), reuse_last_seed(true), -is_local_joint_count(_is_local_joint_count) +is_local_join_count(_is_local_joint_count) { wxLogMessage("Entering GStatCoordinator::GStatCoordinator()."); reuse_last_seed = GdaConst::use_gda_user_seed; @@ -285,6 +285,7 @@ void GStatCoordinator::InitFromVarInfo() } for (int t=0; tGetGal(w_id); } - x = x_vecs[t]; - - if (is_local_joint_count) { + + if (is_local_join_count) { int num_obs_1s = 0; int num_obs_0s = 0; int valid_num_obs = 0; @@ -314,27 +314,42 @@ void GStatCoordinator::InitFromVarInfo() } // count neighbors and neighors with 1 for (int i=0; i 0 ) { + } + int nn = W[i].Size(); + // check self-neighbor + if (W[i].Check(i)) { + nn -= 1; + } + if (nn > 0) { n[t]++; x_star[t] += x[i]; x_sstar[t] += x[i] * x[i]; @@ -343,7 +358,7 @@ void GStatCoordinator::InitFromVarInfo() ExG[t] = 1.0/(n[t]-1); // same for all i when W is row-standardized ExGstar[t] = 1.0/n[t]; // same for all i when W is row-standardized mean_x[t] = x_star[t] / n[t]; // x hat (overall) - var_x[t] = x_sstar[t]/n[t] - mean_x[t]*mean_x[t]; // s^2 overall + var_x[t] = x_sstar[t] / n[t] - mean_x[t]*mean_x[t]; // s^2 overall // when W is row-standardized, VarGstar same for all i // same as s^2 / (n^2 mean_x ^2) @@ -410,7 +425,7 @@ void GStatCoordinator::FillClusterCats(int canvas_time, bool is_gi, bool is_perm c_val[i] = 3; // isolate } else if (p_val[i] <= significance_cutoff) { - if (is_local_joint_count == false) { + if (is_local_join_count == false) { c_val[i] = z_val[i] > 0 ? 1 : 2; // high = 1, low = 2 } else { @@ -455,8 +470,9 @@ void GStatCoordinator::CalcGs() double n_expr = sqrt((n[t]-1)*(n[t]-1)*(n[t]-2)); for (long i=0; i 0 ) { double lag = 0; @@ -470,11 +486,12 @@ void GStatCoordinator::CalcGs() } double Wi = self_neighbor ? W[i].Size()-1 : W[i].Size(); if (row_standardize) { - lag /= elm_i.Size(); + lag /= Wi; Wi /= elm_i.Size(); } double xd_i = x_star[t] - x[i]; if (xd_i != 0) { + // NOT includes the value xi in both numerator and denominator: G[i] = lag / xd_i; } double x_hat_i = xd_i * ExG[t]; // (x_star - x[i])/(n-1) @@ -513,6 +530,7 @@ void GStatCoordinator::CalcGs() } lag += x[elm_i[j]]; } + // includes the value xi in both numerator and denominator: G_star[i] = self_neighbor ? lag / (sz_i * x_star[t]) : (lag+x[i]) / ((sz_i+1) * x_star[t]); z_star[i] = (G_star[i] - ExGstar[t])/sdGstar[t]; } @@ -657,14 +675,19 @@ void GStatCoordinator::CalcPseudoP_range(int obs_start, int obs_end,uint64_t see GalElement* w; for (int t=0; tgal; - if (w[i].Size() > numNeighbors) + if (w[i].Size() > numNeighbors) { numNeighbors = w[i].Size(); + if (w[i].Check(i)) { + // exclude self from neighbors in shuffle + numNeighbors -= 1; + } + } } if (numNeighbors == 0) { continue; } - if (is_local_joint_count && nn_1_t[i] ==0) { + if (is_local_join_count && nn_1_t[i] ==0) { for (int t=0; t n; // # non-neighborless observations // a special case Local Join Count - bool is_local_joint_count; + bool is_local_join_count; double x_star_t; // temporary x_star for use in worker threads std::vector x_star; // sum of all x_i // threaded diff --git a/Explore/GetisOrdMapNewView.cpp b/Explore/GetisOrdMapNewView.cpp index edd1ba85a..02d549ae1 100644 --- a/Explore/GetisOrdMapNewView.cpp +++ b/Explore/GetisOrdMapNewView.cpp @@ -134,7 +134,7 @@ wxString GetisOrdMapCanvas::GetCanvasTitle() { wxString new_title; - if (gs_coord->is_local_joint_count) new_title = "Local Join Count "; + if (gs_coord->is_local_join_count) new_title = "Local Join Count "; else new_title = (is_gi ? "Gi " : "Gi* "); new_title << (is_clust ? "Cluster" : "Significance") << " Map "; @@ -255,7 +255,7 @@ void GetisOrdMapCanvas::CreateAndUpdateCategories() if (is_clust) { num_cats += 3; // in Local Join Count, don't display Low category - if (gs_coord->is_local_joint_count) + if (gs_coord->is_local_join_count) num_cats -= 1; cat_data.CreateCategoriesAtCanvasTm(num_cats, t); @@ -265,18 +265,18 @@ void GetisOrdMapCanvas::CreateAndUpdateCategories() cat_data.SetCategoryLabel(t, 1, str_high); cat_data.SetCategoryColor(t, 1, lbl_color_dict[str_high]); - if (!gs_coord->is_local_joint_count) { + if (!gs_coord->is_local_join_count) { cat_data.SetCategoryLabel(t, 2, str_low); cat_data.SetCategoryColor(t, 2, lbl_color_dict[str_low]); } if (gs_coord->GetHasIsolates(t) && gs_coord->GetHasUndefined(t)) { - isolates_cat = 3 - gs_coord->is_local_joint_count; - undefined_cat = 4 - gs_coord->is_local_joint_count; + isolates_cat = 3 - gs_coord->is_local_join_count; + undefined_cat = 4 - gs_coord->is_local_join_count; } else if (gs_coord->GetHasUndefined(t)) { - undefined_cat = 3 - gs_coord->is_local_joint_count; + undefined_cat = 3 - gs_coord->is_local_join_count; } else if (gs_coord->GetHasIsolates(t)) { - isolates_cat = 3 - gs_coord->is_local_joint_count; + isolates_cat = 3 - gs_coord->is_local_join_count; } if (undefined_cat != -1) { cat_data.SetCategoryLabel(t, undefined_cat, str_undefined); @@ -786,31 +786,33 @@ void GetisOrdMapFrame::OnSigFilterSetup(wxCommandEvent& event) double user_sig = gs_coord->significance_cutoff; if (gs_coord->GetSignificanceFilter()<0) user_sig = gs_coord->user_sig_cutoff; - if (gs_coord->is_local_joint_count) { + if (gs_coord->is_local_join_count) { int new_n = 0; for (int i=0; inum_obs; i++) { if (gs_coord->x_vecs[t][i] == 1) { new_n += 1; } } - int j= 0; - double* p_val = new double[new_n]; - for (int i=0; inum_obs; i++) { - if (gs_coord->x_vecs[t][i] == 1) { - p_val[j++] = p_val_t[i]; + if (new_n > 0) { + int j= 0; + double* p_val = new double[new_n]; + for (int i=0; inum_obs; i++) { + if (gs_coord->x_vecs[t][i] == 1) { + p_val[j++] = p_val_t[i]; + } } + InferenceSettingsDlg dlg(this, user_sig, p_val, new_n, ttl); + if (dlg.ShowModal() == wxID_OK) { + gs_coord->SetSignificanceFilter(-1); + gs_coord->significance_cutoff = dlg.GetAlphaLevel(); + gs_coord->user_sig_cutoff = dlg.GetUserInput(); + gs_coord->notifyObservers(); + gs_coord->bo = dlg.GetBO(); + gs_coord->fdr = dlg.GetFDR(); + UpdateOptionMenuItems(); + } + delete[] p_val; } - InferenceSettingsDlg dlg(this, user_sig, p_val, new_n, ttl); - if (dlg.ShowModal() == wxID_OK) { - gs_coord->SetSignificanceFilter(-1); - gs_coord->significance_cutoff = dlg.GetAlphaLevel(); - gs_coord->user_sig_cutoff = dlg.GetUserInput(); - gs_coord->notifyObservers(); - gs_coord->bo = dlg.GetBO(); - gs_coord->fdr = dlg.GetFDR(); - UpdateOptionMenuItems(); - } - delete[] p_val; } else { InferenceSettingsDlg dlg(this, user_sig, p_val_t, n, ttl); if (dlg.ShowModal() == wxID_OK) { @@ -852,7 +854,7 @@ void GetisOrdMapFrame::OnSaveGetisOrd(wxCommandEvent& event) wxString g_label = is_gi ? "G" : "G*"; wxString g_field_default = is_gi ? "G" : "G_STR"; - if (gs_coord->is_local_joint_count) { + if (gs_coord->is_local_join_count) { title = "Save Results: Local Join Count-stats"; g_label = "JC"; g_field_default = "JC"; @@ -898,7 +900,7 @@ void GetisOrdMapFrame::OnSaveGetisOrd(wxCommandEvent& event) int data_i = 0; std::vector nn_1_val; - if (gs_coord->is_local_joint_count == false) { + if (gs_coord->is_local_join_count == false) { data[data_i].d_val = &g_val; data[data_i].label = g_label; data[data_i].field_default = g_field_default; @@ -920,7 +922,7 @@ void GetisOrdMapFrame::OnSaveGetisOrd(wxCommandEvent& event) data[data_i].undefined = &undefs; data_i++; } - if (gs_coord->is_local_joint_count == false) { + if (gs_coord->is_local_join_count == false) { data[data_i].d_val = &p_val; data[data_i].label = p_label; data[data_i].field_default = p_field_default; diff --git a/Explore/GroupingMapView.cpp b/Explore/GroupingMapView.cpp index ab1590bb0..e30e1beab 100644 --- a/Explore/GroupingMapView.cpp +++ b/Explore/GroupingMapView.cpp @@ -45,7 +45,7 @@ using namespace std; HierachicalMapSelectDlg::HierachicalMapSelectDlg(wxFrame* parent_s, Project* project_s) -: wxDialog(parent_s, wxID_ANY, "Hierarchical Map", wxDefaultPosition, +: wxDialog(parent_s, wxID_ANY, _("Hierarchical Cluster Map"), wxDefaultPosition, wxSize(350, 250)) { wxLogMessage("Open GroupingSelectDlg."); @@ -209,7 +209,7 @@ void HierachicalMapSelectDlg::OnOK( wxCommandEvent& event) uid = w_man_int->RequestWeights(e); bool success = ((WeightsNewManager*) w_man_int)->AssociateGal(uid, Wp); if (success == false) return; - title = _("Hierachical Map: "); + title = _("Hierarchical Map: "); title << e.filename; EndDialog(wxID_OK); } diff --git a/Explore/HistogramView.cpp b/Explore/HistogramView.cpp index 4f2e370c6..d68dc7b05 100644 --- a/Explore/HistogramView.cpp +++ b/Explore/HistogramView.cpp @@ -72,7 +72,7 @@ num_obs(project_s->GetNumRecords()), num_time_vals(1), x_axis(0), y_axis(0), display_stats(false), show_axes(true), scale_x_over_time(false), scale_y_over_time(true), -custom_classif_state(0), is_custom_category(false) +custom_classif_state(0), is_custom_category(false), set_uniquevalue(false) { using namespace Shapefile; @@ -220,6 +220,71 @@ void HistogramCanvas::DisplayRightClickMenu(const wxPoint& pos) template_frame->UpdateOptionMenuItems(); } +void HistogramCanvas::OnSetUniqueValue(wxCommandEvent& event) +{ + set_uniquevalue = !set_uniquevalue; + int col_time_steps = table_int->GetColTimeSteps(col_id); + + if (set_uniquevalue) { + for (int t=0; t sel_data; + table_int->GetColData(col_id, t, sel_data); + s_data_sorted[t].resize(num_obs); + std::map unique_dict; + // data_sorted is a pair value {string value: index} + VAR_STRING[t].resize(num_obs); + for (int i=0; iGetColType(col_id, t); + std::vector sel_undefs; + table_int->GetColUndefined(col_id, t, sel_undefs); + undef_tms.push_back(sel_undefs); + if (f_type != GdaConst::string_type) { // string type has to be string + IS_VAR_STRING[t] = false; + std::vector sel_data; + table_int->GetColData(col_id, t, sel_data); + data_sorted[t].resize(num_obs); + // data_sorted is a pair value {double value: index} + for (int i=0; i unique_dict; // data_sorted is a pair value {string value: index} @@ -978,7 +1043,6 @@ void HistogramCanvas::InitIntervals() wxString val = s_data_sorted[t][i].first; if (unique_dict.find(val) == unique_dict.end()) { unique_dict[val] = 0; - VAR_STRING[t].push_back(val); } unique_dict[val] += 1; } @@ -988,6 +1052,7 @@ void HistogramCanvas::InitIntervals() std::map::iterator it; for (it=unique_dict.begin(); it!=unique_dict.end();it++){ wxString lbl = it->first; + s_ival_breaks[t][cur_ival] = lbl; for (int idx=0; idxSetCheckMarks(optMenu); GeneralWxUtils::ReplaceMenu(mb, _("Options"), optMenu); UpdateOptionMenuItems(); + + // connect menu item ID_VIEW_HISTOGRAM_SET_UNIQUE + wxMenuItem* uniquevalue_menu = optMenu->FindItem(XRCID("ID_VIEW_HISTOGRAM_SET_UNIQUE")); + Connect(uniquevalue_menu->GetId(), wxEVT_MENU, wxCommandEventHandler(HistogramFrame::OnSetUniqueValue)); + } void HistogramFrame::UpdateOptionMenuItems() @@ -1319,7 +1389,10 @@ void HistogramFrame::update(TimeState* o) UpdateTitle(); } - +void HistogramFrame::OnSetUniqueValue(wxCommandEvent& event) +{ + ((HistogramCanvas*) template_canvas)->OnSetUniqueValue(event); +} void HistogramFrame::OnShowAxes(wxCommandEvent& event) { diff --git a/Explore/HistogramView.h b/Explore/HistogramView.h index f76e80562..7b8a39797 100644 --- a/Explore/HistogramView.h +++ b/Explore/HistogramView.h @@ -94,7 +94,8 @@ class HistogramCanvas : public TemplateCanvas, public CatClassifStateObserver void ShowAxes(bool show_axes); bool IsDisplayStats() { return display_stats; } bool IsShowAxes() { return show_axes; } - + void OnSetUniqueValue(wxCommandEvent& event); + void HistogramIntervals(); void InitIntervals(); void UpdateIvalSelCnts(); @@ -128,6 +129,7 @@ class HistogramCanvas : public TemplateCanvas, public CatClassifStateObserver bool show_axes; bool display_stats; + bool set_uniquevalue; s_array_type s_ival_breaks; double data_min_over_time; @@ -181,7 +183,8 @@ class HistogramFrame : public TemplateFrame { void OnShowAxes(wxCommandEvent& event); void OnDisplayStatistics(wxCommandEvent& event); void OnHistogramIntervals(wxCommandEvent& event); - + void OnSetUniqueValue(wxCommandEvent& event); + void GetVizInfo(wxString& col_name, int& num_bins); protected: diff --git a/Explore/LineChartView.cpp b/Explore/LineChartView.cpp index 2c55975e9..a9d44e0fc 100644 --- a/Explore/LineChartView.cpp +++ b/Explore/LineChartView.cpp @@ -1278,7 +1278,7 @@ void LineChartFrame::RunDIDTest() int RegressModel = 1; // for classic linear regression wxGauge* m_gauge = NULL; bool do_white_test = true; - double *m_resid1, *m_yhat1; + double *m_resid1 = NULL, *m_yhat1 = NULL; wxString m_Yname = var_man.GetName(var_idx); std::vector m_Xnames; @@ -1336,15 +1336,21 @@ void LineChartFrame::RunDIDTest() // start regression int nX = 0; - double* y; - double **x; - DiagnosticReport* m_DR; + double* y = NULL; + double **x = NULL; + DiagnosticReport* m_DR = NULL; if (compare_regimes) { m_Xnames.push_back("SPACE"); nX = m_Xnames.size(); int n = valid_n_obs; + if (n == 0) { + wxDateTime now = wxDateTime::Now(); + logReport = ">>" + now.FormatDate() + " " + now.FormatTime() + "\nREGRESSION (DIFF-IN-DIFF, COMPARE REGIMES) \n----------\Error: No valid number of observation." + logReport; + return; + } + y = new double[n]; x = new double* [2]; @@ -1562,11 +1568,13 @@ void LineChartFrame::RunDIDTest() } } - delete[] y; + if (y) delete[] y; for (int t=0; trelease_Var(); - delete m_DR; + + if (m_DR) { + m_DR->release_Var(); + delete m_DR; + } } void LineChartFrame::OnReportClose(wxWindowDestroyEvent& event) diff --git a/Explore/LisaCoordinator.cpp b/Explore/LisaCoordinator.cpp index 24cd3f949..19de454bd 100644 --- a/Explore/LisaCoordinator.cpp +++ b/Explore/LisaCoordinator.cpp @@ -35,6 +35,7 @@ #include "../VarCalc/WeightsManInterface.h" #include "../logger.h" #include "../Project.h" +#include "../GenUtils.h" #include "LisaCoordinator.h" #include "../Algorithms/gpu_lisa.h" @@ -72,10 +73,12 @@ LisaCoordinator(boost::uuids::uuid weights_id, const std::vector& col_ids, LisaType lisa_type_s, bool calc_significances_s, - bool row_standardize_s) + bool row_standardize_s, + bool using_median) : AbstractCoordinator(weights_id, project, var_info_s, col_ids, calc_significances_s, row_standardize_s), lisa_type(lisa_type_s), -isBivariate(lisa_type_s == bivariate) +isBivariate(lisa_type_s == bivariate), +using_median(using_median) { wxLogMessage("Entering LisaCoordinator::LisaCoordinator()."); for (int i=0; iUpdate(undefs); - } else { - gw = weights; } GalElement* W = gw->gal; Gal_vecs[t] = gw; Gal_vecs_orig[t] = weights; for (int i=0; i nbr_data(nn); + const std::vector& nbrs = W[i].GetNbrs(); + for (size_t j=0, k=0; j 0) { - if (data1[i] > 0 && Wdata < 0) cluster[i] = 4; - else if (data1[i] < 0 && Wdata > 0) cluster[i] = 3; - else if (data1[i] < 0 && Wdata < 0) cluster[i] = 2; - else cluster[i] = 1; //data1[i] > 0 && Wdata > 0 + if (data1) { + if (data1[i] > 0 && Wdata < 0) cluster[i] = 4; + else if (data1[i] < 0 && Wdata > 0) cluster[i] = 3; + else if (data1[i] < 0 && Wdata < 0) cluster[i] = 2; + else cluster[i] = 1; //data1[i] > 0 && Wdata > 0 + } } } wxLogMessage("Exiting LisaCoordinator::Calc()"); @@ -559,7 +583,7 @@ void LisaCoordinator::CalcPseudoP() CalcPseudoP_threaded(); } } - LOG_MSG(wxString::Format("GPU took %ld ms", sw_vd.Time())); + wxLogMessage(wxString::Format("GPU took %ld ms", sw_vd.Time())); } void LisaCoordinator::ComputeLarger(int cnt, std::vector& permNeighbors, std::vector& countLarger) @@ -583,32 +607,49 @@ void LisaCoordinator::ComputeLarger(int cnt, std::vector& permNeighbors, st int numNeighbors = permNeighbors.size(); // use permutation to compute the lag // compute the lag for binary weights - if (isBivariate) { + + if (using_median) { + std::vector nbr_data; for (int cp=0; cp= localMoran[cnt]) { + countLarger[t]++; + } + + } else{ + if (isBivariate) { + for (int cp=0; cp 0 && row_standardize) { - permutedLag /= validNeighbors; - } - const double localMoranPermuted = permutedLag * data1[cnt]; - if (localMoranPermuted >= localMoran[cnt]) { - countLarger[t]++; + //NOTE: we shouldn't have to row-standardize or + // multiply by data1[cnt] + if (validNeighbors > 0 && row_standardize) { + permutedLag /= validNeighbors; + } + const double localMoranPermuted = permutedLag * data1[cnt]; + if (localMoranPermuted >= localMoran[cnt]) { + countLarger[t]++; + } } } } diff --git a/Explore/LisaCoordinator.h b/Explore/LisaCoordinator.h index a775bcfe3..98f12a7c8 100644 --- a/Explore/LisaCoordinator.h +++ b/Explore/LisaCoordinator.h @@ -42,7 +42,8 @@ class LisaCoordinator : public AbstractCoordinator const std::vector& col_ids, LisaType lisa_type, bool calc_significances = true, - bool row_standardize_s = true); + bool row_standardize_s = true, + bool using_median = false); LisaCoordinator(wxString weights_path, int n, @@ -63,6 +64,7 @@ class LisaCoordinator : public AbstractCoordinator double* localMoran; // The LISA double* sigLocalMoran; // The significances / pseudo p-vals + public: std::vector smoothed_results; // LISA EB std::vector lags_vecs; @@ -70,6 +72,7 @@ class LisaCoordinator : public AbstractCoordinator std::vector data1_vecs; std::vector data2_vecs; + bool using_median; bool isBivariate; LisaType lisa_type; diff --git a/Explore/LisaMapNewView.cpp b/Explore/LisaMapNewView.cpp index 2a72b12e4..91d3d52ea 100644 --- a/Explore/LisaMapNewView.cpp +++ b/Explore/LisaMapNewView.cpp @@ -98,7 +98,8 @@ wxString LisaMapCanvas::GetCanvasTitle() if (!is_clust && !is_bi) lisa_t = _(" LISA Significance Map"); if (!is_clust && is_bi) lisa_t = _(" BiLISA Significance Map"); if (!is_clust && is_diff) lisa_t = _(" Differential Significance Map"); - + + if (lisa_coord->using_median) lisa_t << "(median)"; wxString field_t; if (is_bi) { field_t << GetNameWithTime(0) << " w/ " << GetNameWithTime(1); diff --git a/Explore/LisaScatterPlotView.cpp b/Explore/LisaScatterPlotView.cpp index cfe61729d..80e0c50ef 100644 --- a/Explore/LisaScatterPlotView.cpp +++ b/Explore/LisaScatterPlotView.cpp @@ -197,9 +197,7 @@ wxString LisaScatterPlotCanvas::GetVariableNames() if (is_bi || is_rate || is_diff) { v1 << var_info_orig[1].name; if (var_info_orig[1].is_time_variant) { - v1 << " (" << project->GetTableInt()-> - GetTimeString(var_info_orig[1].time); - v1 << ")"; + v1 << " (" << project->GetTableInt()->GetTimeString(var_info_orig[1].time) << ")"; } } @@ -234,9 +232,7 @@ wxString LisaScatterPlotCanvas::GetNameWithTime(int var) if (is_bi || is_rate || is_diff) { v1 << var_info_orig[1].name; if (var_info_orig[1].is_time_variant) { - v1 << " (" << project->GetTableInt()-> - GetTimeString(var_info_orig[1].time); - v1 << ")"; + v1 << " (" << project->GetTableInt()->GetTimeString(var_info_orig[1].time) << ")"; } } wxString s0; @@ -273,8 +269,7 @@ void LisaScatterPlotCanvas::SetCheckMarks(wxMenu* menu) GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_USE_SPECIFIED_SEED"), lisa_coord->IsReuseLastSeed()); - - + GeneralWxUtils::CheckMenuItem(menu, XRCID("ID_VIEW_REGIMES_REGRESSION"), is_show_regimes_regression); } @@ -358,7 +353,8 @@ void LisaScatterPlotCanvas::SyncVarInfoFromCoordinator() GalElement* gal = w->gal; for (int t=0; tnum_time_vals; t++) { - double x_min, x_max, y_min, y_max; + double x_min = DBL_MAX, x_max = DBL_MIN; + double y_min = DBL_MAX, y_max = DBL_MIN; bool has_init = false; @@ -764,8 +760,7 @@ void LisaScatterPlotCanvas::RegimeMoran(std::vector& undefs, GalWeight* copy_w = new GalWeight(*lisa_coord->Gal_vecs[t]); copy_w->Update(undefs); GalElement* W = copy_w->gal; - - + double* data1 = new double[num_obs]; double* data2 = NULL; @@ -789,12 +784,12 @@ void LisaScatterPlotCanvas::RegimeMoran(std::vector& undefs, // isolates (islands) have to be removed continue; } - + bool is_binary = true; double Wdata = 0; if (lisa_coord->isBivariate) { - Wdata = W[i].SpatialLag(data2); + Wdata = W[i].SpatialLag(data2, is_binary, i); } else { - Wdata = W[i].SpatialLag(data1); + Wdata = W[i].SpatialLag(data1, is_binary, i); } X.push_back(data1[i]); Y.push_back(Wdata); diff --git a/Explore/LocalGearyCoordinator.cpp b/Explore/LocalGearyCoordinator.cpp index cd1994995..ea16c7307 100644 --- a/Explore/LocalGearyCoordinator.cpp +++ b/Explore/LocalGearyCoordinator.cpp @@ -634,11 +634,11 @@ void LocalGearyCoordinator::CalcMultiLocalGeary() cluster[i] = 3; // undefined value continue; } - + bool is_binary = true; for (int v=0; v 0) { + int nn = W[i].Size(); + if (W[i].Check(i)) { + nn -= 1; // self-neighbor + } + if (nn > 0) { cluster[i] = 0; // don't assign cluster in multi-var settings } else { has_isolates[t] = true; @@ -707,7 +711,6 @@ void LocalGearyCoordinator::CalcLocalGeary() Gal_vecs_orig[t] = weights; for (int i=0; i 0) { + int nn = W[i].Size(); + if (W[i].Check(i)) { + nn -= 1; // self-neighbor + } + if (nn > 0) { if (data1[i] > 0 && Wdata > 0) cluster[i] = 1; else if (data1[i] < 0 && Wdata > 0) cluster[i] = 3; else if (data1[i] < 0 && Wdata < 0) cluster[i] = 2; @@ -847,6 +854,10 @@ void LocalGearyCoordinator::CalcPseudoP_range(int obs_start, int obs_end, uint64 w = Gal_vecs[t]->gal; if (w[cnt].Size() > numNeighbors) { numNeighbors = w[cnt].Size(); + if (w[cnt].Check(cnt)) { + // exclude self from neighbors + numNeighbors -= 1; + } } } @@ -948,7 +959,7 @@ void LocalGearyCoordinator::CalcPseudoP_range(int obs_start, int obs_end, uint64 int perm_idx = permNeighbors[cp]; if (!undefs[perm_idx]) { validNeighbors ++; - permutedLag += _data2[perm_idx]; + if (_data2) permutedLag += _data2[perm_idx]; } } } else { @@ -957,14 +968,18 @@ void LocalGearyCoordinator::CalcPseudoP_range(int obs_start, int obs_end, uint64 int perm_idx = permNeighbors[cp]; if (!undefs[perm_idx]) { validNeighbors ++; - wwx += _data1[perm_idx]; - wwx2 += _data1_square[perm_idx]; + if (_data1 && _data1_square) { + wwx += _data1[perm_idx]; + wwx2 += _data1_square[perm_idx]; + } } } } //NOTE: we shouldn't have to row-standardize or multiply by data1[cnt] if (validNeighbors && row_standardize) { - gci[t][perm] = _data1_square[cnt] - 2.0*_data1[cnt]*wwx/validNeighbors + wwx2/validNeighbors; + if (_data1_square && _data1) { + gci[t][perm] = _data1_square[cnt] - 2.0*_data1[cnt]*wwx/validNeighbors + wwx2/validNeighbors; + } } } gci_sum[t] += gci[t][perm]; diff --git a/Explore/LoessPlotCanvas.cpp b/Explore/LoessPlotCanvas.cpp new file mode 100644 index 000000000..47377a927 --- /dev/null +++ b/Explore/LoessPlotCanvas.cpp @@ -0,0 +1,730 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include // std::pair +#include +#include +#include +#include + +#include "../HighlightState.h" +#include "../GeneralWxUtils.h" +#include "../GeoDa.h" +#include "../logger.h" +#include "../Project.h" +#include "LoessPlotCanvas.h" + + +IMPLEMENT_CLASS(LoessPlotCanvas, TemplateCanvas) +BEGIN_EVENT_TABLE(LoessPlotCanvas, TemplateCanvas) +EVT_PAINT(TemplateCanvas::OnPaint) +EVT_ERASE_BACKGROUND(TemplateCanvas::OnEraseBackground) +EVT_MOUSE_EVENTS(TemplateCanvas::OnMouseEvent) +EVT_MOUSE_CAPTURE_LOST(TemplateCanvas::OnMouseCaptureLostEvent) +END_EVENT_TABLE() + +LoessPlotCanvas:: +LoessPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, + HLStateInt* hl_state_int, + const std::vector& X, const std::vector& Y, + const std::vector& X_undef, const std::vector& Y_undef, + const wxString& Xname, const wxString& Yname, int style, + const wxString& right_click_menu_id, const wxString& title, + const wxPoint& pos, const wxSize& size) +:TemplateCanvas(parent, t_frame, project, hl_state_int, pos, size, false, true), +X(X), Y(Y), X_undef(X_undef), Y_undef(Y_undef), +orgX(X), orgY(Y), Xname(Xname), Yname(Yname), +right_click_menu_id(right_click_menu_id), style(style) +{ + // setup colors + use_category_brushes = true; + draw_sel_shps_by_z_val = false; + highlight_color = GdaConst::scatterplot_regression_selected_color; + selectable_fill_color = GdaConst::scatterplot_regression_excluded_color; + selectable_outline_color = GdaConst::scatterplot_regression_color; + + // setup margins + int virtual_screen_marg_top = 20;//20; + int virtual_screen_marg_right = 5;//20; + int virtual_screen_marg_bottom = 5;//45; + int virtual_screen_marg_left = 5;//45; + + if (style & show_axes) { + virtual_screen_marg_bottom = 45;//45; + virtual_screen_marg_left = 45;//45; + } + last_scale_trans.SetMargin(virtual_screen_marg_top, + virtual_screen_marg_bottom, + virtual_screen_marg_left, + virtual_screen_marg_right); + + // setup data range + last_scale_trans.SetData(0, 0, 100, 100); + n_pts = X.size(); + Xmin = DBL_MAX; Ymin = DBL_MAX; + Xmax = DBL_MIN; Ymax = DBL_MIN; + for (size_t i=0; i X[i]) Xmin = X[i]; + if (Xmax < X[i]) Xmax = X[i]; + if (Ymin > Y[i]) Ymin = Y[i]; + if (Ymax < Y[i]) Ymax = Y[i]; + } + + // put all scatter points in 1 category + cat_data.CreateCategoriesAllCanvasTms(1 /*time*/, 1/*cats*/, X.size()); + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); + cat_data.SetCategoryBrushColor(0, 0, *wxWHITE); + for (int i=0, sz=X.size(); iregisterObserver(this); +} + +LoessPlotCanvas::~LoessPlotCanvas() +{ + wxLogMessage("Entering LoessPlotCanvas::~LoessPlotCanvas"); + if (highlight_state) highlight_state->removeObserver(this); + loess_free_mem(&lo); + pred_free_mem(&pre); + wxLogMessage("Exiting LoessPlotCanvas::~LoessPlotCanvas"); +} + +void LoessPlotCanvas::RunLoess() +{ + loess_fit(&lo); + //loess_summary(&lo); + + loess_pts_sz = 20; + + fit_x.clear(); + fit_x.resize(loess_pts_sz); + double x_itv = (Xmax - Xmin) / loess_pts_sz; + for (size_t i=0; iLoadMenu("ID_SCATTER_PLOT_MAT_MENU_OPTIONS"); + //template_frame->UpdateContextMenuItems(optMenu); + //template_frame->PopupMenu(optMenu, pos + GetPosition()); + //template_frame->UpdateOptionMenuItems(); + wxLogMessage("Exiting LoessPlotCanvas::DisplayRightClickMenu"); +} + +void LoessPlotCanvas::UpdateSelection(bool shiftdown, bool pointsel) +{ +} + +/** + Override of TemplateCanvas method. We must still call the + TemplateCanvas method after we update the regression lines + as needed. */ +void LoessPlotCanvas::update(HLStateInt* o) +{ +} + +void LoessPlotCanvas::AddTimeVariantOptionsToMenu(wxMenu* menu) +{ +} + +wxString LoessPlotCanvas::GetCanvasTitle() +{ + wxString s = _("Scatter Plot- x: %s, y: %s"); + s = wxString::Format(s, Xname, Yname); + return s; +} + +wxString LoessPlotCanvas::GetVariableNames() +{ + wxString s; + s << Xname << ", " << Yname; + return s; +} + +void LoessPlotCanvas::UpdateStatusBar() +{ + if (template_frame) { + wxStatusBar* sb = template_frame->GetStatusBar(); + if (sb == NULL) return; + if (mousemode == select && selectstate == start) { + if (template_frame->GetStatusBarStringFromFrame()) { + wxString str = template_frame->GetUpdateStatusBarString(hover_obs, total_hover_obs); + sb->SetStatusText(str); + } + wxString s; + wxString old_s = sb->GetStatusText(0); + + const std::vector& hl = highlight_state->GetHighlight(); + + if (highlight_state->GetTotalHighlighted()> 0) { + int n_total_hl = highlight_state->GetTotalHighlighted(); + s << _("#selected=") << n_total_hl << " "; + + int n_undefs = 0; + for (int i=0; i 0) { + s << "undefined: "; + wxString undef_str; + undef_str << "@" << Xname << "/" << Yname << ""; + + wxRegEx re_select("[0-9]+@([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)"); + while (re_select.Matches(old_s)) { + size_t start, len; + re_select.GetMatch(&start, &len, 0); + wxString f = re_select.GetMatch(old_s, 0); + wxString f1 = re_select.GetMatch(old_s, 1); + wxString f2 = re_select.GetMatch(old_s, 2); + if (!undef_str.Contains(f1) || !undef_str.Contains(f2)) { + s << f << " "; + } + + old_s = old_s.Mid (start + len); + } + s << n_undefs << undef_str << " "; + } + } + + if (mousemode == select && selectstate == start) { + if (total_hover_obs >= 1) { + s << _("#hover obs ") << hover_obs[0]+1 << " = ("; + s << X[hover_obs[0]] << ", " << Y[hover_obs[0]]; + s << ")"; + } + if (total_hover_obs >= 2) { + s << ", "; + s << _("obs ") << hover_obs[1]+1 << " = ("; + s << X[hover_obs[1]] << ", " << Y[hover_obs[1]]; + s << ")"; + } + if (total_hover_obs >= 3) { + s << ", "; + s << _("obs ") << hover_obs[2]+1 << " = ("; + s << X[hover_obs[2]] << ", " << Y[hover_obs[2]]; + s << ")"; + } + if (total_hover_obs >= 4) { + s << ", ..."; + } + } + sb->SetStatusText(s); + } + } +} + +void LoessPlotCanvas::TimeSyncVariableToggle(int var_index) +{ +} + +void LoessPlotCanvas::FixedScaleVariableToggle(int var_index) +{ +} + +void LoessPlotCanvas::SetSelectableOutlineColor(wxColour color) +{ + selectable_outline_color = color; + TemplateCanvas::SetSelectableOutlineColor(color); + PopulateCanvas(); +} + +void LoessPlotCanvas::SetHighlightColor(wxColour color) +{ + highlight_color = color; + PopulateCanvas(); +} + +void LoessPlotCanvas::SetSelectableFillColor(wxColour color) +{ + // In Scatter Plot, Fill color is for points + selectable_fill_color = color; + cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); + TemplateCanvas::SetSelectableFillColor(color); + PopulateCanvas(); +} + +void LoessPlotCanvas::ShowAxes(bool display) +{ + if (display) style = style | show_axes; + UpdateMargins(); + PopulateCanvas(); +} + + +void LoessPlotCanvas::OnEditLoess(wxCommandEvent& evt) +{ + LoessSettingsDlg set_dlg(this); + set_dlg.ShowModal(); +} + +void LoessPlotCanvas::PopulateCanvas() +{ + LOG_MSG("Entering LoessPlotCanvas::PopulateCanvas"); + BOOST_FOREACH( GdaShape* shp, background_shps ) { delete shp; } + background_shps.clear(); + BOOST_FOREACH( GdaShape* shp, selectable_shps ) { delete shp; } + selectable_shps.clear(); + BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } + foreground_shps.clear(); + + wxSize size(GetVirtualSize()); + last_scale_trans.SetView(size.GetWidth(), size.GetHeight()); + + // Recall: Xmin/max Ymin/max can be smaller/larger than min/max in X/Y + // if X/Y are particular time-slices of time-variant variables and + // if global scaling is being used. + double x_min = Xmin; + double x_max = Xmax; + double y_min = Ymin; + double y_max = Ymax; + + // create axis + double data_min_s = x_min; + double data_max_s = x_max; + double x_pad = 0.1 * (x_max - x_min); + + if (style & add_auto_padding_min) data_min_s = x_min - x_pad; + if (style & add_auto_padding_max) data_max_s = x_max - x_pad; + + axis_scale_x = AxisScale(data_min_s, data_max_s, 5, axis_display_precision, + axis_display_fixed_point); + + double axis_min = y_min; + double axis_max = y_max; + double y_pad = 0.1 * (y_max - y_min); + + if (style & add_auto_padding_min) axis_min = y_min - y_pad; + if (style & add_auto_padding_max) axis_max = y_max - y_pad; + + // check if user specifies the y-axis range + if (!def_y_min.IsEmpty()) def_y_min.ToDouble(&axis_min); + if (!def_y_max.IsEmpty()) def_y_max.ToDouble(&axis_max); + + axis_scale_y = AxisScale(axis_min, axis_max, 5, axis_display_precision, + axis_display_fixed_point); + + // Populate TemplateCanvas::selectable_shps + scaleX = 100.0 / (axis_scale_x.scale_range); + scaleY = 100.0 / (axis_scale_y.scale_range); + + if (style & show_data_points) { + selectable_shps.resize(X.size()); + selectable_shps_undefs.resize(X.size()); + + if (style & use_larger_filled_circles) { + selectable_shps_type = circles; + for (size_t i=0, sz=X.size(); isetPen(GdaConst::scatterplot_regression_excluded_color); + c->setBrush(GdaConst::scatterplot_regression_excluded_color); + selectable_shps[i] = c; + } + } else { + selectable_shps_type = points; + for (size_t i=0, sz=X.size(); isetPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(x_baseline); + } + + if (style & show_axes) { + y_baseline = new GdaAxis(Yname, axis_scale_y, + wxRealPoint(0,0), wxRealPoint(0, 100)); + y_baseline->setPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(y_baseline); + } + + // create optional axes through origin + if ( (style & show_horiz_axis_through_origin) && + axis_scale_y.scale_min < 0 && axis_scale_y.scale_max > 0) + { + GdaPolyLine* x_axis_through_origin = new GdaPolyLine(0,50,100,50); + double y_scale_range = axis_scale_y.scale_max-axis_scale_y.scale_min; + double y_inter = 100.0 * ((-axis_scale_y.scale_min) / y_scale_range); + x_axis_through_origin->operator=(GdaPolyLine(0,y_inter,100,y_inter)); + x_axis_through_origin->setPen(*GdaConst::scatterplot_origin_axes_pen); + foreground_shps.push_back(x_axis_through_origin); + } + + if ( (style & show_vert_axis_through_origin) && + axis_scale_x.scale_min < 0 && axis_scale_x.scale_max > 0) + { + GdaPolyLine* y_axis_through_origin = new GdaPolyLine(50,0,50,100); + double x_scale_range = axis_scale_x.scale_max-axis_scale_x.scale_min; + double x_inter = 100.0 * ((-axis_scale_x.scale_min) / x_scale_range); + y_axis_through_origin->operator=(GdaPolyLine(x_inter,0,x_inter,100)); + y_axis_through_origin->setPen(*GdaConst::scatterplot_origin_axes_pen); + foreground_shps.push_back(y_axis_through_origin); + } + + // create lowess regression lines + if ((style & show_lowess_smoother) && n_pts > 1) { + lowess_reg_line = new GdaSpline; + foreground_shps.push_back(lowess_reg_line); + lowess_reg_line->reInit(fit_x, fit_y, axis_scale_x.scale_min, + axis_scale_y.scale_min, scaleX, scaleY); + lowess_reg_line->setPen(wxPen(selectable_outline_color, 2)); + + if ((style & show_confidence_interval) ) { + lowess_reg_upper_line = new GdaSpline; + + wxPen* loess_confidence_pen = new wxPen(GdaConst::scatterplot_origin_axes_color, 1, wxSHORT_DASH); + foreground_shps.push_back(lowess_reg_upper_line); + lowess_reg_upper_line->reInit(fit_x, fit_y_upper, axis_scale_x.scale_min, + axis_scale_y.scale_min, scaleX, scaleY); + lowess_reg_upper_line->setPen(*loess_confidence_pen); + + lowess_reg_lower_line = new GdaSpline; + foreground_shps.push_back(lowess_reg_lower_line); + lowess_reg_lower_line->reInit(fit_x, fit_y_lower, axis_scale_x.scale_min, + axis_scale_y.scale_min, scaleX, scaleY); + lowess_reg_lower_line->setPen(*loess_confidence_pen); + } + } + + + + ResizeSelectableShps(); + + LOG_MSG("Exiting LoessPlotCanvas::PopulateCanvas"); +} + +void LoessPlotCanvas::UpdateMargins() +{ + int virtual_screen_marg_top = 20;//20; + int virtual_screen_marg_right = 5;//20; + int virtual_screen_marg_bottom = 5;//45; + int virtual_screen_marg_left = 5;//45; + + if (style & show_axes) { + virtual_screen_marg_bottom = 45;//45; + virtual_screen_marg_left = 45;//45; + } + last_scale_trans.SetMargin(virtual_screen_marg_top, + virtual_screen_marg_bottom, + virtual_screen_marg_left, + virtual_screen_marg_right); +} + +//////////////////////////////////////////////////////////////////////////////// + +LoessSettingsDlg::LoessSettingsDlg(LoessPlotCanvas* canvas) +: wxDialog(NULL, wxID_ANY, _("Loess Settings"), wxDefaultPosition, + wxSize(420, 450), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER), +canvas(canvas) +{ + CreateControls(); +} +LoessSettingsDlg::~LoessSettingsDlg() +{ + +} + +void LoessSettingsDlg::CreateControls() +{ + wxPanel *panel = new wxPanel(this); + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + + // Parameters + wxFlexGridSizer* gbox = new wxFlexGridSizer(5,2,5,0); + + // span + wxStaticText* st_span = new wxStaticText(panel, wxID_ANY, _("Degree of smoothing (span):")); + m_span = new wxTextCtrl(panel, wxID_ANY, "0.75", wxDefaultPosition, wxSize(200,-1)); + gbox->Add(st_span, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_span, 1, wxEXPAND); + + // span + wxStaticText* st_degree = new wxStaticText(panel, wxID_ANY, _("Degree of the polynomials:")); + wxString choices13[] = {"1", "2"}; + m_degree = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices13); + m_degree->SetSelection(1); + gbox->Add(st_degree, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_degree, 1, wxEXPAND); + + // span + wxStaticText* st_family = new wxStaticText(panel, wxID_ANY, _("Family:")); + wxString choices14[] = {"gaussian", "symmetric"}; + m_family = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices14); + m_family->SetSelection(0); + gbox->Add(st_family, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_family, 1, wxEXPAND); + + // normalize + wxStaticText* st_norm = new wxStaticText(panel, wxID_ANY, _("Normalize predictors:")); + m_normalize = new wxCheckBox(panel, wxID_ANY, ""); + m_normalize->SetValue(true); + gbox->Add(st_norm, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox->Add(m_normalize, 1, wxEXPAND); + + wxStaticBoxSizer *hbox = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Loess Parameters:")); + hbox->Add(gbox, 1, wxEXPAND); + + + // control Parameters + wxFlexGridSizer* gbox1 = new wxFlexGridSizer(9,2,5,0); + + // surface interpolatedirect + wxStaticText* st_surface = new wxStaticText(panel, wxID_ANY, _("Surface:")); + wxString choices15[] = {"interpolate", "direct"}; + m_surface = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices15); + m_surface->SetSelection(0); + gbox1->Add(st_surface, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(m_surface, 1, wxEXPAND); + + // statistics = c("approximate", "exact", "none"), + wxStaticText* st_statistics = new wxStaticText(panel, wxID_ANY, _("Statistics:")); + wxString choices16[] = {"approximate", "exact", "none"}; + m_statistics = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 3, choices16); + m_statistics->SetSelection(0); + gbox1->Add(st_statistics, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(m_statistics, 1, wxEXPAND); + + // trace.hat = c("exact", "approximate"), + wxStaticText* st_tracehat = new wxStaticText(panel, wxID_ANY, _("Trace Hat:")); + wxString choices_tracehat[] = {"approximate", "exact"}; + m_tracehat = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxSize(200,-1), 2, choices_tracehat); + m_tracehat->SetSelection(0); + gbox1->Add(st_tracehat, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(m_tracehat, 1, wxEXPAND); + + // cell 0.2 + wxStaticText* st_cell = new wxStaticText(panel, wxID_ANY, _("Cell:")); + m_cell = new wxTextCtrl(panel, wxID_ANY, "0.2", wxDefaultPosition, wxSize(200,-1)); + gbox1->Add(st_cell, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(m_cell, 1, wxEXPAND); + + // iterations 4 + wxStaticText* st_iteration = new wxStaticText(panel, wxID_ANY, _("Iterations:")); + m_iterations = new wxTextCtrl(panel, wxID_ANY, "4", wxDefaultPosition, wxSize(200,-1)); + gbox1->Add(st_iteration, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, 10); + gbox1->Add(m_iterations, 1, wxEXPAND); + + wxStaticBoxSizer *hbox1 = new wxStaticBoxSizer(wxHORIZONTAL, panel, _("Loess Control Parameters:")); + hbox1->Add(gbox1, 1, wxEXPAND); + + // buttons + wxButton *okButton = new wxButton(panel, wxID_OK, _("Apply"), wxDefaultPosition, + wxSize(70, 30)); + wxButton *closeButton = new wxButton(panel, wxID_EXIT, _("Close"), + wxDefaultPosition, wxSize(70, 30)); + wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); + hbox2->Add(okButton, 1, wxALIGN_CENTER | wxALL, 5); + hbox2->Add(closeButton, 1, wxALIGN_CENTER | wxALL, 5); + + vbox->Add(hbox, 1, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 10); + vbox->Add(hbox1, 1, wxEXPAND | wxALL, 10); + vbox->Add(hbox2, 1, wxALIGN_CENTER | wxALL, 10); + + + panel->SetSizer(vbox); + + Centre(); + + // Content + //InitVariableCombobox(box); + //InitWeightsCombobox(box3); + + //combo_var = box; + //combo_weights = box3; + + // Events + okButton->Bind(wxEVT_BUTTON, &LoessSettingsDlg::OnOK, this); + closeButton->Bind(wxEVT_BUTTON, &LoessSettingsDlg::OnClose, this); + + Setup(canvas->GetLoess()); +} + + +void LoessSettingsDlg::OnClose(wxCommandEvent& event ) +{ + wxLogMessage("In MultiVariableSettingsDlg::OnClose"); + + event.Skip(); + EndDialog(wxID_CANCEL); +} + +void LoessSettingsDlg::Setup(loess* lo) +{ + wxString str_span; + str_span << lo->model->span; + m_span->SetValue(str_span); + + if(lo->model->degree == 1) + m_degree->SetSelection(0); + else + m_degree->SetSelection(1); + + if (strcmp(lo->model->family, "gaussian") ==0) + m_family->SetSelection(0); + else + m_family->SetSelection(1); + + if (lo->model->normalize == 1) + m_normalize->SetValue(true); + else + m_normalize->SetValue(false); + + wxString str_cell; + str_cell << lo->control->cell; + m_cell->SetValue(str_cell); + + wxString str_iter; + str_iter << lo->control->iterations; + m_iterations->SetValue(str_iter); + + // "approximate", "exact", "none" + if (strcmp(lo->control->statistics, "approximate") ==0) + m_statistics->SetSelection(0); + else if (strcmp(lo->control->statistics, "exact") ==0) + m_statistics->SetSelection(1); + else + m_statistics->SetSelection(2); + + // surface interpolate direct + if (strcmp(lo->control->surface, "interpolate") ==0) + m_surface->SetSelection(0); + else + m_surface->SetSelection(1); + + // "exact", "approximate" + if (strcmp(lo->control->trace_hat, "approximate") ==0) + m_tracehat->SetSelection(0); + else + m_tracehat->SetSelection(1); +} + +void LoessSettingsDlg::OnOK(wxCommandEvent& event ) +{ + wxLogMessage("Entering MultiVariableSettingsDlg::OnOK"); + if (canvas) { + bool success = false; + double v_span; + success = m_span->GetValue().ToDouble(&v_span); + if (!success || v_span <= 0 || v_span > 1) { + wxMessageDialog dlg(this, _("Please input a valid numeric value for span."), _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + double cell; + success = m_cell->GetValue().ToDouble(&cell); + if (!success) { + wxMessageDialog dlg(this, _("Please input a valid numeric value for cell."), _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + long iterations; + success = m_iterations->GetValue().ToLong(&iterations); + if (!success || iterations < 2) { + wxMessageDialog dlg(this, _("Please input a valid numeric value for iterations."), _("Error"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + long degree = m_degree->GetSelection() + 1; + const char* family = m_family->GetStringSelection().c_str(); + bool normalize = m_normalize->GetValue(); + const char* surface = m_surface->GetStringSelection().c_str(); + const char* statistics = m_statistics->GetStringSelection().c_str(); + const char* trace_hat = m_tracehat->GetStringSelection().c_str(); + + + loess* lo = canvas->GetLoess(); + lo->model->span = v_span; + lo->model->degree = degree; + + if (m_family->GetSelection()==0) lo->model->family = "gaussian"; + else lo->model->family ="symmetric"; + + lo->model->normalize = (long)normalize; + lo->control->cell = cell; + lo->control->iterations = iterations; + + // "approximate", "exact", "none" + if (m_statistics->GetSelection() == 0) lo->control->statistics = "approximate"; + else if (m_statistics->GetSelection() == 1) lo->control->statistics = "exact"; + else lo->control->statistics = "none"; + + // surface interpolate direct + if (m_surface->GetSelection() == 0) lo->control->surface ="interpolate"; + else lo->control->surface = "direct"; + + // "exact", "approximate" + if (m_tracehat->GetSelection() == 0) lo->control->trace_hat = "approximate"; + else lo->control->trace_hat = "exact"; + + canvas->RunLoess(); + } +} diff --git a/Explore/LoessPlotCanvas.h b/Explore/LoessPlotCanvas.h new file mode 100644 index 000000000..44c879b5f --- /dev/null +++ b/Explore/LoessPlotCanvas.h @@ -0,0 +1,190 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_LOESS_CANVAS_VIEW_H__ +#define __GEODA_CENTER_LOESS_CANVAS_VIEW_H__ + +#include +#include +#include +#include +#include +#include + +#include "../TemplateCanvas.h" +#include "../TemplateFrame.h" +#include "../GdaShape.h" +#include "../Algorithms/loess.h" + +class HighlightState; +class Project; + +class LoessPlotCanvas : public TemplateCanvas +{ +public: + DECLARE_CLASS(LoessPlotCanvas) + + enum Style { + DEFAULT_STYLE = 0, + add_auto_padding_min = 1, //0b00000001 + add_auto_padding_max = 2, //0b00000010 + use_larger_filled_circles = 4, + show_axes = 8, + show_horiz_axis_through_origin = 16, + show_vert_axis_through_origin = 32, + show_data_points = 64, + show_confidence_interval = 128, + show_lowess_smoother = 256, + view_standardized_data = 512, + show_slope_values = 1024 + }; + + LoessPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, + HLStateInt* hl_state_int, + const std::vector& X, + const std::vector& Y, + const std::vector& X_undf, + const std::vector& Y_undef, + const wxString& Xname, + const wxString& Yname, + int style, + const wxString& right_click_menu_id = wxEmptyString, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + virtual ~LoessPlotCanvas(); + + virtual void OnEditLoess(wxCommandEvent& evt); + virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual void AddTimeVariantOptionsToMenu(wxMenu* menu); + virtual void update(HLStateInt* o); + virtual wxString GetCanvasTitle(); + virtual wxString GetVariableNames(); + virtual void UpdateStatusBar(); + virtual void UpdateSelection(bool shiftdown, bool pointsel); + + virtual void TimeSyncVariableToggle(int var_index); + virtual void FixedScaleVariableToggle(int var_index); + + void SetSelectableOutlineColor(wxColour color); + void SetSelectableFillColor(wxColour color); + void SetHighlightColor(wxColour color); + + void ShowAxes(bool display); + void ShowRegimes(bool display); + bool IsShowAxes() { return show_axes; } + + void RunLoess(); + //loess_struct* GetLoess() { return &lo; } + loess* GetLoess() { return &lo; } + +protected: + + virtual void PopulateCanvas(); + void UpdateMargins(); + + +protected: + //ScatterPlotPens pens; + // data + size_t n_pts; + std::vector X; + std::vector Y; + std::vector W; + std::vector X_undef; + std::vector Y_undef; + const std::vector& orgX; + const std::vector& orgY; + + // x,y labels or variable name + wxString Xname; + wxString Yname; + // used for scaling, so can be smaller/larger than min/max in X/Y + double Xmin, Xmax, Ymin, Ymax; + + // user defined y-axis range + wxString def_y_min; + wxString def_y_max; + + // shapes + GdaSpline* lowess_reg_line; + GdaSpline* lowess_reg_upper_line; + GdaSpline* lowess_reg_lower_line; + + // axis + AxisScale axis_scale_x; + AxisScale axis_scale_y; + + double scaleX; + double scaleY; + + // axes + GdaAxis* x_baseline; + GdaAxis* y_baseline; + + // style + int style; + wxString right_click_menu_id; + + // loess + loess lo; + prediction pre; + double loess_span; + double loess_coverage; + int loess_degree; + wxString loess_family; + std::vector fit_x; + std::vector fit_y; + std::vector fit_y_upper; + std::vector fit_y_lower; + long int loess_pts_sz; + + DECLARE_EVENT_TABLE() +}; + +class LoessSettingsDlg : public wxDialog +{ +public: + LoessSettingsDlg(LoessPlotCanvas* canvas); + virtual ~LoessSettingsDlg(); + + void CreateControls(); + bool Init(); + + void OnOK( wxCommandEvent& event ); + void OnClose( wxCommandEvent& event ); + + //void Setup(loess_struct* lo); + void Setup(loess* lo); + +protected: + wxTextCtrl* m_span; + wxChoice* m_degree; + wxChoice* m_family; + wxCheckBox* m_normalize; + wxChoice* m_surface; + wxChoice* m_statistics; + wxChoice* m_tracehat; + wxTextCtrl* m_cell; + wxTextCtrl* m_iterations; + + LoessPlotCanvas* canvas; +}; + +#endif diff --git a/Explore/MLJCCoordinator.cpp b/Explore/MLJCCoordinator.cpp index 76a0291aa..89ed37894 100644 --- a/Explore/MLJCCoordinator.cpp +++ b/Explore/MLJCCoordinator.cpp @@ -342,9 +342,20 @@ void JCCoordinator::CalcMultiLocalJoinCount() GalElement* W = gw->gal; Gal_vecs[t] = gw; Gal_vecs_orig[t] = weights; - + for (int i=0; i0) { // x_j = 1 for (int j=0, sz=W[i].Size(); j 0) { int countLarger = 0; diff --git a/Explore/MLJCMapNewView.cpp b/Explore/MLJCMapNewView.cpp index 4601ad8dc..c64b8f2ae 100644 --- a/Explore/MLJCMapNewView.cpp +++ b/Explore/MLJCMapNewView.cpp @@ -737,24 +737,26 @@ void MLJCMapFrame::OnSigFilterSetup(wxCommandEvent& event) new_n += 1; } } - int j= 0; - double* p_val = new double[new_n]; - for (int i=0; inum_obs; i++) { - if (gs_coord->data[0][t][i] == 1) { - p_val[j++] = p_val_t[i]; + if (new_n > 0) { + int j= 0; + double* p_val = new double[new_n]; + for (int i=0; inum_obs; i++) { + if (gs_coord->data[0][t][i] == 1) { + p_val[j++] = p_val_t[i]; + } } + InferenceSettingsDlg dlg(this, user_sig, p_val, new_n, ttl); + if (dlg.ShowModal() == wxID_OK) { + gs_coord->SetSignificanceFilter(-1); + gs_coord->significance_cutoff = dlg.GetAlphaLevel(); + gs_coord->user_sig_cutoff = dlg.GetUserInput(); + gs_coord->notifyObservers(); + gs_coord->bo = dlg.GetBO(); + gs_coord->fdr = dlg.GetFDR(); + UpdateOptionMenuItems(); + } + delete[] p_val; } - InferenceSettingsDlg dlg(this, user_sig, p_val, new_n, ttl); - if (dlg.ShowModal() == wxID_OK) { - gs_coord->SetSignificanceFilter(-1); - gs_coord->significance_cutoff = dlg.GetAlphaLevel(); - gs_coord->user_sig_cutoff = dlg.GetUserInput(); - gs_coord->notifyObservers(); - gs_coord->bo = dlg.GetBO(); - gs_coord->fdr = dlg.GetFDR(); - UpdateOptionMenuItems(); - } - delete[] p_val; } diff --git a/Explore/MapLayer.cpp b/Explore/MapLayer.cpp index 80e7fc010..c48c2a40d 100644 --- a/Explore/MapLayer.cpp +++ b/Explore/MapLayer.cpp @@ -11,8 +11,8 @@ BackgroundMapLayer::BackgroundMapLayer() : AssociateLayerInt(), -pen_color(wxColour(192, 192, 192)), -brush_color(wxColour(255, 255, 255, 255)), +pen_color(wxColour(80, 80, 80)), +brush_color(wxColour(192, 192, 192, 255)), point_radius(2), opacity(255), pen_size(1), @@ -28,8 +28,8 @@ BackgroundMapLayer::BackgroundMapLayer(wxString name, : AssociateLayerInt(), layer_name(name), layer_proxy(_layer_proxy), - pen_color(wxColour(192, 192, 192)), - brush_color(wxColour(255, 255, 255, 255)), + pen_color(wxColour(80, 80, 80)), + brush_color(wxColour(192, 192, 192, 255)), point_radius(2), opacity(255), pen_size(1), @@ -39,6 +39,7 @@ BackgroundMapLayer::BackgroundMapLayer(wxString name, { is_hide = false; num_obs = layer_proxy->GetNumRecords(); + shapes.resize(num_obs, 0); shape_type = layer_proxy->GetGdaGeometries(shapes, sr); // this is for map boundary only shape_type = layer_proxy->GetOGRGeometries(geoms, sr); @@ -56,6 +57,9 @@ BackgroundMapLayer::~BackgroundMapLayer() if (map_boundary) { delete map_boundary; } + for (int i=0; iGetSpatialReference(); + } + return NULL; +} + +void BackgroundMapLayer::GetExtentOfSelected(double &_minx, double &_miny, double &_maxx, + double &_maxy) +{ + bool has_selected = false; + int cnt = 0; + for (int i=0; igetGeometryType()); + if (eType == wkbPoint) { + OGRPoint* p = (OGRPoint *) geoms[i]; + if (cnt == 0) { + _minx = p->getX(); + _miny = p->getY(); + _maxx = p->getX(); + _maxy = p->getY(); + } else { + if (p->getX() < _minx) _minx = p->getX(); + if (p->getY() < _miny) _miny = p->getY(); + if (p->getX() > _maxx) _maxx = p->getX(); + if (p->getY() > _maxy) _maxy = p->getY(); + } + } else { + OGREnvelope box; + geoms[i]->getEnvelope(&box); + if (cnt == 0) { + _minx =box.MinX; + _miny =box.MinY; + _maxx =box.MaxX; + _maxy =box.MaxY; + } else { + if (box.MinX < _minx) _minx = box.MinX; + if (box.MinY < _miny) _miny = box.MinY; + if (box.MaxX > _maxx) _maxx = box.MaxX; + if (box.MaxY > _maxy) _maxy = box.MaxY; + } + } + cnt += 1; + } + } + if (has_selected == false) { + // fall back to layer extent + GetExtent(_minx, _miny, _maxx, _maxy); + } +} + int BackgroundMapLayer::GetHighlightRecords() { int hl_cnt = 0; @@ -158,7 +215,7 @@ void BackgroundMapLayer::DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas) vector fid; // e.g. 2 2 1 1 3 5 4 4 associated_layer->GetKeyColumnData(associated_key, fid); associated_layer->ResetHighlight(); - + map > aid_idx; for (int i=0; iDrawHighlight(dc, map_canvas); + // draw lines to associated layer + wxPen pen(this->GetAssociatePenColour()); + dc.SetPen(pen); for (int i=0; imaxy = maxy; if (clone_style) { + copy->SetAssociatePenColour(associate_pencolor); copy->SetPenColour(pen_color); copy->SetBrushColour(brush_color); copy->SetPointRadius(point_radius); @@ -259,8 +320,10 @@ BackgroundMapLayer* BackgroundMapLayer::Clone(bool clone_style) if (map_boundary) { copy->map_boundary = map_boundary->clone(); } - // not deep copy - copy->shapes = shapes; + for (int i=0; ishapes.push_back(shapes[i]->clone()); + } + // not deep copy copy->geoms = geoms; copy->layer_proxy = layer_proxy; copy->highlight_flags = highlight_flags; @@ -506,7 +569,9 @@ void GdaShapeLayer::applyScaleTrans(const GdaScaleTrans &A) } } else { for (int i=0; ishapes.size(); i++) { - ml->shapes[i]->applyScaleTrans(A); + if (ml->shapes[i]) { + ml->shapes[i]->applyScaleTrans(A); + } } } } @@ -519,7 +584,9 @@ void GdaShapeLayer::projectToBasemap(Gda::Basemap *basemap, double scale_factor) } } else { for (int i=0; ishapes.size(); i++) { - ml->shapes[i]->projectToBasemap(basemap, scale_factor); + if (ml->shapes[i]) { + ml->shapes[i]->projectToBasemap(basemap, scale_factor); + } } } } @@ -541,12 +608,16 @@ void GdaShapeLayer::paintSelf(wxDC &dc) for (int i=0; ishapes.size(); i++) { if (ml->GetShapeType() == Shapefile::POINT_TYP) { - GdaPoint* pt = (GdaPoint*)ml->shapes[i]; - pt->radius = ml->GetPointRadius(); + if (ml->shapes[i]) { + GdaPoint* pt = (GdaPoint*)ml->shapes[i]; + pt->radius = ml->GetPointRadius(); + } + } + if (ml->shapes[i]) { + ml->shapes[i]->setPen(pen); + ml->shapes[i]->setBrush(brush); + ml->shapes[i]->paintSelf(dc); } - ml->shapes[i]->setPen(pen); - ml->shapes[i]->setBrush(brush); - ml->shapes[i]->paintSelf(dc); } } } diff --git a/Explore/MapLayer.hpp b/Explore/MapLayer.hpp index 4cccc8a79..dd5762ce5 100644 --- a/Explore/MapLayer.hpp +++ b/Explore/MapLayer.hpp @@ -23,17 +23,20 @@ class AssociateLayerInt; // my_key, key from other layer typedef pair Association; +// Interfaces for map layer setting highlight association to any other map layer +// It is implemented by: BackgroundMapLayer and MapCanvas class AssociateLayerInt { protected: bool is_hide; - + wxColour associate_pencolor; + public: // primary key : AssociateLayer map associated_layers; map associated_lines; - AssociateLayerInt() {} + AssociateLayerInt() : associate_pencolor(wxColour(50, 50, 50)) {} virtual ~AssociateLayerInt() {} virtual bool IsCurrentMap() = 0; @@ -53,19 +56,32 @@ class AssociateLayerInt //virtual vector GetShapes() = 0; virtual void GetExtent(double &minx, double &miny, double &maxx, double &maxy) = 0; + virtual void GetExtentOfSelected(double &minx, double &miny, double &maxx, + double &maxy) = 0; + virtual OGRSpatialReference* GetSpatialReference() = 0; virtual void SetLayerAssociation(wxString my_key, AssociateLayerInt* layer, wxString key, bool show_connline=true) = 0; virtual bool IsAssociatedWith(AssociateLayerInt* layer) = 0; virtual void ClearLayerAssociation() { associated_layers.clear(); + ResetHighlight(); } virtual void SetHide(bool flag) { is_hide = flag; } virtual bool IsHide() { return is_hide; } -}; + virtual wxColour GetAssociatePenColour() { + return associate_pencolor; + } + virtual void SetAssociatePenColour(wxColour& color) { + associate_pencolor = color; + } +}; +// BackgroundMapLayer is similar to MapCanvas, but much simpler +// MapCanvas has vector of BackgroundMapLayers as foreground map layers and +// background layers, which are rendered as GdaShapeLayer:GdaShape class BackgroundMapLayer : public AssociateLayerInt { int num_obs; @@ -111,7 +127,9 @@ class BackgroundMapLayer : public AssociateLayerInt virtual void RemoveAssociatedLayer(AssociateLayerInt* layer); virtual int GetHighlightRecords(); virtual void GetExtent(double &minx, double &miny, double &maxx, double &maxy); - + virtual void GetExtentOfSelected(double &minx, double &miny, double &maxx, + double &maxy); + virtual OGRSpatialReference* GetSpatialReference(); // clone all except shapes and geoms, which are owned by Project* instance; // so that different map window can configure the multi-layers BackgroundMapLayer* Clone(bool clone_style=false); @@ -124,7 +142,7 @@ class BackgroundMapLayer : public AssociateLayerInt void SetName(wxString name); virtual wxString GetName(); - + void SetPenColour(wxColour& color); wxColour GetPenColour(); @@ -177,14 +195,4 @@ class GdaShapeLayer : public GdaShape { virtual void paintSelf(wxDC& dc); virtual void paintSelf(wxGraphicsContext* gc); }; - -class GdaGridLayer : public GdaShape { - wxString name; - vector geoms; - -public: - GdaGridLayer(wxString name, int width, int height); - ~GdaGridLayer(); - -}; #endif /* MapLayer_hpp */ diff --git a/Explore/MapLayerTree.cpp b/Explore/MapLayerTree.cpp index 882fcda55..2f2695285 100644 --- a/Explore/MapLayerTree.cpp +++ b/Explore/MapLayerTree.cpp @@ -315,7 +315,7 @@ isDragDropAllowed(false) leg_pad_x = 10; leg_pad_y = 5; - current_map_title = canvas->GetName() + " (current map)"; + current_map_title = canvas->GetName() + _(" (current map)"); Init(); @@ -356,7 +356,7 @@ void MapTree::Init() for (int i=0; iGetProject(), this, new_data, - "Save Results: Spatial Counts", + _("Save Results: Spatial Counts"), wxDefaultPosition, wxSize(400,400)); dlg.ShowModal(); } @@ -509,7 +509,23 @@ void MapTree::OnChangeFillColor(wxCommandEvent& event) clr = wxGetColourFromUser(this, ml->GetBrushColour()); ml->SetBrushColour(clr); Refresh(); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); + } +} + +void MapTree::OnChangeAssociatelineColor(wxCommandEvent& event) +{ + wxString map_name = map_titles[new_order[select_id]]; + AssociateLayerInt* ml = GetMapLayer(map_name); + if (ml == NULL) { + ml = canvas; + } + if (ml) { + wxColour clr; + clr = wxGetColourFromUser(this, ml->GetAssociatePenColour()); + ml->SetAssociatePenColour(clr); + Refresh(); + canvas->RedrawMap(); } } @@ -522,9 +538,10 @@ void MapTree::OnChangeOutlineColor(wxCommandEvent& event) clr = wxGetColourFromUser(this, ml->GetPenColour()); ml->SetPenColour(clr); Refresh(); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); } } + void MapTree::OnChangePointRadius(wxCommandEvent& event) { wxString map_name = map_titles[new_order[select_id]]; @@ -536,14 +553,13 @@ void MapTree::OnChangePointRadius(wxCommandEvent& event) int new_radius = dlg.GetRadius(); ml->SetPointRadius(new_radius); Refresh(); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); } } } void MapTree::OnClearAssociateLayer(wxCommandEvent& event) { - vector all_layers; wxString map_name = map_titles[new_order[select_id]]; AssociateLayerInt* ml = GetMapLayer(map_name); @@ -557,6 +573,49 @@ void MapTree::OnClearAssociateLayer(wxCommandEvent& event) } +void MapTree::OnZoomToLayer(wxCommandEvent& event) +{ + // set map extent to selected layer + wxString map_name = map_titles[new_order[select_id]]; + BackgroundMapLayer* ml = GetMapLayer(map_name); + double minx, miny, maxx, maxy; + if (ml == NULL) { + // selected layer is current map + canvas->GetExtent(minx, miny, maxx, maxy); + } else { + // other layer + ml->GetExtent(minx, miny, maxx, maxy); + } + canvas->ExtentTo(minx, miny, maxx, maxy); + canvas->RedrawMap(); +} + +void MapTree::OnZoomToSelected(wxCommandEvent& event) +{ + // set map extent to selected objects in mouse clicked layer + wxString map_name = map_titles[new_order[select_id]]; + BackgroundMapLayer* ml = GetMapLayer(map_name); + double minx, miny, maxx, maxy; + if (ml == NULL) { + // selected layer is current map + canvas->GetExtentOfSelected(minx, miny, maxx, maxy); + } else { + // other layer + ml->GetExtentOfSelected(minx, miny, maxx, maxy); + // re projection if needed + OGRSpatialReference* destSR = canvas->GetSpatialReference(); + OGRSpatialReference* sourceSR = ml->GetSpatialReference(); + OGRCoordinateTransformation *poCT = OGRCreateCoordinateTransformation(sourceSR, destSR); + if (poCT!= NULL) { + //poCT->Transform(1, &minx, &miny); + //poCT->Transform(1, &maxx, &maxx); + } + } + canvas->ExtentTo(minx, miny, maxx, maxy); + canvas->RedrawMap(); + canvas->ResetBrushing(); +} + void MapTree::OnSetAssociateLayer(wxCommandEvent& event) { vector all_layers; @@ -647,7 +706,7 @@ void MapTree::OnOutlineVisible(wxCommandEvent& event) ml->SetPenSize(1); } Refresh(); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); } } void MapTree::OnShowMapBoundary(wxCommandEvent& event) @@ -658,7 +717,7 @@ void MapTree::OnShowMapBoundary(wxCommandEvent& event) bool show_bnd = ml->IsShowBoundary(); ml->ShowBoundary(!show_bnd); Refresh(); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); } } @@ -680,11 +739,11 @@ void MapTree::OnEvent(wxMouseEvent& event) Refresh(); } else if (event.Dragging()) { if (isLeftDown) { - isLeftMove = true; // moving if (select_id > -1 ) { + isLeftMove = true; // paint selected label with mouse - int label_id = new_order[select_id]; + //int label_id = new_order[select_id]; move_pos = event.GetPosition(); if (cat_clicked > -1 && select_id != cat_clicked) { // reorganize new_order @@ -734,8 +793,18 @@ void MapTree::OnRightClick(wxMouseEvent& event) wxString map_name = map_titles[ new_order[select_id] ]; BackgroundMapLayer* ml = GetMapLayer(map_name); - - wxString menu_name = _("Set Highlight Association"); + + wxString menu_name = _("Layer Full Extent"); + popupMenu->Append(XRCID("MAPTREE_SET_LAYER_EXTENT"), menu_name); + Connect(XRCID("MAPTREE_SET_LAYER_EXTENT"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MapTree::OnZoomToLayer)); + menu_name = _("Zoom to Selected"); + popupMenu->Append(XRCID("MAPTREE_ZOOM_TO_SELECTED"), menu_name); + Connect(XRCID("MAPTREE_ZOOM_TO_SELECTED"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MapTree::OnZoomToSelected)); + popupMenu->AppendSeparator(); + + menu_name = _("Set Highlight Association"); popupMenu->Append(XRCID("MAPTREE_SET_FOREIGN_KEY"), menu_name); Connect(XRCID("MAPTREE_SET_FOREIGN_KEY"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MapTree::OnSetAssociateLayer)); @@ -744,7 +813,10 @@ void MapTree::OnRightClick(wxMouseEvent& event) _("Clear Highlight Association")); Connect(XRCID("MAPTREE_CLEAR_FOREIGN_KEY"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MapTree::OnClearAssociateLayer)); - + + popupMenu->Append(XRCID("MAPTREE_CHANGE_ASSOCIATELINE_COLOR"), _("Change Associate Line Color")); + Connect(XRCID("MAPTREE_CHANGE_ASSOCIATELINE_COLOR"), wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MapTree::OnChangeAssociatelineColor)); if (ml == NULL) { // if it's current map, then no other options other than "Set Highlight" PopupMenu(popupMenu, event.GetPosition()); @@ -752,18 +824,16 @@ void MapTree::OnRightClick(wxMouseEvent& event) } popupMenu->AppendSeparator(); - popupMenu->Append(XRCID("MAPTREE_CHANGE_FILL_COLOR"), _("Change Fill Color")); popupMenu->Append(XRCID("MAPTREE_CHANGE_OUTLINE_COLOR"), _("Change Outline Color")); popupMenu->Append(XRCID("MAPTREE_OUTLINE_VISIBLE"), _("Outline Visible")); - + // check menu items wxMenuItem* outline = popupMenu->FindItem(XRCID("MAPTREE_OUTLINE_VISIBLE")); if (outline) { outline->SetCheckable(true); if (ml->GetPenSize() > 0) outline->Check(); } - Connect(XRCID("MAPTREE_CHANGE_FILL_COLOR"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MapTree::OnChangeFillColor)); Connect(XRCID("MAPTREE_CHANGE_OUTLINE_COLOR"), wxEVT_COMMAND_MENU_SELECTED, @@ -813,7 +883,12 @@ void MapTree::OnDraw(wxDC& dc) for (int i=0; iSetHide(!ml_int->IsHide()); - canvas->DisplayMapLayers(); + canvas->RedrawMap(); Refresh(); } } @@ -996,10 +1067,12 @@ void MapTree::OnMapLayerChange() is_fgmap = false; continue; } + BackgroundMapLayer* lyr = GetMapLayer(name); + lyr->ResetHighlight(); if (is_fgmap) { - new_fg_maps.push_back(GetMapLayer(name)); + new_fg_maps.push_back(lyr); } else { - new_bg_maps.push_back(GetMapLayer(name)); + new_bg_maps.push_back(lyr); } } @@ -1008,8 +1081,14 @@ void MapTree::OnMapLayerChange() is_resize = true; canvas->SetForegroundMayLayers(fg_maps); canvas->SetBackgroundMayLayers(bg_maps); - if (!canvas->IsExtentChanged()) canvas->ExtentMap(); - canvas->DisplayMapLayers(); + + // update selection if selection box is made + //if (fg_maps.empty() == false) { + // canvas->UpdateSelectionPoints(); + //} + + // update the canvas + canvas->RedrawMap(); } void MapTree::AddCategoryColorToMenu(wxMenu* menu, int cat_clicked) diff --git a/Explore/MapLayerTree.hpp b/Explore/MapLayerTree.hpp index 86d5b7a96..22f1d31b6 100644 --- a/Explore/MapLayerTree.hpp +++ b/Explore/MapLayerTree.hpp @@ -17,6 +17,7 @@ using namespace std; class MapCanvas; +// Highlight association dialog class SetAssociationDlg : public wxDialog { static wxString LAYER_LIST_ID; @@ -48,6 +49,7 @@ class SetAssociationDlg : public wxDialog void OnOk(wxCommandEvent& e); }; +// MapTreeFrame and MapTree are for the pop-up window of multi-layer management class MapTree: public wxWindow { DECLARE_ABSTRACT_CLASS(MapTree) @@ -96,6 +98,7 @@ class MapTree: public wxWindow void RemoveAssociationRelationship(BackgroundMapLayer* ml); void OnEvent(wxMouseEvent& event); void OnRightClick(wxMouseEvent& event); + void OnChangeAssociatelineColor(wxCommandEvent& event); void OnChangeFillColor(wxCommandEvent& event); void OnChangeOutlineColor(wxCommandEvent& event); void OnChangePointRadius(wxCommandEvent& event); @@ -110,6 +113,8 @@ class MapTree: public wxWindow void AddCategoryColorToMenu(wxMenu* menu, int cat_clicked); void OnSetAssociateLayer(wxCommandEvent& event); void OnClearAssociateLayer(wxCommandEvent& event); + void OnZoomToLayer(wxCommandEvent& event); + void OnZoomToSelected(wxCommandEvent& event); void OnMapLayerChange(); BackgroundMapLayer* GetMapLayer(wxString name); void DrawLegend(wxDC& dc, int x, int y, wxString text); diff --git a/Explore/MapLayoutView.h b/Explore/MapLayoutView.h index b84960d53..60dafe73e 100644 --- a/Explore/MapLayoutView.h +++ b/Explore/MapLayoutView.h @@ -14,8 +14,7 @@ class MapCanvas; class TemplateLegend; - - +// Window dialog to save map as high-def image class CanvasExportSettingDialog : public wxDialog { wxTextCtrl *tc1; diff --git a/Explore/MapNewView.cpp b/Explore/MapNewView.cpp index 7cdfc660c..cd9f1b95a 100644 --- a/Explore/MapNewView.cpp +++ b/Explore/MapNewView.cpp @@ -24,16 +24,7 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include + #include "../DataViewer/TableInterface.h" #include "../DataViewer/TimeState.h" #include "../DialogTools/CatClassifDlg.h" @@ -61,78 +52,6 @@ #include "Basemap.h" #include "MapNewView.h" -using namespace std; - -wxWindowID ID_SLIDER = wxID_ANY; - -IMPLEMENT_CLASS(SliderDialog, wxDialog) -BEGIN_EVENT_TABLE(SliderDialog, wxDialog) -END_EVENT_TABLE() - -SliderDialog::SliderDialog(wxWindow * parent, - MapCanvas* _canvas, - wxWindowID id, - const wxString & caption, - const wxPoint & position, - const wxSize & size, - long style ) -: wxDialog( parent, id, caption, position, size, style) -{ - - wxLogMessage("Open SliderDialog"); - - canvas = _canvas; - - wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); - this->SetSizer(topSizer); - - wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); - topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - - // A text control for the user’s name - ID_SLIDER = wxID_ANY; - double trasp = (double)canvas->tran_unhighlighted / 255.0; - int trasp_scale = 100 * trasp; - - wxBoxSizer* subSizer = new wxBoxSizer(wxHORIZONTAL); - slider = new wxSlider(this, ID_SLIDER, trasp_scale, 0, 100, - wxDefaultPosition, wxSize(200, -1), - wxSL_HORIZONTAL); - subSizer->Add(new wxStaticText(this, wxID_ANY,"1.0"), 0, - wxALIGN_CENTER_VERTICAL|wxALL); - subSizer->Add(slider, 0, wxALIGN_CENTER_VERTICAL|wxALL); - subSizer->Add(new wxStaticText(this, wxID_ANY,"0.0"), 0, - wxALIGN_CENTER_VERTICAL|wxALL); - - boxSizer->Add(subSizer); - wxString txt_transparency = wxString::Format(_("Current Transparency: %.2f"), 1.0 - trasp); - - slider_text = new wxStaticText(this, - wxID_ANY, - txt_transparency, - wxDefaultPosition, - wxSize(100, -1)); - boxSizer->Add(slider_text, 0, wxGROW|wxALL, 5); - boxSizer->Add(new wxButton(this, wxID_CANCEL, _("Close")), 0, wxALIGN_CENTER|wxALL, 10); - - topSizer->Fit(this); - - slider->Bind(wxEVT_SLIDER, &SliderDialog::OnSliderChange, this); -} - -SliderDialog::~SliderDialog() -{ -} - -void SliderDialog::OnSliderChange( wxCommandEvent & event ) -{ - int val = event.GetInt(); - double trasp = 1.0 - val / 100.0; - slider_text->SetLabel(wxString::Format(_("Current Transparency: %.2f"), trasp)); - canvas->tran_unhighlighted = (1-trasp) * 255; - canvas->ReDraw(); -} - IMPLEMENT_CLASS(MapCanvas, TemplateCanvas) BEGIN_EVENT_TABLE(MapCanvas, TemplateCanvas) // in Linux, windows using old paint function without transparency support @@ -148,12 +67,12 @@ END_EVENT_TABLE() bool MapCanvas::has_thumbnail_saved = false; bool MapCanvas::has_shown_empty_shps_msg = false; std::vector MapCanvas::empty_shps_ids(0); -std::map MapCanvas::empty_dict; +boost::unordered_map MapCanvas::empty_dict; MapCanvas::MapCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project_s, - const vector& var_info_s, - const vector& col_ids_s, + const std::vector& var_info_s, + const std::vector& col_ids_s, CatClassification::CatClassifType theme_type, SmoothingType smoothing_type_s, int num_categories_s, @@ -180,8 +99,11 @@ display_map_boundary(false), display_neighbors(false), display_map_with_graph(true), display_voronoi_diagram(false), +display_heat_map(false), +draw_highlight_in_multilayers(false), graph_color(GdaConst::conn_graph_outline_colour), conn_selected_color(GdaConst::conn_select_outline_colour), +conn_selected_fill_color(GdaConst::conn_select_outline_colour), neighbor_fill_color(GdaConst::conn_neighbor_fill_colour), weights_graph_thickness(1), voronoi_diagram_duplicates_exist(false), @@ -194,7 +116,7 @@ ref_var_index(-1), tran_unhighlighted(GdaConst::transparency_unhighlighted), print_detailed_basemap(false), maplayer_state(project_s->GetMapLayerState()), -is_updating(false) +is_updating(true) // default true to prevent sending notify to other maps when init window { wxLogMessage("MapCanvas::MapCanvas()"); is_hide = false; @@ -218,8 +140,8 @@ is_updating(false) if (!ChangeMapType(theme_type, smoothing_type_s, num_categories, weights_id, true, var_info_s, col_ids_s)) { // The user possibly clicked cancel, so try again with themeless map - vector vi(0); - vector cids(0); + std::vector vi(0); + std::vector cids(0); ChangeMapType(CatClassification::no_theme, no_smoothing, 1, boost::uuids::nil_uuid(), true, vi, cids); } @@ -231,6 +153,14 @@ is_updating(false) basemap_item = Gda::GetBasemapSelection(GdaConst::default_basemap_selection, GdaConst::gda_basemap_sources); } + + // add control to map window + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + wxSlider *slider = new wxSlider(this, wxID_ANY, 0, 0, 100, + wxDefaultPosition, wxSize(250, -1), wxSL_HORIZONTAL); + vbox->Add(slider, 0, wxEXPAND | wxLEFT | wxRIGHT, 50); + SetSizer(vbox); + slider->Hide(); } MapCanvas::~MapCanvas() @@ -265,6 +195,38 @@ void MapCanvas::GetExtent(double &minx, double &miny, double &maxx, double &maxy project->GetMapExtent(minx, miny, maxx, maxy); } +void MapCanvas::GetExtentOfSelected(double &minx, double &miny, double &maxx, double &maxy) +{ + bool has_selected = false; + std::vector& highlight_flags = highlight_state->GetHighlight(); + int cnt = 0; + for (int i=0; i box = project->GetBBox(i); + if (cnt == 0) { + minx =box[0]; + miny =box[1]; + maxx =box[2]; + maxy =box[3]; + } else { + if (box[0] < minx) minx = box[0]; + if (box[1] < miny) miny = box[1]; + if (box[2] > maxx) maxx = box[2]; + if (box[3] > maxy) maxy = box[3]; + } + cnt += 1; + } + } + if (has_selected == false) { + // fall back to layer extent + GetExtent(minx, miny, maxx, maxy); + } else { + // reset selection + ResetBrushing(); + } +} + Shapefile::Main& MapCanvas::GetGeometryData() { return project->main_data; @@ -275,24 +237,25 @@ OGRLayerProxy* MapCanvas::GetOGRLayerProxy() return project->layer_proxy; } -vector MapCanvas::GetBackgroundMayLayers() +std::vector MapCanvas::GetBackgroundMayLayers() { return bg_maps; } -void MapCanvas::SetBackgroundMayLayers(vector& val) +void MapCanvas::SetBackgroundMayLayers(std::vector& val) { bg_maps = val; } -vector MapCanvas::GetForegroundMayLayers() +std::vector MapCanvas::GetForegroundMayLayers() { return fg_maps; } -void MapCanvas::SetForegroundMayLayers(vector& val) +void MapCanvas::SetForegroundMayLayers(std::vector& val) { fg_maps = val; + draw_highlight_in_multilayers = !fg_maps.empty(); } int MapCanvas::GetEmptyNumber() @@ -311,20 +274,88 @@ void MapCanvas::SetupColor() { } -void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) +// handle menu events for heat map +void MapCanvas::OnHeatMap(int menu_id) +{ + if (menu_id == XRCID("ID_HEATMAP_BANDWITH")) { + // show bandwidth setup dialog, and dialog will trigger + // map window to refresh + display_heat_map = true; + heat_map.SetBandwidth(this, project); + } else if (menu_id == XRCID("ID_HEATMAP_VARIABLE")) { + // show variable selection dialog, and dialog will trigger + // map window to refresh + display_heat_map = true; + heat_map.SetRadiusVariable(this, project); + } else if (menu_id == XRCID("ID_HEATMAP_TOGGLE")) { + display_heat_map = !display_heat_map; + RedrawMap(); + } else if (display_heat_map) { + // none of the following menu items will work if + // heat map toggle is not checked + if (menu_id == XRCID("ID_HEATMAP_FILL_COLOR")) { + heat_map.ChangeFillColor(this); + } else if (menu_id == XRCID("ID_HEATMAP_OUTLINE_COLOR")) { + heat_map.ChangeOutlineColor(this); + } else if (menu_id == XRCID("ID_HEATMAP_TRANSPARENCY")) { + // show variable selection dialog, and dialog will trigger + // map window to refresh + heat_map.ChangeTransparency(this); + } + } +} + +// handle menu event fro MST map +void MapCanvas::OnMSTMap(int menu_id) { - TemplateCanvas::UpdateSelectionPoints(shiftdown, pointsel); + if (menu_id == XRCID("ID_MAP_MST_TOGGLE")) { + display_mst = !display_mst; + if (display_mst) { + if (mst_map.Create(project) == false) { + display_mst = false; + } + } + RedrawMap(); + } else if (menu_id == XRCID("ID_MAP_MST_SAVE")) { + // save MST to a weights file + mst_map.SaveToWeightsFile(project); + } else if (display_mst) { + if (menu_id == XRCID("ID_MAP_MST_COLOR")) { + mst_map.ChangeColor(this); + } else if (menu_id == XRCID("ID_MAP_MST_THICKNESS_LIGHT")) { + mst_map.ChangeThickness(this, 0); + } else if (menu_id == XRCID("ID_MAP_MST_THICKNESS_NORM")) { + mst_map.ChangeThickness(this, 1); + } else if (menu_id == XRCID("ID_MAP_MST_THICKNESS_STRONG")) { + mst_map.ChangeThickness(this, 2); + } + } +} + +void MapCanvas::UpdateSelection(bool shiftdown, bool pointsel) +{ + // notify other windows to update + is_updating = false; + // clean any select_with_neighbor since it's users operation + select_with_neighbor.clear(); + + TemplateCanvas::UpdateSelection(shiftdown, pointsel); +} - // if multi-layer presents and top layer is not current map - if ( fg_maps.empty() ) { +void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) +{ + // if top layer is current map + //if ( fg_maps.empty() ) { + TemplateCanvas::UpdateSelectionPoints(shiftdown, pointsel); UpdateMapTree(); return; - } - + //} + /* + // apply selection on top layer BackgroundMapLayer* ml = fg_maps[0]; int nn = ml->GetNumRecords(); - vector& geoms = ml->geoms; - vector& shapes = ml->shapes; + std::vector& geoms = ml->geoms; + std::vector& shapes = ml->shapes; bool selection_changed = false; if (!shiftdown) { @@ -332,16 +363,20 @@ void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) } if (pointsel) { // a point selection for (int i=0; ipointWithin(sel1)) { + if (geoms[i] && shapes[i]->pointWithin(sel1)) { ml->SetHighlight(i); } else { ml->SetUnHighlight(i); } } + selection_changed = true; } else { // determine which obs intersect the selection region. if (brushtype == rectangle) { wxRegion rect(wxRect(sel1, sel2)); for (int i=0; icenter) != wxOutRegion); if (contains) { @@ -352,6 +387,7 @@ void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) ml->SetUnHighlight(i); } } + selection_changed = true; } else if (brushtype == circle) { // using quad-tree to do pre-selection @@ -404,25 +440,52 @@ void MapCanvas::UpdateSelectionPoints(bool shiftdown, bool pointsel) highlight_timer->Start(50); } UpdateMapTree(); + */ } void MapCanvas::DetermineMouseHoverObjects(wxPoint pointsel) { + std::vector old_hover_obs = hover_obs; + TemplateCanvas::DetermineMouseHoverObjects(pointsel); + + bool hover_changed = old_hover_obs.size() != hover_obs.size(); + + select_with_neighbor.clear(); // reset selection in connectivity map/graph + + if (hover_changed == false && hover_obs.empty() != true) { + std::map hover_dict; + for (size_t i=0; i& hs = GetSelBitVec(); - if (hover_obs.empty() == false) { - for (int i=0; i& hs = GetSelBitVec(); + + if (hover_changed) { + for (size_t i=0; iSetTotalHighlighted(1); + for (size_t i=0; iSetTotalHighlighted(total_highlighted); + + layer1_valid = false; + DrawLayers(); + + highlight_state->SetEventType(HLStateInt::delta); + highlight_timer->Start(50); } - //highlight_state->SetEventType(HLStateInt::delta); - //highlight_timer->Start(50); - layer1_valid = false; - DrawLayers(); } } @@ -434,7 +497,7 @@ void MapCanvas::SetPredefinedColor(const wxString& lbl, const wxColor& new_color void MapCanvas::UpdatePredefinedColor(const wxString& lbl, const wxColor& new_color) { // update predefined color, if user change the color on legend pane - map::iterator it; + std::map::iterator it; for (it =lbl_color_dict.begin(); it!=lbl_color_dict.end(); it++) { wxString predefined_lbl = it->first; if ( lbl.StartsWith(predefined_lbl)) { @@ -443,10 +506,9 @@ void MapCanvas::UpdatePredefinedColor(const wxString& lbl, const wxColor& new_co } } -vector MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) +std::vector MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc) { - vector new_hs(num_obs, false); - + std::vector new_hs(num_obs, false); if (gal_weights == NULL) return new_hs; int ts = cat_data.GetCurrentCanvasTmStep(); @@ -456,6 +518,15 @@ vector MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemory std::set::iterator it; ids_of_nbrs.clear(); ids_wo_nbrs.clear(); + + if (select_with_neighbor.empty() == false) { + // if already has neighbor selected + for (int i=0; i MapCanvas::AddNeighborsToSelection(GalWeight* gal_weights, wxMemory if (conn_selected_color.Alpha() != 0) { pen.SetColour(conn_selected_color); } + wxBrush *brush = NULL; + if (conn_selected_fill_color.Alpha() != 0) { + brush = new wxBrush(conn_selected_fill_color); + } + select_with_neighbor.clear(); for (int i=0; inum_obs; i++) { if (h[i]) { selectable_shps[i]->setPen(pen); - selectable_shps[i]->setBrush(*wxTRANSPARENT_BRUSH); + selectable_shps[i]->setBrush(brush ? *brush : *wxTRANSPARENT_BRUSH); selectable_shps[i]->paintSelf(dc); + select_with_neighbor.push_back(i); } } } + return new_hs; } @@ -566,17 +644,8 @@ bool MapCanvas::IsExtentChanged() } return !no_change; } - -void MapCanvas::ExtentMap() +void MapCanvas::ExtentTo(double minx, double miny, double maxx, double maxy) { - double minx, miny, maxx, maxy; - if (fg_maps.empty()) { - this->GetExtent(minx, miny, maxx, maxy); - } else { - // if multi layers are loaded, use top layer to extent map - BackgroundMapLayer* top_layer = fg_maps[0]; - top_layer->GetExtent(minx, miny, maxx, maxy); - } if (basemap) { OGRCoordinateTransformation *poCT = NULL; if (project->sourceSR != NULL) { @@ -590,6 +659,37 @@ void MapCanvas::ExtentMap() last_scale_trans.SetData(minx, miny, maxx, maxy); } +OGRSpatialReference* MapCanvas::GetSpatialReference() +{ + if (project->layer_proxy) { + return project->layer_proxy->GetSpatialReference(); + } + return NULL; +} + +void MapCanvas::ExtentMap() +{ + double minx, miny, maxx, maxy; + this->GetExtent(minx, miny, maxx, maxy); + + // if multi layers are loaded above curernt layer, extent to fit all layers + if (!fg_maps.empty() || !bg_maps.empty()) { + std::vector all_layers = fg_maps; + for (int i=0; iGetExtent(x,y,mx,my); + if (x < minx) minx = x; + if (y < miny) miny = y; + if (mx > maxx) maxx = mx; + if (my > maxy) maxy = my; + } + } + this->ExtentTo(minx, miny, maxx, maxy); +} + void MapCanvas::ResetShapes() { if (faded_layer_bm) { @@ -626,6 +726,7 @@ void MapCanvas::ZoomShapes(bool is_zoomin) } } else { TemplateCanvas::ZoomShapes(is_zoomin); + is_updating = true; // prevent sending notify to other maps when zoom } } @@ -650,6 +751,7 @@ void MapCanvas::PanShapes() } TemplateCanvas::PanShapes(); + is_updating = true; // prevent sending notify to other maps when zoom } void MapCanvas::OnIdle(wxIdleEvent& event) @@ -703,6 +805,7 @@ void MapCanvas::AddMapLayer(wxString name, BackgroundMapLayer* map_layer, // if already loaded before, just show it map_layer->SetHide(false); } + this->ExtentMap(); full_map_redraw_needed = true; PopulateCanvas(); Refresh(); @@ -732,6 +835,7 @@ void MapCanvas::ResizeSelectableShps(int virtual_scrn_w, BOOST_FOREACH( GdaShape* ms, selectable_shps ) { if (ms) ms->projectToBasemap(basemap); } + if (!w_graph.empty() && display_weights_graph && boost::uuids::nil_uuid() != weights_id) { // this is for resizing window with basemap + connectivity graph @@ -795,6 +899,7 @@ bool MapCanvas::InitBasemap() last_scale_trans.orig_data_x_max, poCT); if (poCT == NULL && !orig_map->IsWGS84Valid()) { + isDrawBasemap = false; wxStatusBar* sb = 0; if (template_frame) { @@ -804,10 +909,14 @@ bool MapCanvas::InitBasemap() sb->SetStatusText(s); } } - delete current_map; - delete orig_map; + // clean allocated memory + if (screen) delete screen; + if (current_map) delete current_map; + if (orig_map) delete orig_map; return false; } else { + // memory of "screen", "current_map" and "orig_map" + // will be managed in Basemap class basemap = new Gda::Basemap(basemap_item, screen, current_map, orig_map, GenUtils::GetBasemapDir(), poCT, scale_factor); @@ -831,9 +940,6 @@ void MapCanvas::SetNoBasemap() } layerbase_valid = false; layer0_valid = false; - //layer1_valid = false; - //layer2_valid = false; - //ReDraw(); } bool MapCanvas::DrawBasemap(bool flag, Gda::BasemapItem& _basemap_item) @@ -862,10 +968,6 @@ bool MapCanvas::DrawBasemap(bool flag, Gda::BasemapItem& _basemap_item) } } layerbase_valid = false; - //layer0_valid = false; - //layer1_valid = false; - //layer2_valid = false; - //ReDraw(); return true; } @@ -876,6 +978,8 @@ void MapCanvas::resizeLayerBms(int width, int height) GetClientSize(&vs_w, &vs_h); if (width > 0) vs_w = width; if (height >0 ) vs_h = height; + if (vs_w <= 0) vs_w = 1; + if (vs_h <= 0) vs_h = 1; basemap_bm = new wxBitmap(vs_w, vs_h, 32); layer0_bm = new wxBitmap(vs_w, vs_h, 32); layer1_bm = new wxBitmap(vs_w, vs_h, 32); @@ -981,8 +1085,9 @@ void MapCanvas::DrawLayer1() void MapCanvas::DrawLayer2() { // draw foreground - if (layer2_bm == NULL) + if (layer2_bm == NULL) { return; + } wxMemoryDC dc; dc.SelectObject(*layer2_bm); dc.SetBackground(*wxWHITE_BRUSH); @@ -1060,7 +1165,7 @@ void MapCanvas::TranslucentLayer0(wxMemoryDC& dc) } int hl_alpha_value = revert ? tran_unhighlighted : GdaConst::transparency_highlighted; if ( draw_highlight ) { - if ( hl_alpha_value == 255 || GdaConst::use_cross_hatching) { + if ( !draw_highlight_in_multilayers && (hl_alpha_value == 255 || GdaConst::use_cross_hatching)) { DrawHighlightedShapes(dc, revert); } else { // draw a highlight with transparency @@ -1091,7 +1196,8 @@ void MapCanvas::TranslucentLayer0(wxMemoryDC& dc) { alpha_vals[i] = 0; } else { - if (alpha_vals[i] !=0) alpha_vals[i] = hl_alpha_value; + if (alpha_vals[i] !=0) + alpha_vals[i] = draw_highlight_in_multilayers ? 100: hl_alpha_value; } } wxBitmap bm(image); @@ -1125,20 +1231,35 @@ void MapCanvas::SetWeightsId(boost::uuids::uuid id) // draw highlighted selectable shapes void MapCanvas::DrawHighlightedShapes(wxMemoryDC &dc, bool revert) { - if ( !fg_maps.empty() ) { - // multi-layer highlight: using top layer - BackgroundMapLayer* ml = fg_maps[0]; + if ( !bg_maps.empty() ) { + for (size_t i=0; iIsHide() == false) { + int nhl = ml->GetHighlightRecords(); + if (nhl > 0) ml->DrawHighlight(dc, this); + } + } + } + + DrawHighlight(dc, this); + + if (fg_maps.empty() == false) { + // drawing multi-layer highlight: using top layer + BackgroundMapLayer* ml = fg_maps[fg_maps.size()-1]; if (ml && ml->IsHide() == false) { - ml->DrawHighlight(dc, this); + int nhl = ml->GetHighlightRecords(); + if (nhl >= 0) { + ml->DrawHighlight(dc, this); + } } - } else { - DrawHighlight(dc, this); } + + } void MapCanvas::SetHighlight(int idx) { - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); if (hs.size() > idx) { hs[idx] = true; } @@ -1147,7 +1268,7 @@ void MapCanvas::SetHighlight(int idx) int MapCanvas::GetHighlightRecords() { int hl_cnt = 0; - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); for (int i=0; i& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); if (display_map_with_graph) { if (use_category_brushes) { bool highlight_only = true; @@ -1172,7 +1293,7 @@ void MapCanvas::DrawHighlighted(wxMemoryDC &dc, bool revert) GdaConst::use_cross_hatching); } else { - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); } @@ -1193,13 +1314,12 @@ void MapCanvas::DrawHighlighted(wxMemoryDC &dc, bool revert) // draw connectivity graph if needed DrawConnectivityGraph(dc); } + + // UpdateNeighborSelections if (is_updating == false && (show_graph || display_neighbors)) { - highlight_timer->Stop(); // make linking start immediately - std::vector old_hs = hs; hs = new_hs; // set highlights to "current+neighbors" highlight_state->SetEventType(HLStateInt::delta); - highlight_state->notifyObservers(this); - hs = old_hs; // reset highlights to "current" + highlight_timer->Start(50); } } @@ -1235,7 +1355,7 @@ void MapCanvas::DrawSelectableShapes_dc(wxMemoryDC &_dc, bool hl_only, { if (!display_map_with_graph) return; - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); #ifdef __WXOSX__ wxGCDC dc(_dc); helper_DrawSelectableShapes_dc(dc, hs, hl_only, revert, use_crosshatch); @@ -1274,8 +1394,12 @@ void MapCanvas::DisplayRightClickMenu(const wxPoint& pos) AddTimeVariantOptionsToMenu(optMenu); f->AppendCustomCategories(optMenu, project->GetCatClassifManager()); SetCheckMarks(optMenu); + // toggle some menu items GeneralWxUtils::EnableMenuItem(optMenu, XRCID("ID_SAVE_CATEGORIES"), GetCcType() != CatClassification::no_theme); + GeneralWxUtils::EnableMenuItem(optMenu, XRCID("ID_MAP_HEAT"), + project->GetShapefileType() == Shapefile::POINT_TYP); + if (template_frame) { template_frame->UpdateContextMenuItems(optMenu); template_frame->PopupMenu(optMenu, pos + GetPosition()); @@ -1369,6 +1493,7 @@ void MapCanvas::RenderToDC(wxDC &dc, int w, int h) BOOST_FOREACH( GdaShape* ms, foreground_shps ) { if (ms) ms->projectToBasemap(basemap, basemap_scale); } + if (!w_graph.empty() && display_weights_graph && boost::uuids::nil_uuid() != weights_id) { for (int i=0; ipaintSelf(layer0_dc); } - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); helper_DrawSelectableShapes_dc(layer0_dc, hs, false, false, false, true); BOOST_FOREACH( GdaShape* map, foreground_maps ) { @@ -1458,7 +1583,7 @@ void MapCanvas::RenderToSVG(wxDC& dc, int w, int h, int map_w, int map_h, shp->paintSelf(dc); } - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); helper_DrawSelectableShapes_dc(dc, hs, false, false); BOOST_FOREACH( GdaShape* shp, foreground_maps ) { @@ -1502,7 +1627,7 @@ void MapCanvas::SetCheckMarks(wxMenu* menu) !IS_VAR_STRING); CatClassifManager* ccm = project->GetCatClassifManager(); - vector titles; + std::vector titles; ccm->GetTitles(titles); for (size_t j=0; j undefs(num_obs); + std::vector undefs(num_obs); for (int t=0; t > var_undefs; + std::vector > var_undefs; if (var_info.size() == 0) { VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); @@ -1751,7 +1884,7 @@ void MapCanvas::NewCustomCatClassif() // categorization state if (cat_classif_def.cat_classif_type != CatClassification::custom) { CatClassification::ChangeNumCats(cat_classif_def.num_cats, cat_classif_def); - vector temp_cat_labels; // will be ignored + std::vector temp_cat_labels; // will be ignored CatClassification::SetBreakPoints(cat_classif_def.breaks, temp_cat_labels, cat_var_sorted[var_info[0].time], @@ -1798,8 +1931,8 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, int num_categories_s, boost::uuids::uuid weights_id_s, bool use_new_var_info_and_col_ids, - const vector& new_var_info, - const vector& new_col_ids, + const std::vector& new_var_info, + const std::vector& new_col_ids, const wxString& custom_classif_title) { wxLogMessage("MapCanvas::ChangeMapType()"); @@ -1818,6 +1951,7 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, dlg.ShowModal(); return false; } + if (new_map_theme == CatClassification::custom) { CatClassifManager* ccm = project->GetCatClassifManager(); if (!ccm) return false; @@ -1834,15 +1968,18 @@ MapCanvas::ChangeMapType(CatClassification::CatClassifType new_map_theme, custom_classif_state->removeObserver(this); custom_classif_state = 0; } + if (new_map_smoothing == excess_risk) { new_map_theme = CatClassification::excess_risk_theme; } + int new_num_vars = 1; if (new_map_smoothing != no_smoothing) { new_num_vars = 2; } else if (new_map_theme == CatClassification::no_theme) { new_num_vars = 0; } + int num_vars = GetNumVars(); if (new_num_vars == 0) { var_info.clear(); @@ -1987,9 +2124,9 @@ void MapCanvas::update(CatClassifState* o) } } -vector MapCanvas::GetLayerNames() +std::vector MapCanvas::GetLayerNames() { - vector names; + std::vector names; for (int i=0; iGetName(); names.push_back(name); @@ -2004,7 +2141,7 @@ vector MapCanvas::GetLayerNames() void MapCanvas::update(MapLayerState* o) { wxLogMessage("In MapCanvas::update(MapLayerState*)"); - vector local_names = GetLayerNames(); + std::vector local_names = GetLayerNames(); // if name not in project, remove for (int i=0; i proj_names = project->GetLayerNames(); + std::vector proj_names = project->GetLayerNames(); for (int i=0; i(template_frame); if (m) m->UpdateMapLayer(); @@ -2105,7 +2241,7 @@ void MapCanvas::RemoveLayer(wxString name) fg_maps.erase(fg_maps.begin() + del_idx); } } - + this->ExtentMap(); maplayer_state->notifyObservers(this); } @@ -2124,12 +2260,12 @@ int MapCanvas::GetNumRecords() return project->GetNumRecords(); } -vector MapCanvas::GetKeyNames() +std::vector MapCanvas::GetKeyNames() { return project->GetIntegerAndStringFieldNames(); } -bool MapCanvas::GetKeyColumnData(wxString col_name, vector& data) +bool MapCanvas::GetKeyColumnData(wxString col_name, std::vector& data) { int n = project->GetNumRecords(); data.resize(n); @@ -2147,7 +2283,7 @@ bool MapCanvas::GetKeyColumnData(wxString col_name, vector& data) void MapCanvas::ResetHighlight() { - vector& hs = highlight_state->GetHighlight(); + std::vector& hs = highlight_state->GetHighlight(); for (int i=0; i& hs = highlight_state->GetHighlight(); - + std::vector& hs = highlight_state->GetHighlight(); + // draw any connected layers - map::iterator it; + std::map::iterator it; for (it=associated_layers.begin(); it!=associated_layers.end();it++) { AssociateLayerInt* associated_layer = it->first; Association& al = it->second; wxString primary_key = al.first; wxString associated_key = al.second; - vector pid(num_obs); // e.g. 1 2 3 4 5 + std::vector pid(num_obs); // e.g. 1 2 3 4 5 if (primary_key.IsEmpty() == false) { GetKeyColumnData(primary_key, pid); } else { @@ -2173,11 +2309,11 @@ void MapCanvas::DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas) pid[i] << i; } } - vector fid; // e.g. 2 2 1 1 3 5 4 4 + std::vector fid; // e.g. 2 2 1 1 3 5 4 4 associated_layer->GetKeyColumnData(associated_key, fid); associated_layer->ResetHighlight(); - map > aid_idx; + std::map > aid_idx; for (int i=0; i& ids = aid_idx[aid]; + std::vector& ids = aid_idx[aid]; for (int j=0; jSetHighlight( ids[j] ); } } + draw_highlight_in_multilayers = false; associated_layer->DrawHighlight(dc, map_canvas); + for (int i=0; i& ids = aid_idx[aid]; + std::vector& ids = aid_idx[aid]; + wxPen pen(this->GetAssociatePenColour()); + dc.SetPen(pen); for (int j=0; jIsHide()) { @@ -2233,7 +2373,7 @@ void MapCanvas::SetLayerAssociation(wxString my_key, AssociateLayerInt* layer, bool MapCanvas::IsAssociatedWith(AssociateLayerInt* layer) { - map::iterator it; + std::map::iterator it; for (it=associated_layers.begin(); it!=associated_layers.end();it++) { AssociateLayerInt* asso_layer = it->first; if (layer->GetName() == asso_layer->GetName()) { @@ -2266,16 +2406,22 @@ void MapCanvas::PopulateCanvas() BackgroundMapLayer* ml = NULL; for (int i=bg_maps.size()-1; i>=0; i--) { ml = bg_maps[i]; - GdaShapeLayer* bg_map = new GdaShapeLayer(ml->GetName(), ml); - background_maps.push_back(bg_map); + if (!ml->IsHide()) { + // make a copy since it will be deleted + GdaShapeLayer* bg_map = new GdaShapeLayer(ml->GetName(), ml); + background_maps.push_back(bg_map); + } } // Foreground map layers BOOST_FOREACH( GdaShape* map, foreground_maps ) { delete map; } foreground_maps.clear(); for (int i=fg_maps.size()-1; i>=0; i--) { ml = fg_maps[i]; - GdaShapeLayer* fg_map = new GdaShapeLayer(ml->GetName(), ml); - foreground_maps.push_back(fg_map); + if (!ml->IsHide()) { + // make a copy since it will be deleted + GdaShapeLayer* fg_map = new GdaShapeLayer(ml->GetName(), ml); + foreground_maps.push_back(fg_map); + } } } @@ -2293,21 +2439,63 @@ void MapCanvas::PopulateCanvas() foreground_shps.push_back(bg); } } + + if (GdaConst::gda_draw_map_labels) { + // draw text labels + if (var_info.size() > 0) { + const GdaVarTools::VarInfo& vi = var_info[0]; + if (table_int) { + int col_idx = table_int->GetColIdx(vi.name); + int time_idx = vi.time; + std::vector labels; + GdaConst::FieldType col_type = table_int->GetColType(col_idx, time_idx); + if (col_type == GdaConst::long64_type) { + std::vector lbl_data; + table_int->GetColData(col_idx, time_idx, lbl_data); + labels.resize(lbl_data.size()); + for (size_t i=0; i lbl_data; + table_int->GetColData(col_idx, time_idx, lbl_data); + labels.resize(lbl_data.size()); + for (size_t i=0; iGetColData(col_idx, time_idx, labels); + } + const std::vector& c = project->GetCentroids(); + int font_sz = GdaConst::gda_map_label_font_size; + wxFont* font = wxFont::New(font_sz, wxFONTFAMILY_SWISS, + wxFONTSTYLE_NORMAL, + wxFONTWEIGHT_NORMAL, false, + wxEmptyString, + wxFONTENCODING_DEFAULT); + for (size_t i=0; iGetX(), c[i]->GetY()), + 0, GdaShapeText::h_center, + GdaShapeText::v_center, 0, 0); + foreground_shps.push_back(lbl); + } + } + } + } if ( map_valid[canvas_ts] ) { if (full_map_redraw_needed) { empty_shps_ids = CreateSelShpsFromProj(selectable_shps, project); full_map_redraw_needed = false; - - if (selectable_shps_type == polygons && - (display_mean_centers || display_centroids || - display_weights_graph)) - { + // draw any foreground and background shapes + if (selectable_shps_type == polygons) { GdaPoint* p; wxPen cent_pen(wxColour(20, 20, 20)); wxPen cntr_pen(wxColour(55, 55, 55)); if (display_mean_centers) { - const vector& c = project->GetMeanCenters(); + const std::vector& c = project->GetMeanCenters(); for (int i=0; isetPen(cntr_pen); @@ -2315,8 +2503,9 @@ void MapCanvas::PopulateCanvas() foreground_shps.push_back(p); } } + // don't use "else if", since voronoi and heatmap can be overlayed if (display_centroids) { - const vector& c = project->GetCentroids(); + const std::vector& c = project->GetCentroids(); for (int i=0; isetPen(cent_pen); @@ -2324,19 +2513,28 @@ void MapCanvas::PopulateCanvas() foreground_shps.push_back(p); } } + } else if (selectable_shps_type == points) { + if (display_voronoi_diagram) { + // draw thissen polygons in background + GdaPolygon* p; + const std::vector& polys = project->GetVoronoiPolygons(); + for (int i=0, num_polys=polys.size(); i& polys = project->GetVoronoiPolygons(); - for (int i=0, num_polys=polys.size(); iGetWManInt(); GalWeight* gal_weights = w_man_int->GetGal(weights_id); - const vector& c = project->GetCentroids(); - vector& hs = highlight_state->GetHighlight(); + const std::vector& c = project->GetCentroids(); GdaPolyLine* edge; std::set w_nodes; wxPen pen(graph_color, weights_graph_thickness); for (int i=0; gal_weights && inum_obs; i++) { GalElement& e = gal_weights->gal[i]; - for (int j=0, jend=e.Size(); jnbr @@ -2487,7 +2684,7 @@ void MapCanvas::CreateAndUpdateCategories() // 1 = #cats cat_data.CreateCategoriesAllCanvasTms(1, num_time_vals, num_obs); for (int t=0; t > cat_var_undef; + std::vector > cat_var_undef; for (int t=0; t undef_res(num_obs, false); + std::vector undef_res(num_obs, false); for (int i=0; i t ) { @@ -2545,43 +2742,43 @@ void MapCanvas::CreateAndUpdateCategories() if (smoothing_type != no_smoothing) { for (int i=0; i& hs = highlight_state->GetHighlight(); - vector hs_backup = hs; + std::vector& hs = highlight_state->GetHighlight(); + std::vector hs_backup = hs; for (int i=0; i data(1); - - vector undefs(num_obs); - vector dt(num_obs); + std::vector data(1); + std::vector undefs(num_obs); + std::vector dt(num_obs); int t = cat_data.GetCurrentCanvasTmStep(); for (int i=0; iIsHide() == false) { + ml->ResetHighlight(); + } + } + for (size_t i=0; iIsHide() == false) { + ml->ResetHighlight(); + } + } + + // don't trigger other window when syncing this map is_updating = true; if (layer2_bm) { ResetBrushing(); @@ -2925,18 +3148,17 @@ void MapCanvas::UpdateStatusBar() if ( highlight_state->GetTotalHighlighted() > 0) { // for highlight from other windows - if (GetCcType() == CatClassification::no_theme) { - for (int i=0; i& _var_info, - const vector& _col_ids, + const std::vector& _var_info, + const std::vector& _col_ids, CatClassification::CatClassifType theme_type, MapCanvas::SmoothingType smoothing_type, int num_categories, @@ -3251,7 +3473,7 @@ void MapFrame::SetupToolbar() Connect(XRCID("ID_EDIT_LAYER"), wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(MapFrame::OnMapEditLayer)); if (toolbar) { - toolbar->EnableTool(XRCID("ID_EDIT_LAYER"), project->GetMapLayerCount()>0); + //toolbar->EnableTool(XRCID("ID_EDIT_LAYER"), project->GetMapLayerCount()>0); } } @@ -3407,12 +3629,12 @@ void MapFrame::OnBasemapSelect(wxCommandEvent& event) if (items.size()>0) { basemap_sources = items[0]; } - vector basemap_groups; + std::vector basemap_groups; basemap_groups = Gda::ExtractBasemapResources(basemap_sources); for (int i=0; i& items = grp.items; + std::vector& items = grp.items; for (int j=0; j0) { basemap_sources = items[0]; } - vector basemap_groups; + std::vector basemap_groups; basemap_groups = Gda::ExtractBasemapResources(basemap_sources); for (int i=0; i& items = grp.items; + std::vector& items = grp.items; for (int j=0; j& items = grp.items; + std::vector& items = grp.items; for (int j=0; jOnHeatMap(menu_id); + + UpdateOptionMenuItems(); +} + +void MapFrame::OnMapMST(wxCommandEvent& event) +{ + int menu_id = event.GetId(); + ((MapCanvas*)template_canvas)->OnMSTMap(menu_id); + + UpdateOptionMenuItems(); } void MapFrame::AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm) { // search for ID_CAT_CLASSIF_A(B,C)_MENU submenus const int num_sub_menus=3; - vector menu_id(num_sub_menus); - vector sub_menu_id(num_sub_menus); - vector base_id(num_sub_menus); + std::vector menu_id(num_sub_menus); + std::vector sub_menu_id(num_sub_menus); + std::vector base_id(num_sub_menus); menu_id[0] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_A"); menu_id[1] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_B"); // conditional horizontal menu menu_id[2] = XRCID("ID_NEW_CUSTOM_CAT_CLASSIF_C"); // conditional verticle menu @@ -3537,7 +3802,7 @@ void MapFrame::AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm) _("Create new custom categories classification.")); sm->AppendSeparator(); - vector titles; + std::vector titles; ccm->GetTitles(titles); for (size_t j=0; jAppend(base_id[i]+j, titles[j]); @@ -3560,8 +3825,7 @@ void MapFrame::UpdateOptionMenuItems() TemplateFrame::UpdateOptionMenuItems(); // set common items first wxMenuBar* mb = GdaFrame::GetGdaFrame()->GetMenuBar(); int menu = mb->FindMenu(_("Options")); - if (menu == wxNOT_FOUND) { - } else { + if (menu != wxNOT_FOUND) { ((MapCanvas*) template_canvas)->SetCheckMarks(mb->GetMenu(menu)); } } @@ -3718,6 +3982,15 @@ void MapFrame::OnChangeConnSelectedColor(wxCommandEvent& event) UpdateOptionMenuItems(); } +void MapFrame::OnChangeConnSelectedFillColor(wxCommandEvent& event) +{ + GalWeight* gal_weights = checkWeights(); + if (gal_weights == NULL) + return; + ((MapCanvas*) template_canvas)->ChangeConnSelectedFillColor(); + UpdateOptionMenuItems(); +} + void MapFrame::OnChangeNeighborFillColor(wxCommandEvent& event) { GalWeight* gal_weights = checkWeights(); @@ -3728,6 +4001,18 @@ void MapFrame::OnChangeNeighborFillColor(wxCommandEvent& event) UpdateOptionMenuItems(); } +void MapFrame::OnChangeHeatMapFillColor(wxCommandEvent& event) +{ + ((MapCanvas*) template_canvas)->ChangeHeatMapFillColor(); + UpdateOptionMenuItems(); +} + +void MapFrame::OnChangeHeatMapOutlineColor(wxCommandEvent& event) +{ + ((MapCanvas*) template_canvas)->ChangeHeatMapOutlineColor(); + UpdateOptionMenuItems(); +} + void MapFrame::OnNewCustomCatClassifA() { ((MapCanvas*) template_canvas)->NewCustomCatClassif(); @@ -3744,7 +4029,7 @@ void MapFrame::OnCustomCatClassifA(const wxString& cc_title) } else { ChangeMapType(CatClassification::custom, MapCanvas::no_smoothing, 4, boost::uuids::nil_uuid(), - false, vector(0), vector(0), + false, std::vector(0), std::vector(0), cc_title); } } @@ -3753,7 +4038,7 @@ void MapFrame::OnThemelessMap() { ChangeMapType(CatClassification::no_theme, MapCanvas::no_smoothing, 1, boost::uuids::nil_uuid(), - false, vector(0), vector(0)); + false, std::vector(0), std::vector(0)); } void MapFrame::OnHinge15() @@ -3767,8 +4052,8 @@ void MapFrame::OnHinge15() } else { ChangeMapType(CatClassification::hinge_15, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), - false, vector(0), - vector(0)); + false, std::vector(0), + std::vector(0)); } } @@ -3783,8 +4068,8 @@ void MapFrame::OnHinge30() } else { ChangeMapType(CatClassification::hinge_30, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), - false, vector(0), - vector(0)); + false, std::vector(0), + std::vector(0)); } } @@ -3799,7 +4084,7 @@ void MapFrame::OnQuantile(int num_cats) } else { ChangeMapType(CatClassification::quantile, MapCanvas::no_smoothing, num_cats, boost::uuids::nil_uuid(), false, - vector(0), vector(0)); + std::vector(0), std::vector(0)); } } @@ -3814,8 +4099,8 @@ void MapFrame::OnPercentile() } else { ChangeMapType(CatClassification::percentile, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), - false, vector(0), - vector(0)); + false, std::vector(0), + std::vector(0)); } } @@ -3830,8 +4115,8 @@ void MapFrame::OnStdDevMap() } else { ChangeMapType(CatClassification::stddev, MapCanvas::no_smoothing, 6, boost::uuids::nil_uuid(), - false, vector(0), - vector(0)); + false, std::vector(0), + std::vector(0)); } } @@ -3853,8 +4138,8 @@ void MapFrame::OnUniqueValues() ChangeMapType(CatClassification::unique_values, MapCanvas::no_smoothing, 1, boost::uuids::nil_uuid(), - false, vector(0), - vector(0)); + false, std::vector(0), + std::vector(0)); } } @@ -3871,7 +4156,7 @@ void MapFrame::OnNaturalBreaks(int num_cats) ChangeMapType(CatClassification::natural_breaks, MapCanvas::no_smoothing, num_cats, boost::uuids::nil_uuid(), - false, vector(0), vector(0)); + false, std::vector(0), std::vector(0)); } } @@ -3888,7 +4173,7 @@ void MapFrame::OnEqualIntervals(int num_cats) ChangeMapType(CatClassification::equal_intervals, MapCanvas::no_smoothing, num_cats, boost::uuids::nil_uuid(), - false, vector(0), vector(0)); + false, std::vector(0), std::vector(0)); } } @@ -3968,7 +4253,7 @@ void MapFrame::OnCustomCategoryClick(wxCommandEvent& event) int xrc_id = event.GetId(); CatClassifManager* ccm = project->GetCatClassifManager(); if (!ccm) return; - vector titles; + std::vector titles; ccm->GetTitles(titles); int idx = xrc_id - GdaConst::ID_CUSTOM_CAT_CLASSIF_CHOICE_A0; if (idx < 0 || idx >= titles.size()) return; @@ -3999,8 +4284,8 @@ bool MapFrame::ChangeMapType(CatClassification::CatClassifType new_map_theme, int num_categories, boost::uuids::uuid weights_id, bool use_new_var_info_and_col_ids, - const vector& new_var_info, - const vector& new_col_ids, + const std::vector& new_var_info, + const std::vector& new_col_ids, const wxString& custom_classif_title) { var_info = new_var_info; @@ -4105,12 +4390,12 @@ void MapFrame::OnChangeMapTransparency() //show slider dialog MapCanvas* map_canvs_ref = (MapCanvas*) template_canvas; if (map_canvs_ref->isDrawBasemap) { - SliderDialog sliderDlg(this, map_canvs_ref); + MapTransparencyDlg sliderDlg(this, map_canvs_ref); sliderDlg.ShowModal(); } } -void MapFrame::GetVizInfo(map >& colors) +void MapFrame::GetVizInfo(std::map >& colors) { if (template_canvas) { template_canvas->GetVizInfo(colors); @@ -4118,7 +4403,7 @@ void MapFrame::GetVizInfo(map >& colors) } void MapFrame::GetVizInfo(wxString& shape_type, wxString& field_name, - vector& clrs, vector& bins) + std::vector& clrs, std::vector& bins) { if (template_canvas) { template_canvas->GetVizInfo(shape_type, clrs, bins); diff --git a/Explore/MapNewView.h b/Explore/MapNewView.h index 6bd3852ad..e00eab4ba 100644 --- a/Explore/MapNewView.h +++ b/Explore/MapNewView.h @@ -23,12 +23,8 @@ #include #include #include -#include -#include -#include -#include -#include -#include +#include +#include #include "CatClassification.h" #include "CatClassifStateObserver.h" @@ -44,6 +40,7 @@ #include "../ShapeOperations/GalWeight.h" #include "../MapLayerStateObserver.h" #include "MapLayer.hpp" +#include "MapViewHelper.h" class CatClassifState; class MapTreeFrame; @@ -59,33 +56,6 @@ typedef boost::multi_array b_array_type; typedef boost::multi_array d_array_type; typedef boost::multi_array s_array_type; -using namespace std; - -// Transparency SliderBar dialog for Basemap -class SliderDialog: public wxDialog -{ - DECLARE_CLASS( SliderDialog ) - DECLARE_EVENT_TABLE() -public: - SliderDialog (); - SliderDialog (wxWindow * parent, - MapCanvas* _canvas, - wxWindowID id=wxID_ANY, - const wxString & caption="Slider Dialog", - const wxPoint & pos = wxDefaultPosition, - const wxSize & size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE ); - virtual ~SliderDialog (); - -private: - MapCanvas* canvas; - wxSlider* slider; - wxStaticText* slider_text; - void OnSliderChange(wxCommandEvent& event ); - -}; - - class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, public MapLayerStateObserver, public AssociateLayerInt { @@ -98,8 +68,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, MapCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, - const vector& var_info, - const vector& col_ids, + const std::vector& var_info, + const std::vector& col_ids, CatClassification::CatClassifType theme_type = CatClassification::no_theme, SmoothingType smoothing_type = no_smoothing, int num_categories = 1, @@ -109,11 +79,21 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, virtual ~MapCanvas(); + virtual void RedrawMap(); + + // functions for heat map + virtual void OnHeatMap(int menu_id); + + // function for MST map + virtual void OnMSTMap(int menu_id); + virtual void DisplayRightClickMenu(const wxPoint& pos); virtual void AddTimeVariantOptionsToMenu(wxMenu* menu); virtual wxString GetCanvasTitle(); virtual wxString GetVariableNames(); virtual wxString GetNameWithTime(int var); + virtual void UpdateSelection(bool shiftdown = false, + bool pointsel = false); virtual void UpdateSelectionPoints(bool shiftdown = false, bool pointsel = false); virtual void NewCustomCatClassif(); @@ -122,8 +102,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, int num_categories, boost::uuids::uuid weights_id, bool use_new_var_info_and_col_ids, - const vector& new_var_info, - const vector& new_col_ids, + const std::vector& new_var_info, + const std::vector& new_col_ids, const wxString& custom_classif_title = wxEmptyString); virtual void update(HLStateInt* o); virtual void update(CatClassifState* o); @@ -151,6 +131,8 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, virtual void ZoomShapes(bool is_zoomin = true); virtual void PanShapes(); virtual void ExtentMap(); + virtual void ExtentTo(double minx, double miny, double maxx, double maxy); + virtual OGRSpatialReference* GetSpatialReference(); virtual bool IsExtentChanged(); virtual void ResizeSelectableShps(int virtual_scrn_w = 0, int virtual_scrn_h = 0); @@ -167,7 +149,10 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, virtual void ChangeGraphThickness(int val); virtual void ChangeGraphColor(); virtual void ChangeConnSelectedColor(); + virtual void ChangeConnSelectedFillColor(); virtual void ChangeNeighborFillColor(); + virtual void ChangeHeatMapFillColor(); + virtual void ChangeHeatMapOutlineColor(); virtual void DisplayVoronoiDiagram(); virtual int GetNumVars(); virtual int GetNumCats(); @@ -177,7 +162,6 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, virtual void UpdateStatusBar(); virtual wxBitmap* GetPrintLayer(); - void DisplayMapLayers(); void AddMapLayer(wxString name, BackgroundMapLayer* map_layer, bool is_hide = false); void CleanBasemapCache(); @@ -190,21 +174,21 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, void SetupColor(); void SetPredefinedColor(const wxString& lbl, const wxColor& new_color); void UpdatePredefinedColor(const wxString& lbl, const wxColor& new_color); - vector AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc); + std::vector AddNeighborsToSelection(GalWeight* gal_weights, wxMemoryDC &dc); void SetLegendLabel(int cat, wxString label); // multi-layers: - vector GetBackgroundMayLayers(); - vector GetForegroundMayLayers(); - void SetForegroundMayLayers(vector& val); - void SetBackgroundMayLayers(vector& val); - vector GetLayerNames(); + std::vector GetBackgroundMayLayers(); + std::vector GetForegroundMayLayers(); + void SetForegroundMayLayers(std::vector& val); + void SetBackgroundMayLayers(std::vector& val); + std::vector GetLayerNames(); void RemoveLayer(wxString name); virtual bool IsCurrentMap(); virtual wxString GetName(); - virtual vector GetKeyNames(); + virtual std::vector GetKeyNames(); virtual int GetNumRecords(); - virtual bool GetKeyColumnData(wxString col_name, vector& data); + virtual bool GetKeyColumnData(wxString col_name, std::vector& data); virtual void ResetHighlight(); virtual void DrawHighlight(wxMemoryDC& dc, MapCanvas* map_canvas); virtual void SetLayerAssociation(wxString my_key, AssociateLayerInt* layer, @@ -214,19 +198,22 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, virtual int GetHighlightRecords(); virtual void GetExtent(double &minx, double &miny, double &maxx, double &maxy); + virtual void GetExtentOfSelected(double &minx, double &miny, double &maxx, + double &maxy); void UpdateMapTree(); Shapefile::Main& GetGeometryData(); OGRLayerProxy* GetOGRLayerProxy(); - const wxBitmap* GetBaseLayer() { return basemap_bm; } CatClassification::CatClassifType GetCcType(); static void ResetThumbnail() { MapCanvas::has_thumbnail_saved = false; } Project* GetProject() { return project; } - CatClassifDef cat_classif_def; - SmoothingType smoothing_type; + int num_obs; + bool isDrawBasemap; + int tran_unhighlighted; + bool print_detailed_basemap; bool is_rate_smoother; bool display_mean_centers; bool display_centroids; @@ -238,20 +225,31 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, bool display_neighbor_color; bool display_map_with_graph; int weights_graph_thickness; + bool draw_highlight_in_multilayers; wxColour graph_color; wxColour conn_selected_color; + wxColour conn_selected_fill_color; wxColour neighbor_fill_color; + + // heat map + bool display_heat_map; + HeatMapHelper heat_map; + + // mst map + bool display_mst; + MSTMapHelper mst_map; + + // connectivity int conn_selected_size; - set ids_of_nbrs; - vector ids_wo_nbrs; - vector var_info; - int num_obs; - bool isDrawBasemap; - int tran_unhighlighted; - bool print_detailed_basemap; + std::set ids_of_nbrs; + std::vector ids_wo_nbrs; + std::vector var_info; + std::vector heat_map_pts; + CatClassifDef cat_classif_def; + SmoothingType smoothing_type; - static vector empty_shps_ids; - static map empty_dict; + static std::vector empty_shps_ids; + static boost::unordered_map empty_dict; static bool has_shown_empty_shps_msg; static int GetEmptyNumber(); static void ResetEmptyFlag(); @@ -259,14 +257,15 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, Gda::BasemapItem basemap_item; protected: - vector bg_maps; - vector fg_maps; - list background_maps; - list foreground_maps; - + std::vector bg_maps; + std::vector fg_maps; + std::list background_maps; + std::list foreground_maps; + std::vector select_with_neighbor; // only works w/ graph/connectivity + bool layerbase_valid; // if false, then needs to be redrawn bool is_updating; // true: if triggered by other window - vector w_graph; + std::vector w_graph; IDataSource* p_datasource; static bool has_thumbnail_saved; wxString layer_name; @@ -278,26 +277,26 @@ class MapCanvas : public TemplateCanvas, public CatClassifStateObserver, bool IS_VAR_STRING; int num_time_vals; - vector data; - vector s_data; - vector data_undef; + std::vector data; + std::vector s_data; + std::vector data_undef; - vector cat_var_sorted; - vector cat_str_var_sorted; + std::vector cat_var_sorted; + std::vector cat_str_var_sorted; int num_categories; // used for Quantile, Equal Interval and Natural Breaks int ref_var_index; bool is_any_time_variant; bool is_any_sync_with_global_time; - vector map_valid; - vector map_error_message; + std::vector map_valid; + std::vector map_error_message; bool full_map_redraw_needed; boost::uuids::uuid weights_id; // predefined/user-specified color, each label can be assigned with a color // user can specified using: // SetPredefinedColor(), UpdatePredifinedColor() - map lbl_color_dict; + std::map lbl_color_dict; wxBitmap* basemap_bm; Gda::Basemap* basemap; @@ -328,8 +327,8 @@ class MapFrame : public TemplateFrame, public WeightsManStateObserver DECLARE_CLASS(MapFrame) public: MapFrame(wxFrame *parent, Project* project, - const vector& var_info, - const vector& col_ids, + const std::vector& var_info, + const std::vector& col_ids, CatClassification::CatClassifType theme_type = CatClassification::no_theme, MapCanvas::SmoothingType smoothing_type = MapCanvas::no_smoothing, int num_categories = 1, @@ -394,18 +393,21 @@ class MapFrame : public TemplateFrame, public WeightsManStateObserver void OnBasemapSelect(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void CleanBasemap(); - void GetVizInfo(map >& colors); + void GetVizInfo(std::map >& colors); void GetVizInfo(wxString& shape_type, wxString& field_name, - vector& clrs, - vector& bins); + std::vector& clrs, + std::vector& bins); void OnAddNeighborToSelection(wxCommandEvent& event); void OnDisplayWeightsGraph(wxCommandEvent& event); void OnDisplayMapWithGraph(wxCommandEvent& event); void OnChangeGraphThickness(wxCommandEvent& event); void OnChangeGraphColor(wxCommandEvent& event); void OnChangeConnSelectedColor(wxCommandEvent& event); + void OnChangeConnSelectedFillColor(wxCommandEvent& event); void OnChangeNeighborFillColor(wxCommandEvent& event); + void OnChangeHeatMapFillColor(wxCommandEvent& event); + void OnChangeHeatMapOutlineColor(wxCommandEvent& event); void OnMapSelect(wxCommandEvent& e); void OnMapInvertSelect(wxCommandEvent& e); void OnMapPan(wxCommandEvent& e); @@ -418,14 +420,18 @@ class MapFrame : public TemplateFrame, public WeightsManStateObserver void OnMapEditLayer(wxCommandEvent& e); void OnMapTreeClose(wxWindowDestroyEvent& event); void OnShowMapBoundary(wxCommandEvent& event); + + void OnHeatMap(wxCommandEvent& event); + void OnMapMST(wxCommandEvent& event); + void UpdateMapTree(); bool ChangeMapType(CatClassification::CatClassifType new_map_theme, MapCanvas::SmoothingType new_map_smoothing, int num_categories, boost::uuids::uuid weights_id, bool use_new_var_info_and_col_ids, - const vector& new_var_info, - const vector& new_col_ids, + const std::vector& new_var_info, + const std::vector& new_col_ids, const wxString& custom_classif_title = wxEmptyString); void SetLegendLabel(int cat, wxString label) { if (!template_canvas) return; @@ -437,8 +443,8 @@ class MapFrame : public TemplateFrame, public WeightsManStateObserver void AppendCustomCategories(wxMenu* menu, CatClassifManager* ccm); - vector var_info; - vector col_ids; + std::vector var_info; + std::vector col_ids; protected: wxBoxSizer* rbox; diff --git a/Explore/MapViewHelper.cpp b/Explore/MapViewHelper.cpp new file mode 100644 index 000000000..4093884e6 --- /dev/null +++ b/Explore/MapViewHelper.cpp @@ -0,0 +1,578 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include + +#include "../DialogTools/VariableSettingsDlg.h" +#include "../Project.h" +#include "../GeneralWxUtils.h" +#include "../ShapeOperations/WeightUtils.h" +#include "MapNewView.h" +#include "MapViewHelper.h" + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// MapTransparencyDlg +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +MapTransparencyDlg::MapTransparencyDlg(wxWindow * parent, + MapCanvas* _canvas, + wxWindowID id, + const wxString & caption, + const wxPoint & position, + const wxSize & size, + long style ) +: wxDialog( parent, id, caption, position, size, style) +{ + + wxLogMessage("Open MapTransparencyDlg"); + + canvas = _canvas; + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(topSizer); + + wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); + topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + // A text control for the user’s name + double trasp = (double)canvas->tran_unhighlighted / 255.0; + int trasp_scale = 100 * trasp; + + wxBoxSizer* subSizer = new wxBoxSizer(wxHORIZONTAL); + slider = new wxSlider(this, wxID_ANY, trasp_scale, 0, 100, + wxDefaultPosition, wxSize(200, -1), + wxSL_HORIZONTAL); + subSizer->Add(new wxStaticText(this, wxID_ANY,"1.0"), 0, + wxALIGN_CENTER_VERTICAL|wxALL); + subSizer->Add(slider, 0, wxALIGN_CENTER_VERTICAL|wxALL); + subSizer->Add(new wxStaticText(this, wxID_ANY,"0.0"), 0, + wxALIGN_CENTER_VERTICAL|wxALL); + + boxSizer->Add(subSizer); + wxString txt_transparency = wxString::Format(_("Current Transparency: %.2f"), 1.0 - trasp); + + slider_text = new wxStaticText(this, + wxID_ANY, + txt_transparency, + wxDefaultPosition, + wxSize(100, -1)); + boxSizer->Add(slider_text, 0, wxGROW|wxALL, 5); + boxSizer->Add(new wxButton(this, wxID_CANCEL, _("Close")), 0, wxALIGN_CENTER|wxALL, 10); + + topSizer->Fit(this); + + slider->Bind(wxEVT_SLIDER, &MapTransparencyDlg::OnSliderChange, this); +} + +MapTransparencyDlg::~MapTransparencyDlg() +{ +} + +void MapTransparencyDlg::OnSliderChange( wxCommandEvent & event ) +{ + int val = event.GetInt(); + double trasp = 1.0 - val / 100.0; + slider_text->SetLabel(wxString::Format(_("Current Transparency: %.2f"), trasp)); + canvas->tran_unhighlighted = (1-trasp) * 255; + canvas->ReDraw(); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// HeatMapTransparencyDlg +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +HeatMapTransparencyDlg::HeatMapTransparencyDlg(HeatMapHelper* _heatmap, MapCanvas* canvas) +: MapTransparencyDlg((wxWindow*)canvas, canvas), heatmap(_heatmap) +{ + int trans = heatmap->GetTransparency(); + int tick = (trans / 255.0) * 100.0; + slider->SetValue(tick); +} + +HeatMapTransparencyDlg::~HeatMapTransparencyDlg() +{ +} + +void HeatMapTransparencyDlg::OnSliderChange(wxCommandEvent& event) +{ + int val = event.GetInt(); + double trasp = 1.0 - val / 100.0; + slider_text->SetLabel(wxString::Format(_("Current Transparency: %.2f"), trasp)); + int transparency = (1-trasp) * 255; + if (canvas && heatmap) { + heatmap->UpdateTransparency(transparency); + canvas->RedrawMap(); + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// HeatMapBandwidthDlg +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +HeatMapBandwidthDlg::HeatMapBandwidthDlg(HeatMapHelper* _heatmap, + MapCanvas* _canvas, + double sel_band, double max_band, + wxWindowID id, + const wxString & caption, + const wxPoint & position, + const wxSize & size, + long style) +: wxDialog(_canvas, id, caption, position, size, style), +max_tick(1000) +{ + wxLogMessage("Open HeatMapBandwidthDlg"); + + this->canvas = _canvas; + this->heatmap = _heatmap; + this->sel_band = sel_band; + this->max_band = max_band; + + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + + wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); + topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + int ticket = (int)(sel_band / max_band * max_tick); + slider = new wxSlider(this, wxID_ANY, ticket, 0, max_tick, wxDefaultPosition, wxSize(300, -1), + wxSL_HORIZONTAL); + + boxSizer->Add(slider); + wxString bandwidth_lbl = _("Bandwidth:"); + wxStaticText* band_text = new wxStaticText(this, wxID_ANY, bandwidth_lbl); + + wxString band_txt; + band_txt << sel_band; + slider_text = new wxTextCtrl(this, wxID_ANY, band_txt, wxDefaultPosition, wxSize(200, -1)); + + wxBoxSizer* labelSizer = new wxBoxSizer(wxHORIZONTAL); + labelSizer->Add(band_text, 0, wxALIGN_CENTER_VERTICAL); + labelSizer->Add(slider_text, 0, wxALIGN_CENTER_VERTICAL); + + boxSizer->Add(labelSizer, 0, wxGROW|wxALL, 5); + boxSizer->Add(new wxButton(this, wxID_CANCEL, _("Close")), 0, wxALIGN_CENTER|wxALL, 10); + + SetSizer(topSizer); + topSizer->Fit(this); + + slider->Bind(wxEVT_SLIDER, &HeatMapBandwidthDlg::OnSliderChange, this); + slider_text->Bind(wxEVT_TEXT, &HeatMapBandwidthDlg::OnTextChange, this); + //wxCommandEvent ev; + //OnSliderChange(ev); + if (canvas && heatmap) { + heatmap->UpdateBandwidth(sel_band); + canvas->RedrawMap(); + } +} + +HeatMapBandwidthDlg::~HeatMapBandwidthDlg() +{ +} + +void HeatMapBandwidthDlg::OnSliderChange( wxCommandEvent & event ) +{ + int val = slider->GetValue(); + double band = (val / (double)max_tick) * max_band; + + wxString band_txt; + band_txt << band; + + slider_text->SetValue(band_txt); + if (canvas && heatmap) { + heatmap->UpdateBandwidth(band); + canvas->RedrawMap(); + } +} + +void HeatMapBandwidthDlg::OnTextChange( wxCommandEvent & event ) +{ + wxString input_val = slider_text->GetValue(); + input_val.Trim(); + double input_band; + if (input_val.ToDouble(&input_band)) { + int tick = (input_band / max_band) * max_tick; + if (tick <0) { + tick = 0; + input_band = 0; + } else if (tick > max_tick) { + tick = max_tick; + input_band = max_band; + } + + slider->SetValue(tick); + + if (canvas && heatmap) { + heatmap->UpdateBandwidth(input_band); + canvas->RedrawMap(); + } + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// HeatMapHelper +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +bool HeatMapHelper::check_spatial_ref = true; + +HeatMapHelper::HeatMapHelper() +{ + has_init = false; + use_fill_color = false; + use_outline_color = false; + use_bandwidth = true; + use_radius_variable = false; + transparency = 20; + bandwidth = 0; +} + +HeatMapHelper::~HeatMapHelper() +{ +} + +bool HeatMapHelper::HasInitialized() +{ + return has_init; +} + +void HeatMapHelper::Reset() +{ + use_fill_color = false; + use_outline_color = false; + transparency = 20; + bandwidth = 0; +} + +int HeatMapHelper::GetTransparency() +{ + return transparency; +} + +void HeatMapHelper::SetBandwidth(MapCanvas* canvas, Project* project) +{ + if (check_spatial_ref) { + bool cont = project->CheckSpatialProjection(check_spatial_ref); + if (cont == false) { + return; + } + } + has_init = true; + use_bandwidth = true; + use_radius_variable = !use_bandwidth; + // prompt user to select a bandwidth from a slider + double min_band = project->GetMax1nnDistEuc(); + double max_band = project->GetMaxDistEuc(); + if (bandwidth == 0) { + bandwidth = min_band; + } + HeatMapBandwidthDlg bandDlg(this, canvas, bandwidth, bandwidth*2); + bandDlg.ShowModal(); +} + +void HeatMapHelper::UpdateBandwidth(double bandwidth) +{ + this->bandwidth = bandwidth; +} + +void HeatMapHelper::SetRadiusVariable(MapCanvas* canvas, Project* project) +{ + // prompt user to select a variable for the radius + VariableSettingsDlg dlg(project, VariableSettingsDlg::univariate); + if (dlg.ShowModal() != wxID_OK) { + return; + } + std::vector data(1); + TableInterface *table_int = project->GetTableInt(); + table_int->GetColData(dlg.col_ids[0], data[0]); + + int t = 0; // assume the radius is not a time-variable + int n = data[0][0].size(); + radius_arr.clear(); + radius_arr.resize(n); + for (int i=0; i< n; ++i) { + radius_arr[i] = data[0][0][i]; + } + has_init = true; + use_radius_variable = true; + use_bandwidth = !use_radius_variable; + canvas->RedrawMap(); +} + +void HeatMapHelper::ChangeFillColor(MapCanvas* canvas) +{ + // prompt user color pick dialog + fill_color = GeneralWxUtils::PickColor(canvas, fill_color); + use_fill_color = true; + canvas->RedrawMap(); +} + +void HeatMapHelper::ChangeOutlineColor(MapCanvas* canvas) +{ + // prompt user color pick dialog + outline_color = GeneralWxUtils::PickColor(canvas, outline_color); + use_outline_color = true; + canvas->RedrawMap(); +} + +void HeatMapHelper::ChangeTransparency(MapCanvas* canvas) +{ + // prompt user color input dialog + HeatMapTransparencyDlg sliderDlg(this, canvas); + sliderDlg.ShowModal(); +} + +void HeatMapHelper::UpdateTransparency(int tran) +{ + this->transparency = tran; +} + +void HeatMapHelper::Draw(const std::vector& selectable_shps, + std::list& background_shps, + CatClassifData& cat_data) +{ + wxPen pen(outline_color); + if (use_fill_color) { + fill_color.Set(fill_color.Red(), fill_color.Green(), fill_color.Blue(), transparency); + wxBrush brush(fill_color); + for (int i=0; iGetX(), pt->GetY(), r); + p->setPen(use_outline_color ? pen : *wxTRANSPARENT_PEN); + p->setBrush(brush); + background_shps.push_back(p); // memory will be freed by background_shps + } + } else { + int cc_ts = cat_data.curr_canvas_tm_step; + int num_cats = cat_data.GetNumCategories(cc_ts); + for (int cat=0; cat& ids = cat_data.GetIdsRef(cc_ts, cat); + for (size_t i=0, iend=ids.size(); iGetX(), pt->GetY(), r); + p->setBrush(brush); + p->setPen(use_outline_color ? pen : *wxTRANSPARENT_PEN); + background_shps.push_back(p); // memory will be freed by background_shps + } + } + } +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// MSTMapHelper +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +bool MSTMapHelper::check_spatial_ref = true; + +MSTMapHelper::MSTMapHelper() +{ + use_custom_pen = false; + outline_color = *wxBLACK; + outline_thickness = 1; +} + + +MSTMapHelper::~MSTMapHelper() +{ +} + +void MSTMapHelper::CreateDistMatrix(const std::vector& points) +{ + if (dist_matrix.empty() == false) return; + + int n = points.size(); + dist_matrix.resize(n); + for (int i=0; iGetX(); + double y1 = points[i]->GetY(); + double x2 = points[j]->GetX(); + double y2 = points[j]->GetY(); + double d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); + dist_matrix[i][k] = sqrt(d); + } + } +} + +bool MSTMapHelper::Create(Project* project) +{ + if (check_spatial_ref) { + bool cont = project->CheckSpatialProjection(check_spatial_ref); + if (cont == false) { + return false; + } + } + if (project == 0) return false; + if (mst_edges.empty() == false) return true; // already has a MST + + // if no MST, create a MST + // use centroids to create MST + WeightsManInterface* w_man_int = project->GetWManInt(); + nodes = project->GetCentroids(); + CreateDistMatrix(nodes); + + int num_obs = project->GetNumRecords(); + BGraph g(num_obs); + for (int i=0; i p(num_vertices(g)); + prim_minimum_spanning_tree(g, p.data()); + + for (int source = 0; source < p.size(); ++source) { + int target = p[source]; + if (source != target) { + //boost::add_edge(source, p[source], mst); + mst_edges.push_back(std::make_pair(source, target)); + } + } + return true; +} + +void MSTMapHelper::SaveToWeightsFile(Project* project) +{ + // create MST first if needed + if (this->Create(project) == false) { + return; + } + + // Get ID variable for spatial weights file + SelectWeightsIdDialog selid_dlg(NULL, project); + if (selid_dlg.ShowModal() != wxID_OK) { + return; + } + TableInterface* table_int = project->GetTableInt(); + wxString id = selid_dlg.GetIDVariable(); + if (id.IsEmpty()) return; + + int col = table_int->FindColId(id); + if (col < 0) return; + + std::vector ids; + table_int->GetColData(col, 0, ids); + + // prompt user to select output file + wxString filter = "GWT|*.gwt"; + wxFileDialog dialog(NULL, _("Save Spanning Tree to a Weights File"), + wxEmptyString, wxEmptyString, filter, + wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + if (dialog.ShowModal() != wxID_OK) { + return; + } + + // create Spatial weights file + wxFileName fname = wxFileName(dialog.GetPath()); + wxString new_main_dir = fname.GetPathWithSep(); + wxString new_main_name = fname.GetName(); + wxString new_txt = new_main_dir + new_main_name+".gwt"; + wxTextFile file(new_txt); + file.Create(new_txt); + file.Open(new_txt); + file.Clear(); + + wxString header; + header << "0 " << project->GetNumRecords() << " "; + header << "\"" << project->GetProjectTitle() << "\" "; + header << id; + file.AddLine(header); + + for (int i=0; i f_idx ? dist_matrix[f_idx][t_idx - f_idx-1] : + dist_matrix[t_idx][f_idx - t_idx-1]; + wxString line1; + line1 << ids[f_idx] << " " << ids[t_idx] << " " << cost; + file.AddLine(line1); + wxString line2; + line2 << ids[t_idx] << " " << ids[f_idx] << " " << cost; + file.AddLine(line2); + } + file.Write(); + file.Close(); + + // Load the weights file into Weights Manager + WeightsManInterface* w_man_int = project->GetWManInt(); + WeightUtils::LoadGwtInMan(w_man_int, new_txt, table_int, id, WeightsMetaInfo::WT_tree); +} + +void MSTMapHelper::Draw(std::list& foreground_shps, + CatClassifData& cat_data) +{ + int n_edges = mst_edges.size(); + if (n_edges <= 0) return; + + GdaPolyLine* edge; + wxPen pen(outline_color, outline_thickness); + int cc_ts = cat_data.curr_canvas_tm_step; + + for (int i=0; i < n_edges; ++i) { + const std::pair& s_t = mst_edges[i]; + int source = s_t.first; + int target = s_t.second; + edge = new GdaPolyLine(nodes[source]->GetX(), nodes[source]->GetY(), + nodes[target]->GetX(), nodes[target]->GetY()); + edge->from = source; + edge->to = target; + if (!use_custom_pen && cat_data.GetNumCategories(cc_ts) > 1) { + pen = cat_data.GetCategoryPenById(cc_ts, source); + pen.SetWidth(outline_thickness); + } + edge->setPen(pen); + foreground_shps.push_back(edge); + } +} + +void MSTMapHelper::ChangeColor(MapCanvas* canvas) +{ + // prompt user color pick dialog + outline_color = GeneralWxUtils::PickColor(canvas, outline_color); + use_custom_pen = true; + canvas->RedrawMap(); +} + +void MSTMapHelper::ChangeThickness(MapCanvas* canvas, int thickness) +{ + use_custom_pen = true; + outline_thickness = thickness; + canvas->RedrawMap(); +} + +int MSTMapHelper::GetThickness() +{ + return outline_thickness; +} diff --git a/Explore/MapViewHelper.h b/Explore/MapViewHelper.h new file mode 100644 index 000000000..403fec68d --- /dev/null +++ b/Explore/MapViewHelper.h @@ -0,0 +1,249 @@ +/** + * GeoDa TM, Copyright (C) 2011-2015 by Luc Anselin - all rights reserved + * + * This file is part of GeoDa. + * + * GeoDa is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GeoDa is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __GEODA_CENTER_MAP_VIEW_HELPER_H__ +#define __GEODA_CENTER_MAP_VIEW_HELPER_H__ + +#include +#include +#include +#include "../Algorithms/skater.h" // for reusing adjacency_list<>Graph + +class CatClassifData; +class MapCanvas; +class TableInterface; +class HeatMapHelper; +class GdaShape; +class Project; + +// Transparency SliderBar dialog for Basemap +class MapTransparencyDlg: public wxDialog +{ +public: + MapTransparencyDlg (); + MapTransparencyDlg (wxWindow* parent, + MapCanvas* canvas, + wxWindowID id=wxID_ANY, + const wxString & caption=_("Transparency Setup Dialog"), + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE ); + virtual ~MapTransparencyDlg (); + virtual void OnSliderChange(wxCommandEvent& event); + +protected: + // reference to MapCanvas (no MEM mgnt) + MapCanvas* canvas; + + // UI: slider (no MEM mgnt) + wxSlider* slider; + + // UI: text input control under slider (no MEM mgnt) + wxStaticText* slider_text; +}; + +// Setup transparency for heatmap +class HeatMapTransparencyDlg : public MapTransparencyDlg +{ +public: + HeatMapTransparencyDlg(HeatMapHelper* heatmap, MapCanvas* canvas); + virtual ~HeatMapTransparencyDlg(); + virtual void OnSliderChange(wxCommandEvent& event); + +protected: + // reference to HeatMap instance in MapCanvas (no MEM mgnt) + HeatMapHelper* heatmap; +}; + +// Setup bandwidth for heatmap +class HeatMapBandwidthDlg: public wxDialog +{ +public: + HeatMapBandwidthDlg(); + HeatMapBandwidthDlg(HeatMapHelper* _heatmap, + MapCanvas* _canvas, + double min_band, double max_band, + wxWindowID id = wxID_ANY, + const wxString & caption =_("Heat Map Bandwidth Setup Dialog"), + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE ); + + virtual ~HeatMapBandwidthDlg(); + + void OnSliderChange(wxCommandEvent& event ); + + void OnTextChange(wxCommandEvent& event ); + +private: + // reference to MapCanvas (no MEM mgnt) + MapCanvas* canvas; + + // reference to HeatMap instance in MapCanvas (no MEM mgnt) + HeatMapHelper* heatmap; + + // UI: slider (no MEM mgnt) + wxSlider* slider; + + // UI: text label under slider (no MEM mgnt) + wxTextCtrl* slider_text; + + // selected bandwidth + double sel_band; + + // maximum bandwidth + double max_band; + + // max tick for slider + int max_tick; +}; + +// Helper class for drawing heat map on MapCanvas +class HeatMapHelper +{ +public: + HeatMapHelper(); + + virtual ~HeatMapHelper(); + + // Draw a heat map by making points with radius, color and transparency + // and saving the points to background_shps, which will be rendered by + // MapCanvas; + // The color could be defined by CatClassifData in MapCanvas, if user + // doesn't specify heat_map_fill_color and heat_map_outline_color; + // The heat map can be created by using either bandwidth, or a variable + // that contains the values of radius for all points. + void Draw(const std::vector& selectable_shps, + std::list& background_shps, + CatClassifData& cat_data); + + // Prompt user to set bandwidth value to create a heat map + void SetBandwidth(MapCanvas* canvas, Project* project); + + // Prompt user to select a variable to set radius value for points + // in a heat map + void SetRadiusVariable(MapCanvas* canvas, Project* project); + + // Change property value: bandwidth + void UpdateBandwidth(double bandwidth); + + // Prompt user to select a fill color + void ChangeFillColor(MapCanvas* canvas); + + // Prompt user to select a outline color + void ChangeOutlineColor(MapCanvas* canvas); + + // User select to reset original heat map + // not using user specified fill color/outline color + void Reset(); + + // Prompt user to specify transparency + void ChangeTransparency(MapCanvas* canvas); + + // Change transparency of (point) fill color + void UpdateTransparency(int tran); + + // Get current transparency + int GetTransparency(); + + // If HeatMapHelper has been initialized + bool HasInitialized(); + +protected: + bool has_init; + + // flag if use fill color, false will use current map's fill color + bool use_fill_color; + + // flag if use outline color, false will use TRANSPARENT (no) color + bool use_outline_color; + + // Fill colour (wxBrush) + wxColour fill_color; + + // Outline colour (wxPen) + wxColour outline_color; + + // The bandwidth used to create a heat map + double bandwidth; + + // flag if use bandwidth + bool use_bandwidth; + + // The array contains radius values for point + std::vector radius_arr; + + // flag if use radius variable + bool use_radius_variable; + + // transparency 0-255 + int transparency; + + // check if lat/lng is used + static bool check_spatial_ref; +}; + +// Helper class for adding Mimimum Spanning Tree for points map canvas +class MSTMapHelper +{ +public: + MSTMapHelper(); + virtual~MSTMapHelper(); + + // Create a MST from points, and show it on canvas + bool Create(Project* project); + + void Draw(std::list& foreground_shps, + CatClassifData& cat_data); + + // Prompt user to select a line color + void ChangeColor(MapCanvas* canvas); + + // Prompt user to select a line thickness + void ChangeThickness(MapCanvas* canvas, int thickness); + + // Return line thickness + int GetThickness(); + + // Save MST to a spatial weights file *.gwt + void SaveToWeightsFile(Project* project); + +protected: + void CreateDistMatrix(const std::vector& points); + + std::vector > dist_matrix; + + std::vector > mst_edges; + + std::vector nodes; + + // Flag to use user specified pen color + bool use_custom_pen; + + // Pen thickness (wxBrush) + int outline_thickness; + + // Outline colour (wxPen) + wxColour outline_color; + + // check if lat/lng is used + static bool check_spatial_ref; +}; + +#endif diff --git a/Explore/ScatterNewPlotView.cpp b/Explore/ScatterNewPlotView.cpp index 15fcdcc18..870f68d36 100644 --- a/Explore/ScatterNewPlotView.cpp +++ b/Explore/ScatterNewPlotView.cpp @@ -48,6 +48,7 @@ #include "../ShapeOperations/VoronoiUtils.h" #include "../ShapeOperations/Lowess.h" #include "MapLayoutView.h" +#include "SimpleScatterPlotCanvas.h" #include "ScatterNewPlotView.h" @@ -783,7 +784,7 @@ void ScatterNewPlotCanvas::PopulateCanvas() int yt = var_info[1].time-var_info[1].time_min; // for undefined values, we have to search [min max] for both axies - double x_max, x_min, y_max, y_min; + double x_max = DBL_MIN, x_min = DBL_MAX, y_max = DBL_MIN, y_min = DBL_MAX; bool has_init = false; XYZ_undef.resize(num_obs); @@ -1352,6 +1353,11 @@ void ScatterNewPlotCanvas::ShowLowessSmoother(bool display) PopulateCanvas(); } +void ScatterNewPlotCanvas::DrawLayer2() +{ + TemplateCanvas::DrawLayer2(); +} + void ScatterNewPlotCanvas::ChangeLoessParams(double f, int iter, double delta_factor) @@ -1764,8 +1770,6 @@ bool ScatterNewPlotCanvas::UpdateDisplayLinesAndMargins() if (IsDisplayStats() && stats_table && IsShowLinearSmoother()) { wxClientDC dc(this); stats_table->GetSize(dc, table_w, table_h); - LOG(table_w); - LOG(table_h); } last_scale_trans.bottom_margin = 50; if (!IsDisplayStats() || !IsShowLinearSmoother()) { @@ -1952,7 +1956,7 @@ void ScatterNewPlotFrame::Init(const std::vector& var_info else SetTitle(title); - if (is_bubble_plot) { + if (is_bubble_plot && splitter_win) { lpanel = new wxPanel(splitter_win); template_legend = new ScatterNewPlotLegend(lpanel, template_canvas, @@ -2259,18 +2263,80 @@ END_EVENT_TABLE() MDSPlotCanvas::MDSPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, const wxPoint& pos, const wxSize& size) : ScatterNewPlotCanvas(parent, t_frame, project, pos, size) { - + display_stats = true; + DisplayStatistics(display_stats); +} + +MDSPlotCanvas::MDSPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, + Project* project, const std::vector >& groups, + const std::vector& group_labels, + const std::vector& info_str, + const std::vector >& output_vals, + const std::vector& var_info, + const std::vector& col_ids, + bool is_bubble_plot, bool standardized, + const wxPoint& pos, const wxSize& size) +: vn_tbl(0), info_str(info_str), output_vals(output_vals), +ScatterNewPlotCanvas(parent, t_frame, project, var_info, col_ids, is_bubble_plot, standardized, pos, size) +{ + vn_tbl = new GdaShapeTable(); + vn_tbl->hidden = false; + foreground_shps.push_back(vn_tbl); + + ShowLinearSmoother(false); + + // update cateogry if needed + int num_categories = (int)groups.size(); + if (num_categories > 1) { + int t = 0; + cat_data.CreateCategoriesAtCanvasTm(num_categories, t); + cat_data.ClearAllCategoryIds(); + std::vector m_predef_colors; + GdaColorUtils::GetUnique20Colors(m_predef_colors); + for (int i=0; i& var_info, const std::vector& col_ids,bool is_bubble_plot, bool standardized, const wxPoint& pos, const wxSize& size) -: ScatterNewPlotCanvas(parent, t_frame, project, var_info, col_ids, is_bubble_plot, standardized, pos, size) +MDSPlotCanvas::~MDSPlotCanvas() { } -MDSPlotCanvas::~MDSPlotCanvas() +void MDSPlotCanvas::UpdateSelection(bool shiftdown, bool pointsel) { - + TemplateCanvas::UpdateSelection(shiftdown, pointsel); +} + +void MDSPlotCanvas::update(HLStateInt* o) +{ + // Call TemplateCanvas::update to redraw objects as needed. + TemplateCanvas::update(o); +} + +void MDSPlotCanvas::DrawLayer2() +{ + foreground_shps.pop_back(); + foreground_shps.pop_back(); + stats_table = new GdaShapeTable(); + stats_table->hidden = true; + foreground_shps.push_back(stats_table); + vn_tbl = new GdaShapeTable(); + vn_tbl->hidden = true; + foreground_shps.push_back(vn_tbl); + UpdateDisplayStats(); + UpdateDisplayLinesAndMargins(); + TemplateCanvas::DrawLayer2(); + } void MDSPlotCanvas::DisplayRightClickMenu(const wxPoint& pos) @@ -2286,7 +2352,13 @@ void MDSPlotCanvas::DisplayRightClickMenu(const wxPoint& pos) wxString menu_txt = _("Create Weights"); optMenu->Prepend(XRCID("MDS_WEIGHTS"), menu_txt); optMenu->AppendSeparator(); - + optMenu->Destroy(XRCID("ID_SCATTER_DATA_MENU")); + optMenu->Destroy(XRCID("ID_SCATTER_SMOOTHER_MENU")); + + wxMenu* viewMenu = optMenu->FindItem(XRCID("ID_VIEW_REGIMES_REGRESSION"))->GetMenu(); + //GeneralWxUtils::EnableMenuItem(optMenu, XRCID("ID_VIEW_REGIMES_REGRESSION"), false); + viewMenu->Destroy(XRCID("ID_VIEW_REGIMES_REGRESSION")); + template_frame->Connect(XRCID("MDS_WEIGHTS"), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MDSPlotFrame::OnCreateWeights)); @@ -2307,6 +2379,261 @@ void MDSPlotCanvas::OnCreateWeights() dlg.ShowModal(); } +void MDSPlotCanvas::PopulateCanvas() +{ + wxSize size(GetVirtualSize()); + int screen_w = size.GetWidth(); + int screen_h = size.GetHeight(); + last_scale_trans.SetView(screen_w, screen_h); + + pens.SetPenColor(pens.GetRegPen(), selectable_outline_color); + pens.SetPenColor(pens.GetRegSelPen(), highlight_color); + pens.SetPenColor(pens.GetRegExlPen(), selectable_fill_color); + + BOOST_FOREACH( GdaShape* shp, background_shps ) { delete shp; } + background_shps.clear(); + BOOST_FOREACH( GdaShape* shp, selectable_shps ) { delete shp; } + selectable_shps.clear(); + BOOST_FOREACH( GdaShape* shp, foreground_shps ) { delete shp; } + foreground_shps.clear(); + + int xt = var_info[0].time-var_info[0].time_min; + int yt = var_info[1].time-var_info[1].time_min; + + // for undefined values, we have to search [min max] for both axies + double x_max = DBL_MIN, x_min = DBL_MAX, y_max = DBL_MIN, y_min = DBL_MAX; + bool has_init = false; + + XYZ_undef.resize(num_obs); + for (int i=0; i x_max) + x_max = X[i]; + if (X[i] < x_min) + x_min = X[i]; + if (Y[i] > y_max) + y_max = Y[i]; + if (Y[i] < y_min) + y_min = Y[i]; + } + } + } + + if (standardized) { + double local_x_max = DBL_MIN; + double local_x_min = DBL_MAX; + double local_y_max = DBL_MIN; + double local_y_min = DBL_MAX; + for (int i=0, iend=X.size(); i X[i]) local_x_min = X[i]; + if (local_y_max < Y[i]) local_y_max = Y[i]; + if (local_y_min > Y[i]) local_y_min = Y[i]; + } + x_max = local_x_max; + x_min = local_x_min; + y_max = local_y_max; + y_min = local_y_min; + } + + if (var_info[0].is_moran || (!var_info[0].fixed_scale && !standardized)) { + x_max = var_info[0].max[var_info[0].time]; + x_min = var_info[0].min[var_info[0].time]; + } else if (var_info[0].fixed_scale && !standardized) { + // this is for fixed x-axis over time + x_max = var_info[0].max_over_time; + x_min = var_info[0].min_over_time; + } + if (var_info[1].is_moran || (!var_info[1].fixed_scale && !standardized)) { + y_max = var_info[1].max[var_info[1].time]; + y_min = var_info[1].min[var_info[1].time]; + } else if (var_info[1].fixed_scale&& !standardized){ + // this is for fixed y-axis over time + y_max = var_info[1].max_over_time; + y_min = var_info[1].min_over_time; + } + + double x_pad = 0.1 * (x_max - x_min); + double y_pad = 0.1 * (y_max - y_min); + axis_scale_x = AxisScale(x_min - x_pad, x_max + x_pad, 5, + axis_display_precision, axis_display_fixed_point); + axis_scale_y = AxisScale(y_min - y_pad, y_max + y_pad, 5, + axis_display_precision, axis_display_fixed_point); + + // Populate TemplateCanvas::selectable_shps + selectable_shps.resize(num_obs); + selectable_shps_undefs.resize(num_obs); + scaleX = 100.0 / (axis_scale_x.scale_range); + scaleY = 100.0 / (axis_scale_y.scale_range); + + { + selectable_shps_type = points; + for (int i=0; isetPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(x_baseline); + y_baseline = new GdaAxis(GetNameWithTime(1), axis_scale_y, + wxRealPoint(0,0), wxRealPoint(0, 100)); + y_baseline->setPen(*GdaConst::scatterplot_scale_pen); + foreground_shps.push_back(y_baseline); + + // create optional axes through origin + x_axis_through_origin = new GdaPolyLine(0,50,100,50); + x_axis_through_origin->setPen(*wxTRANSPARENT_PEN); + y_axis_through_origin = new GdaPolyLine(50,0,50,100); + y_axis_through_origin->setPen(*wxTRANSPARENT_PEN); + foreground_shps.push_back(x_axis_through_origin); + foreground_shps.push_back(y_axis_through_origin); + UpdateAxesThroughOrigin(); + + stats_table = new GdaShapeTable(); + stats_table->hidden = true; + foreground_shps.push_back(stats_table); + + vn_tbl = new GdaShapeTable(); + vn_tbl->hidden = true; + foreground_shps.push_back(vn_tbl); + + UpdateDisplayStats(); + PopCanvPreResizeShpsHook(); + ResizeSelectableShps(); +} + +void MDSPlotCanvas::UpdateDisplayStats() +{ + if (IsDisplayStats()) { + // add method and variable names + wxClientDC dc(this); + int w, h; + dc.GetSize(&w, &h); + if (w<=0) w = 500; + std::vector vn_vals; + wxString tmp_info_str; + for (size_t k=0; k w - 20) { + vn_vals.push_back(tmp_info_str); + tmp_info_str = ""; + } else if (k < info_str.size()-1 ) { + tmp_info_str << ", "; + } + } + if (tmp_info_str.length() > 0) vn_vals.push_back(tmp_info_str); + int rows = vn_vals.size(); + int cols = 1; + int x_nudge = last_scale_trans.GetXNudge(); + if (rows > 0) { + std::vector vn_attributes(rows*cols); + vn_tbl->operator=(GdaShapeTable(vn_vals, vn_attributes, + rows, cols, + *GdaConst::small_font, + wxRealPoint(50, 0), + GdaShapeText::h_center, + GdaShapeText::v_center, + GdaShapeText::h_center, + GdaShapeText::v_center, + 3, 8, -x_nudge, 55)); + vn_tbl->setPen(*wxBLACK_PEN); + vn_tbl->hidden = false; + ApplyLastResizeToShp(vn_tbl); + } + //foreground_shps.push_back(vn_tbl); + // fill out the stats table + rows = 1; + cols = (int)output_vals.size() * 2; + std::vector vals(rows*cols); + std::vector attributes(rows*cols); + size_t idx = 0; + for (size_t i=0; ioperator=(GdaShapeTable(vals, attributes, rows, cols, + *GdaConst::small_font, + wxRealPoint(50, 0), + GdaShapeText::h_center, + GdaShapeText::top, + GdaShapeText::h_center, + GdaShapeText::v_center, + 3, 8, -x_nudge, 45)); + stats_table->setPen(*wxBLACK_PEN); + stats_table->hidden = false; + ApplyLastResizeToShp(stats_table); + } else { + vn_tbl->hidden = true; + stats_table->hidden = true; + } + layer2_valid = false; +} + +bool MDSPlotCanvas::UpdateDisplayLinesAndMargins() +{ + bool changed = false; + int lines = 0; + int table_w=0, table_h=0; + if (IsDisplayStats() && stats_table) { + wxClientDC dc(this); + int w, h; + stats_table->GetSize(dc, w, h); + table_w = w; + table_h += h; + vn_tbl->GetSize(dc, w, h); + table_h += h; + if (vn_tbl->rows>1) table_h += 2; + } + + last_scale_trans.bottom_margin = 50; + if (!IsDisplayStats()) { + lines = 0; + } else { + lines = 1; + last_scale_trans.bottom_margin += 10; + + } + last_scale_trans.bottom_margin += table_h; + + if (table_display_lines != lines) { + layer0_valid = false; + layer1_valid = false; + layer2_valid = false; + changed = true; + } + + table_display_lines = lines; + return changed; +} IMPLEMENT_CLASS(MDSPlotFrame, TemplateFrame) BEGIN_EVENT_TABLE(MDSPlotFrame, TemplateFrame) @@ -2321,6 +2648,10 @@ MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, } MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, + const std::vector >& groups, + const std::vector& group_labels, + const std::vector& info_str, + const std::vector >& output_vals, const std::vector& var_info, const std::vector& col_ids, bool is_bubble_plot, const wxString& title, @@ -2333,23 +2664,48 @@ MDSPlotFrame::MDSPlotFrame(wxFrame *parent, Project* project, int width, height; GetClientSize(&width, &height); wxSplitterWindow* splitter_win = 0; - if (is_bubble_plot) { - splitter_win = new wxSplitterWindow(this,wxID_ANY,wxDefaultPosition, - wxDefaultSize, - wxSP_3D|wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); + if (groups.empty()) { + template_canvas = new MDSPlotCanvas(this, this, project, groups, + group_labels,info_str, + output_vals, var_info, col_ids, + is_bubble_plot, false, wxDefaultPosition, + wxSize(width,height)); + template_canvas->SetScrollRate(1,1); + } else { + splitter_win = new wxSplitterWindow(this,wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D |wxSP_LIVE_UPDATE|wxCLIP_CHILDREN); splitter_win->SetMinimumPaneSize(10); + + // right panel + wxPanel* rpanel = new wxPanel(splitter_win); + template_canvas = new MDSPlotCanvas(rpanel, this, project, groups, group_labels, + info_str, output_vals, var_info, col_ids, + is_bubble_plot, false, wxDefaultPosition, + wxSize(width,height)); + template_canvas->SetScrollRate(1,1); + wxBoxSizer *rbox = new wxBoxSizer(wxVERTICAL); + rbox->Add(template_canvas, 1, wxEXPAND); + rpanel->SetSizer(rbox); + // left panel + wxPanel* lpanel = new wxPanel(splitter_win); + template_legend = new TemplateLegend(lpanel, template_canvas, wxPoint(0,0), wxSize(0,0)); + wxBoxSizer* lbox = new wxBoxSizer(wxVERTICAL); + template_legend->GetContainingSizer()->Detach(template_legend); + lbox->Add(template_legend, 1, wxEXPAND); + lpanel->SetSizer(lbox); + // setup panels + splitter_win->SplitVertically(lpanel, rpanel, GdaConst::map_default_legend_width); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(splitter_win, 1, wxEXPAND|wxALL); + SetSizer(sizer); + SetAutoLayout(true); } - template_canvas = new MDSPlotCanvas(this, this, project, - var_info, col_ids, - is_bubble_plot, - false, wxDefaultPosition, - wxSize(width,height)); - template_canvas->SetScrollRate(1,1); DisplayStatusBar(true); SetTitle(title); if (title.empty()) SetTitle(template_canvas->GetCanvasTitle()); Show(true); + //wxCommandEvent ev; + //OnViewLinearSmoother(ev); } MDSPlotFrame::~MDSPlotFrame() diff --git a/Explore/ScatterNewPlotView.h b/Explore/ScatterNewPlotView.h index baa1c9072..ed1fd47a4 100644 --- a/Explore/ScatterNewPlotView.h +++ b/Explore/ScatterNewPlotView.h @@ -138,7 +138,7 @@ public TemplateCanvas, public CatClassifStateObserver void UpdateRegSelectedLine(); void UpdateRegExcludedLine(); - void UpdateDisplayStats(); + virtual void UpdateDisplayStats(); void UpdateAxesThroughOrigin(); virtual void UpdateStatusBar(); @@ -147,6 +147,8 @@ public TemplateCanvas, public CatClassifStateObserver virtual void TimeChange(); virtual void PopulateCanvas(); virtual void PopCanvPreResizeShpsHook(); + virtual void DrawLayer2(); + void VarInfoAttributeChange(); ScatterPlotPens pens; @@ -209,7 +211,7 @@ public TemplateCanvas, public CatClassifStateObserver GdaPolyLine* reg_line; GdaSpline* lowess_reg_line; - GdaShapeTable* stats_table; + GdaShapeTable* stats_table; GdaShapeText* chow_test_text; bool show_reg_selected; @@ -247,7 +249,7 @@ public TemplateCanvas, public CatClassifStateObserver // table_display_lines: 0 if no table shown, 1 if just blue line // 2 if blue and just green or red, 3 if blue, green and red shown. int table_display_lines; - bool UpdateDisplayLinesAndMargins(); + bool virtual UpdateDisplayLinesAndMargins(); bool all_init; DECLARE_EVENT_TABLE() @@ -323,7 +325,7 @@ class ScatterNewPlotFrame : public TemplateFrame, public LowessParamObserver /** Implementation of LowessParamObserver interface */ virtual void update(LowessParamObservable* o); virtual void notifyOfClosing(LowessParamObservable* o); - + void GetVizInfo(wxString& x, wxString& y); protected: @@ -351,6 +353,10 @@ class MDSPlotCanvas : public ScatterNewPlotCanvas const wxSize& size = wxDefaultSize); MDSPlotCanvas(wxWindow *parent, TemplateFrame* t_frame, Project* project, + const std::vector >& groups, + const std::vector& group_labels, + const std::vector& info_str, + const std::vector >& output_vals, const std::vector& var_info, const std::vector& col_ids, bool is_bubble_plot = false, @@ -360,9 +366,21 @@ class MDSPlotCanvas : public ScatterNewPlotCanvas virtual ~MDSPlotCanvas(); virtual void DisplayRightClickMenu(const wxPoint& pos); + virtual void UpdateDisplayStats(); + virtual void update(HLStateInt* o); + bool virtual UpdateDisplayLinesAndMargins(); + virtual void UpdateSelection(bool shiftdown, bool pointsel); void OnCreateWeights(); + +protected: + virtual void PopulateCanvas(); + virtual void DrawLayer2(); + GdaShapeTable* vn_tbl; + std::vector info_str; + std::vector > output_vals; + DECLARE_EVENT_TABLE() }; @@ -376,6 +394,10 @@ class MDSPlotFrame : public ScatterNewPlotFrame const long style = wxDEFAULT_FRAME_STYLE); MDSPlotFrame(wxFrame *parent, Project* project, + const std::vector >& groups, + const std::vector& group_labels, + const std::vector& info_str, + const std::vector >& output_vals, const std::vector& var_info, const std::vector& col_ids, bool is_bubble_plot, @@ -391,4 +413,5 @@ class MDSPlotFrame : public ScatterNewPlotFrame DECLARE_EVENT_TABLE() }; + #endif diff --git a/Explore/ScatterPlotMatView.cpp b/Explore/ScatterPlotMatView.cpp index 7749f8de8..636a8191f 100644 --- a/Explore/ScatterPlotMatView.cpp +++ b/Explore/ScatterPlotMatView.cpp @@ -537,8 +537,8 @@ void ScatterPlotMatFrame::SetupPanelForNumVariables(int num_vars) } } - double row_min; - double row_max; + double row_min = 0; + double row_max = 0; bool has_init = false; for (size_t i=0; i& X(data_map[col_nm][col_tm]); - double col_min; - double col_max; + double col_min = 0; + double col_max = 0; bool has_init = false; for (size_t i=0; iremoveObserver(this); + if (highlight_state) highlight_state->removeObserver(this); wxLogMessage("Exiting SimpleScatterPlotCanvas::~SimpleScatterPlotCanvas"); } @@ -152,8 +154,7 @@ void SimpleScatterPlotCanvas::UpdateSelection(bool shiftdown, bool pointsel) if (IsShowRegimes() && IsShowLowessSmoother()) { UpdateLowessOnRegimes(); } - //if (IsDisplayStats() && IsShowLinearSmoother()) UpdateDisplayStats(); - + if (IsShowRegimes()) { // we only need to redraw everything if the optional // regression lines have changed. @@ -161,6 +162,7 @@ void SimpleScatterPlotCanvas::UpdateSelection(bool shiftdown, bool pointsel) } TemplateCanvas::UpdateSelection(shiftdown, pointsel); } + /** Override of TemplateCanvas method. We must still call the TemplateCanvas method after we update the regression lines @@ -184,8 +186,7 @@ void SimpleScatterPlotCanvas::update(HLStateInt* o) if (IsShowRegimes() && IsShowLowessSmoother()) { UpdateLowessOnRegimes(); } - //if (IsDisplayStats() && IsShowLinearSmoother()) UpdateDisplayStats(); - + // Call TemplateCanvas::update to redraw objects as needed. TemplateCanvas::update(o); @@ -299,12 +300,10 @@ void SimpleScatterPlotCanvas::UpdateStatusBar() void SimpleScatterPlotCanvas::TimeSyncVariableToggle(int var_index) { - } void SimpleScatterPlotCanvas::FixedScaleVariableToggle(int var_index) { - } void SimpleScatterPlotCanvas::SetSelectableOutlineColor(wxColour color) @@ -327,7 +326,6 @@ void SimpleScatterPlotCanvas::SetSelectableFillColor(wxColour color) cat_data.SetCategoryPenColor(0, 0, selectable_fill_color); TemplateCanvas::SetSelectableFillColor(color); PopulateCanvas(); - } void SimpleScatterPlotCanvas::ShowAxes(bool display) @@ -436,7 +434,6 @@ void SimpleScatterPlotCanvas::UpdateLowessOnRegimes() if (!lowess_reg_line_selected && !lowess_reg_line_excluded) return; size_t n = X.size(); wxString key = SmoothingUtils::LowessCacheKey(0, 0); - LOG(key); SmoothingUtils::LowessCacheType::iterator it = lowess_cache.find(key); SmoothingUtils::LowessCacheEntry* lce = 0; if (it != lowess_cache.end()) { @@ -557,8 +554,16 @@ void SimpleScatterPlotCanvas::PopulateCanvas() x_max + (add_auto_padding_max ? x_pad : 0.0), 5, axis_display_precision, axis_display_fixed_point); - axis_scale_y = AxisScale(y_min - (add_auto_padding_min ? y_pad : 0.0), - y_max + (add_auto_padding_max ? y_pad : 0.0), + + double axis_min = y_min - (add_auto_padding_min ? y_pad : 0.0); + double axis_max = y_max + (add_auto_padding_max ? y_pad : 0.0); + if (!def_y_min.IsEmpty()) + def_y_min.ToDouble(&axis_min); + + if (!def_y_max.IsEmpty()) + def_y_max.ToDouble(&axis_max); + + axis_scale_y = AxisScale(axis_min, axis_max, 5, axis_display_precision, axis_display_fixed_point); @@ -571,34 +576,38 @@ void SimpleScatterPlotCanvas::PopulateCanvas() */ // Populate TemplateCanvas::selectable_shps - selectable_shps.resize(X.size()); - selectable_shps_undefs.resize(X.size()); - scaleX = 100.0 / (axis_scale_x.scale_range); - scaleY = 100.0 / (axis_scale_y.scale_range); - - if (use_larger_filled_circles) { - selectable_shps_type = circles; - for (size_t i=0, sz=X.size(); isetPen(GdaConst::scatterplot_regression_excluded_color); - c->setBrush(GdaConst::scatterplot_regression_excluded_color); - selectable_shps[i] = c; - } - } else { - selectable_shps_type = points; - for (size_t i=0, sz=X.size(); isetPen(GdaConst::scatterplot_regression_excluded_color); + c->setBrush(GdaConst::scatterplot_regression_excluded_color); + selectable_shps[i] = c; + } + } else { + selectable_shps_type = points; + for (size_t i=0, sz=X.size(); isetPen(*GdaConst::scatterplot_scale_pen); y_baseline = new GdaAxis(Yname, axis_scale_y, wxRealPoint(0,0), wxRealPoint(0, 100)); + y_baseline->setPen(*GdaConst::scatterplot_scale_pen); foreground_shps.push_back(y_baseline); } @@ -744,7 +753,7 @@ void SimpleScatterPlotCanvas::PopulateCanvas() void SimpleScatterPlotCanvas::UpdateMargins() { - int virtual_screen_marg_top = 5;//20; + int virtual_screen_marg_top = 20;//20; int virtual_screen_marg_right = 5;//20; int virtual_screen_marg_bottom = 5;//45; int virtual_screen_marg_left = 5;//45; @@ -762,5 +771,6 @@ void SimpleScatterPlotCanvas::UpdateMargins() /** Free allocated points arrays in lowess_cache and clear cache */ void SimpleScatterPlotCanvas::EmptyLowessCache() { - SmoothingUtils::EmptyLowessCache(lowess_cache); + if (!lowess_cache.empty()) + SmoothingUtils::EmptyLowessCache(lowess_cache); } diff --git a/Explore/SimpleScatterPlotCanvas.h b/Explore/SimpleScatterPlotCanvas.h index 6801212cd..22d2d8b9a 100644 --- a/Explore/SimpleScatterPlotCanvas.h +++ b/Explore/SimpleScatterPlotCanvas.h @@ -75,6 +75,7 @@ class SimpleScatterPlotCanvas : public TemplateCanvas bool show_lowess_smoother = false, bool show_slope_values = true, bool view_standardized_data = false, + bool show_data_points = true, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); virtual ~SimpleScatterPlotCanvas(); @@ -129,7 +130,9 @@ class SimpleScatterPlotCanvas : public TemplateCanvas wxString Xname; wxString Yname; // used for scaling, so can be smaller/larger than min/max in X/Y - double Xmin, Xmax, Ymin, Ymax; + double Xmin, Xmax, Ymin, Ymax; + wxString def_y_min; + wxString def_y_max; bool add_auto_padding_min; bool add_auto_padding_max; @@ -178,6 +181,7 @@ class SimpleScatterPlotCanvas : public TemplateCanvas bool show_vert_axis_through_origin; bool show_slope_values; bool view_standardized_data; + bool show_data_points; SmoothingUtils::LowessCacheType lowess_cache; void EmptyLowessCache(); @@ -185,7 +189,8 @@ class SimpleScatterPlotCanvas : public TemplateCanvas SimpleScatterPlotCanvasCbInt* ssp_canv_cb; wxString right_click_menu_id; - + + DECLARE_EVENT_TABLE() }; diff --git a/Explore/wxGLString.cpp b/Explore/wxGLString.cpp new file mode 100644 index 000000000..ab9bc1ca8 --- /dev/null +++ b/Explore/wxGLString.cpp @@ -0,0 +1,477 @@ +#include "wxGLString.h" +#include + +#ifdef __WXMAC__ +#include "OpenGL/gl.h" +#else +#include +#endif + +#include "wx/wx.h" + + +GLuint* loadImage(wxImage* img) +{ + + GLuint* ID=new GLuint[1]; + glGenTextures( 1, &ID[0] ); + + glBindTexture( GL_TEXTURE_2D, *ID ); + + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1 ); + + const int w = img->GetWidth(), h = img->GetHeight(); + + + // note: must make a local copy before passing the data to OpenGL, as GetData() returns RGB + // and we want the Alpha channel. Furthermore, the current rendering is black-on-white, we'll + // convert it to an alpha channel by the way (not all platforms support transparency in wxDCs + // so it's the easiest way to go) + GLubyte *bitmapData=img->GetData(); + GLubyte *imageData; + + int bytesPerPixel = 4; + + int imageSize = w * h * bytesPerPixel; + imageData=(GLubyte *)malloc(imageSize); + + int rev_val=h-1; + + for(int y=0; ygetID()[0] ); +} +void wxGLString::calculateSize(wxDC* dc) +{ + if(font.IsOk()) dc->SetFont(font); + else dc->SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT)); + + dc->GetTextExtent(*this, &w, &h); +} + +void wxGLString::consolidate(wxDC* dc) +{ + calculateSize(dc); + const int power_of_2_w = pow( 2, (int)ceil((float)log(w)/log(2.0)) ); + const int power_of_2_h = pow( 2, (int)ceil((float)log(h)/log(2.0)) ); + + wxBitmap bmp(power_of_2_w, power_of_2_h); + assert(bmp.IsOk()); + + { + wxMemoryDC temp_dc(bmp); + + temp_dc.SetBrush(*wxWHITE_BRUSH); + temp_dc.Clear(); + + if(font.IsOk()) temp_dc.SetFont(font); + else temp_dc.SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT)); + + temp_dc.DrawText(*this, 0, 0); + } + if(img != NULL) delete img; + img = new TextTexture(bmp); + + TextGLDrawable::w = power_of_2_w; + TextGLDrawable::h = power_of_2_h; + TextGLDrawable::setImage(img); +} +void wxGLString::consolidateFromArray(wxDC* dc, int x, int y) +{ + dc->DrawText(*this, x, y); +} + +void wxGLString::setFont(wxFont font) +{ + wxGLString::font = font; +} + +void wxGLString::render(const int x, const int y) +{ + TextGLDrawable::move(x, y); + TextGLDrawable::render(); +} +wxGLString::~wxGLString() +{ + if(img != NULL) delete img; +} + + +#if 0 +#pragma mark - +#pragma mark wxGLNumberRenderer implementation +#endif + +wxGLNumberRenderer::wxGLNumberRenderer() : wxGLString( wxT("0 1 2 3 4 5 6 7 8 9 . - ") ) +{ + number_location = new int[13]; +} +wxGLNumberRenderer::~wxGLNumberRenderer() +{ + delete[] number_location; +} + +void wxGLNumberRenderer::consolidate(wxDC* dc) +{ + wxGLString::consolidate(dc); + + if(font.IsOk()) dc->SetFont(font); + else dc->SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT)); + + number_location[0] = 0; + number_location[1] = dc->GetTextExtent(wxT("0 ")).GetWidth(); + number_location[2] = dc->GetTextExtent(wxT("0 1 ")).GetWidth(); + number_location[3] = dc->GetTextExtent(wxT("0 1 2 ")).GetWidth(); + number_location[4] = dc->GetTextExtent(wxT("0 1 2 3 ")).GetWidth(); + number_location[5] = dc->GetTextExtent(wxT("0 1 2 3 4 ")).GetWidth(); + number_location[6] = dc->GetTextExtent(wxT("0 1 2 3 4 5 ")).GetWidth(); + number_location[7] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 ")).GetWidth(); + number_location[8] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 ")).GetWidth(); + number_location[9] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 ")).GetWidth(); + number_location[10] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 ")).GetWidth(); + number_location[11] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 . ")).GetWidth(); + number_location[12] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 . - ")).GetWidth(); + + space_w = dc->GetTextExtent(wxT(" ")).GetWidth(); +} +void wxGLNumberRenderer::renderNumber(int i, int x, int y) +{ + wxString s; + s << i; + renderNumber(s, x, y); +} +void wxGLNumberRenderer::renderNumber(float f, int x, int y) +{ + wxString s; + s << f; + renderNumber(s, x, y); +} +void wxGLNumberRenderer::renderNumber(wxString s, int x, int y) +{ + + const int full_string_w = TextGLDrawable::w; + + const int char_amount = s.Length(); + for(int c=0; cgetID()[0] ); +} +void wxGLStringArray::addString(wxString string) +{ + strings.push_back( wxGLString(string) ); +} +void wxGLStringArray::setFont(wxFont font) +{ + wxGLStringArray::font = font; +} + +void wxGLStringArray::consolidate(wxDC* dc) +{ + int x=0, y=0; + + // find how much space we need + int longest_string = 0; + + const int amount = strings.size(); + for(int n=0; n longest_string) longest_string = strings[n].w; + }//next + + const int power_of_2_w = pow( 2, (int)ceil((float)log(longest_string)/log(2.0)) ); + const int power_of_2_h = pow( 2, (int)ceil((float)log(y)/log(2.0)) ); + + wxBitmap bmp(power_of_2_w, power_of_2_h); + assert(bmp.IsOk()); + + { + wxMemoryDC temp_dc(bmp); + + temp_dc.SetBrush(*wxWHITE_BRUSH); + temp_dc.Clear(); + + y = 0; + if(font.IsOk()) temp_dc.SetFont(font); + else temp_dc.SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT)); + + for(int n=0; n +#endif + +#include "wx/wx.h" +#include + +class TextTexture; + +/** base class for renderable elements. You won't create this one directly, +but may use its public members from wxGLString since it inherits from TextGLDrawable. +This class will be useful if you wish to apply effects to the text like rotation or +scaling. */ +class TextGLDrawable +{ + friend class wxGLString; + friend class wxGLStringArray; + friend class wxGLStringNumber; +protected: + + int x,y, angle; + float xscale, yscale; + TextTexture* image; + bool xflip, yflip; + + float tex_coord_x1, tex_coord_y1; + float tex_coord_x2, tex_coord_y2; + int w, h; + + TextGLDrawable(TextTexture* image=(TextTexture*)0); + void render(); + void setImage(TextTexture* image); + void move(int x, int y); +public: + + /** allows you to flip the rendering vertically and/or horizontally */ + void setFlip(bool x, bool y); + + /** scale the rendering , horizontally and vertically (allows stretching) */ + void scale(float x, float y); + + /** scale the rendering and keep the same aspect ratio */ + void scale(float k); + + /** reotate the rendering by 'angle' degrees */ + void rotate(int angle); + +}; + +class wxGLStringArray; + +/** wxGLString is the simplest class you can use. It draws a single string on a single line. +If you plan to render multiple strings, this class is not the fastest. + +Use example : + +wxGLString my_message(wxT("Hello World")); +... +if(first_render) + my_message.consolidate(&dc); + +glColor3f(0,0,0); // black text +my_message.bind(); +my_message.render(x, y); +*/ +class wxGLString : public wxString, public TextGLDrawable +{ +protected: + TextTexture* img; + wxFont font; + + friend class wxGLStringArray; + + void calculateSize(wxDC* dc=NULL); + void consolidateFromArray(wxDC* dc, int x, int y); +public: + /** constructs an empty GLString. Set string later with operator=. */ + wxGLString(); + /** constructs a GLstring with 'message' as contents. */ + wxGLString(wxString message); + ~wxGLString(); + + /** call just before render() - binds the OpenGL. If you render the same string many + times, or render from an array, bind only once, this will improve performance */ + void bind(); + + /** set how to draw string for next consolidate() - has no immediate effect, + you need to call consolidate() to get results */ + void setFont(wxFont font); + + /** to be called after consolidate() only */ + void getStringExtent(); + + /** consolidates the current string info into a GL string. call this after + setting up strings, font and color (if necessary), and before rendering. + The wxDC argument is only used to calculate text extents and will not be rendered on. */ + void consolidate(wxDC* dc); + + /** render this string at coordinates (x,y). Must be called after bind(). */ + void render(const int x, const int y); + + /** changes the string of this element - has no immediate effect, + you need to call consolidate() to get results */ + void operator=(wxString& string); +}; + +/** This class allows rendering numbers. + +Use example : + +wxGLNumberRenderer glnumbers; +... +if(first_render) + glnumbers.consolidate(); + +glColor3f(0,0,0); // black numbers +glnumbers.bind(); +glnumbers.renderNumber( 3.141593f, x, y ); +*/ +class wxGLNumberRenderer : public wxGLString +{ + int* number_location; + int space_w; +public: + wxGLNumberRenderer(); + ~wxGLNumberRenderer(); + + /** inits the class to be ready to render. + The wxDC argument is only used to calculate text extents and will not be rendered on. */ + void consolidate(wxDC* dc); + + /** render this number at coordinates (x,y), where wxString s contains the string + representation of a number. Must be called after bind(). */ + void renderNumber(wxString s, int x, int y); + /** render this number at coordinates (x,y). Must be called after bind(). */ + void renderNumber(int i, int x, int y); + /** render this number at coordinates (x,y). Must be called after bind(). */ + void renderNumber(float f, int x, int y); +}; + +/** This class is useful to render a serie of strings that are usually rendered at the same time. +It behaves exactly like wxGLString but is more efficient. + + +Use example : + +wxGLStringArray my_messages(); +my_messages.addString("wxMac"); +my_messages.addString("wxGTK"); +my_messages.addString("wxMSW"); +... +if(first_render) + my_messages.consolidate(&dc); + +glColor3f(0,0,0); // black text +my_messages.bind(); +my_messages.get(0).render( x, y ); +my_messages.get(1).render( x, y + 25 ); +my_messages.get(2).render( x, y + 50 ); +*/ +class wxGLStringArray +{ + std::vector strings; + TextTexture* img; + wxFont font; +public: + /** constructs an empty array - add elements later using addString */ + wxGLStringArray(); + /** construct an array with 'strings_arg' elemnts in it */ + wxGLStringArray(wxString strings_arg[], int amount); + ~wxGLStringArray(); + + /** get a sub-element - useful mainly for rendering, e.g. my_array.get(0).render(x, y); */ + wxGLString& get(const int id); + + /** call just before render() - binds the OpenGL. If you render the same string many + times, or render from an array, bind only once, this will improve performance */ + void bind(); + + /** add a string to the list for next consolidate() - has no + immediate effect, you need to call consolidate() to get results */ + void addString(wxString string); + + /** set how to draw string for next consolidate() - has no immediate effect, + you need to call consolidate() to get results */ + void setFont(wxFont font); + + /** consolidates the current string info into a GL string. call this after + setting up strings, font and color (if necessary), and before rendering. + The wxDC argument is only used to calculate text extents and will not be rendered on. */ + void consolidate(wxDC* dc); +}; + + +#endif diff --git a/GdaConst.cpp b/GdaConst.cpp index 1b3b4b144..214635572 100644 --- a/GdaConst.cpp +++ b/GdaConst.cpp @@ -318,20 +318,23 @@ wxFont* GdaConst::extra_small_font = 0; wxFont* GdaConst::small_font = 0; wxFont* GdaConst::medium_font = 0; wxFont* GdaConst::large_font = 0; - -bool GdaConst::gda_create_csvt = false; -bool GdaConst::gda_enable_set_transparency_windows = false; -int GdaConst::default_display_decimals = 6; // move in preference -bool GdaConst::gda_use_gpu = false; + +bool GdaConst::gda_draw_map_labels = false; +int GdaConst::gda_map_label_font_size = 6; +bool GdaConst::gda_create_csvt = false; +bool GdaConst::gda_enable_set_transparency_windows = false; +int GdaConst::default_display_decimals = 6; // move in preference +double GdaConst::gda_autoweight_stop = 0.0001; // move in preference +bool GdaConst::gda_use_gpu = false; int GdaConst::gda_ui_language = 0; double GdaConst::gda_eigen_tol = 0.00000001; bool GdaConst::gda_set_cpu_cores = true; -int GdaConst::gda_cpu_cores = 8; +int GdaConst::gda_cpu_cores = 6; wxString GdaConst::gda_user_email = ""; uint64_t GdaConst::gda_user_seed = 123456789; -bool GdaConst::use_gda_user_seed = true; +bool GdaConst::use_gda_user_seed = true; int GdaConst::gdal_http_timeout = 5; -bool GdaConst::enable_high_dpi_support = false; +bool GdaConst::enable_high_dpi_support = true; bool GdaConst::show_csv_configure_in_merge = true; bool GdaConst::show_recent_sample_connect_ds_dialog = true; bool GdaConst::use_cross_hatching = false; @@ -346,32 +349,32 @@ bool GdaConst::disable_crash_detect = false; bool GdaConst::disable_auto_upgrade = false; int GdaConst::plot_transparency_highlighted = 255; int GdaConst::plot_transparency_unhighlighted = 50; -int GdaConst::gda_ogr_csv_header = 1; -wxString GdaConst::gda_ogr_csv_x_name = ""; +int GdaConst::gda_ogr_csv_header = 1; +wxString GdaConst::gda_ogr_csv_x_name = ""; wxString GdaConst::gda_ogr_csv_y_name = ""; wxString GdaConst::gda_display_datetime_format = ""; std::vector GdaConst::gda_datetime_formats(10); -wxString GdaConst::gda_datetime_formats_str = "%Y-%m-%d %H:%M:%S,%Y/%m/%d %H:%M:%S,%d.%m.%Y %H:%M:%S,%m/%d/%Y %H:%M:%S,%Y-%m-%d,%m/%d/%Y,%Y/%m/%d,%H:%M:%S,%H:%M,%Y/%m/%d %H:%M %p"; -wxString GdaConst::gda_basemap_sources = -"Carto.Light,https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}@2x.png" -"\nCarto.Dark,https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}@2x.png" -"\nCarto.Light(No Label),https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}@2x.png" -"\nCarto.Dark(No Label),https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}@2x.png" -"\nESRI.WorldStreetMap,https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}" -"\nESRI.WorldTopoMap,https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}" -"\nESRI.WorldTerrain,https://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}" -"\nESRI.Ocean,https://server.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer/tile/{z}/{y}/{x}" -"\nHERE.Day,http://{s}.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" -"\nHERE.Night,http://{s}.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.night/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" -"\nHERE.Hybrid,http://{s}.aerial.maps.api.here.com/maptile/2.1/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" -"\nHERE.Satellite,http://{s}.aerial.maps.api.here.com/maptile/2.1/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" -"\nOpenStreetMap.Mapnik,https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" -"\nOpenStreetMap.BlackAndWhite,https://tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png" -"\nStamen.Toner,https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}@2x.png" -"\nStamen.TonerLite,https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}@2x.png" -"\nStamen.Watercolor,https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg" -"\nOther (China).GaoDe,http://webst{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}" -"\nOther (China).GaoDe(Satellite),http://webst{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}" +wxString GdaConst::gda_datetime_formats_str = "%Y-%m-%d %H:%M:%S,%Y/%m/%d %H:%M:%S,%d.%m.%Y %H:%M:%S,%m/%d/%Y %H:%M:%S,%Y-%m-%d,%m/%d/%Y,%Y/%m/%d,%H:%M:%S,%H:%M,%Y/%m/%d %H:%M %p"; +wxString GdaConst::gda_basemap_sources = +"Carto.Light,https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}@2x.png" +"\nCarto.Dark,https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}@2x.png" +"\nCarto.Light(No Label),https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}@2x.png" +"\nCarto.Dark(No Label),https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}@2x.png" +"\nESRI.WorldStreetMap,https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}" +"\nESRI.WorldTopoMap,https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}" +"\nESRI.WorldTerrain,https://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/{z}/{y}/{x}" +"\nESRI.Ocean,https://server.arcgisonline.com/ArcGIS/rest/services/Ocean_Basemap/MapServer/tile/{z}/{y}/{x}" +"\nHERE.Day,http://{s}.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" +"\nHERE.Night,http://{s}.base.maps.api.here.com/maptile/2.1/maptile/newest/normal.night/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" +"\nHERE.Hybrid,http://{s}.aerial.maps.api.here.com/maptile/2.1/maptile/newest/hybrid.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" +"\nHERE.Satellite,http://{s}.aerial.maps.api.here.com/maptile/2.1/maptile/newest/satellite.day/{z}/{x}/{y}/256/png8?app_id=HERE_APP_ID&app_code=HERE_APP_CODE" +"\nOpenStreetMap.Mapnik,https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" +"\nOpenStreetMap.BlackAndWhite,https://tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png" +"\nStamen.Toner,https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}@2x.png" +"\nStamen.TonerLite,https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}@2x.png" +"\nStamen.Watercolor,https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.jpg" +"\nOther (China).GaoDe,http://webst{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}" +"\nOther (China).GaoDe(Satellite),http://webst{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}" ; const wxString GdaConst::gda_lbl_not_sig = _("Not Significant"); @@ -432,11 +435,14 @@ const wxColour GdaConst::map_default_outline_colour(0, 0, 0); const wxColour GdaConst::map_default_highlight_colour(255, 255, 0); // yellow // Connectivity Map -const wxSize GdaConst::conn_map_default_size(480, 350); -const wxColour GdaConst::conn_graph_outline_colour(55,55,55,100); -const wxColour GdaConst::conn_select_outline_colour(55,55,55,0); -const wxColour GdaConst::conn_neighbor_fill_colour(255,255,255,0); - +const wxSize GdaConst::conn_map_default_size(480, 350); +const wxColour GdaConst::conn_graph_outline_colour(55,55,55,100); +const wxColour GdaConst::conn_select_outline_colour(55,55,55,0); +const wxColour GdaConst::conn_neighbor_fill_colour(255,255,255,0); + +// Heat Map +const wxColour GdaConst::heatmap_fill_colour(0, 0, 0, 10); +const wxColour GdaConst::heatmap_outline_colour(255, 255, 255, 0); // HTML Tan const wxColour GdaConst::conn_map_default_fill_colour(210, 180, 140); const wxColour GdaConst::conn_map_default_outline_colour(0, 0, 0); @@ -487,7 +493,7 @@ const wxColour GdaConst::three_d_plot_default_highlight_colour(255, 255, 0); const wxColour GdaConst::three_d_plot_default_point_colour(255, 255, 255); // black const wxColour GdaConst::three_d_plot_default_background_colour(0, 0, 0); -const wxSize GdaConst::three_d_default_size(700, 500); +const wxSize GdaConst::three_d_default_size(820, 620); // Boxplot const wxSize GdaConst::boxplot_default_size(380, 500); @@ -581,7 +587,7 @@ void GdaConst::init() GdaConst::gda_datetime_formats[5] = "%m/%d/%Y"; GdaConst::gda_datetime_formats[6] = "%Y/%m/%d"; GdaConst::gda_datetime_formats[7] = "%H:%M:%S"; - GdaConst::gda_datetime_formats[8] = "%H:%M"; + GdaConst::gda_datetime_formats[8] = "%H:%M"; GdaConst::gda_datetime_formats[9] = "%Y/%m/%d %H:%M %p"; // GdaShape resources diff --git a/GdaConst.h b/GdaConst.h index 35195c656..69f45b457 100644 --- a/GdaConst.h +++ b/GdaConst.h @@ -241,6 +241,9 @@ class GdaConst { static const wxString gda_lbl_2sigma; // Preferences + static double gda_autoweight_stop; + static bool gda_draw_map_labels; + static int gda_map_label_font_size; static bool gda_create_csvt; static wxString gda_basemap_sources; static bool gda_use_gpu; @@ -288,11 +291,16 @@ class GdaConst { static const wxColour conn_map_default_fill_colour; static const wxColour conn_map_default_outline_colour; static const wxColour conn_map_default_highlight_colour; - + + // Graph Map static const wxColour conn_graph_outline_colour; static const wxColour conn_select_outline_colour; static const wxColour conn_neighbor_fill_colour; - + + // Heat Map + static const wxColour heatmap_fill_colour; + static const wxColour heatmap_outline_colour; + // Map Movie static const wxColour map_movie_default_fill_colour; static const wxColour map_movie_default_highlight_colour; diff --git a/GdaShape.cpp b/GdaShape.cpp index f122d0010..278fb0b1b 100644 --- a/GdaShape.cpp +++ b/GdaShape.cpp @@ -382,7 +382,7 @@ GdaShapeAttribs& GdaShapeAttribs::operator=(const GdaShapeAttribs& s) { } //////////////////////////////////////////////////////////////////////////////// -// +// GdaShape: Basic class for rendering shape // //////////////////////////////////////////////////////////////////////////////// @@ -479,7 +479,7 @@ int GdaShape::getYNudge() } //////////////////////////////////////////////////////////////////////////////// -// +// Help class for GdaShape // //////////////////////////////////////////////////////////////////////////////// void GdaShapeAlgs::partsToCount(const std::vector& parts, @@ -763,37 +763,50 @@ void GdaShapeAlgs::getBoundingBoxOrig(const GdaPolygon* p, double& xmin, } //////////////////////////////////////////////////////////////////////////////// -// +// GdaPoint: point (for rendering) // //////////////////////////////////////////////////////////////////////////////// GdaPoint::GdaPoint() -: radius(GdaConst::my_point_click_radius) +: radius(GdaConst::my_point_click_radius), adaptive_radius(false) { null_shape = true; } GdaPoint::GdaPoint(const GdaPoint& s) -: GdaShape(s), radius(GdaConst::my_point_click_radius) - +: GdaShape(s), radius(s.radius), adaptive_radius(false) { } GdaPoint::GdaPoint(wxRealPoint point_o_s) -: radius(GdaConst::my_point_click_radius) +: radius(GdaConst::my_point_click_radius), adaptive_radius(false) +{ + center = wxPoint((int) point_o_s.x, (int) point_o_s.y); + center_o = point_o_s; +} +GdaPoint::GdaPoint(wxRealPoint point_o_s, wxDouble radius) +: radius(radius), adaptive_radius(false) { center = wxPoint((int) point_o_s.x, (int) point_o_s.y); center_o = point_o_s; } GdaPoint::GdaPoint(double x_orig, double y_orig) -: radius(GdaConst::my_point_click_radius) - +: radius(GdaConst::my_point_click_radius), adaptive_radius(false) { center = wxPoint((int) x_orig, (int) y_orig); center_o = wxRealPoint(x_orig, y_orig); } +GdaPoint::GdaPoint(double x_orig, double y_orig, double radius_o) +: radius(GdaConst::my_point_click_radius), radius_o(radius_o) +{ + center = wxPoint((int) x_orig, (int) y_orig); + center_o = wxRealPoint(x_orig, y_orig); + + adaptive_radius = true; +} + void GdaPoint::Offset(double dx, double dy) { } @@ -842,6 +855,31 @@ void GdaPoint::applyScaleTrans(const GdaScaleTrans& A) { GdaShape::applyScaleTrans(A); // apply affine transform to base class //A.transform(center_o, ¢er); + + if (adaptive_radius) { + wxRealPoint center_o_offset(center_o); + center_o_offset.x += radius_o; + wxPoint center_offset; + A.transform(center_o_offset, ¢er_offset); + radius = center_offset.x - center.x; + } +} + +void GdaPoint::projectToBasemap(Gda::Basemap* basemap, double scale_factor) +{ + basemap->LatLngToXY(center_o.x, center_o.y, center.x, center.y); + if (scale_factor != 1) { + center.x = center.x * scale_factor; + center.y = center.y * scale_factor; + } + if (adaptive_radius) { + wxRealPoint center_o_offset(center_o); + center_o_offset.x += radius_o; + wxPoint center_offset; + basemap->LatLngToXY(center_o_offset.x, center_o_offset.y, + center_offset.x, center_offset.y); + radius = center_offset.x - center.x; + } } void GdaPoint::paintSelf(wxDC& dc) @@ -867,7 +905,7 @@ void GdaPoint::paintSelf(wxGraphicsContext* gc) } //////////////////////////////////////////////////////////////////////////////// -// +// GdaCircle: circle (for rendering) // //////////////////////////////////////////////////////////////////////////////// GdaCircle::GdaCircle() @@ -966,7 +1004,7 @@ void GdaCircle::paintSelf(wxGraphicsContext* gc) } //////////////////////////////////////////////////////////////////////////////// -// +// GdaRectangle: rectable (for rendering) // //////////////////////////////////////////////////////////////////////////////// GdaRectangle::GdaRectangle() @@ -1093,6 +1131,7 @@ void GdaRectangle::paintSelf(wxDC& dc) int y = upper_right.y+getYNudge(); int w = upper_right.x - lower_left.x; int h = lower_left.y - upper_right.y; + if (h==0) h = 1; dc.DrawRectangle(x,y,w,h); } @@ -1107,7 +1146,7 @@ void GdaRectangle::paintSelf(wxGraphicsContext* gc) } //////////////////////////////////////////////////////////////////////////////// -// +// GdaPolygon: polygon (for rendering) // //////////////////////////////////////////////////////////////////////////////// GdaPolygon::GdaPolygon() : points(0), points_o(0), count(0) @@ -2150,6 +2189,15 @@ bool GdaShapeText::pointWithin(const wxPoint& pt) return GdaShapeAlgs::pointInPolygon(pt, 5, bb_poly); } +void GdaShapeText::projectToBasemap(Gda::Basemap* basemap, double scale_factor) +{ + basemap->LatLngToXY(ref_pt_o.x, ref_pt_o.y, ref_pt.x, ref_pt.y); + if (scale_factor != 1) { + ref_pt.x = ref_pt.x * scale_factor; + ref_pt.y = ref_pt.y * scale_factor; + } +} + void GdaShapeText::paintSelf(wxDC& dc) { //LOG_MSG("Entering GdaShapeText::paintSelf"); @@ -2231,6 +2279,8 @@ void GdaShapeText::GetSize(wxDC& dc, int& w, int& h) void GdaShapeText::applyScaleTrans(const GdaScaleTrans& A) { + GdaShape::applyScaleTrans(A); // apply affine transform to base class + A.transform(ref_pt_o, &ref_pt); // adjust degs_rot_cc_from_horiz according to A.scale_x and A.scale_y // begin by calculating the unit vector that represents diff --git a/GdaShape.h b/GdaShape.h index 6e4537f5b..95ac06ba6 100644 --- a/GdaShape.h +++ b/GdaShape.h @@ -215,21 +215,25 @@ class GdaPoint: public GdaShape { public: int radius; - + double radius_o; + bool adaptive_radius; + GdaPoint(); // creates a null shape GdaPoint(const GdaPoint& s); GdaPoint(wxRealPoint point_o_s); + GdaPoint(wxRealPoint point_o_s, wxDouble radius); GdaPoint(double x_orig, double y_orig); + GdaPoint(double x_orig, double y_orig, double radius_o); virtual ~GdaPoint() {} virtual void Offset(double dx, double dy); virtual void Offset(int dx, int dy); - virtual GdaPoint* clone() { return new GdaPoint(*this); } virtual bool pointWithin(const wxPoint& pt); virtual bool regionIntersect(const wxRegion& r); virtual void applyScaleTrans(const GdaScaleTrans& A); + virtual void projectToBasemap(Gda::Basemap* basemap, double scale_factor = 1.0); virtual void paintSelf(wxDC& dc); virtual void paintSelf(wxGraphicsContext* gc); @@ -387,6 +391,7 @@ class GdaPolyLine: public GdaShape { //wxRegion region; int from; int to; + }; class GdaSpline: public GdaShape { @@ -485,6 +490,7 @@ class GdaShapeText: public GdaShape { virtual void applyScaleTrans(const GdaScaleTrans& A); virtual void paintSelf(wxDC& dc); virtual void paintSelf(wxGraphicsContext* gc); + virtual void projectToBasemap(Gda::Basemap* basemap, double scale_factor = 1); static wxPoint calcRefPoint(wxDC& dc, const wxString& text, const wxFont& font, @@ -497,7 +503,7 @@ class GdaShapeText: public GdaShape { void setText(wxString t) { text = t; } wxString text; wxFont font; - wxRealPoint ref_pt; + wxPoint ref_pt; HorizAlignment horiz_align; VertAlignment vert_align; bool hidden; diff --git a/GenColor.cpp b/GenColor.cpp new file mode 100644 index 000000000..0c0cb89a3 --- /dev/null +++ b/GenColor.cpp @@ -0,0 +1,711 @@ +#include +#include + + +#include "GenColor.h" + +#ifndef M_PI +#define M_PI 3.141592653589793238462643383279502884L +#endif +#ifndef SQR +#define SQR(x) ((x)*(x)) +#endif +#ifndef POW2 +#define POW2(x) SQR(x) +#endif +#ifndef POW3 +#define POW3(x) ((x)*(x)*(x)) +#endif +#ifndef POW4 +#define POW4(x) (POW2(x)*POW2(x)) +#endif +#ifndef POW7 +#define POW7(x) (POW3(x)*POW3(x)*(x)) +#endif +#ifndef DegToRad +#define DegToRad(x) ((x)*M_PI/180) +#endif +#ifndef RadToDeg +#define RadToDeg(x) ((x)/M_PI*180) +#endif + +#ifndef cbrt +#define cbrt(x) pow(x, 1.0/3.0) +#endif + +namespace ColorSpace { + Rgb::Rgb() {} + Rgb::Rgb(double r, double g, double b) : r(r), g(g), b(b) {} + void Rgb::Initialize(Rgb *color) { + RgbConverter::ToColorSpace(color, this); + } + void Rgb::ToRgb(Rgb *color) { + RgbConverter::ToColor(color, this); + } + void Rgb::Copy(IColorSpace *color) { + Rgb *rgb = static_cast(color); + rgb->r = r; + rgb->g = g; + rgb->b = b; + } + + + Xyz::Xyz() {} + Xyz::Xyz(double x, double y, double z) : x(x), y(y), z(z) {} + void Xyz::Initialize(Rgb *color) { + XyzConverter::ToColorSpace(color, this); + } + void Xyz::ToRgb(Rgb *color) { + XyzConverter::ToColor(color, this); + } + void Xyz::Copy(IColorSpace *color) { + Xyz *xyz = static_cast(color); + xyz->x = x; + xyz->y = y; + xyz->z = z; + } + + Hsl::Hsl() {} + Hsl::Hsl(double h, double s, double l) : h(h), s(s), l(l) {} + void Hsl::Initialize(Rgb *color) { + HslConverter::ToColorSpace(color, this); + } + void Hsl::ToRgb(Rgb *color) { + HslConverter::ToColor(color, this); + } + void Hsl::Copy(IColorSpace *color) { + Hsl *hsl = static_cast(color); + hsl->h = h; + hsl->s = s; + hsl->l = l; + } + + Lab::Lab() {} + Lab::Lab(double l, double a, double b) : l(l), a(a), b(b) {} + void Lab::Initialize(Rgb *color) { + LabConverter::ToColorSpace(color, this); + } + void Lab::ToRgb(Rgb *color) { + LabConverter::ToColor(color, this); + } + void Lab::Copy(IColorSpace *color) { + Lab *lab = static_cast(color); + lab->l = l; + lab->a = a; + lab->b = b; + } + + Lch::Lch() {} + Lch::Lch(double l, double c, double h) : l(l), c(c), h(h) {} + void Lch::Initialize(Rgb *color) { + LchConverter::ToColorSpace(color, this); + } + void Lch::ToRgb(Rgb *color) { + LchConverter::ToColor(color, this); + } + void Lch::Copy(IColorSpace *color) { + Lch *lch = static_cast(color); + lch->l = l; + lch->c = c; + lch->h = h; + } + + Luv::Luv() {} + Luv::Luv(double l, double u, double v) : l(l), u(u), v(v) {} + void Luv::Initialize(Rgb *color) { + LuvConverter::ToColorSpace(color, this); + } + void Luv::ToRgb(Rgb *color) { + LuvConverter::ToColor(color, this); + } + void Luv::Copy(IColorSpace *color) { + Luv *luv = static_cast(color); + luv->l = l; + luv->u = u; + luv->v = v; + } + + Yxy::Yxy() {} + Yxy::Yxy(double y1, double x, double y2) : y1(y1), x(x), y2(y2) {} + void Yxy::Initialize(Rgb *color) { + YxyConverter::ToColorSpace(color, this); + } + void Yxy::ToRgb(Rgb *color) { + YxyConverter::ToColor(color, this); + } + void Yxy::Copy(IColorSpace *color) { + Yxy *yxy = static_cast(color); + yxy->y1 = y1; + yxy->x = x; + yxy->y2 = y2; + } + + Cmy::Cmy() {} + Cmy::Cmy(double c, double m, double y) : c(c), m(m), y(y) {} + void Cmy::Initialize(Rgb *color) { + CmyConverter::ToColorSpace(color, this); + } + void Cmy::ToRgb(Rgb *color) { + CmyConverter::ToColor(color, this); + } + void Cmy::Copy(IColorSpace *color) { + Cmy *cmy = static_cast(color); + cmy->c = c; + cmy->m = m; + cmy->y = y; + } + + Cmyk::Cmyk() {} + Cmyk::Cmyk(double c, double m, double y, double k) : c(c), m(m), y(y), k(k) {} + void Cmyk::Initialize(Rgb *color) { + CmykConverter::ToColorSpace(color, this); + } + void Cmyk::ToRgb(Rgb *color) { + CmykConverter::ToColor(color, this); + } + void Cmyk::Copy(IColorSpace *color) { + Cmyk *cmyk = static_cast(color); + cmyk->c = c; + cmyk->m = m; + cmyk->y = y; + cmyk->k = k; + } + + Hsv::Hsv() {} + Hsv::Hsv(double h, double s, double v) : h(h), s(s), v(v) {} + void Hsv::Initialize(Rgb *color) { + HsvConverter::ToColorSpace(color, this); + } + void Hsv::ToRgb(Rgb *color) { + HsvConverter::ToColor(color, this); + } + void Hsv::Copy(IColorSpace *color) { + Hsv *hsv = static_cast(color); + hsv->h = h; + hsv->s = s; + hsv->v = v; + } + + Hsb::Hsb() {} + Hsb::Hsb(double h, double s, double b) : h(h), s(s), b(b) {} + void Hsb::Initialize(Rgb *color) { + HsbConverter::ToColorSpace(color, this); + } + void Hsb::ToRgb(Rgb *color) { + HsbConverter::ToColor(color, this); + } + void Hsb::Copy(IColorSpace *color) { + Hsb *hsb = static_cast(color); + hsb->h = h; + hsb->s = s; + hsb->b = b; + } + + HunterLab::HunterLab() {} + HunterLab::HunterLab(double l, double a, double b) : l(l), a(a), b(b) {} + void HunterLab::Initialize(Rgb *color) { + HunterLabConverter::ToColorSpace(color, this); + } + void HunterLab::ToRgb(Rgb *color) { + HunterLabConverter::ToColor(color, this); + } + void HunterLab::Copy(IColorSpace *color) { + HunterLab *lab = static_cast(color); + lab->l = l; + lab->a = a; + lab->b = b; + } + + double Hue_2_RGB(double v1, double v2, double vh) { + if (vh < 0) vh += 1; + if (vh > 1) vh -= 1; + if (6 * vh < 1) return v1 + (v2 - v1) * 6 * vh; + if (2 * vh < 1) return v2; + if (3 * vh < 2) return v1 + (v2 - v1)*(2.0 / 3.0 - vh) * 6; + return v1; + } + + + void RgbConverter::ToColorSpace(Rgb *color, Rgb *item) { + item->r = color->r; + item->g = color->g; + item->b = color->b; + } + void RgbConverter::ToColor(Rgb *color, Rgb *item) { + color->r = item->r; + color->g = item->g; + color->b = item->b; + } + + void XyzConverter::ToColorSpace(Rgb *color, Xyz *item) { + double r = color->r / 255.0; + double g = color->g / 255.0; + double b = color->b / 255.0; + + r = ((r > 0.04045) ? pow((r + 0.055) / 1.055, 2.4) : (r / 12.92)) * 100.0; + g = ((g > 0.04045) ? pow((g + 0.055) / 1.055, 2.4) : (g / 12.92)) * 100.0; + b = ((b > 0.04045) ? pow((b + 0.055) / 1.055, 2.4) : (b / 12.92)) * 100.0; + + item->x = r*0.4124564 + g*0.3575761 + b*0.1804375; + item->y = r*0.2126729 + g*0.7151522 + b*0.0721750; + item->z = r*0.0193339 + g*0.1191920 + b*0.9503041; + } + void XyzConverter::ToColor(Rgb *color, Xyz *item) { + double x = item->x / 100.0; + double y = item->y / 100.0; + double z = item->z / 100.0; + + double r = x * 3.2404542 + y * -1.5371385 + z * -0.4985314; + double g = x * -0.9692660 + y * 1.8760108 + z * 0.0415560; + double b = x * 0.0556434 + y * -0.2040259 + z * 1.0572252; + + r = ((r > 0.0031308) ? (1.055*pow(r, 1 / 2.4) - 0.055) : (12.92*r)) * 255.0; + g = ((g > 0.0031308) ? (1.055*pow(g, 1 / 2.4) - 0.055) : (12.92*g)) * 255.0; + b = ((b > 0.0031308) ? (1.055*pow(b, 1 / 2.4) - 0.055) : (12.92*b)) * 255.0; + + color->r = r; + color->g = g; + color->b = b; + } + const double XyzConverter::eps = 216.0 / 24389.0; + const double XyzConverter::kappa = 24389.0 / 27.0; + const Xyz XyzConverter::whiteReference(95.047, 100.000, 108.883); + + void HslConverter::ToColorSpace(Rgb *color, Hsl *item) { + double r = color->r / 255.0; + double g = color->g / 255.0; + double b = color->b / 255.0; + + double min = std::min(r, std::min(g, b)); + double max = std::max(r, std::max(g, b)); + double delta = max - min; + + item->l = (max + min) / 2; + if (delta == 0) + { + item->h = item->s = 0; + } + else { + if (item->l < 0.5) { + item->s = delta / (max + min) * 100; + } + else { + item->s = delta / (1 - std::abs(2 * item->l - 1)) * 100; + } + + if (r == max) { + item->h = (g - b) / delta; + } + else if (g == max) { + item->h = (b - r) / delta + 2; + } + else if (b == max) { + item->h = (r - g) / delta + 4; + } + item->h = fmod(60 * item->h + 360, 360); + } + item->l *= 100; + } + void HslConverter::ToColor(Rgb *color, Hsl *item) { + double h = item->h / 360; + double s = item->s / 100; + double l = item->l / 100; + + if (item->s == 0) { + color->r = color->g = color->b = item->l * 255; + } + else { + double temp1, temp2; + + temp2 = (l < 0.5) ? (l*(1 + s)) : (l + s - (s*l)); + temp1 = 2 * l - temp2; + + color->r = 255 * Hue_2_RGB(temp1, temp2, h + 1.0 / 3.0); + color->g = 255 * Hue_2_RGB(temp1, temp2, h); + color->b = 255 * Hue_2_RGB(temp1, temp2, h - 1.0 / 3.0); + } + } + + void LabConverter::ToColorSpace(Rgb *color, Lab *item) { + Xyz xyz; + + XyzConverter::ToColorSpace(color, &xyz); + + double x = xyz.x / 95.047; + double y = xyz.y / 100.00; + double z = xyz.z / 108.883; + + x = (x > 0.008856) ? cbrt(x) : (7.787 * x + 16.0 / 116.0); + y = (y > 0.008856) ? cbrt(y) : (7.787 * y + 16.0 / 116.0); + z = (z > 0.008856) ? cbrt(z) : (7.787 * z + 16.0 / 116.0); + + item->l = (116.0 * y) - 16; + item->a = 500 * (x - y); + item->b = 200 * (y - z); + } + void LabConverter::ToColor(Rgb *color, Lab *item) { + double y = (item->l + 16.0) / 116.0; + double x = item->a / 500.0 + y; + double z = y - item->b / 200.0; + + double x3 = POW3(x); + double y3 = POW3(y); + double z3 = POW3(z); + + x = ((x3 > 0.008856) ? x3 : ((x - 16.0 / 116.0) / 7.787)) * 95.047; + y = ((y3 > 0.008856) ? y3 : ((y - 16.0 / 116.0) / 7.787)) * 100.0; + z = ((z3 > 0.008856) ? z3 : ((z - 16.0 / 116.0) / 7.787)) * 108.883; + + Xyz xyz(x, y, z); + XyzConverter::ToColor(color, &xyz); + } + + void LchConverter::ToColorSpace(Rgb *color, Lch *item) { + Lab lab; + + LabConverter::ToColorSpace(color, &lab); + double l = lab.l; + double c = sqrt(lab.a*lab.a + lab.b*lab.b); + double h = atan2(lab.b, lab.a); + + h = h / M_PI * 180; + if (h < 0) { + h += 360; + } + else if (h >= 360) { + h -= 360; + } + + item->l = l; + item->c = c; + item->h = h; + } + void LchConverter::ToColor(Rgb *color, Lch *item) { + Lab lab; + + item->h = item->h * M_PI / 180; + + lab.l = item->l; + lab.a = cos(item->h)*item->c; + lab.b = sin(item->h)*item->c; + + LabConverter::ToColor(color, &lab); + } + + void LuvConverter::ToColorSpace(Rgb *color, Luv *item) { + const Xyz &white = XyzConverter::whiteReference; + Xyz xyz; + + XyzConverter::ToColorSpace(color, &xyz); + double y = xyz.y / white.y; + double temp = (xyz.x + 15 * xyz.y + 3 * xyz.z); + double tempr = (white.x + 15 * white.y + 3 * white.z); + + item->l = (y > XyzConverter::eps) ? (116 * cbrt(y) - 16) : (XyzConverter::kappa*y); + item->u = 52 * item->l * (((temp > 1e-3) ? (xyz.x / temp) : 0) - white.x / tempr); + item->v = 117 * item->l * (((temp > 1e-3) ? (xyz.y / temp) : 0) - white.y / tempr); + } + void LuvConverter::ToColor(Rgb *color, Luv *item) { + const Xyz &white = XyzConverter::whiteReference; + Xyz xyz; + + double y = (item->l > XyzConverter::eps*XyzConverter::kappa) ? POW3((item->l + 16) / 116) : (item->l / XyzConverter::kappa); + double tempr = white.x + 15 * white.y + 3 * white.z; + double up = 4 * white.x / tempr; + double vp = 9 * white.y / tempr; + + double a = 1. / 3. * (52 * item->l / (item->u + 13 * item->l*up) - 1); + double b = -5 * y; + double x = (y*(39 * item->l / (item->v + 13 * item->l*vp) - 5) - b) / (a + 1. / 3.); + double z = x*a + b; + + xyz.x = x * 100; + xyz.y = y * 100; + xyz.z = z * 100; + + XyzConverter::ToColor(color, &xyz); + } + + void YxyConverter::ToColorSpace(Rgb *color, Yxy *item) { + Xyz xyz; + + XyzConverter::ToColorSpace(color, &xyz); + double temp = xyz.x + xyz.y + xyz.z; + item->y1 = xyz.y; + item->x = (temp==0) ? 0 : (xyz.x / temp); + item->y2 = (temp==0) ? 0 : (xyz.y / temp); + } + void YxyConverter::ToColor(Rgb *color, Yxy *item) { + Xyz xyz; + + xyz.x = item->x*(item->y1 / item->y2); + xyz.y = item->y1; + xyz.z = (1 - item->x - item->y2)*(item->y1 / item->y2); + XyzConverter::ToColor(color, &xyz); + } + + void CmyConverter::ToColorSpace(Rgb *color, Cmy *item) { + item->c = 1 - color->r / 255; + item->m = 1 - color->g / 255; + item->y = 1 - color->b / 255; + } + void CmyConverter::ToColor(Rgb *color, Cmy *item) { + color->r = (1 - item->c) * 255; + color->g = (1 - item->m) * 255; + color->b = (1 - item->y) * 255; + } + + void CmykConverter::ToColorSpace(Rgb *color, Cmyk *item) { + Cmy cmy; + + CmyConverter::ToColorSpace(color, &cmy); + double k = 1.0; + k = std::min(k, cmy.c); + k = std::min(k, cmy.m); + k = std::min(k, cmy.y); + + item->k = k; + if (std::abs(item->k - 1) < 1e-3) { + item->c = 0; + item->m = 0; + item->y = 0; + } + else { + item->c = (cmy.c - k) / (1 - k); + item->m = (cmy.m - k) / (1 - k); + item->y = (cmy.y - k) / (1 - k); + } + } + void CmykConverter::ToColor(Rgb *color, Cmyk *item) { + Cmy cmy; + + cmy.c = item->c * (1 - item->k) + item->k; + cmy.m = item->m * (1 - item->k) + item->k; + cmy.y = item->y * (1 - item->k) + item->k; + CmyConverter::ToColor(color, &cmy); + } + + void HsvConverter::ToColorSpace(Rgb *color, Hsv *item) { + double r = color->r / 255.0; + double g = color->g / 255.0; + double b = color->b / 255.0; + + double min = std::min(r, std::min(g, b)); + double max = std::max(r, std::max(g, b)); + double delta = max - min; + + item->v = max; + item->s = (max > 1e-3) ? (delta / max) : 0; + + if (delta == 0) { + item->h = 0; + } + else { + if (r == max) { + item->h = (g - b) / delta; + } + else if (g == max) { + item->h = 2 + (b - r) / delta; + } + else if (b == max) { + item->h = 4 + (r - g) / delta; + } + + item->h *= 60; + item->h = fmod(item->h + 360, 360); + } + } + void HsvConverter::ToColor(Rgb *color, Hsv *item) { + int range = (int)floor(item->h / 60); + double c = item->v*item->s; + double x = c*(1 - std::abs(fmod(item->h / 60, 2) - 1)); + double m = item->v - c; + + switch (range) { + case 0: + color->r = (c + m) * 255; + color->g = (x + m) * 255; + color->b = m * 255; + break; + case 1: + color->r = (x + m) * 255; + color->g = (c + m) * 255; + color->b = m * 255; + break; + case 2: + color->r = m * 255; + color->g = (c + m) * 255; + color->b = (x + m) * 255; + break; + case 3: + color->r = m * 255; + color->g = (x + m) * 255; + color->b = (c + m) * 255; + break; + case 4: + color->r = (x + m) * 255; + color->g = m * 255; + color->b = (c + m) * 255; + break; + default: // case 5: + color->r = (c + m) * 255; + color->g = m * 255; + color->b = (x + m) * 255; + break; + } + } + + void HsbConverter::ToColorSpace(Rgb *color, Hsb *item) { + Hsv hsv; + + HsvConverter::ToColorSpace(color, &hsv); + item->h = hsv.h; + item->s = hsv.s; + item->b = hsv.v; + } + void HsbConverter::ToColor(Rgb *color, Hsb *item) { + Hsv hsv; + + hsv.h = item->h; + hsv.s = item->s; + hsv.v = item->b; + HsvConverter::ToColor(color, &hsv); + } + + void HunterLabConverter::ToColorSpace(Rgb *color, HunterLab *item) { + Xyz xyz; + + XyzConverter::ToColorSpace(color, &xyz); + item->l = 10.0*sqrt(xyz.y); + item->a = (xyz.y != 0) ? (17.5*(1.02*xyz.x - xyz.y) / sqrt(xyz.y)) : 0; + item->b = (xyz.y != 0) ? (7.0*(xyz.y - 0.847*xyz.z) / sqrt(xyz.y)) : 0; + } + void HunterLabConverter::ToColor(Rgb *color, HunterLab *item) { + double x = (item->a / 17.5) *(item->l / 10.0); + double y = item->l*item->l / 100; + double z = item->b / 7.0 * item->l / 10.0; + + Xyz xyz((x+y)/1.02, y, -(z-y)/0.847); + XyzConverter::ToColor(color, &xyz); + } + + Rgb* LerpColorLCH(Rgb &a, Rgb &b, float t) + { + Lch lch_a, lch_b; + a.To(&lch_a); + b.To(&lch_b); + + // L: ranges 0 no lightness 100 maximu lightness + // C: 0 center of the circle/unsaturated, 100 edge of the circle/saturated + // H: 0 degree red, 90 degree yellow, 180 green 270 blue 360 degree back to 0 + + Lch lch_c; + lch_c.l = lch_a.l + (lch_b.l - lch_a.l) * t; + lch_c.c = lch_a.c + (lch_b.c - lch_b.c) * t; + lch_c.h = lch_a.h + (lch_b.h - lch_b.h) * t; + + Rgb* c = new Rgb; + lch_c.To(c); + + return c; + } + + std::vector ColorSpectrumLCH(Rgb &a, Rgb &b, size_t n) + { + std::vector result(n); + + Lch lch_a, lch_b; + a.To(&lch_a); + b.To(&lch_b); + + // L: ranges 0 no lightness 100 maximu lightness + // C: 0 center of the circle/unsaturated, 100 edge of the circle/saturated + // H: 0 degree red, 90 degree yellow, 180 green 270 blue 360 degree back to 0 + + double l_itv = (lch_b.l - lch_a.l) / (n-1); + double c_itv = (lch_b.c - lch_a.c) / (n-1); + double h_itv = (lch_b.h - lch_a.h) / (n-1); + + for (size_t i=0; i(&result[i]); + } + + return result; + } + + std::vector ColorSpectrumLUV(Rgb &a, Rgb &b, size_t n) + { + std::vector result(n); + + Luv luv_a, luv_b; + a.To(&luv_a); + b.To(&luv_b); + + // L: ranges 0 no lightness 100 maximu lightness + // C: 0 center of the circle/unsaturated, 100 edge of the circle/saturated + // H: 0 degree red, 90 degree yellow, 180 green 270 blue 360 degree back to 0 + + double l_itv = (luv_b.l - luv_a.l) / (n-1); + double u_itv = (luv_b.u - luv_a.u) / (n-1); + double v_itv = (luv_b.v - luv_a.v) / (n-1); + + for (size_t i=0; i(&result[i]); + } + + return result; + } + + std::vector ColorSpectrumRgb(Rgb &a, Rgb &b, size_t n) + { + std::vector result(n); + + double r_itv = (b.r - a.r) / (n-1); + double g_itv = (b.g - a.g) / (n-1); + double b_itv = (b.b - a.b) / (n-1); + + for (size_t i=0; i ColorSpectrumHSV(Rgb &a, Rgb &b, size_t n) + { + std::vector result(n); + + Hsv hsv_a, hsv_b; + a.To(&hsv_a); + b.To(&hsv_b); + + double h_itv = (hsv_b.h - hsv_a.h) / (n-1); + double s_itv = (hsv_b.s - hsv_a.s) / (n-1); + double v_itv = (hsv_b.v - hsv_a.v) / (n-1); + + for (size_t i=0; i(&result[i]); + } + + return result; + } +} + + diff --git a/GenColor.h b/GenColor.h new file mode 100644 index 000000000..fef1e7f25 --- /dev/null +++ b/GenColor.h @@ -0,0 +1,285 @@ +#ifndef __GEODA_CENTER_GENCOLOR_H__ +#define __GEODA_CENTER_GENCOLOR_H__ + +#include +#include + +// source code from: https://github.com/berendeanicolae/ColorSpace + +namespace ColorSpace { + struct Rgb; + struct Xyz; + struct Hsl; + struct Lab; + struct Lch; + struct Luv; + struct Yxy; + struct Cmy; + struct Cmyk; + struct Hsv; + struct Hsb; + struct HunterLab; + + // conversion + template + struct IConverter { + static void ToColorSpace(Rgb *color, TColorSpace *item); + static void ToColor(Rgb *color, TColorSpace *item); + }; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Rgb *item); + static void ToColor(Rgb *color, Rgb *item); + }; + typedef IConverter RgbConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Xyz *item); + static void ToColor(Rgb *color, Xyz *item); + static const double eps; + static const double kappa; + static const Xyz whiteReference; + }; + typedef IConverter XyzConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Hsl *item); + static void ToColor(Rgb *color, Hsl *item); + }; + typedef IConverter HslConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Lab *item); + static void ToColor(Rgb *color, Lab *item); + }; + typedef IConverter LabConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Lch *item); + static void ToColor(Rgb *color, Lch *item); + }; + typedef IConverter LchConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Luv *item); + static void ToColor(Rgb *color, Luv *item); + }; + typedef IConverter LuvConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Yxy *item); + static void ToColor(Rgb *color, Yxy *item); + }; + typedef IConverter YxyConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Cmy *item); + static void ToColor(Rgb *color, Cmy *item); + }; + typedef IConverter CmyConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Cmyk *item); + static void ToColor(Rgb *color, Cmyk *item); + }; + typedef IConverter CmykConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Hsv *item); + static void ToColor(Rgb *color, Hsv *item); + }; + typedef IConverter HsvConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, Hsb *item); + static void ToColor(Rgb *color, Hsb *item); + }; + typedef IConverter HsbConverter; + + template <> + struct IConverter { + static void ToColorSpace(Rgb *color, HunterLab *item); + static void ToColor(Rgb *color, HunterLab *item); + }; + typedef IConverter HunterLabConverter; + + // conversion api + struct IColorSpace { + IColorSpace() {} + virtual ~IColorSpace() {} + + virtual void Initialize(Rgb *color) = 0; + virtual void ToRgb(Rgb *color) = 0; + virtual void Copy(IColorSpace *color) = 0; + + template + void To(TColorSpace *color); + }; + + + struct Rgb : public IColorSpace { + double r, g, b; + + Rgb(); + Rgb(double r, double g, double b); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Xyz : public IColorSpace { + double x, y, z; + + Xyz(); + Xyz(double x, double y, double z); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Hsl : public IColorSpace { + double h, s, l; + + Hsl(); + Hsl(double h, double s, double l); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Lab : public IColorSpace { + double l, a, b; + + Lab(); + Lab(double l, double a, double b); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Lch : public IColorSpace { + double l, c, h; + + Lch(); + Lch(double l, double c, double h); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Luv : public IColorSpace { + double l, u, v; + + Luv(); + Luv(double l, double u, double v); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Yxy : public IColorSpace { + double y1, x, y2; + + Yxy(); + Yxy(double y1, double x, double y2); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Cmy : public IColorSpace { + double c, m, y; + + Cmy(); + Cmy(double c, double m, double y); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Cmyk : public IColorSpace { + double c, m, y, k; + + Cmyk(); + Cmyk(double c, double m, double y, double k); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Hsv : public IColorSpace { + double h, s, v; + + Hsv(); + Hsv(double h, double s, double v); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct Hsb : public IColorSpace { + double h, s, b; + + Hsb(); + Hsb(double h, double s, double b); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + struct HunterLab : public IColorSpace { + double l, a, b; + + HunterLab(); + HunterLab(double l, double a, double b); + + virtual void Initialize(Rgb *color); + virtual void ToRgb(Rgb *color); + virtual void Copy(IColorSpace *color); + }; + + template + void IColorSpace::To(TColorSpace *color) { + Rgb rgb; + + if (typeid(*this) == typeid(*color)) { + this->Copy(color); + } + else { + this->ToRgb(&rgb); + IConverter::ToColorSpace(&rgb, color); + } + } + + Rgb* LerpColorLCH(Rgb &a, Rgb &b, float t); + + std::vector ColorSpectrumLCH(Rgb &a, Rgb &b, size_t n); + std::vector ColorSpectrumHSV(Rgb &a, Rgb &b, size_t n); + std::vector ColorSpectrumLUV(Rgb &a, Rgb &b, size_t n); + + std::vector ColorSpectrumRgb(Rgb &a, Rgb &b, size_t n); +} + +#endif diff --git a/GenGeomAlgs.cpp b/GenGeomAlgs.cpp index 3ce09b311..d17d006ac 100644 --- a/GenGeomAlgs.cpp +++ b/GenGeomAlgs.cpp @@ -279,7 +279,9 @@ double GenGeomAlgs::ComputeArea2D(int n, double *x, double *y) double nwx = GenGeomAlgs::findArea(n, y, z); double nwy = GenGeomAlgs::findArea(n, z, x); double nwz = GenGeomAlgs::findArea(n, x, y); - + + delete[] z; + // get length of the Newell normal double nlen = sqrt( nwx*nwx + nwy*nwy + nwz*nwz ); return nlen; // area of polygon = length of Newell normal diff --git a/GenUtils.cpp b/GenUtils.cpp index 95386e28d..866c64982 100644 --- a/GenUtils.cpp +++ b/GenUtils.cpp @@ -23,10 +23,13 @@ #include #include #include +#include + #include #include #include #include + #include "GdaConst.h" #include "GenUtils.h" #include "Explore/CatClassification.h" @@ -35,8 +38,8 @@ using namespace std; int StringUtils::utf8_strlen(const string& str) { - int c,i,ix,q; - for (q=0, i=0, ix=str.length(); i < ix; i++, q++) + int c,i,q; + for (q=0, i=0; i < str.length(); i++, q++) { c = (unsigned char) str[i]; if (c>=0 && c<=127) i+=0; @@ -212,7 +215,7 @@ unsigned long long Gda::DateToNumber(wxString s_date, wxRegEx& regex, vector 1; i--) - r *= i; + uint64_t r = 1; + for(size_t i = n-1; i > 1; i--) + r *= i; return r; } -double Gda::nChoosek(unsigned int n, unsigned int k) { +double Gda::combinatorial(unsigned int n, unsigned int k) { - double r = 1; - double s = 1; - int i; + uint64_t r = 1; + uint64_t s = 1; + + size_t i; int kk = k > n/2 ? k : n-k; for(i=n; i > kk; i--) r *= i; + for(i=(n-kk); i>0; i--) s *= i; - return r/s; + + return (double)r / s; } wxString Gda::CreateUUID(int nSize) @@ -551,7 +556,7 @@ wxString Gda::CreateUUID(int nSize) wxString letters = "abcdefghijklmnopqrstuvwxyz0123456789"; - srand (time(NULL)); + srand ((unsigned int)time(NULL)); wxString uid; while (uid.length() < nSize) { @@ -594,7 +599,7 @@ void HingeStats:: CalculateHingeStats(const std::vector& data) { - num_obs = data.size(); + num_obs = (int)data.size(); double N = num_obs; is_even_num_obs = (num_obs % 2) == 0; min_val = data[0].first; @@ -637,7 +642,7 @@ HingeStats:: CalculateHingeStats(const std::vector& data, const std::vector& data_undef) { - num_obs = data.size(); + num_obs = (int)data.size(); double N = 0.0; std::vector data_valid; @@ -717,7 +722,7 @@ CalculateHingeStats(const std::vector& data, // percentile(90, v) = 50, percentile(99, v) = 50 double Gda::percentile(double x, const std::vector& v) { - int N = v.size(); + int N = (int)v.size(); double Nd = (double) N; double p_0 = (100.0/Nd) * (1.0-0.5); double p_Nm1 = (100.0/Nd) * (Nd-0.5); @@ -758,7 +763,7 @@ double Gda::percentile(double x, const Gda::dbl_int_pair_vec_type& v, // Same assumptions as above double Gda::percentile(double x, const Gda::dbl_int_pair_vec_type& v) { - int N = v.size(); + int N = (int)v.size(); double Nd = (double) N; double p_0 = (100.0/Nd) * (1.0-0.5); double p_Nm1 = (100.0/Nd) * (Nd-0.5); @@ -839,7 +844,7 @@ void SampleStatistics::CalculateFromSample(const std::vector& data, } void SampleStatistics::CalculateFromSample(const std::vector& data) { - sample_size = data.size(); + sample_size = (int)data.size(); if (sample_size == 0) return; CalcMinMax(data, min, max); @@ -847,7 +852,7 @@ void SampleStatistics::CalculateFromSample(const std::vector& data) double n = sample_size; double sum_squares = 0; - for (int i=0, iend = data.size(); i& data_, const std::vector& undefs) { std::vector data; - for (int i=0, iend = data_.size(); i& data_, double n = sample_size; double sum_squares = 0; - for (int i=0, iend = data.size(); i& data) { double min = std::numeric_limits::max(); - for (int i=0, iend=data.size(); i& data) double SampleStatistics::CalcMax(const std::vector& data) { double max = -std::numeric_limits::max(); - for (int i=0, iend=data.size(); i max ) max = data[i]; } return max; @@ -940,7 +945,7 @@ void SampleStatistics::CalcMinMax(const std::vector& data, if (data.size() == 0) return; min = data[0]; max = data[0]; - for (int i=1, iend=data.size(); i max ) { @@ -954,18 +959,17 @@ double SampleStatistics::CalcMean(const std::vector& data) { if (data.size() == 0) return 0; double total = 0; - for (int i=0, iend=data.size(); i& data) +double SampleStatistics::CalcMean(const std::vector& data) { if (data.size() == 0) return 0; double total = 0; - for (int i=0, iend=data.size(); i& X, double meanX, double meanY, double varX, double varY) { - n = X.size(); + n = (int)X.size(); if (X.size() != Y.size() || X.size() < 2 ) return; double expectXY = 0; - for (int i=0, iend=X.size(); i& X, double SS_tot = varY*Y.size(); error_sum_squares = 0; // error_sum_squares = SS_err double err=0; - for (int i=0, iend=Y.size(); i& X, std_err_of_estimate = sqrt(std_err_of_estimate); std_err_of_beta = std_err_of_estimate/sqrt(X.size()*varX); double sum_x_squared = 0; - for (int i=0, iend=X.size(); i& X, } else { t_score_beta = 100; } - p_value_alpha = TScoreTo2SidedPValue(t_score_alpha, X.size()-2); - p_value_beta = TScoreTo2SidedPValue(t_score_beta, X.size()-2); + p_value_alpha = TScoreTo2SidedPValue(t_score_alpha, (int)X.size()-2); + p_value_beta = TScoreTo2SidedPValue(t_score_beta, (int)X.size()-2); valid_std_err = true; } @@ -1184,12 +1188,12 @@ void AxisScale::CalculateScale(double data_min_s, double data_max_s, tics.resize(ticks+1); tics_str.resize(ticks+1); } - for (int i=0, iend=tics.size(); i& data) std::sort(data.begin(), data.end()); - int n = data.size(); + int n = (int)data.size(); if (n % 2 == 1) return data[n/2]; return 0.5 * (data[n/2 -1] + data[n/2]); @@ -1358,11 +1360,35 @@ void GenUtils::DeviationFromMean(int nObs, double* data, std::vector& unde void GenUtils::DeviationFromMean(std::vector& data) { - if (data.size() == 0) return; + if (data.size() == 0) + return; double sum = 0.0; - for (int i=0, iend=data.size(); i& data) +{ + if (data.size() == 0) + return; + double median = Median(data); + for (int i=0; i& data, double medoid_val) +{ + if (data.size() == 0) + return; + for (int i=0; i& data, std::vector& undef) @@ -1370,18 +1396,86 @@ void GenUtils::DeviationFromMean(std::vector& data, std::vector& u if (data.size() == 0) return; double sum = 0.0; int n = 0; - for (int i=0, iend=data.size(); i& data) +{ + double min_val = DBL_MAX, max_val = DBL_MIN; + for (size_t i=0; i max_val) max_val = data[i]; + } + // divide each variable by the range + double range_val = max_val - min_val; + if (range_val != 0) { + for (size_t i=0; i& data, std::vector& undef) +{ + double min_val = DBL_MAX, max_val = DBL_MIN; + for (size_t i=0; i max_val) max_val = data[i]; + } + // divide each variable by the range + double range_val = max_val - min_val; + if (range_val != 0) { + for (size_t i=0; i& data) +{ + double min_val = DBL_MAX, max_val = DBL_MIN; + for (size_t i=0; i max_val) max_val = data[i]; + } + // subtract the min from each variable and then divide by the range + double range_val = max_val - min_val; + if (range_val != 0) { + for (size_t i=0; i& data, std::vector& undef) +{ + double min_val = DBL_MAX, max_val = DBL_MIN; + for (size_t i=0; i max_val) max_val = data[i]; + } + // subtract the min from each variable and then divide by the range + double range_val = max_val - min_val; + if (range_val != 0) { + for (size_t i=0; i& data) if (data.size() == 0) return; double sum = 0.0; double nn = data.size(); - for (int i=0, iend=data.size(); i& data, if (data.size() == 0) return; double sum = 0.0; double nValid = 0; - double nn = data.size(); - for (int i=0, iend=data.size(); i& x, + std::vector& Rank_X) +{ + size_t sz = x.size(); + + std::vector > ordered_X(sz); + for(size_t i = 0; i < sz; i++) { + ordered_X[i].first = x[i]; + ordered_X[i].second = i; + } + std::sort(ordered_X.begin(), ordered_X.end()); + + size_t rank = 1, n = 1, i = 0, j, idx; + + while (i < sz) { + j = i; + // get # of elements with euqal rank + while (j < sz -1 && ordered_X[j].first == ordered_X[j+1].first) { + j += 1; + } + n = j - i + 1; + + for (j=0; j GenUtils::rankify(const vector& x) +{ + size_t N = x.size(); + // Rank Vector + std::vector Rank_X(N); + + for(size_t i = 0; i < N; i++) { + int r = 1, s = 1; + + // Count no of smaller elements + // in 0 to i-1 + for(size_t j = 0; j < i; j++) { + if (x[j] < x[i] ) r++; + if (x[j] == x[i] ) s++; + } + + // Count no of smaller elements + // in i+1 to N-1 + for (size_t j = i+1; j < N; j++) { + if (x[j] < x[i] ) r++; + if (x[j] == x[i] ) s++; + } + + // Use Fractional Rank formula + // fractional_rank = r + (n-1)/2 + Rank_X[i] = r + (s-1) * 0.5; + } + + // Return Rank Vector + return Rank_X; +} + +double GenUtils::RankCorrelation(vector& x, vector& y) +{ + // Get ranks of vector X y + vector rank_x(x.size(), 0), rank_y(y.size(), 0); + boost::thread_group threadPool; + threadPool.add_thread(new boost::thread(&GenUtils::rankify_fast, x, boost::ref(rank_x))); + threadPool.add_thread(new boost::thread(&GenUtils::rankify_fast, y, boost::ref(rank_y))); + threadPool.join_all(); + + double spearmans_r = Correlation(rank_x, rank_y); + + return spearmans_r; +} + double GenUtils::Correlation(std::vector& x, std::vector& y) { - int nObs = x.size(); + int nObs = (int)x.size(); double sum_x = 0; double sum_y = 0; for (int i=0; i& x, std::vector& y) double GenUtils::Sum(std::vector& data) { double sum = 0; - int nObs = data.size(); + int nObs = (int)data.size(); for (int i=0; i& data) { - int nObs = data.size(); - if (nObs <= 1) return 0; + int nObs = (int)data.size(); + if (nObs <= 1) + return 0; GenUtils::DeviationFromMean(data); double ssum = 0.0; - for (int i=0, iend=nObs; i& data) +{ + int nObs = (int)data.size(); + if (nObs <= 1) + return 0; + GenUtils::DeviationFromMedian(data); + double ssum = 0.0; + for (int i=0; i& data) +{ + int nObs = (int)data.size(); + if (nObs <= 1) + return 0; + GenUtils::DeviationFromMedian(data); + double ssum = 0.0; + for (int i=0; i& data, double medoid_val) +{ + int nObs = (int)data.size(); + if (nObs <= 1) + return 0; + GenUtils::DeviationFromMedoid(data, medoid_val); + double ssum = 0.0; + for (int i=0; i& data, double medoid_val) +{ + int nObs = (int)data.size(); + if (nObs <= 1) + return 0; + GenUtils::DeviationFromMedoid(data, medoid_val); + double ssum = 0.0; + for (int i=0; i& data) { if (data.size() <= 1) return 0; GenUtils::DeviationFromMean(data); double ssum = 0.0; - for (int i=0, iend=data.size(); i& data) if (data.size() <= 1) return false; GenUtils::DeviationFromMean(data); double ssum = 0.0; - for (int i=0, iend=data.size(); i& data, std::vector& undef) { - int nObs = data.size(); + int nObs = (int)data.size(); if (nObs <= 1) return false; int nValid = 0; @@ -1718,7 +1946,7 @@ wxString GenUtils::SimplifyPath(const wxFileName& wd, const wxString& path) wxArrayString p_dirs = p.GetDirs(); wxArrayString wd_dirs = wd.GetDirs(); if (p_dirs.size() < wd_dirs.size()) return path; - for (int i=0, sz=wd_dirs.size(); i strings, bool cs) { using namespace std; - int n=strings.size(); + int n = (int)strings.size(); if (n == 0) return ""; vector strs(strings); if (!cs) for (int i=0; i strings, for (int i=0; i& a,const std::vector& b) return a.size() > b.size(); } +bool GenUtils::smaller_pair(const std::pair& a, + const std::pair& b) { + return a.second > b.second; +} + wxString GenUtils::WrapText(wxWindow *win, const wxString& text, int widthMax) { class HardBreakWrapper : public wxTextWrapper diff --git a/GenUtils.h b/GenUtils.h index ffae4b55d..b370cb145 100644 --- a/GenUtils.h +++ b/GenUtils.h @@ -133,9 +133,9 @@ namespace Gda { inline bool IsNaN(double x) { return x != x; } inline bool IsFinite(double x) { return x-x == 0; } - double factorial(unsigned int n); + uint64_t factorial(unsigned int n); - double nChoosek(unsigned int n, unsigned int r); + double combinatorial(unsigned int n, unsigned int r); wxString CreateUUID(int nSize); @@ -370,18 +370,34 @@ namespace GenUtils { void DeviationFromMean(int nObs, double* data); void DeviationFromMean(int nObs, double* data, vector& undef); - void DeviationFromMean(vector& data); void DeviationFromMean(std::vector& data, std::vector& undef); - + void DeviationFromMean(vector& data); + void DeviationFromMedian(vector& data); + void DeviationFromMedoid(vector& data, double medoid_val); + double Sum(vector& data); - double SumOfSquares(vector& data); double Median(std::vector& data); - + + double SumOfSquares(vector& data); + double SumOfSquaresMedian(vector& data); + double SumOfSquaresMedoid(vector& data, double medoid_val); + + double SumOfManhattanMedian(vector& data); + double SumOfManhattanMedoid(vector& data, double medoid_val); + bool StandardizeData(int nObs, double* data); bool StandardizeData(int nObs, double* data, vector& undef); bool StandardizeData(vector& data); bool StandardizeData(vector& data, vector& undef); - + + void RangeAdjust(std::vector& data); + void RangeAdjust(std::vector& data, std::vector& undef); + void RangeStandardize(std::vector& data); + void RangeStandardize(std::vector& data, std::vector& undef); + + std::vector rankify(const vector& x); + void rankify_fast(const vector& x, std::vector& Rank_X); + double RankCorrelation(vector& x, vector& y); double Correlation(vector& x, vector& y); double GetVariance(vector& data); wxString swapExtension(const wxString& fname, const wxString& ext); @@ -441,7 +457,10 @@ namespace GenUtils { wxString GetUserSamplesDir(); wxString GetBasemapDir(); wxString GetCachePath(); + bool less_vectors(const vector& a,const vector& b); + bool smaller_pair(const std::pair& a, + const std::pair& b); // Act like matlab's [Y,I] = SORT(X) // Input: diff --git a/GeneralWxUtils.cpp b/GeneralWxUtils.cpp index 51a2df9fd..55c346933 100644 --- a/GeneralWxUtils.cpp +++ b/GeneralWxUtils.cpp @@ -27,8 +27,9 @@ #include #include +#include "DialogTools/AddIdVariable.h" #include "GeneralWxUtils.h" - +#include "Project.h" //////////////////////////////////////////////////////////////////////// // // @@ -195,6 +196,19 @@ bool GeneralWxUtils::isMac106() return r; } +bool GeneralWxUtils::isMac1014plus() +{ + static bool r = (GetOsId() & wxOS_MAC ? true : false); + + int majorVsn = 0; + int minorVsn = 0; + wxGetOsVersion(&majorVsn, &minorVsn); + + r = r & (majorVsn > 10 || minorVsn >= 14); + + return r; +} + bool GeneralWxUtils::isWindows() { static bool r = (GetOsId() & wxOS_WINDOWS ? true : false); @@ -589,3 +603,140 @@ double TransparentSettingDialog::GetTransparency() { return transparency; } + +/////////////////////////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +CheckSpatialRefDialog::CheckSpatialRefDialog(wxWindow * parent, + const wxString& msg, + wxWindowID id, + const wxString & caption, + const wxPoint & position, + const wxSize & size, + long style) +: wxDialog(parent, id, caption, position, size, style) +{ + wxLogMessage("Open TransparentSettingDialog"); + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(topSizer); + + wxBoxSizer* boxSizer = new wxBoxSizer(wxVERTICAL); + topSizer->Add(boxSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 20); + + wxBitmap bmp = wxArtProvider::GetBitmap(wxART_WARNING); + wxStaticBitmap *warning_icon = new wxStaticBitmap(this, wxID_ANY, bmp); + wxStaticText* textctrl = new wxStaticText(this, wxID_ANY, msg); + + wxBoxSizer *msgbox = new wxBoxSizer(wxHORIZONTAL); + msgbox->Add(warning_icon, 0, wxRIGHT, 10); + msgbox->Add(textctrl, 1, wxEXPAND); + + cb = new wxCheckBox(this, wxID_ANY, _("Don't ask again")); + + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + wxButton *yes_btn = new wxButton(this, wxID_OK, _("Yes")); + wxButton *no_btn = new wxButton(this, wxID_CANCEL, _("No")); + hbox->Add(yes_btn, 1, wxALL, 5); + hbox->Add(no_btn, 1, wxALL, 5); + + boxSizer->Add(msgbox, 1, wxEXPAND | wxALL, 10); + boxSizer->Add(cb, 0, wxALIGN_CENTER | wxTOP, 20); + boxSizer->Add(hbox, 0, wxALIGN_CENTER | wxALL, 10); + + topSizer->Fit(this); + no_btn->SetDefault(); +} + +bool CheckSpatialRefDialog::IsCheckAgain() +{ + return !cb->GetValue(); +} +//////////////////////////////////////////////////////////////////////// +// +// +//////////////////////////////////////////////////////////////////////// + +SelectWeightsIdDialog::SelectWeightsIdDialog(wxWindow * parent, Project* project, + wxWindowID id, + const wxString & caption, + const wxPoint & position, + const wxSize & size, + long style) +: wxDialog(parent, id, caption, position, size, style), +project(project) +{ + wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); + this->SetSizer(topSizer); + + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + wxStaticText* textctrl = new wxStaticText(this, wxID_ANY, _("Select ID Variable")); + m_id_field = new wxChoice (this, wxID_ANY, wxDefaultPosition, wxSize(200, -1)); + InitVariableChoice(); // fill content for id dropdown list + wxButton* btn_add_id_var = new wxButton(this, wxID_ANY, _("Add ID Variable...")); + + hbox->Add(textctrl, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5); + hbox->Add(m_id_field, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 15); + hbox->Add(btn_add_id_var, 0, wxALIGN_CENTER_VERTICAL); + + wxBoxSizer *btnbox = new wxBoxSizer(wxHORIZONTAL); + wxButton *yes_btn = new wxButton(this, wxID_OK, _("OK")); + wxButton *no_btn = new wxButton(this, wxID_CANCEL, _("Cancel")); + btnbox->Add(yes_btn, 1, wxALL, 5); + btnbox->Add(no_btn, 1, wxALL, 5); + + topSizer->Add(hbox, 0, wxEXPAND | wxALL, 20); + topSizer->Add(btnbox, 0, wxALIGN_CENTER | wxALL, 10); + topSizer->Fit(this); + + //events + btn_add_id_var->Bind(wxEVT_BUTTON, &SelectWeightsIdDialog::OnAddIDVariable, this); + m_id_field->Bind(wxEVT_CHOICE, &SelectWeightsIdDialog::OnIdVariableSelected, this); +} + +wxString SelectWeightsIdDialog::GetIDVariable() +{ + return m_id_field->GetStringSelection(); +} + +void SelectWeightsIdDialog::OnAddIDVariable(wxCommandEvent& evt) +{ + TableInterface* table_int = project->GetTableInt(); + AddIdVariable dlg(table_int, this); + if (dlg.ShowModal() == wxID_OK) { + // We know that the new id has been added to the the table in memory + InitVariableChoice(); + m_id_field->SetSelection(0); + OnIdVariableSelected(evt); + } +} + +void SelectWeightsIdDialog::InitVariableChoice() +{ + TableInterface* table_int = project->GetTableInt(); + col_id_map.clear(); + table_int->FillColIdMap(col_id_map); + + m_id_field->Clear(); + for (int i=0, iend=col_id_map.size(); iGetColType(col) == GdaConst::long64_type || + table_int->GetColType(col) == GdaConst::string_type) { + if (!table_int->IsColTimeVariant(col)) { + m_id_field->Append(table_int->GetColName(col)); + } + } + } + m_id_field->SetSelection(-1); +} + +void SelectWeightsIdDialog::OnIdVariableSelected(wxCommandEvent& evt) +{ + if (m_id_field->GetSelection() < 0) return; + + wxString sel_var = m_id_field->GetStringSelection(); + TableInterface* table_int = project->GetTableInt(); + if (table_int->CheckID(sel_var) == false) { + m_id_field->SetSelection(-1); + } +} diff --git a/GeneralWxUtils.h b/GeneralWxUtils.h index 90577c78e..c1c33875c 100644 --- a/GeneralWxUtils.h +++ b/GeneralWxUtils.h @@ -28,12 +28,15 @@ #include "DialogTools/VariableSettingsDlg.h" +class Project; + class GeneralWxUtils { public: static wxOperatingSystemId GetOsId(); static wxString LogOsId(); static bool isMac(); static bool isMac106(); + static bool isMac1014plus(); static bool isWindows(); static bool isUnix(); static bool isXP(); @@ -66,7 +69,7 @@ class SimpleReportTextCtrl : public wxTextCtrl public: SimpleReportTextCtrl(wxWindow* parent, wxWindowID id, const wxString& value = "", const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_RICH2, const wxValidator& validator = wxDefaultValidator, + long style = wxTE_MULTILINE | wxTE_DONTWRAP | wxTE_READONLY | wxTE_RICH | wxTE_RICH2, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr) : wxTextCtrl(parent, id, value, pos, size, style, validator, name) { @@ -114,4 +117,52 @@ class TransparentSettingDialog: public wxDialog double GetTransparency(); }; +// Prompt user that spatial objects are not projected or with unknown projection +// The distance computation could be wrong. Ask user to continue proceeding or +// quit the application +class CheckSpatialRefDialog : public wxDialog +{ + wxCheckBox *cb; + +public: + CheckSpatialRefDialog(wxWindow * parent, const wxString& msg, + wxWindowID id=wxID_ANY, + const wxString & caption="Warning", + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE ); + virtual ~CheckSpatialRefDialog() {} + + bool IsCheckAgain(); +}; + +// Prompt user to select an ID variable for weights creation +// Allow user to "Add ID variable" in table +class SelectWeightsIdDialog : public wxDialog +{ + Project* project; + wxChoice * m_id_field; + + // col_id_map[i] is a map from the i'th numeric item in the + // fields drop-down to the actual col_id_map. Items + // in the fields dropdown are in the order displayed + // in wxGrid + std::vector col_id_map; + +public: + SelectWeightsIdDialog(wxWindow * parent, Project* project, + wxWindowID id=wxID_ANY, + const wxString & caption="Select ID Variable Dialog", + const wxPoint & pos = wxDefaultPosition, + const wxSize & size = wxDefaultSize, + long style = wxDEFAULT_DIALOG_STYLE ); + virtual ~SelectWeightsIdDialog() {} + + wxString GetIDVariable(); + +protected: + void InitVariableChoice(); + void OnIdVariableSelected(wxCommandEvent& evt); + void OnAddIDVariable(wxCommandEvent& evt); +}; #endif diff --git a/GeoDa.cpp b/GeoDa.cpp index 13b7aa367..3120827af 100644 --- a/GeoDa.cpp +++ b/GeoDa.cpp @@ -79,6 +79,8 @@ #include "DataViewer/TableState.h" #include "DataViewer/TimeState.h" #include "DialogTools/DissolveDlg.h" +#include "DialogTools/CreateGridDlg.h" +#include "DialogTools/Bnd2ShpDlg.h" #include "DialogTools/CreatingWeightDlg.h" #include "DialogTools/CatClassifDlg.h" #include "DialogTools/PCPDlg.h" @@ -114,8 +116,12 @@ #include "DialogTools/SaveToTableDlg.h" #include "DialogTools/KMeansDlg.h" #include "DialogTools/MaxpDlg.h" +#include "DialogTools/AZPDlg.h" +#include "DialogTools/tSNEDlg.h" #include "DialogTools/SpectralClusteringDlg.h" #include "DialogTools/HClusterDlg.h" +#include "DialogTools/SCHCDlg.h" +#include "DialogTools/DBScanDlg.h" #include "DialogTools/HDBScanDlg.h" #include "DialogTools/CreateGridDlg.h" #include "DialogTools/RedcapDlg.h" @@ -126,6 +132,9 @@ #include "DialogTools/PreferenceDlg.h" #include "DialogTools/SpatialJoinDlg.h" #include "DialogTools/MultiVarSettingsDlg.h" +#include "DialogTools/nbrMatchDlg.h" +#include "DialogTools/quantileLisaDlg.h" +#include "DialogTools/MultiQuantileLisaDlg.h" #include "Explore/CatClassification.h" #include "Explore/CovSpView.h" #include "Explore/CorrelParamsDlg.h" @@ -143,6 +152,7 @@ #include "Explore/ConnectivityHistView.h" #include "Explore/ConnectivityMapView.h" #include "Explore/ConditionalHistogramView.h" +#include "Explore/ConditionalBoxPlotView.h" #include "Explore/CartogramNewView.h" #include "Explore/GStatCoordinator.h" #include "Explore/MLJCMapNewView.h" @@ -158,6 +168,7 @@ #include "Explore/Basemap.h" #include "Explore/ColocationMapView.h" #include "Explore/GroupingMapView.h" +#include "Explore/DistancePlotView.h" #include "Regression/DiagnosticReport.h" #include "ShapeOperations/CsvFileUtils.h" #include "ShapeOperations/WeightsManager.h" @@ -166,6 +177,7 @@ #include "VarCalc/CalcHelp.h" #include "Algorithms/redcap.h" #include "Algorithms/fastcluster.h" +#include "Algorithms/distanceplot.h" #include "wxTranslationHelper.h" #include "GdaException.h" #include "FramesManager.h" @@ -403,7 +415,7 @@ bool GdaApp::OnInit(void) fnames.Add(proj_fname); MacOpenFiles(fnames); } else { - if (os_id != "\nos: 1-10-14") { + if (GeneralWxUtils::isMac1014plus() == false) { wxCommandEvent ev(wxEVT_COMMAND_MENU_SELECTED, XRCID("ID_NEW_PROJECT")); frame->GetEventHandler()->ProcessEvent(ev); } @@ -569,7 +581,8 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), proj_open); GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), proj_open); - + GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_SHOW_CONDITIONAL_BOX_VIEW"), proj_open); + EnableTool(XRCID("ID_CLUSTERING_CHOICES"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_CLUSTERING_MENU"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_PCA"), shp_proj); @@ -577,12 +590,15 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_KMEDIANS"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_KMEDOIDS"), proj_open); GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_TOOLS_DATA_HCLUSTER"), proj_open); + GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_TOOLS_DATA_DBSCAN"), proj_open); GeneralWxUtils::EnableMenuItem(mb,XRCID("ID_TOOLS_DATA_HDBSCAN"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_MAXP"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_SKATER"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_SCHC"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_SPECTRAL"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_REDCAP"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_MDS"), proj_open); + GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_TOOLS_DATA_TSNE"), proj_open); EnableTool(XRCID("IDM_3DP"), proj_open); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_3DP"), proj_open); @@ -619,6 +635,8 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MORAN_EBRATE"), proj_open); EnableTool(XRCID("IDM_UNI_LISA"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_LISA"), shp_proj); + EnableTool(XRCID("IDM_UNI_MEDIAN_LISA"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_MEDIAN_LISA"), shp_proj); EnableTool(XRCID("IDM_MULTI_LISA"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MULTI_LISA"), shp_proj); EnableTool(XRCID("IDM_DIFF_LISA"), shp_proj); @@ -636,14 +654,21 @@ void GdaFrame::UpdateToolbarAndMenus() EnableTool(XRCID("IDM_MUL_LJC"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MUL_LJC"), shp_proj); - EnableTool(XRCID("IDM_UNI_LOCAL_GEARY"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_LOCAL_GEARY"), shp_proj); EnableTool(XRCID("IDM_MUL_LOCAL_GEARY"), shp_proj); GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MUL_LOCAL_GEARY"), shp_proj); + + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_QUANTILE_LISA"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_MUL_QUANTILE_LISA"), shp_proj); + + EnableTool(XRCID("IDM_UNI_LOCAL_MATCH"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_UNI_LOCAL_MATCH"), shp_proj); - EnableTool(XRCID("IDM_CORRELOGRAM"), shp_proj); + EnableTool(XRCID("ID_CORRELO_MENU"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_CORRELOGRAM"), shp_proj); + GeneralWxUtils::EnableMenuItem(mb, XRCID("IDM_DISTANCE_PLOT"), shp_proj); GeneralWxUtils::EnableMenuAll(mb, _("Map"), shp_proj); EnableTool(XRCID("ID_MAP_CHOICES"), shp_proj); @@ -653,7 +678,6 @@ void GdaFrame::UpdateToolbarAndMenus() GeneralWxUtils::EnableMenuItem(mb, XRCID("ID_REGRESSION_CLASSIC"), proj_open); EnableTool(XRCID("ID_REGRESSION_CLASSIC"), proj_open); - EnableTool(XRCID("ID_PUBLISH"), proj_open && project_p->GetDatasourceType()==GdaConst::ds_cartodb); //Empty out the Options menu: wxMenu* optMenu=wxXmlResource::Get()->LoadMenu("ID_DEFAULT_MENU_OPTIONS"); @@ -1638,6 +1662,7 @@ void GdaFrame::OnChangeMapTransparency(wxCommandEvent& event) if (f) f->OnChangeMapTransparency(); } + void GdaFrame::OnCleanBasemap(wxCommandEvent& event) { wxLogMessage("Click GdaFrame::OnCleanBasemap"); @@ -1908,15 +1933,6 @@ void GdaFrame::OnToolsDataMaxP(wxCommandEvent& WXUNUSED(event) ) Project* p = GetProject(); if (!p) return; - std::vector weights_ids; - WeightsManInterface* w_man_int = p->GetWManInt(); - w_man_int->GetIds(weights_ids); - if (weights_ids.size()==0) { - wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); - dlg.ShowModal(); - return; - } - FramesManager* fm = p->GetFramesManager(); std::list observers(fm->getCopyObservers()); std::list::iterator it; @@ -1933,19 +1949,31 @@ void GdaFrame::OnToolsDataMaxP(wxCommandEvent& WXUNUSED(event) ) dlg->Show(true); } -void GdaFrame::OnToolsDataSkater(wxCommandEvent& WXUNUSED(event) ) +void GdaFrame::OnToolsDataAZP(wxCommandEvent& WXUNUSED(event) ) { Project* p = GetProject(); if (!p) return; - - std::vector weights_ids; - WeightsManInterface* w_man_int = p->GetWManInt(); - w_man_int->GetIds(weights_ids); - if (weights_ids.size()==0) { - wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); - dlg.ShowModal(); - return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (AZPDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } } + + AZPDlg* dlg = new AZPDlg(this, p); + dlg->Show(true); +} + +void GdaFrame::OnToolsDataSkater(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; FramesManager* fm = p->GetFramesManager(); std::list observers(fm->getCopyObservers()); @@ -1963,20 +1991,32 @@ void GdaFrame::OnToolsDataSkater(wxCommandEvent& WXUNUSED(event) ) dlg->Show(true); } -void GdaFrame::OnToolsDataRedcap(wxCommandEvent& WXUNUSED(event) ) +void GdaFrame::OnToolsDataSCHC(wxCommandEvent& WXUNUSED(event) ) { Project* p = GetProject(); if (!p) return; - - std::vector weights_ids; - WeightsManInterface* w_man_int = p->GetWManInt(); - w_man_int->GetIds(weights_ids); - if (weights_ids.size()==0) { - wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); - dlg.ShowModal(); - return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (SCHCDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } } - + + SCHCDlg* dlg = new SCHCDlg(this, p); + dlg->Show(true); +} + +void GdaFrame::OnToolsDataRedcap(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + FramesManager* fm = p->GetFramesManager(); std::list observers(fm->getCopyObservers()); std::list::iterator it; @@ -2014,6 +2054,27 @@ void GdaFrame::OnToolsDataMDS(wxCommandEvent& WXUNUSED(event) ) dlg->Show(true); } +void GdaFrame::OnToolsDataTSNE(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (TSNEDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + TSNEDlg* dlg = new TSNEDlg(this, p); + dlg->Show(true); +} + void GdaFrame::OnToolsDataSpectral(wxCommandEvent& WXUNUSED(event) ) { Project* p = GetProject(); @@ -2044,7 +2105,9 @@ void GdaFrame::OnToolsDataHCluster(wxCommandEvent& WXUNUSED(event) ) std::list observers(fm->getCopyObservers()); std::list::iterator it; for (it=observers.begin(); it != observers.end(); ++it) { - if (HClusterDlg* w = dynamic_cast(*it)) { + HClusterDlg* w = dynamic_cast(*it); + SCHCDlg* w1 = dynamic_cast(*it); + if (w && !w1) { w->Show(true); w->Maximize(false); w->Raise(); @@ -2056,6 +2119,27 @@ void GdaFrame::OnToolsDataHCluster(wxCommandEvent& WXUNUSED(event) ) dlg->Show(true); } +void GdaFrame::OnToolsDataDBScan(wxCommandEvent& WXUNUSED(event) ) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (DBScanDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + DBScanDlg* dlg = new DBScanDlg(this, p); + dlg->Show(true); +} + void GdaFrame::OnToolsDataHDBScan(wxCommandEvent& WXUNUSED(event) ) { Project* p = GetProject(); @@ -2093,7 +2177,7 @@ void GdaFrame::OnToolsWeightsManager(wxCommandEvent& WXUNUSED(event) ) return; } } - + // memory managed by wx WeightsManFrame* f = new WeightsManFrame(this, p); } @@ -2122,6 +2206,7 @@ void GdaFrame::OnConnectivityHistView(wxCommandEvent& event ) { boost::uuids::uuid id = GetWeightsId(); if (id.is_nil()) return; + // memory managed by wx ConnectivityHistFrame* f = new ConnectivityHistFrame(this, project_p, id); } @@ -2130,6 +2215,7 @@ void GdaFrame::OnConnectivityMapView(wxCommandEvent& event ) boost::uuids::uuid id = GetWeightsId("Choose Weights for Connectivity Map"); if (id.is_nil()) return; if (project_p->isTableOnly) return; + // memory managed by wx ConnectivityMapFrame* f = new ConnectivityMapFrame(this, project_p, id, wxDefaultPosition, @@ -2189,7 +2275,6 @@ void GdaFrame::OnMapChoices(wxCommandEvent& event) } } -#include "DialogTools/CreateGridDlg.h" void GdaFrame::OnShapePolygonsFromGrid(wxCommandEvent& WXUNUSED(event) ) { wxLogMessage("Open CreateGridDlg"); @@ -2198,6 +2283,7 @@ void GdaFrame::OnShapePolygonsFromGrid(wxCommandEvent& WXUNUSED(event) ) while (node) { wxWindow* win = node->GetData(); if (CreateGridDlg* w = dynamic_cast(win)) { + w->Update(); w->Show(true); w->Maximize(false); w->Raise(); @@ -2206,11 +2292,11 @@ void GdaFrame::OnShapePolygonsFromGrid(wxCommandEvent& WXUNUSED(event) ) node = node->GetNext(); } - CreateGridDlg* dlg = new CreateGridDlg(this); + CreateGridDlg* dlg = new CreateGridDlg(this, GetProject()); dlg->Show(true); } -#include "DialogTools/Bnd2ShpDlg.h" + void GdaFrame::OnShapePolygonsFromBoundary(wxCommandEvent& WXUNUSED(event) ) { wxLogMessage("Open Bnd2ShpDlg"); @@ -2308,7 +2394,7 @@ void GdaFrame::OnShowCatClassif(wxCommandEvent& event) return; } } - + // memory managed by wx CatClassifFrame* dlg = new CatClassifFrame(this, project_p, false, true); } @@ -2622,7 +2708,7 @@ void GdaFrame::OnGroupingMap(wxCommandEvent& event) if (project_p->IsTableOnlyProject()) { wxMessageDialog dlg (this, - _("Hierachical Map does not work with Table only datasource."), + _("Hierarchical Map does not work with Table only datasource."), _("Info"), wxOK | wxICON_INFORMATION); dlg.ShowModal(); return; @@ -2877,15 +2963,18 @@ void GdaFrame::OnCondPlotChoices(wxCommandEvent& WXUNUSED(event)) bool proj_open = (p != 0); bool shp_proj = proj_open && !p->IsTableOnlyProject(); - GeneralWxUtils::EnableMenuItem(popupMenu, - XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), - shp_proj); - GeneralWxUtils::EnableMenuItem(popupMenu, - XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), - proj_open); - GeneralWxUtils::EnableMenuItem(popupMenu, - XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), - proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), + shp_proj); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), + proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), + proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu, + XRCID("ID_SHOW_CONDITIONAL_BOX_VIEW"), + proj_open); PopupMenu(popupMenu, wxDefaultPosition); } } @@ -2907,12 +2996,16 @@ void GdaFrame::OnClusteringChoices(wxCommandEvent& WXUNUSED(event)) GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_KMEDIANS"), proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_KMEDOIDS"), proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_HCLUSTER"),proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_DBSCAN"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_HDBSCAN"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_SPECTRAL"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_MAXP"),proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_AZP"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_SKATER"),proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_SCHC"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_REDCAP"),proj_open); GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_MDS"),proj_open); + GeneralWxUtils::EnableMenuItem(popupMenu,XRCID("ID_TOOLS_DATA_TSNE"),proj_open); PopupMenu(popupMenu, wxDefaultPosition); } @@ -2963,6 +3056,28 @@ void GdaFrame::OnShowConditionalHistView(wxCommandEvent& WXUNUSED(event)) GdaConst::cond_view_default_size); } +void GdaFrame::OnShowConditionalBoxView(wxCommandEvent& WXUNUSED(event)) +{ + Project* p = GetProject(); + if (!p) return; + + int style = VariableSettingsDlg::ALLOW_STRING_IN_FIRST | VariableSettingsDlg::ALLOW_STRING_IN_SECOND | VariableSettingsDlg::ALLOW_EMPTY_IN_FIRST | VariableSettingsDlg::ALLOW_EMPTY_IN_SECOND; + if (p->GetTableInt()->IsTimeVariant()) style = style | VariableSettingsDlg::SHOW_TIME; + + VariableSettingsDlg dlg(project_p, VariableSettingsDlg::trivariate, style, + _("Conditional Box Plot Variables"), + _("Horizontal Cells"), + _("Vertical Cells"), + _("Box Plot Variable")); + if (dlg.ShowModal() != wxID_OK) return; + + ConditionalBoxPlotFrame* subframe = + new ConditionalBoxPlotFrame(GdaFrame::gda_frame, project_p, + dlg.var_info, dlg.col_ids, + _("Conditional Box Plot"), wxDefaultPosition, + GdaConst::cond_view_default_size); +} + void GdaFrame::OnShowConditionalScatterView(wxCommandEvent& WXUNUSED(event)) { Project* p = GetProject(); @@ -2979,7 +3094,7 @@ void GdaFrame::OnShowConditionalScatterView(wxCommandEvent& WXUNUSED(event)) _("Dependent Var (y-axis)")); if (dlg.ShowModal() != wxID_OK) return; - + // memory managed by wx ConditionalScatterPlotFrame* subframe = new ConditionalScatterPlotFrame(GdaFrame::gda_frame, project_p, dlg.var_info, dlg.col_ids, @@ -2999,7 +3114,7 @@ void GdaFrame::OnShowCartogramNewView(wxCommandEvent& WXUNUSED(event) ) true, false); // set second var from first if (dlg.ShowModal() != wxID_OK) return; - + // memory managed by wx CartogramNewFrame* subframe = new CartogramNewFrame(GdaFrame::gda_frame, project_p, dlg.var_info, dlg.col_ids, @@ -3097,7 +3212,7 @@ void GdaFrame::OnExploreHist(wxCommandEvent& WXUNUSED(event)) show_str_var); if (VS.ShowModal() != wxID_OK) return; - + // memory managed by wx HistogramFrame* f = new HistogramFrame(GdaFrame::gda_frame, project_p, VS.var_info, VS.col_ids, _("Histogram"), @@ -3211,6 +3326,9 @@ void GdaFrame::OnExplorePCP(wxCommandEvent& WXUNUSED(event)) void GdaFrame::OnExplore3DP(wxCommandEvent& WXUNUSED(event)) { + //MyFrame* subframe = new MyFrame("rwar"); + //subframe->Show(); + Project* p = GetProject(); if (!p) return; @@ -3222,8 +3340,9 @@ void GdaFrame::OnExplore3DP(wxCommandEvent& WXUNUSED(event)) C3DPlotFrame *subframe = new C3DPlotFrame(GdaFrame::gda_frame, p, dlg.var_info, dlg.col_ids, - _("3D Plot"), wxDefaultPosition, - GdaConst::three_d_default_size, + _("3D Plot"), std::vector(), + std::vector >(), + wxDefaultPosition, GdaConst::three_d_default_size, wxDEFAULT_FRAME_STYLE); } @@ -3268,6 +3387,28 @@ void GdaFrame::OnExploreCorrelogram(wxCommandEvent& WXUNUSED(event)) GdaConst::scatterplot_default_size); } + +void GdaFrame::OnDistancePlot(wxCommandEvent& WXUNUSED(event)) +{ + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (DistancePlotDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + DistancePlotDlg* dlg = new DistancePlotDlg(this, p); + dlg->Show(true); +} + void GdaFrame::OnToolOpenNewTable(wxCommandEvent& WXUNUSED(event)) { OnOpenNewTable(); @@ -3541,6 +3682,16 @@ void GdaFrame::OnLisaMenuChoices(wxCommandEvent& WXUNUSED(event)) if (popupMenu) PopupMenu(popupMenu, wxDefaultPosition); } +void GdaFrame::OnCorrelogramMenuChoices(wxCommandEvent& WXUNUSED(event)) +{ + Project* p = GetProject(); + if (!p) return; + + wxMenu* popupMenu = wxXmlResource::Get()->LoadMenu("ID_CORRELO_MENU"); + + if (popupMenu) PopupMenu(popupMenu, wxDefaultPosition); +} + void GdaFrame::OnGetisMenuChoices(wxCommandEvent& WXUNUSED(event)) { Project* p = GetProject(); @@ -3551,6 +3702,75 @@ void GdaFrame::OnGetisMenuChoices(wxCommandEvent& WXUNUSED(event)) if (popupMenu) PopupMenu(popupMenu, wxDefaultPosition); } +void GdaFrame::OnOpenLocalMatch(wxCommandEvent& event) +{ + wxLogMessage("Open OnOpenLocalMatch."); + + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (NbrMatchDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + NbrMatchDlg* dlg = new NbrMatchDlg(this, p); + dlg->Show(true); +} + +void GdaFrame::OnOpenQuantileLisa(wxCommandEvent& event) +{ + wxLogMessage("Open OnOpenMultiQuantileLisa."); + + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (QuantileLisaDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + QuantileLisaDlg* dlg = new QuantileLisaDlg(this, p); + dlg->Show(true); +} + +void GdaFrame::OnOpenMultiQuantileLisa(wxCommandEvent& event) +{ + wxLogMessage("Open OnOpenMultiQuantileLisa."); + + Project* p = GetProject(); + if (!p) return; + + FramesManager* fm = p->GetFramesManager(); + std::list observers(fm->getCopyObservers()); + std::list::iterator it; + for (it=observers.begin(); it != observers.end(); ++it) { + if (MultiQuantileLisaDlg* w = dynamic_cast(*it)) { + w->Show(true); + w->Maximize(false); + w->Raise(); + return; + } + } + + MultiQuantileLisaDlg* dlg = new MultiQuantileLisaDlg(this, p); + dlg->Show(true); +} + void GdaFrame::OnOpenUniLocalGeary(wxCommandEvent& event) { wxLogMessage("Open LocalGearyFrame (OnOpenUniLocalGeary)."); @@ -3709,6 +3929,59 @@ void GdaFrame::OnOpenUniLisa(wxCommandEvent& event) } } +void GdaFrame::OnOpenUniMedianLisa(wxCommandEvent& event) +{ + wxLogMessage("Open LisaMapFrame (OnOpenUniMedianLisa)."); + + Project* p = GetProject(); + if (!p) return; + + std::vector weights_ids; + WeightsManInterface* w_man_int = p->GetWManInt(); + w_man_int->GetIds(weights_ids); + if (weights_ids.size()==0) { + wxMessageDialog dlg (this, _("GeoDa could not find the required weights file. \nPlease specify weights in Tools > Weights Manager."), _("No Weights Found"), wxOK | wxICON_ERROR); + dlg.ShowModal(); + return; + } + + VariableSettingsDlg VS(p, VariableSettingsDlg::univariate, true, false); + if (VS.ShowModal() != wxID_OK) return; + boost::uuids::uuid w_id = VS.GetWeightsId(); + if (w_id.is_nil()) return; + + GalWeight* gw = w_man_int->GetGal(w_id); + + if (gw == NULL) { + wxMessageDialog dlg (this, _("Invalid Weights Information:\n\n The selected weights file is not valid.\n Please choose another weights file, or use Tools > Weights > Weights Manager\n to define a valid weights file."), _("Warning"), wxOK | wxICON_WARNING); + dlg.ShowModal(); + return; + } + + LisaWhat2OpenDlg LWO(this); + LWO.HideMoranScatter(); + if (LWO.ShowModal() != wxID_OK) return; + if (!LWO.m_ClustMap && !LWO.m_SigMap && !LWO.m_Moran) return; + + bool using_median = true; + LisaCoordinator* lc = new LisaCoordinator(w_id, p, + VS.var_info, + VS.col_ids, + LisaCoordinator::univariate, + true, LWO.m_RowStand, + using_median); + + if (LWO.m_ClustMap) { + LisaMapFrame *sf = new LisaMapFrame(GdaFrame::gda_frame, p, + lc, true, false, false); + } + if (LWO.m_SigMap) { + LisaMapFrame *sf = new LisaMapFrame(GdaFrame::gda_frame, p, + lc, false, false, false, + wxDefaultPosition); + } +} + void GdaFrame::OnOpenMultiLisa(wxCommandEvent& event) { wxLogMessage("Open LisaMapFrame (OnOpenMultiLisa)."); @@ -5493,6 +5766,8 @@ void GdaFrame::OnDisplayPrecision(wxCommandEvent& event) f->OnDisplayPrecision(event); } else if (CorrelogramFrame* f = dynamic_cast(t)) { f->OnDisplayPrecision(event); + } else if (DistancePlotFrame* f = dynamic_cast(t)) { + f->OnDisplayPrecision(event); } } @@ -5666,6 +5941,16 @@ void GdaFrame::OnChangeConnSelectedColor(wxCommandEvent& event) } } +void GdaFrame::OnChangeConnSelectedFillColor(wxCommandEvent& event) +{ + wxLogMessage("In GdaFrame::OnChangeConnSelectedFillColor()"); + TemplateFrame* t = TemplateFrame::GetActiveFrame(); + if (!t) return; + if (MapFrame* f = dynamic_cast(t)) { + f->OnChangeConnSelectedFillColor(event); + } +} + void GdaFrame::OnChangeConnRootSize(wxCommandEvent& event) { wxLogMessage("In GdaFrame::OnChangeConnRootSize()"); @@ -5951,6 +6236,8 @@ void GdaFrame::OnEditLowessParams(wxCommandEvent& event) } else if (ConditionalScatterPlotFrame* f = dynamic_cast(t)) { f->OnEditLowessParams(event); + } else if (DistancePlotFrame* f = dynamic_cast(t)) { + //f->OnEditLowessParams(event); } } @@ -6615,9 +6902,6 @@ bool GdaFrame::GetHtmlMenuItemsSqlite() int GdaFrame::sqlite3_GetHtmlMenuItemsCB(void *data, int argc, char **argv, char **azColName) { - //if (argc != 2) return SQLITE_ERROR; - //htmlMenuItems.push_back(MenuItem(argv[0], argv[1])); - //return SQLITE_OK; return 0; } @@ -6717,11 +7001,15 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_TOOLS_DATA_KMEDOIDS"), GdaFrame::OnToolsDataKMedoids) EVT_MENU(XRCID("ID_TOOLS_DATA_HCLUSTER"), GdaFrame::OnToolsDataHCluster) EVT_MENU(XRCID("ID_TOOLS_DATA_HDBSCAN"), GdaFrame::OnToolsDataHDBScan) + EVT_MENU(XRCID("ID_TOOLS_DATA_DBSCAN"), GdaFrame::OnToolsDataDBScan) EVT_MENU(XRCID("ID_TOOLS_DATA_MAXP"), GdaFrame::OnToolsDataMaxP) + EVT_MENU(XRCID("ID_TOOLS_DATA_AZP"), GdaFrame::OnToolsDataAZP) EVT_MENU(XRCID("ID_TOOLS_DATA_SKATER"), GdaFrame::OnToolsDataSkater) + EVT_MENU(XRCID("ID_TOOLS_DATA_SCHC"), GdaFrame::OnToolsDataSCHC) EVT_MENU(XRCID("ID_TOOLS_DATA_SPECTRAL"), GdaFrame::OnToolsDataSpectral) EVT_MENU(XRCID("ID_TOOLS_DATA_REDCAP"), GdaFrame::OnToolsDataRedcap) EVT_MENU(XRCID("ID_TOOLS_DATA_MDS"), GdaFrame::OnToolsDataMDS) + EVT_MENU(XRCID("ID_TOOLS_DATA_TSNE"), GdaFrame::OnToolsDataTSNE) EVT_BUTTON(XRCID("ID_TOOLS_WEIGHTS_MANAGER"), GdaFrame::OnToolsWeightsManager) EVT_MENU(XRCID("ID_TOOLS_WEIGHTS_CREATE"), GdaFrame::OnToolsWeightsCreate) @@ -6776,6 +7064,7 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), GdaFrame::OnShowConditionalMapView) EVT_BUTTON(XRCID("ID_SHOW_CONDITIONAL_MAP_VIEW"), GdaFrame::OnShowConditionalMapView) EVT_MENU(XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), GdaFrame::OnShowConditionalScatterView) + EVT_MENU(XRCID("ID_SHOW_CONDITIONAL_BOX_VIEW"), GdaFrame::OnShowConditionalBoxView) EVT_BUTTON(XRCID("ID_SHOW_CONDITIONAL_SCATTER_VIEW"), GdaFrame::OnShowConditionalScatterView) EVT_MENU(XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), GdaFrame::OnShowConditionalHistView) EVT_BUTTON(XRCID("ID_SHOW_CONDITIONAL_HIST_VIEW"), GdaFrame::OnShowConditionalHistView) @@ -6796,83 +7085,79 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("IDM_SCATTERPLOT"), GdaFrame::OnExploreScatterNewPlot) EVT_MENU(XRCID("IDM_BUBBLECHART"), GdaFrame::OnExploreBubbleChart) EVT_MENU(XRCID("IDM_SCATTERPLOT_MAT"), GdaFrame::OnExploreScatterPlotMat) - EVT_MENU(XRCID("IDM_CORRELOGRAM"), GdaFrame::OnExploreCorrelogram) + + EVT_MENU(XRCID("IDM_DISTANCE_PLOT"), GdaFrame::OnDistancePlot) EVT_MENU(XRCID("IDM_COV_SCATTERPLOT"), GdaFrame::OnExploreCovScatterPlot) EVT_TOOL(XRCID("IDM_SCATTERPLOT"), GdaFrame::OnExploreScatterNewPlot) EVT_TOOL(XRCID("IDM_BUBBLECHART"), GdaFrame::OnExploreBubbleChart) EVT_TOOL(XRCID("IDM_SCATTERPLOT_MAT"), GdaFrame::OnExploreScatterPlotMat) - EVT_TOOL(XRCID("IDM_CORRELOGRAM"), GdaFrame::OnExploreCorrelogram) + + EVT_MENU(XRCID("IDM_CORRELOGRAM"), GdaFrame::OnExploreCorrelogram) + EVT_MENU(XRCID("IDM_CORRELOGRAM"), GdaFrame::OnExploreCorrelogram) + + EVT_TOOL(XRCID("ID_CORRELO_MENU"), GdaFrame::OnCorrelogramMenuChoices) + EVT_BUTTON(XRCID("ID_CORRELO_MENU"), GdaFrame::OnExploreCorrelogram) + EVT_TOOL(XRCID("IDM_COV_SCATTERPLOT"), GdaFrame::OnExploreCovScatterPlot) EVT_BUTTON(XRCID("IDM_SCATTERPLOT"), GdaFrame::OnExploreScatterNewPlot) - EVT_BUTTON(XRCID("IDM_CORRELOGRAM"), GdaFrame::OnExploreCorrelogram) + EVT_BUTTON(XRCID("IDM_BUBBLECHART"), GdaFrame::OnExploreBubbleChart) EVT_BUTTON(XRCID("IDM_SCATTERPLOT_MAT"), GdaFrame::OnExploreScatterPlotMat) EVT_BUTTON(XRCID("IDM_COV_SCATTERPLOT"), GdaFrame::OnExploreCovScatterPlot) + EVT_MENU(XRCID("IDM_BOX"), GdaFrame::OnExploreNewBox) EVT_TOOL(XRCID("IDM_BOX"), GdaFrame::OnExploreNewBox) EVT_BUTTON(XRCID("IDM_BOX"), GdaFrame::OnExploreNewBox) + EVT_MENU(XRCID("IDM_PCP"), GdaFrame::OnExplorePCP) EVT_TOOL(XRCID("IDM_PCP"), GdaFrame::OnExplorePCP) EVT_BUTTON(XRCID("IDM_PCP"), GdaFrame::OnExplorePCP) + EVT_MENU(XRCID("IDM_3DP"), GdaFrame::OnExplore3DP) EVT_TOOL(XRCID("IDM_3DP"), GdaFrame::OnExplore3DP) EVT_BUTTON(XRCID("IDM_3DP"), GdaFrame::OnExplore3DP) + EVT_MENU(XRCID("IDM_LINE_CHART"), GdaFrame::OnExploreLineChart) EVT_TOOL(XRCID("IDM_LINE_CHART"), GdaFrame::OnExploreLineChart) EVT_BUTTON(XRCID("IDM_LINE_CHART"), GdaFrame::OnExploreLineChart) + EVT_TOOL(XRCID("IDM_NEW_TABLE"), GdaFrame::OnToolOpenNewTable) EVT_BUTTON(XRCID("IDM_NEW_TABLE"), GdaFrame::OnToolOpenNewTable) + EVT_TOOL(XRCID("ID_MORAN_MENU"), GdaFrame::OnMoranMenuChoices) EVT_TOOL(XRCID("ID_TOOLS_MENU"), GdaFrame::OnToolsChoices) + EVT_MENU(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) - EVT_TOOL(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) - EVT_BUTTON(XRCID("IDM_MSPL"), GdaFrame::OnOpenMSPL) EVT_MENU(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) - EVT_TOOL(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) - EVT_BUTTON(XRCID("IDM_DMORAN"), GdaFrame::OnOpenDiffMoran) EVT_MENU(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) - EVT_TOOL(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) - EVT_BUTTON(XRCID("IDM_GMORAN"), GdaFrame::OnOpenGMoran) EVT_MENU(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) - EVT_TOOL(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) - EVT_BUTTON(XRCID("IDM_MORAN_EBRATE"), GdaFrame::OnOpenMoranEB) + EVT_TOOL(XRCID("ID_LISA_MENU"), GdaFrame::OnLisaMenuChoices) EVT_MENU(XRCID("IDM_UNI_LISA"), GdaFrame::OnOpenUniLisa) - EVT_TOOL(XRCID("IDM_UNI_LISA"), GdaFrame::OnOpenUniLisa) - EVT_BUTTON(XRCID("IDM_UNI_LISA"), GdaFrame::OnOpenUniLisa) - + EVT_MENU(XRCID("IDM_UNI_MEDIAN_LISA"), GdaFrame::OnOpenUniMedianLisa) EVT_MENU(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) - EVT_TOOL(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) - EVT_BUTTON(XRCID("IDM_MULTI_LISA"), GdaFrame::OnOpenMultiLisa) - EVT_MENU(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) - EVT_TOOL(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) - EVT_BUTTON(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) + EVT_MENU(XRCID("IDM_DIFF_LISA"), GdaFrame::OnOpenDiffLisa) EVT_MENU(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) - EVT_TOOL(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) - EVT_BUTTON(XRCID("IDM_LISA_EBRATE"), GdaFrame::OnOpenLisaEB) EVT_MENU(XRCID("IDM_UNI_LOCAL_GEARY"), GdaFrame::OnOpenUniLocalGeary) - EVT_TOOL(XRCID("IDM_UNI_LOCAL_GEARY"), GdaFrame::OnOpenUniLocalGeary) - EVT_BUTTON(XRCID("IDM_UNI_LOCAL_GEARY"), GdaFrame::OnOpenUniLocalGeary) - EVT_MENU(XRCID("IDM_MUL_LOCAL_GEARY"), GdaFrame::OnOpenMultiLocalGeary) - EVT_TOOL(XRCID("IDM_MUL_LOCAL_GEARY"), GdaFrame::OnOpenMultiLocalGeary) - EVT_BUTTON(XRCID("IDM_MUL_LOCAL_GEARY"), GdaFrame::OnOpenMultiLocalGeary) + + EVT_MENU(XRCID("IDM_UNI_QUANTILE_LISA"), GdaFrame::OnOpenQuantileLisa) + EVT_MENU(XRCID("IDM_MUL_QUANTILE_LISA"), GdaFrame::OnOpenMultiQuantileLisa) + + EVT_MENU(XRCID("IDM_UNI_LOCAL_MATCH"), GdaFrame::OnOpenLocalMatch) EVT_TOOL(XRCID("IDM_GETIS_ORD_MENU"), GdaFrame::OnGetisMenuChoices) - EVT_BUTTON(XRCID("IDM_GETIS_ORD_MENU"), GdaFrame::OnGetisMenuChoices) EVT_MENU(XRCID("IDM_LOCAL_G"), GdaFrame::OnOpenGetisOrd) EVT_MENU(XRCID("IDM_LOCAL_G_STAR"), GdaFrame::OnOpenGetisOrdStar) EVT_MENU(XRCID("IDM_LOCAL_JOINT_COUNT"), GdaFrame::OnOpenLocalJoinCount) EVT_MENU(XRCID("IDM_BIV_LJC"), GdaFrame::OnOpenBivariateLJC) - EVT_TOOL(XRCID("IDM_BIV_LJC"), GdaFrame::OnOpenBivariateLJC) EVT_MENU(XRCID("IDM_MUL_LJC"), GdaFrame::OnOpenMultiLJC) - EVT_TOOL(XRCID("IDM_MUL_LJC"), GdaFrame::OnOpenMultiLJC) EVT_MENU(XRCID("ID_VIEW_DISPLAY_PRECISION"),GdaFrame::OnDisplayPrecision) EVT_MENU(XRCID("ID_HISTOGRAM_INTERVALS"), GdaFrame::OnHistogramIntervals) @@ -6904,9 +7189,10 @@ BEGIN_EVENT_TABLE(GdaFrame, wxFrame) EVT_MENU(XRCID("ID_WEIGHTS_GRAPH_THICKNESS_STRONG"), GdaFrame::OnChangeGraphThickness) EVT_MENU(XRCID("ID_WEIGHTS_GRAPH_COLOR"), GdaFrame::OnChangeGraphColor) EVT_MENU(XRCID("ID_CONN_SELECTED_COLOR"), GdaFrame::OnChangeConnSelectedColor) -EVT_MENU(XRCID("ID_CONN_ROOT_SIZE"), GdaFrame::OnChangeConnRootSize) -EVT_MENU(XRCID("ID_CONN_ROOT_COLOR"), GdaFrame::OnChangeConnRootColor) + EVT_MENU(XRCID("ID_CONN_ROOT_SIZE"), GdaFrame::OnChangeConnRootSize) + EVT_MENU(XRCID("ID_CONN_ROOT_COLOR"), GdaFrame::OnChangeConnRootColor) EVT_MENU(XRCID("ID_CONN_NEIGHBOR_FILL_COLOR"), GdaFrame::OnChangeNeighborFillColor) + EVT_MENU(XRCID("ID_CONN_SELECTED_FILL_COLOR"), GdaFrame::OnChangeConnSelectedFillColor) EVT_MENU(XRCID("ID_SELECT_NEIGHBORS_OF_CORES"), GdaFrame::OnSelectNeighborsOfCores) EVT_MENU(XRCID("ID_SELECT_CORES_AND_NEIGHBORS"), GdaFrame::OnSelectCoresAndNeighbors) EVT_MENU(XRCID("ID_MAP_ADDMEANCENTERS"), GdaFrame::OnAddMeanCenters) diff --git a/GeoDa.h b/GeoDa.h index 57c27e16f..004dc0a8d 100644 --- a/GeoDa.h +++ b/GeoDa.h @@ -161,12 +161,16 @@ class GdaFrame: public wxFrame void OnToolsDataKMedians(wxCommandEvent& event); void OnToolsDataKMedoids(wxCommandEvent& event); void OnToolsDataHCluster(wxCommandEvent& event); + void OnToolsDataDBScan(wxCommandEvent& event); void OnToolsDataHDBScan(wxCommandEvent& event); void OnToolsDataMaxP(wxCommandEvent& event); + void OnToolsDataAZP(wxCommandEvent& event); void OnToolsDataSkater(wxCommandEvent& event); + void OnToolsDataSCHC(wxCommandEvent& event); void OnToolsDataSpectral(wxCommandEvent& event); void OnToolsDataRedcap(wxCommandEvent& event); void OnToolsDataMDS(wxCommandEvent& event); + void OnToolsDataTSNE(wxCommandEvent& event); void OnToolsWeightsManager(wxCommandEvent& event); void OnToolsWeightsCreate(wxCommandEvent& event); @@ -216,6 +220,7 @@ class GdaFrame: public wxFrame void OnShowConditionalMapView(wxCommandEvent& event); void OnShowConditionalScatterView(wxCommandEvent& event); void OnShowConditionalHistView(wxCommandEvent& event); + void OnShowConditionalBoxView(wxCommandEvent& event); void OnShowCartogramNewView(wxCommandEvent& event ); void OnCartogramImprove1(wxCommandEvent& event); @@ -237,6 +242,7 @@ class GdaFrame: public wxFrame void OnExploreLineChart(wxCommandEvent& event); void OnExploreCovScatterPlot(wxCommandEvent& event); void OnExploreCorrelogram(wxCommandEvent& event); + void OnDistancePlot(wxCommandEvent& event); void OnToolsChoices(wxCommandEvent& event); void OnMoranMenuChoices(wxCommandEvent& event); void OnOpenMSPL(wxCommandEvent& event); @@ -244,8 +250,10 @@ class GdaFrame: public wxFrame void OnOpenDiffMoran(wxCommandEvent& event); void OnOpenMoranEB(wxCommandEvent& event); void OnLisaMenuChoices(wxCommandEvent& event); + void OnCorrelogramMenuChoices(wxCommandEvent& event); void OnGetisMenuChoices(wxCommandEvent& event); void OnOpenUniLisa(wxCommandEvent& event); + void OnOpenUniMedianLisa(wxCommandEvent& event); void OnOpenMultiLisa(wxCommandEvent& event); void OnOpenDiffLisa(wxCommandEvent& event); void OnOpenLisaEB(wxCommandEvent& event); @@ -256,6 +264,9 @@ class GdaFrame: public wxFrame void OnOpenMultiLocalGeary(wxCommandEvent& event); void OnOpenBivariateLJC(wxCommandEvent& event); void OnOpenMultiLJC(wxCommandEvent& event); + void OnOpenQuantileLisa(wxCommandEvent& event); + void OnOpenMultiQuantileLisa(wxCommandEvent& event); + void OnOpenLocalMatch(wxCommandEvent& event); void OnNewCustomCatClassifA(wxCommandEvent& event); void OnNewCustomCatClassifB(wxCommandEvent& event); @@ -495,6 +506,7 @@ class GdaFrame: public wxFrame void OnChangeGraphThickness(wxCommandEvent& event); void OnChangeGraphColor(wxCommandEvent& event); void OnChangeConnSelectedColor(wxCommandEvent& event); + void OnChangeConnSelectedFillColor(wxCommandEvent& event); void OnChangeNeighborFillColor(wxCommandEvent& event); void OnChangeConnRootSize(wxCommandEvent& event); void OnChangeConnRootColor(wxCommandEvent& event); @@ -564,7 +576,6 @@ class GdaFrame: public wxFrame void OnReportBug(wxCommandEvent& event); void OnCheckUpdates(wxCommandEvent& event); void OnCheckTestMode(wxCommandEvent& event); - void OnTableSetLocale(wxCommandEvent& event); void OnEncodingUTF8(wxCommandEvent& event); void OnEncodingUTF16(wxCommandEvent& event); diff --git a/GeoDamake.bionic.opt b/GeoDamake.bionic.opt index 8b6ec79aa..3c5dba578 100644 --- a/GeoDamake.bionic.opt +++ b/GeoDamake.bionic.opt @@ -25,7 +25,7 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include GDAL_HEADER = -I$(GEODA_HOME)/libraries/include diff --git a/GeoDamake.disco.opt b/GeoDamake.disco.opt index 25dd11d97..957a5fc61 100644 --- a/GeoDamake.disco.opt +++ b/GeoDamake.disco.opt @@ -25,7 +25,7 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include GDAL_HEADER = -I$(GEODA_HOME)/libraries/include diff --git a/GeoDamake.macosx.opt b/GeoDamake.macosx.opt index b737dc653..84566ea1e 100644 --- a/GeoDamake.macosx.opt +++ b/GeoDamake.macosx.opt @@ -23,14 +23,11 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost - -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 - GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG) -CFLAGS = -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CFLAGS = -std=gnu99 -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = -arch x86_64 diff --git a/GeoDamake.opt b/GeoDamake.opt index f407f4889..84566ea1e 100644 --- a/GeoDamake.opt +++ b/GeoDamake.opt @@ -2,37 +2,34 @@ GeoDa_ROOT = $(GEODA_HOME)/../.. TARGET = GeoDa -CC = /usr/bin/gcc -CXX = /usr/bin/g++ -LD = /usr/bin/g++ +CC = gcc -Os +CXX = g++ -Os -arch x86_64 +LD = g++ -arch x86_64 RM = /bin/rm -f -WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,webview,qa,adv,core,xml,net,base) +WXLIBS = $(shell $(GEODA_HOME)/libraries/bin/wx-config --libs xrc,stc,richtext,ribbon,propgrid,aui,gl,html,qa,adv,core,webview,xml,net,base) WX_HEADER = $(shell $(GEODA_HOME)/libraries/bin/wx-config --cppflags) -LIBS = $(WXLIBS) \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/libf2c.a \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \ - $(GEODA_HOME)/temp/CLAPACK-3.2.1/tmglib.a \ - $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_date_time.a \ - $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \ - $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \ - $(GEODA_HOME)/libraries/lib/libjson_spirit.a \ - -L$(GEODA_HOME)/libraries/lib -lgdal -lcurl -L/usr/lib/x86_64-linux-gnu -lz -lwebkitgtk-3.0 -lEGL -# Note: Library -lrtmp causes a missing library problem at runtime on -# Ubuntu 14.10 and later. +LIBS = $(WXLIBS) \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/blas.a \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/F2CLIBS/libf2c.a \ + $(GEODA_HOME)/temp/CLAPACK-3.2.1/lapack.a \ + -L/usr/lib -liconv -framework opencl \ + -L$(GEODA_HOME)/libraries/lib -lgdal -lcurl \ + $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_date_time.a \ + $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_thread.a \ + $(GEODA_HOME)/libraries/include/boost/stage/lib/libboost_system.a \ + $(GEODA_HOME)/libraries/lib/libjson_spirit.a -BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost - -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost GDAL_HEADER = -I$(GEODA_HOME)/libraries/include +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include -CPPFLAGS = -I$(GeoDa_ROOT) -std=c++98 -CFLAGS = -O0 -g -DDEBUG -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) -CXXFLAGS = -O0 -g -DDEBUG $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) -LDFLAGS = +CPPFLAGS = -I$(GeoDa_ROOT) $(USER_LOG) +CFLAGS = -std=gnu99 -Os -arch x86_64 -Wall -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CXXFLAGS = -Os -arch x86_64 -Wall $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) +LDFLAGS = -arch x86_64 OBJ_EXT = o diff --git a/GeoDamake.ubuntu.1804.opt b/GeoDamake.ubuntu.1804.opt index d833b7675..7427e8d80 100644 --- a/GeoDamake.ubuntu.1804.opt +++ b/GeoDamake.ubuntu.1804.opt @@ -25,7 +25,7 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include GDAL_HEADER = -I/usr/include/gdal -I$(GEODA_HOME)/libraries/include diff --git a/GeoDamake.ubuntu.opt b/GeoDamake.ubuntu.opt index f512efc6c..b2c2fbbd6 100644 --- a/GeoDamake.ubuntu.opt +++ b/GeoDamake.ubuntu.opt @@ -26,12 +26,12 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include CPPFLAGS = -I$(GeoDa_ROOT) -CFLAGS = -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) +CFLAGS = -std=gnu99 -O2 -Wdeclaration-after-statement $(USER_DEFS) $(GDAL_HEADER) $(EIGEN_HEADER) CXXFLAGS = -O2 $(USER_DEFS) $(WX_HEADER) $(BOOST_HEADER) $(GDAL_HEADER) $(EIGEN_HEADER) LDFLAGS = diff --git a/GeoDamake.xenial.opt b/GeoDamake.xenial.opt index c5095677b..b19fe64ad 100644 --- a/GeoDamake.xenial.opt +++ b/GeoDamake.xenial.opt @@ -26,7 +26,7 @@ LIBS = $(WXLIBS) \ BOOST_HEADER = -I$(GEODA_HOME)/libraries/include/boost -EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 +EIGEN_HEADER = -I$(GEODA_HOME)/libraries/include/eigen3 -I$(GEODA_HOME)/temp/spectra/include GDAL_HEADER = -I$(GEODA_HOME)/libraries/include -I/usr/include diff --git a/Project.cpp b/Project.cpp index df277c4fc..ff48861a3 100644 --- a/Project.cpp +++ b/Project.cpp @@ -385,6 +385,23 @@ Shapefile::ShapeType Project::GetGdaGeometries(vector& geometries) return shape_type; } +std::vector Project::GetBBox(int idx) +{ + wxLogMessage("Project::GetBBox()"); + std::vector box(4); + if (main_data.header.shape_type == Shapefile::POINT_TYP) { + Shapefile::PointContents* pc = (Shapefile::PointContents*)main_data.records[idx].contents_p; + box[0] = pc->x; + box[1] = pc->y; + box[2] = pc->x; + box[3] = pc->y; + } else if (main_data.header.shape_type == Shapefile::POLYGON) { + Shapefile::PolygonContents* pc = (Shapefile::PolygonContents*)main_data.records[idx].contents_p; + return pc->box; + } + return box; +} + rtree_box_2d_t& Project::GetBBoxRtree() { wxLogMessage("Project::CalcEucPlaneRtreeStats()"); @@ -483,6 +500,49 @@ OGRSpatialReference* Project::GetSpatialReference() return spatial_ref; } +bool Project::CheckSpatialProjection(bool& check_again, bool is_arc) +{ + // Check if latitude and longitude are used in spatial reference + bool cont_proceed = false; + if (sourceSR == NULL) { + wxString msg = _("Warning: unknown projection information, distance may be incorrect.\n\nProceed anyway?"); + CheckSpatialRefDialog dlg(NULL, msg); + check_again = dlg.IsCheckAgain(); + if (dlg.ShowModal() == wxID_OK) { + cont_proceed = true; + check_again = dlg.IsCheckAgain(); + } + } else { + bool is_euclidean = !is_arc; + if (is_euclidean && project_unit.CmpNoCase("degree") == 0) { + wxString msg = _("Warning: coordinates are not projected, distance will be incorrect.\n\nProceed anyway?"); + CheckSpatialRefDialog dlg(NULL, msg); + if (dlg.ShowModal() == wxID_OK) { + cont_proceed = true; + check_again = dlg.IsCheckAgain(); + } + } else { + + if (is_arc && project_unit.CmpNoCase("degree") != 0) { + //if the data are projected and one tries to + // create an arc distance, same warning. + wxString msg = _("Warning: coordinates are projected, arc distance will be incorrect.\n\nProceed anyway?"); + CheckSpatialRefDialog dlg(NULL, msg); + if (dlg.ShowModal() == wxID_OK) { + cont_proceed = true; + check_again = dlg.IsCheckAgain(); + } + } else { + // GOOD! + cont_proceed = true; + check_again = false; // no need to check again + } + } + } + // return if user wants to continue proceeding + return cont_proceed; +} + void Project::SaveOGRDataSource() { wxLogMessage("Project::SaveOGRDataSource()"); @@ -900,8 +960,7 @@ void Project::SaveVoronoiDupsToTable() int head_id = *(dups_iter->begin()); std::list::iterator iter = dups_iter->begin(); iter++; // ignore first one - for (; iter != dups_iter->end(); iter++) - { + for (; iter != dups_iter->end(); iter++) { undefined[*iter] = false; dup_ids[*iter] = head_id+1; } diff --git a/Project.h b/Project.h index 26c93f04c..8e7f27565 100644 --- a/Project.h +++ b/Project.h @@ -146,6 +146,7 @@ class Project { MapLayerState* GetMapLayerState(){ return maplayer_state; } ProjectConfiguration* GetProjectConf() { return project_conf; } OGRSpatialReference* GetSpatialReference(); + bool CheckSpatialProjection(bool& check_again, bool is_arc=false); OGRLayerProxy* GetOGRLayerProxy() {return layer_proxy;} /** Save in-memory Table+Geometries to OGR DataSource */ Shapefile::ShapeType GetGdaGeometries(vector& geometries); @@ -163,7 +164,7 @@ class Project { void AddMeanCenters(); void AddCentroids(); void GetSelectedRows(vector& rowids); - + /// centroids by default const std::vector& GetMeanCenters(); void GetMeanCenters(std::vector& x, std::vector& y); @@ -173,7 +174,8 @@ class Project { const std::vector& GetVoronoiPolygons(); GdaPolygon* GetMapBoundary(); void GetMapExtent(double& minx, double& miny, double& maxx, double& maxy); - + std::vector GetBBox(int idx); + double GetMin1nnDistEuc(); double GetMax1nnDistEuc(); double GetMaxDistEuc(); // diameter of convex hull diff --git a/Regression/smile2.cpp b/Regression/smile2.cpp index d2ec52bde..1163da4f0 100644 --- a/Regression/smile2.cpp +++ b/Regression/smile2.cpp @@ -113,7 +113,7 @@ extern double *WhiteTest(int obs, int nvar, double* resid, double** X, void Lag(DenseVector &lag, const DenseVector &x, GalElement *g) { for (int cnt = 0; cnt < x.getSize(); ++cnt) - lag.setAt( cnt, g[cnt].SpatialLag(x.getThis()) ); + lag.setAt( cnt, g[cnt].SpatialLag(x.getThis(), false, cnt) ); } void MakeFastLookupMat(GalElement *g, int dim, @@ -137,7 +137,7 @@ double T(GalElement *g, int dim) using namespace std; double sum = 0; - /* + int i=0, j=0; for (i = 0; i < dim; ++i) { for (j = 0; j < dim; ++j) { @@ -154,8 +154,8 @@ double T(GalElement *g, int dim) sum += g[j].GetRW(i) * g[j].GetRW(i); } } - */ - + + /* for (int i = 0; i < dim; ++i) { for (int j = 0; j < dim; ++j) { double w_ij = g[i].GetRW(j); @@ -164,7 +164,7 @@ double T(GalElement *g, int dim) sum += w_ji * w_ji; } - } + }*/ /* // below is also incorrect when handling knn weights matrix int cnt = 0, cp = 0; @@ -226,7 +226,7 @@ void Compute_RSLmLag(GalElement* g, DenseVector lag(dim), re(resid, dim); for (cnt = 0; cnt < dim; ++cnt) { - lag.setAt( cnt, g[cnt].SpatialLag(Y) ); // Wy + lag.setAt( cnt, g[cnt].SpatialLag(Y, false, cnt) ); // Wy } double RS = geoda_sqr(re.product( lag ) / sigma2); // [e'Wy/sigma2]^2 @@ -275,8 +275,8 @@ void Compute_RSLmLagRobust(GalElement* g, DenseVector Wy(dim), We(dim), e(resid, dim); for (cnt = 0; cnt < dim; ++cnt) { - Wy.setAt( cnt, g[cnt].SpatialLag(Y)); // Wy - We.setAt( cnt, g[cnt].SpatialLag(resid)); // We + Wy.setAt( cnt, g[cnt].SpatialLag(Y, false, cnt)); // Wy + We.setAt( cnt, g[cnt].SpatialLag(resid, false, cnt)); // We } double RS1 = e.product(Wy) / sigma2; // e'Wy/sigma2 @@ -328,7 +328,7 @@ void Compute_MoranI(GalElement* g, //double MoranI = re.product( lag ) / ee; // [e'We] / [ee] for (int cnt = 0; cnt < dim; ++cnt) { - lag.setAt( cnt, g[cnt].SpatialLag(resid) ); // We + lag.setAt( cnt, g[cnt].SpatialLag(resid, false, cnt) ); // We re.setAt(cnt, resid[cnt]); } @@ -504,7 +504,7 @@ void Compute_RSLmError(GalElement* g, DenseVector lag(dim), re(dim); for (int cnt = 0; cnt < dim; ++cnt) { - lag.setAt( cnt, g[cnt].SpatialLag(resid) ); // We + lag.setAt( cnt, g[cnt].SpatialLag(resid, false, cnt) ); // We re.setAt(cnt, resid[cnt]); } @@ -537,8 +537,8 @@ void Compute_RSLmErrorRobust(GalElement* g, int cnt = 0; DenseVector Wy(dim), We(dim), e(resid, dim); for (cnt = 0; cnt < dim; ++cnt) { - Wy.setAt( cnt, g[cnt].SpatialLag(Y)); // Wy - We.setAt( cnt, g[cnt].SpatialLag(resid)); // We + Wy.setAt( cnt, g[cnt].SpatialLag(Y, false, cnt)); // Wy + We.setAt( cnt, g[cnt].SpatialLag(resid, false, cnt)); // We } double RS1 = e.product(Wy) / sigma2; // e'Wy/sigma2 @@ -590,8 +590,8 @@ void Compute_RSLmSarma(GalElement* g, int cnt = 0; DenseVector Wy(dim), We(dim), e(resid, dim); for (cnt = 0; cnt < dim; ++cnt) { - Wy.setAt( cnt, g[cnt].SpatialLag(Y)); // Wy - We.setAt( cnt, g[cnt].SpatialLag(resid)); // We + Wy.setAt( cnt, g[cnt].SpatialLag(Y, false, cnt)); // Wy + We.setAt( cnt, g[cnt].SpatialLag(resid, false, cnt)); // We } double RS1 = e.product(Wy) / sigma2; // e'Wy/sigma2 diff --git a/ShapeOperations/GalWeight.cpp b/ShapeOperations/GalWeight.cpp index c37b270e0..a67777cb7 100644 --- a/ShapeOperations/GalWeight.cpp +++ b/ShapeOperations/GalWeight.cpp @@ -113,6 +113,25 @@ void GalElement::SetNbr(size_t pos, long n, double w) } } +// for kernel weights (KWT), self-neighbor could be included in weights file +// if using KWT in spatial autocorrelation computation (LISA etc.), the +// self-neighbor should be removed; +// Note: for smoothing function, self-neighbor should NOT be removed +void GalElement::RemoveSelfNeighbor(int idx) +{ + // check if self-neighbor presents + if (Check(idx)) { + int pos = nbrLookup[idx]; + nbr.erase(nbr.begin()+pos); + nbrWeight.erase(nbrWeight.begin()+pos); + // rebuild lookup dictionary + nbrLookup.clear(); + for (int i=0; i& undefs) @@ -146,21 +165,6 @@ void GalElement::Update(const std::vector& undefs) } } -/* -void GalElement::SetNbrs(const std::vector& nbrs) -{ - nbr = nbrs; - if (nbrWeight.empty()) { - size_t sz = nbr.size(); - nbrWeight.resize(sz); - for(size_t i=0; i& x) const +double GalElement::SpatialLag(const std::vector& x, bool is_binary, int self_id) const { double lag = 0; size_t sz = Size(); - - for (size_t i=0; i1) lag /= (double) sz; + } else { + // for case of using kernel weights with diagonal + int n_nbrs = 0; + for (size_t i=0; i 0) lag /= (double) n_nbrs; + } + } else { + double sumW = 0; + for (size_t i=0; i1) lag /= (double) sz; - return lag; } /** Compute spatial lag for a contiguity weights matrix. Automatically performs standardization of the result. */ -double GalElement::SpatialLag(const double *x) const +double GalElement::SpatialLag(const double *x, bool is_binary, int self_id) const { double lag = 0; size_t sz = Size(); - - for (size_t i=0; i1) lag /= (double) sz; + if (is_binary) { + if (self_id < 0) { + for (size_t i=0; i1) lag /= (double) sz; + } else { + // for case of using kernel weights with diagonal + int n_nbrs = 0; + for (size_t i=0; i 0) lag /= (double) n_nbrs; + } + } else { + double sumW = 0; + if (self_id < 0) { + for (size_t i=0; i& x, - const int* perm) const + const int* perm, int self_id) const { // todo: this should also handle ReadGWtAsGAL like previous 2 functions double lag = 0; - size_t sz = Size(); - for (size_t i=0; i1) lag /= (double) sz; + if (self_id < 0) { + size_t sz = Size(); + for (size_t i=0; i1) lag /= (double) sz; + } else { + // for case of using kernel weights with diagonal + int n_nbrs = 0; + for (size_t i=0; i 0) lag /= (double) n_nbrs; + } return lag; } diff --git a/ShapeOperations/GalWeight.h b/ShapeOperations/GalWeight.h index 86bfa871e..a758ad262 100644 --- a/ShapeOperations/GalWeight.h +++ b/ShapeOperations/GalWeight.h @@ -41,11 +41,12 @@ class GalElement { void SortNbrs(); long Size() const { return nbr.size(); } long operator[](size_t n) const { return nbr[n]; } - double SpatialLag(const std::vector& x) const; - double SpatialLag(const double* x) const; - double SpatialLag(const std::vector& x, const int* perm) const; + double SpatialLag(const std::vector& x, bool is_binary=true, int self_id=-1) const; + double SpatialLag(const double* x, bool is_binary=true, int self_id=-1) const; + double SpatialLag(const std::vector& x, const int* perm, int self_id=-1) const; double GetRW(int idx); bool Check(long nbrIdx); + void RemoveSelfNeighbor(int idx); bool is_nbrAvgW_empty; std::vector nbrAvgW; diff --git a/ShapeOperations/GdaCache.cpp b/ShapeOperations/GdaCache.cpp index 7f96cab26..e89eea0fd 100644 --- a/ShapeOperations/GdaCache.cpp +++ b/ShapeOperations/GdaCache.cpp @@ -99,8 +99,8 @@ void GdaCache::AddHistory(wxString param_key, wxString param_val) // add to spatialite table wxString _sql = "INSERT INTO history VALUES('" + param_key +"','"+param_val + "')"; - const char * sql = (const char*) _sql.mb_str(wxConvUTF8); - cach_ds_proxy->ExecuteSQL(sql); + //const char * sql = (const char*) _sql.mb_str(wxConvUTF8); + cach_ds_proxy->ExecuteSQL(_sql.mb_str(wxConvUTF8)); } void GdaCache::AddEntry(wxString param_key, wxString param_val) diff --git a/ShapeOperations/GwtWeight.cpp b/ShapeOperations/GwtWeight.cpp index feed957d9..52c84d278 100644 --- a/ShapeOperations/GwtWeight.cpp +++ b/ShapeOperations/GwtWeight.cpp @@ -46,6 +46,7 @@ bool GwtElement::alloc(const int sz) double GwtElement::SpatialLag(const std::vector& x, const bool std) const { + // NOTE: not used, please see GalElement::SpatialLag double lag= 0; int cnt = 0; for (cnt= Size() - 1; cnt >= 0; cnt--) { @@ -57,6 +58,7 @@ double GwtElement::SpatialLag(const std::vector& x, } double GwtElement::SpatialLag(const double *x, const bool std) const { + // NOTE: not used, please see GalElement::SpatialLag double lag= 0; int cnt = 0; for (cnt= Size() - 1; cnt >= 0; cnt--) { diff --git a/ShapeOperations/Lowess.cpp b/ShapeOperations/Lowess.cpp index f9baf7511..0dc032ee8 100644 --- a/ShapeOperations/Lowess.cpp +++ b/ShapeOperations/Lowess.cpp @@ -254,6 +254,7 @@ void Lowess::clowess(const double *x, const double *y, int n, lowest(&x[1], &y[1], n, &x[i], &ys[i], nleft, nright, res, cur_iter>1, rw, &ok); + if (!ok) ys[i] = y[i]; /* all weights zero */ diff --git a/ShapeOperations/OGRDatasourceProxy.cpp b/ShapeOperations/OGRDatasourceProxy.cpp index 4a99415a4..0d63e7d84 100644 --- a/ShapeOperations/OGRDatasourceProxy.cpp +++ b/ShapeOperations/OGRDatasourceProxy.cpp @@ -233,6 +233,8 @@ vector OGRDatasourceProxy::GetLayerNames() OGRLayerProxy* OGRDatasourceProxy::ExecuteSQL(wxString _sql) { + if (is_writable == false) return NULL; + const char * sql = (const char*) _sql.mb_str(wxConvUTF8); OGRLayer* tmp_layer = ds->ExecuteSQL(sql, 0, 0); //tmp_layer->SyncToDisk(); @@ -401,7 +403,7 @@ OGRDatasourceProxy::CreateLayer(wxString layer_name, for ( int t=0; t < time_steps; t++ ) { wxString fname = table->GetColName(id, t); if (fname.empty()) { - wxString tmp = _("Can't create layer %s with empty field (%s) name."); + wxString tmp = _("Can't create layer %s with empty field (%d) name."); error_message << wxString::Format(tmp, layer_name, id); throw GdaException(error_message.mb_str()); } diff --git a/ShapeOperations/OGRLayerProxy.cpp b/ShapeOperations/OGRLayerProxy.cpp index ae55b1fa0..529c066b0 100644 --- a/ShapeOperations/OGRLayerProxy.cpp +++ b/ShapeOperations/OGRLayerProxy.cpp @@ -414,9 +414,8 @@ void OGRLayerProxy::DeleteField(int pos) // remove this field in local OGRFeature vector for (size_t i=0; i < data.size(); ++i) { OGRFeature* my_feature = data[i]; -#ifdef __linux__ - // move to official gdal on linux, so no need to call DeleteField() -#else +#ifdef __WIN32__ + // move to official gdal on linux and mac, so no need to call DeleteField() my_feature->DeleteField(pos); #endif } @@ -488,60 +487,24 @@ bool OGRLayerProxy::CallCartoDBAPI(wxString url) bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) { - if (ds_type == GdaConst::ds_cartodb) { - // update column using CARTODB_API directly, avoid single UPDATE clause - wxString col_name = GetFieldName(col_idx); - CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); - - // update memory still - for (int rid=0; rid < n_rows; rid++) { - data[rid]->SetField(col_idx, vals[rid]); - } - - } else { - for (int rid=0; rid < n_rows; rid++) { - SetValueAt(rid, col_idx, vals[rid]); - } + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, vals[rid]); } return true; } bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) { - if (ds_type == GdaConst::ds_cartodb) { - // update column using CARTODB_API directly, avoid single UPDATE clause - wxString col_name = GetFieldName(col_idx); - CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); - - // update memory still - for (int rid=0; rid < n_rows; rid++) { - data[rid]->SetField(col_idx, (GIntBig)vals[rid]); - } - - } else { - for (int rid=0; rid < n_rows; rid++) { - SetValueAt(rid, col_idx, (GIntBig)vals[rid]); - } + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, (GIntBig)vals[rid]); } return true; } bool OGRLayerProxy::UpdateColumn(int col_idx, vector &vals) { - if (ds_type == GdaConst::ds_cartodb) { - // update column using CARTODB_API directly, avoid single UPDATE clause - wxString col_name = GetFieldName(col_idx); - CartoDBProxy::GetInstance().UpdateColumn(name, col_name, vals); - - // update memory still - for (int rid=0; rid < n_rows; rid++) { - data[rid]->SetField(col_idx, vals[rid].mb_str()); - } - - } else { - for (int rid=0; rid < n_rows; rid++) { - SetValueAt(rid, col_idx, vals[rid].mb_str()); - } + for (int rid=0; rid < n_rows; rid++) { + SetValueAt(rid, col_idx, vals[rid].mb_str()); } return true; } @@ -588,7 +551,7 @@ Shapefile::ShapeType OGRLayerProxy::GetOGRGeometries(vector& geoms if (dest_sr && spatialRef) { poCT = OGRCreateCoordinateTransformation(spatialRef, dest_sr); } - Shapefile::ShapeType shape_type; + Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; //read OGR geometry features int feature_counter =0; for ( int row_idx=0; row_idx < n_rows; row_idx++ ) { @@ -620,11 +583,12 @@ Shapefile::ShapeType OGRLayerProxy::GetOGRGeometries(vector& geoms Shapefile::ShapeType OGRLayerProxy::GetGdaGeometries(vector& geoms, OGRSpatialReference* dest_sr) { + bool is_geoms_init = !geoms.empty(); OGRCoordinateTransformation *poCT = NULL; if (dest_sr && spatialRef) { poCT = OGRCreateCoordinateTransformation(spatialRef, dest_sr); } - Shapefile::ShapeType shape_type; + Shapefile::ShapeType shape_type = Shapefile::NULL_SHAPE; //read OGR geometry features int feature_counter =0; for ( int row_idx=0; row_idx < n_rows; row_idx++ ) { @@ -643,7 +607,11 @@ Shapefile::ShapeType OGRLayerProxy::GetGdaGeometries(vector& geoms, if (poCT) { poCT->Transform(1, &ptX, &ptY); } - geoms.push_back(new GdaPoint(ptX, ptY)); + if (is_geoms_init) { + geoms[row_idx] = new GdaPoint(ptX, ptY); + } else { + geoms.push_back(new GdaPoint(ptX, ptY)); + } } } else if (eType == wkbMultiPoint) { shape_type = Shapefile::POINT_TYP; @@ -659,7 +627,11 @@ Shapefile::ShapeType OGRLayerProxy::GetGdaGeometries(vector& geoms, if (poCT) { poCT->Transform(1, &ptX, &ptY); } - geoms.push_back(new GdaPoint(ptX, ptY)); + if (is_geoms_init) { + geoms[row_idx] = new GdaPoint(ptX, ptY); + } else { + geoms.push_back(new GdaPoint(ptX, ptY)); + } } } } else if (eType == wkbPolygon || eType == wkbCurvePolygon ) { @@ -703,7 +675,11 @@ Shapefile::ShapeType OGRLayerProxy::GetGdaGeometries(vector& geoms, } } } - geoms.push_back(new GdaPolygon(pc)); + if (is_geoms_init) { + geoms[row_idx] = new GdaPolygon(pc); + } else { + geoms.push_back(new GdaPolygon(pc)); + } } else if (eType == wkbMultiPolygon) { Shapefile::PolygonContents* pc = new Shapefile::PolygonContents(); shape_type = Shapefile::POLYGON; @@ -759,7 +735,11 @@ Shapefile::ShapeType OGRLayerProxy::GetGdaGeometries(vector& geoms, } } } - geoms.push_back(new GdaPolygon(pc)); + if (is_geoms_init) { + geoms[row_idx] = new GdaPolygon(pc); + } else { + geoms.push_back(new GdaPolygon(pc)); + } } else { wxString msg = _("GeoDa does not support datasource with line data at this time. Please choose a datasource with either point or polygon data."); throw GdaException(msg.mb_str()); @@ -775,7 +755,8 @@ OGRLayerProxy::AddFeatures(vector& geometries, { export_progress = 0; stop_exporting = false; - wxCSConv* encoding = table->GetEncoding(); + wxCSConv* encoding = NULL; + if (table) table->GetEncoding(); // Create features in memory first for (size_t i=0; i& geometries, if (export_size == 0) export_size = table->GetNumberRows(); export_progress = export_size / 4; // fields already have been created by OGRDatasourceProxy::CreateLayer() - for (size_t j=0; j< fields.size(); j++) { + for (int j=0; j< fields.size(); j++) { wxString fname = fields[j]->GetName(); GdaConst::FieldType ftype = fields[j]->GetType(); // get underneath column position (no group and time =0) @@ -970,7 +951,7 @@ bool OGRLayerProxy::ReadData() } int row_idx = 0; OGRFeature *feature = NULL; - unordered_map feature_dict; + boost::unordered_map feature_dict; layer->ResetReading(); while ((feature = layer->GetNextFeature()) != NULL) { // thread feature: user can stop reading diff --git a/ShapeOperations/OGRLayerProxy.h b/ShapeOperations/OGRLayerProxy.h index 3bf4bd68f..e8dbb866d 100644 --- a/ShapeOperations/OGRLayerProxy.h +++ b/ShapeOperations/OGRLayerProxy.h @@ -122,6 +122,7 @@ class OGRLayerProxy { void AddFeatures(vector& geometries, TableInterface* table, vector& selected_rows); + /** * Read geometries and save to Shapefile::Main data structure. */ diff --git a/ShapeOperations/RateSmoothing.cpp b/ShapeOperations/RateSmoothing.cpp index 4eb9c4f6f..b7aff0cdf 100644 --- a/ShapeOperations/RateSmoothing.cpp +++ b/ShapeOperations/RateSmoothing.cpp @@ -53,6 +53,7 @@ bool GdaAlgs::RateStandardizeEB(const int obs, const double* P, undefined[i] = true; results[i] = 0; } + return has_undef; } const double b_hat = sE / sP; diff --git a/ShapeOperations/SmoothingUtils.cpp b/ShapeOperations/SmoothingUtils.cpp index 48d0219bb..f418a6aca 100644 --- a/ShapeOperations/SmoothingUtils.cpp +++ b/ShapeOperations/SmoothingUtils.cpp @@ -438,7 +438,7 @@ bool SmoothingUtils::ExtendEndpointsToBB(const std::vector& X, // First extend towards right. // Find first point that differs from X[n-1], Y[n-1]; double x1=X[n-1], y1=Y[n-1]; - double x0, y0; + double x0, y0; // error: never initialized double x2=x1; double y2=y1; bool found = false; diff --git a/ShapeOperations/WeightUtils.cpp b/ShapeOperations/WeightUtils.cpp index b95956dc8..fd21e53f1 100644 --- a/ShapeOperations/WeightUtils.cpp +++ b/ShapeOperations/WeightUtils.cpp @@ -811,7 +811,7 @@ GwtElement* WeightUtils::ReadGwt(const wxString& fname, it1 = id_map.find(obs1); it2 = id_map.find(obs2); if (it1 == id_map.end() || it2 == id_map.end()) { - int obs; + int obs = -1; if (it1 == id_map.end()) obs = obs1; if (it2 == id_map.end()) obs = obs2; wxString msg = "On line "; diff --git a/ShapeOperations/WeightsManager.cpp b/ShapeOperations/WeightsManager.cpp index a75ff7db6..964ed669d 100644 --- a/ShapeOperations/WeightsManager.cpp +++ b/ShapeOperations/WeightsManager.cpp @@ -636,13 +636,12 @@ bool GdaWeightsTools::CheckGalSymmetry(GalWeight* w, ProgressDlg* p_dlg) if (elm_j[k++] == i) found = true; } if (!found) { - p_dlg->ValueUpdate(1); - + if (p_dlg) p_dlg->ValueUpdate(1); return false; } } } - p_dlg->ValueUpdate(1); + if (p_dlg) p_dlg->ValueUpdate(1); return true; } @@ -669,12 +668,12 @@ bool GdaWeightsTools::CheckGwtSymmetry(GwtWeight* w, ProgressDlg* p_dlg) if (data_j[k++].nbx == i) found = true; } if (!found) { - p_dlg->ValueUpdate(1); + if (p_dlg) p_dlg->ValueUpdate(1); return false; } } } - p_dlg->ValueUpdate(1); + if (p_dlg) p_dlg->ValueUpdate(1); return true; } diff --git a/SpatialIndAlgs.cpp b/SpatialIndAlgs.cpp index 0d1d90e2e..9d081e6b6 100644 --- a/SpatialIndAlgs.cpp +++ b/SpatialIndAlgs.cpp @@ -705,6 +705,7 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_2d_t& rtree, double th, d } GwtElement& e = Wp->gwt[obs]; + if (!kernel.IsEmpty()) lcnt += 1; e.alloc(lcnt); BOOST_FOREACH(pt_2d_val const& w, l) { GwtNeighbor neigh; @@ -716,6 +717,13 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_2d_t& rtree, double th, d e.Push(neigh); ++cnt; } + if (!kernel.IsEmpty()) { + // add diagonal item: ii + GwtNeighbor neigh; + neigh.nbx = obs; + neigh.weight = 1; + e.Push(neigh); + } } if (!kernel.IsEmpty()) { @@ -815,6 +823,7 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_3d_t& rtree, double th, d } } GwtElement& e = Wp->gwt[obs]; + if (!kernel.IsEmpty()) lcnt += 1; e.alloc(lcnt); BOOST_FOREACH(pt_3d_val const& w, l) { GwtNeighbor neigh; @@ -836,6 +845,13 @@ GwtWeight* SpatialIndAlgs::thresh_build(const rtree_pt_3d_t& rtree, double th, d e.Push(neigh); ++cnt; } + if (!kernel.IsEmpty()) { + // add diagonal item: ii + GwtNeighbor neigh; + neigh.nbx = obs; + neigh.weight = 1; + e.Push(neigh); + } } stringstream ss; diff --git a/TemplateCanvas.cpp b/TemplateCanvas.cpp index 8cca7b0db..f891b4a64 100644 --- a/TemplateCanvas.cpp +++ b/TemplateCanvas.cpp @@ -442,7 +442,7 @@ void TemplateCanvas::SetMouseMode(MouseMode mode) } } -std::vector TemplateCanvas::CreateSelShpsFromProj(vector& selectable_shps, Project* project) +std::vector TemplateCanvas::CreateSelShpsFromProj(std::vector& selectable_shps, Project* project) { using namespace Shapefile; std::vector empty_shps_ids; @@ -464,7 +464,7 @@ std::vector TemplateCanvas::CreateSelShpsFromProj(vector& select empty_shps_ids.push_back(i); selectable_shps[i] = new GdaPoint(); } else { - selectable_shps[i] = new GdaPoint(wxRealPoint(pc->x,pc->y)); + selectable_shps[i] = new GdaPoint(wxRealPoint(pc->x, pc->y), point_radius); } } @@ -650,7 +650,7 @@ void TemplateCanvas::RenderToSVG(wxDC &dc, int w, int h) helper_DrawSelectableShapes_dc(dc, hs, false, false); } else { - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); } @@ -676,6 +676,7 @@ void TemplateCanvas::DrawLayers() DrawLayer2(); } //wxWakeUpIdle(); + Refresh(false); } @@ -810,16 +811,15 @@ void TemplateCanvas::OnSize(wxSizeEvent& event) void TemplateCanvas::SetPointRadius(double r) { + // update seletable_shps[] with new r point_radius = r; - // also update seletable_shps[] with new point_radius GdaPoint* p; for (int i=0, iend=selectable_shps.size(); iisNull()) { - continue; + if (!p->isNull()) { + p->SetRadius(r); } - p->SetRadius(point_radius); } } } @@ -868,7 +868,7 @@ void TemplateCanvas::DrawHighlightedShapes(wxMemoryDC &dc) } else { vector& hs = GetSelBitVec(); - for (int i=0, iend=selectable_shps.size(); ipaintSelf(dc); } @@ -905,13 +905,6 @@ void TemplateCanvas::helper_DrawSelectableShapes_dc(wxDC &dc, vector& hs, vector dirty(bnd, false); dc.SetBrush(*wxTRANSPARENT_BRUSH); - wxDouble r = point_radius; - if (w < 150 || h < 150) { - r *= 0.66; - } - if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { - r = 0.2; - } GdaPoint* p; for (int cat=0; cat& hs, dc.SetBrush(cat_data.GetCategoryBrush(cc_ts, cat)); } vector& ids = cat_data.GetIdsRef(cc_ts, cat); - for (int i=0, iend=ids.size(); iisNull()) { - continue; + if (p->isNull() == false) { + int bnd_idx = p->center.x + p->center.y*w; + if (is_print) { + dc.DrawCircle(p->center.x, p->center.y, p->radius); + } else if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { + dc.DrawCircle(p->center.x, p->center.y, p->radius); + dirty[bnd_idx] = true; + } } - int bnd_idx = p->center.x + p->center.y*w; - if (is_print) { - dc.DrawCircle(p->center.x, p->center.y, r); - } else if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { - dc.DrawCircle(p->center.x, p->center.y, r); - dirty[bnd_idx] = true; - } } } } else if (selectable_shps_type == polygons) { @@ -1264,13 +1256,6 @@ void TemplateCanvas::helper_DrawSelectableShapes_gc(wxGraphicsContext &gc, int bnd = w*h; vector dirty(bnd, false); - wxDouble r = point_radius; - if (w < 150 || h < 150) { - r *= 0.66; - } - if (selectable_shps.size() > 100 && (w < 80 || h < 80)) { - r = 0.2; - } GdaPoint* p; for (int cat=0; catisNull()) - continue; - int bnd_idx = p->center.x + p->center.y*w; - if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { - path.AddCircle(p->center.x, p->center.y, r); - dirty[bnd_idx] = true; + if (p->isNull() == false) { + int bnd_idx = p->center.x + p->center.y*w; + if (bnd_idx >= 0 && bnd_idx < bnd && !dirty[bnd_idx]) { + path.AddCircle(p->center.x, p->center.y, p->radius); + dirty[bnd_idx] = true; + } } } gc.StrokePath(path); @@ -1456,7 +1441,7 @@ void TemplateCanvas::OnMouseEvent(wxMouseEvent& event) brush_shape = new GdaPolygon(sel1, sel2); } - if (brush_shape->Contains(prev)) { + if (brush_shape != NULL && brush_shape->Contains(prev)) { // brushing is_brushing = true; remember_shiftdown = false; // brush will cancel shift @@ -1830,7 +1815,7 @@ void TemplateCanvas::UpdateSelection(bool shiftdown, bool pointsel) // rectangle UpdateSelectionPoints(shiftdown, pointsel); } - + // re-paint highlight layer (layer1_bm) layer1_valid = false; DrawLayers(); @@ -2349,9 +2334,11 @@ void TemplateCanvas::SelectAllInCategory(int category, } if ( selection_changed ) { + LOG_MSG("start notifyObservers()"); highlight_state->SetEventType(HLStateInt::delta); highlight_state->notifyObservers(); // notify self to update drawing - } + LOG_MSG("end notifyObservers()"); + } } void TemplateCanvas::DetermineMouseHoverObjects(wxPoint pt) @@ -2385,7 +2372,6 @@ void TemplateCanvas::DetermineMouseHoverObjects(wxPoint pt) } } } else { // selectable_shps_type == points or anything without pointWithin - const double r2 = point_radius; for (int i=0; i CreateSelShpsFromProj(std::vector& selectable_shps, - Project* project); + std::vector CreateSelShpsFromProj(std::vector& selectable_shps, + Project* project); /** Select all observations in a given category for current canvas time step. Assumes selectable_shps.size() == num obs */ void SelectAllInCategory(int category, bool add_to_selection); @@ -303,6 +303,7 @@ class TemplateCanvas : public wxScrolledWindow, public HighlightStateObserver return sz; } + protected: int MASK_R; int MASK_G; diff --git a/TemplateFrame.h b/TemplateFrame.h index 6a123a24f..0a19aeb40 100644 --- a/TemplateFrame.h +++ b/TemplateFrame.h @@ -129,13 +129,14 @@ class TemplateFrame: public wxFrame, public FramesManagerObserver, virtual void SetDependsOnNonSimpleGroups(bool v); virtual int GetCurrentCanvasTimeStep(); + TemplateCanvas* template_canvas; protected: static TemplateFrame* activeFrame; static wxString activeFrName; wxToolBar* toolbar; Project* project; - TemplateCanvas* template_canvas; + TemplateLegend* template_legend; // optional FramesManager* frames_manager; TableState* table_state; diff --git a/TemplateLegend.cpp b/TemplateLegend.cpp index 05e1729cc..ee229a247 100644 --- a/TemplateLegend.cpp +++ b/TemplateLegend.cpp @@ -454,6 +454,9 @@ void TemplateLegend::OnDraw(wxDC& dc) { if (!template_canvas) return; + + dc.SetTextForeground(*wxBLACK); + wxPen bg_pen(legend_background_color); dc.SetPen(bg_pen); wxBrush bg_brush(legend_background_color); diff --git a/Weights/DistUtils.cpp b/Weights/DistUtils.cpp index 3f9e12225..32500572c 100644 --- a/Weights/DistUtils.cpp +++ b/Weights/DistUtils.cpp @@ -59,6 +59,34 @@ DistUtils::DistUtils(const std::vector >& input_data, kdTree = new ANNkd_tree(data, n_valid_rows, n_cols /*dim*/); } +DistUtils::DistUtils(double** input_data, int nrows, int ncols, + int distance_metric) +{ + eps = 0.0; + ANN_DIST_TYPE = distance_metric; + + n_cols = ncols; + n_rows = nrows; + row_mask.resize(n_rows, false); + n_valid_rows = n_rows; + + + data = new double*[n_valid_rows]; + for (size_t i=0, cnt=0; i row_mask; + // for any undefined rows, re-mapping memory row to table row std::map ann_idx_to_row; std::map row_to_ann_idx; public: DistUtils(const std::vector >& input_data, const std::vector >& mask, int distance_metric = ANNuse_euclidean_dist); + DistUtils(double** input_data, int nrows, int ncols, + int distance_metric = ANNuse_euclidean_dist); ~DistUtils(); // The minimum threshold distance guarantees that every observation has diff --git a/arizona/viz3/oglstuff.cpp b/arizona/viz3/oglstuff.cpp index 216b26c65..c5f04d89e 100644 --- a/arizona/viz3/oglstuff.cpp +++ b/arizona/viz3/oglstuff.cpp @@ -1383,7 +1383,6 @@ void myOGLManager::SetShadersAndTriangles() m_CircleShaders.AddCode(circleFragmentShader, GL_FRAGMENT_SHADER); m_CircleShaders.Init(); - m_TriangShaders.AddAttrib("in_Position"); m_TriangShaders.AddAttrib("in_Colour"); m_TriangShaders.AddAttrib("in_Normal"); diff --git a/internationalization/lang/es/GeoDa.mo b/internationalization/lang/es/GeoDa.mo index e2fa4297d..e63cc8edb 100644 Binary files a/internationalization/lang/es/GeoDa.mo and b/internationalization/lang/es/GeoDa.mo differ diff --git a/internationalization/pofiles/es.po b/internationalization/pofiles/es.po index 922162093..0870cf5ce 100644 --- a/internationalization/pofiles/es.po +++ b/internationalization/pofiles/es.po @@ -2331,11 +2331,11 @@ msgid "Hide system table in SQLITE connection:" msgstr "Ocultar tabla de sistema en conexión SQLITE:" #contributors: -msgid "Hierachical Map does not work with Table only datasource." +msgid "Hierarchical Map does not work with Table only datasource." msgstr "" #contributors: -msgid "Hierachical Map: " +msgid "Hierarchical Map: " msgstr "" #contributors: @@ -3283,7 +3283,7 @@ msgid "Number of neighbors" msgstr "Número de vecinos" #contributors: -msgid "Number of not clustered observations: " +msgid "Number of observations not in a cluster: " msgstr "" #contributors: diff --git a/internationalization/pofiles/ru.po b/internationalization/pofiles/ru.po index ed693e942..7621690b1 100644 --- a/internationalization/pofiles/ru.po +++ b/internationalization/pofiles/ru.po @@ -2331,11 +2331,11 @@ msgid "Hide system table in SQLITE connection:" msgstr "Скрыть таблицу системы в соединении с SQLITE:" # contributors: -msgid "Hierachical Map does not work with Table only datasource." +msgid "Hierarchical Map does not work with Table only datasource." msgstr "Иерархическая карта не работает с исключительно табличным источником данных." # contributors: -msgid "Hierachical Map: " +msgid "Hierarchical Map: " msgstr "Иерархическая карта: " # contributors: @@ -3283,7 +3283,7 @@ msgid "Number of neighbors" msgstr "Количество соседей" # contributors: -msgid "Number of not clustered observations: " +msgid "Number of observations not in a cluster: " msgstr "Количество некластеризованных наблюдений: " # contributors: @@ -5343,7 +5343,7 @@ msgid "Use selected as specified alpha level" msgstr "Использовать выбранное как указанный альфа уровень" # contributors: -msgid "Use specified seed:" +msgid "Use Specified Seed:" msgstr "Использовать указанное начальное число:" # contributors: diff --git a/internationalization/pofiles/zh_CN.po b/internationalization/pofiles/zh_CN.po index 60c37657d..65879fe46 100644 --- a/internationalization/pofiles/zh_CN.po +++ b/internationalization/pofiles/zh_CN.po @@ -2323,11 +2323,11 @@ msgid "Hide system table in SQLITE connection:" msgstr "在SQLite连接中隐藏系统表:" # contributors: -msgid "Hierachical Map does not work with Table only datasource." +msgid "Hierarchical Map does not work with Table only datasource." msgstr "表格数据无法创建层次分类地图" # contributors: -msgid "Hierachical Map: " +msgid "Hierarchical Map: " msgstr "层次分类地图:" # contributors: @@ -3267,7 +3267,7 @@ msgid "Number of neighbors" msgstr "邻居数" # contributors: -msgid "Number of not clustered observations: " +msgid "Number of observations not in a cluster: " msgstr "无法聚类的对象数:" # contributors: @@ -5283,7 +5283,7 @@ msgid "Use selected as specified alpha level" msgstr "使用上面选中的值为alpha值" # contributors: -msgid "Use specified seed:" +msgid "Use Specified Seed:" msgstr "使用指定的种子:" # contributors: diff --git a/ogl/oglmisc.cpp b/ogl/oglmisc.cpp index 4dee2d474..e71bf678f 100644 --- a/ogl/oglmisc.cpp +++ b/ogl/oglmisc.cpp @@ -333,7 +333,7 @@ void oglCentreTextNoClipping(wxDC& dc, wxList *text_list, current = current->GetNext(); i ++; } - delete widths; + delete[] widths; } void oglGetCentredTextExtent(wxDC& dc, wxList *text_list, diff --git a/rc/GdaAppResources.cpp b/rc/GdaAppResources.cpp index 1bfe2fc9b..ae987bd46 100644 --- a/rc/GdaAppResources.cpp +++ b/rc/GdaAppResources.cpp @@ -21,8 +21,156 @@ wxMemoryFSHandler::AddFile(name, data, size) #endif -static size_t xml_res_size_0 = 16075; +static size_t xml_res_size_0 = 2972; static unsigned char xml_res_file_0[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, +0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, +108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, +240,177,151,108,129,0,34,35,172,8,200,16,89,162,16,146,0,97,132,16,18,64, +197,133,136,10,86,20,21,17,156,72,85,196,130,213,10,72,157,136,226,160, +40,184,103,65,138,136,90,139,85,92,56,238,31,220,167,181,125,122,239,237, +237,251,215,251,188,231,156,231,252,206,121,207,15,128,17,18,38,145,230, +162,106,0,57,82,133,60,58,216,31,143,79,72,196,201,189,128,2,21,72,224, +4,32,16,230,203,194,103,5,197,0,0,240,3,121,120,126,116,176,63,252,1,175, +111,0,2,0,112,213,46,36,18,199,225,255,131,186,80,38,87,0,32,145,0,224, +34,18,231,11,1,144,82,0,200,46,84,200,20,0,200,24,0,176,83,179,100,10,0, +148,0,0,108,121,124,66,34,0,170,13,0,236,244,73,62,5,0,216,169,147,220, +23,0,216,162,28,169,8,0,141,1,0,153,40,71,36,2,64,187,0,96,85,129,82,44, +2,192,194,0,160,172,64,34,46,4,192,174,1,128,89,182,50,71,2,128,189,5,0, +118,142,88,144,15,64,96,0,128,153,66,44,204,0,32,56,2,0,67,30,19,205,3, +32,76,3,160,48,210,191,224,169,95,112,133,184,72,1,0,192,203,149,205,151, +75,210,51,20,184,149,208,26,119,242,240,224,226,33,226,194,108,177,66,97, +23,41,16,102,9,228,34,156,151,155,35,19,72,231,3,76,206,12,0,0,26,249,209, +193,254,56,63,144,231,230,228,225,230,102,231,108,239,244,197,162,254,107, +240,111,34,62,33,241,223,254,188,140,2,4,0,16,78,207,239,218,95,229,229, +214,3,112,199,1,176,117,191,107,169,91,0,218,86,0,104,223,249,93,51,219, +9,160,90,10,208,122,249,139,121,56,252,64,30,158,161,80,200,60,29,28,10, +11,11,237,37,98,161,189,48,227,139,62,255,51,225,111,224,139,126,246,252, +64,30,254,219,122,240,0,113,154,64,153,173,192,163,131,253,113,97,110,118, +174,82,142,231,203,4,66,49,110,247,231,35,254,199,133,127,253,142,41,209, +226,52,177,92,44,21,138,241,88,137,184,80,34,77,199,121,185,82,145,68,33, +201,149,226,18,233,127,50,241,31,150,253,9,147,119,13,0,172,134,79,192, +78,182,7,181,203,108,192,126,238,1,2,139,14,88,210,118,0,64,126,243,45, +140,26,11,145,0,16,103,52,50,121,247,0,0,147,191,249,143,64,43,1,0,205, +151,164,227,0,0,188,232,24,92,168,148,23,76,198,8,0,0,68,160,129,42,176, +65,7,12,193,20,172,192,14,156,193,29,188,192,23,2,97,6,68,64,12,36,192, +60,16,66,6,228,128,28,10,161,24,150,65,25,84,192,58,216,4,181,176,3,26, +160,17,154,225,16,180,193,49,56,13,231,224,18,92,129,235,112,23,6,96,24, +158,194,24,188,134,9,4,65,200,8,19,97,33,58,136,17,98,142,216,34,206,8, +23,153,142,4,34,97,72,52,146,128,164,32,233,136,20,81,34,197,200,114,164, +2,169,66,106,145,93,72,35,242,45,114,20,57,141,92,64,250,144,219,200,32, +50,138,252,138,188,71,49,148,129,178,81,3,212,2,117,64,185,168,31,26,138, +198,160,115,209,116,52,15,93,128,150,162,107,209,26,180,30,61,128,182,162, +167,209,75,232,117,116,0,125,138,142,99,128,209,49,14,102,140,217,97,92, +140,135,69,96,137,88,26,38,199,22,99,229,88,53,86,143,53,99,29,88,55,118, +21,27,192,158,97,239,8,36,2,139,128,19,236,8,94,132,16,194,108,130,144, +144,71,88,76,88,67,168,37,236,35,180,18,186,8,87,9,131,132,49,194,39,34, +147,168,79,180,37,122,18,249,196,120,98,58,177,144,88,70,172,38,238,33, +30,33,158,37,94,39,14,19,95,147,72,36,14,201,146,228,78,10,33,37,144,50, +73,11,73,107,72,219,72,45,164,83,164,62,210,16,105,156,76,38,235,144,109, +201,222,228,8,178,128,172,32,151,145,183,144,15,144,79,146,251,201,195, +228,183,20,58,197,136,226,76,9,162,36,82,164,148,18,74,53,101,63,229,4, +165,159,50,66,153,160,170,81,205,169,158,212,8,170,136,58,159,90,73,109, +160,118,80,47,83,135,169,19,52,117,154,37,205,155,22,67,203,164,45,163, +213,208,154,105,103,105,247,104,47,233,116,186,9,221,131,30,69,151,208, +151,210,107,232,7,233,231,233,131,244,119,12,13,134,13,131,199,72,98,40, +25,107,25,123,25,167,24,183,25,47,153,76,166,5,211,151,153,200,84,48,215, +50,27,153,103,152,15,152,111,85,88,42,246,42,124,21,145,202,18,149,58,149, +86,149,126,149,231,170,84,85,115,85,63,213,121,170,11,84,171,85,15,171, +94,86,125,166,70,85,179,80,227,169,9,212,22,171,213,169,29,85,187,169,54, +174,206,82,119,82,143,80,207,81,95,163,190,95,253,130,250,99,13,178,134, +133,70,160,134,72,163,84,99,183,198,25,141,33,22,198,50,101,241,88,66,214, +114,86,3,235,44,107,152,77,98,91,178,249,236,76,118,5,251,27,118,47,123, +76,83,67,115,170,102,172,102,145,102,157,230,113,205,1,14,198,177,224,240, +57,217,156,74,206,33,206,13,206,123,45,3,45,63,45,177,214,106,173,102,173, +126,173,55,218,122,218,190,218,98,237,114,237,22,237,235,218,239,117,112, +157,64,157,44,157,245,58,109,58,247,117,9,186,54,186,81,186,133,186,219, +117,207,234,62,211,99,235,121,233,9,245,202,245,14,233,221,209,71,245,109, +244,163,245,23,234,239,214,239,209,31,55,48,52,8,54,144,25,108,49,56,99, +240,204,144,99,232,107,152,105,184,209,240,132,225,168,17,203,104,186,145, +196,104,163,209,73,163,39,184,38,238,135,103,227,53,120,23,62,102,172,111, +28,98,172,52,222,101,220,107,60,97,98,105,50,219,164,196,164,197,228,190, +41,205,148,107,154,102,186,209,180,211,116,204,204,200,44,220,172,216,172, +201,236,142,57,213,156,107,158,97,190,217,188,219,252,141,133,165,69,156, +197,74,139,54,139,199,150,218,150,124,203,5,150,77,150,247,172,152,86,62, +86,121,86,245,86,215,172,73,214,92,235,44,235,109,214,87,108,80,27,87,155, +12,155,58,155,203,182,168,173,155,173,196,118,155,109,223,20,226,20,143, +41,210,41,245,83,110,218,49,236,252,236,10,236,154,236,6,237,57,246,97, +246,37,246,109,246,207,29,204,28,18,29,214,59,116,59,124,114,116,117,204, +118,108,112,188,235,164,225,52,195,169,196,169,195,233,87,103,27,103,161, +115,157,243,53,23,166,75,144,203,18,151,118,151,23,83,109,167,138,167,110, +159,122,203,149,229,26,238,186,210,181,211,245,163,155,187,155,220,173, +217,109,212,221,204,61,197,125,171,251,77,46,155,27,201,93,195,61,239,65, +244,240,247,88,226,113,204,227,157,167,155,167,194,243,144,231,47,94,118, +94,89,94,251,189,30,79,179,156,38,158,214,48,109,200,219,196,91,224,189, +203,123,96,58,62,61,101,250,206,233,3,62,198,62,2,159,122,159,135,190,166, +190,34,223,61,190,35,126,214,126,153,126,7,252,158,251,59,250,203,253,143, +248,191,225,121,242,22,241,78,5,96,1,193,1,229,1,189,129,26,129,179,3,107, +3,31,4,153,4,165,7,53,5,141,5,187,6,47,12,62,21,66,12,9,13,89,31,114,147, +111,192,23,242,27,249,99,51,220,103,44,154,209,21,202,8,157,21,90,27,250, +48,204,38,76,30,214,17,142,134,207,8,223,16,126,111,166,249,76,233,204, +182,8,136,224,71,108,136,184,31,105,25,153,23,249,125,20,41,42,50,170,46, +234,81,180,83,116,113,116,247,44,214,172,228,89,251,103,189,142,241,143, +169,140,185,59,219,106,182,114,118,103,172,106,108,82,108,99,236,155,184, +128,184,170,184,129,120,135,248,69,241,151,18,116,19,36,9,237,137,228,196, +216,196,61,137,227,115,2,231,108,154,51,156,228,154,84,150,116,99,174,229, +220,162,185,23,230,233,206,203,158,119,60,89,53,89,144,124,56,133,152,18, +151,178,63,229,131,32,66,80,47,24,79,229,167,110,77,29,19,242,132,155,133, +79,69,190,162,141,162,81,177,183,184,74,60,146,230,157,86,149,246,56,221, +59,125,67,250,104,134,79,70,117,198,51,9,79,82,43,121,145,25,146,185,35, +243,77,86,68,214,222,172,207,217,113,217,45,57,148,156,148,156,163,82,13, +105,150,180,43,215,48,183,40,183,79,102,43,43,147,13,228,121,230,109,202, +27,147,135,202,247,228,35,249,115,243,219,21,108,133,76,209,163,180,82, +174,80,14,22,76,47,168,43,120,91,24,91,120,184,72,189,72,90,212,51,223, +102,254,234,249,35,11,130,22,124,189,144,176,80,184,176,179,216,184,120, +89,241,224,34,191,69,187,22,35,139,83,23,119,46,49,93,82,186,100,120,105, +240,210,125,203,104,203,178,150,253,80,226,88,82,85,242,106,121,220,242, +142,82,131,210,165,165,67,43,130,87,52,149,169,148,201,203,110,174,244, +90,185,99,21,97,149,100,85,239,106,151,213,91,86,127,42,23,149,95,172,112, +172,168,174,248,176,70,184,230,226,87,78,95,213,124,245,121,109,218,218, +222,74,183,202,237,235,72,235,164,235,110,172,247,89,191,175,74,189,106, +65,213,208,134,240,13,173,27,241,141,229,27,95,109,74,222,116,161,122,106, +245,142,205,180,205,202,205,3,53,97,53,237,91,204,182,172,219,242,161,54, +163,246,122,157,127,93,203,86,253,173,171,183,190,217,38,218,214,191,221, +119,123,243,14,131,29,21,59,222,239,148,236,188,181,43,120,87,107,189,69, +125,245,110,210,238,130,221,143,26,98,27,186,191,230,126,221,184,71,119, +79,197,158,143,123,165,123,7,246,69,239,235,106,116,111,108,220,175,191, +191,178,9,109,82,54,141,30,72,58,112,229,155,128,111,218,155,237,154,119, +181,112,90,42,14,194,65,229,193,39,223,166,124,123,227,80,232,161,206,195, +220,195,205,223,153,127,183,245,8,235,72,121,43,210,58,191,117,172,45,163, +109,160,61,161,189,239,232,140,163,157,29,94,29,71,190,183,255,126,239, +49,227,99,117,199,53,143,87,158,160,157,40,61,241,249,228,130,147,227,167, +100,167,158,157,78,63,61,212,153,220,121,247,76,252,153,107,93,81,93,189, +103,67,207,158,63,23,116,238,76,183,95,247,201,243,222,231,143,93,240,188, +112,244,34,247,98,219,37,183,75,173,61,174,61,71,126,112,253,225,72,175, +91,111,235,101,247,203,237,87,60,174,116,244,77,235,59,209,239,211,127, +250,106,192,213,115,215,248,215,46,93,159,121,189,239,198,236,27,183,110, +38,221,28,184,37,186,245,248,118,246,237,23,119,10,238,76,220,93,122,143, +120,175,252,190,218,253,234,7,250,15,234,127,180,254,177,101,192,109,224, +248,96,192,96,207,195,89,15,239,14,9,135,158,254,148,255,211,135,225,210, +71,204,71,213,35,70,35,141,143,157,31,31,27,13,26,189,242,100,206,147,225, +167,178,167,19,207,202,126,86,255,121,235,115,171,231,223,253,226,251,75, +207,88,252,216,240,11,249,139,207,191,174,121,169,243,114,239,171,169,175, +58,199,35,199,31,188,206,121,61,241,166,252,173,206,219,125,239,184,239, +186,223,199,189,31,153,40,252,64,254,80,243,209,250,99,199,167,208,79,247, +62,231,124,254,252,47,247,132,243,251,128,57,37,17,0,0,0,6,98,75,71,68, +0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, +18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,218,11,9,0,17,14,193,200,229, +101,0,0,0,218,73,68,65,84,56,203,157,146,81,110,196,32,12,68,223,67,217, +195,166,7,218,244,168,43,5,201,253,8,110,128,178,106,85,75,200,128,61,158, +177,193,39,132,192,14,70,196,6,108,64,237,60,159,122,6,240,113,231,144, +241,2,16,237,70,173,234,171,237,211,87,58,107,57,85,125,169,87,1,128,172, +28,17,219,161,231,12,222,35,30,25,239,84,92,118,64,28,77,200,19,34,87,198, +184,23,51,97,137,136,109,136,76,73,113,239,155,187,20,164,186,162,86,91, +249,100,77,185,217,74,87,16,245,84,235,160,96,7,5,236,135,53,157,153,148, +124,43,24,130,141,93,173,251,26,63,20,129,241,93,89,61,219,141,249,57,41, +117,205,210,15,105,85,64,111,88,153,21,244,255,161,247,51,48,199,84,122, +166,76,206,187,119,224,126,6,229,55,96,7,122,92,41,99,215,78,44,117,209, +255,219,129,170,107,182,63,216,242,123,255,203,190,0,136,139,174,86,85, +238,67,201,0,0,0,0,73,69,78,68,174,66,96,130}; + +static size_t xml_res_size_1 = 16075; +static unsigned char xml_res_file_1[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,111,8,6,0, 0,0,36,44,200,156,0,0,2,209,105,67,67,80,73,67,67,32,80,114,111,102,105, 108,101,0,0,40,145,141,148,207,75,20,97,24,199,191,179,141,24,40,65,96, @@ -813,8 +961,8 @@ static unsigned char xml_res_file_0[] = { 107,142,145,36,64,137,226,112,6,94,94,201,63,43,181,67,241,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_1 = 820; -static unsigned char xml_res_file_1[] = { +static size_t xml_res_size_2 = 820; +static unsigned char xml_res_file_2[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71, 68,0,193,0,193,0,193,81,56,116,69,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11, @@ -856,8 +1004,8 @@ static unsigned char xml_res_file_1[] = { 88,191,249,173,187,126,231,225,161,126,254,0,23,191,173,48,120,3,33,228, 0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_2 = 494; -static unsigned char xml_res_file_2[] = { +static size_t xml_res_size_3 = 494; +static unsigned char xml_res_file_3[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, 0,31,243,255,97,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0, 65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60, @@ -883,154 +1031,6 @@ static unsigned char xml_res_file_2[] = { 167,49,242,47,253,216,110,138,111,1,6,0,45,50,175,188,138,148,153,188,0, 0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_3 = 2972; -static unsigned char xml_res_file_3[] = { -137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, -0,31,243,255,97,0,0,10,67,105,67,67,80,73,67,67,32,112,114,111,102,105, -108,101,0,0,120,218,157,83,119,88,147,247,22,62,223,247,101,15,86,66,216, -240,177,151,108,129,0,34,35,172,8,200,16,89,162,16,146,0,97,132,16,18,64, -197,133,136,10,86,20,21,17,156,72,85,196,130,213,10,72,157,136,226,160, -40,184,103,65,138,136,90,139,85,92,56,238,31,220,167,181,125,122,239,237, -237,251,215,251,188,231,156,231,252,206,121,207,15,128,17,18,38,145,230, -162,106,0,57,82,133,60,58,216,31,143,79,72,196,201,189,128,2,21,72,224, -4,32,16,230,203,194,103,5,197,0,0,240,3,121,120,126,116,176,63,252,1,175, -111,0,2,0,112,213,46,36,18,199,225,255,131,186,80,38,87,0,32,145,0,224, -34,18,231,11,1,144,82,0,200,46,84,200,20,0,200,24,0,176,83,179,100,10,0, -148,0,0,108,121,124,66,34,0,170,13,0,236,244,73,62,5,0,216,169,147,220, -23,0,216,162,28,169,8,0,141,1,0,153,40,71,36,2,64,187,0,96,85,129,82,44, -2,192,194,0,160,172,64,34,46,4,192,174,1,128,89,182,50,71,2,128,189,5,0, -118,142,88,144,15,64,96,0,128,153,66,44,204,0,32,56,2,0,67,30,19,205,3, -32,76,3,160,48,210,191,224,169,95,112,133,184,72,1,0,192,203,149,205,151, -75,210,51,20,184,149,208,26,119,242,240,224,226,33,226,194,108,177,66,97, -23,41,16,102,9,228,34,156,151,155,35,19,72,231,3,76,206,12,0,0,26,249,209, -193,254,56,63,144,231,230,228,225,230,102,231,108,239,244,197,162,254,107, -240,111,34,62,33,241,223,254,188,140,2,4,0,16,78,207,239,218,95,229,229, -214,3,112,199,1,176,117,191,107,169,91,0,218,86,0,104,223,249,93,51,219, -9,160,90,10,208,122,249,139,121,56,252,64,30,158,161,80,200,60,29,28,10, -11,11,237,37,98,161,189,48,227,139,62,255,51,225,111,224,139,126,246,252, -64,30,254,219,122,240,0,113,154,64,153,173,192,163,131,253,113,97,110,118, -174,82,142,231,203,4,66,49,110,247,231,35,254,199,133,127,253,142,41,209, -226,52,177,92,44,21,138,241,88,137,184,80,34,77,199,121,185,82,145,68,33, -201,149,226,18,233,127,50,241,31,150,253,9,147,119,13,0,172,134,79,192, -78,182,7,181,203,108,192,126,238,1,2,139,14,88,210,118,0,64,126,243,45, -140,26,11,145,0,16,103,52,50,121,247,0,0,147,191,249,143,64,43,1,0,205, -151,164,227,0,0,188,232,24,92,168,148,23,76,198,8,0,0,68,160,129,42,176, -65,7,12,193,20,172,192,14,156,193,29,188,192,23,2,97,6,68,64,12,36,192, -60,16,66,6,228,128,28,10,161,24,150,65,25,84,192,58,216,4,181,176,3,26, -160,17,154,225,16,180,193,49,56,13,231,224,18,92,129,235,112,23,6,96,24, -158,194,24,188,134,9,4,65,200,8,19,97,33,58,136,17,98,142,216,34,206,8, -23,153,142,4,34,97,72,52,146,128,164,32,233,136,20,81,34,197,200,114,164, -2,169,66,106,145,93,72,35,242,45,114,20,57,141,92,64,250,144,219,200,32, -50,138,252,138,188,71,49,148,129,178,81,3,212,2,117,64,185,168,31,26,138, -198,160,115,209,116,52,15,93,128,150,162,107,209,26,180,30,61,128,182,162, -167,209,75,232,117,116,0,125,138,142,99,128,209,49,14,102,140,217,97,92, -140,135,69,96,137,88,26,38,199,22,99,229,88,53,86,143,53,99,29,88,55,118, -21,27,192,158,97,239,8,36,2,139,128,19,236,8,94,132,16,194,108,130,144, -144,71,88,76,88,67,168,37,236,35,180,18,186,8,87,9,131,132,49,194,39,34, -147,168,79,180,37,122,18,249,196,120,98,58,177,144,88,70,172,38,238,33, -30,33,158,37,94,39,14,19,95,147,72,36,14,201,146,228,78,10,33,37,144,50, -73,11,73,107,72,219,72,45,164,83,164,62,210,16,105,156,76,38,235,144,109, -201,222,228,8,178,128,172,32,151,145,183,144,15,144,79,146,251,201,195, -228,183,20,58,197,136,226,76,9,162,36,82,164,148,18,74,53,101,63,229,4, -165,159,50,66,153,160,170,81,205,169,158,212,8,170,136,58,159,90,73,109, -160,118,80,47,83,135,169,19,52,117,154,37,205,155,22,67,203,164,45,163, -213,208,154,105,103,105,247,104,47,233,116,186,9,221,131,30,69,151,208, -151,210,107,232,7,233,231,233,131,244,119,12,13,134,13,131,199,72,98,40, -25,107,25,123,25,167,24,183,25,47,153,76,166,5,211,151,153,200,84,48,215, -50,27,153,103,152,15,152,111,85,88,42,246,42,124,21,145,202,18,149,58,149, -86,149,126,149,231,170,84,85,115,85,63,213,121,170,11,84,171,85,15,171, -94,86,125,166,70,85,179,80,227,169,9,212,22,171,213,169,29,85,187,169,54, -174,206,82,119,82,143,80,207,81,95,163,190,95,253,130,250,99,13,178,134, -133,70,160,134,72,163,84,99,183,198,25,141,33,22,198,50,101,241,88,66,214, -114,86,3,235,44,107,152,77,98,91,178,249,236,76,118,5,251,27,118,47,123, -76,83,67,115,170,102,172,102,145,102,157,230,113,205,1,14,198,177,224,240, -57,217,156,74,206,33,206,13,206,123,45,3,45,63,45,177,214,106,173,102,173, -126,173,55,218,122,218,190,218,98,237,114,237,22,237,235,218,239,117,112, -157,64,157,44,157,245,58,109,58,247,117,9,186,54,186,81,186,133,186,219, -117,207,234,62,211,99,235,121,233,9,245,202,245,14,233,221,209,71,245,109, -244,163,245,23,234,239,214,239,209,31,55,48,52,8,54,144,25,108,49,56,99, -240,204,144,99,232,107,152,105,184,209,240,132,225,168,17,203,104,186,145, -196,104,163,209,73,163,39,184,38,238,135,103,227,53,120,23,62,102,172,111, -28,98,172,52,222,101,220,107,60,97,98,105,50,219,164,196,164,197,228,190, -41,205,148,107,154,102,186,209,180,211,116,204,204,200,44,220,172,216,172, -201,236,142,57,213,156,107,158,97,190,217,188,219,252,141,133,165,69,156, -197,74,139,54,139,199,150,218,150,124,203,5,150,77,150,247,172,152,86,62, -86,121,86,245,86,215,172,73,214,92,235,44,235,109,214,87,108,80,27,87,155, -12,155,58,155,203,182,168,173,155,173,196,118,155,109,223,20,226,20,143, -41,210,41,245,83,110,218,49,236,252,236,10,236,154,236,6,237,57,246,97, -246,37,246,109,246,207,29,204,28,18,29,214,59,116,59,124,114,116,117,204, -118,108,112,188,235,164,225,52,195,169,196,169,195,233,87,103,27,103,161, -115,157,243,53,23,166,75,144,203,18,151,118,151,23,83,109,167,138,167,110, -159,122,203,149,229,26,238,186,210,181,211,245,163,155,187,155,220,173, -217,109,212,221,204,61,197,125,171,251,77,46,155,27,201,93,195,61,239,65, -244,240,247,88,226,113,204,227,157,167,155,167,194,243,144,231,47,94,118, -94,89,94,251,189,30,79,179,156,38,158,214,48,109,200,219,196,91,224,189, -203,123,96,58,62,61,101,250,206,233,3,62,198,62,2,159,122,159,135,190,166, -190,34,223,61,190,35,126,214,126,153,126,7,252,158,251,59,250,203,253,143, -248,191,225,121,242,22,241,78,5,96,1,193,1,229,1,189,129,26,129,179,3,107, -3,31,4,153,4,165,7,53,5,141,5,187,6,47,12,62,21,66,12,9,13,89,31,114,147, -111,192,23,242,27,249,99,51,220,103,44,154,209,21,202,8,157,21,90,27,250, -48,204,38,76,30,214,17,142,134,207,8,223,16,126,111,166,249,76,233,204, -182,8,136,224,71,108,136,184,31,105,25,153,23,249,125,20,41,42,50,170,46, -234,81,180,83,116,113,116,247,44,214,172,228,89,251,103,189,142,241,143, -169,140,185,59,219,106,182,114,118,103,172,106,108,82,108,99,236,155,184, -128,184,170,184,129,120,135,248,69,241,151,18,116,19,36,9,237,137,228,196, -216,196,61,137,227,115,2,231,108,154,51,156,228,154,84,150,116,99,174,229, -220,162,185,23,230,233,206,203,158,119,60,89,53,89,144,124,56,133,152,18, -151,178,63,229,131,32,66,80,47,24,79,229,167,110,77,29,19,242,132,155,133, -79,69,190,162,141,162,81,177,183,184,74,60,146,230,157,86,149,246,56,221, -59,125,67,250,104,134,79,70,117,198,51,9,79,82,43,121,145,25,146,185,35, -243,77,86,68,214,222,172,207,217,113,217,45,57,148,156,148,156,163,82,13, -105,150,180,43,215,48,183,40,183,79,102,43,43,147,13,228,121,230,109,202, -27,147,135,202,247,228,35,249,115,243,219,21,108,133,76,209,163,180,82, -174,80,14,22,76,47,168,43,120,91,24,91,120,184,72,189,72,90,212,51,223, -102,254,234,249,35,11,130,22,124,189,144,176,80,184,176,179,216,184,120, -89,241,224,34,191,69,187,22,35,139,83,23,119,46,49,93,82,186,100,120,105, -240,210,125,203,104,203,178,150,253,80,226,88,82,85,242,106,121,220,242, -142,82,131,210,165,165,67,43,130,87,52,149,169,148,201,203,110,174,244, -90,185,99,21,97,149,100,85,239,106,151,213,91,86,127,42,23,149,95,172,112, -172,168,174,248,176,70,184,230,226,87,78,95,213,124,245,121,109,218,218, -222,74,183,202,237,235,72,235,164,235,110,172,247,89,191,175,74,189,106, -65,213,208,134,240,13,173,27,241,141,229,27,95,109,74,222,116,161,122,106, -245,142,205,180,205,202,205,3,53,97,53,237,91,204,182,172,219,242,161,54, -163,246,122,157,127,93,203,86,253,173,171,183,190,217,38,218,214,191,221, -119,123,243,14,131,29,21,59,222,239,148,236,188,181,43,120,87,107,189,69, -125,245,110,210,238,130,221,143,26,98,27,186,191,230,126,221,184,71,119, -79,197,158,143,123,165,123,7,246,69,239,235,106,116,111,108,220,175,191, -191,178,9,109,82,54,141,30,72,58,112,229,155,128,111,218,155,237,154,119, -181,112,90,42,14,194,65,229,193,39,223,166,124,123,227,80,232,161,206,195, -220,195,205,223,153,127,183,245,8,235,72,121,43,210,58,191,117,172,45,163, -109,160,61,161,189,239,232,140,163,157,29,94,29,71,190,183,255,126,239, -49,227,99,117,199,53,143,87,158,160,157,40,61,241,249,228,130,147,227,167, -100,167,158,157,78,63,61,212,153,220,121,247,76,252,153,107,93,81,93,189, -103,67,207,158,63,23,116,238,76,183,95,247,201,243,222,231,143,93,240,188, -112,244,34,247,98,219,37,183,75,173,61,174,61,71,126,112,253,225,72,175, -91,111,235,101,247,203,237,87,60,174,116,244,77,235,59,209,239,211,127, -250,106,192,213,115,215,248,215,46,93,159,121,189,239,198,236,27,183,110, -38,221,28,184,37,186,245,248,118,246,237,23,119,10,238,76,220,93,122,143, -120,175,252,190,218,253,234,7,250,15,234,127,180,254,177,101,192,109,224, -248,96,192,96,207,195,89,15,239,14,9,135,158,254,148,255,211,135,225,210, -71,204,71,213,35,70,35,141,143,157,31,31,27,13,26,189,242,100,206,147,225, -167,178,167,19,207,202,126,86,255,121,235,115,171,231,223,253,226,251,75, -207,88,252,216,240,11,249,139,207,191,174,121,169,243,114,239,171,169,175, -58,199,35,199,31,188,206,121,61,241,166,252,173,206,219,125,239,184,239, -186,223,199,189,31,153,40,252,64,254,80,243,209,250,99,199,167,208,79,247, -62,231,124,254,252,47,247,132,243,251,128,57,37,17,0,0,0,6,98,75,71,68, -0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,18,0,0,11, -18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,218,11,9,0,17,14,193,200,229, -101,0,0,0,218,73,68,65,84,56,203,157,146,81,110,196,32,12,68,223,67,217, -195,166,7,218,244,168,43,5,201,253,8,110,128,178,106,85,75,200,128,61,158, -177,193,39,132,192,14,70,196,6,108,64,237,60,159,122,6,240,113,231,144, -241,2,16,237,70,173,234,171,237,211,87,58,107,57,85,125,169,87,1,128,172, -28,17,219,161,231,12,222,35,30,25,239,84,92,118,64,28,77,200,19,34,87,198, -184,23,51,97,137,136,109,136,76,73,113,239,155,187,20,164,186,162,86,91, -249,100,77,185,217,74,87,16,245,84,235,160,96,7,5,236,135,53,157,153,148, -124,43,24,130,141,93,173,251,26,63,20,129,241,93,89,61,219,141,249,57,41, -117,205,210,15,105,85,64,111,88,153,21,244,255,161,247,51,48,199,84,122, -166,76,206,187,119,224,126,6,229,55,96,7,122,92,41,99,215,78,44,117,209, -255,219,129,170,107,182,63,216,242,123,255,203,190,0,136,139,174,86,85, -238,67,201,0,0,0,0,73,69,78,68,174,66,96,130}; - static size_t xml_res_size_4 = 2989; static unsigned char xml_res_file_4[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0, @@ -15580,71 +15580,90 @@ static unsigned char xml_res_file_8[] = { 22,138,34,50,137,8,19,192,47,251,204,72,98,41,90,148,202,0,0,0,0,73,69, 78,68,174,66,96,130}; -static size_t xml_res_size_9 = 401875; +static size_t xml_res_size_9 = 400228; static unsigned char xml_res_file_9[] = { 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,117,116,102,45,56,34,63,62,10,60,114,101, 115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68, -95,67,65,84,95,67,76,65,83,83,73,70,34,32,115,117,98,99,108,97,115,115, -61,34,67,97,116,67,108,97,115,115,105,102,80,97,110,101,108,34,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,49,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,45,49,44,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,33,45,45,32,67,114,101,97,116,101,32,67,117,115,116,111,109,32,66,114, -101,97,107,115,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,114,101,97,116,101,32,67,117,115,116,111,109,32,66,114,101,97,107,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,119,101,105,103,104,116,62,98,111,108,100,60,47,119,101,105,103,104, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,102,111,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34, +83,112,97,116,105,97,108,87,101,105,103,104,116,115,95,66,109,112,34,62, +71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, +48,48,57,45,84,111,111,108,66,97,114,66,105,116,109,97,112,115,95,51,46, +112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,34,32,115,117,98,99, +108,97,115,115,61,34,67,97,116,67,108,97,115,115,105,102,80,97,110,101, +108,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,49,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,45,49,44,49,48,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,33,45,45,32,67,114,101,97,116,101,32,67,117,115,116, +111,109,32,66,114,101,97,107,115,32,45,45,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,114,101,97,116,101,32,67,117,115,116,111,109,32, +66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,53,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,119, +101,105,103,104,116,62,98,111,108,100,60,47,119,101,105,103,104,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,102,111,110,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,45,49,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95, +67,85,82,95,67,65,84,83,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,53,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,45,49,44,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,95,67,85,82,95,67,65,84,83,95,67,72,79,73,67,69,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, -48,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,119,120,73,68,95,78,69,87,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78, -101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,78,69,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65, +67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95, +84,73,84,76,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,84,105,116, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85, 95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, @@ -15653,162 +15672,93 @@ static unsigned char xml_res_file_9[] = { 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,67,72,65, -78,71,69,95,84,73,84,76,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32, -84,105,116,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,68,69,76,69,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,108,101, -116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85, -95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,51,48,48,44,32,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,56,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,67,114,101,97,116,101,32, -67,117,115,116,111,109,32,66,114,101,97,107,115,32,45,45,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,45,49,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +68,69,76,69,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,108,101,116,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65, +67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,51,48,48,44,32,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,45,49,44,56,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,33,45,45,32,67,114,101,97,116,101,32,67,117,115,116,111, +109,32,66,114,101,97,107,115,32,45,45,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +45,49,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,114,111,119,115,62,53,60,47,114,111,119,115,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,50,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103, +97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120, -71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,53,60,47,114,111, -119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112, -62,50,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,104,103,97,112,62,53,60,47,104,103,97,112,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,115,115, -111,99,46,32,86,97,114,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,65,83,83,79,67, -95,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,55,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,47,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99,111, -110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,95,65,83,83,79,67,95,86,65,82,95,84,77,34, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,115,115,111,99,46,32, +86,97,114,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,95,65,83,83,79,67,95,86,65,82,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,53,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +60,115,105,122,101,62,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,105,116,101,109,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99,111,110,116,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,65,83,83,79,67,95,86,65,82,95,84,77,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,53,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,66,82,69,65,75,83,95, -67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110, -116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,105,116,101,109,62,81,117,97,110,116,105,108,101,60,47,105, -116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,105,116,101,109,62,85,110,105,113,117,101,32,86,97,108,117,101, -115,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,105,116,101,109,62,78,97,116,117,114,97,108,32, -66,114,101,97,107,115,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,105,116,101,109,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116, -101,109,62,85,115,101,114,32,68,101,102,105,110,101,100,60,47,105,116,101, -109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99, -111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,101,108,101,99,116,105,111,110,62,49,60,47,115,101,108, -101,99,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,111,108,111,114,32,83,99,104,101,109,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,79,76,79,82, -95,83,67,72,69,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,115,101,113,117, -101,110,116,105,97,108,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,100,105,118, -101,114,103,105,110,103,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,116,104,101, -109,97,116,105,99,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,99,117,115,116,111, -109,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32, +62,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, 76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, @@ -15816,369 +15766,304 @@ static unsigned char xml_res_file_9[] = { 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,97,116,101,103,111,114,105,101,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95, -78,85,77,95,67,65,84,83,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,49,60,47,105, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,95,66,82,69,65,75,83,95,67,72,79,73,67,69, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116, +101,109,62,81,117,97,110,116,105,108,101,60,47,105,116,101,109,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101, +109,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60,47,105,116,101, +109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +105,116,101,109,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60, +47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,105,116,101,109,62,69,113,117,97,108,32,73,110,116,101,114, +118,97,108,115,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,85,115,101,114,32,68, +101,102,105,110,101,100,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,99,111,110,116,101,110,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101, +99,116,105,111,110,62,49,60,47,115,101,108,101,99,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,32,83,99, +104,101,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,95,67,79,76,79,82,95,83,67,72,69,77,69,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,105,116,101,109,62,115,101,113,117,101,110,116,105,97,108,60,47, +105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,105,116,101,109,62,100,105,118,101,114,103,105,110,103,60,47, +105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,105,116,101,109,62,116,104,101,109,97,116,105,99,60,47,105, 116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,105,116,101,109,62,50,60,47,105,116,101,109,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,51, -60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,105,116,101,109,62,52,60,47,105,116,101,109,62,10,32, +32,32,60,105,116,101,109,62,99,117,115,116,111,109,60,47,105,116,101,109, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99,111, +110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,97,116,101,103,111,114,105,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84, +83,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,105,116,101,109,62,49,60,47,105,116,101,109,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101, -109,62,53,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,54,60,47,105,116,101,109, +109,62,50,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,51,60,47,105,116,101,109, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105, -116,101,109,62,55,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,56,60,47,105,116, +116,101,109,62,52,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,53,60,47,105,116, 101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,105,116,101,109,62,57,60,47,105,116,101,109,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,49,48, -60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,85,78,73,70,95,68,73, -83,84,95,77,73,78,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,117,110,105,46,32,100,105, -115,116,46,32,77,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,82, -73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82, -84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,60,105,116,101,109,62,54,60,47,105,116,101,109,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,55,60, +47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,105,116,101,109,62,56,60,47,105,116,101,109,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109, +62,57,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,105,116,101,109,62,49,48,60,47,105,116,101,109, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,99,111, +110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77, -73,78,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77,73,78,95, +76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,117,110,105,46,32,100,105,115,116,46,32,77,105, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, 65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77,65,88,95,76, -66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,77,97,120,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77, -65,88,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77,73,78,95,84,88,84,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +85,78,73,70,95,68,73,83,84,95,77,65,88,95,76,66,76,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,97, +120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, 65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,52,48,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10, +111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,45,49,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,73,68,95,67,65,84,69,71,79,82,89,95, -69,68,73,84,79,82,95,83,65,86,69,95,67,65,84,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,97, -116,101,103,111,114,105,101,115,32,116,111,32,84,97,98,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,45,49,44,56,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,76,105,110,101,34,32,110,97,109,101,61, -34,115,116,108,105,110,101,95,105,100,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,52,48,48,44,49,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,76,73,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,54,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,45,49,44,56,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,33,45,45,32,69,100,105,116,32,67,117,115, -116,111,109,32,66,114,101,97,107,115,45,45,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,95,85,78,73,70,95,68,73,83,84,95,77,65,88,95,84,88,84,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +52,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49, +44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,67,65,84,69,71,79,82,89,95,69,68,73,84,79,82,95, +83,65,86,69,95,67,65,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,67,97,116,101,103,111,114,105, +101,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,45,49,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,69,100,105,116,32,67,117,115,116,111,109,32,66,114, -101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,119,101,105,103,104,116,62,98,111,108,100,60,47,119,101, -105,103,104,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,102, -111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,68,101,116,97,105, -108,32,69,100,105,116,32,45,45,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,99,117, -115,116,111,109,32,108,97,98,101,108,115,32,45,45,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +99,76,105,110,101,34,32,110,97,109,101,61,34,115,116,108,105,110,101,95, +105,100,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,52,48,48,44,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,73,95,72,79,82, +73,90,79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,54,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +45,49,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,33, +45,45,32,69,100,105,116,32,67,117,115,116,111,109,32,66,114,101,97,107, +115,45,45,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, +116,32,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,48,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,111,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,119,101,105,103,104,116,62,98,111,108,100, +60,47,119,101,105,103,104,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,33,45,45,32,68, +101,116,97,105,108,32,69,100,105,116,32,45,45,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +33,45,45,32,99,117,115,116,111,109,32,108,97,98,101,108,115,32,45,45,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, -34,73,68,95,65,85,84,79,95,76,65,66,69,76,83,95,67,66,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,65,117,116,111,109,97,116,105,99,32,76,97,98,101,108, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, -49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, +109,101,61,34,73,68,95,65,85,84,79,95,76,65,66,69,76,83,95,67,66,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,49,53,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32, -110,97,109,101,61,34,73,68,95,67,65,84,95,66,85,84,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,56,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,103,62,35,51,70,55,48,65,54, -60,47,98,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124, -119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70, -95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,95,67,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,97,108,117,101,62,99,97,116,101,103,111,114,121,32,49,60,47, -118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83, -69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69, -78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,73,68,95,66,82,75,95,82,65,68,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82, -79,85,80,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73, -70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,95,66,82,75,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,98,114,101,97,107,32,48,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95, -83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,117,116,111,109,97,116,105,99,32,76, +97,98,101,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,66, -82,75,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,62,48,46,48,48,48,48,48,48,50,60,47,118,97,108,117,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80, -82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65, -67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,53,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, 116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116,109,97, -112,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,66,85,84,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,56,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,103,62,35,51,70, -55,48,65,54,60,47,98,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116, +109,97,112,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,66,85,84,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,56,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,103,62,35, +51,70,55,48,65,54,60,47,98,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, 73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86, 69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32, @@ -16218,147 +16103,37 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116, 116,111,110,34,32,110,97,109,101,61,34,73,68,95,66,82,75,95,82,65,68,34, -47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69, -83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68, -69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,66,82, -75,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,98,114,101,97,107,32,48,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95, -69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,95,66,82,75,95,84,88,84,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,46,48,48, -48,48,48,48,50,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118, +97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69, -78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95, -73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67, +69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109,101, -61,34,73,68,95,67,65,84,95,66,85,84,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,49,49,44,56,100,60,47,115,105,122,101,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,103,62,35,51,70,55,48,65,54,60,47,98,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82, -69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68, -68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34, -73,68,95,67,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -118,97,108,117,101,62,99,97,116,101,103,111,114,121,32,49,60,47,118,97, -108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116, -121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69, -82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, -61,34,73,68,95,66,82,75,95,82,65,68,34,47,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69, -95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,95,66,82,75,95,76,66,76,34,62,10,32,32,32, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,66,82,75,95,76,66,76,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,98,114,101,97,107,32,48,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82, -69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68, -68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,98,114,101,97,107,32,48, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119, +120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72, +73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,115,105,122,101,62,51,44,45,49,100,60,47,115,105,122,101,62,10,32,32, @@ -17140,6 +16915,67 @@ static unsigned char xml_res_file_9[] = { 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,66,82,75,95,82,65,68,34,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86, +69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97, +109,101,61,34,73,68,95,66,82,75,95,76,66,76,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,98,114,101,97,107,32,48,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69, +82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,51,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,95,66,82,75,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +97,108,117,101,62,48,46,48,48,48,48,48,48,50,60,47,118,97,108,117,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, +95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83, +80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, 65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, @@ -17150,328 +16986,518 @@ static unsigned char xml_res_file_9[] = { 47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,66,105,116,109,97,112,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95, +66,85,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, +49,44,56,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,103,62,35,51,70,55,48,65,54,60,47,98,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82, +69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80, +65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,84,88, +84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,99,97, +116,101,103,111,114,121,32,49,60,47,118,97,108,117,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,82,79,67, +69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95, +69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,66,82,75,95, +82,65,68,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119, +120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72, +73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,49,48,100, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +95,66,82,75,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,98,114,101,97,107,32,48,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65, +67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,45,49,100, 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,124,119, -120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,54,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,33,45,45, -32,115,108,105,100,101,114,32,98,97,114,32,45,45,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,77,73,78,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, -84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,66,82,75,95,84,88, +84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,46, +48,48,48,48,48,48,50,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83, +95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,124,119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69, +78,95,73,70,95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,108,105,100,101,114,34,32,110,97,109,101,61,34,73,68,95,66,82,75,95, -83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,56,48,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,116,121,108,101,62,119,120,83,76,95,86,69,82,84,73,67, -65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82,79, -87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,77, -65,88,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,46,48,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,82,73,71,72,84,124,32,119,120,65,76,76,60,47,102,108,97,103,62, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32, +110,97,109,101,61,34,73,68,95,67,65,84,95,66,85,84,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,56,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,103,62,35,51,70,55,48,65,54, +60,47,98,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124, +119,120,82,69,83,69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70, +95,72,73,68,68,69,78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,118,97,108,117,101,62,99,97,116,101,103,111,114,121,32,49,60,47, +118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,82,69,83, +69,82,86,69,95,83,80,65,67,69,95,69,86,69,78,95,73,70,95,72,73,68,68,69, +78,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, +82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,82,73,71,72,84,32,124,32,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, +79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,53,44,49,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +69,88,80,65,78,68,124,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,54,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,33,45,45,32,115,108,105,100,101,114,32,98,97,114,32,45, +45,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,77,73,78,95,76,66,76,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,65,66,79,85, -84,66,79,88,34,32,115,117,98,99,108,97,115,115,61,34,65,98,111,117,116, -68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34, +73,68,95,66,82,75,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44, +56,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,83,76, +95,86,69,82,84,73,67,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109, -101,61,34,119,120,73,68,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115, -111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,97,98,111,117,116,45, -103,101,111,100,97,45,108,111,103,111,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,82,73,71, -72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -111,112,121,114,105,103,104,116,32,40,67,41,32,121,101,97,114,45,121,101, -97,114,32,98,121,32,76,117,99,32,65,110,115,101,108,105,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,76,69,70, -84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,65,76,76,95,82,73,71,72,84,83,95,82,69,83,69,82,86,69, -68,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,108, -108,32,82,105,103,104,116,115,32,82,101,115,101,114,118,101,100,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,86,69,82,83,73,79, -78,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,71,101,111,68,97,32,109,97,106,46,109,105,110,46,98,108,100, -32,40,116,121,112,101,41,44,32,100,97,121,32,109,111,110,116,104,32,121, -101,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +101,61,34,73,68,95,77,65,88,95,76,66,76,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,82,73,71,72,84,124,32,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,82,73,71,72,84,32,124,32,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61, +34,73,68,68,95,65,66,79,85,84,66,79,88,34,32,115,117,98,99,108,97,115,115, +61,34,65,98,111,117,116,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116,109, +97,112,34,32,110,97,109,101,61,34,119,120,73,68,95,83,84,65,84,73,67,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, +97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, +57,45,97,98,111,117,116,45,103,101,111,100,97,45,108,111,103,111,46,112, +110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +95,67,79,80,89,82,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,114,105,103,104,116,32,40,67,41,32, +121,101,97,114,45,121,101,97,114,32,98,121,32,76,117,99,32,65,110,115,101, +108,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,115,116,121,108,101,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, 47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79, 80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,65,76,76,95,82,73,71,72,84,83,95, +82,69,83,69,82,86,69,68,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114, +118,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +95,86,69,82,83,73,79,78,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,71,101,111,68,97,32,109,97,106,46,109, +105,110,46,98,108,100,32,40,116,121,112,101,41,44,32,100,97,121,32,109, +111,110,116,104,32,121,101,97,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,84,79,80,124,119,120,76,69,70,84,124,119,120,82,73,71, +72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68, +74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, +111,120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,69,67,75,95,84,69, +83,84,77,79,68,69,95,83,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,116,97,98,108,101,32,86,101,114,115,105, +111,110,32,97,110,100,32,66,117,103,32,70,105,120,101,115,32,79,110,108, +121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,84,79,80,124,119,120,76,69,70,84,124,119,120,82,73,71, +72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68, +74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,50,48,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101, -61,34,73,68,67,95,67,72,69,67,75,95,84,69,83,84,77,79,68,69,95,83,84,65, -66,76,69,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,116,97,98,108,101,32,86,101,114,115,105,111,110,32,97,110,100,32,66, -117,103,32,70,105,120,101,115,32,79,110,108,121,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79, -80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,50,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, +101,61,34,73,68,95,67,72,69,67,75,85,80,68,65,84,69,83,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,101,99, +107,32,85,112,100,97,116,101,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,119,120,73,68,95,68,79,78,65,84,69,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,111,110, +97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120, +66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,116,105,116,108,101,62,65,98,111,117,116,32,71,101,111,68,97, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, +100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, +69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, +121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,73,68,68,95,82,65,78,68,79,77,73,90,65,84, +73,79,78,34,32,115,117,98,99,108,97,115,115,61,34,82,97,110,100,111,109, +105,122,97,116,105,111,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32, +32,60,115,105,122,101,62,53,48,44,49,53,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,60,112,111,115,62,52,48,48,44,55,100,60,47,112,111,115, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,75,34,62,10, +32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,49,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,60,112,111,115,62,52,48,48,44,50,55,100, +60,47,112,111,115,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,117, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,115,105,122,101,62,52,55,48,44,50,48,48,100,60,47, +115,105,122,101,62,10,32,32,32,32,60,116,105,116,108,101,62,82,97,110,100, +111,109,105,122,97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32, +32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, +84,73,79,78,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108, +101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,95,76,65,66,69,76,95,80,82,69,67,73,83,73,79,78, +95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,83,101,116,68,105, +115,112,108,97,121,80,114,101,99,105,115,105,111,110,68,108,103,34,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,50,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,53,44,50,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,67,72,69,67, -75,85,80,68,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,104,101,99,107,32,85,112,100,97,116,101,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,50,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,68,79,78,65,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,68,111,110,97,116,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,53,44,50,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,124,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,65,98,111,117,116,32,71,101,111,68,97,60,47,116,105,116,108,101, -62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, -110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119, -120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, -119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, -61,34,73,68,68,95,82,65,78,68,79,77,73,90,65,84,73,79,78,34,32,115,117, -98,99,108,97,115,115,61,34,82,97,110,100,111,109,105,122,97,116,105,111, -110,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32,32,60,115,105,122,101, -62,53,48,44,49,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,60, -112,111,115,62,52,48,48,44,55,100,60,47,112,111,115,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,79,75,34,62,10,32,32,32,32,32,32,60, -115,105,122,101,62,53,48,44,49,53,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,60,112,111,115,62,52,48,48,44,50,55,100,60,47,112,111,115,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,117,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,115,105,122,101,62,52,55,48,44,50,48,48,100,60,47,115,105,122,101,62, -10,32,32,32,32,60,116,105,116,108,101,62,82,97,110,100,111,109,105,122, -97,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101, -110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10, -32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, -61,34,73,68,95,76,65,66,69,76,95,80,82,69,67,73,83,73,79,78,95,68,76,71, -34,32,115,117,98,99,108,97,115,115,61,34,83,101,116,68,105,115,112,108, -97,121,80,114,101,99,105,115,105,111,110,68,108,103,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, -105,115,105,111,110,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,112,105,110,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,76,65, -66,69,76,95,80,82,69,67,73,83,73,79,78,95,83,80,73,78,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48, +122,101,62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101, +99,105,115,105,111,110,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, 44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,82, -79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,112,105,110,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,76, +65,66,69,76,95,80,82,69,67,73,83,73,79,78,95,83,80,73,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80, +82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, +101,61,34,73,68,67,95,70,73,88,95,80,79,73,78,84,95,67,72,69,67,75,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, +108,119,97,121,115,32,117,115,105,110,103,32,102,105,120,101,100,45,112, +111,105,110,116,32,110,111,116,97,116,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, 119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60,47,115,105, @@ -17479,85 +17505,67 @@ static unsigned char xml_res_file_9[] = { 62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73, -68,67,95,70,73,88,95,80,79,73,78,84,95,67,72,69,67,75,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,108,119,97, -121,115,32,117,115,105,110,103,32,102,105,120,101,100,45,112,111,105,110, -116,32,110,111,116,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, -49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,45,49,44,53,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68, -95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, -78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,83, -101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, -60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, -100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, -116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, -69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71,79,82, -73,69,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,78,117,109, -67,97,116,101,103,111,114,105,101,115,68,108,103,34,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, +90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95, +67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101, +62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105, +111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101, +114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, +60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, +83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, +115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, +111,103,34,32,110,97,109,101,61,34,73,68,95,78,85,77,95,67,65,84,69,71, +79,82,73,69,83,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,78, +117,109,67,97,116,101,103,111,114,105,101,115,68,108,103,34,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,49,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, 122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, @@ -22417,80 +22425,101 @@ static unsigned char xml_res_file_9[] = { 34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95, 88,67,79,79,82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +67,69,78,84,69,82,124,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101, +34,32,110,97,109,101,61,34,73,68,67,95,88,67,79,79,82,68,95,84,73,77,69, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34, -73,68,67,95,88,67,79,79,82,68,95,84,73,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, +79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,50,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, +73,67,95,89,67,79,79,82,68,95,86,65,82,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,45,99,111, +111,114,100,105,110,97,116,101,32,118,97,114,105,97,98,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, +70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,76,69,70,84,124, -119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, +95,89,67,79,79,82,68,73,78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,89,67,79,79,82, -68,95,86,65,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,89,45,99,111,111,114,100,105,110,97, -116,101,32,118,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,124,119,120,65,76,76,124,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -22501,553 +22530,533 @@ static unsigned char xml_res_file_9[] = { 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,73, -78,65,84,69,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,89,67,79,79,82,68,95, +84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,89,67, -79,79,82,68,95,84,73,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119,120, +84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,48,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95,77,69,84,82,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,32,68,105,115,116,97,110,99,101,32,109,101,116, +114,105,99,58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,86,69,82,84,73,67,65,76,124,119,120,76,69,70,84,124,119,120,82,73,71, -72,84,124,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,51,48,44,50,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95, -77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,57,56,44,45,49,100,60,47,115,105,122,101,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,32,68,105,115,116,97,110,99,101, -32,109,101,116,114,105,99,58,32,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67, -69,95,77,69,84,82,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,71,101,111,109,101,116,114,105,99,32,99,101,110,116, +114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,111,109,101,116, -114,105,99,32,99,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,110,111,116,101,98,111,111,107,112,97,103,101,34,32,110,97,109,101,61, +34,73,68,67,95,78,66,95,80,65,71,69,95,77,85,76,84,73,95,86,65,82,83,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103, -101,34,32,110,97,109,101,61,34,73,68,67,95,78,66,95,80,65,71,69,95,77,85, -76,84,73,95,86,65,82,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,62,10, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, -73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,49,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,87, +69,73,71,72,84,83,95,68,73,83,84,95,86,65,82,83,95,76,73,83,84,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110, +116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110, -97,109,101,61,34,73,68,67,95,87,69,73,71,72,84,83,95,68,73,83,84,95,86, -65,82,83,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,49,54,48,44,51,48,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,76,66,95,77,85,76,84,73,80,76,69,32,124, +32,119,120,76,66,95,72,83,67,82,79,76,76,60,47,115,116,121,108,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, -54,48,44,51,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, -66,95,77,85,76,84,73,80,76,69,32,124,32,119,120,76,66,95,72,83,67,82,79, -76,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,32,124,32,119,120, +84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, +95,68,73,83,84,95,84,82,65,78,83,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,114,97,110,115, +102,111,114,109,97,116,105,111,110,58,32,32,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84, +65,78,67,69,95,84,82,65,78,83,70,79,82,77,65,84,73,79,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,57,56,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,32,124,32,119,120,84,79,80,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95,84,82,65,78,83, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,32,124,32,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,84,114,97,110,115,102,111,114,109,97,116,105,111,110, -58,32,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,83,84,65,84,73,67,95,68,73,83,84,95,77,69,84,82,73,67,49,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,105,115,116,97,110,99,101,32,109,101,116,114,105,99,58,32, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, +34,73,68,67,95,68,73,83,84,65,78,67,69,95,77,69,84,82,73,67,49,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,57,56,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, -101,61,34,73,68,67,95,68,73,83,84,65,78,67,69,95,84,82,65,78,83,70,79,82, -77,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,56,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,32,124,32,119,120,84,79,80,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,58,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,78,111,116, +101,98,111,111,107,34,32,110,97,109,101,61,34,73,68,67,95,78,66,95,68,73, +83,84,65,78,67,69,95,87,69,73,71,72,84,83,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111, +111,107,112,97,103,101,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68, +73,79,95,68,73,83,84,65,78,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,73,83,84,95, -77,69,84,82,73,67,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101, -32,109,101,116,114,105,99,58,32,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79,80,124,119,120,76,69, +70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,73,83,84,65,78,67, -69,95,77,69,84,82,73,67,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,56,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, +99,105,102,121,32,98,97,110,100,119,105,100,116,104,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50, -56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,86,97,114,105,97,98,108,101,115,60,47,108,97,98,101,108,62,10,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116, -104,111,100,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109,101,61,34,73, -68,67,95,78,66,95,68,73,83,84,65,78,67,69,95,87,69,73,71,72,84,83,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -110,111,116,101,98,111,111,107,112,97,103,101,34,32,110,97,109,101,61,34, -73,68,67,95,82,65,68,73,79,95,68,73,83,84,65,78,67,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79, -80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, +67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,84,72,82,69,83,72, +79,76,68,95,69,68,73,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,112,101,99,105,102,121,32,98,97,110,100,119,105,100,116,104,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,73,71,72,84,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,76,69,70, +84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,51,48,44,50,60,47,115,105,122,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, -84,72,82,69,83,72,79,76,68,95,69,68,73,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,73, -71,72,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105,100,101,114,34, +32,110,97,109,101,61,34,73,68,67,95,84,72,82,69,83,72,79,76,68,95,83,76, +73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,48,60,47,109,105, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,83,76, +95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68, -124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, +48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,50,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105, -100,101,114,34,32,110,97,109,101,61,34,73,68,67,95,84,72,82,69,83,72,79, -76,68,95,83,76,73,68,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,53,48,44,45,49,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62, -48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120, +34,32,110,97,109,101,61,34,73,68,67,95,67,72,75,95,73,78,86,69,82,83,69, +95,68,73,83,84,65,78,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108, +32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117, 101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +67,95,85,83,69,95,73,78,86,69,82,83,69,95,68,73,83,84,65,78,67,69,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,85,115,101,32,105,110,118,101,114,115,101,32,100,105,115, +116,97,110,99,101,63,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, -120,34,32,110,97,109,101,61,34,73,68,67,95,67,72,75,95,73,78,86,69,82,83, -69,95,68,73,83,84,65,78,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108, -117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,67,95,85,83,69,95,73,78,86,69,82,83,69,95,68,73,83,84,65,78,67, -69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,85,115,101,32,105,110,118,101,114,115,101,32,100, -105,115,116,97,110,99,101,63,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,50,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,50,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,95,80,79,87,69,82,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,83,84,65,84,73,67,95,80,79,87,69,82,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,119, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,119, 101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, @@ -23892,292 +23901,268 @@ static unsigned char xml_res_file_9[] = { 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, -100,97,112,116,105,118,101,32,107,101,114,110,101,108,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75, +101,114,110,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,56,48,44,51,50,48,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,52,56,48,44,51,50,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,115,116,97,110,99,101,32,87,101,105,103,104,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,48,48,44,53,52,48,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,114,101,97,116,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, +69,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +49,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32, +87,101,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48, +48,44,53,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61, -34,73,68,68,95,65,68,68,95,73,68,95,86,65,82,73,65,66,76,69,34,32,115,117, -98,99,108,97,115,115,61,34,65,100,100,73,100,86,97,114,105,97,98,108,101, -34,62,10,32,32,32,32,60,116,105,116,108,101,62,65,100,100,32,78,101,119, -32,73,68,32,86,97,114,105,97,98,108,101,60,47,116,105,116,108,101,62,10, -32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116, -101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,69,110,116,101,114,32,110,101,119,32,73, -68,32,118,97,114,105,97,98,108,101,32,110,97,109,101,58,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, +80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, 73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,67,95,78,69,87,95,73,68,95,86,65,82, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, -62,80,79,76,89,95,73,68,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69, -82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101, +97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111, +115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, +79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,65,68,68,95, +73,68,95,86,65,82,73,65,66,76,69,34,32,115,117,98,99,108,97,115,115,61, +34,65,100,100,73,100,86,97,114,105,97,98,108,101,34,62,10,32,32,32,32,60, +116,105,116,108,101,62,65,100,100,32,78,101,119,32,73,68,32,86,97,114,105, +97,98,108,101,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119, +120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79, +88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,119, -120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,69,120,105,115,116,105,110,103,32,86,97,114,105, -97,98,108,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68, -67,95,69,88,73,83,84,73,78,71,95,86,65,82,83,95,76,73,83,84,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57, -48,44,49,48,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,110,116,101,114,32,110,101,119,32,73,68,32,118,97,114,105,97, +98,108,101,32,110,97,109,101,58,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,97,110,99,101,108,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,78,69,87,95,73,68,95,86,65,82,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,80,79,76,89,95,73, +68,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,105,122,101,62,57,48,44,45,49,100,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,82,65, -78,71,69,95,83,69,76,69,67,84,73,79,78,95,68,76,71,34,32,115,117,98,99, -108,97,115,115,61,34,82,97,110,103,101,83,101,108,101,99,116,105,111,110, -68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, +90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, +76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110, -97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +69,120,105,115,116,105,110,103,32,86,97,114,105,97,98,108,101,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, 101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116, +66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,69,88,73,83,84,73,78, +71,95,86,65,82,83,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,48,48,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69, +76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, +73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, +103,34,32,110,97,109,101,61,34,73,68,68,95,82,65,78,71,69,95,83,69,76,69, +67,84,73,79,78,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,82, +97,110,103,101,83,101,108,101,99,116,105,111,110,68,108,103,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, 105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120, -73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105, +122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, 105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100, -105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82, -65,68,73,79,95,78,69,87,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,78,101,119,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,78,101,119,32,115, -101,108,101,99,116,105,111,110,60,47,116,111,111,108,116,105,112,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108, -117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -49,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,67,95,82,65,68,73,79,95,83,85,66,83,69,76,69,67,84,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,32,70,114,111,109,32,67,117, -114,114,101,110,116,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,83,101,108,101,99, -116,32,102,114,111,109,32,99,117,114,114,101,110,116,32,115,101,108,101, -99,116,105,111,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, +108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,95,78,69,87,83,69,76, +69,67,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,83,101,108, +101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111, +111,108,116,105,112,62,78,101,119,32,115,101,108,101,99,116,105,111,110, +60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +118,97,108,117,101,62,49,60,47,118,97,108,117,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47, 115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -24187,214 +24172,163 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111, 66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68, -73,79,95,65,80,80,69,78,68,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,65,112,112,101,110,100,32,84,111,32,67,117,114,114,101,110,116, +73,79,95,83,85,66,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,101,108,101,99,116,32,70,114,111,109,32,67,117,114,114,101,110,116, 32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,116,111,111,108,116,105,112,62,65,112,112,101,110,100,32,116,111,32, -99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110,60,47, -116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,116,111,111,108,116,105,112,62,83,101,108,101,99,116,32,102,114,111, +109,32,99,117,114,114,101,110,116,32,115,101,108,101,99,116,105,111,110, +60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,73,68,67,95,82,65,68,73,79,95,65,80,80,69, +78,68,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112, +101,110,100,32,84,111,32,67,117,114,114,101,110,116,32,83,101,108,101,99, +116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116, +105,112,62,65,112,112,101,110,100,32,116,111,32,99,117,114,114,101,110, +116,32,115,101,108,101,99,116,105,111,110,60,47,116,111,111,108,116,105, +112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84, -79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,86,97,114,105, -97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,50,48,60,47,98,111,114,100,101,114,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101, +99,116,105,111,110,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, +44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,70,73,69,76,68,95, +67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +115,105,122,101,62,55,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,70,73,69,76,68,95,67, -72,79,73,67,69,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,95,83,69,76,95,82,65,78,71,69,95,66,85,84,84,79, -78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,65,108, -108,32,73,110,32,82,97,110,103,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68, -95,77,73,78,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, +34,73,68,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,61,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51, +60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, 44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,70, -73,69,76,68,95,83,84,65,84,73,67,95,84,88,84,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,99,104,111,111,115,101,32,97,32,118,97,114,105,97,98,108, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44, -53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83,69,76,95,82, +65,78,71,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -38,108,116,59,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +83,101,108,101,99,116,32,65,108,108,32,73,110,32,82,97,110,103,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, 101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122, +32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, 101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, -34,32,110,97,109,101,61,34,73,68,95,77,65,88,95,84,69,88,84,34,62,10,32, +34,32,110,97,109,101,61,34,73,68,95,77,73,78,95,84,69,88,84,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,115,105,122,101,62,53,48,44,45,49,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -24403,331 +24337,405 @@ static unsigned char xml_res_file_9[] = { 71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, -120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,76,105,110,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,116,121,108,101,62,119,120,76,73,95,72,79,82,73,90,79,78, -84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,124, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, +108,116,59,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,95,85,78,68,69,70,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, -101,99,116,32,65,108,108,32,85,110,100,101,102,105,110,101,100,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,70,73,69,76,68,95,83,84,65,84,73,67, +95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,99,104,111,111,115, +101,32,97,32,118,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,95,70,73,69,76,68,50,95,83,84,65,84,73,67,95,84,88,84,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,99,104,111,111,115,101,32,97,32,118,97,114,105,97,98,108,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,61,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +51,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,77,65, +88,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, -120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,86,69, -82,84,95,83,69,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,118,101,114, -116,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,84,79,80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,84,79,80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,65,68,68,95,78,69,73,71,72,83,95,84,79,95,83,69,76,95,66,85, -84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,65,100,100,32,78,101,105,103,104,98,111,114, -115,32,84,111,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,50,53,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,76,105,110,101,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76, +73,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, +111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124, +119,120,66,79,84,84,79,77,124,119,120,69,88,80,65,78,68,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,73,68,95,83,69,76,95,85,78,68,69,70,95,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,101,108,101,99,116,32,65,108,108,32,85,110,100,101, +102,105,110,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,70,73,69,76,68,50,95,83,84,65,84, +73,67,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,99,104,111,111,115,101,32,97,32,118,97, +114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, +101,61,34,73,68,95,73,78,86,69,82,84,95,83,69,76,95,66,85,84,84,79,78,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,73,110,118,101,114,116,32,83,101,108,101,99,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,83,95,84, +79,95,83,69,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,78,101, +105,103,104,98,111,114,115,32,84,111,32,83,101,108,101,99,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,50, -48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,60,47,115,105,122,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,84,79,80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,67,76,69,65,82,95,83,69,76,95,66,85,84,84,79,78,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,108,101,97,114,32,83,101,108,101,99,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, +83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,49,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, 108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60,47,102, 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, 101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,50,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34, -32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,70,73,69,76, -68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,95,67,76,69,65,82,95,83,69,76,95,66,85,84,84, +79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,108,101,97,114,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79, +77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,50,48,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122, +101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,97,114,103,101,116,32,86,97,114,105,97,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,70, +73,69,76,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73, 71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,84,97,114,103,101,116,32,86,97,114,105,97, +98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,70,73, -69,76,68,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +69,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, +95,83,65,86,69,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,44,51,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, +120,34,32,110,97,109,101,61,34,73,68,95,83,69,76,95,67,72,69,67,75,95,66, +79,88,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,101,100,32,61, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,95,67,72,69,67,75,95,66,79,88,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,44,51,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,101,100,32,61,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, -120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,83,69,76,95, -86,65,76,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,95,86,65,76,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, @@ -24936,7 +24944,7 @@ static unsigned char xml_res_file_9[] = { 62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,111,112,101,110,45,102,111,108,100,101,114,46, +99,112,112,36,48,48,57,45,111,112,101,110,45,102,111,108,100,101,114,46, 112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, @@ -24982,7 +24990,7 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95, 78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112, -112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,115, +112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,115, 97,118,101,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, @@ -25186,7 +25194,7 @@ static unsigned char xml_res_file_9[] = { 111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,83,72, 80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,111,112,101,110,45,102,111, +114,99,101,115,46,99,112,112,36,48,48,57,45,111,112,101,110,45,102,111, 108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, 121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121, @@ -25235,7 +25243,7 @@ static unsigned char xml_res_file_9[] = { 32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,79,65,83,67,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, 105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101, -115,46,99,112,112,36,48,48,48,45,115,97,118,101,46,112,110,103,60,47,98, +115,46,99,112,112,36,48,48,57,45,115,97,118,101,46,112,110,103,60,47,98, 105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95, 78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, @@ -26349,62 +26357,45 @@ static unsigned char xml_res_file_9[] = { 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,67,95,85,78,65,82,89,95,79,80,69,82,65,84,79,82,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,32,47,32, -67,111,110,115,116,97,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,85, -78,65,82,89,95,79,80,69,82,65,78,68,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +34,73,68,67,95,85,78,65,82,89,95,79,80,69,82,65,84,79,82,34,47,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,32,47,32,67,111, +110,115,116,97,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,85,78,65,82,89,95, -79,80,69,82,65,78,68,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,111, +109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,85,78,65,82, +89,95,79,80,69,82,65,78,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, @@ -26412,280 +26403,81 @@ static unsigned char xml_res_file_9[] = { 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, 111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110, -97,109,101,61,34,73,68,67,95,69,68,73,84,49,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69, -65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73, -68,68,95,70,73,69,76,68,67,65,76,67,95,68,84,34,32,115,117,98,99,108,97, -115,115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,68,97,116,101, -84,105,109,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,53,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,82,101,115,117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, -44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,65,68,68,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,86,97, -114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,65,100, -100,32,110,101,119,32,99,111,108,117,109,110,32,116,111,32,116,97,98,108, -101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,67,95,68,84,95,82,69,83,85,76,84,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67, -69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, -104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,84,95,82,69, -83,85,76,84,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,67,95,85,78,65,82,89,95,79,80,69, +82,65,78,68,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, 119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83, -73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,112,101,114,97,116,111,114,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, -69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95, -68,84,95,79,80,69,82,65,84,79,82,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,86,97,114,105,97,98,108,101,32,47,32,67,111,110,115,116,97, -110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120, -65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66, -111,120,34,32,110,97,109,101,61,34,73,68,67,95,68,84,95,79,80,69,82,65, -78,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,68,84,95,79,80,69,82,65,78,68,95,84,77,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, -69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109, -101,61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95,66,73,34,32,115,117, -98,99,108,97,115,115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,66, -105,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,69,68,73,84,49,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79, +78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68, +95,70,73,69,76,68,67,65,76,67,95,68,84,34,32,115,117,98,99,108,97,115,115, +61,34,70,105,101,108,100,78,101,119,67,97,108,99,68,97,116,101,84,105,109, +101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101, -115,117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, -86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,53,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115, +117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, @@ -26713,164 +26505,285 @@ static unsigned char xml_res_file_9[] = { 32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,67,95,66,73,78,65,82,89,95,82,69,83,85,76,84,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,82,69, -83,85,76,84,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83, -73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,86,97,114,105,97,98,108,101,32,47,32,67,111,110,115,116,97,110,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,73,68,67,95,68,84,95,82,69,83,85,76,84,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, +101,34,32,110,97,109,101,61,34,73,68,67,95,68,84,95,82,69,83,85,76,84,95, +84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68, -74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120, -34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,79,80,69,82, -65,78,68,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,79,112,101,114,97,116,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68,74,85,83, +84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,79,80,69,82,65,78,68, -49,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +97,109,101,61,34,73,68,67,95,68,84,95,79,80,69,82,65,84,79,82,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, +84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101, +32,47,32,67,111,110,115,116,97,110,116,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, +69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,111,109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68, +67,95,68,84,95,79,80,69,82,65,78,68,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73, -67,84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,112,101,114,97,116,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65, -68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, -32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,79,80,69,82,65, -84,79,82,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,68,84,95,79,80,69, +82,65,78,68,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97, +110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,70,73,69,76,68,67,65, +76,67,95,66,73,34,32,115,117,98,99,108,97,115,115,61,34,70,105,101,108, +100,78,101,119,67,97,108,99,66,105,110,68,108,103,34,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84, +69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,82,101,115,117,108,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112, +97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, 65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, -73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,32,47,32,67, -111,110,115,116,97,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,73,68,95,65,68,68,95,67,79,76,85,77,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,65,100,100,32,110,101,119,32,99,111,108,117,109,110,32,116, +111,32,116,97,98,108,101,60,47,116,111,111,108,116,105,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, 108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, +105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95, +82,69,83,85,76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, +34,73,68,67,95,66,73,78,65,82,89,95,82,69,83,85,76,84,95,84,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, +82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,51, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,32,47,32,67,111, +110,115,116,97,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, @@ -26879,7 +26792,7 @@ static unsigned char xml_res_file_9[] = { 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,111, 109,98,111,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65, -82,89,95,79,80,69,82,65,78,68,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +82,89,95,79,80,69,82,65,78,68,49,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49, 100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, @@ -26889,588 +26802,628 @@ static unsigned char xml_res_file_9[] = { 60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89, +95,79,80,69,82,65,78,68,49,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65, -82,89,95,79,80,69,82,65,78,68,50,95,84,77,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48, -44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, -34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,53,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, -95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, -61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95,76,65,71,34,32,115,117, -98,99,108,97,115,115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,76, -97,103,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,117,108,116,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,52,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,79,112,101,114,97,116,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83, +73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, +67,95,66,73,78,65,82,89,95,79,80,69,82,65,84,79,82,34,47,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,86,97,114,105,97,98,108,101,32,47,32,67,111,110,115,116,97,110,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68, +74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,111,109,98,111,66,111,120, +34,32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,79,80,69,82, +65,78,68,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,67,79,76,85, -77,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,116,111,111,108,116,105,112,62,65,100,100,32,110,101,119,32,99,111, -108,117,109,110,32,116,111,32,116,97,98,108,101,60,47,116,111,111,108,116, -105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,76,65,71,95,82,69,83, -85,76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, 76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, -67,95,76,65,71,95,82,69,83,85,76,84,95,84,77,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,84,79,80,124, -119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, -65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73, -67,84,69,88,84,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,105,103,104,116,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,87,69,73, -71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115, -111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,84,111,111,108,66,97, -114,66,105,116,109,97,112,115,95,51,46,112,110,103,60,47,98,105,116,109, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,100,105,115,97,98,108,101,100,62,71,100,97,65,112,112,82,101,115, -111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,84,111,111,108,66,97, -114,66,105,116,109,97,112,115,95,51,95,100,105,115,97,98,108,101,100,46, -112,110,103,60,47,100,105,115,97,98,108,101,100,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116, -105,112,62,79,112,101,110,32,119,101,105,103,104,116,115,32,102,105,108, -101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,67,95,66,73,78,65,82,89,95,79,80,69,82,65, +78,68,50,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, 114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,67,85,82,82,69,78,84,85,83,69,68,95,87,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,50,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, +68,67,95,69,68,73,84,53,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,70,73, +69,76,68,67,65,76,67,95,76,65,71,34,32,115,117,98,99,108,97,115,115,61, +34,70,105,101,108,100,78,101,119,67,97,108,99,76,97,103,68,108,103,34,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,101,115,117,108,116,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,65,68,68,95,67,79,76,85,77,78,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65, +100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116, +105,112,62,65,100,100,32,110,101,119,32,99,111,108,117,109,110,32,116,111, +32,116,97,98,108,101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,67,95,76,65,71,95,82,69,83,85,76,84,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,67,95,76,65,71,95,82,69,83,85,76, +84,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,84,79,80,124,119,120,65,68,74,85,83,84,95,77,73,78, +83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,50,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, -73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,67,95,76,65,71,95,79,80,69,82,65,78,68,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79, -84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68, -67,95,76,65,71,95,79,80,69,82,65,78,68,95,84,77,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,87,101,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105, +116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,87,69,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, +97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, +57,45,84,111,111,108,66,97,114,66,105,116,109,97,112,115,95,51,46,112,110, +103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,100,105,115,97,98,108,101,100,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, +48,57,45,84,111,111,108,66,97,114,66,105,116,109,97,112,115,95,51,95,100, +105,115,97,98,108,101,100,46,112,110,103,60,47,100,105,115,97,98,108,101, +100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,116,111,111,108,116,105,112,62,79,112,101,110,32,119,101,105,103, +104,116,115,32,102,105,108,101,60,47,116,111,111,108,116,105,112,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,67,85,82,82,69,78, +84,85,83,69,68,95,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,50,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119,120, 65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48, 60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, 60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, 102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101, -120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73, -84,54,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,51,48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82, -69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,71,82, -79,87,124,119,120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86, +97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65,68, +74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,76,65,71,95,79, +80,69,82,65,78,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97, -109,101,61,34,73,68,95,76,65,71,95,85,83,69,95,82,79,87,83,84,65,78,68, -95,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,85,115,101,32,114,111,119,45,115,116,97,110,100,97,114,100,105,122,101, -100,32,119,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,67,95,76,65,71,95,79,80,69,82,65,78,68,95, +84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, -99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,76,65,71,95,73,78, -67,76,85,68,69,95,68,73,65,71,78,79,65,76,95,87,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, -48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,99,108,117,100,101, -32,100,105,97,103,111,110,97,108,32,111,102,32,119,101,105,103,104,116, -115,32,109,97,116,114,105,120,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,84,79,80,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,50,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95, -70,73,69,76,68,67,65,76,67,95,82,65,84,69,34,32,115,117,98,99,108,97,115, -115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,82,97,116,101,68,108, -103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, -65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,51,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119,120,65, -68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,67,95,82,65,84,69,95,79,80,69,82,65,84,79,82,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,82,101,115,117,108,116,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101, +61,34,73,68,67,95,69,68,73,84,54,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,51,48,48,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,76,69,70,84, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,67,79,76,85,77,78,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111, -111,108,116,105,112,62,65,100,100,32,110,101,119,32,99,111,108,117,109, -110,32,116,111,32,116,97,98,108,101,60,47,116,111,111,108,116,105,112,62, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, +111,120,34,32,110,97,109,101,61,34,73,68,95,76,65,71,95,85,83,69,95,82, +79,87,83,84,65,78,68,95,87,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,115,101,32,114,111,119,45,115,116,97,110,100, +97,114,100,105,122,101,100,32,119,101,105,103,104,116,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68, +95,76,65,71,95,73,78,67,76,85,68,69,95,68,73,65,71,78,79,65,76,95,87,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110, +99,108,117,100,101,32,100,105,97,103,111,110,97,108,32,111,102,32,119,101, +105,103,104,116,115,32,109,97,116,114,105,120,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,50,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, +61,34,73,68,68,95,70,73,69,76,68,67,65,76,67,95,82,65,84,69,34,32,115,117, +98,99,108,97,115,115,61,34,70,105,101,108,100,78,101,119,67,97,108,99,82, +97,116,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, +82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99, -101,34,32,110,97,109,101,61,34,73,68,67,95,82,65,84,69,95,82,69,83,85,76, -84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, -95,82,65,84,69,95,82,69,83,85,76,84,95,84,77,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, -73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,51,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67, -84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,87,101,105,103,104,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,67,95,82,65,84,69,95,79,80,69,82,65,84,79,82,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, +49,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,87,69, -73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,84,111,111,108,66,97,114,66, -105,116,109,97,112,115,95,51,46,112,110,103,60,47,98,105,116,109,97,112, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,105, -115,97,98,108,101,100,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,84,111,111,108,66,97,114,66,105,116, -109,97,112,115,95,51,95,100,105,115,97,98,108,101,100,46,112,110,103,60, -47,100,105,115,97,98,108,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,79,112,101,110,32, -119,101,105,103,104,116,115,32,102,105,108,101,60,47,116,111,111,108,116, -105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119,120, 65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34, -73,68,67,95,82,65,84,69,95,87,69,73,71,72,84,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,50,48,44,45,49,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62, -10,32,32,32,32,32,32,60,114,111,119,115,62,51,60,47,114,111,119,115,62, -10,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10, -32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,115, +117,108,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, +69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, -118,101,110,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,68,68, +95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,86,97,114,105,97,98,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,116,111,111,108,116,105,112,62,65,100,100,32,110,101, +119,32,99,111,108,117,109,110,32,116,111,32,116,97,98,108,101,60,47,116, +111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78, +84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,82,65, +84,69,95,82,69,83,85,76,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,67,95,82,65,84,69,95,82,69,83,85,76,84,95,84,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, +73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,61,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +83,84,65,84,73,67,84,69,88,84,52,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,105,103,104,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, +109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,79, +80,69,78,95,87,69,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, +101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,84,111,111, +108,66,97,114,66,105,116,109,97,112,115,95,51,46,112,110,103,60,47,98,105, +116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,100,105,115,97,98,108,101,100,62,71,100,97,65,112,112,82,101,115, +111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,84,111,111,108,66,97, +114,66,105,116,109,97,112,115,95,51,95,100,105,115,97,98,108,101,100,46, +112,110,103,60,47,100,105,115,97,98,108,101,100,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,79, +112,101,110,32,119,101,105,103,104,116,115,32,102,105,108,101,60,47,116, +111,111,108,116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79, +78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, 76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, @@ -27479,16 +27432,67 @@ static unsigned char xml_res_file_9[] = { 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,53, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,97,115,101,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, +97,109,101,61,34,73,68,67,95,82,65,84,69,95,87,69,73,71,72,84,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,50,48, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,60,114,111,119,115,62,51,60,47,114, +111,119,115,62,10,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97, +112,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, +120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,118,101,110,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,53,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,97,115,101,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, @@ -27826,130 +27830,282 @@ static unsigned char xml_res_file_9[] = { 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97, -109,112,59,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77, -124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,55, +44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,95,83,69,76,95,67,72,66,95,73,78,67,76,85,68,69, +95,78,66,82,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, +84,88,84,95,67,72,66,95,73,78,67,76,85,68,69,95,78,66,82,83,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,105,110, +99,108,117,100,101,32,110,101,105,103,104,98,111,114,115,63,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,49,53,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,65,80,80,76,89,95,83,65,86,69,95,66,85,84,84,79, -78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,112,112,108,38,97,109,112,59,121,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84, -84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -76,124,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116, -105,116,108,101,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60, -47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, -100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, -116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, -69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116, -121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,68,95,83,65,86,69,95,83,69,76,69,67, -84,73,79,78,95,84,77,34,32,115,117,98,99,108,97,115,115,61,34,83,97,118, -101,83,101,108,101,99,116,105,111,110,68,108,103,34,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67, +97,110,99,101,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,76, +69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,65,80,80,76,89,95,83,65,86,69,95,66,85,84,84,79,78,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112, +108,38,97,109,112,59,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120, +76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, +73,71,78,95,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82, +69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,116,105,116,108,101, +62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, +110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119, +120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, +119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101, +61,34,73,68,68,95,83,65,86,69,95,83,69,76,69,67,84,73,79,78,95,84,77,34, +32,115,117,98,99,108,97,115,115,61,34,83,97,118,101,83,101,108,101,99,116, +105,111,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101, +114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73, -68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, +68,95,65,68,68,95,70,73,69,76,68,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100, +32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,105,100,100, +101,110,62,49,60,47,104,105,100,100,101,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,84,97,114,103,101,116,32,86,97,114,105,97, +98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,104,105,100,100,101,110,62,49,60, +47,104,105,100,100,101,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,83,65,86, +69,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48, +44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,104,105,100,100,101,110,62,49,60, +47,104,105,100,100,101,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, +78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,105,100,100,101, +110,62,49,60,47,104,105,100,100,101,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,70,73,69,76,68,95,67,72,79,73,67,69,95,84,77,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,105,100,100,101, +110,62,49,60,47,104,105,100,100,101,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,49,56,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, -32,110,97,109,101,61,34,73,68,95,65,68,68,95,70,73,69,76,68,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,104,105,100,100,101,110,62,49,60,47,104,105,100,100,101,110, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,32,78,97, +109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100,101,114,62,10, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, +99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,114, -103,101,116,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104, -105,100,100,101,110,62,49,60,47,104,105,100,100,101,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,83,65, +86,69,95,83,69,76,95,86,65,82,95,78,65,77,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,83,69,76, +69,67,84,69,68,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79, +77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,49,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,70,73,69,76,68,95,67,72,79,73,67,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,105, -100,100,101,110,62,49,60,47,104,105,100,100,101,110,62,10,32,32,32,32,32, +115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,95,67,72,69,67,75,95,66,79,88,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, 108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, 73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, -44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -104,105,100,100,101,110,62,49,60,47,104,105,100,100,101,110,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,101,108,101,99,116,101,100,32,61,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,105,122,101,62,54,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, 95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, @@ -27957,567 +28113,483 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -55,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, +51,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110, -97,109,101,61,34,73,68,95,83,65,86,69,95,70,73,69,76,68,95,67,72,79,73, -67,69,95,84,77,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,104,105,100,100,101,110,62,49,60,47,104,105,100,100,101,110, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, -120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,49,56,44,53,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114, -105,97,98,108,101,32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,54,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, -73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,95,86,65,82,95,78,65,77,69,34, +116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, +32,110,97,109,101,61,34,73,68,95,83,69,76,95,86,65,76,95,84,69,88,84,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,115,105,122,101,62,53,48,44,45,49,100,60,47,115,105,122,101,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, -108,117,101,62,83,69,76,69,67,84,69,68,60,47,118,97,108,117,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82, -60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, -78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80, -124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,55,44,49,53,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99, -107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,83,69,76,95,67,72,69, -67,75,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, -99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,55,44,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +108,117,101,62,49,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84, +84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,101, -100,32,61,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99, +107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,85,78,83,69,76,95,67, +72,69,67,75,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, 99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10, +32,32,32,60,115,105,122,101,62,55,44,53,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,95,86,65,76,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108,117,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78, -84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -84,79,80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,115, +101,108,101,99,116,101,100,32,61,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,54,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101, -61,34,73,68,95,85,78,83,69,76,95,67,72,69,67,75,95,66,79,88,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101, +61,34,73,68,95,85,78,83,69,76,95,86,65,76,95,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, +62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95, +80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, +69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,115,115,105,103,110,32,86,97, +108,117,101,115,32,116,111,32,67,117,114,114,101,110,116,108,121,32,83, +101,108,101,99,116,101,100,32,47,32,85,110,115,101,108,101,99,116,101,100, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,55,44,53,100,60,47,115,105,122,101, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,95,67,72,66,95,73,78,67,76,85,68,69,95,78,66,82,83,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, 69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,84,88,84,95,67,72,66,95,73, +78,67,76,85,68,69,95,78,66,82,83,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,105,110,99,108,117,100,101,32,110,101, +105,103,104,98,111,114,115,63,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,53,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73, +68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,38,97,109,112,59,67,97,110,99,101,108,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82, +73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65,80,80,76,89,95,83, +65,86,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,112,112,108,38,97,109,112,59,121,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,66,79,84,84,79,77,124,119,120,76,69,70,84,124,119,120, +82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,44,53, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, +90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,82,73,71,72, +84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67, +65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,116,105,116,108,101,62,83,97,118,101,32,83,101,108, +101,99,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99, +101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, +62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, +124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69, +95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,80, +67,80,34,32,115,117,98,99,108,97,115,115,61,34,80,67,80,68,108,103,34,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,85,110,115,101,108,101,99,116,101,100,32,61,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,54,48,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,51,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,69,120,99,108,117,100,101,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, -67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,85,78,83,69,76,95,86, -65,76,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,48,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84, -69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79, -80,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,115,115,105,103,110,32,86,97,108,117,101,115,32,116,111,32,67, -117,114,114,101,110,116,108,121,32,83,101,108,101,99,116,101,100,32,47, -32,85,110,115,101,108,101,99,116,101,100,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, -79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116, -111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -38,97,109,112,59,67,97,110,99,101,108,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84, -79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,73,68,95,65,80,80,76,89,95,83,65,86,69,95,66,85,84, -84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,65,112,112,108,38,97,109,112,59,121,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66, -79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, +79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115, +116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,85,68,69, +95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,49,48,48,44,49,52,48,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,76,124,119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,82,73,71,72,84,124,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,116,105,116,108,101,62,83,97,118,101,32,83,101,108,101,99,116,105,111, -110,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114, -101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60, -115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83, -84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115, -116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,73,68,68,95,80,67,80,34,32,115,117,98, -99,108,97,115,115,61,34,80,67,80,68,108,103,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, -120,99,108,117,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,71,82, +79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90, 79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,95,73,78,67,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +38,103,116,59,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,85,68,69,95,76,73,83,84, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,48,48,44,49,52,48,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,73,78,67,95,79,78,69,95,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,79,78,69,95,66,85,84,84, +79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, -73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,65,76,76, +95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,38,108,116,59,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,65, -76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,73,110,99,108,117,100,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,73,78, +67,76,85,68,69,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,49,48,48,44,49,52,48,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, 114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,73,78,67,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116, -59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,69,88,67,76,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,69,88,67,76,95,65,76,76,95,66,85,84,84,79,78,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,80,97,114,97,108, +108,101,108,32,67,111,111,114,100,105,110,97,116,101,32,80,108,111,116, +60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, +100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, +116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, +69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82, +124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, +101,61,34,73,68,68,95,82,69,71,82,69,83,83,73,79,78,34,32,115,117,98,99, +108,97,115,115,61,34,82,101,103,114,101,115,115,105,111,110,68,108,103, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,73,110,99,108,117,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73, -90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, -34,32,110,97,109,101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,48,48,44,49,52,48,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, -73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, -71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119, -120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111, -115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108, -101,62,80,97,114,97,108,108,101,108,32,67,111,111,114,100,105,110,97,116, -101,32,80,108,111,116,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99, -101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100, -62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78, -124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82,69,83,73,90, -69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115, -116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108, -111,103,34,32,110,97,109,101,61,34,73,68,68,95,82,69,71,82,69,83,83,73, -79,78,34,32,115,117,98,99,108,97,115,115,61,34,82,101,103,114,101,115,115, -105,111,110,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,86,97,114,105,97,98,108,101,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109, -101,61,34,73,68,67,95,76,73,83,84,95,86,65,82,73,78,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44, -49,52,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73, -78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,71,82,79,87,124,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, -60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,86,97,114,105,97,98,108,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, +82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, -66,85,84,84,79,78,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,51,48,100,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,67,95,66,85,84,84,79,78,50,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,67, +95,76,73,83,84,95,86,65,82,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,45,49,44,49,52,48,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84, -84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,67,95,66,85,84,84,79,78,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108, -116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111, +110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82, +69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,66,85,84,84, +79,78,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +50,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,53,44,51,48,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,67,95,66,85,84,84,79,78,50,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, +103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79, +77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, +101,61,34,73,68,67,95,66,85,84,84,79,78,51,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, @@ -28657,11 +28729,11 @@ static unsigned char xml_res_file_9[] = { 116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,87,69, 73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, 116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115, -46,99,112,112,36,48,48,48,45,84,111,111,108,66,97,114,66,105,116,109,97, +46,99,112,112,36,48,48,57,45,84,111,111,108,66,97,114,66,105,116,109,97, 112,115,95,51,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,100,105,115,97,98,108,101,100,62,71, 100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, -48,48,45,84,111,111,108,66,97,114,66,105,116,109,97,112,115,95,51,95,100, +48,57,45,84,111,111,108,66,97,114,66,105,116,109,97,112,115,95,51,95,100, 105,115,97,98,108,101,100,46,112,110,103,60,47,100,105,115,97,98,108,101, 100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, 101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101, @@ -29294,7 +29366,7 @@ static unsigned char xml_res_file_9[] = { 82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62, 71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, -48,48,48,45,111,112,101,110,45,102,111,108,100,101,114,46,112,110,103,60, +48,48,57,45,111,112,101,110,45,102,111,108,100,101,114,46,112,110,103,60, 47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, @@ -29368,7 +29440,7 @@ static unsigned char xml_res_file_9[] = { 32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, 69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45, 111,112,101,110,45,102,111,108,100,101,114,46,112,110,103,60,47,98,105, 116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, @@ -29377,75 +29449,87 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110, -97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,71,114,105,100,32,83,105,122,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,50,60,47,99, -111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111, -119,115,62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101, +61,34,73,68,67,95,82,65,68,73,79,95,76,65,89,69,82,83,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +115,101,32,116,104,101,32,98,111,117,110,100,105,110,103,32,98,111,120, +32,111,102,32,101,120,105,115,116,105,110,103,32,108,97,121,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, -120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -95,83,84,65,84,73,67,84,69,88,84,54,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,117,109,98,101,114, -32,111,102,32,82,111,119,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,55,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,84,69,95,82,73,71,72,84,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108, -117,101,62,50,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, -82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95, -77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67, -84,69,88,84,53,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,117,109,98,101,114,32,111,102,32,67,111, -108,117,109,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67, +95,71,82,73,68,95,76,65,89,69,82,83,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,52,48,44,45,49,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34, +119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +71,114,105,100,32,83,105,122,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, +108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,99,111,108,115,62,50,60,47,99,111,108,115,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60, +47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119,120,65,68,74, +85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83, +84,65,84,73,67,84,69,88,84,54,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,117,109,98,101,114,32,111, +102,32,82,111,119,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, @@ -29457,232 +29541,324 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116, -114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,56,34,62,10, +114,108,34,32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,55,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, 101,62,119,120,84,69,95,82,73,71,72,84,60,47,115,116,121,108,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117, 101,62,50,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,67,82,69,65,84,69,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,38,97,109,112,59,114,101,97,116,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +76,69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77, +73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, -78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,67,65,78,67,69,76,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97, -109,112,59,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34, -73,68,68,95,67,79,78,86,69,82,84,95,66,79,85,78,68,65,82,89,95,84,79,95, -83,72,80,34,32,115,117,98,99,108,97,115,115,61,34,66,110,100,50,83,104, -112,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119, -120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32, -32,60,116,105,116,108,101,62,67,111,110,118,101,114,116,32,66,111,117,110, -100,97,114,121,32,116,111,32,83,104,97,112,101,32,68,97,116,97,115,111, -117,114,99,101,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, -116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105, -122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,49,60,47,114,111,119, -115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62, -48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76, -69,70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73, -78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,73,110,112,117,116,32,102,105,108,101,32,40,116,101,120,116, -32,102,105,108,101,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,82,69,65, -68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84, +69,88,84,53,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,78,117,109,98,101,114,32,111,102,32,67,111,108, +117,109,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, +32,110,97,109,101,61,34,73,68,67,95,69,68,73,84,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,84,69,95,82,73,71,72,84,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,50,60, +47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, +79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,67,82,69,65,84,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,38,97,109,112, +59,114,101,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, 120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,73,68,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,108,111, +115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,67,79,78,86, +69,82,84,95,66,79,85,78,68,65,82,89,95,84,79,95,83,72,80,34,32,115,117, +98,99,108,97,115,115,61,34,66,110,100,50,83,104,112,68,108,103,34,62,10, +32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, +119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, +66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108, +101,62,67,111,110,118,101,114,116,32,66,111,117,110,100,97,114,121,32,116, +111,32,83,104,97,112,101,32,68,97,116,97,115,111,117,114,99,101,60,47,116, +105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62, +49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,67,95,79,80,69,78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68, -69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,111,112,101,110,45,102,111,108,100,101,114,46,112,110,103,60,47,98, -105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, -78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32, +110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32, 32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79, 78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,73,68,95,67,82,69,65,84,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,38,97,109,112,59, -114,101,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, 62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, 76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, 114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,108,111,115, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,51,68,80,76, -79,84,34,32,115,117,98,99,108,97,115,115,61,34,67,51,68,68,108,103,34,62, -10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124, -119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95, -66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108, -101,62,65,120,105,115,32,83,101,108,101,99,116,105,111,110,60,47,116,105, -116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60, -47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111, +108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,114,111,119,115,62,49,60,47,114,111,119,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112, +62,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73, +110,112,117,116,32,102,105,108,101,32,40,116,101,120,116,32,102,105,108, +101,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95, +70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67, +69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, 120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, 119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101, -114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112, +66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69, +78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,111,112,101,110, +45,102,111,108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, +73,68,95,67,82,69,65,84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,38,97,109,112,59,114,101,97,116,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67, +65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,38,97,109,112,59,67,108,111,115,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,68,95,51,68,80,76,79,84,34,32,115,117,98,99,108, +97,115,115,61,34,67,51,68,68,108,103,34,62,10,32,32,32,32,60,115,116,121, +108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95, +77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108, +101,62,10,32,32,32,32,60,116,105,116,108,101,62,65,120,105,115,32,83,101, +108,101,99,116,105,111,110,60,47,116,105,116,108,101,62,10,32,32,32,32, +60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, +100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60, +111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69, +78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97, +109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,88,32,86,97,114,105,97,98,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, +76,73,83,84,95,86,65,82,73,78,95,88,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57, +48,44,49,48,55,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95, +83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68, +95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,89,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111, +120,34,32,110,97,109,101,61,34,73,68,67,95,76,73,83,84,95,86,65,82,73,78, +95,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,49,48,55,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114, +34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, 86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,88,32,86,97,114,105, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,90,32,86,97,114,105, 97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, @@ -29692,7 +29868,7 @@ static unsigned char xml_res_file_9[] = { 98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, -61,34,73,68,67,95,76,73,83,84,95,86,65,82,73,78,95,88,34,62,10,32,32,32, +61,34,73,68,67,95,76,73,83,84,95,86,65,82,73,78,95,90,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110, 116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, 105,122,101,62,57,48,44,49,48,55,100,60,47,115,105,122,101,62,10,32,32, @@ -29702,1309 +29878,1412 @@ static unsigned char xml_res_file_9[] = { 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61, -34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,89,32,86,97,114,105,97,98,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,76,73, -83,84,95,86,65,82,73,78,95,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44, -49,48,55,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73, -78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120, -83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,90, -32,86,97,114,105,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32, -110,97,109,101,61,34,73,68,67,95,76,73,83,84,95,86,65,82,73,78,95,90,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110, -116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,57,48,44,49,48,55,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, 98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, -119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120, +73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,79,75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,51,68, -67,79,78,84,82,79,76,34,32,115,117,98,99,108,97,115,115,61,34,67,51,68, -67,111,110,116,114,111,108,80,97,110,34,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, -69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111, -120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, -89,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, +67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,111,115,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97, +110,101,108,34,32,110,97,109,101,61,34,73,68,68,95,51,68,67,79,78,84,82, +79,76,34,32,115,117,98,99,108,97,115,115,61,34,67,51,68,67,111,110,116, +114,111,108,80,97,110,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109, +101,61,34,73,68,67,95,68,83,95,78,79,84,69,66,79,79,75,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61, +34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105, +101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, 65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101, -99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,68,65,84,65,80, -79,73,78,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,68,97,116,97,32,80,111,105,110,116,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, +120,34,32,110,97,109,101,61,34,73,68,67,95,68,65,84,65,80,79,73,78,84,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,32,80, +111,105,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, 62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,84, -79,88,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,80,114,111,106,101,99,116,32,116,111,32,90,45,89,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, 100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,67,95, -84,79,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,84,79,88,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,80,114,111,106,101,99,116,32,116,111,32,90,45,89, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70, +84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109, +101,61,34,73,68,67,95,84,79,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +67,72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,80,114,111,106,101,99,116,32,116,111,32,88,45,90,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, +72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111, +120,34,32,110,97,109,101,61,34,73,68,67,95,84,79,90,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, 121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,80,114,111,106,101,99,116,32,116,111,32,88,45,90,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,80,114,111,106,101,99,116,32,116, +111,32,88,45,89,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68, +67,95,83,69,76,69,67,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83, +84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101, +99,116,44,32,104,111,108,100,32,67,84,82,76,32,102,111,114,32,98,114,117, +115,104,105,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, +48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, -111,120,34,32,110,97,109,101,61,34,73,68,67,95,84,79,90,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,114,111,106,101, -99,116,32,116,111,32,88,45,89,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107, -66,111,120,34,32,110,97,109,101,61,34,73,68,67,95,83,69,76,69,67,84,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,67, -72,75,95,50,83,84,65,84,69,60,47,115,116,121,108,101,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,44,32,104, -111,108,100,32,67,84,82,76,32,102,111,114,32,98,114,117,115,104,105,110, -103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120, -71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70, +108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,50,60,47, +99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,114,111,119,115,62,54,60,47,114,111,119,115,62,10,32,32,32, -32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103,97,112,62,10, -32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97, -112,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,84,79,80,124,119,120,65, -76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62, +48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,73,71,78,95,84,79,80,124,119,120,65,76,76,124,119,120,65,68,74,85, +83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, 114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,51, -68,95,83,84,65,84,73,67,84,69,88,84,95,88,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,88,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67,84,69,88,84,95,88, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,88,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, 60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,84,79,80,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34, -73,68,67,95,83,76,88,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48, -60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, -82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,84,79,80,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34, -73,68,67,95,83,76,88,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48, -60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65, -76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120, -65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -51,68,95,83,84,65,84,73,67,84,69,88,84,95,89,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -108,105,100,101,114,34,32,110,97,109,101,61,34,73,68,67,95,83,76,89,80, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -53,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,83,76,95,72,79,82,73, -90,79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,48,60, -47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97, -120,62,49,48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101, -61,34,73,68,67,95,83,76,89,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,53,54,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, -62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, +124,119,120,65,76,73,71,78,95,84,79,80,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105,100,101, +114,34,32,110,97,109,101,61,34,73,68,67,95,83,76,88,80,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49, +48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, -120,65,76,73,71,78,95,66,79,84,84,79,77,124,119,120,65,76,76,124,119,120, -65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,51,68,95,83,84,65, -84,73,67,84,69,88,84,95,90,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,90,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, -99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,124,119,120,65,76,73,71,78,95,66,79,84,84,79,77,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73,68,67, -95,83,76,90,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,84, +79,80,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61, +34,73,68,67,95,83,76,88,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,54,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,83,76, 95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118, -97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105, -110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118, +97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,48, +60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, -78,84,65,76,124,119,120,65,76,73,71,78,95,66,79,84,84,79,77,124,119,120, -65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124, +119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73, -68,67,95,83,76,90,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60, -47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67, +84,69,88,84,95,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,89,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95,84,79,80,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65, -84,73,67,84,69,88,84,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,90,111,111,109,32,58,32,112,114,101,115,115,32,114, -105,103,104,116,45,109,111,117,115,101,32,98,117,116,116,111,110,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97, -108,111,103,34,32,110,97,109,101,61,34,73,68,68,95,87,69,76,67,79,77,69, -95,83,69,76,69,67,84,73,79,78,95,83,84,89,76,69,34,32,115,117,98,99,108, -97,115,115,61,34,87,101,108,99,111,109,101,83,101,108,101,99,116,105,111, -110,83,116,121,108,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, 120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,52,48,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,87,101,108,99,111,109,101,32,116,111, -32,71,101,111,68,97,32,49,46,56,46,49,54,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,102,111,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,119,101,105,103,104,116,62,98,111,108,100,60,47,119, -101,105,103,104,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,54,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,102,103, -62,35,54,54,54,54,54,54,60,47,102,103,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, -72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,108, -101,97,115,101,32,99,108,105,99,107,32,116,111,32,99,104,111,111,115,101, -32,97,32,104,105,103,104,108,105,103,104,116,105,110,103,32,115,116,121, -108,101,32,105,110,32,71,101,111,68,97,58,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,102,111,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,49,54,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,102,111,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,102,103,62,35,54,54,54,54,54,54,60,47,102,103,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82, +84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,108,105,100,101,114,34,32,110,97, +109,101,61,34,73,68,67,95,83,76,89,80,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53, +54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109, +105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,48,60,47, +109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,76, -69,70,84,124,119,120,82,73,71,72,84,124,119,120,66,79,84,84,79,77,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,50,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,48,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109, -101,61,34,73,68,67,95,83,69,76,69,67,84,73,79,78,95,83,84,89,76,69,49,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62, -71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, -48,48,48,45,115,101,108,115,116,121,108,101,49,46,112,110,103,60,47,98, -105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,115,101,108,115,116,121,108,101,49, -46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,48,44,49,54,48,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109, -101,61,34,73,68,67,95,83,69,76,69,67,84,73,79,78,95,83,84,89,76,69,50,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62, -71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, -48,48,48,45,115,101,108,115,116,121,108,101,50,46,112,110,103,60,47,98, -105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,115,101,108,115,116,121,108,101,50, -46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,50,48,48,44,49,54,48,60,47,115, -105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,76,69,70,84,124,119,120,76,69,70,84,124,119,120,82,73,71, -72,84,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,51,48,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73, -90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66, -111,120,34,32,110,97,109,101,61,34,73,68,95,65,85,84,79,95,76,65,66,69, -76,83,95,67,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,111,110, -39,116,32,115,104,111,119,32,116,104,105,115,32,100,105,97,108,111,103, -32,97,103,97,105,110,32,40,89,111,117,32,99,97,110,32,97,108,119,97,121, -115,32,99,104,97,110,103,101,32,116,104,105,115,32,115,101,116,116,105, -110,103,32,117,115,105,110,103,32,109,101,110,117,58,32,70,105,108,101, -45,38,103,116,59,80,114,101,102,101,114,101,110,99,101,115,41,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,111, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,103,62,35,54,54,54,54,54,54,60,47,102,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,116,105,116,108,101,47,62,10,32,32,32,32,60,99,101,110,116,101, -114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32, -60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, -83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, -115,116,121,108,101,62,10,32,32,32,32,60,98,103,62,35,70,70,70,70,70,70, -60,47,98,103,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111, -103,34,32,110,97,109,101,61,34,73,68,68,95,67,79,78,78,69,67,84,95,68,65, -84,65,83,79,85,82,67,69,34,32,115,117,98,99,108,97,115,115,61,34,67,111, -110,110,101,99,116,68,97,116,97,115,111,117,114,99,101,68,108,103,34,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109, -101,61,34,73,68,67,95,68,83,95,78,79,84,69,66,79,79,75,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, -61,34,100,115,70,105,108,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71, -114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99, -111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,118,103,97,112,62,48,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62, -48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105,100,101,114,34, +32,110,97,109,101,61,34,73,68,67,95,83,76,89,83,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,73,110,112,117,116,32,102,105,108, -101,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48, +48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119, +120,65,76,73,71,78,95,66,79,84,84,79,77,124,119,120,65,76,76,124,119,120, +65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,32,110,97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67,84,69, +88,84,95,90,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,90,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, 119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90, -69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, -68,67,95,70,73,69,76,68,95,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,49,55,50,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, -82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, +53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,124,119,120,65,76,73,71,78,95,66,79,84,84,79,77,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73,68,67,95,83,76, +90,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,53,54,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,83,76,95,72,79,82,73,90,79,78, +84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,48,60, +47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,109,105,110,62,48,60,47,109,105,110,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116, -109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95, -79,80,69,78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,111,112,101,110, -45,102,111,108,100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,109,97,120,62,49,48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, +76,73,71,78,95,66,79,84,84,79,77,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105,100,101,114, +34,32,110,97,109,101,61,34,73,68,67,95,83,76,90,83,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,53,54,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116, +121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,109,105,110,62,48,60,47,109,105,110,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49, +48,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,69,77,80,84,89,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, -70,84,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78, -83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +70,84,124,119,120,65,76,73,71,78,95,84,79,80,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,50,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,90,111,111,109,32,58,32,112,114,101,115,115,32,114,105, +103,104,116,45,109,111,117,115,101,32,98,117,116,116,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120,83,105,122,101, +114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,83,72,79,87,95,78,69,73,71,72,66,79,82,83, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65,84,69, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, +32,115,101,108,101,99,116,105,111,110,32,97,110,100,32,110,101,105,103, +104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110, +97,109,101,61,34,73,68,67,95,83,72,79,87,95,67,79,78,78,69,67,84,73,79, +78,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,67,72,75,95,50,83,84,65, +84,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,99,111,110,110,101,99,116,105,111,110,32,108,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101, +98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, +101,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111, +120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,49,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,32,110,97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67,84,69,88, +84,95,81,85,65,76,73,84,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,110, +100,101,114,105,110,103,32,113,117,97,108,105,116,121,32,111,102,32,112, +111,105,110,116,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, 73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, 120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, 119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116, -109,97,112,34,32,110,97,109,101,61,34,73,68,67,95,68,82,65,71,95,68,82, -79,80,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73, +68,67,95,83,76,95,81,85,65,76,73,84,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49, +48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,118,97,108,117,101,62,49,48,60,47,118,97,108,117,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,100,114,97,103,100,114,111, -112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,100,114,97,103,100,114,111,112,46, -112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,109,105,110,62,53,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,50,48,48, +60,47,109,97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34, +73,68,95,51,68,95,83,84,65,84,73,67,84,69,88,84,95,81,85,65,76,73,84,89, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,82,97,100,105,117,115,32,111,102,32,112, +111,105,110,116,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,32,83, -111,117,114,99,101,32,79,118,101,114,118,105,101,119,47,72,101,108,112, -58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +115,61,34,119,120,83,108,105,100,101,114,34,32,110,97,109,101,61,34,73, +68,67,95,83,76,95,82,65,68,73,85,83,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,48, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, +119,120,83,76,95,72,79,82,73,90,79,78,84,65,76,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,118,97,108,117,101,62,51,60,47,118,97,108,117,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,109, +105,110,62,49,60,47,109,105,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,109,97,120,62,49,48,60,47,109, +97,120,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,72,121,112,101,114,108,105,110,107,67,116,114,108,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,117,114,108,62,104,116,116,112,58,47,47,103,101,111,100,97, -99,101,110,116,101,114,46,103,105,116,104,117,98,46,105,111,47,102,111, -114,109,97,116,115,46,104,116,109,108,60,47,117,114,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,70,105,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,80,97,110,101,108,34,32,110,97,109,101, -61,34,100,115,68,97,116,97,98,97,115,101,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,48,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111, +120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78, +89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, +76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,49,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67,84,69,88,84,95, +76,73,78,69,87,73,68,84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, +101,32,119,105,100,116,104,47,116,104,105,99,107,110,101,115,115,58,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, 109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108, -101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83, -84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -68,97,116,97,98,97,115,101,32,84,121,112,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,67,95,67,68,83,95,68,66,95,84,89,80,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,51,52,48,44,45,49,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -97,116,97,98,97,115,101,32,72,111,115,116,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,67,95,67,68,83,95,68,66,95,72,79,83,84,34,32,115,117,98,99,108, -97,115,115,61,34,65,117,116,111,84,101,120,116,67,116,114,108,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,49,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, -67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115, -101,32,80,111,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68, -83,95,68,66,95,80,79,82,84,34,32,115,117,98,99,108,97,115,115,61,34,65, -117,116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,118,97,108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,108,105,100,101, +114,34,32,110,97,109,101,61,34,73,68,67,95,83,76,95,76,73,78,69,87,73,68, +84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,49,48,48,44,45,49,100,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,83,76,95,72,79,82,73,90, +79,78,84,65,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62, +49,60,47,118,97,108,117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,109,105,110,62,49,60,47,109,105,110, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,109,97,120,62,49,48,60,47,109,97,120,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88, +80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,49,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, -95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97, -116,97,98,97,115,101,47,73,110,115,116,97,110,99,101,32,78,97,109,101,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114, -108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,78,65,77, -69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, -67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, -67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,114,32,110,97, -109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +120,116,34,32,110,97,109,101,61,34,73,68,95,51,68,95,83,84,65,84,73,67, +84,69,88,84,95,76,73,78,69,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,56,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, -67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66, -95,85,78,65,77,69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111, -84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97, -108,117,101,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +108,97,98,101,108,62,76,105,110,101,32,99,111,108,111,114,58,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83, -84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,115,115, -119,111,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116, +109,97,112,34,32,110,97,109,101,61,34,73,68,67,95,76,73,78,69,67,79,76, +79,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,56,100,60,47, +115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,103,62,35,70,70,70,70,70,70,60,47, +98,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +79,112,101,110,71,76,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95, +87,69,76,67,79,77,69,95,83,69,76,69,67,84,73,79,78,95,83,84,89,76,69,34, +32,115,117,98,99,108,97,115,115,61,34,87,101,108,99,111,109,101,83,101, +108,101,99,116,105,111,110,83,116,121,108,101,68,108,103,34,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, +82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,48,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,108, +99,111,109,101,32,116,111,32,71,101,111,68,97,32,49,46,56,46,49,54,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,102,111,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,119,101,105,103,104,116,62, +98,111,108,100,60,47,119,101,105,103,104,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,105,122,101,62,50,54,60,47,115,105,122,101,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,102,111,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,102,103,62,35,54,54,54,54,54,54,60,47,102,103,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,80,108,101,97,115,101,32,99,108,105,99,107,32,116,111,32, +99,104,111,111,115,101,32,97,32,104,105,103,104,108,105,103,104,116,105, +110,103,32,115,116,121,108,101,32,105,110,32,71,101,111,68,97,58,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,102,111,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,54,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,102,111,110, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,102,103,62,35,54,54,54,54,54, +54,60,47,102,103,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119, +120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,50,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,48,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116, +109,97,112,34,32,110,97,109,101,61,34,73,68,67,95,83,69,76,69,67,84,73, +79,78,95,83,84,89,76,69,49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69, +60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, +114,99,101,115,46,99,112,112,36,48,48,57,45,115,101,108,115,116,121,108, +101,49,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45, +115,101,108,115,116,121,108,101,49,46,112,110,103,60,47,98,105,116,109, +97,112,50,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,50,48,48,44,49,54,48,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,48,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105, +116,109,97,112,34,32,110,97,109,101,61,34,73,68,67,95,83,69,76,69,67,84, +73,79,78,95,83,84,89,76,69,50,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, +114,99,101,115,46,99,112,112,36,48,48,57,45,115,101,108,115,116,121,108, +101,50,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45, +115,101,108,115,116,121,108,101,50,46,112,110,103,60,47,98,105,116,109, +97,112,50,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,50,48,48,44,49,54,48,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120, +76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,66,79,84,84,79,77,60, +47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,51,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61,34,73,68,95,65, +85,84,79,95,76,65,66,69,76,83,95,67,66,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,111,110,39,116,32,115,104,111,119,32,116,104,105,115, +32,100,105,97,108,111,103,32,97,103,97,105,110,32,40,89,111,117,32,99,97, +110,32,97,108,119,97,121,115,32,99,104,97,110,103,101,32,116,104,105,115, +32,115,101,116,116,105,110,103,32,117,115,105,110,103,32,109,101,110,117, +58,32,70,105,108,101,45,38,103,116,59,80,114,101,102,101,114,101,110,99, +101,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,111,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,49,48,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,102,111,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,103,62,35,54,54,54,54,54,54, +60,47,102,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,47,62,10,32, +32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, +84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67, +76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,32,32,60, +98,103,62,35,70,70,70,70,70,70,60,47,98,103,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,68,95, +67,79,78,78,69,67,84,95,68,65,84,65,83,79,85,82,67,69,34,32,115,117,98, +99,108,97,115,115,61,34,67,111,110,110,101,99,116,68,97,116,97,115,111, +117,114,99,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, +82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,78,111, +116,101,98,111,111,107,34,32,110,97,109,101,61,34,73,68,67,95,68,83,95, +78,79,84,69,66,79,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101, +98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,70,105,108,101, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, +101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105, +122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111, +119,115,62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47, +118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, -116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68, -66,95,85,80,87,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101, -47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,65,83, -83,87,79,82,68,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,73,110,112,117,116,32,102,105,108,101,32,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71,78,95, +67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,124,119, +120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,70,73,69,76,68,95,65, +83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,50,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,95,68,66,95,84,65,66,76, -69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101,32,78, -97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, +116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65, +83,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68, +69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101, +115,46,99,112,112,36,48,48,57,45,111,112,101,110,45,102,111,108,100,101, +114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, +95,83,84,65,84,73,67,95,69,77,80,84,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, -116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68, -66,95,84,65,66,76,69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116, -111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,101, -110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69, +82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,49,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109,101,61, +34,73,68,67,95,68,82,65,71,95,68,82,79,80,95,66,79,88,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, +48,57,45,100,114,97,103,100,114,111,112,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97, +65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57, +45,100,114,97,103,100,114,111,112,46,112,110,103,60,47,98,105,116,109,97, +112,50,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, +122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,44,49,48,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,97,116,97,32,83,111,117,114,99,101,32,79,118,101,114,118, +105,101,119,47,72,101,108,112,58,32,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,72,121,112,101,114,108,105, +110,107,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,117,114,108,62,104,116, +116,112,58,47,47,103,101,111,100,97,99,101,110,116,101,114,46,103,105,116, +104,117,98,46,105,111,47,102,111,114,109,97,116,115,46,104,116,109,108, +60,47,117,114,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,73,68,95,66,84,78,95,76,79,79,75,85,80,95,84,65,66,76,69,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,105,116,109,97,112,32,115,116,111,99,107,95,105,100, -61,34,119,120,65,82,84,95,70,73,78,68,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, +116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51, -60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,56,60,47,114,111,119,115, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,118,103,97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103, -97,112,62,49,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98, -97,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110, -111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105,108,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98, +111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,68,97,116,97,98,97, +115,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,49,48,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,87,101, -98,83,101,114,118,105,99,101,115,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, -101,62,48,44,53,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, -120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,68,83,95,87,69,66, -95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,54,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,71,101,111,74,115, -111,110,32,85,82,76,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105, -116,101,109,62,87,70,83,32,85,82,76,60,47,105,116,101,109,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101, -99,116,105,111,110,62,48,60,47,115,101,108,101,99,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88, +84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115, +101,32,84,121,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, 100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68, -83,95,87,83,95,85,82,76,34,32,115,117,98,99,108,97,115,115,61,34,65,117, -116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,50,48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,99,111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115, -62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, -97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, +104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68, +66,95,84,89,80,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,52,48,44, +45,49,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110, +116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,98,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111, -107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, -101,108,34,32,110,97,109,101,61,34,100,115,67,97,114,116,111,68,66,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,85,83,69,82, -78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,72, +111,115,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, -73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75,101, -121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66, -95,75,69,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69,95,78, -65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, -32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120, +116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68, +66,95,72,79,83,84,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111, +84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +49,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65, -82,84,79,68,66,95,84,65,66,76,69,95,78,65,77,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32, +108,97,98,101,108,62,68,97,116,97,98,97,115,101,32,80,111,114,116,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,114,111,119,115,62,53,60,47,114,111,119,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97, -112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47, -104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, +34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,80,79,82,84, +34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, +67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97,115, +101,47,73,110,115,116,97,110,99,101,32,78,97,109,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, +101,61,34,73,68,67,95,67,68,83,95,68,66,95,78,65,77,69,34,32,115,117,98, +99,108,97,115,115,61,34,65,117,116,111,84,101,120,116,67,116,114,108,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, +110,97,109,101,61,34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32,97, -32,102,114,101,101,32,67,97,114,116,111,32,97,99,99,111,117,110,116,58, -32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,115,101,114,32,110,97,109,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32, +110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,85,78,65,77,69,34, +32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116,67, +116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, +67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,115,115,119,111,114, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95, +85,80,87,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,65,83,83,87, +79,82,68,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, 101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,72,121,112,101,114,108,105,110,107,67,116,114,108,34,62,10,32, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,67,95,83,84,65,84,73,67,95,68,66,95,84,65,66,76,69,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,119,119,46, -99,97,114,116,111,46,99,111,109,47,60,47,117,114,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,97,98,108,101,32,78,97,109,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108, +34,32,110,97,109,101,61,34,73,68,67,95,67,68,83,95,68,66,95,84,65,66,76, +69,34,32,115,117,98,99,108,97,115,115,61,34,65,117,116,111,84,101,120,116, +67,116,114,108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,55,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101, +100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, +68,95,66,84,78,95,76,79,79,75,85,80,95,84,65,66,76,69,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,105,116,109,97,112,32,115,116,111,99,107,95,105,100,61,34,119, +120,65,82,84,95,70,73,78,68,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,47,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111, +108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,114,111,119,115,62,56,60,47,114,111,119,115,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +118,103,97,112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62, +49,48,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,98,97, +115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111, +116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,87,101, +98,83,101,114,118,105,99,101,115,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122, +101,62,48,44,53,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101, +120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, +111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,68,83,95,87,69,66, +95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,54,44, +45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,105,116,101,109,62,71,101,111,74,115, +111,110,32,85,82,76,60,47,105,116,101,109,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,105, +116,101,109,62,87,70,83,32,85,82,76,60,47,105,116,101,109,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,99,111,110,116,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101, +99,116,105,111,110,62,48,60,47,115,101,108,101,99,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, +101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,68, +83,95,87,83,95,85,82,76,34,32,115,117,98,99,108,97,115,115,61,34,65,117, +116,111,84,101,120,116,67,116,114,108,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,50,48,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,99,111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115, +62,50,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,48,60,47,118,103, +97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,104,103,97,112,62,48,60,47,104,103,97,112,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, -69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,78,111,116,101,98,111,111,107,34,32,110,97,109,101,61,34,73,68,67,95, -68,83,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98, -111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,82,101,99,101,110, -116,76,105,115,116,83,105,122,101,114,34,47,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,101,110,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,98,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,53,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,109,101,61,34,73, +68,67,95,68,83,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116, +101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,82,101,99,101, +110,116,76,105,115,116,83,105,122,101,114,34,47,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,101,110, +116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65, +78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101, 98,111,111,107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,83,97,109,112, @@ -31190,7 +31469,7 @@ static unsigned char xml_res_file_9[] = { 79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109, 97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99, -112,112,36,48,48,48,45,111,112,101,110,45,102,111,108,100,101,114,46,112, +112,112,36,48,48,57,45,111,112,101,110,45,102,111,108,100,101,114,46,112, 110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -31228,11 +31507,11 @@ static unsigned char xml_res_file_9[] = { 108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108, 101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, -101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,100,114,97, +101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,100,114,97, 103,100,114,111,112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115, -111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,100,114,97,103,100, +111,117,114,99,101,115,46,99,112,112,36,48,48,57,45,100,114,97,103,100, 114,111,112,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -31771,213 +32050,28 @@ static unsigned char xml_res_file_9[] = { 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,98,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,110,111,116,101,98,111,111, -107,112,97,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,80,97,110, -101,108,34,32,110,97,109,101,61,34,100,115,67,97,114,116,111,68,66,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,85,115,101,114,32,78,97,109,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,53,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,85,83,69,82, -78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84, -73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75,101, -121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, -116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65,82,84,79,68,66, -95,75,69,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51,48,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, -67,95,83,84,65,84,73,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69,95,78, -65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, -32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84, -101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,67,95,67,65, -82,84,79,68,66,95,84,65,66,76,69,95,78,65,77,69,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108,115,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,114,111,119,115,62,53,60,47,114,111,119,115,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97, -112,62,49,53,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,49,48,60,47, -104,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,48,44,52,48,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116,32,97, -32,102,114,101,101,32,67,97,114,116,111,32,97,99,99,111,117,110,116,58, -32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,72,121,112,101,114,108,105,110,107,67,116,114,108,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,119,119,46, -99,97,114,116,111,46,99,111,109,47,60,47,117,114,108,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,76, -69,70,84,124,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,53,54,48,44,51,52,48,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,48,60,47,111,112,116, -105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44, -48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, -124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, -84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, +34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +48,44,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79, +78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, @@ -32269,7 +32363,7 @@ static unsigned char xml_res_file_9[] = { 32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,73,65,83,67,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114, -99,101,115,46,99,112,112,36,48,48,48,45,111,112,101,110,45,102,111,108, +99,101,115,46,99,112,112,36,48,48,57,45,111,112,101,110,45,102,111,108, 100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, 121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121, @@ -32574,191 +32668,21 @@ static unsigned char xml_res_file_9[] = { 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, 108,97,98,101,108,62,68,97,116,97,98,97,115,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,110,111,116,101,98,111,111,107,112,97,103,101,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,80,97,110,101,108,34,32,110,97,109,101,61,34,100,115,67,97,114, -116,111,68,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,85,115,101,114,32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,67,95,67,65,82,84,79,68,66,95,85,83,69,82,78,65,77,69,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,49,51,48,44,45,49,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67, -95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,112,112,32,75, -101,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73, -68,67,95,67,65,82,84,79,68,66,95,75,69,89,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -49,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,47,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, -61,34,73,68,67,95,83,84,65,84,73,67,95,67,65,82,84,79,68,66,95,84,65,66, -76,69,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,97,98,108,101, -32,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,67,95,67,65,82,84,79,68,66,95,84,65,66,76,69,95,78,65,77,69,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,49,51,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99,111,108, -115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -114,111,119,115,62,53,60,47,114,111,119,115,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,49,53,60,47, -118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,104,103,97,112,62,49,48,60,47,104,103,97,112,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,76,69,70,84,124,119,120,65,76,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,48,44,52,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, -122,101,62,52,44,49,48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,101,116, -32,97,32,102,114,101,101,32,67,97,114,116,111,32,97,99,99,111,117,110,116, -58,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,72,121,112,101,114,108,105,110,107,67,116,114, -108,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,117,114,108,62,104,116,116,112,115,58,47,47,119,119,119, -46,99,97,114,116,111,46,99,111,109,47,60,47,117,114,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,56,48,44,51,52,48,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,51,48,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,76,69,70,84,124,119,120,65,76,76, -124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78, -84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,56,48,44,51,52, -48,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, -51,48,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,82,83, 32,40,112,114,111,106,52,32,102,111,114,109,97,116,41,60,47,108,97,98,101, @@ -32786,7 +32710,7 @@ static unsigned char xml_res_file_9[] = { 116,116,111,110,34,32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,67, 82,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,111,112,101,110,45,99,114,115,46,112,110,103, +99,112,112,36,48,48,54,45,111,112,101,110,45,99,114,115,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60, 47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -32956,7 +32880,7 @@ static unsigned char xml_res_file_9[] = { 116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68, 67,95,79,80,69,78,95,73,65,83,67,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,57,45, 115,97,118,101,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, 62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, @@ -33024,7 +32948,7 @@ static unsigned char xml_res_file_9[] = { 32,110,97,109,101,61,34,73,68,67,95,79,80,69,78,95,68,83,95,80,65,84,72, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,115,97,118,101,46,112,110,103,60,47, +101,115,46,99,112,112,36,48,48,57,45,115,97,118,101,46,112,110,103,60,47, 98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78, 79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, @@ -33753,7 +33677,7 @@ static unsigned char xml_res_file_10[] = { 195,15,186,16,166,183,179,143,115,70,253,38,236,33,84,254,37,69,110,78, 113,195,20,26,21,90,52,110,0,0,0,0,73,69,78,68,174,66,96,130}; -static size_t xml_res_size_11 = 92125; +static size_t xml_res_size_11 = 92412; static unsigned char xml_res_file_11[] = { 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,117,116,102,45,56,34,63,62,10,60,114,101, @@ -34405,7 +34329,7 @@ static unsigned char xml_res_file_11[] = { 32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69, 60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,56,112,120,95,104, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,56,112,120,95,104, 101,108,112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, @@ -34476,7 +34400,7 @@ static unsigned char xml_res_file_11[] = { 60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47, 115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111, -117,114,99,101,115,46,99,112,112,36,48,48,48,45,56,112,120,95,104,101,108, +117,114,99,101,115,46,99,112,112,36,48,48,56,45,56,112,120,95,104,101,108, 112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, @@ -34579,7 +34503,7 @@ static unsigned char xml_res_file_11[] = { 60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47, 115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111, -117,114,99,101,115,46,99,112,112,36,48,48,48,45,56,112,120,95,104,101,108, +117,114,99,101,115,46,99,112,112,36,48,48,56,45,56,112,120,95,104,101,108, 112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, @@ -34685,7 +34609,7 @@ static unsigned char xml_res_file_11[] = { 60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47, 115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, -101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,56,112,120, +101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,56,112,120, 95,104,101,108,112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -34710,27 +34634,305 @@ static unsigned char xml_res_file_11[] = { 49,48,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,67,95,82,69, 80,79,82,84,32,124,32,119,120,76,66,95,69,88,84,69,78,68,69,68,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,103,62,35,70,70,70,70,70,70,60,47,98,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, +110,62,51,51,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,65, +68,68,95,84,79,95,76,73,83,84,95,66,85,84,84,79,78,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103, +116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67, +84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, +76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,82,69,77,79,86,69,95,70,82,95,76,73,83,84,95,66, +85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,38,108,116,59,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79, +82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,119,32,71,114,111,117, +112,32,68,101,116,97,105,108,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,71,82,79,85,80,95,72,69, +76,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78, +69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45, +56,112,120,95,104,101,108,112,46,112,110,103,60,47,98,105,116,109,97,112, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,110,97,109,101,58,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,124,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,54,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,78,69, +87,95,71,82,79,85,80,95,78,65,77,69,95,84,88,84,95,67,84,82,76,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,55,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,71,82, +79,87,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, +97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,78,69, +87,95,70,73,69,76,68,95,84,89,80,69,95,83,84,65,84,95,84,88,84,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,110,117,109,101, +114,105,99,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,112,116,105,111,110,62,51,51,60,47,111,112,116,105, -111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79,80,124,119, +120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, +101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84,95,83,84,65,84,95, +84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,53,32,111,102,32,53,32,118,97,114,105, +97,98,108,101,115,32,110,101,101,100,101,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73, +71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,73,68,95,83,79,82,84,95,66,85,84,84,79,78,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,111,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,80,76,65,67,69,72,79, +76,68,69,82,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, +116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69, +88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,76,105,115,116,67,116,114,108,34,32,110,97, +109,101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, +56,48,44,49,52,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,67, +95,69,68,73,84,95,76,65,66,69,76,83,124,119,120,76,67,95,82,69,80,79,82, +84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,84,79,95,76,73,83,84,95, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116, +105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,77,79,86,69,95,85,80,95,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,111,118,101,32,85,112,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73, +84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, +111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, +34,73,68,95,77,79,86,69,95,68,79,87,78,95,66,85,84,84,79,78,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,77,111,118,101,32,68,111,119,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47, +115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,84,79,80,124,119,120,82,73,71,72,84,124,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,51,52,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, +110,34,32,110,97,109,101,61,34,73,68,95,67,82,69,65,84,69,95,71,82,80,95, 66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,108,97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, @@ -34745,40 +34947,38 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,82,69,77, -79,86,69,95,70,82,95,76,73,83,84,95,66,85,84,84,79,78,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, -108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88, -65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32, +120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,85,78,71, +82,79,85,80,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60, +47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67, +69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32, 32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, -73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, -120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,78,101,119,32,71,114,111,117,112,32,68,101,116,97,105,108,115,60, +108,62,71,114,111,117,112,101,100,32,86,97,114,105,97,98,108,101,115,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, @@ -34787,88 +34987,75 @@ static unsigned char xml_res_file_11[] = { 111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97, 99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10, +32,32,32,60,115,105,122,101,62,52,44,53,100,60,47,115,105,122,101,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 66,105,116,109,97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,78,69,87,95,71,82,79,85,80,95,72,69,76,80,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, -101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101, +73,68,95,67,85,82,95,71,82,79,85,80,69,68,95,72,69,76,80,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, +121,108,101,62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121, +108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111, +117,114,99,101,115,46,99,112,112,36,48,48,56,45,56,112,120,95,104,101,108, +112,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,44,53,100,60, +47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,95,84,73,77,69,95,76,79,65,68,95,70,82,79,77, +95,71,68,65,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,115,116,121,108,101,62,119,120,78,79,95,66,79,82,68,69, +82,124,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114, -99,101,115,46,99,112,112,36,48,48,48,45,56,112,120,95,104,101,108,112,46, -112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +99,101,115,46,99,112,112,36,48,48,57,45,111,112,101,110,45,102,111,108, +100,101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,116,111,111,108, +116,105,112,62,76,111,97,100,32,116,105,109,101,32,100,101,102,105,110, +105,116,105,111,110,32,102,114,111,109,32,112,114,111,106,101,99,116,32, +102,105,108,101,46,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, +119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69, +78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72, -79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,71,82, +79,85,80,69,68,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,57,48,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -110,97,109,101,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,54,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34, -32,110,97,109,101,61,34,73,68,95,78,69,87,95,71,82,79,85,80,95,78,65,77, -69,95,84,88,84,95,67,84,82,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,55,48,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, -47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, -73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -69,88,80,65,78,68,124,119,120,71,82,79,87,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,78,69,87,95,70,73,69,76,68,95,84,89,80,69, -95,83,84,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105, -122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,110,117,109,101,114,105,99,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,84,79,80,124,119,120,66,79,84,84,79,77,124,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32, +115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,52,44,53,100,60,47,115,105,122,101,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, @@ -34877,700 +35064,438 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,73,78,67,76,85,68,69, -95,76,73,83,84,95,83,84,65,84,95,84,88,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, -32,111,102,32,53,32,118,97,114,105,97,98,108,101,115,32,110,101,101,100, -101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79, -84,84,79,77,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82, -73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122, -101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83,79,82,84, -95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,111,114,116,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84, -70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,80,76,65,67,69,72,79,76,68,69,82,95,66,85,84,84, -79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,69,100,105,116,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,65,76,73,71,78,95,67, -69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,76,105,115,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,73, -78,67,76,85,68,69,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48,44,49,52,48,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,116,121,108,101,62,119,120,76,67,95,69,68,73,84,95,76,65,66, -69,76,83,124,119,120,76,67,95,82,69,80,79,82,84,60,47,115,116,121,108,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,80,65,67,69,84,73, +77,69,95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83, +112,97,99,101,45,84,105,109,101,32,84,97,98,108,101,47,87,101,105,103,104, +116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,85, +95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, +82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,77,79,86,69,95,85,80,95,66,85,84,84,79,78,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,111,118,101,32,85,112,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, -108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,82,73,71,72,84,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,80,65,67,69,84,73,77, +69,95,72,69,76,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68,69,82, +95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, +100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, +48,56,45,56,112,120,95,104,101,108,112,46,112,110,103,60,47,98,105,116, +109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,77,79,86,69, -95,68,79,87,78,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,118, -101,32,68,111,119,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62, -119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90, -79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,84,79, -80,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,112,116,105,111,110,62,51,52,60,47,111,112,116,105,111,110,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88, -80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109, -101,61,34,73,68,95,67,82,69,65,84,69,95,71,82,80,95,66,85,84,84,79,78,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66, -85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, -34,32,110,97,109,101,61,34,73,68,95,85,78,71,82,79,85,80,95,66,85,84,84, -79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, -60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,111,117,112,101, -100,32,86,97,114,105,97,98,108,101,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -52,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,67,85,82,95,71,82,79,85, -80,69,68,95,72,69,76,80,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,66,79,82,68, -69,82,95,78,79,78,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112, -62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, -36,48,48,48,45,56,112,120,95,104,101,108,112,46,112,110,103,60,47,98,105, -116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,105,122,101,62,52,44,53,100,60,47,115,105,122,101,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109, -97,112,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,84,73, -77,69,95,76,79,65,68,95,70,82,79,77,95,71,68,65,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,78,79,95,66,79,82,68,69,82,124,119,120,66,85,95,69,88,65,67, -84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,111,112,101,110,45,102,111,108,100,101,114,46,112,110,103,60,47,98, -105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,76,111,97,100,32,116, -105,109,101,32,100,101,102,105,110,105,116,105,111,110,32,102,114,111,109, -32,112,114,111,106,101,99,116,32,102,105,108,101,46,60,47,116,111,111,108, -116,105,112,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, +69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109, -101,61,34,73,68,95,71,82,79,85,80,69,68,95,76,73,83,84,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,48, -44,57,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,52,44,53,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,83,80,65,67,69,84,73,77,69,95,84,65,66,76,69,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,83,112,97,99,101,45,84,105,109,101,32,84,97,98, -108,101,47,87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116, -121,108,101,62,119,120,66,85,95,69,88,65,67,84,70,73,84,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, +62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69, -95,83,80,65,67,69,84,73,77,69,95,72,69,76,80,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,66,79,82,68,69,82,95,78,79,78,69,60,47,115,116,121,108,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,56,112,120,95,104,101,108,112,46,112, -110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,51,51,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116, -105,111,110,62,51,51,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49,48,60,47,98,111,114, -100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,99,101,110,116, -101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32, -32,32,60,115,116,121,108,101,62,119,120,68,69,70,65,85,76,84,95,68,73,65, -76,79,71,95,83,84,89,76,69,124,119,120,82,69,83,73,90,69,95,66,79,82,68, -69,82,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101, -62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, -97,109,101,61,34,73,68,95,68,65,84,65,95,86,73,69,87,69,82,95,65,66,79, -85,84,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,68,97,116,97, -86,105,101,119,101,114,65,98,111,117,116,68,108,103,34,62,10,32,32,32,32, -60,115,116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89, -83,84,69,77,95,77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47, -115,116,121,108,101,62,10,32,32,32,32,60,116,105,116,108,101,62,65,98,111, -117,116,32,68,66,70,32,86,105,101,119,101,114,60,47,116,105,116,108,101, -62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101, -110,116,101,114,101,100,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67, -65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,105,116,109, -97,112,34,32,110,97,109,101,61,34,119,120,73,68,95,83,84,65,84,73,67,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, -97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,97,98,111,117,116,45,103,101,111,100,97,45,108,111,103,111,46,112, -110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62,49, +60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121,108, +101,62,119,120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95,83,84,89,76, +69,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76, +79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95, +68,65,84,65,95,86,73,69,87,69,82,95,65,66,79,85,84,95,68,76,71,34,32,115, +117,98,99,108,97,115,115,61,34,68,97,116,97,86,105,101,119,101,114,65,98, +111,117,116,68,108,103,34,62,10,32,32,32,32,60,115,116,121,108,101,62,119, +120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124, +119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32, +32,32,60,116,105,116,108,101,62,65,98,111,117,116,32,68,66,70,32,86,105, +101,119,101,114,60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110, +116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, 60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,124,119, -120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,67,95,83,84,65,84,73, -67,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -112,121,114,105,103,104,116,32,40,67,41,32,49,57,57,56,45,50,48,49,49,10, -71,101,111,68,97,32,67,101,110,116,101,114,32,102,111,114,32,71,101,111, -115,112,97,116,105,97,108,32,65,110,97,108,121,115,105,115,32,97,110,100, -32,67,111,109,112,117,116,97,116,105,111,110,10,97,110,100,32,65,114,105, -122,111,110,97,32,66,111,97,114,100,32,111,102,32,82,101,103,101,110,116, -115,10,65,108,108,32,82,105,103,104,116,115,32,82,101,115,101,114,118,101, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60,47,115, -116,121,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,66,105,116,109,97,112,34,32,110,97,109,101,61,34,119, +120,73,68,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, +101,115,46,99,112,112,36,48,48,57,45,97,98,111,117,116,45,103,101,111,100, +97,45,108,111,103,111,46,112,110,103,60,47,98,105,116,109,97,112,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, +62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,124,119,120,65,76,76,124,119,120,65,68,74,85,83, +84,95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, -34,73,68,95,83,84,65,84,73,67,84,69,88,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,66,70,32,86,105,101,119, -101,114,32,48,46,56,32,40,74,117,108,121,32,50,57,44,32,50,48,49,49,41, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,115,116,121,108,101,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,60, -47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, -73,67,65,76,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84,95,77,73, -78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +34,73,68,67,95,83,84,65,84,73,67,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,111,112,121,114,105,103,104,116,32,40,67,41, +32,49,57,57,56,45,50,48,49,49,10,71,101,111,68,97,32,67,101,110,116,101, +114,32,102,111,114,32,71,101,111,115,112,97,116,105,97,108,32,65,110,97, +108,121,115,105,115,32,97,110,100,32,67,111,109,112,117,116,97,116,105, +111,110,10,97,110,100,32,65,114,105,122,111,110,97,32,66,111,97,114,100, +32,111,102,32,82,101,103,101,110,116,115,10,65,108,108,32,82,105,103,104, +116,115,32,82,101,115,101,114,118,101,100,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,76,69, +70,84,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, 32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69, -82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,75, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68,105, -97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,68,65,84,65,95,86,73, -69,87,69,82,95,68,69,76,69,84,69,95,67,79,76,95,68,76,71,34,32,115,117, -98,99,108,97,115,115,61,34,68,97,116,97,86,105,101,119,101,114,68,101,108, -101,116,101,67,111,108,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114, -34,62,10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, -82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84, +65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, -105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,84,69,88,84,95, -49,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,101,108,101,99,116,32,118,97,114,105,97,98,108,101, -115,32,116,111,32,100,101,108,101,116,101,32,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,124, -119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, -101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,70, -73,69,76,68,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,77,85, -76,84,73,80,76,69,32,124,32,119,120,76,66,95,72,83,67,82,79,76,76,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,49,48,48,44,32,56,48,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,65,76,73,71,78,95,76,69,70,84,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,84, +69,88,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,66,70,32,86,105,101,119,101,114,32,48,46,56,32,40,74,117, +108,121,32,50,57,44,32,50,48,49,49,41,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +124,119,120,65,68,74,85,83,84,95,77,73,78,83,73,90,69,60,47,102,108,97, 103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, -111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65, +76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101, +114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,79,75,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, +101,61,34,73,68,95,68,65,84,65,95,86,73,69,87,69,82,95,68,69,76,69,84,69, +95,67,79,76,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,68,97, +116,97,86,105,101,119,101,114,68,101,108,101,116,101,67,111,108,68,108, +103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,69, -76,69,84,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,108,101,116,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65, -78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, -84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,84,69,88,84,95,77,83, -71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101, -115,115,97,103,101,32,97,114,101,97,60,47,108,97,98,101,108,62,10,32,32, +119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65, +76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,95,84,69,88,84,95,49,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +108,101,99,116,32,118,97,114,105,97,98,108,101,115,32,116,111,32,100,101, +108,101,116,101,32,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,76,69,70,84,124,119,120,65,76,76,124,119,120,65,68,74,85,83,84, +95,77,73,78,83,73,90,69,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, +114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66, +111,120,34,32,110,97,109,101,61,34,73,68,95,70,73,69,76,68,95,67,72,79, +73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,115,116,121,108,101,62,119,120,76,66,95,77,85,76,84,73,80,76,69,32,124, +32,119,120,76,66,95,72,83,67,82,79,76,76,60,47,115,116,121,108,101,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,49,48,48,44,32,56,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,76,69,70,84,124,119,120,65,76,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,76,69,70, -84,124,119,120,82,73,71,72,84,124,119,120,65,76,73,71,78,95,76,69,70,84, -60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,116,105,116,108,101,62,68,101,108,101,116,101,32,86,97,114, -105,97,98,108,101,40,115,41,60,47,116,105,116,108,101,62,10,32,32,32,32, -60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101,114,101, -100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80,84,73, -79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,67,76,79, -83,69,95,66,79,88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,68,105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,68, -65,84,65,95,86,73,69,87,69,82,95,65,68,68,95,67,79,76,95,70,73,88,69,68, -95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,68,97,116,97,86,105, -101,119,101,114,65,100,100,67,111,108,68,108,103,34,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, -105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, +103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95, -83,84,65,84,73,67,95,78,69,87,95,78,65,77,69,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,109,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, -62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,68,69,76,69,84,69,95,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,101,108,101,116,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109, -101,61,34,73,68,95,84,69,88,84,95,78,69,87,95,78,65,77,69,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,48,44,45, -49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95, -69,78,84,69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82, -69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110, +97,109,101,61,34,119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108, +111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, +95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61, +34,73,68,95,84,69,88,84,95,77,83,71,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,77,101,115,115,97,103,101,32,97,114,101,97,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79, +84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,124,119, +120,65,76,73,71,78,95,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,68, +101,108,101,116,101,32,86,97,114,105,97,98,108,101,40,115,41,60,47,116, +105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101,100,62, +49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115,116,121, +108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95, +77,69,78,85,124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108, +101,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110, +97,109,101,61,34,73,68,95,68,65,84,65,95,86,73,69,87,69,82,95,65,68,68, +95,67,79,76,95,70,73,88,69,68,95,68,76,71,34,32,115,117,98,99,108,97,115, +115,61,34,68,97,116,97,86,105,101,119,101,114,65,100,100,67,111,108,68, +108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,105,100, +83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, +32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,78,69,87,95,78,65, +77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,97,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67, -95,84,89,80,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,84,121,112,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, 101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, -99,101,34,32,110,97,109,101,61,34,73,68,95,67,72,79,73,67,69,95,84,89,80, -69,34,47,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116, +67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,84,69,88,84,95,78,69, +87,95,78,65,77,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,49,49,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, +84,69,95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, -61,34,73,68,95,83,84,65,84,73,67,95,73,78,83,69,82,84,95,80,79,83,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73, -110,115,101,114,116,32,98,101,102,111,114,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67, -104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,72,79,73,67,69, -95,73,78,83,69,82,84,95,80,79,83,34,47,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120, -116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,76,69,78,71, -84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,76,101,110,103,116,104,32,40,109,97,120,32,50,53,52,41,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, -34,73,68,95,84,69,88,84,95,76,69,78,71,84,72,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100,60,47, -115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84,69, -82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32, -110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,68,69,67,73,77,65,76, -83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,68,101,99,105,109,97,108,115,32,40,109,97,120,32,49,53,41,60,47, +61,34,73,68,95,83,84,65,84,73,67,95,84,89,80,69,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,121,112,101,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101, -61,34,73,68,95,84,69,88,84,95,68,69,67,73,77,65,76,83,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,50,53,44,45,49,100, -60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,84,69,95,80,82,79,67,69,83,83,95,69,78,84, -69,82,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, -32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,68,73,83,80,76,65, -89,69,68,95,68,69,67,73,77,65,76,83,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,101,100, -32,100,101,99,105,109,97,108,115,32,112,108,97,99,101,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95, -68,73,83,80,76,65,89,69,68,95,68,69,67,73,77,65,76,83,34,47,62,10,32,32, +115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61,34, +73,68,95,67,72,79,73,67,69,95,84,89,80,69,34,47,62,10,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67, +95,73,78,83,69,82,84,95,80,79,83,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,73,110,115,101,114,116,32,98,101,102, +111,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,67,72,79,73,67,69,95,73,78,83,69,82,84,95,80,79,83,34, +47,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68, +95,83,84,65,84,73,67,95,76,69,78,71,84,72,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,101,110,103,116,104,32, +40,109,97,120,32,50,53,52,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,95,84,69,88,84,95,76,69,78, +71,84,72,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,50,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69,95,80, +82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, 97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84, -65,84,73,67,95,77,65,88,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,109,97,120,105,109,117,109, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, -97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,77,65,88,95,86,65,76,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -57,57,57,46,57,57,57,57,57,57,60,47,108,97,98,101,108,62,10,32,32,32,32, +65,84,73,67,95,68,69,67,73,77,65,76,83,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,101,99,105,109,97,108,115, +32,40,109,97,120,32,49,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67, -95,77,73,78,95,76,65,66,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,109,105,110,105,109,117,109,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109, -101,61,34,73,68,95,83,84,65,84,73,67,95,77,73,78,95,86,65,76,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,45,57,57, -46,57,57,57,57,57,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,84,101,120,116,67, +116,114,108,34,32,110,97,109,101,61,34,73,68,95,84,69,88,84,95,68,69,67, +73,77,65,76,83,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, +105,122,101,62,50,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,84,69, +95,80,82,79,67,69,83,83,95,69,78,84,69,82,60,47,115,116,121,108,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, +116,97,116,105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83, +84,65,84,73,67,95,68,73,83,80,76,65,89,69,68,95,68,69,67,73,77,65,76,83, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,101,100,32,100,101,99,105,109,97,108,115,32, +112,108,97,99,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,111,108,115,62,50,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, -32,32,60,114,111,119,115,62,56,60,47,114,111,119,115,62,10,32,32,32,32, -32,32,32,32,32,32,60,118,103,97,112,62,53,60,47,118,103,97,112,62,10,32, -32,32,32,32,32,32,32,32,32,60,104,103,97,112,62,53,60,47,104,103,97,112, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,65,76, -73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,109,105,110, -115,105,122,101,62,49,48,48,44,50,48,48,100,60,47,109,105,110,115,105,122, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,65,100,100,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65, -76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, -79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67,69, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34, +32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,69,68,95,68,69,67, +73,77,65,76,83,34,47,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110, +97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,77,65,88,95,76,65,66,69, 76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,109,97,120,105,109,117,109,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73, +67,95,77,65,88,95,86,65,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,57,57,57,46,57,57,57,57,57,57,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,97,109,101, +61,34,73,68,95,83,84,65,84,73,67,95,77,73,78,95,76,65,66,69,76,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,109,105, +110,105,109,117,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,32,110,97,109,101,61,34,73,68,95,83,84,65,84,73,67,95,77,73, +78,95,86,65,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,45,57,57,46,57,57,57,57,57,57,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,111,108,115,62,50,60,47,99,111,108,115,62, +10,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,56,60,47,114,111, +119,115,62,10,32,32,32,32,32,32,32,32,32,32,60,118,103,97,112,62,53,60, +47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,60,104,103,97,112, +62,53,60,47,104,103,97,112,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,60,109,105,110,115,105,122,101,62,49,48,48,44,50,48,48,100,60,47, +109,105,110,115,105,122,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, +95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,78,67, +69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, @@ -36365,40 +36290,17 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76, -124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, -47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,73,68,95,73, -78,80,85,84,95,70,73,76,69,95,84,69,88,84,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,51, -53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120, -84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, -95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, -65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73, -67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +69,82,84,73,67,65,76,32,124,32,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, +114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84, +73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47, 115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -36406,45 +36308,72 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, 105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34,32,110, -97,109,101,61,34,73,68,95,79,80,69,78,95,66,85,84,84,79,78,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,105, -116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115, -46,99,112,112,36,48,48,48,45,111,112,101,110,45,102,111,108,100,101,114, -46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, -120,78,79,95,66,79,82,68,69,82,124,119,120,66,85,95,69,88,65,67,84,70,73, -84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -82,73,71,72,84,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69, -82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79, -82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110, -112,117,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73, -68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +115,61,34,119,120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61, +34,73,68,95,73,78,80,85,84,95,70,73,76,69,95,84,69,88,84,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,49,51,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108, +101,62,119,120,84,69,95,82,69,65,68,79,78,76,89,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, +79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, +82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,105,116,109,97,112,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,66,85,84,84,79,78,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, +101,115,46,99,112,112,36,48,48,57,45,111,112,101,110,45,102,111,108,100, +101,114,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,78,79,95,66,79,82,68,69,82,124,119,120,66,85,95,69,88,65,67, +84,70,73,84,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,76,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53, +60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +73,110,112,117,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, +67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, +101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120, +73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, @@ -36471,266 +36400,232 @@ static unsigned char xml_res_file_11[] = { 60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, 47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,47,62,10,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116, -97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34, -119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, -120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97, -109,101,61,34,73,68,95,75,69,89,95,86,65,76,95,82,66,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,101,114,103,101,32,98,121,32,107,101,121,32,118,97,108,117,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,118,97,108,117,101,62,49,60,47,118,97,108, -117,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47, -115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79, -84,84,79,77,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,70,108,101,120,71,114,105,100,83,105,122,101,114,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,99,117,114,114,101,110,116,32,116,97,98,108,101,32,107,101,121, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69, -82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, +114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,66,111,120, +83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73,68,95,65,78,89, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105, +111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,75,69,89, +95,86,65,76,95,82,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,114,103,101,32,98, +121,32,107,101,121,32,118,97,108,117,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +118,97,108,117,101,62,49,60,47,118,97,108,117,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, +62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121,108,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, -122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, +111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120, +71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109,101,61, -34,73,68,95,67,85,82,82,69,78,84,95,75,69,89,95,67,72,79,73,67,69,34,32, -115,117,98,99,108,97,115,115,61,34,71,100,97,67,104,111,105,99,101,34,62, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,99,117,114,114,101, +110,116,32,116,97,98,108,101,32,107,101,121,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,56,53,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, -76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108, 97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,105,109,112,111,114,116, -32,116,97,98,108,101,32,107,101,121,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44,53,100,60, -47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95, -67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73, -71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111, -105,99,101,34,32,110,97,109,101,61,34,73,68,95,73,77,80,79,82,84,95,75, -69,89,95,67,72,79,73,67,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,53,44, -45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -99,111,108,115,62,51,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,114,111,119,115,62,50,60,47, -114,111,119,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,118,103,97,112,62,50,60,47,118,103,97,112,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,76,69,70,84,60,47,102,108,97,103,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,50,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, -101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,82,97,100,105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,82,69,67,95,79,82,68,69,82,95,82,66,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -77,101,114,103,101,32,98,121,32,114,101,99,111,114,100,32,111,114,100,101, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +115,115,61,34,115,112,97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,44, +53,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76, +73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,73,71,78,95,67,69,78,84,69,82,95,86,69,82,84,73,67,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, -116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50, -60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122, -101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, -111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,69,120,99,108,117,100,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66, -111,120,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,85,68,69,95,76, -73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,55,55, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105, -111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69, +78,84,95,75,69,89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115, +61,34,71,100,97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,56,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, 122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34, -73,68,95,73,78,67,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32, +97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +32,60,108,97,98,101,108,62,105,109,112,111,114,116,32,116,97,98,108,101, +32,107,101,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101, +114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,53,44,53,100,60,47,115,105,122,101,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, -84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, +72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,73,71,78,95,67,69,78,84, +69,82,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97, +103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,73,77,80,79,82,84,95,75,69,89,95,67,72,79,73,67,69,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,115,105,122,101,62,56,53,44,45,49,100,60,47,115,105,122, +101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102, 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,108,115,62,51,60,47,99, +111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,114,111,119,115,62,50,60,47,114,111,119,115,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,118,103, +97,112,62,50,60,47,118,103,97,112,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,76,69,70,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,53,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69, +82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,82,69,67,95,79,82,68, +69,82,95,82,66,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,114,103,101,32,98,121, +32,114,101,99,111,114,100,32,111,114,100,101,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100,101,114, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47, +111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61, -34,73,68,95,73,78,67,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, +116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,120,99,108,117,100,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82, -95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, -101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88, -67,76,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115, -105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101, +61,34,73,68,95,69,88,67,76,85,68,69,95,76,73,83,84,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,115,105,122,101,62,57,48,44,55,55,100,60,47,115,105,122,101,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78, +71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, +112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, +88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,38,108,116,59,60,47,108,97,98,101,108, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, +117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,65, +76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, +62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,38,103,116,59,38,103,116,59,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, @@ -36744,239 +36639,303 @@ static unsigned char xml_res_file_11[] = { 108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117, -116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,65,76, -76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90, -79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32, +116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,79,78,69, +95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51, +48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83, -116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,73,110,99,108,117,100,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, -119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84, -65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109, -101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,115,105,122,101,62,57,48,44,55,55,100,60,47,115,105,122,101, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73, -78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,79,78,69,95,66,85,84, +84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73, +71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, -49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, -105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, -80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32, +110,97,109,101,61,34,73,68,95,69,88,67,76,95,65,76,76,95,66,85,84,84,79, +78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38, +108,116,59,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65, +76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, 67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111, -112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,73, -71,78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,124,119,120, -76,69,70,84,124,119,120,82,73,71,72,84,124,119,120,84,79,80,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69, +95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,67,104,101,99,107,66,111,120,34, -32,110,97,109,101,61,34,73,68,95,77,69,82,71,69,95,79,86,69,82,87,82,73, -84,69,95,83,65,77,69,95,70,73,69,76,68,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115, -101,32,101,120,105,115,116,105,110,103,32,102,105,101,108,100,32,110,97, -109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60, -47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, -110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62, -50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,80,97,114,97,109,101,116,101,114,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, -114,62,50,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, -101,110,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,76,69, -70,84,124,119,120,82,73,71,72,84,124,119,120,84,79,80,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95, -72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,77,69, -82,71,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,97,109,112,59,77,101,114,103,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66, -79,84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, +110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, +120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,99,108, +117,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,73, +78,67,76,85,68,69,95,76,73,83,84,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105, +122,101,62,57,48,44,55,55,100,60,47,115,105,122,101,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105, +111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,76,124,119,120,69,88,80,65,78,68,60,47,102,108, +97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +72,79,82,73,90,79,78,84,65,76,124,119,120,76,69,70,84,124,119,120,82,73, +71,72,84,124,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47, +98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111, -110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,76,79,83,69,34,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108, -111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, +120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,67,104,101,99,107,66,111,120,34,32,110,97,109,101,61, +34,73,68,95,77,69,82,71,69,95,79,86,69,82,87,82,73,84,69,95,83,65,77,69, +95,70,73,69,76,68,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,32,101,120,105, +115,116,105,110,103,32,102,105,101,108,100,32,110,97,109,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110, +116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88, +80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,50,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, +120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72, +79,82,73,90,79,78,84,65,76,124,119,120,76,69,70,84,124,119,120,82,73,71, +72,84,124,119,120,84,79,80,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,60,98,111,114,100,101,114,62,52,60,47,98,111,114,100,101,114,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, +116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124, +119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, +47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,119,120,73,68,95,77,69,82,71,69,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,77,101, +114,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,60,102,108,97,103,62,119,120,66,79,84,84,79,77,124,119,120,76,69,70, 84,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, 101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,116,105,116,108,101,62,77,101,114,103,101, -60,47,116,105,116,108,101,62,10,32,32,32,32,60,99,101,110,116,101,114,101, -100,62,49,60,47,99,101,110,116,101,114,101,100,62,10,32,32,32,32,60,115, -116,121,108,101,62,119,120,67,65,80,84,73,79,78,124,119,120,83,89,83,84, -69,77,95,77,69,78,85,124,119,120,82,69,83,73,90,69,95,66,79,82,68,69,82, -124,119,120,67,76,79,83,69,95,66,79,88,60,47,115,116,121,108,101,62,10, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109, -101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,68,76,71,34,32,115,117,98, -99,108,97,115,115,61,34,68,105,115,115,111,108,118,101,68,108,103,34,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,60,111,114, -105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101, -110,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120, +73,68,95,67,76,79,83,69,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,108,111,115,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,66,79, +84,84,79,77,124,119,120,76,69,70,84,124,119,120,82,73,71,72,84,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,116,105, +116,108,101,62,77,101,114,103,101,60,47,116,105,116,108,101,62,10,32,32, +32,32,60,99,101,110,116,101,114,101,100,62,49,60,47,99,101,110,116,101, +114,101,100,62,10,32,32,32,32,60,115,116,121,108,101,62,119,120,67,65,80, +84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,119,120,82, +69,83,73,90,69,95,66,79,82,68,69,82,124,119,120,67,76,79,83,69,95,66,79, +88,60,47,115,116,121,108,101,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,68, +105,97,108,111,103,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76, +86,69,95,68,76,71,34,32,115,117,98,99,108,97,115,115,61,34,68,105,115,115, +111,108,118,101,68,108,103,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62, +10,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84, +73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, +101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,83,99,114,111,108,108,101,100,87,105,110,100, +111,119,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95, +83,67,82,79,76,76,95,87,73,78,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +115,116,121,108,101,62,119,120,72,83,67,82,79,76,76,124,119,120,86,83,67, +82,79,76,76,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, +83,105,122,101,114,34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76, +86,69,95,83,67,82,79,76,76,95,87,73,78,95,83,73,90,69,82,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,99, -114,111,108,108,101,100,87,105,110,100,111,119,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,83,79,76,86,69,95,83,67,82,79,76,76,95,87,73,78,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,72, -83,67,82,79,76,76,124,119,120,86,83,67,82,79,76,76,60,47,115,116,121,108, -101,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,32,110,97, -109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,83,67,82,79,76,76,95, -87,73,78,95,83,73,90,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105, -122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105, -116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97, -116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32, -118,97,114,105,97,98,108,101,32,102,111,114,32,100,105,115,115,111,108, -118,105,110,103,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,32,118,97,114,105,97,98,108,101,32,102,111, +114,32,100,105,115,115,111,108,118,105,110,103,58,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, +86,69,82,84,73,67,65,76,124,119,120,82,73,71,72,84,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, -65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119, -120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,55,60,47,98,111, -114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, -114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -67,104,111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69, -78,84,95,75,69,89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115, -61,34,71,100,97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,53,44,45,49, -100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,67,104,111,105,99,101,34,32,110,97,109, +101,61,34,73,68,95,67,85,82,82,69,78,84,95,75,69,89,95,67,72,79,73,67,69, +34,32,115,117,98,99,108,97,115,115,61,34,71,100,97,67,104,111,105,99,101, +34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,56,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, +108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84, +73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72,79,82, +73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, -78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86, -69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,49, -48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,120,65,76,76, +60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +98,111,114,100,101,114,62,49,48,60,47,98,111,114,100,101,114,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97, +109,101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99, +84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32, +118,97,114,105,97,98,108,101,115,58,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, +100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, -99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120,73, -68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119, +120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, 105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111, @@ -36984,122 +36943,115 @@ static unsigned char xml_res_file_11[] = { 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,101,108,101,99,116,32,118,97,114,105,97,98,108, -101,115,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, -72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102, -108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,98,111,114,100,101,114,62,56,60,47,98,111,114,100,101,114,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, -114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, -105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, +109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120, +34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,85,68,69,95,76,73,83,84, +34,32,115,117,98,99,108,97,115,115,61,34,71,100,97,76,105,115,116,66,111, +120,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55, +100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121, +108,101,62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49, +60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120, +69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, 114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110, -97,109,101,61,34,73,68,95,69,88,67,76,85,68,69,95,76,73,83,84,34,32,115, -117,98,99,108,97,115,115,61,34,71,100,97,76,105,115,116,66,111,120,34,62, +32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97, +109,101,61,34,73,68,95,73,78,67,95,65,76,76,95,66,85,84,84,79,78,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100,60, +32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60, 47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101, -62,119,120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +38,103,116,59,38,103,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78, +84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, -68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73, -78,67,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, +78,67,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,38,103,116,59, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76, -76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, -62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,103,116,59,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,79,78,69,95, -66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62, -51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78, +84,69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102, +108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60, +47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34, +32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,79,78,69,95,66,85,84,84, +79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,51,48,44,45, +49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,38,108,116,59,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,38,103,116,59,60,47,108,97,98,101,108,62,10,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73,90,79,78,84, +65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102, -108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,69,82,95,72,79,82,73, -90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32, +60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100,101,114, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73, -68,95,69,88,67,76,95,79,78,69,95,66,85,84,84,79,78,34,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88, +67,76,95,65,76,76,95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59, +60,115,105,122,101,62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,108,116,59,38,108,116,59, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -37110,130 +37062,110 @@ static unsigned char xml_res_file_11[] = { 62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86, +69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71, +78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120, +86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116, -116,111,110,34,32,110,97,109,101,61,34,73,68,95,69,88,67,76,95,65,76,76, -95,66,85,84,84,79,78,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101, -62,51,48,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114, +105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109, +101,61,34,73,68,95,73,78,67,76,85,68,69,95,76,73,83,84,34,32,115,117,98, +99,108,97,115,115,61,34,71,100,97,76,105,115,116,66,111,120,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,38,108,116,59,38,108,116,59,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100,60,47,115, +105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119, +120,76,66,95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -69,82,95,72,79,82,73,90,79,78,84,65,76,124,119,120,65,76,76,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98, -111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, +116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65, -76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, -82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, +116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78, +68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114, +105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114, +105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, +49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76, +124,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101, +114,62,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, +32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,72,79,82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,56,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105, +99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100, +58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103, +62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65, +76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114, +100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,67,79,85, +78,84,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,117,110,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73, -67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32, +32,32,60,115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115, +116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, 34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68, -95,73,78,67,76,85,68,69,95,76,73,83,84,34,32,115,117,98,99,108,97,115,115, -61,34,71,100,97,76,105,115,116,66,111,120,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,115,105,122,101,62,57,48,44,56,55,100,60,47,115,105,122,101,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73, -78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62, -49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97, -103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62, -119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112, -116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,69,88, -80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119, -120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112, -116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69, -88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,72,79, -82,73,90,79,78,84,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,56,60,47, -98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,58,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, -120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, -102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,98,111,114,100,101,114,62,48,60,47,98,111,114,100,101, -114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,82,97,100,105,111,66,117,116,116,111,110,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,83,79,76,86,69,95,67,79,85,78,84, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,111,117,110,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,118,97,108,117,101,62,48,60,47,118,97,108,117,101,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -115,116,121,108,101,62,119,120,82,66,95,71,82,79,85,80,60,47,115,116,121, -108,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100,105, -111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,73,83, -83,79,76,86,69,95,65,86,71,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,118,101, -114,97,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,82,97,100, +105,111,66,117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,83,79,76,86,69,95,65,86,71,34,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,118,101, +114,97,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, @@ -37426,135 +37358,139 @@ static unsigned char xml_res_file_11[] = { 101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, 101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,77,101,116,104,111,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111, -114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60, -47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98, -111,114,100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,83,116,97,116,105,99,66,111,120,83,105,122,101,114,34,32,110,97,109, -101,61,34,119,120,73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120, +65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,98,111,114,100,101,114,62,53,60,47,98,111,114,100, +101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,101,116,104,111,100,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101, +110,116,62,119,120,86,69,82,84,73,67,65,76,60,47,111,114,105,101,110,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,66,111,120,83,105,122,101,114,34,32,110,97,109,101,61,34,119,120, +73,68,95,65,78,89,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101, +114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101, -120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,107, -101,121,58,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,124,119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114, -100,101,114,62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104, -111,105,99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69,78,84, -95,75,69,89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115,61, -34,71,100,97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,53, -44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, -67,65,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116, -62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95, -86,69,82,84,73,67,65,76,124,119,120,66,79,84,84,79,77,60,47,102,108,97, -103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111, -114,100,101,114,62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116, -101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -83,116,97,116,105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -101,108,101,99,116,32,102,105,101,108,100,115,58,60,47,108,97,98,101,108, +99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34, 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78, -95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62, +32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,107,101,121,58,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124, +119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,55,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, -98,111,114,100,101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,111,114,105,101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60, -47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109, -34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,105, +99,101,34,32,110,97,109,101,61,34,73,68,95,67,85,82,82,69,78,84,95,75,69, +89,95,67,72,79,73,67,69,34,32,115,117,98,99,108,97,115,115,61,34,71,100, +97,67,104,111,105,99,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,56,53,44,45,49,100, +60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119, +120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,60,47, +102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,72, +79,82,73,90,79,78,84,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, +97,103,62,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73, +67,65,76,124,119,120,66,79,84,84,79,77,60,47,102,108,97,103,62,10,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114, +62,49,53,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62, +10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116, +105,99,84,101,120,116,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99, +116,32,102,105,101,108,100,115,58,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,60,102,108,97,103,62,119,120,65,76,73,71,78,95,67,69,78,84, +82,69,95,86,69,82,84,73,67,65,76,60,47,102,108,97,103,62,10,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100, +101,114,62,48,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,114,105, +101,110,116,62,119,120,72,79,82,73,90,79,78,84,65,76,60,47,111,114,105, +101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,66,111,120,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83,105,122,101, 114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82, -84,73,67,65,76,60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101, -109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34, -73,68,95,69,88,67,76,85,68,69,95,76,73,83,84,34,32,115,117,98,99,108,97, -115,115,61,34,71,100,97,76,105,115,116,66,111,120,34,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105, +122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,66,111,120,83,105,122,101,114,34,62,10,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,115,105,122,101,62,57,48,44,56,55,100,60,47,115,105,122, -101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66, -95,83,73,78,71,76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32, +32,32,32,60,111,114,105,101,110,116,62,119,120,86,69,82,84,73,67,65,76, +60,47,111,114,105,101,110,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111, -110,62,49,60,47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108, -97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,76,105,115,116,66,111,120,34,32,110,97,109,101,61,34,73,68,95,69,88, +67,76,85,68,69,95,76,73,83,84,34,32,115,117,98,99,108,97,115,115,61,34, +71,100,97,76,105,115,116,66,111,120,34,62,10,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +115,105,122,101,62,57,48,44,56,55,100,60,47,115,105,122,101,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110, -62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108, -97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32, +32,32,32,32,32,32,60,115,116,121,108,101,62,119,120,76,66,95,83,73,78,71, +76,69,60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,112,116,105,111,110,62,49,60, +47,111,112,116,105,111,110,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62, +119,120,69,88,80,65,78,68,60,47,102,108,97,103,62,10,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120, -83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +60,111,112,116,105,111,110,62,49,60,47,111,112,116,105,111,110,62,10,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,60,47,102,108,97,103, +62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,111,120,83, +105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66, 117,116,116,111,110,34,32,110,97,109,101,61,34,73,68,95,73,78,67,95,65, @@ -37936,7 +37872,7 @@ static unsigned char xml_res_file_11[] = { 47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62, 10}; -static size_t xml_res_size_12 = 194399; +static size_t xml_res_size_12 = 243470; static unsigned char xml_res_file_12[] = { 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,73,83,79,45,56,56,53,57,45,49,53,34,63, @@ -37971,1525 +37907,2849 @@ static unsigned char xml_res_file_12[] = { 115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,88,80,79,82,84,95,83,69,76,69,67,84,69,68,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, -99,116,101,100,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,38,97,109,112,59,79,112,101,110,32,80,114,111, -106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -97,99,99,101,108,62,67,116,114,108,43,79,60,47,97,99,99,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +34,73,68,95,69,88,80,79,82,84,95,83,69,76,69,67,84,69,68,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, +99,116,101,100,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,69,78,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,38,97,109,112,59,79,112,101,110,32,80,114,111, +106,101,99,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +97,99,99,101,108,62,67,116,114,108,43,79,60,47,97,99,99,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,65,83,95, +80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,97,118,101,32,80,114,111,106,101,99,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,80, +82,79,74,69,67,84,95,73,78,70,79,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,80,114,111,106,101,99,116,32,73,110,102,111,114,109,97, +116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73,68, +95,80,82,69,70,69,82,69,78,67,69,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,80,114,101,102,101,114,101,110,99,101,115,46,46,46, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,76,79,83,69,95,80, +82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,119,120,73,68,95,69,88,73,84,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,69,120,105,116,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,38,97,109,112,59,69,100,105,116,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, +73,77,69,95,69,68,73,84,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,65,84,95,67,76, +65,83,83,73,70,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,97,116,101,103,111,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112, +59,84,111,111,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,87, +69,73,71,72,84,83,95,77,65,78,65,71,69,82,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,87,101,105,103,104,116,115,32,77,97,110,97,103, +101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,104,97,112,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,80,79,73,78,84,83,95,70,82,79,77,95,84,65,66,76,69,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,115, +32,102,114,111,109,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,65,80, +69,95,80,79,76,89,71,79,78,83,95,70,82,79,77,95,71,82,73,68,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101, +32,71,114,105,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,84,65,66,76,69,95,83,80,65,84,73,65,76,95,74,79,73,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97, +108,32,74,111,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,68,73,83,83,79,76,86,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,115, +111,108,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,84,38,97,109,112,59,97,98,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65,71,71,82,69,71,65,84, +73,79,78,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,103,103,114,101,103,97,116,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,77, +69,82,71,69,95,84,65,66,76,69,95,68,65,84,65,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,101,114,103,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,84,65,66,76,69,95,82,65,78,71,69,95,83,69,76, +69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,101,108,101,99,116,105,111,110,32,84,111,111,108,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65, +66,76,69,95,73,78,86,69,82,84,95,83,69,76,69,67,84,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,118,101,114,116,32, +83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,67,76,69, +65,82,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,108,101,97,114,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, +85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, +77,79,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,84,79,80,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,118,101,32,83,101,108, +101,99,116,101,100,32,116,111,32,84,111,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,84,65,66,76,69,95,70,73,69,76,68,95,67,65,76, +67,85,76,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,97,108,99,117,108,97,116,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65, +68,68,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66, +76,69,95,68,69,76,69,84,69,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,101,108,101,116,101,32,86,97,114,105, +97,98,108,101,40,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,69,68,73,84,95,70,73, +69,76,68,95,80,82,79,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,100,105,116,32,86,97,114,105,97,98,108,101,32,80,114,111,112, +101,114,116,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,65,66, +76,69,95,69,78,67,79,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,69,110,99,111,100,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,69,78,67,79,68,73,78,71,95,85,84,70,56,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84, +70,45,56,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,69,78,67,79,68,73,78,71,95,85,84,70,49,54,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40, +85,84,70,45,49,54,76,69,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,54,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,114,97,98,105,99, +32,40,87,105,110,100,111,119,115,45,49,50,53,54,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, +95,73,83,79,95,56,56,53,57,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,101,110,116,114,97,108,32,69,117,114,111,112, +101,97,110,32,76,97,116,105,110,45,50,32,40,73,83,79,45,56,56,53,57,45, +50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97, +108,32,69,117,114,111,112,101,97,110,32,40,87,105,110,100,111,119,115,45, +49,50,53,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,53,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108,32, +69,117,114,111,112,101,97,110,32,40,67,80,56,53,50,41,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, +95,71,66,50,51,49,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,105,110,101,115,101,32,83,105,109,112,108,105,102,105, +101,100,32,40,71,66,50,51,49,50,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,66,73,71,53,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105, +110,101,115,101,32,84,114,97,100,105,116,105,111,110,97,108,32,40,66,105, +103,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,53,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108, +105,99,32,40,73,83,79,45,56,56,53,57,45,53,41,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,75,79, +73,56,95,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,121,114,105,108,108,105,99,32,40,75,79,73,56,45,82,41,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, +71,95,87,73,78,68,79,87,83,95,49,50,53,49,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,87, +105,110,100,111,119,115,45,49,50,53,49,41,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,67,80,56, +54,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +121,114,105,108,108,105,99,47,82,117,115,115,105,97,110,32,40,67,80,56, +54,54,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,55,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,101,101,107,32, +40,73,83,79,45,56,56,53,57,45,55,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, +56,53,57,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,101,98,114,101,119,32,40,73,83,79,45,56,56,53,57,45,56,45,49, +41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, +67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114,101,119,32, +40,87,105,110,100,111,119,115,45,49,50,53,53,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95, +83,72,73,70,84,95,74,73,83,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,74,97,112,97,110,101,115,101,32,40,83,104,105,102,116, +95,74,73,83,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,74,80,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110,101,115,101, +32,40,69,85,67,45,74,80,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,75,82,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,111,114,101,97, +110,32,40,69,85,67,45,75,82,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53, +57,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,78,111,114,100,105,99,32,76,97,116,105,110,45,54,32,40,73,83,79,45,56, +56,53,57,45,49,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,51,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,111,117, +116,104,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110,45,51,32, +40,73,83,79,45,56,56,53,57,45,51,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, +56,53,57,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,84,117,114,107,105,115,104,32,76,97,116,105,110,45,53,32,40,73,83, +79,45,56,56,53,57,45,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49, +50,53,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,117,114,107,105,115,104,32,40,87,105,110,100,111,119,115,45,49,50,53, +52,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,56,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,116,110,97, +109,101,115,101,32,40,87,105,110,100,111,119,115,45,49,50,53,56,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79, +68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117,114,111,112, +101,97,110,32,76,97,116,105,110,45,49,32,40,73,83,79,45,56,56,53,57,45, +49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117, +114,111,112,101,97,110,32,76,97,116,105,110,45,57,32,40,73,83,79,45,56, +56,53,57,45,49,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, +83,69,84,95,76,79,67,65,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,101,116,117,112,32,78,117,109,98,101,114,32,70,111,114, +109,97,116,116,105,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84, +95,67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,38,97,109,112,59,77,97,112,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77, +69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,104,101,109,101,108,101,115,115,32,77,97,112,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73, +76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,81,117,97,110,116,105,108,101,32,77,97,112,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,50,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81, +85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78, +84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95, +55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,56,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89, +83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, +99,101,110,116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, +65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105, +110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76, +89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101, +61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83, +95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32, +68,101,118,105,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77, +65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113, +117,101,32,86,97,108,117,101,115,32,77,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77, +65,80,65,78,65,76,89,83,73,83,95,67,79,76,79,67,65,84,73,79,78,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111,99,97, +116,105,111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82, +69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84, +85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, +65,84,85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, +95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69, +65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66, +82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, +113,117,97,108,32,73,110,116,101,114,118,97,108,115,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, +69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95, +73,78,84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, +65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, +81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82, +86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, +69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114, +99,104,105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69, +78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111, +109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69, +87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97, +116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,82,65,87,82,65, +84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, +97,119,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69, +88,67,69,83,83,82,73,83,75,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,69,120,99,101,115,115,32,82,105,115,107,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, +69,83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95,83,77,79,79,84, +72,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, +69,83,95,83,80,65,84,73,65,76,95,82,65,84,69,95,83,77,79,79,84,72,69,82, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97, +116,105,97,108,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,80,65,84, +73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, +32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,82,97,116,101,115,45,67,97,108,99,117,108,97,116,101,100, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, +79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,77,65,80,95,86,73,69,87,95, +77,65,80,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,110,100,105,116,105,111,110,97,108,32,77,97,112,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +72,79,87,95,67,65,82,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,103, +114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, +87,95,68,65,84,65,95,77,79,86,73,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,77,97,112,32,77,111,118,105,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,72,73,83,84,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,72,105,115,116,111,103,114,97,109,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,111,120,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82,80, +76,79,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99, +97,116,116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82, +80,76,79,84,95,77,65,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,99,97,116,116,101,114,32,80,108,111,116,32,77,97,116,114,105, +120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,77,95,66,85,66,66,76,69,67,72,65,82,84,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,66,117,98,98,108,101,32,67,104,97,114, +116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,77,95,51,68,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,68,32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +80,67,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97, +114,97,108,108,101,108,32,67,111,111,114,100,105,110,97,116,101,32,80,108, +111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,76,73,78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,118,101,114,97,103,101,115,32,67,104, +97,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,111,110,100,105,116,105,111,110,97,108,32,80,108,111,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73, +79,78,65,76,95,77,65,80,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,77,97,112,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87, +95,67,79,78,68,73,84,73,79,78,65,76,95,72,73,83,84,95,86,73,69,87,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,115,116, +111,103,114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84, +73,79,78,65,76,95,83,67,65,84,84,69,82,95,86,73,69,87,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32, +80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73, +79,78,65,76,95,66,79,88,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,66,111,120,32,80,108,111,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,69,38,97,109,112,59,120,112,108,111,114,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,76,85,83,84,69,82, +73,78,71,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,108,117,115,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, +76,83,95,68,65,84,65,95,80,67,65,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,80,67,65,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,77, +68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,68,83, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,84,79,79,76,83,95,68,65,84,65,95,84,83,78,69,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,116,45,83,78,69,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75, +77,69,65,78,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +75,32,77,101,97,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77, +69,68,73,65,78,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,75,32,77,101,100,105,97,110,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65, +84,65,95,75,77,69,68,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,75,32,77,101,100,111,105,100,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, +68,65,84,65,95,83,80,69,67,84,82,65,76,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,112,101,99,116,114,97,108,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, +76,83,95,68,65,84,65,95,72,67,76,85,83,84,69,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97, +108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, +68,65,84,65,95,68,66,83,67,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65, +84,65,95,72,68,66,83,67,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,72,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,67,72,67,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,67,72,67,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, +79,79,76,83,95,68,65,84,65,95,83,75,65,84,69,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,115,107,97,116,101,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79, +79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,65,90, +80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,90,80,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,84,79,79,76,83,95,68,65,84,65,95,77,65,88,80,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,109,97,120,45,112,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,38,97,109,112,59,83,112,97,99,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +77,83,80,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +110,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,77,95,71,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115, +32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,68,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,77, +111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,114, +97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97,116,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83, +65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105, +118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115, +32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,85,78,73,95,77,69,68,73,65,78,95,76,73,83,65,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105, +97,116,101,32,77,101,100,105,97,110,32,76,111,99,97,108,32,77,111,114,97, +110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,77,85,76,84,73,95,76,73,83,65,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97, +116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +68,73,70,70,95,76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,76,111,99,97, +108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69,66, +82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +111,99,97,108,32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69, +66,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,76,111,99,97,108,32,71,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84, +65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99, +97,108,32,71,42,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76, +79,67,65,76,95,74,79,73,78,84,95,67,79,85,78,84,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32, +76,111,99,97,108,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66, +73,86,95,76,74,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,74,111,105,110, +32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,74,67,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111,99,97,116,105, +111,110,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +111,99,97,108,32,71,101,97,114,121,32,77,97,112,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97, +116,101,32,76,111,99,97,108,32,71,101,97,114,121,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76,95,76, +79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,77,117,108,116,105,118,97,114,105,97,116,101,32,76,111,99, +97,108,32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,85,78,73,95,81,85,65,78,84,73,76,69,95,76,73,83,65,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105, +97,116,101,32,81,117,97,110,116,105,108,101,32,76,73,83,65,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +77,85,76,95,81,85,65,78,84,73,76,69,95,76,73,83,65,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,77,117,108,116,105,118,97,114,105,97, +116,101,32,81,117,97,110,116,105,108,101,32,76,73,83,65,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,79,67,65,76,95,77, +65,84,67,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, +111,99,97,108,32,78,101,105,103,104,98,111,114,32,77,97,116,99,104,32,84, +101,115,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,79, +82,82,69,76,79,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,112,97,116,105,97,108,32,67,111,114,114,101,108,111,103,114, +97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,77,95,68,73,83,84,65,78,67,69,95,80,76,79,84,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101, +32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,105,109,38,97,109,112,59,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, +87,95,84,73,77,69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,105,109,101,32,80,108,97,121,101,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,86,65,82,95,71,82,79,85,80,73,78,71,95,69,68,73,84,79,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,101,32,69,100,105, +116,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,82,101,103,114,101, +115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,69,71,82,69,83,83, +73,79,78,95,67,76,65,83,83,73,67,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49, +60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,38,97,109,112,59,72,101,108,112,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,119,120,73,68,95,67,72,69,67,75,85,80,68,65,84,69,83,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,101,99,107,32,85, +112,100,97,116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,119,120,73,68,95,82,69,80,79,82,84,66,85,71,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,117,103,32,82, +101,112,111,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,119,120,73,68,95,68,79,78,65,84,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,111,110,97,116,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73, +68,95,65,66,79,85,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,98,111,117,116,32,71,101,111,68,97,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,68,69,70,65,85,76,84,95,77,69,78, +85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,108,97,98,101,108,62, +79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,51, +68,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76, +95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,71,72,76,73, +71,72,84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,72,105,103,104,108,105,103,104,116,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107, +103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,79,88, +95,78,69,87,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, +79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, +103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,72,73,78,71, +69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49, +46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83, +95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79, +78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116, +32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105, +115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65, +120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88, +69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,86,101,114,116,105,99,97,108,32,65,120,105,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, +85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, +101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, +73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, +97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, +97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80, +76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10, +32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, +103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,72,73,78,71, +69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49, +46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83, +95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114, +111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84, +85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, +69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, +99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80, +66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, +32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,66,79,88,80,76,79,84,95,86,73,69,87,95,77,69, +78,85,95,67,79,78,84,69,88,84,34,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,72,105,110,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73, +79,78,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,84,73,79,78,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,51,46,48,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85, +78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,97,99,107,103,114,111,117,110,100,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84, +85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, +69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, +99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80, +66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, +32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, +115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,77,65,80, +95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70, +95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72, +69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82, +79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89, +83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61, +49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, +76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103, +101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68, +68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116, +97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85, +78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, +95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76, +95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,65,83,95, -80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,80,114,111,106,101,99,116,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,80, -82,79,74,69,67,84,95,73,78,70,79,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,80,114,111,106,101,99,116,32,73,110,102,111,114,109,97, -116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73,68, -95,80,82,69,70,69,82,69,78,67,69,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,80,114,101,102,101,114,101,110,99,101,115,46,46,46, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,76,79,83,69,95,80, -82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,108,111,115,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,119,120,73,68,95,69,88,73,84,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,69,120,105,116,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,69,100,105,116,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, -73,77,69,95,69,68,73,84,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,65,84,95,67,76, -65,83,83,73,70,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,97,116,101,103,111,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112, -59,84,111,111,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,87, -69,73,71,72,84,83,95,77,65,78,65,71,69,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,87,101,105,103,104,116,115,32,77,97,110,97,103, -101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,97,112,101,60,47,108,97,98,101,108,62, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69, +78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,80,79,73,78,84,83,95,70,82,79,77,95,84,65,66,76,69,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,115, -32,102,114,111,109,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,65,80, -69,95,80,79,76,89,71,79,78,83,95,70,82,79,77,95,71,82,73,68,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101, -32,71,114,105,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,84,65,66,76,69,95,83,80,65,84,73,65,76,95,74,79,73,78,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97, -108,32,74,111,105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,68,73,83,83,79,76,86,69, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,115, -111,108,118,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +110,97,109,101,61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77, +65,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101, +114,97,114,99,104,105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117, +115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70, +95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +77,97,112,32,67,111,108,111,114,32,67,108,97,115,115,105,102,105,99,97, +116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,65,84,95,67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,84,38,97,109,112,59,97,98,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,86,69,82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, +84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65,71,71,82,69,71,65,84, -73,79,78,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,103,103,114,101,103,97,116,101,60,47,108,97,98,101,108,62,10, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82, +79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46, +53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,77, -69,82,71,69,95,84,65,66,76,69,95,68,65,84,65,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,77,101,114,103,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,84,65,66,76,69,95,82,65,78,71,69,95,83,69,76, -69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,101,108,101,99,116,105,111,110,32,84,111,111,108,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65, -66,76,69,95,73,78,86,69,82,84,95,83,69,76,69,67,84,73,79,78,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,73,110,118,101,114,116,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,67,76,69, -65,82,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,108,101,97,114,32,83,101,108,101,99,116,105,111, -110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, -85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, +46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, -77,79,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,84,79,80,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,118,101,32,83,101,108, -101,99,116,101,100,32,116,111,32,84,111,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,84,65,66,76,69,95,70,73,69,76,68,95,67,65,76, -67,85,76,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,97,108,99,117,108,97,116,111,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,65, -68,68,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,65,100,100,32,86,97,114,105,97,98,108,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66, -76,69,95,68,69,76,69,84,69,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,68,101,108,101,116,101,32,86,97,114,105, -97,98,108,101,40,115,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95,69,68,73,84,95,70,73, -69,76,68,95,80,82,79,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,69,100,105,116,32,86,97,114,105,97,98,108,101,32,80,114,111,112, -101,114,116,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,84,65,66, -76,69,95,69,78,67,79,68,73,78,71,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,69,110,99,111,100,101,60,47,108,97,98,101,108,62,10,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114, +100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,85,78,73,81,85,69,95,86,65, +76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,50,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95, +66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,85,84,70,56,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40,85,84, -70,45,56,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,53,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, +75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,69,78,67,79,68,73,78,71,95,85,84,70,49,54,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,99,111,100,101,32,40, -85,84,70,45,49,54,76,69,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81, +85,95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, +97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,54,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,114,97,98,105,99, -32,40,87,105,110,100,111,119,115,45,49,50,53,54,41,60,47,108,97,98,101, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,52,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,73,83,79,95,56,56,53,57,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,101,110,116,114,97,108,32,69,117,114,111,112, -101,97,110,32,76,97,116,105,110,45,50,32,40,73,83,79,45,56,56,53,57,45, -50,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,48,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97, -108,32,69,117,114,111,112,101,97,110,32,40,87,105,110,100,111,119,115,45, -49,50,53,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85, +66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83, +73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,86,101,114,116,105,99,97,108,32,66,105,110,115,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65, +84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,83, +85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,78,67,79,68,73,78,71,95,67,80,56,53,50,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,101,110,116,114,97,108,32, -69,117,114,111,112,101,97,110,32,40,67,80,56,53,50,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71, -95,71,66,50,51,49,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,67,104,105,110,101,115,101,32,83,105,109,112,108,105,102,105, -101,100,32,40,71,66,50,51,49,50,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,66,73,71,53,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,105, -110,101,115,101,32,84,114,97,100,105,116,105,111,110,97,108,32,40,66,105, -103,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,54,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85, +65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, +99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72, +105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,51,48,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32, +40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84,72, +95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +78,65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101, +97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95, +66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,53,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108, -105,99,32,40,73,83,79,45,56,56,53,57,45,53,41,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,75,79, -73,56,95,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,121,114,105,108,108,105,99,32,40,75,79,73,56,45,82,41,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78, -71,95,87,73,78,68,79,87,83,95,49,50,53,49,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,121,114,105,108,108,105,99,32,40,87, -105,110,100,111,119,115,45,49,50,53,49,41,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,67,80,56, -54,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -121,114,105,108,108,105,99,47,82,117,115,115,105,97,110,32,40,67,80,56, -54,54,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,55,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,71,114,101,101,107,32, -40,73,83,79,45,56,56,53,57,45,55,41,60,47,108,97,98,101,108,62,10,32,32, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,78,65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, -56,53,57,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,72,101,98,114,101,119,32,40,73,83,79,45,56,56,53,57,45,56,45,49, -41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78, -67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,98,114,101,119,32, -40,87,105,110,100,111,119,115,45,49,50,53,53,41,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95, -83,72,73,70,84,95,74,73,83,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,74,97,112,97,110,101,115,101,32,40,83,104,105,102,116, -95,74,73,83,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84, +95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,74,80,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,74,97,112,97,110,101,115,101, -32,40,69,85,67,45,74,80,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,69,85,67,95,75,82,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,111,114,101,97, -110,32,40,69,85,67,45,75,82,41,60,47,108,97,98,101,108,62,10,32,32,32,32, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97, +108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, +90,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53, -57,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,78,111,114,100,105,99,32,76,97,116,105,110,45,54,32,40,73,83,79,45,56, -56,53,57,45,49,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,51,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,111,117, -116,104,32,69,117,114,111,112,101,97,110,32,76,97,116,105,110,45,51,32, -40,73,83,79,45,56,56,53,57,45,51,41,60,47,108,97,98,101,108,62,10,32,32, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, +78,84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,73,83,79,95,56, -56,53,57,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,84,117,114,107,105,115,104,32,76,97,116,105,110,45,53,32,40,73,83, -79,45,56,56,53,57,45,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49, -50,53,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -84,117,114,107,105,115,104,32,40,87,105,110,100,111,119,115,45,49,50,53, -52,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -78,67,79,68,73,78,71,95,87,73,78,68,79,87,83,95,49,50,53,56,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,116,110,97, -109,101,115,101,32,40,87,105,110,100,111,119,115,45,49,50,53,56,41,60,47, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, +95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,55, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,78,67,79, -68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117,114,111,112, -101,97,110,32,76,97,116,105,110,45,49,32,40,73,83,79,45,56,56,53,57,45, -49,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, +95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -78,67,79,68,73,78,71,95,73,83,79,95,56,56,53,57,95,49,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,87,101,115,116,32,69,117, -114,111,112,101,97,110,32,76,97,116,105,110,45,57,32,40,73,83,79,45,56, -56,53,57,45,49,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,65,66,76,69,95, -83,69,84,95,76,79,67,65,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,101,116,117,112,32,78,117,109,98,101,114,32,70,111,114, -109,97,116,116,105,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84, -95,67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,38,97,109,112,59,77,97,112,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77, -69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -84,104,101,109,101,108,101,115,115,32,77,97,112,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73, -76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,81,117,97,110,116,105,108,101,32,77,97,112,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,50,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81, -85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78, -84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95, -55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,56,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,69,78,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82, +69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89, -83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, -69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, -99,101,110,116,105,108,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80, -65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105, -110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76, -89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101, -61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,77,65,80,65,78,65,76,89,83,73,83, -95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32, -68,101,118,105,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108, +32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65, +84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115, +116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77, -65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113, -117,101,32,86,97,108,117,101,115,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,77, -65,80,65,78,65,76,89,83,73,83,95,67,79,76,79,67,65,84,73,79,78,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111,99,97, -116,105,111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +32,60,108,97,98,101,108,62,72,111,114,105,122,111,110,116,97,108,32,66, +105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,84,69,71,79,82,73, +69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,67,97,116,101,103,111,114,105,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82, -69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,78, -65,84,85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78, -95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66,82,69, -65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,78,65,84,85,82,65,76,95,66, -82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66, -77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, -113,117,97,108,32,73,110,116,101,114,118,97,108,115,32,77,97,112,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +97,109,101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, +83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, +73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, +78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95, -73,78,84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, +79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105, +115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66, +65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67, +111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83, -95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83, +80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73, +69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84,69,82, -86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76, +69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, +101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114, -99,104,105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69, -78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111, -109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, +84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69, -87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97, -116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65, +78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85, +65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,82,65,87,82,65, -84,69,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -97,119,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69, -88,67,69,83,83,82,73,83,75,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,69,120,99,101,115,115,32,82,105,115,107,60,47,108,97,98, +95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,55,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, +95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,57,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, -69,83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95,83,77,79,79,84, -72,69,82,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84, -69,83,95,83,80,65,84,73,65,76,95,82,65,84,69,95,83,77,79,79,84,72,69,82, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97, -116,105,97,108,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,79,80,69,78,95,82,65,84,69,83,95,83,80,65,84, -73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, -32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,82,97,116,101,115,45,67,97,108,99,117,108,97,116,101,100, -32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,77,65,80,95,86,73,69,87,95, -77,65,80,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,110,100,105,116,105,111,110,97,108,32,77,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -72,79,87,95,67,65,82,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,97,114,116,111,103, -114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79, -87,95,68,65,84,65,95,77,79,86,73,69,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,77,97,112,32,77,111,118,105,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,72,73,83,84,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,72,105,115,116,111,103,114,97,109,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,66,79,88,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,111,120,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82,80, -76,79,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99, -97,116,116,101,114,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82, -80,76,79,84,95,77,65,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,99,97,116,116,101,114,32,80,108,111,116,32,77,97,116,114,105, -120,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,66,85,66,66,76,69,67,72,65,82,84,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,66,117,98,98,108,101,32,67,104,97,114, -116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,86,69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69, +78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +80,101,114,99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,51,68,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,51,68,32,83,99,97,116,116,101,114,32,80,108,111,116,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -80,67,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97, -114,97,108,108,101,108,32,67,111,111,114,100,105,110,97,116,101,32,80,108, -111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,76,73,78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,65,118,101,114,97,103,101,115,32,67,104, -97,114,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,49,53,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97, +112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,111,110,100,105,116,105,111,110,97,108,32,80,108,111,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73, -79,78,65,76,95,77,65,80,95,86,73,69,87,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,77,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87, -95,67,79,78,68,73,84,73,79,78,65,76,95,72,73,83,84,95,86,73,69,87,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,115,116, -111,103,114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,79,78,68,73,84, -73,79,78,65,76,95,83,67,65,84,84,69,82,95,86,73,69,87,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32, -80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,38,97,109,112,59, -120,112,108,111,114,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,67,76,85,83,84,69,82,73,78,71,95,77,69,78,85,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,108,117,115,116,101,114,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,80,67,65,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,65,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, -76,83,95,68,65,84,65,95,77,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,77,68,83,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,65,78,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,97,110,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,68,73,65,78,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,100,105,97, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,68,79,73,68,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,100, -111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,51,48, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, +77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,80,69,67,84, -82,65,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112, -101,99,116,114,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,67,76, -85,83,84,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -72,105,101,114,97,114,99,104,105,99,97,108,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68, -65,84,65,95,72,68,66,83,67,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,75,65,84,69,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,115,107,97,116,101, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,84,79,79,76,83,95,68,65,84,65,95,77,65,88,80,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,109,97,120,45,112,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,83,112,97,99,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -77,83,80,76,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, -110,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115,32,73,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,77,95,71,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,66,105,118,97,114,105,97,116,101,32,77,111,114,97,110,39,115, -32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,68,77,79,82,65,78,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,77, -111,114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,77,79,82,65,78,95,69,66,82,65,84, -69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,77,111,114, -97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97,116,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83, -65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105, -118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115, -32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,77,85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,66,105,118,97,114,105,97,116,101,32,76, -111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82,79,80, +76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,68,73,70,70,95, -76,73,83,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, -105,102,102,101,114,101,110,116,105,97,108,32,76,111,99,97,108,32,77,111, -114,97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69,66,82,65,84,69,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, -32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66,32,82,97, -116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67, -65,76,95,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -111,99,97,108,32,71,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,77,95,76,79,67,65,76,95,71,95,83,84,65,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, -32,71,42,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,79,67, -65,76,95,74,79,73,78,84,95,67,79,85,78,84,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76,111, -99,97,108,32,74,111,105,110,32,67,111,117,110,116,60,47,108,97,98,101,108, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108, +117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,66,73,86,95,76, -74,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,105,118, -97,114,105,97,116,101,32,76,111,99,97,108,32,74,111,105,110,32,67,111,117, -110,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,77,95,77,85,76,95,76,74,67,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,45,108,111,99,97,116,105,111,110,32,74,111, -105,110,32,67,111,117,110,116,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, -32,71,101,97,114,121,32,77,97,112,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -85,78,73,95,76,79,67,65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,76, -111,99,97,108,32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76,95,76,79,67, -65,76,95,71,69,65,82,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,117,108,116,105,118,97,114,105,97,116,101,32,76,111,99,97,108, -32,71,101,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, -67,79,82,82,69,76,79,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,112,97,116,105,97,108,32,67,111,114,114,101,108,111, -103,114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,84,105,109,38,97,109,112,59,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,72,79,87,95,84,73,77,69,95,67,72,79,79, -83,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,105, -109,101,32,80,108,97,121,101,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,86,65,82,95,71,82,79,85,80, -73,78,71,95,69,68,73,84,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,105,109,101,32,69,100,105,116,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,38,97,109,112,59,82,101,103,114,101,115,115,105,111,110,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,82,69,71,82,69,83,83,73,79,78,95,67,76,65,83,83, -73,67,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103, -114,101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,38,97,109,112,59,72,101,108,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120,73, -68,95,67,72,69,67,75,85,80,68,65,84,69,83,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,104,101,99,107,32,85,112,100,97,116,101,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -119,120,73,68,95,82,69,80,79,82,84,66,85,71,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,66,117,103,32,82,101,112,111,114,116,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,119,120, -73,68,95,68,79,78,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,68,111,110,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, +65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97, +107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,119,120,73,68,95,65,66,79,85,84,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,98,111,117,116,32, -71,101,111,68,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,68,69,70,65,85,76,84,95,77,69,78,85,95,79,80,84,73,79,78, -83,34,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,51,68,95,80,76,79,84,95, -86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,72,73,71,72,76,73,71,72,84,95,67,79,76,79, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,103, -104,108,105,103,104,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, -95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,66,79,88,95,78,69,87,95,80,76,79, -84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, +95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83, +95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, +65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,54, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,72,105,110,103,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65, +84,95,66,82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,84,73,79,78,83,95,72,73,78,71,69,95,49,53,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,46,53,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,72,73,78,71,69,95, -51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,46,48, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,57, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115, -112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74, -85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108, -97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69, +78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121, -32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,86, -101,114,116,105,99,97,108,32,65,120,105,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,50,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, -85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95, +73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,53,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, -101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, -73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, -97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, -97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, -105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80, -76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10, -32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, -103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,72,73,78,71, -69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49, -46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, +84,95,69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83, -95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114, -111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84, -85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, -99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80, -66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, -32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,66,79,88,80,76,79,84,95,86,73,69,87,95,77,69, -78,85,95,67,79,78,84,69,88,84,34,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,72,105,110,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73, -79,78,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,79,80,84,73,79,78,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,51,46,48,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, -114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85, -78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,66,97,99,107,103,114,111,117,110,100,60,47,108,97,98,101,108,62,10,32, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95, +66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, +67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, +117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,86,101,114,116,105,99,97,108,32, +66,105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84, -85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,84,72,69,77,69,76,69,83,83,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, +108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, -99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80, -66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, -32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,77,65,80, -95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70, -95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72, -69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, 32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78, +84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81, +85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,81,85,65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,55,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, +79,82,73,90,95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, +95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84, +72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,72,73, +78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48,41, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100, +32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,85,78,73,81,85,69,95,86,65,76, +85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, +105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,50, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, +90,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66, +82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,57,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69,78, +85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,50, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +69,81,85,95,73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, +90,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82, -79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, +78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,57,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, +111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, +69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101, +97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, +114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, +73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110,101,97, +114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76, +79,87,69,83,83,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82, +65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, +116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65, +84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, +69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, +108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, +95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32, +80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,65,88,69,83,95,83,67,65,76,69,95,86,65,76,85,69,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, +108,97,121,32,65,120,101,115,32,83,99,97,108,101,32,86,97,108,117,101,115, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,76,79,80,69,95,86,65,76,85,69,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32, +83,108,111,112,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89, -83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61, -49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, -76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103, -101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, +111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, +67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73, +82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68, -68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116, -97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, +76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76, +79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103, +114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, +85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, +85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85, -78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62, +32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79, +95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85, +95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101, +115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81, +85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62, 10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76, -95,66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69, -78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, -97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77, -65,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101, -114,97,114,99,104,105,99,97,108,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117, -115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70, -95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -77,97,112,32,67,111,108,111,114,32,67,108,97,115,115,105,102,105,99,97, -116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -67,65,84,95,67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,86,69,82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, -84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82, -79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, +82,84,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46, -53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79, +82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, -82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, -46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +82,84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49, +46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, 101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61, +51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, 69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10, 32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114, 100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10, @@ -39908,117 +41168,146 @@ static unsigned char xml_res_file_12[] = { 105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,84,69,71,79,82,73, -69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,67,97,116,101,103,111,114,105,101,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, -83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, -108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108, +32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83, +77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,104,111,119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87, +69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111,111,116, +104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76, +79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101, +116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83, +73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, -73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68, +105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, +32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,65,88,69,83,95,83, +67,65,76,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,68,105,115,112,108,97,121,32,65,120,101,115,32,83,99,97, +108,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, -78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95, +86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,83,108,111,112,101,32,86,97,108,117,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, -79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105, -115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, -119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66, -65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67, -111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, +116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83, -80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84, +76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105,110,101, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76, +76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, 10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73, -69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76, -69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, -101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,72,73,83,84,79,71,82,65,77,95,86,73,69, +87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83, +83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, +109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, @@ -40521,1695 +41810,1757 @@ static unsigned char xml_res_file_12[] = { 108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, -114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110,101,97, -114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76, -79,87,69,83,83,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82, -65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105, -116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47, -108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65, -84,84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, -69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, -108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, -95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32, -80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -73,83,80,76,65,89,95,65,88,69,83,95,83,67,65,76,69,95,86,65,76,85,69,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, -108,97,121,32,65,120,101,115,32,83,99,97,108,101,32,86,97,108,117,101,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, -99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -73,83,80,76,65,89,95,83,76,79,80,69,95,86,65,76,85,69,83,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32, -83,108,111,112,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, -111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, -67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73, -82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76, -79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103, -114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108,111,114,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, +114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101,32,73,110,116,101, +114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77,69,78,85,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, +83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32, +68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110, +32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, +68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, +116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, 32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,66,79,88,80,76,79,84,95,86,73,69,87,95, +77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,66,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83, +83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101, +109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, -85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76, -85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79, -95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,73,83,84,79,71,82,65,77,95,86,73,69,87,95,77,69,78,85,95,79,80, -84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,67,65,84,95,67,76,65,83,83,73,70,95,66,95,77,69,78,85,34,62,10,32,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78, +84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, -78,68,95,86,69,82,84,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +78,68,95,86,69,82,84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, 32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65, -78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,50,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85, +65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,55,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, +95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,52,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,57,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +84,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,86,69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69, +78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +80,101,114,99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,54,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,49,53,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97, +112,32,40,72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,72,73,78,71,69,95,51,48, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, +77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82,79,80, +76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116, +105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, +69,82,84,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108, +117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, +65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97, +107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84, +95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83, +95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78, +65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,56,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,54, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65, +84,95,66,82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,68,95,86,69,82,84,95,81,85,65,78,84,95,49,48,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,67,72,79,82, -79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,57, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46, -53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69, -82,84,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51, -46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114, -100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, +95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,85,78,73,81,85,69,95,86,65, -76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85, -110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, -116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69, +78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,50,34, +73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,50,34, 62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86, -69,82,84,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32, +69,82,84,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32,32,32,32, 32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, 99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95, -66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95, +73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,53,34,62,10, +95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,53,34,62,10, 32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, -75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, 62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32, +79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32, 32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, +84,95,69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32, 32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,78,65,84,95,66,82, -75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, +84,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, 60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, 108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81, -85,95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, -97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,52,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,86,69,82, -84,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,86,69,82,84,95,69,81,85,95,73,78, -84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,86,69,82,84,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85, -66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83, -73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,86,101,114,116,105,99,97,108,32,66,105,110,115,32,66,114,101, -97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65, -84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85,34,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, -79,82,73,90,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,83, -85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,50,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95, +66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -81,85,65,78,84,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, +67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, +117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,86,101,114,116,105,99,97,108,32, +66,105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,67,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,52,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,84,72,69,77,69,76,69,83,83,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101, +108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, +73,90,95,81,85,65,78,84,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78, +84,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,51,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81, +85,65,78,84,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,53,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,81,85,65,78,84,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +73,90,95,81,85,65,78,84,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,54,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108, +61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84,95,55,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72, -79,82,73,90,95,81,85,65,78,84,95,55,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +79,82,73,90,95,81,85,65,78,84,95,56,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, 109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85,65,78,84, -95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, +95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -68,95,72,79,82,73,90,95,81,85,65,78,84,95,57,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +68,95,72,79,82,73,90,95,81,85,65,78,84,95,49,48,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84, +72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,81,85, -65,78,84,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76, -69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114, -99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72, -105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,72,73,78,71,69,95,51,48,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32, -40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,67,72,79,82,79,80,76,69,84,72, -95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110, +32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,72,73, +78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, +72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48,41, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, -101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -78,65,84,95,66,82,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101, -97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82, -73,90,95,78,65,84,95,66,82,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95, -66,82,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,52,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,78,65,84,95,66,82,75,83,95,53,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, +73,90,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100, +32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,85,78,73,81,85,69,95,86,65,76, +85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, +105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84, -95,66,82,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,55, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,50, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,56,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -78,65,84,95,66,82,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +78,65,84,95,66,82,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, 61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, -95,73,78,84,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118,97, -108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,54,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, -90,95,69,81,85,95,73,78,84,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32, +90,95,78,65,84,95,66,82,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, -78,84,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66, +82,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,52,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,78,65,84,95,66,82,75,83,95,57,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, -82,73,90,95,69,81,85,95,73,78,84,83,95,53,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85, -95,73,78,84,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +82,73,90,95,78,65,84,95,66,82,75,83,95,49,48,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79, +78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,83,85,66,77,69,78, +85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,55, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47, +73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,50, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99, 107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, 32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68, -95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,56,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62, +95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,51,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, 49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, 109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95, -69,81,85,95,73,78,84,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +69,81,85,95,73,78,84,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, 61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82, -69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65, -84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115, -116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,72,111,114,105,122,111,110,116,97,108,32,66, -105,110,115,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84, -69,82,86,65,76,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -104,111,111,115,101,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65,84,84,69, -82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68, -73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121, -32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65, -88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114, -101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, -79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65, -84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67, -79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66, -97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, -101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,54,34,62,10,32,32,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73, +90,95,69,81,85,95,73,78,84,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, -73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, -97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, -97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, -105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,82,84, -79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67, -65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65, -78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117, -97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78, -84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, +109,101,61,34,73,68,95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73, +78,84,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, 99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, 101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,53,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97, +95,67,79,78,68,95,72,79,82,73,90,95,69,81,85,95,73,78,84,83,95,57,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76, -69,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,72,79, +82,73,90,95,69,81,85,95,73,78,84,83,95,49,48,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80, +69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116, +111,109,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, +69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101, +97,116,101,32,78,101,119,32,67,117,115,116,111,109,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,111, +114,105,122,111,110,116,97,108,32,66,105,110,115,32,66,114,101,97,107,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80,76,79, +84,95,72,73,78,71,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,105,110,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,79,88,80,76,79,84,95, +72,73,78,71,69,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,79,88, +80,76,79,84,95,72,73,78,71,69,51,48,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,68,95,83,67,65,84,84,69,82,95,86, +73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83, +80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80, +114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83, +95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, +105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,68,95,66, +79,88,80,76,79,84,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85, -65,78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115, +32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, +71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, +111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,65,82,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77, +69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109, +101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, +76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99, -101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, -65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40, -72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97, -112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108,62, +68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72, +95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73, +78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,49,46,53,41,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, +95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61,51,46,48, +41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76, +89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97, +114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, 47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80, -76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, -76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86, -97,108,117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76, -95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97, -107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66, -82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69, +95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97, +116,117,114,97,108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, +73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +66,82,69,65,75,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +66,82,69,65,75,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +66,82,69,65,75,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, 32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,57,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, -66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, -97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +66,82,69,65,75,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,51,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69, +78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117, +97,108,32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +84,69,82,86,65,76,83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +84,69,82,86,65,76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +84,69,82,86,65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,57,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, -84,69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85, -83,84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66, -114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85, -83,84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78, -101,119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,97,115,115,105,102, -105,99,97,116,105,111,110,32,84,104,101,109,101,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, -84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,67,97,116,101,103,111,114,105,101,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,73,109, -112,114,111,118,101,32,67,97,114,116,111,103,114,97,109,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +84,69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,49,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,32,73,116,101, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95, +83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65, +83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,108,97,115,115,105,102,105,99,97,116,105,111,110,32,84, +104,101,109,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,67,65,84,69,71,79,82,73,69,83,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,97,116,101, +103,111,114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,73,109,112,114,111,118,101,32,67,97, +114,116,111,103,114,97,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,82,84,79,71, +82,65,77,95,73,77,80,82,79,86,69,95,49,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,49,32,73,116,101,114,97,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,50,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,32,73,116,101,114,97,116,105, +111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,67,65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,51, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,32,73,116,101, 114,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, 32,110,97,109,101,61,34,73,68,95,67,65,82,84,79,71,82,65,77,95,73,77,80, -82,79,86,69,95,50,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,50,32,73,116,101,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +82,79,86,69,95,52,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,52,32,73,116,101,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,82,84,79,71,82, -65,77,95,73,77,80,82,79,86,69,95,51,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,51,32,73,116,101,114,97,116,105,111,110,60,47,108, +65,77,95,73,77,80,82,79,86,69,95,53,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,53,32,73,116,101,114,97,116,105,111,110,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, 120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,52,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,52,32,73,116,101,114,97,116,105, +65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,54,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,54,32,73,116,101,114,97,116,105, 111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,65,82,84,79,71,82,65,77,95,73,77,80,82,79,86,69,95,53, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,32,73,116,101, -114,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,65,82,84,79,71,82,65,77,95,73,77,80, -82,79,86,69,95,54,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,54,32,73,116,101,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, +108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, +73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, +95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, +111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, +68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, +84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, +101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, +73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, +97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, +97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84, +79,71,82,65,77,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, +79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101, +32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,86,73,69,87,95,72,73,83,84,79,71,82,65,77,95,83,69,84,95,85,78, +73,81,85,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,116,32,97,115,32,85,110,105,113,117,101,32,86,97,108,117,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, +69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, +108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, +95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32, +80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,83,116, +97,116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,116,117,115,32,66, +97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, +71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, +111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,78,69,67,84,73,86,73,84,89,95,72,73,83,84,95,86,73, +69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,79,78, +78,69,67,84,73,86,73,84,89,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,111,110,110,101,99, +116,105,118,105,116,121,32,84,111,32,84,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +73,83,79,76,65,84,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,101,108,101,99,116,32,78,101,105,103,104,98,111,114,108,101,115,115, +32,79,98,115,101,114,118,97,116,105,111,110,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,79,71,82,65, +77,95,73,78,84,69,82,86,65,76,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,111,111,115,101,32,73,110,116,101,114,118,97,108,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,95,86, +73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, +83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115,116,105, +99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, 32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104, -97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, -95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107, +103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66, +65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, +32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69, +76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,79,78,78,69,67,84,73,86,73,84,89,95,77,65, +80,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,86,79,82,79,78,79,73,95,68, +73,65,71,82,65,77,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, -95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,86,79,82, +79,78,79,73,95,68,73,65,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,105,115,112,108,97,121,32,84,104,105,101,115,115, +101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,86,79, +82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,97,118,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,86,79,82,79, +78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,68,117,112,108,105, +99,97,116,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,105,101,115,115,101,110, +32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101, -115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +61,34,73,68,95,77,65,80,95,77,83,84,34,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,84, +79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +68,105,115,112,108,97,121,32,77,105,110,105,109,117,109,32,83,112,97,110, +110,105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, -79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,77,65,80,95,77,83,84,95,83,65,86,69,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,77,105,110,105,109,117,109, +32,83,112,97,110,110,105,110,103,32,84,114,101,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83, +84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, +101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78, -86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117, -110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116, -117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, -104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, +101,32,69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,105,110,105,109,117,109,32,83,112,97,110,110, +105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,72,69,65,84,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95, +84,79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,72,101,97,116,32,77,97,112,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,66,65,78,68,87,73,84, +72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, +99,105,102,121,32,66,97,110,100,119,105,116,104,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65, +80,95,86,65,82,73,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,112,101,99,105,102,121,32,67,111,114,101,32,68,105,115, +116,97,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +69,65,84,77,65,80,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,79,85,84,76, +73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,69,65,84,77,65,80,95,84,82,65,78,83,80,65,82,69,78, +67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, +110,103,101,32,84,114,97,110,115,112,97,114,101,110,99,121,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,72,101,97,116,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,73,79,78,95,77,79,68,69,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,77,111, +100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, -68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, -95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, -32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, -65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, -108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,72,73,83,84,79,71,82,65,77,95,78,69,87,95,86,73,69,87, -95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, +34,32,110,97,109,101,61,34,73,68,95,80,65,78,95,77,79,68,69,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,80,97,110,110,105,110,103,32,77, +111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,79,71,82,65,77,95,73, -78,84,69,82,86,65,76,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,104,111,111,115,101,32,73,110,116,101,114,118,97,108,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,83,84,95,86,73,69,87, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105, -101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89, -95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, -105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +109,34,32,110,97,109,101,61,34,73,68,95,90,79,79,77,95,77,79,68,69,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,90,111,111,109,105,110,103, +32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73,84,95,84,79,95,87, +73,78,68,79,87,95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,70,105,116,45,84,111,45,87,105,110,100,111,119,32,77,111,100,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82, -69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, -95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97,116,105,115,116, -105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65,83,80,69,67,84,95,82, +65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,70,105,120,101,100,32,65,115,112,101,99,116,32,82,97,116,105,111, +32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116, +108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87, +95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100, +97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, 99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,72,79,87,95,65,88,69,83,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79, 76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97, 99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65, -86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101, -99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80, -66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101, -32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,69,67,84,73, -86,73,84,89,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,67,79,78,78,69,67,84,73,86,73,84,89,95,84,79, -95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,67,111,110,110,101,99,116,105,118,105,116,121,32,84,111,32, -84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,95,73,83,79,76,65,84,69,83,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,78,101, -105,103,104,98,111,114,108,101,115,115,32,79,98,115,101,114,118,97,116, -105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, +95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,72,73,83,84,79,71,82,65,77,95,73,78,84,69,82,86,65,76,83, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,111,111,115,101, -32,73,110,116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121, -32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88,69,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65, -120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79, +76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118, +101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, -71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95, +84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105, +112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -78,69,67,84,73,86,73,84,89,95,77,65,80,95,86,73,69,87,95,77,69,78,85,95, -79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78,85,34, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65, -77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115, -112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67, +65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,32,67,111,110, +102,105,103,117,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, -95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +34,73,68,95,67,76,69,65,78,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,108,101,97,110,32,66,97,115,101, +109,97,112,32,67,97,99,104,101,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,83,69,76,69,67,84,73,79,78,95,77,79,68,69,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, -111,110,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +95,67,72,65,78,71,69,95,84,82,65,78,83,80,65,82,69,78,67,89,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,77, +97,112,32,84,114,97,110,115,112,97,114,101,110,99,121,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78, +79,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,78,111,32,66,97,115,101,109,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62, +79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,66, +65,83,69,77,65,80,95,77,69,78,85,34,62,10,32,32,32,32,60,108,97,98,101, +108,62,66,97,115,101,109,97,112,60,47,108,97,98,101,108,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,80,65,78,95,77,79, -68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80,97,110,110, -105,110,103,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,90,79,79,77, -95,77,79,68,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,90,111, -111,109,105,110,103,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73, -84,95,84,79,95,87,73,78,68,79,87,95,77,79,68,69,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,70,105,116,45,84,111,45,87,105,110,100,111,119, -32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65,83, -80,69,67,84,95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,70,105,120,101,100,32,65,115,112,101,99,116,32, -82,97,116,105,111,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65, +80,95,67,79,78,70,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66, +97,115,101,109,97,112,32,67,111,110,102,105,103,117,114,97,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,76,69,65,78,95,66,65,83,69,77,65,80,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,101,97,110,32,66, +97,115,101,109,97,112,32,67,97,99,104,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +72,65,78,71,69,95,84,82,65,78,83,80,65,82,69,78,67,89,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,77,97,112,32, +84,114,97,110,115,112,97,114,101,110,99,121,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,78,79,95,66,65,83,69,77,65, +80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,32,66,97,115, +101,109,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,72,73, +83,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, 32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, -86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, -111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, -68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, -84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, +61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67, +79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66, +97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68, -95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85, +83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104, +111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73, -77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84, -111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103, -101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109, -97,112,32,67,111,110,102,105,103,117,114,97,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,76,69,65,78,95,66,65,83,69,77,65,80, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,101,97, -110,32,66,97,115,101,109,97,112,32,67,97,99,104,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82,65,78,83,80,65, -82,69,78,67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,104,97,110,103,101,32,77,97,112,32,84,114,97,110,115,112,97,114,101, -110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,79,95,66,65,83,69,77,65,80,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,32,66,97,115,101,109,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, -116,111,114,34,47,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97, -98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,66,65,83,69,77,65,80,95,77,69,78,85,34,62, -10,32,32,32,32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,66,65,83,69,77,65,80,95,67,79,78,70,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,97,115,101,109,97,112,32,67,111,110,102,105, -103,117,114,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,76,69,65, -78,95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,108,101,97,110,32,66,97,115,101,109,97,112,32,67,97,99,104,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,72,65,78,71,69,95,84,82,65,78,83,80,65, -82,69,78,67,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, -97,110,103,101,32,77,97,112,32,84,114,97,110,115,112,97,114,101,110,99, -121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,79, -95,66,65,83,69,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,78,111,32,66,97,115,101,109,97,112,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65, -83,83,73,70,95,72,73,83,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73, -79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, -82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83, +69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105, +111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65, +82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121, +32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, +69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, +47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,71,69,84, -73,83,95,79,82,68,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84, -73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,110, -100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,80, -69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95, -49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116,97,116,105, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84, -73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101,114,109,117,116, -97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, -77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65,84,73,79,78,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57,57,32,80,101, -114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +117,34,32,110,97,109,101,61,34,73,68,95,71,69,84,73,83,95,79,82,68,95,78, +69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,82,97,110,100,111,109,105,122,97, +116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, -82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104,101,114,32,40,117, -112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, -111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68,95,83,69,69,68, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,32, -83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,73,70,89, -95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,112,101,99,105,102,121,32,83,101,101,100,46,46,46,60,47,108, +82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,80,69,82,77,85,84,65,84, +73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57, +32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78, +83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,49,57,57,80,69,82,77,85, +84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,49,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101,32,70,105, -108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, -65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, +80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,52,57,57, +80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,52,57,57,32,80,101,114,109,117,116,97,116,105,111,110, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95, -48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,48, -49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73, -67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76, -84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67, -69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102,101,114, -101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79, +78,95,57,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,57,57,57,32,80,101,114,109,117,116,97, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,71,69,84,73,83,95,79,82,68, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82, -101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87, -95,65,83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,65,115,32,67,111,110,100,105,116,105,111, -110,97,108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105, -116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82, -83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105, -111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97, +110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77, +73,90,65,84,73,79,78,95,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,79,116,104,101,114,32,40,117,112,32,116,111,32, +57,57,57,57,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,85, +83,69,95,83,80,69,67,73,70,73,69,68,95,83,69,69,68,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,85,115,101,32,83,112,101,99,105,102, +105,101,100,32,83,101,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,80,69,67,73,70,89,95,83,69,69,68,95,68, +76,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, +99,105,102,121,32,83,101,101,100,46,46,46,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,105, +103,110,105,102,105,99,97,110,99,101,32,70,105,108,116,101,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69, +82,95,48,53,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48, +46,48,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, +73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,49,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,48,46,48,49,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69, +82,95,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +48,46,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71, +78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,48,49,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,48,48,48,49,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95, +83,69,84,85,80,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,117,115,116,111,109,32,73,110,102,101,114,101,110,99,101,60,47,108,97, 98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82, -95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, -111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, -112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71, -72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, -101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, -71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, -71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82, -77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111, -114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +65,86,69,95,71,69,84,73,83,95,79,82,68,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,82,101,115,117,108,116,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,83,72,79,87,95,65,83,95,67,79,78,68,95,77,65, +80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32, +65,115,32,67,111,110,100,105,116,105,111,110,97,108,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,110,110,101,99,116,105,118,105,116,121,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69, -83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84,79,95,83,69,76,69, +67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,104,111,119,32,83,101,108,101,99,116,105,111,110,32,97,110,100,32,78, +101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110, +103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32,78,101,105, +103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10, +68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83,95,71,82,65,80,72,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32, +71,114,97,112,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, 32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, -69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80, -95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75, +78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72, +95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34, +62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,114, +111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80, +72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,100, +101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69, +68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111,108, +111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108, -105,110,101,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +70,105,108,108,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116, +101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, 97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, 95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, @@ -42497,96 +43848,445 @@ static unsigned char xml_res_file_12[] = { 10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, 32,79,117,116,108,105,110,101,32,67,111,108,111,114,32,111,102,32,83,101, 108,101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,108,101,99,116,32,65,108,108,46,46,46,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,95,67,79,82,69,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,111,114,101,115,60,47,108,97,98,101, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69,68, +95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, +111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,95,78,69,73,71,72,66,79,82,83,95,79,70,95,67,79,82,69,83,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,105,103,104,98, -111,114,115,32,111,102,32,67,111,114,101,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -95,67,79,82,69,83,95,65,78,68,95,78,69,73,71,72,66,79,82,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,114,101,115,32,97,110, -100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104, -97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, -95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,32,65,108, +108,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,67,79, +82,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,78,69,73,71,72,66,79,82,83,95,79, +70,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,78,101,105,103,104,98,111,114,115,32,111,102,32,67,111,114,101,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,67,79,82,69,83,95,65,78,68,95,78,69,73,71, +72,66,79,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,111,114,101,115,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, +101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73, +84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, 99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, +95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, -95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, +111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,108,101,99,116,97,98,108,101,32,70,105,108,108,32,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79, +76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97, +99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, +95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116, +97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60, +47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69, +67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,72,73,69,82,65,82,67,72,73,67,65,76,95,77,65, +80,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83,95, +71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, +110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95, +84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, +71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, +71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84,82, +79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, +71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84,72,95, +71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69,76,69,67,84, +69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111,108, +111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +70,105,108,108,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116, +101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78, +95,82,79,79,84,95,83,73,90,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,104,97,110,103,101,32,83,105,122,101,32,111,102,32,82, +111,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,67,79,78,78,95,82,79,79,84,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +67,111,108,111,114,32,111,102,32,82,111,111,116,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,67,69, +78,84,69,82,83,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,77,69,65,78, +67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,65,100,100,32,77,101,97,110,32,67,101,110,116,101,114,115,32,116, +111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,67,69,78,84,82,79, +73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100, +100,32,67,101,110,116,114,111,105,100,115,32,116,111,32,84,97,98,108,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, +95,77,69,65,78,95,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,77,101,97,110,32,67, +101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, +62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,67,69,78,84,82,79,73,68, +83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115, +112,108,97,121,32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,69,88,80,79,82,84,95,77,69,65,78,95,67,78,84,82, +83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47, +101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82,79,73,68,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,101,110, +116,114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,104,97,112,101,32,67,101,110,116,101,114, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,86,79,82,79,78,79, +73,95,68,73,65,71,82,65,77,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, +95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,84,104,105, +101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95, +86,79,82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,97,118,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121, +103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,86,79,82, +79,78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,68,117,112,108, +105,99,97,116,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103, +111,110,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110, +97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,105,101,115,115,101, +110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,83,84,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,77,105,110,105,109,117,109,32,83,112,97, +110,110,105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,77,83,84,95,83,65,86,69,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,77,105,110,105,109,117, +109,32,83,112,97,110,110,105,110,103,32,84,114,101,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83, +84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, +101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, +101,32,69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,105,110,105,109,117,109,32,83,112,97,110,110, +105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,72,69,65,84,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95, +84,79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,72,101,97,116,32,77,97,112,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,66,65,78,68,87,73,84, +72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, +99,105,102,121,32,66,97,110,100,119,105,116,104,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65, +80,95,86,65,82,73,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,112,101,99,105,102,121,32,67,111,114,101,32,68,105,115, +116,97,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +69,65,84,77,65,80,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,79,85,84,76, +73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,69,65,84,77,65,80,95,84,82,65,78,83,80,65,82,69,78, +67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, +110,103,101,32,84,114,97,110,115,112,97,114,101,110,99,121,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,72,101,97,116,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, 61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101, -115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, -79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108, -101,32,70,105,108,108,32,67,111,108,111,114,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84, +76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32, +77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76, +69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,101,108,101,99,116,97,98,108,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, +82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, -95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, -66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, -107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, 117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, 89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, 98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, @@ -42605,89 +44305,105 @@ static unsigned char xml_res_file_12[] = { 110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, 67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, 108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,72,73,69, -82,65,82,67,72,73,67,65,76,95,77,65,80,95,77,69,78,85,95,79,80,84,73,79, -78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110, -101,99,116,105,118,105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80, -76,65,89,95,87,69,73,71,72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,71,114,97,112,104, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32, -84,104,105,99,107,110,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, -69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76, -73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,76,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78, -69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,78,111,114,109,97,108,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95, -84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,104,97,110,103,101,32,69,100,103,101,32,67,111,108,111,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, -73,68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,72,105,100,101,32,77,97,112,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,76, +79,67,65,84,73,79,78,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78, +83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,65,86,69,95,67,79,76,79,67,65,84,73,79,78,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115,117,108,116,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, -101,32,79,117,116,108,105,110,101,32,67,111,108,111,114,32,111,102,32,83, -101,108,101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84,79,95,83,69,76, +69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,83,101,108,101,99,116,105,111,110,32,97,110,100,32, +78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73,76,76,95,67,79,76, +79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, +110,103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32,78,101, +105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, 47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,78,78,95,82,79,79,84,95,83,73,90,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,83,105,122, -101,32,111,102,32,82,111,111,116,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,82,79,79,84, -95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,104,97,110,103,101,32,67,111,108,111,114,32,111,102,32,82,111,111, -116,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83,95,71,82,65,80,72, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119, +32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, +32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67, +75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80, +72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, +83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71, +34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,114, +111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84,72,95,71,82,65,80, +72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,100, +101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69, +68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111,108, +111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +70,105,108,108,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116, +101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, 97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, 95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32, @@ -42769,43 +44485,787 @@ static unsigned char xml_res_file_12[] = { 98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, 110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,77,83,84,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,79,71,71,76,69,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97, +121,32,77,105,110,105,109,117,109,32,83,112,97,110,110,105,110,103,32,84, +114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83, +84,95,83,65,86,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,77,105,110,105,109,117,109,32,83,112,97,110,110,105, +110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,67,79,76,79,82,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, +32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95, +76,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,76,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95, +78,79,82,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,78,111,114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95,83, +84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, +65,80,95,77,83,84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,105,110, +105,109,117,109,32,83,112,97,110,110,105,110,103,32,84,114,101,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,72,69,65,84, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,72,69,65,84,77,65,80,95,84,79,71,71,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,72,101, +97,116,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, +48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65, +84,77,65,80,95,66,65,78,68,87,73,84,72,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,66,97,110,100,119, +105,116,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,69,65,84,77,65,80,95,86,65,82,73,65,66,76,69,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,105,102, +121,32,67,111,114,101,32,68,105,115,116,97,110,99,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,70,73,76,76,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +69,65,84,77,65,80,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79, +117,116,108,105,110,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65, +80,95,84,82,65,78,83,80,65,82,69,78,67,89,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,84,114,97,110,115,112, +97,114,101,110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,101,97,116,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110, +32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, +69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76, +69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116, +108,105,110,101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87, +95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100, +97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108, +101,99,116,97,98,108,101,32,70,105,108,108,32,67,111,108,111,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103, +114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83, +116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76, +69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,76,79,67,65,76,77,65,84,67,72,95,86,73,69,87, +95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,76,79,67,65,76,77, +65,84,67,72,95,87,69,73,71,72,84,83,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,97,118,101,32,76,111,99,97,108,32,77,97,116,99,104,32, +87,101,105,103,104,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118, +105,116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79, +82,83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105, +111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82, +95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, +111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71, +72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, +73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, +101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, +71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, +71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82, +77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111, +114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69, +83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, +69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80, +95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, +78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108, +105,110,101,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101, +100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67, +79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32, +83,101,108,101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,83,72,65,80,69,95,67,69,78,84,69,82,83, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,95,65,68,68,77,69,65,78,67,69,78,84,69, +82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100, +32,77,101,97,110,32,67,101,110,116,101,114,115,32,116,111,32,84,97,98,108, +101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,67,101,110,116, +114,111,105,100,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95, +67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,68,105,115,112,108,97,121,32,77,101,97,110,32,67,101,110,116,101, +114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101, +110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,68,73,83,80,76,65,89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32, +67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98, +108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,69,88,80,79,82,84,95,77,69,65,78,95,67,78,84,82,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,77,101,97, +110,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88, +80,79,82,84,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,67,101,110,116,114,111,105, +100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,97,112,101,32,67,101,110,116,101,114,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,86,79,82,79,78,79,73,95,68, +73,65,71,82,65,77,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,86,79,82, +79,78,79,73,95,68,73,65,71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,68,105,115,112,108,97,121,32,84,104,105,101,115,115, +101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,86,79, +82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,97,118,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,86,79,82,79, +78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,68,117,112,108,105, +99,97,116,101,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, +98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,105,101,115,115,101,110, +32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,77,83,84,34,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,84, +79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +68,105,115,112,108,97,121,32,77,105,110,105,109,117,109,32,83,112,97,110, +110,105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,77,65,80,95,77,83,84,95,83,65,86,69,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,77,105,110,105,109,117,109, +32,83,112,97,110,110,105,110,103,32,84,114,101,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83, +84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, +101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,78,111,114,109,97,108,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95, +84,72,73,67,75,78,69,83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,116,114,111,110,103,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103, +101,32,69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,77,105,110,105,109,117,109,32,83,112,97,110,110, +105,110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,72,69,65,84,34,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95, +84,79,71,71,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,68,105,115,112,108,97,121,32,72,101,97,116,32,77,97,112,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,66,65,78,68,87,73,84, +72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, +99,105,102,121,32,66,97,110,100,119,105,116,104,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65, +80,95,86,65,82,73,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,112,101,99,105,102,121,32,67,111,114,101,32,68,105,115, +116,97,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +69,65,84,77,65,80,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,79,85,84,76, +73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,69,65,84,77,65,80,95,84,82,65,78,83,80,65,82,69,78, +67,89,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97, +110,103,101,32,84,114,97,110,115,112,97,114,101,110,99,121,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,72,101,97,116,32,77,97,112,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, +103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84, +76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32, +77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76, +69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,101,108,101,99,116,97,98,108,101,32,70,105,108, +108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, +82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, +89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, +67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, +98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, +83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, +73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, +116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83, +65,77,65,80,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79, +78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97,110,100, +111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, +84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,80,69, +82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,49, +57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116,97,116,105,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73, +79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101,114,109,117,116, +97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, +77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65,84,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57,57,32,80,101, +114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, +82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69,82,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104,101,114,32,40,117, +112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68,95,83,69,69,68, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101,32, +83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80,69,67,73,70,89, +95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,112,101,99,105,102,121,32,83,101,101,100,46,46,46,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101,32,70,105, +108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, +65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69,82,95, +48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48,46,48, +49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73, +67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76, +84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67, +69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102,101,114, +101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,76,73,83,65,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115,117,108, +116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,83,95, +67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,65,115,32,67,111,110,100,105,116,105,111,110,97,108, +32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95, +84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111,110, +32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95, +70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111, +114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72, +84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, +104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80, +72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, +83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109, +97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, +69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83, +84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, +69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100, +103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73, +84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, -66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115, -32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69, +76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, +32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110, +103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32,83,101,108, +101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,108,101,99,116,32,65,108,108,46,46,46,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,95,67,79,82,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,111,114,101,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, +69,67,84,95,78,69,73,71,72,66,79,82,83,95,79,70,95,67,79,82,69,83,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,101,105,103,104,98, +111,114,115,32,111,102,32,67,111,114,101,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,67,79,82,69,83,95,65,78,68,95,78,69,73,71,72,66,79,82,83,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,114,101,115,32,97,110, +100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104, +97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, +95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, +95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101, +115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, 110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, 79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, @@ -42855,423 +45315,614 @@ static unsigned char xml_res_file_12[] = { 101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,67,79,76,79,67,65,84,73,79,78,95,86,73,69,87,95,77,69,78,85, -95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,83,65,86,69,95,67,79,76,79,67,65,84,73,79,78, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82, -101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105, -116,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82, -83,95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105, -111,110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82, -95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108, -111,114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, +34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73, +69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, +73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69, +82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68, +73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121, +32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65, +88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114, +101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, +69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101, +115,32,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78, +69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,76,105,110,101,97,114,32,83,109,111,111,116,104,101, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104, +101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,79,87,69,83,83,32, +83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, +100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65, +82,65,77,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, +100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,83,72,79,87,95,65,88,69,83,95,84,72,82,79,85,71,72,95,79,82,73, +71,73,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104, +111,119,32,65,120,101,115,32,84,104,114,111,117,103,104,32,79,114,105,103, +105,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,82,97,110,100,111,109,105,122,97,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, +77,73,90,65,84,73,79,78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57,32,80,101,114, +109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78, +95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116,97,116, +105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84, +73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,52,57,57,80,69, +82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,52,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82, +65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65,84, +73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,57, +57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77, +73,90,65,84,73,79,78,95,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,79,116,104,101,114,32,40,117,112,32,116,111,32, +57,57,57,57,57,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, 112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71, -72,84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110, -101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +34,32,110,97,109,101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69, +68,95,83,69,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,85,115,101,32,83,112,101,99,105,102,105,101,100,32,83,101,101,100,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80, +69,67,73,70,89,95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,83,101,101,100, +46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,77, +79,82,65,78,73,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,82,101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, +47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76, +73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105,110,101,32, +67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76, +76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, +73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, +66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, +107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, +79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, +118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, +69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, +108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, +65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, +101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,95,86,73,69,87,95,77,69,78,85,95,76,69,71,69,78,68, +34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,76,69,71,69,78,68,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79, +78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68, +105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,69,71,69,78,68, +95,85,83,69,95,83,67,73,95,78,79,84,65,84,73,79,78,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,85,115,101,32,83,99,105,101,110,116,105,102, +105,99,32,78,111,116,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,69, +71,69,78,68,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,76,101,103,101,110,100,32,66, +97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,76, +69,71,69,78,68,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,76,101,103,101,110,100, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97, +98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,78,69,87,95,86,73,69,87,95,77,69,78,85,95,79, +80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66, +77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81, +117,97,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95, -71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73, -71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82, -77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111, -114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69, -83,83,95,83,84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,87,69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32, -69,100,103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80, -95,87,73,84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78, -78,95,83,69,76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108, -105,110,101,32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101, -100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,65,68,68,77,69,65,78,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,65,100,100,32,77,101,97,110,32,67,101, -110,116,101,114,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, +95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80, -95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,65,100,100,32,67,101,110,116,114,111,105,100,115, -32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95,67,69,78,84,69,82,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, -108,97,121,32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, +78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,68,105,115,112,108,97,121,32,67,101,110,116,114,111,105, -100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101, -110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,77, -69,65,78,95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,97,118,101,32,77,101,97,110,32,67,101,110,116,101,114,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98, -108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82, -79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101, -32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78, -85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71, -82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105, -115,112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108,121, -103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60, -47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47, -101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, -95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, -115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82, -101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, +76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84, +73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101, +114,99,101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32,77,97,112, +32,40,72,105,110,103,101,61,49,46,53,41,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,32, +77,97,112,32,40,72,105,110,103,101,61,51,46,48,41,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82, +79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32,68,101,118,105, +97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,113,117, +101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, 107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, 119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, -76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, -66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115, -32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +95,77,65,80,65,78,65,76,89,83,73,83,95,67,79,76,79,67,65,84,73,79,78,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,45,108,111, +99,97,116,105,111,110,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,78,65, +84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97,108,32, +66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65, +76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, -79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,51,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,53,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,55,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,57,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95, +66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108, -101,32,70,105,108,108,32,67,111,108,111,114,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, -95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, -32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, -66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99, -107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,76,73,83,65,77,65,80,95,78,69,87,95,86,73,69,87,95,77,69,78, -85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110,116,101,114,118, +97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79, -78,95,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84, -73,79,78,95,49,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,49,57,57,32,80,101,114,109,117,116, -97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79, -77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80,101, -114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,51,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95, -82,65,78,68,79,77,73,90,65,84,73,79,78,95,57,57,57,80,69,82,77,85,84,65, -84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57, -57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80, -84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72,69, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, -101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, -97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,85,83,69,95,83,80,69,67,73,70,73,69,68, -95,83,69,69,68,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -85,115,101,32,83,112,101,99,105,102,105,101,100,32,83,101,101,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,53,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,55,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,57,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78, +84,69,82,86,65,76,83,95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,80, -69,67,73,70,89,95,83,69,69,68,95,68,76,71,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,83,101,101,100, -46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,105,103,110,105,102,105,99,97,110,99,101, -32,70,105,108,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, -73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,53,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,48,46,48,53,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70,73,76,84,69, -82,95,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,48, -46,48,49,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73, +69,82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97,108,32, +77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70, -73,67,65,78,67,69,95,70,73,76,84,69,82,95,48,48,49,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,48,46,48,48,49,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67,65,78,67,69,95,70, -73,76,84,69,82,95,48,48,48,49,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,48,46,48,48,48,49,60,47,108,97,98,101,108,62,10,32,32,32, +117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, +95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, +115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, +67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, +117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, +114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,67,117, +114,114,101,110,116,32,77,97,112,32,84,121,112,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +84,69,71,79,82,73,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,67,97,116,101,103,111,114,105,101,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97, +116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,77,79,79,84, +72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,97,119,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69,88,67,69,83,83,82, +73,83,75,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,120, +99,101,115,115,32,82,105,115,107,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, 99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95, +83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80,65,84,73,65, +76,95,82,65,84,69,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108,32,82,97,116,101, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,73,71,78,73,70,73,67, -65,78,67,69,95,70,73,76,84,69,82,95,83,69,84,85,80,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,73,110,102, -101,114,101,110,99,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,76,73,83,65,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115, -117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65, -83,95,67,79,78,68,95,77,65,80,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,65,115,32,67,111,110,100,105,116,105,111,110,97, -108,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116, -121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83, -95,84,79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111, -110,32,97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80, +65,84,73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, +32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, 62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95, -70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111, -114,32,111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, -97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, +65,80,65,78,65,76,89,83,73,83,95,83,65,86,69,82,69,83,85,76,84,83,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,97,116, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84, +79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111,110,32, +97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73, +76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,32, +111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, +97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72, -84,83,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -104,97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72, +95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, +95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10, +32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97, +108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, +73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84, +82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, +73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103, +101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80, -72,95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84, -83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109, -97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, -69,73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83, -84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87, -69,73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100, -103,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73, -84,72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84, +72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, 108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, 32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, 101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, @@ -43280,470 +45931,440 @@ static unsigned char xml_res_file_12[] = { 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69, 76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, -32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101, -99,116,32,65,108,108,46,46,46,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, -67,84,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,78,69,73,71,72, -66,79,82,83,95,79,70,95,67,79,82,69,83,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,78,101,105,103,104,98,111,114,115,32,111,102,32, -67,111,114,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,67,79,82,69,83,95,65, -78,68,95,78,69,73,71,72,66,79,82,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,114,101,115,32,97,110,100,32,78,101,105,103, -104,98,111,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116, -97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69, -76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73, -78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, -79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101,115,32,86,105, -115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85, -82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, -119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32, +108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, +32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,67,79,78,78,95,83,69,76,69,67,84,69,68,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110, +103,101,32,70,105,108,108,32,67,111,108,111,114,32,111,102,32,83,101,108, +101,99,116,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,83,72,65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,77,65,80,95,65,68,68,77,69,65,78,67,69,78,84,69,82,83,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,77,101,97, +110,32,67,101,110,116,101,114,115,32,116,111,32,84,97,98,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,77,65,80,95,65,68,68,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,65,100,100,32,67,101,110,116,114,111, +105,100,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,77,69,65,78,95,67,69,78, +84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, +105,115,112,108,97,121,32,77,101,97,110,32,67,101,110,116,101,114,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,80,76,65,89,95,67,69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,67,101,110,116, +114,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, +48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80, +79,82,84,95,77,69,65,78,95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,77,101,97,110,32,67,101,110, +116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +101,110,97,98,108,101,100,62,49,60,47,101,110,97,98,108,101,100,62,10,32, 32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66, -76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,101,108,101,99,116,97,98,108,101,32,70,105,108, -108,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71, -82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, -34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,67, +69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,97,118,101,32,67,101,110,116,114,111,105,100,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, +49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97, +112,101,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69, +78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83, -65,95,83,67,65,84,84,69,82,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85, -95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82, -69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101, -99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +61,34,73,68,95,68,73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65, +71,82,65,77,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68, +105,115,112,108,97,121,32,84,104,105,101,115,115,101,110,32,80,111,108, +121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, +48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,84,104,105, +101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60, +47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79, +95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,68,117,112,108,105,99,97,116,101,32,84,104,105,101, +115,115,101,110,32,80,111,108,121,103,111,110,115,32,116,111,32,84,97,98, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110, +97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, +98,101,108,62,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111, +110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65, +80,95,77,83,84,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67, -76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114, -99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,79,71,71,76,69,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97, +121,32,77,105,110,105,109,117,109,32,83,112,97,110,110,105,110,103,32,84, +114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, 104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,77,83, +84,95,83,65,86,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,97,118,101,32,77,105,110,105,109,117,109,32,83,112,97,110,110,105, +110,103,32,84,114,101,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,77,65,80,95,77,83,84,95,67,79,76,79,82,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, +32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95, +76,73,71,72,84,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,76,105,103,104,116,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95, +78,79,82,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,78,111,114,109,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, -111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, -119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, +61,34,73,68,95,77,65,80,95,77,83,84,95,84,72,73,67,75,78,69,83,83,95,83, +84,82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, +65,80,95,77,83,84,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103,101,32,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,105,110, +105,109,117,109,32,83,112,97,110,110,105,110,103,32,84,114,101,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,72,69,65,84, +34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,72,69,65,84,77,65,80,95,84,79,71,71,76,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,72,101, +97,116,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62, +48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65, +84,77,65,80,95,66,65,78,68,87,73,84,72,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,83,112,101,99,105,102,121,32,66,97,110,100,119, +105,116,104,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,72,69,65,84,77,65,80,95,86,65,82,73,65,66,76,69,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101,99,105,102, +121,32,67,111,114,101,32,68,105,115,116,97,110,99,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112, +97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95, -80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, -115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67, -73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111, -110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82,69,71,73, -77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101,103,114, -101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79, -84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76, -105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65,80,95,70,73,76,76,95, +67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72, +69,65,84,77,65,80,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,79, +117,116,108,105,110,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,69,65,84,77,65, +80,95,84,82,65,78,83,80,65,82,69,78,67,89,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,84,114,97,110,115,112, +97,114,101,110,99,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, +72,101,97,116,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110, +32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79, -87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,76,79,87,69,83,83,32,83,109,111,111,116,104,101, -114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87, -69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65, -88,69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,65,120,101,115, -32,84,104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -82,97,110,100,111,109,105,122,97,116,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95, -57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,57,57,32,80,101,114,109,117,116,97,116,105,111, -110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69, +34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99, +108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, 101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, 10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78, -83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,49,57,57,80,69,82,77,85, -84,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,49,57,57,32,80,101,114,109,117,116,97,116,105,111,110,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68, -79,77,73,90,65,84,73,79,78,95,52,57,57,80,69,82,77,85,84,65,84,73,79,78, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52,57,57,32,80, -101,114,109,117,116,97,116,105,111,110,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,79,80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73, -79,78,95,57,57,57,80,69,82,77,85,84,65,84,73,79,78,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,57,57,57,32,80,101,114,109,117,116, -97,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,79, -80,84,73,79,78,83,95,82,65,78,68,79,77,73,90,65,84,73,79,78,95,79,84,72, -69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,116,104, -101,114,32,40,117,112,32,116,111,32,57,57,57,57,57,41,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,85, -83,69,95,83,80,69,67,73,70,73,69,68,95,83,69,69,68,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,85,115,101,32,83,112,101,99,105,102, -105,101,100,32,83,101,101,100,60,47,108,97,98,101,108,62,10,32,32,32,32, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, -107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101, -100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,80,69,67,73,70,89,95,83,69,69,68,95,68, -76,71,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, -99,105,102,121,32,83,101,101,100,46,46,46,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,77,79,82,65,78,73,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115,117,108,116,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,33,45,45,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95, +67,85,83,84,79,77,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,117,115,116,111,109,32,83,104,97,112,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,45,45,62,10,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, 101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, 101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, -67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,114,101,115,115, -105,111,110,32,76,105,110,101,32,67,111,108,111,114,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110, +101,115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80, +95,67,79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65, +78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111, +117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97, +116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,77,65,80,95,77,79,86,73,69,95,86,73,69,87,95,77,69,78, +85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +65,66,76,69,95,79,85,84,76,73,78,69,95,86,73,83,73,66,76,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,79,117,116,108,105,110,101, +115,32,86,105,115,105,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,77,65,80,95,83,72,79,87,95,77,65,80,95,67, +79,78,84,79,85,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,104,111,119,32,77,97,112,32,66,111,117,110,100,97,114,121,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, 69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67, -79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66, -97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85, -83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104, -111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,77,97,112,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83, -69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105, -111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65, -82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121, -32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86, -69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60, -47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,86,73,69,87,95,77,69, -78,85,95,76,69,71,69,78,68,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,68,73,83,80,76,65,89, -95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,76,69,71,69,78,68,95,85,83,69,95,83,67,73,95,78,79,84,65,84, -73,79,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,115,101, -32,83,99,105,101,110,116,105,102,105,99,32,78,111,116,97,116,105,111,110, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,76,69,71,69,78,68,95,66,65,67,75,71,82,79, -85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,76,101,103,101,110,100,32,66,97,99,107,103,114,111,117,110,100,32, -67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108, +62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,80,67,80,95,78,69,87,95,80,76,79,84,95,86,73,69,87,95, +77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,79,80,89,95,76,69,71,69,78,68,95,84,79,95,67,76,73, -80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67, -111,112,121,32,76,101,103,101,110,100,32,84,111,32,67,108,105,112,98,111, -97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,78,69,87,95, -86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70, -95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72, -69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, +101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76, +69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, +101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, +76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, +95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32, +73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, 104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101, +97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55, +95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,56, 60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, 101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, +78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, 32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, 98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32, -32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98, +73,68,95,81,85,65,78,84,73,76,69,95,49,48,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, +111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72, +95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,80,101,114,99,101,110,116,105,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, +95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,72,105,110,103,101,61,49,46,53,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, +62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, +73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,72,105,110,103,101,61,51,46,48,60,47,108,97,98, 101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82, -79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,80,101,114,99,101,110,116,105,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89, -83,73,83,95,72,73,78,71,69,95,49,53,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103,101,61, -49,46,53,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65, -76,89,83,73,83,95,72,73,78,71,69,95,51,48,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,66,111,120,32,77,97,112,32,40,72,105,110,103, -101,61,51,46,48,41,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, -108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95,83,84,68, -68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116, -97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,85, -78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117,101,115,60, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,66,111,120,112,108,111,116,32,84,104,101,109,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,77,65,80,65,78,65,76,89,83,73,83,95,67,72,79,82,79,80,76,69,84,72,95, +83,84,68,68,69,86,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,83,116,97,110,100,97,114,100,32,68,101,118,105,97,116,105,111,110,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, 106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, 101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,67,79,76,79,67,65,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,45,108,111,99,97,116,105,111,110,32,77,97, -112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65, -75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, +73,83,95,85,78,73,81,85,69,95,86,65,76,85,69,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,85,110,105,113,117,101,32,86,97,108,117, +101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69, +65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,78,97,116,117,114,97,108,32,66,114,101,97,107,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, +95,50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, 99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, 32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, @@ -43864,27 +46485,20 @@ static unsigned char xml_res_file_12[] = { 107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99, 116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,72,73,69, -82,65,82,67,72,73,67,65,76,95,77,65,80,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,72,105,101,114,97,114,99,104,105,99,97,108,32,77, -97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77, -95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114,101,97,107, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95, -67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101,119,32,67, -117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,67,117, -114,114,101,110,116,32,77,97,112,32,84,121,112,101,60,47,108,97,98,101, +101,110,117,34,32,110,97,109,101,61,34,73,68,95,79,80,69,78,95,67,85,83, +84,79,77,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,66,114, +101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,67,85,83, +84,79,77,95,67,65,84,95,67,76,65,83,83,73,70,95,65,34,62,10,32,32,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,67,114,101,97,116,101,32,78,101, +119,32,67,117,115,116,111,109,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97, +116,111,114,34,47,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,108,97,115,115,105,102, +105,99,97,116,105,111,110,32,84,104,101,109,101,115,60,47,108,97,98,101, 108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, 73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, @@ -43894,1001 +46508,422 @@ static unsigned char xml_res_file_12[] = { 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, 97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,97, -116,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,77,79,79,84, -72,95,82,65,87,82,65,84,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,82,97,119,32,82,97,116,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,82,65,84,69,83,95,83,77,79,79,84,72,95,69,88,67,69,83,83,82, -73,83,75,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,120, -99,101,115,115,32,82,105,115,107,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,82,65,84,69,83,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,95, -83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108, +95,86,73,69,87,95,68,65,84,65,95,83,85,66,77,69,78,85,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,97,116,97,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,86,73,69,87,95,83,84,65,78,68,65,82,68,73,90,69,68,95,68,65,84,65,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32, +83,116,97,110,100,97,114,100,105,122,101,100,32,68,97,116,97,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, 108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, 99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80,65,84,73,65, -76,95,82,65,84,69,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108,32,82,97,116,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,82,65,84,69,83,95,83,80, -65,84,73,65,76,95,69,77,80,73,82,73,67,65,76,95,66,65,89,69,83,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,97,116,105,97,108, -32,69,109,112,105,114,105,99,97,108,32,66,97,121,101,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77, -65,80,65,78,65,76,89,83,73,83,95,83,65,86,69,82,69,83,85,76,84,83,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,97,116, -101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,110,110,101,99,116,105,118,105,116,121,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,65,68,68,95,78,69,73,71,72,66,79,82,83,95,84, -79,95,83,69,76,69,67,84,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,104,111,119,32,83,101,108,101,99,116,105,111,110,32, -97,110,100,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,78,78,95,78,69,73,71,72,66,79,82,95,70,73, -76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,104,97,110,103,101,32,70,105,108,108,32,67,111,108,111,114,32, -111,102,32,78,101,105,103,104,98,111,114,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,87,69,73,71,72,84,83, -95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,104,111,119,32,71,114,97,112,104,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, -69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104, -97,110,103,101,32,69,100,103,101,32,84,104,105,99,107,110,101,115,115,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83,95,71,82,65,80,72, -95,84,72,73,67,75,78,69,83,83,95,76,73,71,72,84,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,76,105,103,104,116,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69,73,71,72,84,83, -95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,78,79,82,77,34,62,10, -32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,111,114,109,97, -108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, -73,71,72,84,83,95,71,82,65,80,72,95,84,72,73,67,75,78,69,83,83,95,83,84, -82,79,78,71,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,116,114,111,110,103,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,87,69, -73,71,72,84,83,95,71,82,65,80,72,95,67,79,76,79,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101,32,69,100,103, -101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,72,73,68,69,95,77,65,80,95,87,73,84, -72,95,71,82,65,80,72,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,72,105,100,101,32,77,97,112,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,78,78,95,83,69, -76,69,67,84,69,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,104,97,110,103,101,32,79,117,116,108,105,110,101, -32,67,111,108,111,114,32,111,102,32,83,101,108,101,99,116,101,100,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111, -114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,72, -65,80,69,95,67,69,78,84,69,82,83,95,77,69,78,85,34,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68, -68,77,69,65,78,67,69,78,84,69,82,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,65,100,100,32,77,101,97,110,32,67,101,110,116,101, -114,115,32,116,111,32,84,97,98,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95,65,68,68,67, -69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,100,100,32,67,101,110,116,114,111,105,100,115,32,116,111,32,84, -97,98,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, -83,80,76,65,89,95,77,69,65,78,95,67,69,78,84,69,82,83,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,77, -101,97,110,32,67,101,110,116,101,114,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,101,110, -97,98,108,101,100,62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,67, -69,78,84,82,79,73,68,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,68,105,115,112,108,97,121,32,67,101,110,116,114,111,105,100,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, -98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,69,88,80,79,82,84,95,77,69,65,78, -95,67,78,84,82,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,83,97,118,101,32,77,101,97,110,32,67,101,110,116,101,114,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, -62,49,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,69,88,80,79,82,84,95,67,69,78,84,82,79,73,68,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,67,101,110,116,114,111,105,100,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,49,60,47,101,110,97, -98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,97,112,101,32,67,101,110, -116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68, -73,83,80,76,65,89,95,86,79,82,79,78,79,73,95,68,73,65,71,82,65,77,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97, -121,32,84,104,105,101,115,115,101,110,32,80,111,108,121,103,111,110,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97, -98,108,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -88,80,79,82,84,95,86,79,82,79,78,79,73,34,62,10,32,32,32,32,32,32,32,32, -60,108,97,98,101,108,62,83,97,118,101,32,84,104,105,101,115,115,101,110, -32,80,111,108,121,103,111,110,115,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,101,110,97,98,108,101,100,62,48,60,47,101,110,97,98,108, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65, -86,69,95,86,79,82,79,78,79,73,95,68,85,80,83,95,84,79,95,84,65,66,76,69, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, -32,68,117,112,108,105,99,97,116,101,32,84,104,105,101,115,115,101,110,32, -80,111,108,121,103,111,110,115,32,116,111,32,84,97,98,108,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,101,110,97,98,108,101,100, -62,48,60,47,101,110,97,98,108,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104, -105,101,115,115,101,110,32,80,111,108,121,103,111,110,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, -108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, -73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,33,45,45,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76, -69,67,84,95,87,73,84,72,95,67,85,83,84,79,77,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,67,117,115,116,111,109,32,83,104,97, -112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,45,45,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, -86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, +34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,79,82,73,71,73,78,65, +76,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,32,79,114,105,103,105,110,97,108,32,68,97,116,97,60,47, 108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, 32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, 101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, -111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78, -68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83, -84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108, -101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95,67,76, -73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112,98,111, -97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65,83,34, -62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,73,109, -97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116, -105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,65,80,95, -77,79,86,73,69,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,86,73,69,87,95,83,72,79,87,95,83,85,66,77,69,78,85,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108, 97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, -95,86,73,83,73,66,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,79,117,116,108,105,110,101,115,32,86,105,115,105,98,108,101,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, -98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, -101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65, -80,95,83,72,79,87,95,77,65,80,95,67,79,78,84,79,85,82,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,77,97,112,32,66, -111,117,110,100,97,114,121,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, -62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -77,97,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -66,97,99,107,103,114,111,117,110,100,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105, -111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,80,67,80,95,78,69, -87,95,80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83, -34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,65,84,95, -67,76,65,83,83,73,70,95,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76, -89,83,73,83,95,84,72,69,77,69,76,69,83,83,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,84,104,101,109,101,108,101,115,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,81,117,97,110,116,105, -108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95, -50,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,50,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,52,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,53,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,54,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,54, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,56,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,57,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,49,48,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -49,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83, -73,83,95,67,72,79,82,79,80,76,69,84,72,95,80,69,82,67,69,78,84,73,76,69, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,101,114,99, -101,110,116,105,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73, +83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,49,53,34, -62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, -103,101,61,49,46,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,72,73,78,71,69,95,51,48, -34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,110, -103,101,61,51,46,48,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111,120,112,108, -111,116,32,84,104,101,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83, -95,67,72,79,82,79,80,76,69,84,72,95,83,84,68,68,69,86,34,62,10,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,110,100,97,114,100,32, -68,101,118,105,97,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,77,65,80,65,78,65,76,89,83,73,83,95,85,78,73,81,85,69,95,86,65,76, -85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110, -105,113,117,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -78,65,84,85,82,65,76,95,66,82,69,65,75,83,95,83,85,66,77,69,78,85,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,78,97,116,117,114,97, -108,32,66,114,101,97,107,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65, -84,85,82,65,76,95,66,82,69,65,75,83,95,50,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83, -95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,52,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,53,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,54,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,56,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,78,65,84,85,82,65,76,95,66,82,69,65,75,83,95, -57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,57,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,78,65,84, -85,82,65,76,95,66,82,69,65,75,83,95,49,48,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,49,48,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,83,85,66,77,69,78,85,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,113,117,97,108,32,73,110, -116,101,114,118,97,108,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85, -65,76,95,73,78,84,69,82,86,65,76,83,95,50,34,62,10,32,32,32,32,32,32,32, -32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76, -83,95,51,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -51,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, -101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, -10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,81, -85,65,76,95,73,78,84,69,82,86,65,76,83,95,52,34,62,10,32,32,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,52,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65, -76,83,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, -81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,54,34,62,10,32,32,32,32,32, -32,32,32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86, -65,76,83,95,55,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,55,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, -101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,56,34,62,10,32,32,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,56,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,69,81,85,65,76,95,73,78,84, -69,82,86,65,76,83,95,57,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,57,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,69,81,85,65,76,95,73,78,84,69,82,86,65,76,83,95,49,48,34,62, -10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,49,48,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, -61,34,73,68,95,79,80,69,78,95,67,85,83,84,79,77,95,66,82,69,65,75,83,95, -83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,117,115,116,111,109,32,66,114,101,97,107,115,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,78,69,87,95,67,85,83,84,79,77,95,67,65,84,95,67,76,65, -83,83,73,70,95,65,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,114,101,97,116,101,32,78,101,119,32,67,117,115,116,111,109,60, -47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,108,97,115,115,105,102,105,99,97,116,105,111,110,32,84, -104,101,109,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,67,65,84,69,71,79,82,73,69,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,67,97,116,101, -103,111,114,105,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,65,84,65, -95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65, -78,68,65,82,68,73,90,69,68,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,86,105,101,119,32,83,116,97,110,100,97,114,100, -105,122,101,100,32,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32, +73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,116,105,115,116, +105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,116,97,116,117,115, +32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111,110,32,83,104, +97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, +95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, 99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, 34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,86,73,69,87,95,79,82,73,71,73,78,65,76,95,68,65,84,65,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,79,114,105, -103,105,110,97,108,32,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,86,73,69, -87,95,83,72,79,87,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73, -69,87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, -108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,116,97,116,105,115,116,105,99,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65, -89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34, -73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110,103,108, -101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, -87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, -119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, -95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,83, -101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71,69,95,84,79,95, -67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67,108,105,112, -98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77,65,71,69,95,65, -83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32, -73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112, -116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,78, -69,95,67,72,65,82,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,76,73,78, -69,95,67,72,65,82,84,95,70,73,88,69,68,95,83,67,65,76,69,95,79,86,69,82, -95,84,73,77,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,70,105, -120,101,100,32,115,99,97,108,101,32,111,118,101,114,32,116,105,109,101, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114,99,108,101,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, 98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,65,120,105,115,32,79,112,116,105,111,110,60,47, -108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,85,83,69,95,65,68,74,85,83,84,95,89,95,65,88,73, -83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,110,97,98, -108,101,32,85,115,101,114,32,68,101,102,105,110,101,100,32,86,97,108,117, -101,32,82,97,110,103,101,32,111,102,32,89,45,65,120,105,115,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, -95,89,95,65,88,73,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,65,100,106,117,115,116,32,86,97,108,117,101,32,82,97,110,103,101, -32,111,102,32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34, -47,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,65,68,74,85,83,84,95,89,95,65,88,73,83,95,80,82,69,67,73,83,73, -79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116, -32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111, -102,32,89,45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115, -60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,80,76,79, -84,95,77,65,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,86, -65,82,73,65,66,76,69,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, -62,65,100,100,47,82,101,109,111,118,101,32,86,97,114,105,97,98,108,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, -97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72, +95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, 61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,108,101,99,116,105,111,110,32,83,104,97,112,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,82,69,67,84,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,99,116,97,110, -103,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -95,87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83, +95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69, +68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111,110,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89, +95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101, +32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86, +65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98, +101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101, +108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, +101,61,34,73,68,95,76,73,78,69,95,67,72,65,82,84,95,77,69,78,85,95,79,80, +84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,76,73,78,69,95,67,72,65,82,84,95,70,73,88,69,68,95,83, +67,65,76,69,95,79,86,69,82,95,84,73,77,69,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,70,105,120,101,100,32,115,99,97,108,101,32,111,118, +101,114,32,116,105,109,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, +98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60, +47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78, +85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,65,120,105,115,32, +79,112,116,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,85,83,69,95,65,68, +74,85,83,84,95,89,95,65,88,73,83,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,69,110,97,98,108,101,32,85,115,101,114,32,68,101,102,105, +110,101,100,32,86,97,108,117,101,32,82,97,110,103,101,32,111,102,32,89, +45,65,120,105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98, +108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48, +60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106, 101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, 115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65, -84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, -87,95,83,84,65,78,68,65,82,68,73,90,69,68,95,68,65,84,65,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,83,116,97,110, -100,97,114,100,105,122,101,100,32,68,97,116,97,60,47,108,97,98,101,108, +61,34,73,68,95,65,68,74,85,83,84,95,89,95,65,88,73,83,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,100,106,117,115,116,32,86,97, +108,117,101,32,82,97,110,103,101,32,111,102,32,89,45,65,120,105,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,89,95,65,88,73, +83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101, +99,105,115,105,111,110,32,111,102,32,89,45,65,120,105,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101, +108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,83,67,65,84,84,69,82,95,80,76,79,84,95,77,65,84,95,77,69,78,85,95,79, +80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,68,73,84,95,86,65,82,73,65,66,76,69,83,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,65,100,100,47,82,101,109,111,118, +101,32,86,97,114,105,97,98,108,101,115,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101, +99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111, +110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, 60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, 108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, -109,101,61,34,73,68,95,86,73,69,87,95,79,82,73,71,73,78,65,76,95,68,65, -84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, -119,32,79,114,105,103,105,110,97,108,32,68,97,116,97,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, -98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, -95,83,67,65,84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32, -32,32,32,60,108,97,98,101,108,62,83,109,111,111,116,104,101,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72, -69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, -119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, -108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, -100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, -87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83, -32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +109,101,61,34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,67,73,82,67, +76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,67,105,114, +99,108,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, +95,87,73,84,72,95,76,73,78,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,76,105,110,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99, +107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65, -82,65,77,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69, -100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65, -95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105, -101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95, -80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, -115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32, +110,97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65,78,68,65,82,68,73, +90,69,68,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,86,105,101,119,32,83,116,97,110,100,97,114,100,105,122,101,100,32, +68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,79, +82,73,71,73,78,65,76,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,86,105,101,119,32,79,114,105,103,105,110,97,108,32, +68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, +104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, +99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82, -69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101, -103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,76,79,80,69,95, -86,65,76,85,69,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,68,105,115,112,108,97,121,32,83,108,111,112,101,32,86,97,108,117,101, -115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104, -101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, -32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, -60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34, -62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,114,101, -115,115,105,111,110,32,76,105,110,101,32,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83, -69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32, -32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111, -108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, -101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,67,79,82,82,69,76,79,71,82,65,77,95,77,69,78, -85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,69,68,73,84,95,86,65,82,73,65,66,76,69,83, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,104,97,110,103,101, -32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84, +65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76, +73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110,101,97,114,32,83, +109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,86,73,69,87,95,76,79,87,69,83,83,95,83,77,79,79, +84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +104,111,119,32,76,79,87,69,83,83,32,83,109,111,111,116,104,101,114,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, 77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68, 73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32, -32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97, -114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,34,32,110,97,109,101,61,34,73,68,95,76,73,83,65,95,83,67,65,84, -84,69,82,95,86,73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108, -97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69, -87,95,68,73,83,80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112, -108,97,121,32,80,114,101,99,105,115,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84, -95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32, -80,114,101,99,105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, -79,82,82,69,76,79,71,82,65,77,95,68,73,83,80,76,65,89,95,83,84,65,84,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112, -108,97,121,32,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89, -95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60, +32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69,83,83,32, +80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, +83,67,65,84,84,69,82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,86,105,101,119,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83,73,79,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,116,32,68,105, +115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32,111,110,32,65, +120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69, +83,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +82,101,103,105,109,101,115,32,82,101,103,114,101,115,115,105,111,110,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, 97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, 32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, 101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,79,82,82,69,76,79,71, -82,65,77,95,83,84,65,84,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,97,118,101,32,82,101,115,117,108,116,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110, -115,60,47,108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,67,79,86,95,83,67,65,84, -84,69,82,95,80,76,79,84,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, -77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105,111, -110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84, -95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, -60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, -99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, -32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,87, -73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32,32, -32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, -101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97,98, -101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101, -62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,80,76,65,89,95,83,76,79,80,69,95,86,65,76,85,69,83,34,62,10,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,83, +108,111,112,101,32,86,97,108,117,101,115,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108, +111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79, +85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105,110, +101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70, +73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108,62, +79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,67, +79,82,82,69,76,79,71,82,65,77,95,77,69,78,85,95,79,80,84,73,79,78,83,34, 62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83, -32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69, +68,73,84,95,86,65,82,73,65,66,76,69,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,104,97,110,103,101,32,80,97,114,97,109,101,116,101, +114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95, +80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,69, +100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,76,73,83,65,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, +119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95, +80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105, +115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67, +73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111, +110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,82,82,69,76,79,71,82, +65,77,95,68,73,83,80,76,65,89,95,83,84,65,84,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,68,105,115,112,108,97,121,32,83,116,97, +116,105,115,116,105,99,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49, -60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116,32,76,79,87,69, -83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99, -116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, -34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, -68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79, -78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109, -101,115,32,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108, -62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, -99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99,104,101,99, -107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100, +62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66, +65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111, +119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,65,86,69,95,67,79,82,82,69,76,79,71,82,65,77,95,83,84,65, +84,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101, +32,82,101,115,117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,68,73,83,84,80,76,79,84,95,77,69,78,85,95,79, +80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,69,68,73,84,95,76,79,69,83,83,95,80,65,82,65,77,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,79,69,83,83,32,83,101, +116,117,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101, +99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,68,73,83,84,80,76,79,84,95,86,73,69,87,95,77, +69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101, +119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,68,73,83,84,80,76,79,84,95,83,72,79,87, +95,80,79,73,78,84,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,68,97,116,97,32,80,111,105,110,116,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98, +108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, 32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32, -32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95, -67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, -67,117,114,118,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83, +80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116,117,115,32, +66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, -66,76,69,95,70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32, -32,60,108,97,98,101,108,62,80,111,105,110,116,32,67,111,108,111,114,60, +34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108,97,98,101,108,62, +10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34, +119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68, +95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103, +114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108,111,114,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79,82,34, +62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105,110,116, +32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, +110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75,71,82,79, +85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98, +101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108,111,114,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,104,111,119,32,83,116,97,116,117,115,32,66,97,114,60,47,108,97, -98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98,101,108, -62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32,32,60,47, -111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95, -83,67,65,84,84,69,82,95,78,69,87,95,80,76,79,84,95,86,73,69,87,95,77,69, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,65,120,105,115,32,79,112,116,105,111,110,60,47, +108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67, +73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111, +110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,85,83,69,95,65,68,74,85,83, +84,95,89,95,65,88,73,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,110,97,98,108,101,32,85,115,101,114,32,68,101,102,105,110,101, +100,32,86,97,108,117,101,32,82,97,110,103,101,32,111,102,32,89,45,65,120, +105,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,65,68,74,85,83,84,95,89,95,65,88,73,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,65,100,106,117,115,116,32,86,97,108,117, +101,32,82,97,110,103,101,32,111,102,32,89,45,65,120,105,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,48,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101,99,107,101,100, +62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,95,83,65,86,69,95,68,73,83,84,80,76,79,84,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97,118,101,32,82,101,115, +117,108,116,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97, +98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, +32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, +61,34,73,68,95,67,79,86,95,83,67,65,84,84,69,82,95,80,76,79,84,95,77,69, 78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, 101,61,34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, @@ -44915,203 +46950,280 @@ static unsigned char xml_res_file_12[] = { 32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, 97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,68,65,84,65,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,68,97,116,97,60, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87,69,83,83, +95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111,111,116,104,101, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101, +100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79, +87,69,83,83,95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101, +116,101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,48,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,82,69,71,73, +77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,101,103,105,109,101,115,32,82,101,103,114,101,115, +115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,48,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, +34,73,68,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65, +66,76,69,95,79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,67,117,114,118,101,32,67,111,108,111, +114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76,79, +82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105, +110,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83,95,66,65,82,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,83,116,97,116, +117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60, +99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108, +101,62,10,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99, +104,101,99,107,101,100,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47, +108,97,98,101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,78,69,87,95, +80,76,79,84,95,86,73,69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101,108,101,99,116,105, +111,110,32,83,104,97,112,101,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69, +67,84,95,87,73,84,72,95,82,69,67,84,34,62,10,32,32,32,32,32,32,32,32,60, +108,97,98,101,108,62,82,101,99,116,97,110,103,108,101,60,47,108,97,98,101, +108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, +49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, +60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, +32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95, +87,73,84,72,95,67,73,82,67,76,69,34,62,10,32,32,32,32,32,32,32,32,60,108, +97,98,101,108,62,67,105,114,99,108,101,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,69,76,69,67,84,95,87,73,84,72,95,76,73,78,69,34,62,10,32, +32,32,32,32,32,32,32,60,108,97,98,101,108,62,76,105,110,101,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, +101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, +60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69, +82,95,68,65,84,65,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32, +60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,83, +84,65,78,68,65,82,68,73,90,69,68,95,68,65,84,65,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,83,116,97,110,100,97, +114,100,105,122,101,100,32,68,97,116,97,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,86,73,69,87,95,79,82,73,71,73,78,65,76,95,68,65,84,65,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119,32,79, +114,105,103,105,110,97,108,32,68,97,116,97,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,83, +67,65,84,84,69,82,95,83,77,79,79,84,72,69,82,95,77,69,78,85,34,62,10,32, +32,32,32,32,32,60,108,97,98,101,108,62,83,109,111,111,116,104,101,114,60, 47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32, 99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,86,73,69,87,95,83,84,65,78,68,65,82,68,73,90, -69,68,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,86,105,101,119,32,83,116,97,110,100,97,114,100,105,122,101,100,32, -68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, +97,109,101,61,34,73,68,95,86,73,69,87,95,76,73,78,69,65,82,95,83,77,79, +79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +83,104,111,119,32,76,105,110,101,97,114,32,83,109,111,111,116,104,101,114, +60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99, +107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101, +99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, +73,69,87,95,76,79,87,69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32, +32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,79,87,69, +83,83,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, +32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, +104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101, +99,107,101,100,62,48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83, +95,80,65,82,65,77,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, +108,62,69,100,105,116,32,76,79,87,69,83,83,32,80,97,114,97,109,101,116, +101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, +110,117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,86, +73,69,87,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108, +62,86,105,101,119,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, +116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83, +80,76,65,89,95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80, +114,101,99,105,115,105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32, +32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83, +95,80,82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99, +105,115,105,111,110,32,111,110,32,65,120,101,115,60,47,108,97,98,101,108, 62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,79, -82,73,71,73,78,65,76,95,68,65,84,65,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,86,105,101,119,32,79,114,105,103,105,110,97,108,32, -68,97,116,97,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101, -62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47, -99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101, -99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,34,32,110,97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,83,77,79, -79,84,72,69,82,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,76,73,78,69,65,82,95,83,77,79,79,84,72,69,82,34,62,10,32,32, -32,32,32,32,32,32,60,108,97,98,101,108,62,83,104,111,119,32,76,105,110, -101,97,114,32,83,109,111,111,116,104,101,114,60,47,108,97,98,101,108,62, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95, +65,83,80,69,67,84,95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32, +32,32,32,32,60,108,97,98,101,108,62,70,105,120,101,100,32,65,115,112,101, +99,116,32,82,97,116,105,111,32,77,111,100,101,60,47,108,97,98,101,108,62, 10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,86,73,69,87,95,76,79,87, -69,83,83,95,83,77,79,79,84,72,69,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,83,104,111,119,32,76,79,87,69,83,83,32,83,109,111, -111,116,104,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,101,100,62, -48,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,69,68,73,84,95,76,79,87,69,83,83,95,80,65,82,65,77,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,69,100,105,116, -32,76,79,87,69,83,83,32,80,97,114,97,109,101,116,101,114,115,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, -101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, -97,109,101,61,34,73,68,95,83,67,65,84,84,69,82,95,86,73,69,87,95,77,69, -78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,86,105,101,119, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,86,73,69,87,95,68,73,83,80,76,65,89,95,80, -82,69,67,73,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101, -108,62,83,101,116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115, -105,111,110,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98, +47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98, 106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,65,68,74,85,83,84,95,65,88,73,83,95,80,82,69,67,73,83, -73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83,101, -116,32,68,105,115,112,108,97,121,32,80,114,101,99,105,115,105,111,110,32, -111,110,32,65,120,101,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,70,73,88,69,68,95,65,83,80,69,67,84, -95,82,65,84,73,79,95,77,79,68,69,34,62,10,32,32,32,32,32,32,32,32,60,108, -97,98,101,108,62,70,105,120,101,100,32,65,115,112,101,99,116,32,82,97,116, -105,111,32,77,111,100,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32, -32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, -97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10, -32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,86, -73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69,83,83,73,79,78,34,62, -10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,82,101,103,105,109,101, -115,32,82,101,103,114,101,115,115,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60, -47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99, -104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, +101,61,34,73,68,95,86,73,69,87,95,82,69,71,73,77,69,83,95,82,69,71,82,69, +83,83,73,79,78,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +82,101,103,105,109,101,115,32,82,101,103,114,101,115,115,105,111,110,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73, +83,80,76,65,89,95,83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,83,116,97,116,105,115,116,105,99,115,60, +47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, +97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32, +32,32,32,32,32,60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107, +101,100,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72, +79,87,95,65,88,69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62, +10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,65,120,101,115,32,84, +104,114,111,117,103,104,32,79,114,105,103,105,110,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111, 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, 116,101,109,34,32,110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95, -83,84,65,84,73,83,84,73,67,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,83,116,97,116,105,115,116,105,99,115,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62, -49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32, -60,99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10, -32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60, -111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, -73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,65,88, -69,83,95,84,72,82,79,85,71,72,95,79,82,73,71,73,78,34,62,10,32,32,32,32, -32,32,32,32,60,108,97,98,101,108,62,65,120,101,115,32,84,104,114,111,117, -103,104,32,79,114,105,103,105,110,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,68,73,83,80,76,65,89,95,83,84,65,84,85,83, -95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101, -99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107, -101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32,32,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116, -62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,77,69,78,85,34,62, -10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,108,111,114,60,47,108, -97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, -97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,79,85,84,76,73,78,69, -95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108, -62,82,101,103,114,101,115,115,105,111,110,32,76,105,110,101,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95,70,73,76,76,95,67,79,76, -79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,80,111,105, -110,116,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, +83,84,65,84,85,83,95,66,65,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,83,116,97,116,117,115,32,66,97,114,60,47,108,97,98,101,108, +62,10,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +99,104,101,99,107,101,100,62,49,60,47,99,104,101,99,107,101,100,62,10,32, +32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111, +108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, +79,85,84,76,73,78,69,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32, +60,108,97,98,101,108,62,82,101,103,114,101,115,115,105,111,110,32,76,105, +110,101,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106, 101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, -109,34,32,110,97,109,101,61,34,73,68,95,67,65,78,86,65,83,95,66,65,67,75, -71,82,79,85,78,68,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60, -108,97,98,101,108,62,66,97,99,107,103,114,111,117,110,100,32,67,111,108, -111,114,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, -32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, -97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +109,34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,65,66,76,69,95, +70,73,76,76,95,67,79,76,79,82,34,62,10,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,80,111,105,110,116,32,67,111,108,111,114,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67,65, +78,86,65,83,95,66,65,67,75,71,82,79,85,78,68,95,67,79,76,79,82,34,62,10, +32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,66,97,99,107,103,114,111, +117,110,100,32,67,111,108,111,114,60,47,108,97,98,101,108,62,10,32,32,32, +32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,83,69, +76,69,67,84,69,68,95,84,79,95,67,79,76,85,77,78,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,83,97,118,101,32,83,101,108,101,99,116,105,111, +110,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,67, +79,80,89,95,73,77,65,71,69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62, +10,32,32,32,32,32,32,60,108,97,98,101,108,62,67,111,112,121,32,73,109,97, +103,101,32,84,111,32,67,108,105,112,98,111,97,114,100,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65, +78,86,65,83,95,73,77,65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,97,118,101,32,73,109,97,103,101,32,65,115,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,108,97,98,101,108,62,79,112,116,105,111,110,115,60,47,108,97,98, +101,108,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110, +97,109,101,61,34,73,68,95,66,85,66,66,76,69,95,67,72,65,82,84,95,86,73, +69,87,95,77,69,78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34, +32,110,97,109,101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65, +95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99, +108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97, +109,101,61,34,73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77, +69,76,69,83,83,34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +84,104,101,109,101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104, +101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99, +116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85, +65,78,84,73,76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32, +32,60,108,97,98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98, +101,108,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,83,65,86,69,95,83,69,76,69,67,84,69,68,95,84,79,95,67, -79,76,85,77,78,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,97, -118,101,32,83,101,108,101,99,116,105,111,110,60,47,108,97,98,101,108,62, -10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, -101,109,34,32,110,97,109,101,61,34,73,68,95,67,79,80,89,95,73,77,65,71, -69,95,84,79,95,67,76,73,80,66,79,65,82,68,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,67,111,112,121,32,73,109,97,103,101,32,84,111,32,67, -108,105,112,98,111,97,114,100,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, +101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32, +32,32,32,32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10, +32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49, +60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60, +47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62, +10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97, +98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97, +98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76, +69,95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62, +52,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104, +101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62, +10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85, +65,78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97, +98,101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32, +32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107, +97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32, +32,32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32, +32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47, +99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,83,65,86,69,95,67,65,78,86,65,83,95,73,77, -65,71,69,95,65,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, -97,118,101,32,73,109,97,103,101,32,65,115,60,47,108,97,98,101,108,62,10, -32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,108,97,98, -101,108,62,79,112,116,105,111,110,115,60,47,108,97,98,101,108,62,10,32, -32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101,61, -34,73,68,95,66,85,66,66,76,69,95,67,72,65,82,84,95,86,73,69,87,95,77,69, -78,85,95,79,80,84,73,79,78,83,34,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,67,65,84,95,67,76,65,83,83,73,70,95,65,95,77,69,78,85, -34,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,77,65,80,65,78,65,76,89,83,73,83,95,84,72,69,77,69,76,69,83,83, -34,62,10,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,84,104,101,109, -101,108,101,115,115,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, -32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, -120,77,101,110,117,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73, -76,69,95,83,85,66,77,69,78,85,34,62,10,32,32,32,32,32,32,32,32,60,108,97, -98,101,108,62,81,117,97,110,116,105,108,101,60,47,108,97,98,101,108,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,50,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,50,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,51,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,51,60,47,108,97,98,101, -108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, -101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69, -95,52,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,52, -60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101, -99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10, -32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32, -32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, -101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,81,85,65, -78,84,73,76,69,95,53,34,62,10,32,32,32,32,32,32,32,32,32,32,60,108,97,98, -101,108,62,53,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32, -32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99,104,101,99,107,97, -98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, -61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, -73,68,95,81,85,65,78,84,73,76,69,95,54,34,62,10,32,32,32,32,32,32,32,32, -32,32,60,108,97,98,101,108,62,54,60,47,108,97,98,101,108,62,10,32,32,32, -32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108,101,62,49,60,47,99, -104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32,32, -32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, +110,97,109,101,61,34,73,68,95,81,85,65,78,84,73,76,69,95,55,34,62,10,32, +32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,55,60,47,108,97,98,101, 108,62,10,32,32,32,32,32,32,32,32,32,32,60,99,104,101,99,107,97,98,108, 101,62,49,60,47,99,104,101,99,107,97,98,108,101,62,10,32,32,32,32,32,32, 32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,111, @@ -46048,60 +48160,86 @@ static unsigned char xml_res_file_12[] = { 68,73,84,73,79,78,65,76,95,83,67,65,84,84,69,82,95,86,73,69,87,34,62,10, 32,32,32,32,32,32,60,108,97,98,101,108,62,83,99,97,116,116,101,114,32,80, 108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, -106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, -110,97,109,101,61,34,73,68,95,67,76,85,83,84,69,82,73,78,71,95,77,69,78, -85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,67,108,117,115,116,101, -114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,80,67, -65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,65,60,47,108, +101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,83,72,79,87,95,67,79,78,68,73,84,73,79,78,65,76,95,66,79,88, +95,86,73,69,87,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,66,111, +120,32,80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +34,32,110,97,109,101,61,34,73,68,95,67,76,85,83,84,69,82,73,78,71,95,77, +69,78,85,34,62,10,32,32,32,32,60,108,97,98,101,108,62,67,108,117,115,116, +101,114,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,80, +67,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,80,67,65,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, +76,83,95,68,65,84,65,95,77,68,83,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,77,68,83,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,84,83,78,69,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,116,45,83,78,69,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114, +97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69,65,78,83,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32,77,101,97,110,115, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84, +79,79,76,83,95,68,65,84,65,95,75,77,69,68,73,65,78,83,34,62,10,32,32,32, +32,32,32,60,108,97,98,101,108,62,75,32,77,101,100,105,97,110,115,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79, +76,83,95,68,65,84,65,95,75,77,69,68,79,73,68,83,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,75,32,77,101,100,111,105,100,115,60,47,108,97, +98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, +68,65,84,65,95,83,80,69,67,84,82,65,76,34,62,10,32,32,32,32,32,32,60,108, +97,98,101,108,62,83,112,101,99,116,114,97,108,60,47,108,97,98,101,108,62, +10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116, +101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84, +65,95,72,67,76,85,83,84,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,72,105,101,114,97,114,99,104,105,99,97,108,60,47,108,97,98,101,108, +62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, +98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116, +111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, +115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, +34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,68,66,83,67,65,78,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,68,66,83,99,97,110,60,47,108, 97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76, -83,95,68,65,84,65,95,77,68,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101, -108,62,77,68,83,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, -60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, -117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95, -68,65,84,65,95,75,77,69,65,78,83,34,62,10,32,32,32,32,32,32,60,108,97,98, -101,108,62,75,32,77,101,97,110,115,60,47,108,97,98,101,108,62,10,32,32, -32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99, -116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, -32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77, -69,68,73,65,78,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,75, -32,77,101,100,105,97,110,115,60,47,108,97,98,101,108,62,10,32,32,32,32, -60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, -32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32, -110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,75,77,69, -68,79,73,68,83,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,75,32, -77,101,100,111,105,100,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, -47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32, -99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, -97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83,80,69,67, -84,82,65,76,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83,112,101, -99,116,114,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, -106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, -115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101, -61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,67,76,85,83,84,69,82, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,105,101,114,97,114, -99,104,105,99,97,108,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +83,95,68,65,84,65,95,72,68,66,83,67,65,78,34,62,10,32,32,32,32,32,32,60, +108,97,98,101,108,62,72,68,66,83,99,97,110,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,115,101,112,97,114,97,116,111,114, +34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61, +34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73, +68,95,84,79,79,76,83,95,68,65,84,65,95,83,67,72,67,34,62,10,32,32,32,32, +32,32,60,108,97,98,101,108,62,83,67,72,67,60,47,108,97,98,101,108,62,10, +32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106, +101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101, +109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95, +83,75,65,84,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,115, +107,97,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, 98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, 97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, -101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,72,68,66,83,67,65,78, -34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,72,68,66,83,99,97,110, -60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, -10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, -101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,83, -75,65,84,69,82,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,115,107, -97,116,101,114,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60,47,108, +101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,82,69,68,67,65,80,34, +62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,114,101,100,99,97,112,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101, +112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99, +116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34, +32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,68,65,84,65,95,65,90, +80,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,65,90,80,60,47,108, 97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, 110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76, @@ -46134,33 +48272,54 @@ static unsigned char xml_res_file_12[] = { 101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, 62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99, 116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109, -101,61,34,73,68,95,76,73,83,65,95,77,69,78,85,34,62,10,32,32,32,32,60,108, -97,98,101,108,62,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,32, -77,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60,111,98,106,101, -99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, -34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73,83,65,34,62,10, -32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118,97,114,105,97, -116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108, -97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, -32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101, -110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77,85,76, -84,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62, -66,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110, -39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, -34,73,68,77,95,68,73,70,70,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60, -108,97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108,32,76, -111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101,108, -62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111, -98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73, -116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69,66, -82,65,84,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99, -97,108,32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66,32, -82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, -101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, -115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60, -108,97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115,60,47,108, +101,61,34,73,68,95,67,79,82,82,69,76,79,95,77,69,78,85,34,62,10,32,32,32, +32,60,108,97,98,101,108,62,68,105,115,116,97,110,99,101,32,98,97,115,101, +100,32,77,101,116,104,111,100,115,60,47,108,97,98,101,108,62,10,32,32,32, +32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110, +117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,67,79,82,82,69, +76,79,71,82,65,77,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,83, +112,97,116,105,97,108,32,67,111,114,114,101,108,111,103,114,97,109,60,47, +108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, +32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77, +101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,68,73, +83,84,65,78,67,69,95,80,76,79,84,34,62,10,32,32,32,32,32,32,60,108,97,98, +101,108,62,68,105,115,116,97,110,99,101,32,83,99,97,116,116,101,114,32, +80,108,111,116,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106, +101,99,116,62,10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98, +106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32, +110,97,109,101,61,34,73,68,95,76,73,83,65,95,77,69,78,85,34,62,10,32,32, +32,32,60,108,97,98,101,108,62,76,111,99,97,108,32,77,111,114,97,110,39, +115,32,73,32,77,97,112,115,60,47,108,97,98,101,108,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,76,73, +83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85,110,105,118, +97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32, +73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116, +62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119, +120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95, +85,78,73,95,77,69,68,73,65,78,95,76,73,83,65,34,62,10,32,32,32,32,32,32, +60,108,97,98,101,108,62,85,110,105,118,97,114,105,97,116,101,32,77,101, +100,105,97,110,32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60, +47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, +32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120, +77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,77, +85,76,84,73,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101, +108,62,66,105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,77,111,114, +97,110,39,115,32,73,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111, +98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108, +97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109, +101,61,34,73,68,77,95,68,73,70,70,95,76,73,83,65,34,62,10,32,32,32,32,32, +32,60,108,97,98,101,108,62,68,105,102,102,101,114,101,110,116,105,97,108, +32,76,111,99,97,108,32,77,111,114,97,110,39,115,32,73,60,47,108,97,98,101, +108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60, +111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117, +73,116,101,109,34,32,110,97,109,101,61,34,73,68,77,95,76,73,83,65,95,69, +66,82,65,84,69,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111, +99,97,108,32,77,111,114,97,110,39,115,32,73,32,119,105,116,104,32,69,66, +32,82,97,116,101,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98, +106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97, +115,115,61,34,115,101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32, +60,108,97,98,101,108,62,76,111,99,97,108,32,71,32,77,97,112,115,60,47,108, 97,98,101,108,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115, 115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61, 34,73,68,77,95,76,79,67,65,76,95,71,34,62,10,32,32,32,32,32,32,60,108,97, @@ -46202,6 +48361,26 @@ static unsigned char xml_res_file_12[] = { 82,89,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116, 105,118,97,114,105,97,116,101,32,76,111,99,97,108,32,71,101,97,114,121, 60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, +10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115, +101,112,97,114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101, +99,116,32,99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109, +34,32,110,97,109,101,61,34,73,68,77,95,85,78,73,95,81,85,65,78,84,73,76, +69,95,76,73,83,65,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,85, +110,105,118,97,114,105,97,116,101,32,81,117,97,110,116,105,108,101,32,76, +73,83,65,60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101, +99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, +61,34,119,120,77,101,110,117,73,116,101,109,34,32,110,97,109,101,61,34, +73,68,77,95,77,85,76,95,81,85,65,78,84,73,76,69,95,76,73,83,65,34,62,10, +32,32,32,32,32,32,60,108,97,98,101,108,62,77,117,108,116,105,118,97,114, +105,97,116,101,32,81,117,97,110,116,105,108,101,32,76,73,83,65,60,47,108, +97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32, +32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,101,112,97, +114,97,116,111,114,34,47,62,10,32,32,32,32,60,111,98,106,101,99,116,32, +99,108,97,115,115,61,34,119,120,77,101,110,117,73,116,101,109,34,32,110, +97,109,101,61,34,73,68,77,95,85,78,73,95,76,79,67,65,76,95,77,65,84,67, +72,34,62,10,32,32,32,32,32,32,60,108,97,98,101,108,62,76,111,99,97,108, +32,78,101,105,103,104,98,111,114,32,77,97,116,99,104,32,84,101,115,116, +60,47,108,97,98,101,108,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, 10,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,119,120,77,101,110,117,34,32,110,97,109,101, 61,34,73,68,95,84,79,79,76,83,95,77,69,78,85,34,62,10,32,32,32,32,60,111, @@ -57908,10 +60087,10 @@ static unsigned char xml_res_file_72[] = { 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108, 34,32,110,97,109,101,61,34,73,68,95,78,69,87,95,80,82,79,74,69,67,84,34, 62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, -82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108, 111,114,95,51,50,120,51,50,95,48,49,46,112,110,103,60,47,98,105,116,109, 97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48, +65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56, 45,99,111,108,111,114,95,51,50,120,51,50,95,48,49,46,112,110,103,60,47, 98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116, 105,112,62,79,112,101,110,60,47,116,111,111,108,116,105,112,62,10,32,32, @@ -57919,10 +60098,10 @@ static unsigned char xml_res_file_72[] = { 116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61, 34,73,68,95,67,76,79,83,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32, 32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50, +114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50, 120,51,50,95,48,50,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32, 32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121, 95,51,50,120,51,50,95,48,50,46,112,110,103,60,47,98,105,116,109,97,112, 50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,67,108,111, 115,101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98, @@ -57930,10 +60109,10 @@ static unsigned char xml_res_file_72[] = { 115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,83,65, 86,69,95,80,82,79,74,69,67,84,34,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,48,51, +99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,48,51, 46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98, 105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50, +101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50, 95,48,51,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32, 32,32,60,116,111,111,108,116,105,112,62,83,97,118,101,60,47,116,111,111, 108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32, @@ -57942,21 +60121,21 @@ static unsigned char xml_res_file_72[] = { 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, 68,77,95,78,69,87,95,84,65,66,76,69,34,62,10,32,32,32,32,32,32,60,98,105, 116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115, -46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,48, +46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,48, 52,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114, -99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51, +99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51, 50,95,48,52,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32, 32,32,32,60,116,111,111,108,116,105,112,62,84,97,98,108,101,60,47,116,111, 111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10, 32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111, 111,108,34,32,110,97,109,101,61,34,73,68,95,84,79,79,76,83,95,77,69,78, 85,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,53,45, 99,111,108,111,114,95,51,50,120,51,50,95,52,49,46,112,110,103,60,47,98, 105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50, 62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, -36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,52,49,46,112,110,103, +36,48,48,53,45,103,114,97,121,95,51,50,120,51,50,95,52,49,46,112,110,103, 60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108, 116,105,112,62,84,111,111,108,115,60,47,116,111,111,108,116,105,112,62, 10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98, @@ -57964,10 +60143,10 @@ static unsigned char xml_res_file_72[] = { 109,101,61,34,73,68,95,84,79,79,76,83,95,87,69,73,71,72,84,83,95,77,65, 78,65,71,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, 100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, -48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,48,53,46,112,110,103, +48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,48,53,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97, 112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99, -112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,48,53,46,112, +112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,48,53,46,112, 110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111, 111,108,116,105,112,62,87,101,105,103,104,116,115,32,77,97,110,97,103,101, 114,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106, @@ -57976,10 +60155,10 @@ static unsigned char xml_res_file_72[] = { 111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, 110,97,109,101,61,34,73,68,95,77,65,80,95,67,72,79,73,67,69,83,34,62,10, 32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111, 114,95,51,50,120,51,50,95,48,57,46,112,110,103,60,47,98,105,116,109,97, 112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45, 103,114,97,121,95,51,50,120,51,50,95,48,57,46,112,110,103,60,47,98,105, 116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112, 62,77,97,112,115,32,97,110,100,32,82,97,116,101,115,60,47,116,111,111,108, @@ -57988,10 +60167,10 @@ static unsigned char xml_res_file_72[] = { 34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95,67,65,82,84,79,71,82, 65,77,95,78,69,87,95,86,73,69,87,34,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,49,48, +99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,49,48, 46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98, 105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50, +101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50, 95,49,48,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32, 32,32,60,116,111,111,108,116,105,112,62,67,97,114,116,111,103,114,97,109, 60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, @@ -57999,10 +60178,10 @@ static unsigned char xml_res_file_72[] = { 61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,83,72,79,87,95, 68,65,84,65,95,77,79,86,73,69,34,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,49,49, +99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,49,49, 46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98, 105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50, +101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50, 95,49,49,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32, 32,32,60,116,111,111,108,116,105,112,62,77,97,112,32,77,111,118,105,101, 60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, @@ -58011,11 +60190,11 @@ static unsigned char xml_res_file_72[] = { 98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110, 97,109,101,61,34,73,68,95,83,72,79,87,95,67,65,84,95,67,76,65,83,83,73, 70,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45, 99,111,108,111,114,95,51,50,120,51,50,95,49,50,46,112,110,103,60,47,98, 105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50, 62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112, -36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,49,50,46,112,110,103, +36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,49,50,46,112,110,103, 60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108, 116,105,112,62,67,97,116,101,103,111,114,121,32,69,100,105,116,111,114, 60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, @@ -58024,10 +60203,10 @@ static unsigned char xml_res_file_72[] = { 98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110, 97,109,101,61,34,73,68,77,95,72,73,83,84,34,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51, +101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51, 50,95,49,51,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111, -117,114,99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50, +117,114,99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50, 120,51,50,95,49,51,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10, 32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,72,105,115,116,111, 103,114,97,109,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, @@ -58035,20 +60214,20 @@ static unsigned char xml_res_file_72[] = { 108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77, 95,66,79,88,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, 97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,99,111,108,111,114,95,51,50,120,51,50,95,49,52,46,112,110,103,60, +56,45,99,111,108,111,114,95,51,50,120,51,50,95,49,52,46,112,110,103,60, 47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, 50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,49,52,46,112,110, +112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,49,52,46,112,110, 103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111, 108,116,105,112,62,66,111,120,32,80,108,111,116,60,47,116,111,111,108,116, 105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32, 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34, 32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82,80,76,79,84,34, 62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, -82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108, 111,114,95,51,50,120,51,50,95,49,53,46,112,110,103,60,47,98,105,116,109, 97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48, +65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56, 45,103,114,97,121,95,51,50,120,51,50,95,49,53,46,112,110,103,60,47,98,105, 116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112, 62,83,99,97,116,116,101,114,32,80,108,111,116,60,47,116,111,111,108,116, @@ -58057,10 +60236,10 @@ static unsigned char xml_res_file_72[] = { 32,110,97,109,101,61,34,73,68,77,95,83,67,65,84,84,69,82,80,76,79,84,95, 77,65,84,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, 97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,99,111,108,111,114,95,51,50,120,51,50,95,49,54,46,112,110,103,60, +56,45,99,111,108,111,114,95,51,50,120,51,50,95,49,54,46,112,110,103,60, 47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, 50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,49,54,46,112,110, +112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,49,54,46,112,110, 103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111, 108,116,105,112,62,83,99,97,116,116,101,114,32,80,108,111,116,32,77,97, 116,114,105,120,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60, @@ -58068,10 +60247,10 @@ static unsigned char xml_res_file_72[] = { 99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68, 77,95,66,85,66,66,76,69,67,72,65,82,84,34,62,10,32,32,32,32,32,32,60,98, 105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101, -115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50, +115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50, 95,49,55,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32, 32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120, +114,99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120, 51,50,95,49,55,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32, 32,32,32,32,60,116,111,111,108,116,105,112,62,66,117,98,98,108,101,32,67, 104,97,114,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, @@ -58079,20 +60258,20 @@ static unsigned char xml_res_file_72[] = { 108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77, 95,51,68,80,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, 97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,99,111,108,111,114,95,51,50,120,51,50,95,49,56,46,112,110,103,60, +56,45,99,111,108,111,114,95,51,50,120,51,50,95,49,56,46,112,110,103,60, 47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112, 50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,49,56,46,112,110, +112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,49,56,46,112,110, 103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111, 108,116,105,112,62,51,68,32,83,99,97,116,116,101,114,32,80,108,111,116, 60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, 99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115, 61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77,95,80,67,80,34, 62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112, -82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108, +82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108, 111,114,95,51,50,120,51,50,95,49,57,46,112,110,103,60,47,98,105,116,109, 97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48, +65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56, 45,103,114,97,121,95,51,50,120,51,50,95,49,57,46,112,110,103,60,47,98,105, 116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112, 62,80,97,114,97,108,108,101,108,32,67,111,111,114,100,105,110,97,116,101, @@ -58101,10 +60280,10 @@ static unsigned char xml_res_file_72[] = { 99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68, 95,67,79,78,68,95,80,76,79,84,95,67,72,79,73,67,69,83,34,62,10,32,32,32, 32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111, -117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51, +117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51, 50,120,51,50,95,50,48,46,112,110,103,60,47,98,105,116,109,97,112,62,10, 32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82, -101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,103,114,97, +101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,103,114,97, 121,95,51,50,120,51,50,95,50,48,46,112,110,103,60,47,98,105,116,109,97, 112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,67,111, 110,100,105,116,105,111,110,97,108,32,80,108,111,116,60,47,116,111,111, @@ -58114,10 +60293,10 @@ static unsigned char xml_res_file_72[] = { 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, 68,95,67,76,85,83,84,69,82,73,78,71,95,67,72,79,73,67,69,83,34,62,10,32, 32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111, 114,95,51,50,120,51,50,95,51,56,46,112,110,103,60,47,98,105,116,109,97, 112,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65, -112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45, +112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45, 103,114,97,121,95,51,50,120,51,50,95,51,56,46,112,110,103,60,47,98,105, 116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112, 62,67,108,117,115,116,101,114,115,60,47,116,111,111,108,116,105,112,62, @@ -58127,21 +60306,21 @@ static unsigned char xml_res_file_72[] = { 61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,77,79,82,65,78, 95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, 100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, -48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,50,49,46,112,110,103, +48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,50,49,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97, 112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99, -112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,50,49,46,112, +112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,50,49,46,112, 110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111, 111,108,116,105,112,62,77,111,114,97,110,32,83,99,97,116,116,101,114,32, 80,108,111,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, 111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116,32,99, -108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77, -95,67,79,82,82,69,76,79,71,82,65,77,34,62,10,32,32,32,32,32,32,60,98,105, +108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95, +67,79,82,82,69,76,79,95,77,69,78,85,34,62,10,32,32,32,32,32,32,60,98,105, 116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115, -46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,50, +46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,50, 50,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114, -99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51, +99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51, 50,95,50,50,46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32, 32,32,32,60,116,111,111,108,116,105,112,62,83,112,97,116,105,97,108,32, 67,111,114,114,101,108,111,103,114,97,109,60,47,116,111,111,108,116,105, @@ -58149,10 +60328,10 @@ static unsigned char xml_res_file_72[] = { 111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32, 110,97,109,101,61,34,73,68,95,76,73,83,65,95,77,69,78,85,34,62,10,32,32, 32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115, -111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114, +111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114, 95,51,50,120,51,50,95,50,51,46,112,110,103,60,47,98,105,116,109,97,112, 62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112, -112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,103, +112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,103, 114,97,121,95,51,50,120,51,50,95,50,51,46,112,110,103,60,47,98,105,116, 109,97,112,50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62, 67,108,117,115,116,101,114,32,77,97,112,115,60,47,116,111,111,108,116,105, @@ -58162,10 +60341,10 @@ static unsigned char xml_res_file_72[] = { 97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,83, 72,79,87,95,84,73,77,69,95,67,72,79,79,83,69,82,34,62,10,32,32,32,32,32, 32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117, -114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,51,50, +114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,51,50, 120,51,50,95,50,53,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32, 32,32,32,32,32,60,98,105,116,109,97,112,50,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,103,114,97,121, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,103,114,97,121, 95,51,50,120,51,50,95,50,53,46,112,110,103,60,47,98,105,116,109,97,112, 50,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,84,105,109, 101,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106, @@ -58173,10 +60352,10 @@ static unsigned char xml_res_file_72[] = { 115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,77,95,76,73, 78,69,95,67,72,65,82,84,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97, 112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112, -112,36,48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,50,54,46,112, +112,36,48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,50,54,46,112, 110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115, -46,99,112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,50,54, +46,99,112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,50,54, 46,112,110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60, 116,111,111,108,116,105,112,62,65,118,101,114,97,103,101,115,32,67,104, 97,114,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111, @@ -58186,10 +60365,10 @@ static unsigned char xml_res_file_72[] = { 34,32,110,97,109,101,61,34,73,68,95,82,69,71,82,69,83,83,73,79,78,95,67, 76,65,83,83,73,67,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62, 71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36, -48,48,48,45,99,111,108,111,114,95,51,50,120,51,50,95,50,55,46,112,110,103, +48,48,56,45,99,111,108,111,114,95,51,50,120,51,50,95,50,55,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,98,105,116,109,97, 112,50,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99, -112,112,36,48,48,48,45,103,114,97,121,95,51,50,120,51,50,95,50,55,46,112, +112,112,36,48,48,56,45,103,114,97,121,95,51,50,120,51,50,95,50,55,46,112, 110,103,60,47,98,105,116,109,97,112,50,62,10,32,32,32,32,32,32,60,116,111, 111,108,116,105,112,62,82,101,103,114,101,115,115,105,111,110,60,47,116, 111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62, @@ -58204,7 +60383,7 @@ static unsigned char xml_res_file_72[] = { 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108, 34,32,110,97,109,101,61,34,73,68,95,83,69,76,69,67,84,95,76,65,89,69,82, 34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112, -112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111, +112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111, 108,111,114,95,50,52,120,50,52,95,50,56,46,112,110,103,60,47,98,105,116, 109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,83, 101,108,101,99,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, @@ -58212,7 +60391,7 @@ static unsigned char xml_res_file_72[] = { 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, 68,95,83,69,76,69,67,84,95,73,78,86,69,82,84,34,62,10,32,32,32,32,32,32, 60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114, -99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,50,52,120, +99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,50,52,120, 50,52,95,50,57,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32, 32,32,32,60,116,111,111,108,116,105,112,62,73,110,118,101,114,116,32,83, 101,108,101,99,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, @@ -58220,7 +60399,7 @@ static unsigned char xml_res_file_72[] = { 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, 68,95,65,68,68,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116, 109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99,101,115,46, -99,112,112,36,48,48,48,45,99,111,108,111,114,95,50,52,120,50,52,95,51,57, +99,112,112,36,48,48,56,45,99,111,108,111,114,95,50,52,120,50,52,95,51,57, 46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116, 111,111,108,116,105,112,62,65,100,100,32,77,97,112,32,76,97,121,101,114, 60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101, @@ -58228,7 +60407,7 @@ static unsigned char xml_res_file_72[] = { 61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,69,68,73,84,95, 76,65,89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71, 100,97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48, -48,48,45,99,111,108,111,114,95,50,52,120,50,52,95,52,48,46,112,110,103, +48,56,45,99,111,108,111,114,95,50,52,120,50,52,95,52,48,46,112,110,103, 60,47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108, 116,105,112,62,77,97,112,32,76,97,121,101,114,32,83,101,116,116,105,110, 103,115,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98, @@ -58237,7 +60416,7 @@ static unsigned char xml_res_file_72[] = { 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34, 32,110,97,109,101,61,34,73,68,95,90,79,79,77,95,76,65,89,69,82,34,62,10, 32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82,101, -115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108,111, +115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108,111, 114,95,50,52,120,50,52,95,51,48,46,112,110,103,60,47,98,105,116,109,97, 112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,90,111,111, 109,32,73,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47, @@ -58245,7 +60424,7 @@ static unsigned char xml_res_file_72[] = { 108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95, 90,79,79,77,95,79,85,84,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,50,52,120,50, +101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,50,52,120,50, 52,95,51,49,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,60,116,111,111,108,116,105,112,62,90,111,111,109,32,79,117,116,60, 47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98,106,101,99, @@ -58253,14 +60432,14 @@ static unsigned char xml_res_file_72[] = { 34,116,111,111,108,34,32,110,97,109,101,61,34,73,68,95,80,65,78,95,76,65, 89,69,82,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100, 97,65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48, -48,45,99,111,108,111,114,95,50,52,120,50,52,95,51,50,46,112,110,103,60, +56,45,99,111,108,111,114,95,50,52,120,50,52,95,51,50,46,112,110,103,60, 47,98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116, 105,112,62,80,97,110,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, 60,47,111,98,106,101,99,116,62,10,32,32,32,32,60,111,98,106,101,99,116, 32,99,108,97,115,115,61,34,116,111,111,108,34,32,110,97,109,101,61,34,73, 68,95,69,88,84,69,78,84,95,76,65,89,69,82,34,62,10,32,32,32,32,32,32,60, 98,105,116,109,97,112,62,71,100,97,65,112,112,82,101,115,111,117,114,99, -101,115,46,99,112,112,36,48,48,48,45,99,111,108,111,114,95,50,52,120,50, +101,115,46,99,112,112,36,48,48,56,45,99,111,108,111,114,95,50,52,120,50, 52,95,51,51,46,112,110,103,60,47,98,105,116,109,97,112,62,10,32,32,32,32, 32,32,60,116,111,111,108,116,105,112,62,70,117,108,108,32,69,120,116,101, 110,116,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32,60,47,111,98, @@ -58269,7 +60448,7 @@ static unsigned char xml_res_file_72[] = { 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34, 32,110,97,109,101,61,34,73,68,95,84,79,79,76,66,65,82,95,66,65,83,69,77, 65,80,34,62,10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97, -65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48, +65,112,112,82,101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56, 45,99,111,108,111,114,95,50,52,120,50,52,95,51,52,46,112,110,103,60,47, 98,105,116,109,97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105, 112,62,66,97,115,101,32,77,97,112,32,60,47,116,111,111,108,116,105,112, @@ -58277,7 +60456,7 @@ static unsigned char xml_res_file_72[] = { 98,106,101,99,116,32,99,108,97,115,115,61,34,116,111,111,108,34,32,110, 97,109,101,61,34,73,68,95,82,69,70,82,69,83,72,95,76,65,89,69,82,34,62, 10,32,32,32,32,32,32,60,98,105,116,109,97,112,62,71,100,97,65,112,112,82, -101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,48,45,99,111,108, +101,115,111,117,114,99,101,115,46,99,112,112,36,48,48,56,45,99,111,108, 111,114,95,50,52,120,50,52,95,51,54,46,112,110,103,60,47,98,105,116,109, 97,112,62,10,32,32,32,32,32,32,60,116,111,111,108,116,105,112,62,82,101, 102,114,101,115,104,60,47,116,111,111,108,116,105,112,62,10,32,32,32,32, @@ -58297,81 +60476,81 @@ void GdaInitXmlResource() else wxFileSystem::AddHandler(new wxMemoryFSHandler); } - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-about-geoda-logo.png"), xml_res_file_0, xml_res_size_0, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-open-folder.png"), xml_res_file_1, xml_res_size_1, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-save.png"), xml_res_file_2, xml_res_size_2, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-ToolBarBitmaps_3.png"), xml_res_file_3, xml_res_size_3, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-ToolBarBitmaps_3_disabled.png"), xml_res_file_4, xml_res_size_4, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-selstyle1.png"), xml_res_file_5, xml_res_size_5, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-selstyle2.png"), xml_res_file_6, xml_res_size_6, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-dragdrop.png"), xml_res_file_7, xml_res_size_7, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-open-crs.png"), xml_res_file_8, xml_res_size_8, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-dialogs.xrc"), xml_res_file_9, xml_res_size_9, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-8px_help.png"), xml_res_file_10, xml_res_size_10, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-data_viewer_dialogs.xrc"), xml_res_file_11, xml_res_size_11, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-menus.xrc"), xml_res_file_12, xml_res_size_12, wxT("text/xml")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_01.png"), xml_res_file_13, xml_res_size_13, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_02.png"), xml_res_file_14, xml_res_size_14, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_02.png"), xml_res_file_15, xml_res_size_15, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_03.png"), xml_res_file_16, xml_res_size_16, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_03.png"), xml_res_file_17, xml_res_size_17, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_04.png"), xml_res_file_18, xml_res_size_18, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_04.png"), xml_res_file_19, xml_res_size_19, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_41.png"), xml_res_file_20, xml_res_size_20, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_41.png"), xml_res_file_21, xml_res_size_21, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_05.png"), xml_res_file_22, xml_res_size_22, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_05.png"), xml_res_file_23, xml_res_size_23, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_09.png"), xml_res_file_24, xml_res_size_24, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_09.png"), xml_res_file_25, xml_res_size_25, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_10.png"), xml_res_file_26, xml_res_size_26, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_10.png"), xml_res_file_27, xml_res_size_27, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_11.png"), xml_res_file_28, xml_res_size_28, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_11.png"), xml_res_file_29, xml_res_size_29, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_12.png"), xml_res_file_30, xml_res_size_30, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_12.png"), xml_res_file_31, xml_res_size_31, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_13.png"), xml_res_file_32, xml_res_size_32, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_13.png"), xml_res_file_33, xml_res_size_33, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_14.png"), xml_res_file_34, xml_res_size_34, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_14.png"), xml_res_file_35, xml_res_size_35, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_15.png"), xml_res_file_36, xml_res_size_36, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_15.png"), xml_res_file_37, xml_res_size_37, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_16.png"), xml_res_file_38, xml_res_size_38, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_16.png"), xml_res_file_39, xml_res_size_39, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_17.png"), xml_res_file_40, xml_res_size_40, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_17.png"), xml_res_file_41, xml_res_size_41, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_18.png"), xml_res_file_42, xml_res_size_42, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_18.png"), xml_res_file_43, xml_res_size_43, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_19.png"), xml_res_file_44, xml_res_size_44, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_19.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_20.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_20.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_38.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_38.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_21.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_21.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_22.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_22.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_23.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_23.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_25.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_25.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_26.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_26.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_32x32_27.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-gray_32x32_27.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_28.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_29.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_39.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_40.png"), xml_res_file_65, xml_res_size_65, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_30.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_31.png"), xml_res_file_67, xml_res_size_67, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_32.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_33.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_34.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-color_24x24_36.png"), xml_res_file_71, xml_res_size_71, wxT("image/png")); - XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$000-toolbar.xrc"), xml_res_file_72, xml_res_size_72, wxT("text/xml")); - wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$000-dialogs.xrc")); - wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$000-data_viewer_dialogs.xrc")); - wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$000-menus.xrc")); - wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$000-toolbar.xrc")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-ToolBarBitmaps_3.png"), xml_res_file_0, xml_res_size_0, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-about-geoda-logo.png"), xml_res_file_1, xml_res_size_1, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-open-folder.png"), xml_res_file_2, xml_res_size_2, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-save.png"), xml_res_file_3, xml_res_size_3, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-ToolBarBitmaps_3_disabled.png"), xml_res_file_4, xml_res_size_4, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-selstyle1.png"), xml_res_file_5, xml_res_size_5, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-selstyle2.png"), xml_res_file_6, xml_res_size_6, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-dragdrop.png"), xml_res_file_7, xml_res_size_7, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$006-open-crs.png"), xml_res_file_8, xml_res_size_8, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$009-dialogs.xrc"), xml_res_file_9, xml_res_size_9, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-8px_help.png"), xml_res_file_10, xml_res_size_10, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-data_viewer_dialogs.xrc"), xml_res_file_11, xml_res_size_11, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-menus.xrc"), xml_res_file_12, xml_res_size_12, wxT("text/xml")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_01.png"), xml_res_file_13, xml_res_size_13, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_02.png"), xml_res_file_14, xml_res_size_14, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_02.png"), xml_res_file_15, xml_res_size_15, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_03.png"), xml_res_file_16, xml_res_size_16, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_03.png"), xml_res_file_17, xml_res_size_17, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_04.png"), xml_res_file_18, xml_res_size_18, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_04.png"), xml_res_file_19, xml_res_size_19, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$005-color_32x32_41.png"), xml_res_file_20, xml_res_size_20, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$005-gray_32x32_41.png"), xml_res_file_21, xml_res_size_21, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_05.png"), xml_res_file_22, xml_res_size_22, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_05.png"), xml_res_file_23, xml_res_size_23, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_09.png"), xml_res_file_24, xml_res_size_24, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_09.png"), xml_res_file_25, xml_res_size_25, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_10.png"), xml_res_file_26, xml_res_size_26, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_10.png"), xml_res_file_27, xml_res_size_27, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_11.png"), xml_res_file_28, xml_res_size_28, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_11.png"), xml_res_file_29, xml_res_size_29, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_12.png"), xml_res_file_30, xml_res_size_30, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_12.png"), xml_res_file_31, xml_res_size_31, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_13.png"), xml_res_file_32, xml_res_size_32, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_13.png"), xml_res_file_33, xml_res_size_33, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_14.png"), xml_res_file_34, xml_res_size_34, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_14.png"), xml_res_file_35, xml_res_size_35, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_15.png"), xml_res_file_36, xml_res_size_36, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_15.png"), xml_res_file_37, xml_res_size_37, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_16.png"), xml_res_file_38, xml_res_size_38, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_16.png"), xml_res_file_39, xml_res_size_39, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_17.png"), xml_res_file_40, xml_res_size_40, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_17.png"), xml_res_file_41, xml_res_size_41, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_18.png"), xml_res_file_42, xml_res_size_42, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_18.png"), xml_res_file_43, xml_res_size_43, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_19.png"), xml_res_file_44, xml_res_size_44, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_19.png"), xml_res_file_45, xml_res_size_45, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_20.png"), xml_res_file_46, xml_res_size_46, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_20.png"), xml_res_file_47, xml_res_size_47, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_38.png"), xml_res_file_48, xml_res_size_48, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_38.png"), xml_res_file_49, xml_res_size_49, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_21.png"), xml_res_file_50, xml_res_size_50, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_21.png"), xml_res_file_51, xml_res_size_51, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_22.png"), xml_res_file_52, xml_res_size_52, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_22.png"), xml_res_file_53, xml_res_size_53, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_23.png"), xml_res_file_54, xml_res_size_54, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_23.png"), xml_res_file_55, xml_res_size_55, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_25.png"), xml_res_file_56, xml_res_size_56, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_25.png"), xml_res_file_57, xml_res_size_57, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_26.png"), xml_res_file_58, xml_res_size_58, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_26.png"), xml_res_file_59, xml_res_size_59, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_32x32_27.png"), xml_res_file_60, xml_res_size_60, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-gray_32x32_27.png"), xml_res_file_61, xml_res_size_61, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_28.png"), xml_res_file_62, xml_res_size_62, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_29.png"), xml_res_file_63, xml_res_size_63, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_39.png"), xml_res_file_64, xml_res_size_64, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_40.png"), xml_res_file_65, xml_res_size_65, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_30.png"), xml_res_file_66, xml_res_size_66, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_31.png"), xml_res_file_67, xml_res_size_67, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_32.png"), xml_res_file_68, xml_res_size_68, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_33.png"), xml_res_file_69, xml_res_size_69, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_34.png"), xml_res_file_70, xml_res_size_70, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-color_24x24_36.png"), xml_res_file_71, xml_res_size_71, wxT("image/png")); + XRC_ADD_FILE(wxT("XRC_resource/GdaAppResources.cpp$008-toolbar.xrc"), xml_res_file_72, xml_res_size_72, wxT("text/xml")); + wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$009-dialogs.xrc")); + wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$008-data_viewer_dialogs.xrc")); + wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$008-menus.xrc")); + wxXmlResource::Get()->Load(wxT("memory:XRC_resource/GdaAppResources.cpp$008-toolbar.xrc")); } diff --git a/rc/data_viewer_dialogs.xrc b/rc/data_viewer_dialogs.xrc index e48a86da0..0a9549f74 100644 --- a/rc/data_viewer_dialogs.xrc +++ b/rc/data_viewer_dialogs.xrc @@ -1552,7 +1552,8 @@ All Rights Reserved - wxALIGN_CENTRE_VERTICAL + wxALIGN_CENTRE_VERTICAL | wxALL + 5 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL @@ -1564,7 +1565,8 @@ All Rights Reserved 135,-1d - wxALIGN_CENTRE_VERTICAL + wxALIGN_CENTRE_VERTICAL|wxALL + 5 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL @@ -1576,8 +1578,8 @@ All Rights Reserved open-folder.png - wxRIGHT|wxALIGN_CENTRE_VERTICAL - 3 + wxALL|wxALIGN_CENTRE_VERTICAL + 5 wxHORIZONTAL @@ -1587,7 +1589,7 @@ All Rights Reserved wxVERTICAL wxEXPAND|wxALL - 0 + 5 @@ -1608,13 +1610,15 @@ All Rights Reserved wxHORIZONTAL + wxALL + 5 wxVERTICAL wxEXPAND|wxALL - + 5 @@ -2083,6 +2087,8 @@ All Rights Reserved wxHORIZONTAL + wxEXPAND|wxALL + 5 wxVERTICAL diff --git a/rc/dialogs.xrc b/rc/dialogs.xrc index 66b512f8d..c7b6e4345 100644 --- a/rc/dialogs.xrc +++ b/rc/dialogs.xrc @@ -1,5 +1,6 @@ + ToolBarBitmaps_3.png wxHORIZONTAL @@ -62,9 +63,7 @@ -1,8d - - -1,5d @@ -90,7 +89,6 @@ - @@ -4156,7 +4154,7 @@ - + wxALL|wxEXPAND 480,320 @@ -5535,7 +5533,6 @@ - 80,-1d wxALL|wxALIGN_CENTER 3 @@ -6375,6 +6372,28 @@ wxGROW|wxALL 5 + + + + 27,5d + + + + 0 + + wxALIGN_CENTRE_VERTICAL + + + + + + 150,-1d + + wxALIGN_CENTRE_VERTICAL + + wxHORIZONTAL + + @@ -6572,6 +6591,28 @@ wxHORIZONTAL + + + + 27,5d + + + + 0 + + wxALIGN_CENTRE_VERTICAL + + + + + + 150,-1d + + wxALIGN_CENTRE_VERTICAL + + wxHORIZONTAL + + @@ -7245,6 +7286,29 @@ + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 5 + + wxHORIZONTAL + + wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + + 0 + + + + wxALIGN_CENTER_VERTICAL|wxALL + + 140,-1 + + + + + + @@ -7494,204 +7558,342 @@ wxVERTICAL - wxALIGN_LEFT|wxALL - 5 - + + + + + wxVERTICAL + + wxALIGN_LEFT|wxALL + 5 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL + 5 + + + + 1 + + + + wxALIGN_LEFT|wxALL + 5 + + + + 0 + + + + wxALIGN_LEFT|wxALL + 5 + + + + 0 + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + + + 0 + + + + + + wxALIGN_LEFT|wxALL + 5 + + + + 0 + + + + wxALIGN_CENTER_HORIZONTAL|wxALL + 5 + + 2 + 6 + 0 + 0 + + wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxADJUST_MINSIZE + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + 5,5d + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + 5,5d + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + wxALIGN_LEFT|wxALIGN_BOTTOM|wxALL|wxADJUST_MINSIZE + 5 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 5 + 5,5d + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxALL + 5 + + 56,-1d + + 0 + 0 + 100 + + + + + wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxADJUST_MINSIZE + 5 + + + + + + + wxALIGN_LEFT|wxALL + 5 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL + 5 + + + + 1 + + + + wxALIGN_LEFT|wxALL + 5 + + + + 1 + + + + + + + + + + + + wxVERTICAL + + wxALIGN_LEFT|wxALL + 5 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL + 1 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 100,-1d + + 10 + 5 + 200 + + + + wxALIGN_LEFT|wxALL + 1 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 100,-1d + + 3 + 1 + 10 + + + + + + + wxALIGN_LEFT|wxALL + 5 + + wxVERTICAL + + + wxALIGN_LEFT|wxALL + 1 + + + + + + wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL + 1 + + 100,-1d + + 1 + 1 + 10 + + + + wxEXPAND|wxALL + 1 + + wxHORIZONTAL + + + 80,-1d + + + + + + 11,8d + #FFFFFF + + + + + + + + + + + + wxALL|wxEXPAND + 5 + + + + + wxVERTICAL - - wxALIGN_LEFT|wxALL - 5 - - - - 1 - + wxALIGN_CENTER_HORIZONTAL|wxALL + 40 + + + + bold + 26 + + #666666 + - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - - - 0 - - - - - - wxALIGN_LEFT|wxALL - 5 - - - - 0 - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 5 - - 2 - 6 - 0 - 0 - - wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5d - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_TOP|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5d - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - wxALIGN_LEFT|wxALIGN_BOTTOM|wxALL|wxADJUST_MINSIZE - 5 - - - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL - 5 - 5,5d - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxALL - 5 - - 56,-1d - - 0 - 0 - 100 - - - - - wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxADJUST_MINSIZE - 5 - - - - - - - - - - wxVERTICAL - - wxALIGN_CENTER_HORIZONTAL|wxALL - 40 - - - - bold - 26 - - #666666 - - - - wxALIGN_CENTER_HORIZONTAL|wxALL - 0 - - - - 16 - - #666666 - + wxALIGN_CENTER_HORIZONTAL|wxALL + 0 + + + + 16 + + #666666 + wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM @@ -8010,95 +8212,6 @@ - - - - wxVERTICAL - - 0,40 - - - - - - - - 5 - - - - 130,-1 - - - - - wxALIGN_CENTRE_HORIZONTAL - 5 - - - - - - - - - 130,-1d - - - - - - - - - - - - - 130,-1d - - - - - - 3 - 5 - 15 - 10 - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - 0,40 - - - - - 4,10 - - - - - - - wxHORIZONTAL - - - https://www.carto.com/ - - - - - - - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - - - 560,340 @@ -8481,95 +8594,6 @@ - - - - wxVERTICAL - - 0,40 - - - - - - - - 5 - - - - 130,-1 - - - - - wxALIGN_CENTRE_HORIZONTAL - 5 - - - - - - - - - 130,-1d - - - - - - - - - - - - - 130,-1d - - - - - - 3 - 5 - 15 - 10 - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - 0,40 - - - - - 4,10 - - - - - - - wxHORIZONTAL - - - https://www.carto.com/ - - - - - - - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - - - 560,340 @@ -8918,99 +8942,6 @@ - - - - - wxVERTICAL - - 0,40 - - - - - - - - 5 - - - - 130,-1 - - - - - wxALIGN_CENTRE_HORIZONTAL - 5 - - - - - - - - - 130,-1d - - - - - - - - - - - - - 130,-1d - - - - - - 3 - 5 - 15 - 10 - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - 0,40 - - - - - 4,10 - - - - - - - wxHORIZONTAL - - - https://www.carto.com/ - - - - - - - - wxLEFT|wxALL|wxALIGN_CENTRE_HORIZONTAL - - - - - - - - 580,340 diff --git a/rc/menus.xrc b/rc/menus.xrc index 786af3ab9..49d680096 100644 --- a/rc/menus.xrc +++ b/rc/menus.xrc @@ -419,6 +419,9 @@ + + + @@ -430,6 +433,9 @@ + + + @@ -446,16 +452,27 @@ + + + + + + + + + + + @@ -478,6 +495,9 @@ + + + @@ -513,9 +533,23 @@ + + + + + + + + + + + + + + @@ -1603,6 +1637,394 @@ + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + + + + + 1 + 1 + + + + 1 + 0 + + + + + + + + + + + + + + + 1 + 1 + + + + 1 + 0 + + + + 1 + 1 + + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1947,38 +2369,390 @@ - - - - - 1 - - - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - - - - 1 - + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + + + + + + 1 + + + + 1 + + + + + + + + + + + + + 1 + 1 + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + + + + 1 + 1 @@ -2179,6 +2953,11 @@ + + + 1 + 0 + @@ -2287,6 +3066,61 @@ + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + @@ -2344,7 +3178,6 @@ 1 1 - @@ -2526,6 +3359,9 @@ + + + @@ -2636,77 +3472,283 @@ 1 - - + + + 1 + + + + 1 + + + + + 1 + + + + + + + + + + + 1 + + + + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + 1 + 1 + + + + 1 + 0 + + + + + + + + + + + 1 + 1 + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + 1 + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 - - + + 1 + 0 - - - 1 + + + 1 + + + 1 + + - - - - - - - - + + + 1 + 0 - - + + + 0 - - - + + + 0 + + + + + + 1 - + + + 1 + + + - + 1 - + 1 - + 1 - + - - + + + + + 1 + 0 - - + + - - - - - - + + - - + + + - - + + + + + + @@ -2748,13 +3790,8 @@ 1 1 - - - 1 - 1 - - + @@ -2766,9 +3803,21 @@ - + + + + + + + + 1 + + + + + 1 @@ -2799,12 +3848,8 @@ - - - - - - + + @@ -2853,6 +3898,61 @@ + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + @@ -2894,7 +3994,7 @@ 1 - + @@ -2906,9 +4006,9 @@ - - - + + + @@ -2951,6 +4051,9 @@ + + + @@ -2998,6 +4101,61 @@ + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + @@ -3151,6 +4309,9 @@ + + + @@ -3584,6 +4745,9 @@ + + + @@ -3631,6 +4795,61 @@ + + + + 1 + + + + 1 + + + + + + + 1 + + + + 1 + + + + 1 + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + @@ -4068,6 +5287,59 @@ 0 + + + + + 0 + + + + + + 1 + 0 + + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + 0 + 0 + + + + + 0 + + @@ -4809,6 +6081,9 @@ + + + @@ -4818,6 +6093,9 @@ + + + @@ -4834,16 +6112,27 @@ + + + + + + + + + + + @@ -4863,11 +6152,23 @@ + + + + + + + + + + + + @@ -4903,6 +6204,17 @@ + + + + + + + + + + + diff --git a/rc/toolbar.xrc b/rc/toolbar.xrc index fbd3f6038..44dc90be4 100644 --- a/rc/toolbar.xrc +++ b/rc/toolbar.xrc @@ -111,7 +111,7 @@ gray/32x32/21.png Moran Scatter Plot - + color/32x32/22.png gray/32x32/22.png Spatial Correlogram diff --git a/version.h b/version.h index dc8e8d4b5..2b9dec360 100644 --- a/version.h +++ b/version.h @@ -1,11 +1,11 @@ namespace Gda { const int version_major = 1; - const int version_minor = 14; + const int version_minor = 16; const int version_build = 0; - const int version_subbuild = 2; - const int version_year = 2019; - const int version_month = 10; - const int version_day = 15; + const int version_subbuild = 0; + const int version_year = 2020; + const int version_month = 9; + const int version_day = 24; const int version_night = 0; const int version_type = 2; // 0: alpha, 1: beta, 2: release }