diff --git a/Makefile b/Makefile index 5d1bf3c..133c327 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,9 @@ SOURCES = main.cpp \ city.cpp \ terrainyieldmanager.cpp \ gamemanager.cpp \ - unitrenderer.cpp qrc_shaders.cpp \ + unitrenderer.cpp \ + localization.cpp \ + terrainmovementmanager.cpp qrc_shaders.cpp \ moc_mainwindow.cpp OBJECTS = main.o \ mainwindow.o \ @@ -85,6 +87,8 @@ OBJECTS = main.o \ terrainyieldmanager.o \ gamemanager.o \ unitrenderer.o \ + localization.o \ + terrainmovementmanager.o \ qrc_shaders.o \ moc_mainwindow.o DIST = shaders/simple.vert \ @@ -194,7 +198,9 @@ DIST = shaders/simple.vert \ city.h \ terrainyieldmanager.h \ gamemanager.h \ - unitrenderer.h main.cpp \ + unitrenderer.h \ + localization.h \ + terrainmovementmanager.h main.cpp \ mainwindow.cpp \ qscenerenderer.cpp \ vertex.cpp \ @@ -209,7 +215,9 @@ DIST = shaders/simple.vert \ city.cpp \ terrainyieldmanager.cpp \ gamemanager.cpp \ - unitrenderer.cpp + unitrenderer.cpp \ + localization.cpp \ + terrainmovementmanager.cpp QMAKE_TARGET = tiletest DESTDIR = TARGET = tiletest @@ -416,8 +424,8 @@ distdir: FORCE $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ $(COPY_FILE) --parents shaders.qrc $(DISTDIR)/ $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ - $(COPY_FILE) --parents mainwindow.h qscenerenderer.h vertex.h tile.h terrain.h tilevertexinfo.h matrix2d.h face.h player.h yamlparser.h unitconfig.h pathfinder.h unit.h city.h terrainyieldmanager.h gamemanager.h unitrenderer.h $(DISTDIR)/ - $(COPY_FILE) --parents main.cpp mainwindow.cpp qscenerenderer.cpp vertex.cpp tile.cpp tilevertexinfo.cpp face.cpp player.cpp yamlparser.cpp unitconfig.cpp pathfinder.cpp unit.cpp city.cpp terrainyieldmanager.cpp gamemanager.cpp unitrenderer.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.h qscenerenderer.h vertex.h tile.h terrain.h tilevertexinfo.h matrix2d.h face.h player.h yamlparser.h unitconfig.h pathfinder.h unit.h city.h terrainyieldmanager.h gamemanager.h unitrenderer.h localization.h terrainmovementmanager.h $(DISTDIR)/ + $(COPY_FILE) --parents main.cpp mainwindow.cpp qscenerenderer.cpp vertex.cpp tile.cpp tilevertexinfo.cpp face.cpp player.cpp yamlparser.cpp unitconfig.cpp pathfinder.cpp unit.cpp city.cpp terrainyieldmanager.cpp gamemanager.cpp unitrenderer.cpp localization.cpp terrainmovementmanager.cpp $(DISTDIR)/ $(COPY_FILE) --parents mainwindow.ui $(DISTDIR)/ @@ -484,6 +492,7 @@ ui_mainwindow.h: mainwindow.ui \ unitrenderer.h \ unit.h \ unitconfig.h \ + terrainmovementmanager.h \ player.h \ city.h \ gamemanager.h \ @@ -515,6 +524,7 @@ mainwindow.o: mainwindow.cpp mainwindow.h \ unitrenderer.h \ unit.h \ unitconfig.h \ + terrainmovementmanager.h \ player.h \ city.h \ gamemanager.h \ @@ -531,11 +541,13 @@ qscenerenderer.o: qscenerenderer.cpp qscenerenderer.h \ unitrenderer.h \ unit.h \ unitconfig.h \ + terrainmovementmanager.h \ player.h \ city.h \ gamemanager.h \ terrainyieldmanager.h \ - pathfinder.h + pathfinder.h \ + yamlparser.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qscenerenderer.o qscenerenderer.cpp vertex.o: vertex.cpp vertex.h \ @@ -553,6 +565,7 @@ tile.o: tile.cpp tile.h \ unitrenderer.h \ unit.h \ unitconfig.h \ + terrainmovementmanager.h \ player.h \ city.h \ gamemanager.h \ @@ -576,16 +589,22 @@ yamlparser.o: yamlparser.cpp yamlparser.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o yamlparser.o yamlparser.cpp unitconfig.o: unitconfig.cpp unitconfig.h \ + terrainmovementmanager.h \ + terrain.h \ + matrix2d.h \ yamlparser.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o unitconfig.o unitconfig.cpp pathfinder.o: pathfinder.cpp pathfinder.h \ terrain.h \ - matrix2d.h + matrix2d.h \ + terrainmovementmanager.h \ + unitconfig.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o pathfinder.o pathfinder.cpp unit.o: unit.cpp unit.h \ unitconfig.h \ + terrainmovementmanager.h \ terrain.h \ matrix2d.h \ pathfinder.h @@ -598,6 +617,7 @@ city.o: city.cpp city.h \ terrainyieldmanager.o: terrainyieldmanager.cpp terrainyieldmanager.h \ terrain.h \ matrix2d.h \ + terrainmovementmanager.h \ yamlparser.h \ pathfinder.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o terrainyieldmanager.o terrainyieldmanager.cpp @@ -605,24 +625,40 @@ terrainyieldmanager.o: terrainyieldmanager.cpp terrainyieldmanager.h \ gamemanager.o: gamemanager.cpp gamemanager.h \ player.h \ unitconfig.h \ - unit.h \ + terrainmovementmanager.h \ terrain.h \ matrix2d.h \ + unit.h \ city.h \ terrainyieldmanager.h \ pathfinder.h \ - yamlparser.h + yamlparser.h \ + localization.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o gamemanager.o gamemanager.cpp unitrenderer.o: unitrenderer.cpp unitrenderer.h \ unit.h \ unitconfig.h \ + terrainmovementmanager.h \ terrain.h \ matrix2d.h \ player.h \ - city.h + city.h \ + pathfinder.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o unitrenderer.o unitrenderer.cpp +localization.o: localization.cpp localization.h \ + yamlparser.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o localization.o localization.cpp + +terrainmovementmanager.o: terrainmovementmanager.cpp terrainmovementmanager.h \ + terrain.h \ + matrix2d.h \ + unitconfig.h \ + pathfinder.h \ + yamlparser.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o terrainmovementmanager.o terrainmovementmanager.cpp + qrc_shaders.o: qrc_shaders.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_shaders.o qrc_shaders.cpp diff --git a/agents.ms b/agents.ms deleted file mode 120000 index 23b2e31..0000000 --- a/agents.ms +++ /dev/null @@ -1 +0,0 @@ -/home/bart/project/tiletest/AGENTS.md \ No newline at end of file diff --git a/city.h b/city.h index fb164b2..1b0df9a 100644 --- a/city.h +++ b/city.h @@ -29,6 +29,7 @@ public: int inhabitants; int inhabitantsPerPop; + int accumulatedLabor = 0; // Local resource (Arbeid) std::vector> territory; // Owned hex coordinates std::map, QString> workedTiles; // (x, y) -> resource name @@ -36,6 +37,12 @@ public: City(int cId, int pId, const QString &cName, int tx, int ty, const QVector3D &pos, int initInhabitants = 1000, int initInhabitantsPerPop = 100000, int initRadius = 1); + bool addTerritory(int tx, int ty) { + if (ownsTile(tx, ty)) return false; + territory.emplace_back(tx, ty); + return true; + } + int getTotalPop() const { return (int)std::ceil((float)inhabitants / (float)std::max(1, inhabitantsPerPop)); } diff --git a/city.o b/city.o index 830a24b..b16856c 100644 Binary files a/city.o and b/city.o differ diff --git a/config/city.yaml b/config/city.yaml index a7856be..0169586 100644 --- a/config/city.yaml +++ b/config/city.yaml @@ -6,3 +6,25 @@ inhabitants_per_pop: 100000 initial_border_radius: 1 max_workable_radius: 3 default_tile_slots: 1 +city_view_zoom: 4.8 + +# Per-tick resource generation & mechanics +base_resource_yield_per_tick: 500 +tile_culture_cost: 10000 +food_to_inhabitants_ratio: 1.0 + +# Base yield breakdown per resource (default 500 per tick) +base_yields: + voedsel: 500 + arbeid: 500 + kennis: 500 + cultuur: 500 + geloof: 500 + goud: 500 + +# Initial player national resources +initial_national_resources: + cultuur: 10000 + kennis: 0 + geloof: 0 + goud: 0 diff --git a/config/game.yaml b/config/game.yaml index d1a0feb..0aa618a 100644 --- a/config/game.yaml +++ b/config/game.yaml @@ -1 +1,8 @@ movement_tick_duration: 30.0 + +# Camera settings +camera: + min_zoom: 2.0 + max_zoom: 16.0 + pitch_min_deg: 45.0 # Pitch angle when close up (45° = 3D perspective) + pitch_max_deg: 75.0 # Pitch angle when zoomed out (75° = look downward, limiting rendered hexagons) diff --git a/config/strings_en.yaml b/config/strings_en.yaml new file mode 100644 index 0000000..3d555a5 --- /dev/null +++ b/config/strings_en.yaml @@ -0,0 +1,61 @@ +# English localization strings for UI, HUD, actions, and game messages +locale: en + +ui: + general: + game_title: "RTS Civilization" + pause: "Pause" + resume: "Resume" + speed_1x: "1x Speed" + speed_2x: "2x Speed" + speed_4x: "4x Speed" + menu: "Menu" + settings: "Settings" + quit: "Quit" + + hud: + gold: "Gold" + science: "Science" + culture: "Culture" + faith: "Faith" + food: "Food" + production: "Production" + population: "Population" + turn_time: "Time" + minimap: "Minimap" + + actions: + move: "Move" + attack: "Attack" + found_city: "Found City" + build_farm: "Build Farm" + build_mine: "Build Mine" + build_lumber_mill: "Build Lumber Mill" + build_road: "Build Road" + cancel: "Cancel" + + units: + settler: "Settler" + builder: "Builder" + warrior: "Warrior" + slinger: "Slinger" + archer: "Archer" + scout: "Scout" + galley: "Galley" + + unit: + moving: "Moving" + impassable_terrain: "Impassable terrain!" + naval_only_water: "Ships can only sail on water!" + no_path: "No reachable path!" + tile_purchased: "Tile purchased! (-%1 Culture)" + out_of_range: "Out of range!" + defeated: "Defeated!" + city_already_here: "A city already exists here!" + unsuitable_terrain: "Unsuitable terrain!" + + city: + center: "City Center" + produce_unit: "Produce Unit" + build_district: "Construct District" + population_growth: "Growth in {turns}s" diff --git a/config/terrain_movement.yaml b/config/terrain_movement.yaml new file mode 100644 index 0000000..c3f8a76 --- /dev/null +++ b/config/terrain_movement.yaml @@ -0,0 +1,36 @@ +# Terrain movement rules, passability and costs configuration +# All gameplay values and parameters are fully configurable. + +# Classification thresholds +water_height_threshold: 6 # Raw heightmap elevation value (< 6 is water) +mountain_rock_height_km: 2.3 # Height in km >= 2.3 is rocky mountain +snow_height_km: 3.1 # Altitude in km >= 3.1 is high peak snow +polar_snow_line_enabled: true # Whether latitude reduces snowline altitude +polar_snow_line_base_km: 2.5 # Base snowline at temperate latitudes +polar_snow_factor_start: 0.40 # Latitude distFromCenter where polar cooling starts +polar_snow_factor_end: 0.85 # Latitude distFromCenter where sea-level snowline is reached + +# Movement costs per terrain type (1.0 = normal base cost, higher values = slower traversal) +movement_costs: + grasland: 1.0 + bos: 2.0 + steen: 2.5 + sahara: 1.5 + tundra: 1.5 + red_canyon: 2.0 + sneeuw: 3.0 + water: 1.0 + +# Movement domains: +# - land: standard ground units (settler, builder, warrior, slinger, etc.) +# impassable_terrains: list of terrain types land units CANNOT enter or cross. +# - naval: ships and sea vessels (galley, etc.) +# passable_terrains: ships can ONLY move on these terrains (water). +domains: + land: + impassable_terrains: + - water + - sneeuw + naval: + passable_terrains: + - water diff --git a/config/terrain_yields.yaml b/config/terrain_yields.yaml index c295ba5..6da8927 100644 --- a/config/terrain_yields.yaml +++ b/config/terrain_yields.yaml @@ -98,7 +98,7 @@ water: default_slots: 0 primary_resource: "geen" yields: - voedsel: 0 + voedsel: 1000 arbeid: 0 kennis: 0 cultuur: 0 diff --git a/config/units/galley.yaml b/config/units/galley.yaml new file mode 100644 index 0000000..787b96a --- /dev/null +++ b/config/units/galley.yaml @@ -0,0 +1,13 @@ +id: galley +name: Galley +category: militair +domain: naval +health: 120 +movement_speed: 3.0 +cost: 60 +attack_damage: 25 +attack_range: 1 +icon: images/units/galley.png +actions: + - verplaatsen + - aanvallen diff --git a/config/units/settler.yaml b/config/units/settler.yaml index 88f61c1..0e4511c 100644 --- a/config/units/settler.yaml +++ b/config/units/settler.yaml @@ -1,6 +1,7 @@ id: settler name: Settler category: bouwen +domain: land health: 100 movement_speed: 2.0 cost: 80 diff --git a/config/units/slinger.yaml b/config/units/slinger.yaml index 3e4a980..b45065e 100644 --- a/config/units/slinger.yaml +++ b/config/units/slinger.yaml @@ -1,6 +1,7 @@ id: slinger name: Slinger category: militair +domain: land health: 70 movement_speed: 2.0 cost: 35 diff --git a/config/units/warrior.yaml b/config/units/warrior.yaml index 2ebd36c..7dc6acb 100644 --- a/config/units/warrior.yaml +++ b/config/units/warrior.yaml @@ -1,6 +1,7 @@ id: warrior name: Warrior category: militair +domain: land health: 100 movement_speed: 2.0 cost: 40 diff --git a/gamemanager.h b/gamemanager.h index 8763d4a..0825ad2 100644 --- a/gamemanager.h +++ b/gamemanager.h @@ -16,7 +16,16 @@ enum class ActionMode { None, Move, Attack, - BuildCity + BuildCity, + BuildFarm +}; + +struct TileImprovement { + QString improvementId; // "farm" + int tileX; + int tileY; + int playerId; + QVector3D worldPos; }; struct FloatingText { @@ -65,10 +74,20 @@ public: void exitCityView(); CityYieldSummary calculateCityYields(const City &city, Matrix2D *mapPoints, int numPoints05) const; + void processTickYields(Matrix2D *mapPoints, int numPoints05); + + bool isTileOwned(int tx, int ty, int *outOwnerCityId = nullptr) const; + bool buyTileForCity(int cityId, int tx, int ty); void commandMoveSelected(int targetX, int targetY, Matrix2D *mapPoints, int numPoints05); void commandAttack(Unit *target); void commandBuildCitySelected(Matrix2D *mapPoints, int numPoints05); + void commandBuildFarmSelected(Matrix2D *mapPoints, int numPoints05); + void completeUnitBuilding(Unit &unit, Matrix2D *mapPoints, int numPoints05); + + const std::map, TileImprovement>& getTileImprovements() const { return m_tileImprovements; } + const TileImprovement* getImprovementAt(int tx, int ty) const; + bool hasImprovementAt(int tx, int ty) const; float getTickDuration() const { return m_movementTickDuration; } void setTickDuration(float d) { m_movementTickDuration = std::max(1.0f, d); } @@ -94,6 +113,7 @@ private: std::vector> m_units; std::vector m_cities; std::vector m_floatingTexts; + std::map, TileImprovement> m_tileImprovements; int m_selectedUnitId; int m_activeCityViewId; diff --git a/gamemanager.o b/gamemanager.o index 9125fef..3595cfb 100644 Binary files a/gamemanager.o and b/gamemanager.o differ diff --git a/images/farm.jpeg b/images/farm.jpeg new file mode 100644 index 0000000..bb95ff8 Binary files /dev/null and b/images/farm.jpeg differ diff --git a/images/units/galley.png b/images/units/galley.png new file mode 100644 index 0000000..cf75948 Binary files /dev/null and b/images/units/galley.png differ diff --git a/localization.cpp b/localization.cpp new file mode 100644 index 0000000..79bd7f4 --- /dev/null +++ b/localization.cpp @@ -0,0 +1,49 @@ +#include "localization.h" +#include "yamlparser.h" +#include + +Localization& Localization::instance() +{ + static Localization s_instance; + return s_instance; +} + +Localization::Localization() + : m_loaded(false) +{ +} + +void Localization::flattenNode(const YamlNode &node, const QString &prefix) +{ + if (!node.value.isEmpty()) { + m_strings[prefix] = node.value; + } + for (auto it = node.children.begin(); it != node.children.end(); ++it) { + QString nextPrefix = prefix.isEmpty() ? it.key() : (prefix + "." + it.key()); + flattenNode(it.value(), nextPrefix); + } +} + +bool Localization::loadFile(const QString &filePath) +{ + YamlNode root = YamlParser::parseFile(filePath); + if (root.children.isEmpty() && root.value.isEmpty()) { + qWarning() << "Failed to parse localization file:" << filePath; + return false; + } + + m_strings.clear(); + flattenNode(root, ""); + m_loaded = true; + qDebug() << "Localization loaded" << m_strings.size() << "keys from" << filePath; + return true; +} + +QString Localization::get(const QString &key, const QString &defaultVal) const +{ + auto it = m_strings.find(key); + if (it != m_strings.end()) { + return it.value(); + } + return defaultVal.isEmpty() ? key : defaultVal; +} diff --git a/localization.h b/localization.h new file mode 100644 index 0000000..09bbb19 --- /dev/null +++ b/localization.h @@ -0,0 +1,26 @@ +#ifndef LOCALIZATION_H +#define LOCALIZATION_H + +#include +#include + +class YamlNode; + +class Localization { +public: + static Localization& instance(); + + bool loadFile(const QString &filePath); + QString get(const QString &key, const QString &defaultVal = "") const; + +private: + Localization(); + ~Localization() = default; + + void flattenNode(const YamlNode &node, const QString &prefix); + + QMap m_strings; + bool m_loaded; +}; + +#endif // LOCALIZATION_H diff --git a/localization.o b/localization.o new file mode 100644 index 0000000..ca24b65 Binary files /dev/null and b/localization.o differ diff --git a/mainwindow.o b/mainwindow.o index 1e1950f..55dc53d 100644 Binary files a/mainwindow.o and b/mainwindow.o differ diff --git a/pathfinder.cpp b/pathfinder.cpp index 4e8d7d9..5a90cf7 100644 --- a/pathfinder.cpp +++ b/pathfinder.cpp @@ -1,4 +1,6 @@ #include "pathfinder.h" +#include "terrainmovementmanager.h" +#include "unitconfig.h" #include #include #include @@ -74,7 +76,9 @@ std::vector> Pathfinder::findPath( int startX, int startY, int goalX, int goalY, Matrix2D *mapPoints, - int numPoints05) + int numPoints05, + MovementDomain domain, + const UnitConfig *unitConfig) { std::vector> path; if (startX == goalX && startY == goalY) { @@ -86,6 +90,11 @@ std::vector> Pathfinder::findPath( return path; } + // Goal hex must be passable for this unit/domain + if (!TerrainMovementManager::instance().isHexPassable(goalX, goalY, domain, mapPoints, numPoints05, unitConfig)) { + return path; + } + std::priority_queue, std::greater> openSet; std::unordered_map gScore; std::unordered_map cameFrom; @@ -94,7 +103,7 @@ std::vector> Pathfinder::findPath( gScore[startPacked] = 0.0f; openSet.push({startX, startY, 0.0f, (float)hexDistance(startX, startY, goalX, goalY)}); - int maxIterations = 3000; + int maxIterations = 5000; int iterations = 0; bool found = false; @@ -117,23 +126,14 @@ std::vector> Pathfinder::findPath( if (nx < 0 || nx >= MAP_WIDTH || ny < 0 || ny >= MAP_HEIGHT) continue; - float stepCost = 1.0f; - - // Elevation check if terrain points are available - if (mapPoints && numPoints05 > 0) { - float scaleX = numPoints05 * 2.0f; - float scaleY = numPoints05 / LOD_0_SIZE_Y; - QVector2D nCenter = hexToWorld(nx, ny); - int mapX = (int) std::round(nCenter.x() * scaleX); - int mapY = (int) std::round(nCenter.y() * scaleY); - if (mapX >= 0 && mapX < (int)mapPoints->getWidth() && mapY >= 0 && mapY < (int)mapPoints->getHeight()) { - unsigned char h = mapPoints->operator()(mapX, mapY).height; - // Slightly penalize water tiles or high mountains - if (h < 5) stepCost += 4.0f; - else if (h > 220) stepCost += 2.0f; - } + // Check if neighbor hex is passable for this unit's domain + if (!TerrainMovementManager::instance().isHexPassable(nx, ny, domain, mapPoints, numPoints05, unitConfig)) { + continue; } + // Step cost from configurable terrain movement manager + float stepCost = TerrainMovementManager::instance().getHexMovementCost(nx, ny, mapPoints, numPoints05); + float tentativeG = current.g + stepCost; int nPacked = packCoord(nx, ny); diff --git a/pathfinder.h b/pathfinder.h index 5cd6fff..c4802fe 100644 --- a/pathfinder.h +++ b/pathfinder.h @@ -7,6 +7,10 @@ #include "terrain.h" #include "matrix2d.h" +#include "terrainmovementmanager.h" + +struct UnitConfig; + class Pathfinder { public: static QVector2D hexToWorld(int x, int y); @@ -16,7 +20,9 @@ public: int startX, int startY, int goalX, int goalY, Matrix2D *mapPoints = nullptr, - int numPoints05 = 0 + int numPoints05 = 0, + MovementDomain domain = MovementDomain::Land, + const UnitConfig *unitConfig = nullptr ); }; diff --git a/pathfinder.o b/pathfinder.o index 2836139..7e8dbb0 100644 Binary files a/pathfinder.o and b/pathfinder.o differ diff --git a/player.h b/player.h index 31184cc..93b6c08 100644 --- a/player.h +++ b/player.h @@ -11,9 +11,19 @@ struct Player { QColor primaryColor; QColor secondaryColor; - Player() : id(0), name("Unknown"), primaryColor(Qt::blue), secondaryColor(Qt::white) {} - Player(int pId, const QString &pName, const QColor &primary, const QColor &secondary) - : id(pId), name(pName), primaryColor(primary), secondaryColor(secondary) {} + // National resources (shared across all cities of this nation) + int culture; + int science; + int gold; + int faith; + + Player() + : id(0), name("Unknown"), primaryColor(Qt::blue), secondaryColor(Qt::white), + culture(10000), science(0), gold(0), faith(0) {} + Player(int pId, const QString &pName, const QColor &primary, const QColor &secondary, + int pCulture = 10000, int pScience = 0, int pGold = 0, int pFaith = 0) + : id(pId), name(pName), primaryColor(primary), secondaryColor(secondary), + culture(pCulture), science(pScience), gold(pGold), faith(pFaith) {} }; class PlayerManager { @@ -24,6 +34,7 @@ public: const Player* getPlayer(int id) const; Player* getPlayer(int id); const std::vector& getPlayers() const { return m_players; } + std::vector& getPlayersMutable() { return m_players; } bool isCombinationUnique(const QColor &primary, const QColor &secondary, int excludeId = -1) const; diff --git a/player.o b/player.o index 81b854b..eca4cc6 100644 Binary files a/player.o and b/player.o differ diff --git a/qrc_shaders.cpp b/qrc_shaders.cpp index 87895e4..9238b1e 100644 --- a/qrc_shaders.cpp +++ b/qrc_shaders.cpp @@ -8,7 +8,7 @@ static const unsigned char qt_resource_data[] = { // /home/bart/project/tiletest/shaders/simple.frag - 0x0,0x0,0x2d,0xf1, + 0x0,0x0,0x31,0x19, 0x23, 0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x30,0x30,0xa,0x75,0x6e,0x69,0x66, 0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65, @@ -58,694 +58,744 @@ static const unsigned char qt_resource_data[] = { 0x20,0x20,0x2f,0x2f,0x20,0x55,0x6e,0x69,0x74,0x20,0x31,0x31,0x20,0x28,0x54,0x65, 0x78,0x74,0x75,0x72,0x65,0x6c,0x61,0x62,0x73,0x5f,0x46,0x6f,0x72,0x65,0x73,0x74, 0x5f,0x73,0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x20,0x77,0x6f,0x6f,0x64,0x6c,0x61, - 0x6e,0x64,0x20,0x66,0x6c,0x6f,0x6f,0x72,0x29,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f, - 0x72,0x6d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x74,0x69,0x6d,0x65,0x3b,0xa,0x75, - 0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x74,0x20,0x72,0x69,0x76,0x65,0x72, - 0x4d,0x61,0x73,0x6b,0x3b,0xa,0xa,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x20,0x69,0x6e, - 0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0xa,0x73, - 0x6d,0x6f,0x6f,0x74,0x68,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x57, - 0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x33, - 0x20,0x66,0x72,0x61,0x67,0x56,0x65,0x72,0x74,0x3b,0xa,0x69,0x6e,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f, - 0x72,0x6d,0x20,0x76,0x65,0x63,0x33,0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x50,0x6f, - 0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, - 0x20,0x6d,0x61,0x74,0x34,0x20,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72,0x69, - 0x78,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x69,0x6c,0x65,0x50, - 0x6f,0x73,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x66,0x72,0x61,0x67, - 0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x3b,0xa,0x6f,0x75,0x74,0x20,0x76,0x65, - 0x63,0x34,0x20,0x66,0x69,0x6e,0x61,0x6c,0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa,0xa, - 0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72, - 0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0xa,0x7b,0xa, - 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa, - 0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69, - 0x6f,0x6e,0x3b,0xa,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x41,0x6d, - 0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x3b,0xa, - 0x7d,0x3b,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x53,0x69,0x6d,0x70, - 0x6c,0x65,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67, - 0x68,0x74,0x20,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x3b,0xa,0xa,0x76,0x65, - 0x63,0x34,0x20,0x47,0x65,0x74,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61, - 0x6c,0x4c,0x69,0x67,0x68,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x53,0x69,0x6d,0x70, - 0x6c,0x65,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67, - 0x68,0x74,0x20,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x76,0x65,0x63, - 0x33,0x20,0x6e,0x6f,0x72,0x6d,0x29,0xa,0x7b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65, - 0x6e,0x73,0x69,0x74,0x79,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28, - 0x6e,0x6f,0x72,0x6d,0x2c,0x20,0x2d,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e, - 0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x20,0x30,0x2e,0x30, - 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x4d,0x75, - 0x6c,0x74,0x20,0x3d,0x20,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x66,0x41, - 0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20, - 0x2b,0x20,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73, - 0x69,0x74,0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x64,0x69,0x72, - 0x4c,0x69,0x67,0x68,0x74,0x2e,0x66,0x41,0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e, - 0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20,0x2a,0x20,0x30,0x2e,0x35,0x29,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x65,0x63,0x34,0x28, - 0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x20, - 0x2a,0x20,0x66,0x4d,0x75,0x6c,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x7d, - 0xa,0xa,0x76,0x65,0x63,0x34,0x20,0x47,0x65,0x74,0x53,0x70,0x65,0x63,0x75,0x6c, - 0x61,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x65,0x63,0x33,0x20,0x77,0x6f,0x72, - 0x6c,0x64,0x50,0x6f,0x73,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x50, - 0x6f,0x73,0x2c,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63,0x74, - 0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x20,0x64,0x4c,0x69,0x67,0x68, - 0x74,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x6e,0x6f,0x72,0x6d,0x2c,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x73,0x68,0x69,0x6e,0x69,0x6e,0x65,0x73,0x73,0x2c,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x20,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0xa, - 0x7b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x52,0x65,0x66,0x6c, - 0x65,0x63,0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f, - 0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28, - 0x64,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f, - 0x6e,0x2c,0x20,0x6e,0x6f,0x72,0x6d,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x33,0x20,0x76,0x56,0x65,0x72,0x74,0x65,0x78,0x54,0x6f,0x45,0x79,0x65, - 0x56,0x65,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69, - 0x7a,0x65,0x28,0x65,0x79,0x65,0x50,0x6f,0x73,0x20,0x2d,0x20,0x77,0x6f,0x72,0x6c, - 0x64,0x50,0x6f,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72, - 0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x76,0x56,0x65,0x72,0x74, - 0x65,0x78,0x54,0x6f,0x45,0x79,0x65,0x56,0x65,0x63,0x74,0x6f,0x72,0x2c,0x20,0x76, - 0x52,0x65,0x66,0x6c,0x65,0x63,0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x29, - 0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20, - 0x28,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72, - 0x20,0x3e,0x20,0x30,0x2e,0x30,0x29,0xa,0x20,0x20,0x20,0x20,0x7b,0xa,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46, - 0x61,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x70,0x6f,0x77,0x28,0x66,0x53,0x70,0x65, - 0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x2c,0x20,0x73,0x68,0x69, - 0x6e,0x69,0x6e,0x65,0x73,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x65,0x63,0x34,0x28,0x64,0x4c,0x69, - 0x67,0x68,0x74,0x2e,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x20,0x2a,0x20,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20,0x2a,0x20,0x66, - 0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e, - 0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x29,0x3b,0xa,0x7d,0xa,0xa,0x66, - 0x6c,0x6f,0x61,0x74,0x20,0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65, - 0x6e,0x74,0x28,0x76,0x65,0x63,0x32,0x20,0x70,0x2c,0x20,0x76,0x65,0x63,0x32,0x20, - 0x61,0x2c,0x20,0x76,0x65,0x63,0x32,0x20,0x62,0x29,0x20,0x7b,0xa,0x20,0x20,0x20, - 0x20,0x76,0x65,0x63,0x32,0x20,0x62,0x61,0x20,0x3d,0x20,0x62,0x20,0x2d,0x20,0x61, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x61,0x20,0x3d,0x20, - 0x70,0x20,0x2d,0x20,0x61,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x6c,0x32,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x62,0x61,0x2c,0x20,0x62,0x61, - 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x6c,0x32,0x20,0x3c,0x3d, - 0x20,0x31,0x65,0x2d,0x36,0x29,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x65, - 0x6e,0x67,0x74,0x68,0x28,0x70,0x61,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x68,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f, - 0x74,0x28,0x70,0x61,0x2c,0x20,0x62,0x61,0x29,0x20,0x2f,0x20,0x6c,0x32,0x2c,0x20, - 0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x72, - 0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x70,0x61,0x20, - 0x2d,0x20,0x62,0x61,0x20,0x2a,0x20,0x68,0x29,0x3b,0xa,0x7d,0xa,0xa,0x63,0x6f, - 0x6e,0x73,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49, - 0x44,0x50,0x4f,0x49,0x4e,0x54,0x53,0x5b,0x36,0x5d,0x20,0x3d,0x20,0x76,0x65,0x63, - 0x32,0x5b,0x36,0x5d,0x28,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x2d, - 0x30,0x2e,0x33,0x37,0x35,0x2c,0x20,0x20,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36, - 0x33,0x35,0x29,0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30, - 0x2e,0x30,0x2c,0x20,0x20,0x20,0x20,0x30,0x2e,0x34,0x33,0x33,0x30,0x31,0x32,0x37, - 0x30,0x29,0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e, + 0x6e,0x64,0x20,0x66,0x6c,0x6f,0x6f,0x72,0x29,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72, + 0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x46, + 0x61,0x72,0x6d,0x3b,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x55,0x6e,0x69,0x74,0x20, + 0x31,0x32,0x20,0x28,0x69,0x6d,0x61,0x67,0x65,0x73,0x2f,0x66,0x61,0x72,0x6d,0x2e, + 0x6a,0x70,0x65,0x67,0x29,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x69, + 0x6e,0x74,0x20,0x69,0x73,0x46,0x61,0x72,0x6d,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f, + 0x72,0x6d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x61,0x72,0x6d,0x54,0x65,0x78, + 0x74,0x75,0x72,0x65,0x53,0x63,0x61,0x6c,0x65,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f, + 0x72,0x6d,0x20,0x69,0x6e,0x74,0x20,0x66,0x61,0x72,0x6d,0x4d,0x61,0x70,0x70,0x69, + 0x6e,0x67,0x4d,0x6f,0x64,0x65,0x3b,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x74,0x69,0x6d,0x65,0x3b,0xa,0x75,0x6e,0x69, + 0x66,0x6f,0x72,0x6d,0x20,0x69,0x6e,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x4d,0x61, + 0x73,0x6b,0x3b,0xa,0xa,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x20,0x69,0x6e,0x20,0x76, + 0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0xa,0x73,0x6d,0x6f, + 0x6f,0x74,0x68,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x57,0x6f,0x72, + 0x6c,0x64,0x50,0x6f,0x73,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x66, + 0x72,0x61,0x67,0x56,0x65,0x72,0x74,0x3b,0xa,0x69,0x6e,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, + 0x20,0x76,0x65,0x63,0x33,0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x50,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x3b,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x6d, + 0x61,0x74,0x34,0x20,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72,0x69,0x78,0x3b, + 0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73, + 0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x66,0x72,0x61,0x67,0x54,0x65, + 0x78,0x43,0x6f,0x6f,0x72,0x64,0x3b,0xa,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34, + 0x20,0x66,0x69,0x6e,0x61,0x6c,0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa,0xa,0x73,0x74, + 0x72,0x75,0x63,0x74,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63, + 0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0xa,0x7b,0xa,0x20,0x20, + 0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa,0x20,0x20, + 0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e, + 0x3b,0xa,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x41,0x6d,0x62,0x69, + 0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x3b,0xa,0x7d,0x3b, + 0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65, + 0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74, + 0x20,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x3b,0xa,0xa,0x76,0x65,0x63,0x34, + 0x20,0x47,0x65,0x74,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c, + 0x69,0x67,0x68,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x53,0x69,0x6d,0x70,0x6c,0x65, + 0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74, + 0x20,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x76,0x65,0x63,0x33,0x20, + 0x6e,0x6f,0x72,0x6d,0x29,0xa,0x7b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73, + 0x69,0x74,0x79,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x6e,0x6f, + 0x72,0x6d,0x2c,0x20,0x2d,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x44, + 0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x4d,0x75,0x6c,0x74, + 0x20,0x3d,0x20,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x66,0x41,0x6d,0x62, + 0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20,0x2b,0x20, + 0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74, + 0x79,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x64,0x69,0x72,0x4c,0x69, + 0x67,0x68,0x74,0x2e,0x66,0x41,0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65, + 0x6e,0x73,0x69,0x74,0x79,0x20,0x2a,0x20,0x30,0x2e,0x35,0x29,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x65,0x63,0x34,0x28,0x64,0x69, + 0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20, + 0x66,0x4d,0x75,0x6c,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x7d,0xa,0xa, + 0x76,0x65,0x63,0x34,0x20,0x47,0x65,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72, + 0x43,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x65,0x63,0x33,0x20,0x77,0x6f,0x72,0x6c,0x64, + 0x50,0x6f,0x73,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x65,0x79,0x65,0x50,0x6f,0x73, + 0x2c,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f, + 0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x20,0x64,0x4c,0x69,0x67,0x68,0x74,0x2c, + 0x20,0x76,0x65,0x63,0x33,0x20,0x6e,0x6f,0x72,0x6d,0x2c,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x73,0x68,0x69,0x6e,0x69,0x6e,0x65,0x73,0x73,0x2c,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x20,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0xa,0x7b,0xa, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x52,0x65,0x66,0x6c,0x65,0x63, + 0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x69,0x7a,0x65,0x28,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x64,0x4c, + 0x69,0x67,0x68,0x74,0x2e,0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x2c, + 0x20,0x6e,0x6f,0x72,0x6d,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x33,0x20,0x76,0x56,0x65,0x72,0x74,0x65,0x78,0x54,0x6f,0x45,0x79,0x65,0x56,0x65, + 0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65, + 0x28,0x65,0x79,0x65,0x50,0x6f,0x73,0x20,0x2d,0x20,0x77,0x6f,0x72,0x6c,0x64,0x50, + 0x6f,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66, + 0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x20,0x3d, + 0x20,0x6d,0x61,0x78,0x28,0x64,0x6f,0x74,0x28,0x76,0x56,0x65,0x72,0x74,0x65,0x78, + 0x54,0x6f,0x45,0x79,0x65,0x56,0x65,0x63,0x74,0x6f,0x72,0x2c,0x20,0x76,0x52,0x65, + 0x66,0x6c,0x65,0x63,0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x29,0x2c,0x20, + 0x30,0x2e,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x66, + 0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x20,0x3e, + 0x20,0x30,0x2e,0x30,0x29,0xa,0x20,0x20,0x20,0x20,0x7b,0xa,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63, + 0x74,0x6f,0x72,0x20,0x3d,0x20,0x70,0x6f,0x77,0x28,0x66,0x53,0x70,0x65,0x63,0x75, + 0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x2c,0x20,0x73,0x68,0x69,0x6e,0x69, + 0x6e,0x65,0x73,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72, + 0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x65,0x63,0x34,0x28,0x64,0x4c,0x69,0x67,0x68, + 0x74,0x2e,0x76,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a, + 0x20,0x69,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20,0x2a,0x20,0x66,0x53,0x70, + 0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76, + 0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x29,0x3b,0xa,0x7d,0xa,0xa,0x66,0x6c,0x6f, + 0x61,0x74,0x20,0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74, + 0x28,0x76,0x65,0x63,0x32,0x20,0x70,0x2c,0x20,0x76,0x65,0x63,0x32,0x20,0x61,0x2c, + 0x20,0x76,0x65,0x63,0x32,0x20,0x62,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x76, + 0x65,0x63,0x32,0x20,0x62,0x61,0x20,0x3d,0x20,0x62,0x20,0x2d,0x20,0x61,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x61,0x20,0x3d,0x20,0x70,0x20, + 0x2d,0x20,0x61,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6c, + 0x32,0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x62,0x61,0x2c,0x20,0x62,0x61,0x29,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x6c,0x32,0x20,0x3c,0x3d,0x20,0x31, + 0x65,0x2d,0x36,0x29,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6c,0x65,0x6e,0x67, + 0x74,0x68,0x28,0x70,0x61,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x68,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28, + 0x70,0x61,0x2c,0x20,0x62,0x61,0x29,0x20,0x2f,0x20,0x6c,0x32,0x2c,0x20,0x30,0x2e, + 0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x72,0x65,0x74, + 0x75,0x72,0x6e,0x20,0x6c,0x65,0x6e,0x67,0x74,0x68,0x28,0x70,0x61,0x20,0x2d,0x20, + 0x62,0x61,0x20,0x2a,0x20,0x68,0x29,0x3b,0xa,0x7d,0xa,0xa,0x63,0x6f,0x6e,0x73, + 0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50, + 0x4f,0x49,0x4e,0x54,0x53,0x5b,0x36,0x5d,0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x5b, + 0x36,0x5d,0x28,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x2d,0x30,0x2e, 0x33,0x37,0x35,0x2c,0x20,0x20,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35, - 0x29,0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x33, - 0x37,0x35,0x2c,0x20,0x2d,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35,0x29, - 0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x30,0x2c, - 0x20,0x20,0x20,0x2d,0x30,0x2e,0x34,0x33,0x33,0x30,0x31,0x32,0x37,0x30,0x29,0x2c, - 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x2d,0x30,0x2e,0x33,0x37,0x35, - 0x2c,0x20,0x2d,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35,0x29,0xa,0x29, - 0x3b,0xa,0xa,0x66,0x6c,0x6f,0x61,0x74,0x20,0x67,0x65,0x74,0x52,0x69,0x76,0x65, - 0x72,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x28,0x76,0x65,0x63,0x32,0x20,0x70, - 0x2c,0x20,0x69,0x6e,0x74,0x20,0x6d,0x61,0x73,0x6b,0x29,0x20,0x7b,0xa,0x20,0x20, - 0x20,0x20,0x69,0x66,0x20,0x28,0x6d,0x61,0x73,0x6b,0x20,0x3d,0x3d,0x20,0x30,0x29, - 0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x39,0x39,0x39,0x2e,0x30,0x3b,0xa,0xa, - 0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x65,0x64,0x67,0x65,0x73,0x5b,0x36,0x5d, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x63,0x6f,0x75,0x6e,0x74,0x20, - 0x3d,0x20,0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e, - 0x74,0x20,0x65,0x20,0x3d,0x20,0x30,0x3b,0x20,0x65,0x20,0x3c,0x20,0x36,0x3b,0x20, - 0x2b,0x2b,0x65,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69, - 0x66,0x20,0x28,0x28,0x6d,0x61,0x73,0x6b,0x20,0x26,0x20,0x28,0x31,0x20,0x3c,0x3c, - 0x20,0x65,0x29,0x29,0x20,0x21,0x3d,0x20,0x30,0x29,0x20,0x7b,0xa,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x64,0x67,0x65,0x73,0x5b,0x63, - 0x6f,0x75,0x6e,0x74,0x5d,0x20,0x3d,0x20,0x65,0x3b,0xa,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x75,0x6e,0x74,0x2b,0x2b,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x7d,0xa, - 0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x63,0x6f,0x75,0x6e,0x74,0x20,0x3d, - 0x3d,0x20,0x32,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x32,0x20,0x70,0x30,0x20,0x3d,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49, - 0x44,0x50,0x4f,0x49,0x4e,0x54,0x53,0x5b,0x65,0x64,0x67,0x65,0x73,0x5b,0x30,0x5d, - 0x5d,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20, - 0x70,0x32,0x20,0x3d,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50,0x4f,0x49, - 0x4e,0x54,0x53,0x5b,0x65,0x64,0x67,0x65,0x73,0x5b,0x31,0x5d,0x5d,0x3b,0xa,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x30,0x20,0x3d, - 0x20,0x70,0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x32,0x20,0x73,0x31,0x20,0x3d,0x20,0x30,0x2e,0x35,0x36,0x32,0x35,0x20,0x2a,0x20, - 0x70,0x30,0x20,0x2b,0x20,0x30,0x2e,0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x32, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73, - 0x32,0x20,0x3d,0x20,0x30,0x2e,0x32,0x35,0x30,0x30,0x20,0x2a,0x20,0x70,0x30,0x20, - 0x2b,0x20,0x30,0x2e,0x32,0x35,0x30,0x30,0x20,0x2a,0x20,0x70,0x32,0x3b,0xa,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x33,0x20,0x3d, - 0x20,0x30,0x2e,0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x30,0x20,0x2b,0x20,0x30, - 0x2e,0x35,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x32,0x3b,0xa,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x34,0x20,0x3d,0x20,0x70,0x32, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, - 0x64,0x30,0x20,0x3d,0x20,0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65, - 0x6e,0x74,0x28,0x70,0x2c,0x20,0x73,0x30,0x2c,0x20,0x73,0x31,0x29,0x3b,0xa,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x31,0x20, - 0x3d,0x20,0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28, - 0x70,0x2c,0x20,0x73,0x31,0x2c,0x20,0x73,0x32,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x32,0x20,0x3d,0x20,0x64, - 0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c,0x20, - 0x73,0x32,0x2c,0x20,0x73,0x33,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x33,0x20,0x3d,0x20,0x64,0x69,0x73,0x74, - 0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c,0x20,0x73,0x33,0x2c, - 0x20,0x73,0x34,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65, - 0x74,0x75,0x72,0x6e,0x20,0x6d,0x69,0x6e,0x28,0x6d,0x69,0x6e,0x28,0x64,0x30,0x2c, - 0x20,0x64,0x31,0x29,0x2c,0x20,0x6d,0x69,0x6e,0x28,0x64,0x32,0x2c,0x20,0x64,0x33, - 0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b, - 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6d, - 0x69,0x6e,0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x39,0x39,0x39,0x2e,0x30,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74, - 0x20,0x69,0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x63,0x6f,0x75,0x6e, - 0x74,0x3b,0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x20,0x3d,0x20, + 0x29,0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x30, + 0x2c,0x20,0x20,0x20,0x20,0x30,0x2e,0x34,0x33,0x33,0x30,0x31,0x32,0x37,0x30,0x29, + 0x2c,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x33,0x37, + 0x35,0x2c,0x20,0x20,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35,0x29,0x2c, + 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x33,0x37,0x35, + 0x2c,0x20,0x2d,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35,0x29,0x2c,0xa, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x20,0x30,0x2e,0x30,0x2c,0x20,0x20, + 0x20,0x2d,0x30,0x2e,0x34,0x33,0x33,0x30,0x31,0x32,0x37,0x30,0x29,0x2c,0xa,0x20, + 0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x28,0x2d,0x30,0x2e,0x33,0x37,0x35,0x2c,0x20, + 0x2d,0x30,0x2e,0x32,0x31,0x36,0x35,0x30,0x36,0x33,0x35,0x29,0xa,0x29,0x3b,0xa, + 0xa,0x66,0x6c,0x6f,0x61,0x74,0x20,0x67,0x65,0x74,0x52,0x69,0x76,0x65,0x72,0x44, + 0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x28,0x76,0x65,0x63,0x32,0x20,0x70,0x2c,0x20, + 0x69,0x6e,0x74,0x20,0x6d,0x61,0x73,0x6b,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20, + 0x69,0x66,0x20,0x28,0x6d,0x61,0x73,0x6b,0x20,0x3d,0x3d,0x20,0x30,0x29,0x20,0x72, + 0x65,0x74,0x75,0x72,0x6e,0x20,0x39,0x39,0x39,0x2e,0x30,0x3b,0xa,0xa,0x20,0x20, + 0x20,0x20,0x69,0x6e,0x74,0x20,0x65,0x64,0x67,0x65,0x73,0x5b,0x36,0x5d,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x69,0x6e,0x74,0x20,0x63,0x6f,0x75,0x6e,0x74,0x20,0x3d,0x20, + 0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20, + 0x65,0x20,0x3d,0x20,0x30,0x3b,0x20,0x65,0x20,0x3c,0x20,0x36,0x3b,0x20,0x2b,0x2b, + 0x65,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20, + 0x28,0x28,0x6d,0x61,0x73,0x6b,0x20,0x26,0x20,0x28,0x31,0x20,0x3c,0x3c,0x20,0x65, + 0x29,0x29,0x20,0x21,0x3d,0x20,0x30,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x64,0x67,0x65,0x73,0x5b,0x63,0x6f,0x75, + 0x6e,0x74,0x5d,0x20,0x3d,0x20,0x65,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x75,0x6e,0x74,0x2b,0x2b,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0xa,0x20, + 0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x63,0x6f,0x75,0x6e,0x74,0x20,0x3d,0x3d,0x20, + 0x32,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x32,0x20,0x70,0x30,0x20,0x3d,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50, + 0x4f,0x49,0x4e,0x54,0x53,0x5b,0x65,0x64,0x67,0x65,0x73,0x5b,0x30,0x5d,0x5d,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x32, + 0x20,0x3d,0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50,0x4f,0x49,0x4e,0x54, + 0x53,0x5b,0x65,0x64,0x67,0x65,0x73,0x5b,0x31,0x5d,0x5d,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x30,0x20,0x3d,0x20,0x70, + 0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20, + 0x73,0x31,0x20,0x3d,0x20,0x30,0x2e,0x35,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x30, + 0x20,0x2b,0x20,0x30,0x2e,0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x32,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x32,0x20, + 0x3d,0x20,0x30,0x2e,0x32,0x35,0x30,0x30,0x20,0x2a,0x20,0x70,0x30,0x20,0x2b,0x20, + 0x30,0x2e,0x32,0x35,0x30,0x30,0x20,0x2a,0x20,0x70,0x32,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x33,0x20,0x3d,0x20,0x30, + 0x2e,0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x30,0x20,0x2b,0x20,0x30,0x2e,0x35, + 0x36,0x32,0x35,0x20,0x2a,0x20,0x70,0x32,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x73,0x34,0x20,0x3d,0x20,0x70,0x32,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x30, + 0x20,0x3d,0x20,0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74, + 0x28,0x70,0x2c,0x20,0x73,0x30,0x2c,0x20,0x73,0x31,0x29,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x31,0x20,0x3d,0x20, 0x64,0x69,0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c, - 0x20,0x45,0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50,0x4f,0x49,0x4e,0x54,0x53,0x5b, - 0x65,0x64,0x67,0x65,0x73,0x5b,0x69,0x5d,0x5d,0x2c,0x20,0x76,0x65,0x63,0x32,0x28, - 0x30,0x2e,0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x6d,0x69,0x6e,0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x6d,0x69,0x6e, - 0x28,0x6d,0x69,0x6e,0x44,0x69,0x73,0x74,0x2c,0x20,0x64,0x29,0x3b,0xa,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x69,0x6e,0x44,0x69,0x73,0x74,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x7d,0xa,0x7d,0xa,0xa,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61, - 0x69,0x6e,0x28,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, - 0x6e,0x6f,0x72,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65, - 0x28,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, - 0x2f,0x2f,0x20,0x31,0x2e,0x20,0x42,0x69,0x6f,0x6d,0x65,0x20,0x54,0x79,0x70,0x65, - 0x6d,0x61,0x70,0x20,0x53,0x61,0x6d,0x70,0x6c,0x69,0x6e,0x67,0xa,0x20,0x20,0x20, - 0x20,0x2f,0x2f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x20,0x65,0x78,0x74,0x65,0x6e,0x74, - 0x3a,0x20,0x5b,0x30,0x2e,0x2e,0x32,0x32,0x35,0x2e,0x30,0x20,0x6b,0x6d,0x2c,0x20, - 0x30,0x2e,0x2e,0x31,0x30,0x38,0x2e,0x32,0x32,0x20,0x6b,0x6d,0x5d,0xa,0x20,0x20, - 0x20,0x20,0x2f,0x2f,0x20,0x4e,0x6f,0x74,0x65,0x3a,0x20,0x51,0x49,0x6d,0x61,0x67, - 0x65,0x20,0x72,0x6f,0x77,0x20,0x30,0x20,0x69,0x73,0x20,0x4e,0x6f,0x72,0x74,0x68, - 0x20,0x28,0x77,0x6f,0x72,0x6c,0x64,0x59,0x20,0x3d,0x20,0x31,0x30,0x38,0x2e,0x32, - 0x32,0x29,0x2c,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x51,0x4f,0x70,0x65,0x6e,0x47, - 0x4c,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x6d,0x61,0x70,0x73,0x20,0x74,0x6f, - 0x20,0x76,0x20,0x3d,0x20,0x30,0x2e,0x30,0x2e,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f, - 0x20,0x49,0x6e,0x76,0x65,0x72,0x74,0x20,0x59,0x20,0x73,0x6f,0x20,0x4e,0x6f,0x72, - 0x74,0x68,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x73,0x20,0x72,0x6f,0x77,0x20,0x30, - 0x20,0x61,0x6e,0x64,0x20,0x53,0x6f,0x75,0x74,0x68,0x20,0x73,0x61,0x6d,0x70,0x6c, - 0x65,0x73,0x20,0x72,0x6f,0x77,0x20,0x31,0x34,0x39,0x39,0x2e,0xa,0x20,0x20,0x20, - 0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x54,0x79,0x70,0x65,0x20,0x3d,0x20,0x76, - 0x65,0x63,0x32,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64, - 0x50,0x6f,0x73,0x2e,0x78,0x20,0x2f,0x20,0x32,0x32,0x35,0x2e,0x30,0x2c,0x20,0x30, - 0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x31,0x2e,0x30,0x20,0x2d,0x20, - 0x63,0x6c,0x61,0x6d,0x70,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e, - 0x79,0x20,0x2f,0x20,0x31,0x30,0x38,0x2e,0x32,0x32,0x2c,0x20,0x30,0x2e,0x30,0x2c, - 0x20,0x31,0x2e,0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, - 0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x20,0x3d,0x20,0x74,0x65,0x78, - 0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x54,0x79,0x70,0x65,0x4d,0x61,0x70,0x2c, - 0x20,0x75,0x76,0x54,0x79,0x70,0x65,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f, - 0x2f,0x20,0x43,0x6f,0x6d,0x70,0x75,0x74,0x65,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68, - 0x20,0x62,0x69,0x6f,0x6d,0x65,0x20,0x77,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x66, - 0x72,0x6f,0x6d,0x20,0x74,0x79,0x70,0x65,0x6d,0x61,0x70,0x20,0x63,0x6f,0x6c,0x6f, - 0x72,0x73,0x3a,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x31,0x2e,0x20,0x50,0x72, - 0x61,0x69,0x72,0x69,0x65,0x3a,0x20,0x72,0x65,0x64,0x20,0x64,0x6f,0x6d,0x69,0x6e, - 0x61,0x6e,0x74,0x20,0x28,0x72,0x20,0x2d,0x20,0x67,0x29,0xa,0x20,0x20,0x20,0x20, - 0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69, - 0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x74,0x79,0x70, - 0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x20,0x2d,0x20,0x74,0x79,0x70,0x65,0x50, - 0x69,0x78,0x65,0x6c,0x2e,0x67,0x20,0x2d,0x20,0x30,0x2e,0x32,0x30,0x29,0x20,0x2f, - 0x20,0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x32,0x2e,0x20,0x53,0x61,0x68,0x61, - 0x72,0x61,0x3a,0x20,0x79,0x65,0x6c,0x6c,0x6f,0x77,0x20,0x28,0x72,0x20,0x26,0x20, - 0x67,0x20,0x68,0x69,0x67,0x68,0x2c,0x20,0x62,0x20,0x6c,0x6f,0x77,0x29,0xa,0x20, - 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x57, - 0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x6d, - 0x69,0x6e,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x2c,0x20, - 0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67,0x29,0x20,0x2d,0x20,0x30, - 0x2e,0x34,0x35,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30, - 0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20, - 0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x33,0x2e,0x20,0x46,0x6f,0x72,0x65,0x73,0x74, - 0x3a,0x20,0x65,0x6c,0x65,0x76,0x61,0x74,0x65,0x64,0x20,0x62,0x6c,0x75,0x65,0x20, - 0x77,0x69,0x74,0x68,0x20,0x6c,0x6f,0x77,0x20,0x72,0x65,0x64,0x20,0x28,0x62,0x20, - 0x3e,0x20,0x30,0x2e,0x31,0x35,0x2c,0x20,0x72,0x20,0x3c,0x20,0x30,0x2e,0x32,0x35, - 0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x6f,0x72,0x65, - 0x73,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70, - 0x28,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x20,0x2d,0x20, - 0x30,0x2e,0x31,0x35,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x30,0x2c,0x20,0x30,0x2e, - 0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28, - 0x28,0x30,0x2e,0x32,0x35,0x20,0x2d,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65, - 0x6c,0x2e,0x72,0x29,0x20,0x2f,0x20,0x30,0x2e,0x31,0x35,0x2c,0x20,0x30,0x2e,0x30, - 0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20, - 0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x20,0x2a, - 0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65, - 0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x34,0x2e, - 0x20,0x54,0x75,0x6e,0x64,0x72,0x61,0x3a,0x20,0x6d,0x75,0x74,0x65,0x64,0x20,0x73, - 0x6c,0x61,0x74,0x65,0x2f,0x6f,0x6c,0x69,0x76,0x65,0x20,0x28,0x6c,0x6f,0x77,0x20, - 0x73,0x61,0x74,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x6d,0x6f,0x64,0x65, - 0x72,0x61,0x74,0x65,0x2f,0x6c,0x6f,0x77,0x20,0x67,0x72,0x65,0x65,0x6e,0x29,0xa, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x61,0x74,0x20,0x3d,0x20, - 0x6d,0x61,0x78,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x2c, - 0x20,0x6d,0x61,0x78,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67, - 0x2c,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x29,0x29,0x20, - 0x2d,0x20,0x6d,0x69,0x6e,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e, - 0x72,0x2c,0x20,0x6d,0x69,0x6e,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c, - 0x2e,0x67,0x2c,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x29, - 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x74,0x75,0x6e, - 0x64,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d, - 0x70,0x28,0x28,0x30,0x2e,0x32,0x35,0x20,0x2d,0x20,0x73,0x61,0x74,0x29,0x20,0x2f, - 0x20,0x30,0x2e,0x31,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x20,0x2a,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x30,0x2e,0x35,0x35,0x20,0x2d, - 0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67,0x29,0x20,0x2f,0x20, - 0x30,0x2e,0x31,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20, - 0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65, - 0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d, - 0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x20,0x2a, - 0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x66,0x6f,0x72,0x65,0x73,0x74,0x57,0x65, - 0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x35,0x2e, - 0x20,0x47,0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64,0x3a,0x20,0x67,0x72,0x65,0x65, - 0x6e,0x20,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x20,0x6f,0x70,0x65,0x6e,0x20, - 0x70,0x6c,0x61,0x69,0x6e,0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x67,0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74, - 0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28, - 0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20, - 0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x66, - 0x6f,0x72,0x65,0x73,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x74,0x75, - 0x6e,0x64,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x2c,0x20,0x30,0x2e,0x30, - 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, - 0x32,0x2e,0x20,0x50,0x6f,0x6c,0x61,0x72,0x20,0x4c,0x61,0x74,0x69,0x74,0x75,0x64, - 0x65,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x20,0x28,0x57, - 0x6f,0x72,0x6c,0x64,0x20,0x59,0x20,0x69,0x6e,0x20,0x5b,0x30,0x2e,0x2e,0x31,0x30, - 0x38,0x2e,0x32,0x35,0x20,0x6b,0x6d,0x5d,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x6e,0x6f,0x72,0x6d,0x59,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d, - 0x70,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x79,0x20,0x2f,0x20, - 0x31,0x30,0x38,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30, - 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x69,0x73, - 0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x20,0x3d,0x20,0x61,0x62, - 0x73,0x28,0x6e,0x6f,0x72,0x6d,0x59,0x20,0x2d,0x20,0x30,0x2e,0x35,0x29,0x20,0x2a, - 0x20,0x32,0x2e,0x30,0x3b,0x20,0x2f,0x2f,0x20,0x30,0x2e,0x30,0x20,0x61,0x74,0x20, - 0x6d,0x69,0x64,0x64,0x6c,0x65,0x2c,0x20,0x31,0x2e,0x30,0x20,0x61,0x74,0x20,0x4e, - 0x6f,0x72,0x74,0x68,0x2f,0x53,0x6f,0x75,0x74,0x68,0x20,0x70,0x6f,0x6c,0x65,0x73, - 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x65,0x46, - 0x61,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74, - 0x65,0x70,0x28,0x30,0x2e,0x34,0x30,0x2c,0x20,0x30,0x2e,0x38,0x35,0x2c,0x20,0x64, - 0x69,0x73,0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b,0xa, - 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x6e,0x6f,0x77,0x6c,0x69,0x6e,0x65, - 0x20,0x69,0x6e,0x20,0x6b,0x69,0x6c,0x6f,0x6d,0x65,0x74,0x65,0x72,0x73,0x3a,0x20, - 0x32,0x2e,0x35,0x20,0x28,0x32,0x35,0x30,0x30,0x6d,0x29,0x20,0x69,0x6e,0x20,0x74, - 0x65,0x6d,0x70,0x65,0x72,0x61,0x74,0x65,0x20,0x7a,0x6f,0x6e,0x65,0x2c,0x20,0x64, - 0x72,0x6f,0x70,0x70,0x69,0x6e,0x67,0x20,0x74,0x6f,0x20,0x30,0x2e,0x30,0x20,0x28, - 0x73,0x65,0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0x29,0x20,0x61,0x74,0x20,0x70,0x6f, - 0x6c,0x65,0x73,0x21,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73, - 0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x32,0x2e, - 0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x70,0x6f,0x6c,0x65,0x46,0x61,0x63,0x74, - 0x6f,0x72,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x33,0x2e,0x20, - 0x57,0x61,0x74,0x65,0x72,0x20,0x76,0x73,0x20,0x4c,0x61,0x6e,0x64,0x20,0x64,0x65, - 0x74,0x65,0x63,0x74,0x69,0x6f,0x6e,0x20,0x28,0x7a,0x5f,0x70,0x6f,0x73,0x20,0x3d, - 0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x20,0x69,0x6e,0x20,0x6b,0x69,0x6c,0x6f,0x6d, - 0x65,0x74,0x65,0x72,0x73,0x2c,0x20,0x30,0x2e,0x30,0x20,0x3d,0x20,0x73,0x65,0x61, - 0x20,0x6c,0x65,0x76,0x65,0x6c,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x20,0x6f,0x63,0x65,0x61,0x6e,0x57,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x20, - 0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74, - 0x65,0x70,0x28,0x30,0x2e,0x30,0x30,0x35,0x2c,0x20,0x30,0x2e,0x30,0x32,0x35,0x2c, - 0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f, - 0x20,0x52,0x69,0x76,0x65,0x72,0x20,0x77,0x61,0x74,0x65,0x72,0x20,0x64,0x65,0x74, - 0x65,0x63,0x74,0x69,0x6f,0x6e,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x72,0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x67,0x65,0x74, - 0x52,0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x28,0x66,0x72, - 0x61,0x67,0x56,0x65,0x72,0x74,0x2e,0x78,0x79,0x2c,0x20,0x72,0x69,0x76,0x65,0x72, - 0x4d,0x61,0x73,0x6b,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75, - 0x73,0x20,0x3d,0x20,0x30,0x2e,0x30,0x32,0x34,0x3b,0xa,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x61,0x6e,0x6b,0x52,0x61, - 0x64,0x69,0x75,0x73,0x20,0x20,0x3d,0x20,0x30,0x2e,0x30,0x35,0x32,0x3b,0xa,0x20, - 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61, - 0x74,0x65,0x72,0x46,0x61,0x63,0x20,0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73, + 0x20,0x73,0x31,0x2c,0x20,0x73,0x32,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x32,0x20,0x3d,0x20,0x64,0x69,0x73, + 0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c,0x20,0x73,0x32, + 0x2c,0x20,0x73,0x33,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x20,0x64,0x33,0x20,0x3d,0x20,0x64,0x69,0x73,0x74,0x54,0x6f, + 0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c,0x20,0x73,0x33,0x2c,0x20,0x73, + 0x34,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75, + 0x72,0x6e,0x20,0x6d,0x69,0x6e,0x28,0x6d,0x69,0x6e,0x28,0x64,0x30,0x2c,0x20,0x64, + 0x31,0x29,0x2c,0x20,0x6d,0x69,0x6e,0x28,0x64,0x32,0x2c,0x20,0x64,0x33,0x29,0x29, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0xa,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6d,0x69,0x6e, + 0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x39,0x39,0x39,0x2e,0x30,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6f,0x72,0x20,0x28,0x69,0x6e,0x74,0x20,0x69, + 0x20,0x3d,0x20,0x30,0x3b,0x20,0x69,0x20,0x3c,0x20,0x63,0x6f,0x75,0x6e,0x74,0x3b, + 0x20,0x2b,0x2b,0x69,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x20,0x3d,0x20,0x64,0x69, + 0x73,0x74,0x54,0x6f,0x53,0x65,0x67,0x6d,0x65,0x6e,0x74,0x28,0x70,0x2c,0x20,0x45, + 0x44,0x47,0x45,0x5f,0x4d,0x49,0x44,0x50,0x4f,0x49,0x4e,0x54,0x53,0x5b,0x65,0x64, + 0x67,0x65,0x73,0x5b,0x69,0x5d,0x5d,0x2c,0x20,0x76,0x65,0x63,0x32,0x28,0x30,0x2e, + 0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x6d,0x69,0x6e,0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x6d,0x69,0x6e,0x28,0x6d, + 0x69,0x6e,0x44,0x69,0x73,0x74,0x2c,0x20,0x64,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65, + 0x74,0x75,0x72,0x6e,0x20,0x6d,0x69,0x6e,0x44,0x69,0x73,0x74,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x7d,0xa,0x7d,0xa,0xa,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e, + 0x28,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x6e,0x6f, + 0x72,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76, + 0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f, + 0x20,0x31,0x2e,0x20,0x42,0x69,0x6f,0x6d,0x65,0x20,0x54,0x79,0x70,0x65,0x6d,0x61, + 0x70,0x20,0x53,0x61,0x6d,0x70,0x6c,0x69,0x6e,0x67,0xa,0x20,0x20,0x20,0x20,0x2f, + 0x2f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x20,0x65,0x78,0x74,0x65,0x6e,0x74,0x3a,0x20, + 0x5b,0x30,0x2e,0x2e,0x32,0x32,0x35,0x2e,0x30,0x20,0x6b,0x6d,0x2c,0x20,0x30,0x2e, + 0x2e,0x31,0x30,0x38,0x2e,0x32,0x32,0x20,0x6b,0x6d,0x5d,0xa,0x20,0x20,0x20,0x20, + 0x2f,0x2f,0x20,0x4e,0x6f,0x74,0x65,0x3a,0x20,0x51,0x49,0x6d,0x61,0x67,0x65,0x20, + 0x72,0x6f,0x77,0x20,0x30,0x20,0x69,0x73,0x20,0x4e,0x6f,0x72,0x74,0x68,0x20,0x28, + 0x77,0x6f,0x72,0x6c,0x64,0x59,0x20,0x3d,0x20,0x31,0x30,0x38,0x2e,0x32,0x32,0x29, + 0x2c,0x20,0x77,0x68,0x69,0x63,0x68,0x20,0x51,0x4f,0x70,0x65,0x6e,0x47,0x4c,0x54, + 0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x6d,0x61,0x70,0x73,0x20,0x74,0x6f,0x20,0x76, + 0x20,0x3d,0x20,0x30,0x2e,0x30,0x2e,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x49, + 0x6e,0x76,0x65,0x72,0x74,0x20,0x59,0x20,0x73,0x6f,0x20,0x4e,0x6f,0x72,0x74,0x68, + 0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x73,0x20,0x72,0x6f,0x77,0x20,0x30,0x20,0x61, + 0x6e,0x64,0x20,0x53,0x6f,0x75,0x74,0x68,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x73, + 0x20,0x72,0x6f,0x77,0x20,0x31,0x34,0x39,0x39,0x2e,0xa,0x20,0x20,0x20,0x20,0x76, + 0x65,0x63,0x32,0x20,0x75,0x76,0x54,0x79,0x70,0x65,0x20,0x3d,0x20,0x76,0x65,0x63, + 0x32,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f, + 0x73,0x2e,0x78,0x20,0x2f,0x20,0x32,0x32,0x35,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30, + 0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x31,0x2e,0x30,0x20,0x2d,0x20,0x63,0x6c, + 0x61,0x6d,0x70,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x79,0x20, + 0x2f,0x20,0x31,0x30,0x38,0x2e,0x32,0x32,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31, + 0x2e,0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x74, + 0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75, + 0x72,0x65,0x28,0x74,0x65,0x78,0x54,0x79,0x70,0x65,0x4d,0x61,0x70,0x2c,0x20,0x75, + 0x76,0x54,0x79,0x70,0x65,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, + 0x43,0x6f,0x6d,0x70,0x75,0x74,0x65,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x20,0x62, + 0x69,0x6f,0x6d,0x65,0x20,0x77,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x66,0x72,0x6f, + 0x6d,0x20,0x74,0x79,0x70,0x65,0x6d,0x61,0x70,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x73, + 0x3a,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x31,0x2e,0x20,0x50,0x72,0x61,0x69, + 0x72,0x69,0x65,0x3a,0x20,0x72,0x65,0x64,0x20,0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e, + 0x74,0x20,0x28,0x72,0x20,0x2d,0x20,0x67,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68, + 0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x74,0x79,0x70,0x65,0x50, + 0x69,0x78,0x65,0x6c,0x2e,0x72,0x20,0x2d,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78, + 0x65,0x6c,0x2e,0x67,0x20,0x2d,0x20,0x30,0x2e,0x32,0x30,0x29,0x20,0x2f,0x20,0x30, + 0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x32,0x2e,0x20,0x53,0x61,0x68,0x61,0x72,0x61, + 0x3a,0x20,0x79,0x65,0x6c,0x6c,0x6f,0x77,0x20,0x28,0x72,0x20,0x26,0x20,0x67,0x20, + 0x68,0x69,0x67,0x68,0x2c,0x20,0x62,0x20,0x6c,0x6f,0x77,0x29,0xa,0x20,0x20,0x20, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69, + 0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x6d,0x69,0x6e, + 0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x2c,0x20,0x74,0x79, + 0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67,0x29,0x20,0x2d,0x20,0x30,0x2e,0x34, + 0x35,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20, + 0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x70,0x72, + 0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x33,0x2e,0x20,0x46,0x6f,0x72,0x65,0x73,0x74,0x3a,0x20, + 0x65,0x6c,0x65,0x76,0x61,0x74,0x65,0x64,0x20,0x62,0x6c,0x75,0x65,0x20,0x77,0x69, + 0x74,0x68,0x20,0x6c,0x6f,0x77,0x20,0x72,0x65,0x64,0x20,0x28,0x62,0x20,0x3e,0x20, + 0x30,0x2e,0x31,0x35,0x2c,0x20,0x72,0x20,0x3c,0x20,0x30,0x2e,0x32,0x35,0x29,0xa, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x6f,0x72,0x65,0x73,0x74, + 0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28, + 0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x20,0x2d,0x20,0x30,0x2e, + 0x31,0x35,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c, + 0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x30, + 0x2e,0x32,0x35,0x20,0x2d,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e, + 0x72,0x29,0x20,0x2f,0x20,0x30,0x2e,0x31,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20, + 0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x70,0x72, + 0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x20,0x2a,0x20,0x28, + 0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67, + 0x68,0x74,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x34,0x2e,0x20,0x54, + 0x75,0x6e,0x64,0x72,0x61,0x3a,0x20,0x6d,0x75,0x74,0x65,0x64,0x20,0x73,0x6c,0x61, + 0x74,0x65,0x2f,0x6f,0x6c,0x69,0x76,0x65,0x20,0x28,0x6c,0x6f,0x77,0x20,0x73,0x61, + 0x74,0x75,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x6d,0x6f,0x64,0x65,0x72,0x61, + 0x74,0x65,0x2f,0x6c,0x6f,0x77,0x20,0x67,0x72,0x65,0x65,0x6e,0x29,0xa,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x61,0x74,0x20,0x3d,0x20,0x6d,0x61, + 0x78,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x2c,0x20,0x6d, + 0x61,0x78,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67,0x2c,0x20, + 0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x29,0x29,0x20,0x2d,0x20, + 0x6d,0x69,0x6e,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x72,0x2c, + 0x20,0x6d,0x69,0x6e,0x28,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67, + 0x2c,0x20,0x74,0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x62,0x29,0x29,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x74,0x75,0x6e,0x64,0x72, + 0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28, + 0x28,0x30,0x2e,0x32,0x35,0x20,0x2d,0x20,0x73,0x61,0x74,0x29,0x20,0x2f,0x20,0x30, + 0x2e,0x31,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a, + 0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x30,0x2e,0x35,0x35,0x20,0x2d,0x20,0x74, + 0x79,0x70,0x65,0x50,0x69,0x78,0x65,0x6c,0x2e,0x67,0x29,0x20,0x2f,0x20,0x30,0x2e, + 0x31,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20, + 0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65, + 0x69,0x67,0x68,0x74,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73, + 0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x20,0x2a,0x20,0x28, + 0x31,0x2e,0x30,0x20,0x2d,0x20,0x66,0x6f,0x72,0x65,0x73,0x74,0x57,0x65,0x69,0x67, + 0x68,0x74,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x35,0x2e,0x20,0x47, + 0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64,0x3a,0x20,0x67,0x72,0x65,0x65,0x6e,0x20, + 0x64,0x6f,0x6d,0x69,0x6e,0x61,0x6e,0x74,0x20,0x6f,0x70,0x65,0x6e,0x20,0x70,0x6c, + 0x61,0x69,0x6e,0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x67, + 0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d, + 0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x28,0x70,0x72, + 0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x73,0x61, + 0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x66,0x6f,0x72, + 0x65,0x73,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x2b,0x20,0x74,0x75,0x6e,0x64, + 0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20, + 0x31,0x2e,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x32,0x2e, + 0x20,0x50,0x6f,0x6c,0x61,0x72,0x20,0x4c,0x61,0x74,0x69,0x74,0x75,0x64,0x65,0x20, + 0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x69,0x6f,0x6e,0x20,0x28,0x57,0x6f,0x72, + 0x6c,0x64,0x20,0x59,0x20,0x69,0x6e,0x20,0x5b,0x30,0x2e,0x2e,0x31,0x30,0x38,0x2e, + 0x32,0x35,0x20,0x6b,0x6d,0x5d,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x6e,0x6f,0x72,0x6d,0x59,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28, + 0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x79,0x20,0x2f,0x20,0x31,0x30, + 0x38,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x69,0x73,0x74,0x46, + 0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x20,0x3d,0x20,0x61,0x62,0x73,0x28, + 0x6e,0x6f,0x72,0x6d,0x59,0x20,0x2d,0x20,0x30,0x2e,0x35,0x29,0x20,0x2a,0x20,0x32, + 0x2e,0x30,0x3b,0x20,0x2f,0x2f,0x20,0x30,0x2e,0x30,0x20,0x61,0x74,0x20,0x6d,0x69, + 0x64,0x64,0x6c,0x65,0x2c,0x20,0x31,0x2e,0x30,0x20,0x61,0x74,0x20,0x4e,0x6f,0x72, + 0x74,0x68,0x2f,0x53,0x6f,0x75,0x74,0x68,0x20,0x70,0x6f,0x6c,0x65,0x73,0xa,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x65,0x46,0x61,0x63, + 0x74,0x6f,0x72,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70, + 0x28,0x30,0x2e,0x34,0x30,0x2c,0x20,0x30,0x2e,0x38,0x35,0x2c,0x20,0x64,0x69,0x73, + 0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b,0xa,0xa,0x20, + 0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x6e,0x6f,0x77,0x6c,0x69,0x6e,0x65,0x20,0x69, + 0x6e,0x20,0x6b,0x69,0x6c,0x6f,0x6d,0x65,0x74,0x65,0x72,0x73,0x3a,0x20,0x32,0x2e, + 0x35,0x20,0x28,0x32,0x35,0x30,0x30,0x6d,0x29,0x20,0x69,0x6e,0x20,0x74,0x65,0x6d, + 0x70,0x65,0x72,0x61,0x74,0x65,0x20,0x7a,0x6f,0x6e,0x65,0x2c,0x20,0x64,0x72,0x6f, + 0x70,0x70,0x69,0x6e,0x67,0x20,0x74,0x6f,0x20,0x30,0x2e,0x30,0x20,0x28,0x73,0x65, + 0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0x29,0x20,0x61,0x74,0x20,0x70,0x6f,0x6c,0x65, + 0x73,0x21,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x6e,0x6f, + 0x77,0x4c,0x69,0x6e,0x65,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x32,0x2e,0x35,0x2c, + 0x20,0x30,0x2e,0x30,0x2c,0x20,0x70,0x6f,0x6c,0x65,0x46,0x61,0x63,0x74,0x6f,0x72, + 0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x33,0x2e,0x20,0x57,0x61, + 0x74,0x65,0x72,0x20,0x76,0x73,0x20,0x4c,0x61,0x6e,0x64,0x20,0x64,0x65,0x74,0x65, + 0x63,0x74,0x69,0x6f,0x6e,0x20,0x28,0x7a,0x5f,0x70,0x6f,0x73,0x20,0x3d,0x20,0x68, + 0x65,0x69,0x67,0x68,0x74,0x20,0x69,0x6e,0x20,0x6b,0x69,0x6c,0x6f,0x6d,0x65,0x74, + 0x65,0x72,0x73,0x2c,0x20,0x30,0x2e,0x30,0x20,0x3d,0x20,0x73,0x65,0x61,0x20,0x6c, + 0x65,0x76,0x65,0x6c,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, + 0x6f,0x63,0x65,0x61,0x6e,0x57,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x20,0x3d,0x20, + 0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70, + 0x28,0x30,0x2e,0x30,0x30,0x35,0x2c,0x20,0x30,0x2e,0x30,0x32,0x35,0x2c,0x20,0x7a, + 0x5f,0x70,0x6f,0x73,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52, + 0x69,0x76,0x65,0x72,0x20,0x77,0x61,0x74,0x65,0x72,0x20,0x64,0x65,0x74,0x65,0x63, + 0x74,0x69,0x6f,0x6e,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72, + 0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x20,0x3d,0x20,0x67,0x65,0x74,0x52,0x69, + 0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x28,0x66,0x72,0x61,0x67, + 0x56,0x65,0x72,0x74,0x2e,0x78,0x79,0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x4d,0x61, + 0x73,0x6b,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72, + 0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x20, + 0x3d,0x20,0x30,0x2e,0x30,0x32,0x34,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x61,0x6e,0x6b,0x52,0x61,0x64,0x69, + 0x75,0x73,0x20,0x20,0x3d,0x20,0x30,0x2e,0x30,0x35,0x32,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65, + 0x72,0x46,0x61,0x63,0x20,0x3d,0x20,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x6d,0x6f, + 0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74, + 0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x20,0x2a,0x20,0x30,0x2e,0x37,0x2c,0x20, + 0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73, + 0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x29,0x3b,0xa,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x61,0x6e, + 0x6b,0x46,0x61,0x63,0x20,0x20,0x3d,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73, 0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x72,0x69,0x76,0x65,0x72,0x57, - 0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x20,0x2a,0x20,0x30,0x2e,0x37, - 0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69, - 0x75,0x73,0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x29,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x42, - 0x61,0x6e,0x6b,0x46,0x61,0x63,0x20,0x20,0x3d,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d, - 0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x72,0x69,0x76,0x65, - 0x72,0x57,0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x2c,0x20,0x72,0x69, - 0x76,0x65,0x72,0x42,0x61,0x6e,0x6b,0x52,0x61,0x64,0x69,0x75,0x73,0x2c,0x20,0x72, - 0x69,0x76,0x65,0x72,0x44,0x69,0x73,0x74,0x29,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e, - 0x30,0x20,0x2d,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x46,0x61, - 0x63,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x43,0x6f,0x6d,0x62, - 0x69,0x6e,0x65,0x64,0x20,0x77,0x61,0x74,0x65,0x72,0x20,0x66,0x61,0x63,0x74,0x6f, - 0x72,0x20,0x28,0x6f,0x63,0x65,0x61,0x6e,0x20,0x6f,0x72,0x20,0x72,0x69,0x76,0x65, - 0x72,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x77,0x61,0x74, - 0x65,0x72,0x46,0x61,0x63,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x6f,0x63,0x65,0x61, - 0x6e,0x57,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x2c,0x20,0x72,0x69,0x76,0x65,0x72, - 0x57,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, - 0x2f,0x2f,0x20,0x34,0x2e,0x20,0x44,0x79,0x6e,0x61,0x6d,0x69,0x63,0x20,0x61,0x6e, - 0x69,0x6d,0x61,0x74,0x65,0x64,0x20,0x6f,0x63,0x65,0x61,0x6e,0x20,0x77,0x61,0x74, - 0x65,0x72,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x57,0x31, - 0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x78,0x79,0x20, - 0x2a,0x20,0x30,0x2e,0x33,0x30,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x69, - 0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x33,0x35,0x2c,0x20,0x74,0x69,0x6d,0x65, - 0x20,0x2a,0x20,0x30,0x2e,0x30,0x32,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x32,0x20,0x75,0x76,0x57,0x32,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c, - 0x64,0x50,0x6f,0x73,0x2e,0x78,0x79,0x20,0x2a,0x20,0x30,0x2e,0x33,0x38,0x20,0x2b, - 0x20,0x76,0x65,0x63,0x32,0x28,0x2d,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e, - 0x30,0x32,0x35,0x2c,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x33, - 0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x77,0x61, - 0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x31,0x20,0x3d,0x20,0x76,0x65,0x63, - 0x32,0x28,0x73,0x69,0x6e,0x28,0x75,0x76,0x57,0x31,0x2e,0x79,0x20,0x2a,0x20,0x31, - 0x34,0x2e,0x30,0x20,0x2b,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x32,0x2e,0x32, - 0x29,0x2c,0x20,0x63,0x6f,0x73,0x28,0x75,0x76,0x57,0x31,0x2e,0x78,0x20,0x2a,0x20, - 0x31,0x34,0x2e,0x30,0x20,0x2b,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x31,0x2e, - 0x38,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x30,0x32,0x35,0x3b,0xa,0x20,0x20,0x20, - 0x20,0x76,0x65,0x63,0x32,0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72, - 0x74,0x32,0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28,0x63,0x6f,0x73,0x28,0x75,0x76, - 0x57,0x32,0x2e,0x79,0x20,0x2a,0x20,0x31,0x38,0x2e,0x30,0x20,0x2d,0x20,0x74,0x69, - 0x6d,0x65,0x20,0x2a,0x20,0x31,0x2e,0x35,0x29,0x2c,0x20,0x73,0x69,0x6e,0x28,0x75, - 0x76,0x57,0x32,0x2e,0x78,0x20,0x2a,0x20,0x31,0x38,0x2e,0x30,0x20,0x2d,0x20,0x74, - 0x69,0x6d,0x65,0x20,0x2a,0x20,0x32,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e, - 0x30,0x32,0x30,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x77, - 0x53,0x61,0x6d,0x70,0x6c,0x65,0x31,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72, - 0x65,0x28,0x74,0x65,0x78,0x57,0x61,0x74,0x65,0x72,0x2c,0x20,0x75,0x76,0x57,0x31, - 0x20,0x2b,0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x31,0x29, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x77,0x53,0x61,0x6d,0x70, - 0x6c,0x65,0x32,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65, - 0x78,0x57,0x61,0x74,0x65,0x72,0x2c,0x20,0x75,0x76,0x57,0x32,0x20,0x2b,0x20,0x77, - 0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x32,0x29,0x3b,0xa,0x20,0x20, - 0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f, - 0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x77,0x53,0x61,0x6d,0x70,0x6c,0x65,0x31, - 0x2c,0x20,0x77,0x53,0x61,0x6d,0x70,0x6c,0x65,0x32,0x2c,0x20,0x30,0x2e,0x35,0x29, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72, - 0x2e,0x72,0x67,0x62,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x77,0x61,0x74,0x65,0x72, - 0x43,0x6f,0x6c,0x6f,0x72,0x2e,0x72,0x67,0x62,0x2c,0x20,0x76,0x65,0x63,0x33,0x28, - 0x30,0x2e,0x30,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x2c,0x20,0x30,0x2e,0x35,0x30, - 0x29,0x2c,0x20,0x30,0x2e,0x33,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x33,0x20,0x77,0x61,0x74,0x65,0x72,0x4e,0x6f,0x72,0x6d,0x20,0x3d,0x20, - 0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x65,0x63,0x33,0x28,0xa, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x77,0x61,0x76,0x65,0x44,0x69,0x73, - 0x74,0x6f,0x72,0x74,0x31,0x2e,0x78,0x20,0x2b,0x20,0x77,0x61,0x76,0x65,0x44,0x69, - 0x73,0x74,0x6f,0x72,0x74,0x32,0x2e,0x78,0x29,0x20,0x2a,0x20,0x32,0x2e,0x35,0x2c, - 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x77,0x61,0x76,0x65,0x44,0x69, - 0x73,0x74,0x6f,0x72,0x74,0x31,0x2e,0x79,0x20,0x2b,0x20,0x77,0x61,0x76,0x65,0x44, - 0x69,0x73,0x74,0x6f,0x72,0x74,0x32,0x2e,0x79,0x29,0x20,0x2a,0x20,0x32,0x2e,0x35, - 0x2c,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x2e,0x30,0xa,0x20,0x20, - 0x20,0x20,0x29,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x35,0x2e, - 0x20,0x54,0x72,0x69,0x70,0x6c,0x61,0x6e,0x61,0x72,0x20,0x6d,0x61,0x70,0x70,0x69, - 0x6e,0x67,0x20,0x63,0x6f,0x6f,0x72,0x64,0x69,0x6e,0x61,0x74,0x65,0x73,0x20,0x66, - 0x6f,0x72,0x20,0x4c,0x61,0x6e,0x64,0x2c,0x20,0x43,0x6c,0x69,0x66,0x66,0x73,0x20, - 0x26,0x20,0x53,0x6e,0x6f,0x77,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, - 0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x3d,0x20,0x70, - 0x6f,0x77,0x28,0x61,0x62,0x73,0x28,0x6e,0x6f,0x72,0x6d,0x29,0x2c,0x20,0x76,0x65, - 0x63,0x33,0x28,0x34,0x2e,0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x62,0x6c, - 0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x2f,0x3d,0x20,0x28,0x62, - 0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x78,0x20,0x2b,0x20, - 0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79,0x20,0x2b, - 0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x29, - 0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x58,0x20, - 0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x79,0x7a,0x20,0x2a, - 0x20,0x30,0x2e,0x33,0x35,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20, - 0x75,0x76,0x59,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e, - 0x78,0x7a,0x20,0x2a,0x20,0x30,0x2e,0x33,0x35,0x3b,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x32,0x20,0x75,0x76,0x5a,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64, - 0x50,0x6f,0x73,0x2e,0x78,0x79,0x20,0x2a,0x20,0x30,0x2e,0x33,0x35,0x3b,0xa,0xa, - 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x52,0x6f,0x63,0x6b,0x20,0x74,0x65,0x78,0x74, - 0x75,0x72,0x65,0x73,0x3a,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x47,0x72,0x61, - 0x79,0x20,0x72,0x6f,0x63,0x6b,0x20,0x28,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x6c, - 0x61,0x62,0x73,0x5f,0x53,0x74,0x6f,0x6e,0x65,0x5f,0x31,0x33,0x36,0x58,0x4c,0x5f, - 0x73,0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76,0x65, - 0x63,0x34,0x20,0x72,0x6f,0x63,0x6b,0x47,0x72,0x61,0x79,0x20,0x3d,0x20,0x74,0x65, - 0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75, + 0x61,0x74,0x65,0x72,0x52,0x61,0x64,0x69,0x75,0x73,0x2c,0x20,0x72,0x69,0x76,0x65, + 0x72,0x42,0x61,0x6e,0x6b,0x52,0x61,0x64,0x69,0x75,0x73,0x2c,0x20,0x72,0x69,0x76, + 0x65,0x72,0x44,0x69,0x73,0x74,0x29,0x29,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20, + 0x2d,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29, + 0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x43,0x6f,0x6d,0x62,0x69,0x6e, + 0x65,0x64,0x20,0x77,0x61,0x74,0x65,0x72,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x20, + 0x28,0x6f,0x63,0x65,0x61,0x6e,0x20,0x6f,0x72,0x20,0x72,0x69,0x76,0x65,0x72,0x29, + 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x77,0x61,0x74,0x65,0x72, + 0x46,0x61,0x63,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x6f,0x63,0x65,0x61,0x6e,0x57, + 0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x57,0x61, + 0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f, + 0x20,0x34,0x2e,0x20,0x44,0x79,0x6e,0x61,0x6d,0x69,0x63,0x20,0x61,0x6e,0x69,0x6d, + 0x61,0x74,0x65,0x64,0x20,0x6f,0x63,0x65,0x61,0x6e,0x20,0x77,0x61,0x74,0x65,0x72, + 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x57,0x31,0x20,0x3d, + 0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x78,0x79,0x20,0x2a,0x20, + 0x30,0x2e,0x33,0x30,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x69,0x6d,0x65, + 0x20,0x2a,0x20,0x30,0x2e,0x30,0x33,0x35,0x2c,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a, + 0x20,0x30,0x2e,0x30,0x32,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x32,0x20,0x75,0x76,0x57,0x32,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50, + 0x6f,0x73,0x2e,0x78,0x79,0x20,0x2a,0x20,0x30,0x2e,0x33,0x38,0x20,0x2b,0x20,0x76, + 0x65,0x63,0x32,0x28,0x2d,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x32, + 0x35,0x2c,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x33,0x30,0x29, + 0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x77,0x61,0x76,0x65, + 0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28, + 0x73,0x69,0x6e,0x28,0x75,0x76,0x57,0x31,0x2e,0x79,0x20,0x2a,0x20,0x31,0x34,0x2e, + 0x30,0x20,0x2b,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x32,0x2e,0x32,0x29,0x2c, + 0x20,0x63,0x6f,0x73,0x28,0x75,0x76,0x57,0x31,0x2e,0x78,0x20,0x2a,0x20,0x31,0x34, + 0x2e,0x30,0x20,0x2b,0x20,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x31,0x2e,0x38,0x29, + 0x29,0x20,0x2a,0x20,0x30,0x2e,0x30,0x32,0x35,0x3b,0xa,0x20,0x20,0x20,0x20,0x76, + 0x65,0x63,0x32,0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x32, + 0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28,0x63,0x6f,0x73,0x28,0x75,0x76,0x57,0x32, + 0x2e,0x79,0x20,0x2a,0x20,0x31,0x38,0x2e,0x30,0x20,0x2d,0x20,0x74,0x69,0x6d,0x65, + 0x20,0x2a,0x20,0x31,0x2e,0x35,0x29,0x2c,0x20,0x73,0x69,0x6e,0x28,0x75,0x76,0x57, + 0x32,0x2e,0x78,0x20,0x2a,0x20,0x31,0x38,0x2e,0x30,0x20,0x2d,0x20,0x74,0x69,0x6d, + 0x65,0x20,0x2a,0x20,0x32,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x30,0x32, + 0x30,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x77,0x53,0x61, + 0x6d,0x70,0x6c,0x65,0x31,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28, + 0x74,0x65,0x78,0x57,0x61,0x74,0x65,0x72,0x2c,0x20,0x75,0x76,0x57,0x31,0x20,0x2b, + 0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x31,0x29,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x77,0x53,0x61,0x6d,0x70,0x6c,0x65, + 0x32,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x57, + 0x61,0x74,0x65,0x72,0x2c,0x20,0x75,0x76,0x57,0x32,0x20,0x2b,0x20,0x77,0x61,0x76, + 0x65,0x44,0x69,0x73,0x74,0x6f,0x72,0x74,0x32,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, + 0x76,0x65,0x63,0x34,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x20, + 0x3d,0x20,0x6d,0x69,0x78,0x28,0x77,0x53,0x61,0x6d,0x70,0x6c,0x65,0x31,0x2c,0x20, + 0x77,0x53,0x61,0x6d,0x70,0x6c,0x65,0x32,0x2c,0x20,0x30,0x2e,0x35,0x29,0x3b,0xa, + 0x20,0x20,0x20,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x2e,0x72, + 0x67,0x62,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x77,0x61,0x74,0x65,0x72,0x43,0x6f, + 0x6c,0x6f,0x72,0x2e,0x72,0x67,0x62,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e, + 0x30,0x35,0x2c,0x20,0x30,0x2e,0x33,0x30,0x2c,0x20,0x30,0x2e,0x35,0x30,0x29,0x2c, + 0x20,0x30,0x2e,0x33,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x33,0x20,0x77,0x61,0x74,0x65,0x72,0x4e,0x6f,0x72,0x6d,0x20,0x3d,0x20,0x6e,0x6f, + 0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x65,0x63,0x33,0x28,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74,0x6f, + 0x72,0x74,0x31,0x2e,0x78,0x20,0x2b,0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74, + 0x6f,0x72,0x74,0x32,0x2e,0x78,0x29,0x20,0x2a,0x20,0x32,0x2e,0x35,0x2c,0xa,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x77,0x61,0x76,0x65,0x44,0x69,0x73,0x74, + 0x6f,0x72,0x74,0x31,0x2e,0x79,0x20,0x2b,0x20,0x77,0x61,0x76,0x65,0x44,0x69,0x73, + 0x74,0x6f,0x72,0x74,0x32,0x2e,0x79,0x29,0x20,0x2a,0x20,0x32,0x2e,0x35,0x2c,0xa, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x2e,0x30,0xa,0x20,0x20,0x20,0x20, + 0x29,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x35,0x2e,0x20,0x54, + 0x72,0x69,0x70,0x6c,0x61,0x6e,0x61,0x72,0x20,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67, + 0x20,0x63,0x6f,0x6f,0x72,0x64,0x69,0x6e,0x61,0x74,0x65,0x73,0x20,0x66,0x6f,0x72, + 0x20,0x4c,0x61,0x6e,0x64,0x2c,0x20,0x43,0x6c,0x69,0x66,0x66,0x73,0x20,0x26,0x20, + 0x53,0x6e,0x6f,0x77,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x62,0x6c, + 0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x3d,0x20,0x70,0x6f,0x77, + 0x28,0x61,0x62,0x73,0x28,0x6e,0x6f,0x72,0x6d,0x29,0x2c,0x20,0x76,0x65,0x63,0x33, + 0x28,0x34,0x2e,0x30,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x62,0x6c,0x65,0x6e, + 0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x20,0x2f,0x3d,0x20,0x28,0x62,0x6c,0x65, + 0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x78,0x20,0x2b,0x20,0x62,0x6c, + 0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79,0x20,0x2b,0x20,0x62, + 0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x29,0x3b,0xa, + 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x58,0x20,0x3d,0x20, + 0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x79,0x7a,0x20,0x2a,0x20,0x30, + 0x2e,0x33,0x35,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76, + 0x59,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x78,0x7a, + 0x20,0x2a,0x20,0x30,0x2e,0x33,0x35,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x32,0x20,0x75,0x76,0x5a,0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f, + 0x73,0x2e,0x78,0x79,0x20,0x2a,0x20,0x30,0x2e,0x33,0x35,0x3b,0xa,0xa,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x52,0x6f,0x63,0x6b,0x20,0x74,0x65,0x78,0x74,0x75,0x72, + 0x65,0x73,0x3a,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x47,0x72,0x61,0x79,0x20, + 0x72,0x6f,0x63,0x6b,0x20,0x28,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x6c,0x61,0x62, + 0x73,0x5f,0x53,0x74,0x6f,0x6e,0x65,0x5f,0x31,0x33,0x36,0x58,0x4c,0x5f,0x73,0x65, + 0x61,0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, + 0x20,0x72,0x6f,0x63,0x6b,0x47,0x72,0x61,0x79,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x58, + 0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73, + 0x2e,0x78,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74, + 0x65,0x78,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x59,0x29,0x20,0x2a,0x20,0x62, + 0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x6f,0x63, + 0x6b,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57, + 0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f, + 0x2f,0x20,0x52,0x65,0x64,0x20,0x72,0x6f,0x63,0x6b,0x20,0x63,0x61,0x6e,0x79,0x6f, + 0x6e,0x20,0x63,0x6c,0x69,0x66,0x66,0x20,0x28,0x54,0x65,0x78,0x74,0x75,0x72,0x65, + 0x6c,0x61,0x62,0x73,0x5f,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x5f,0x73,0x65,0x61, + 0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x72,0x6f,0x63,0x6b,0x52,0x65,0x64,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72, + 0x65,0x28,0x74,0x65,0x78,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76, + 0x58,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74, + 0x73,0x2e,0x78,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74, + 0x65,0x78,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x59,0x29,0x20, + 0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52, + 0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a,0x20,0x62, + 0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b,0xa,0xa, + 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x43,0x6c,0x69,0x66,0x66,0x20,0x72,0x6f,0x63, + 0x6b,0x3a,0x20,0x72,0x65,0x64,0x20,0x73,0x61,0x6e,0x64,0x73,0x74,0x6f,0x6e,0x65, + 0x20,0x69,0x6e,0x20,0x50,0x72,0x61,0x69,0x72,0x69,0x65,0x20,0x63,0x61,0x6e,0x79, + 0x6f,0x6e,0x2c,0x20,0x67,0x72,0x61,0x79,0x20,0x61,0x6c,0x70,0x69,0x6e,0x65,0x20, + 0x65,0x6c,0x73,0x65,0x77,0x68,0x65,0x72,0x65,0xa,0x20,0x20,0x20,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6c,0x69,0x66,0x66,0x52,0x6f,0x63,0x6b,0x43,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x72,0x6f,0x63,0x6b,0x47,0x72,0x61,0x79, + 0x2c,0x20,0x72,0x6f,0x63,0x6b,0x52,0x65,0x64,0x2c,0x20,0x70,0x72,0x61,0x69,0x72, + 0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, + 0x2f,0x2f,0x20,0x53,0x6e,0x6f,0x77,0x20,0x2f,0x20,0x49,0x63,0x65,0x20,0x74,0x65, + 0x78,0x74,0x75,0x72,0x65,0x20,0x28,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x6c,0x61, + 0x62,0x73,0x5f,0x57,0x61,0x74,0x65,0x72,0x5f,0x31,0x35,0x35,0x58,0x4c,0x5f,0x73, + 0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x34,0x20,0x73,0x6e,0x6f,0x77,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65, + 0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x6e,0x6f,0x77,0x2c,0x20,0x75, 0x76,0x58,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68, 0x74,0x73,0x2e,0x78,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65, - 0x28,0x74,0x65,0x78,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x59,0x29,0x20,0x2a, - 0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79,0xa, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52, - 0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e, - 0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b,0xa,0xa,0x20,0x20,0x20, - 0x20,0x2f,0x2f,0x20,0x52,0x65,0x64,0x20,0x72,0x6f,0x63,0x6b,0x20,0x63,0x61,0x6e, - 0x79,0x6f,0x6e,0x20,0x63,0x6c,0x69,0x66,0x66,0x20,0x28,0x54,0x65,0x78,0x74,0x75, - 0x72,0x65,0x6c,0x61,0x62,0x73,0x5f,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x5f,0x73, - 0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x34,0x20,0x72,0x6f,0x63,0x6b,0x52,0x65,0x64,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, - 0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20, - 0x75,0x76,0x58,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67, - 0x68,0x74,0x73,0x2e,0x78,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65, - 0x28,0x74,0x65,0x78,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x59, - 0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73, - 0x2e,0x79,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72, + 0x65,0x28,0x74,0x65,0x78,0x53,0x6e,0x6f,0x77,0x2c,0x20,0x75,0x76,0x59,0x29,0x20, + 0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x79, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65, - 0x78,0x52,0x65,0x64,0x52,0x6f,0x63,0x6b,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a, - 0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b, - 0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x43,0x6c,0x69,0x66,0x66,0x20,0x72, - 0x6f,0x63,0x6b,0x3a,0x20,0x72,0x65,0x64,0x20,0x73,0x61,0x6e,0x64,0x73,0x74,0x6f, - 0x6e,0x65,0x20,0x69,0x6e,0x20,0x50,0x72,0x61,0x69,0x72,0x69,0x65,0x20,0x63,0x61, - 0x6e,0x79,0x6f,0x6e,0x2c,0x20,0x67,0x72,0x61,0x79,0x20,0x61,0x6c,0x70,0x69,0x6e, - 0x65,0x20,0x65,0x6c,0x73,0x65,0x77,0x68,0x65,0x72,0x65,0xa,0x20,0x20,0x20,0x20, - 0x76,0x65,0x63,0x34,0x20,0x63,0x6c,0x69,0x66,0x66,0x52,0x6f,0x63,0x6b,0x43,0x6f, - 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x72,0x6f,0x63,0x6b,0x47,0x72, - 0x61,0x79,0x2c,0x20,0x72,0x6f,0x63,0x6b,0x52,0x65,0x64,0x2c,0x20,0x70,0x72,0x61, - 0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0xa,0x20,0x20, - 0x20,0x20,0x2f,0x2f,0x20,0x53,0x6e,0x6f,0x77,0x20,0x2f,0x20,0x49,0x63,0x65,0x20, - 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x28,0x54,0x65,0x78,0x74,0x75,0x72,0x65, - 0x6c,0x61,0x62,0x73,0x5f,0x57,0x61,0x74,0x65,0x72,0x5f,0x31,0x35,0x35,0x58,0x4c, - 0x5f,0x73,0x65,0x61,0x6d,0x6c,0x65,0x73,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x34,0x20,0x73,0x6e,0x6f,0x77,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, - 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x6e,0x6f,0x77,0x2c, - 0x20,0x75,0x76,0x58,0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69, - 0x67,0x68,0x74,0x73,0x2e,0x78,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74, - 0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x6e,0x6f,0x77,0x2c,0x20,0x75,0x76,0x59, - 0x29,0x20,0x2a,0x20,0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73, - 0x2e,0x79,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28, - 0x74,0x65,0x78,0x53,0x6e,0x6f,0x77,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a,0x20, - 0x62,0x6c,0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b,0xa, - 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x47,0x72,0x6f,0x75,0x6e,0x64,0x20,0x74, - 0x65,0x78,0x74,0x75,0x72,0x65,0x73,0x3a,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x34,0x20,0x67,0x72,0x61,0x73,0x73,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x20,0x3d, - 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x47,0x72,0x61,0x73, - 0x73,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x34,0x20,0x66,0x6f,0x72,0x65,0x73,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x3d, - 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x46,0x6f,0x72,0x65, - 0x73,0x74,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65, - 0x63,0x34,0x20,0x62,0x65,0x61,0x63,0x68,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x20, - 0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x61,0x6e, - 0x64,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, - 0x34,0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x3d, - 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x61,0x68,0x61, - 0x72,0x61,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65, - 0x63,0x34,0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20, - 0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x54,0x75,0x6e, - 0x64,0x72,0x61,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76, - 0x65,0x63,0x34,0x20,0x72,0x65,0x64,0x53,0x61,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72, - 0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x65, - 0x64,0x53,0x61,0x6e,0x64,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0xa,0x20,0x20, - 0x20,0x20,0x2f,0x2f,0x20,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x65,0x20,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x61,0x63, - 0x72,0x6f,0x73,0x73,0x20,0x61,0x6c,0x6c,0x20,0x62,0x69,0x6f,0x6d,0x65,0x73,0x3a, - 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x62,0x69,0x6f,0x6d,0x65,0x47, - 0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x67,0x72,0x61,0x73,0x73,0x43,0x6f,0x6c, - 0x6f,0x72,0x20,0x20,0x20,0x2a,0x20,0x67,0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64, - 0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x66,0x6f, - 0x72,0x65,0x73,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x2a,0x20,0x66,0x6f,0x72, - 0x65,0x73,0x74,0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b, - 0x20,0x73,0x61,0x68,0x61,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x2a,0x20, - 0x73,0x61,0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20, + 0x78,0x53,0x6e,0x6f,0x77,0x2c,0x20,0x75,0x76,0x5a,0x29,0x20,0x2a,0x20,0x62,0x6c, + 0x65,0x6e,0x64,0x57,0x65,0x69,0x67,0x68,0x74,0x73,0x2e,0x7a,0x3b,0xa,0xa,0x20, + 0x20,0x20,0x20,0x2f,0x2f,0x20,0x47,0x72,0x6f,0x75,0x6e,0x64,0x20,0x74,0x65,0x78, + 0x74,0x75,0x72,0x65,0x73,0x3a,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x67,0x72,0x61,0x73,0x73,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x20,0x3d,0x20,0x74, + 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x47,0x72,0x61,0x73,0x73,0x2c, + 0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x66,0x6f,0x72,0x65,0x73,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x3d,0x20,0x74, + 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x46,0x6f,0x72,0x65,0x73,0x74, + 0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, + 0x20,0x62,0x65,0x61,0x63,0x68,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x20,0x3d,0x20, + 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x61,0x6e,0x64,0x2c, + 0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x73,0x61,0x68,0x61,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x3d,0x20,0x74, + 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x53,0x61,0x68,0x61,0x72,0x61, + 0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34, + 0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x3d,0x20, + 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x54,0x75,0x6e,0x64,0x72, + 0x61,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x34,0x20,0x72,0x65,0x64,0x53,0x61,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d, + 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x52,0x65,0x64,0x53, + 0x61,0x6e,0x64,0x2c,0x20,0x75,0x76,0x5a,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, + 0x2f,0x2f,0x20,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x65,0x20,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20,0x61,0x63,0x72,0x6f, + 0x73,0x73,0x20,0x61,0x6c,0x6c,0x20,0x62,0x69,0x6f,0x6d,0x65,0x73,0x3a,0xa,0x20, + 0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x62,0x69,0x6f,0x6d,0x65,0x47,0x72,0x6f, + 0x75,0x6e,0x64,0x20,0x3d,0x20,0x67,0x72,0x61,0x73,0x73,0x43,0x6f,0x6c,0x6f,0x72, + 0x20,0x20,0x20,0x2a,0x20,0x67,0x72,0x61,0x73,0x73,0x6c,0x61,0x6e,0x64,0x57,0x65, + 0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x66,0x6f,0x72,0x65, + 0x73,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x2a,0x20,0x66,0x6f,0x72,0x65,0x73, + 0x74,0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x73, + 0x61,0x68,0x61,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x2a,0x20,0x73,0x61, + 0x68,0x61,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x2b,0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20, - 0x20,0x2a,0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0xa, + 0x2b,0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x20,0x2a, + 0x20,0x74,0x75,0x6e,0x64,0x72,0x61,0x57,0x65,0x69,0x67,0x68,0x74,0xa,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x2b,0x20,0x72,0x65,0x64,0x53,0x61,0x6e,0x64,0x43,0x6f, - 0x6c,0x6f,0x72,0x20,0x2a,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69, - 0x67,0x68,0x74,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x68,0x6f, - 0x72,0x65,0x6c,0x69,0x6e,0x65,0x20,0x62,0x65,0x61,0x63,0x68,0x3a,0x20,0x77,0x68, - 0x65,0x72,0x65,0x20,0x67,0x65,0x6e,0x74,0x6c,0x65,0x20,0x73,0x6c,0x6f,0x70,0x65, - 0x73,0x20,0x6d,0x65,0x65,0x74,0x20,0x77,0x61,0x74,0x65,0x72,0x20,0x28,0x73,0x65, - 0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0x20,0x75,0x70,0x20,0x74,0x6f,0x20,0x7e,0x31, - 0x31,0x30,0x6d,0x2c,0x20,0x6f,0x72,0x20,0x61,0x6c,0x6f,0x6e,0x67,0x20,0x72,0x69, - 0x76,0x65,0x72,0x73,0x29,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x74,0x65, - 0x65,0x70,0x20,0x73,0x6c,0x6f,0x70,0x65,0x73,0x20,0x28,0x6e,0x6f,0x72,0x6d,0x2e, - 0x7a,0x20,0x3c,0x20,0x30,0x2e,0x35,0x35,0x29,0x20,0x72,0x65,0x6d,0x61,0x69,0x6e, - 0x20,0x72,0x6f,0x63,0x6b,0x79,0x20,0x63,0x6c,0x69,0x66,0x66,0x73,0x3b,0x20,0x67, - 0x65,0x6e,0x74,0x6c,0x65,0x20,0x73,0x6c,0x6f,0x70,0x65,0x73,0x20,0x28,0x6e,0x6f, - 0x72,0x6d,0x2e,0x7a,0x20,0x3e,0x20,0x30,0x2e,0x38,0x30,0x29,0x20,0x67,0x65,0x74, - 0x20,0x61,0x20,0x73,0x61,0x6e,0x64,0x79,0x20,0x62,0x65,0x61,0x63,0x68,0xa,0x20, - 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x67,0x65,0x6e,0x74,0x6c,0x65,0x53, - 0x6c,0x6f,0x70,0x65,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65, - 0x70,0x28,0x30,0x2e,0x35,0x35,0x2c,0x20,0x30,0x2e,0x38,0x35,0x2c,0x20,0x6e,0x6f, - 0x72,0x6d,0x2e,0x7a,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x63,0x6f,0x61,0x73,0x74,0x42,0x65,0x61,0x63,0x68,0x20,0x3d,0x20,0x28,0x31, - 0x2e,0x30,0x20,0x2d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28, - 0x30,0x2e,0x30,0x31,0x35,0x2c,0x20,0x30,0x2e,0x31,0x31,0x30,0x2c,0x20,0x7a,0x5f, - 0x70,0x6f,0x73,0x29,0x29,0x20,0x2a,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74, - 0x65,0x70,0x28,0x30,0x2e,0x30,0x30,0x33,0x2c,0x20,0x30,0x2e,0x30,0x31,0x35,0x2c, - 0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x20,0x2a,0x20,0x67,0x65,0x6e,0x74,0x6c,0x65, - 0x53,0x6c,0x6f,0x70,0x65,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, - 0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x65,0x61,0x63,0x68,0x20,0x3d,0x20,0x72,0x69, - 0x76,0x65,0x72,0x42,0x61,0x6e,0x6b,0x46,0x61,0x63,0x3b,0xa,0x20,0x20,0x20,0x20, - 0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x65,0x61,0x63,0x68,0x46,0x61,0x63,0x20,0x3d, - 0x20,0x6d,0x61,0x78,0x28,0x63,0x6f,0x61,0x73,0x74,0x42,0x65,0x61,0x63,0x68,0x2c, - 0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x65,0x61,0x63,0x68,0x29,0x3b,0xa,0xa,0x20, - 0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x75,0x70,0x70,0x72,0x65,0x73,0x73,0x20,0x62, - 0x65,0x61,0x63,0x68,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x61,0x74,0x20,0x74,0x68,0x65, - 0x20,0x65,0x78,0x74,0x72,0x65,0x6d,0x65,0x20,0x70,0x6f,0x6c,0x61,0x72,0x20,0x69, - 0x63,0x65,0x20,0x73,0x68,0x65,0x65,0x74,0x20,0x65,0x64,0x67,0x65,0x73,0xa,0x20, - 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x61,0x72,0x49,0x63, - 0x65,0x43,0x6f,0x76,0x65,0x72,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73, - 0x74,0x65,0x70,0x28,0x30,0x2e,0x38,0x32,0x2c,0x20,0x30,0x2e,0x39,0x36,0x2c,0x20, - 0x64,0x69,0x73,0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b, - 0xa,0x20,0x20,0x20,0x20,0x62,0x65,0x61,0x63,0x68,0x46,0x61,0x63,0x20,0x2a,0x3d, - 0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x70,0x6f,0x6c,0x61,0x72,0x49,0x63,0x65, - 0x43,0x6f,0x76,0x65,0x72,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, - 0x41,0x70,0x70,0x6c,0x79,0x20,0x73,0x61,0x6e,0x64,0x79,0x20,0x62,0x65,0x61,0x63, - 0x68,0x20,0x61,0x63,0x72,0x6f,0x73,0x73,0x20,0x61,0x6c,0x6c,0x20,0x6c,0x61,0x6e, - 0x64,0x20,0x74,0x79,0x70,0x65,0x73,0x20,0x67,0x65,0x6e,0x74,0x6c,0x79,0x20,0x6d, - 0x65,0x65,0x74,0x69,0x6e,0x67,0x20,0x77,0x61,0x74,0x65,0x72,0xa,0x20,0x20,0x20, - 0x20,0x62,0x69,0x6f,0x6d,0x65,0x47,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x6d, - 0x69,0x78,0x28,0x62,0x69,0x6f,0x6d,0x65,0x47,0x72,0x6f,0x75,0x6e,0x64,0x2c,0x20, - 0x62,0x65,0x61,0x63,0x68,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x62,0x65,0x61,0x63, - 0x68,0x46,0x61,0x63,0x20,0x2a,0x20,0x30,0x2e,0x39,0x30,0x29,0x3b,0xa,0xa,0x20, - 0x20,0x20,0x20,0x2f,0x2f,0x20,0x50,0x6f,0x6c,0x61,0x72,0x20,0x70,0x61,0x63,0x6b, - 0x20,0x69,0x63,0x65,0x20,0x6f,0x6e,0x20,0x63,0x6f,0x6c,0x64,0x20,0x70,0x6f,0x6c, - 0x61,0x72,0x20,0x77,0x61,0x74,0x65,0x72,0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x61,0x72,0x53,0x65,0x61,0x49,0x63,0x65,0x20, - 0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x37, - 0x32,0x2c,0x20,0x30,0x2e,0x39,0x34,0x2c,0x20,0x64,0x69,0x73,0x74,0x46,0x72,0x6f, - 0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x77,0x61, - 0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x77, - 0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x43, - 0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x70,0x6f,0x6c,0x61,0x72,0x53,0x65,0x61,0x49,0x63, - 0x65,0x20,0x2a,0x20,0x30,0x2e,0x39,0x35,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, - 0x2f,0x2f,0x20,0x36,0x2e,0x20,0x53,0x6c,0x6f,0x70,0x65,0x20,0x26,0x20,0x45,0x6c, - 0x65,0x76,0x61,0x74,0x69,0x6f,0x6e,0x20,0x42,0x6c,0x65,0x6e,0x64,0x69,0x6e,0x67, - 0x20,0x52,0x75,0x6c,0x65,0x73,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x6e,0x6f, - 0x72,0x6d,0x2e,0x7a,0x3a,0x20,0x31,0x2e,0x30,0x20,0x3d,0x20,0x66,0x6c,0x61,0x74, - 0x20,0x68,0x6f,0x72,0x69,0x7a,0x6f,0x6e,0x74,0x61,0x6c,0x20,0x67,0x72,0x6f,0x75, - 0x6e,0x64,0x2c,0x20,0x3c,0x20,0x30,0x2e,0x35,0x35,0x20,0x3d,0x20,0x73,0x74,0x65, - 0x65,0x70,0x20,0x73,0x6c,0x6f,0x70,0x65,0x20,0x2f,0x20,0x76,0x65,0x72,0x74,0x69, - 0x63,0x61,0x6c,0x20,0x63,0x6c,0x69,0x66,0x66,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x66,0x6c,0x61,0x74,0x6e,0x65,0x73,0x73,0x20,0x3d,0x20,0x63, - 0x6c,0x61,0x6d,0x70,0x28,0x28,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x20,0x2d,0x20,0x30, - 0x2e,0x35,0x35,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30, - 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, - 0x4d,0x6f,0x75,0x6e,0x74,0x61,0x69,0x6e,0x20,0x72,0x6f,0x63,0x6b,0x20,0x65,0x6c, - 0x65,0x76,0x61,0x74,0x69,0x6f,0x6e,0x20,0x66,0x61,0x63,0x74,0x6f,0x72,0x3a,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x73,0x20,0x61,0x74,0x20,0x31,0x30,0x30,0x30,0x6d,0x20, - 0x28,0x31,0x2e,0x30,0x20,0x6b,0x6d,0x29,0x2c,0x20,0x72,0x61,0x6d,0x70,0x73,0x20, - 0x75,0x70,0x20,0x74,0x6f,0x77,0x61,0x72,0x64,0x73,0x20,0x32,0x32,0x30,0x30,0x6d, - 0x20,0x28,0x32,0x2e,0x32,0x20,0x6b,0x6d,0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x72,0x6f,0x63,0x6b,0x4c,0x69,0x6e,0x65,0x20,0x3d,0x20,0x6d, - 0x69,0x78,0x28,0x31,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x70,0x6f,0x6c, - 0x65,0x46,0x61,0x63,0x74,0x6f,0x72,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, - 0x6f,0x61,0x74,0x20,0x6d,0x6f,0x75,0x6e,0x74,0x61,0x69,0x6e,0x41,0x6c,0x74,0x69, - 0x74,0x75,0x64,0x65,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65, - 0x70,0x28,0x72,0x6f,0x63,0x6b,0x4c,0x69,0x6e,0x65,0x2c,0x20,0x6d,0x69,0x6e,0x28, - 0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65,0x2c,0x20,0x72,0x6f,0x63,0x6b,0x4c,0x69, - 0x6e,0x65,0x20,0x2b,0x20,0x31,0x2e,0x32,0x29,0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73, - 0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x74,0x65,0x65,0x70, - 0x20,0x73,0x6c,0x6f,0x70,0x65,0x73,0x20,0x61,0x72,0x65,0x20,0x61,0x6c,0x77,0x61, - 0x79,0x73,0x20,0x72,0x6f,0x63,0x6b,0x3b,0x20,0x66,0x6c,0x61,0x74,0x20,0x67,0x72, - 0x6f,0x75,0x6e,0x64,0x20,0x62,0x65,0x63,0x6f,0x6d,0x65,0x73,0x20,0x72,0x6f,0x63, - 0x6b,0x20,0x61,0x73,0x20,0x61,0x6c,0x74,0x69,0x74,0x75,0x64,0x65,0x20,0x72,0x69, - 0x73,0x65,0x73,0x20,0x61,0x62,0x6f,0x76,0x65,0x20,0x31,0x30,0x30,0x30,0x6d,0xa, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x6f,0x63,0x6b,0x57,0x65, - 0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x31,0x2e,0x30,0x20,0x2d, - 0x20,0x66,0x6c,0x61,0x74,0x6e,0x65,0x73,0x73,0x2c,0x20,0x6d,0x6f,0x75,0x6e,0x74, - 0x61,0x69,0x6e,0x41,0x6c,0x74,0x69,0x74,0x75,0x64,0x65,0x29,0x3b,0xa,0xa,0x20, - 0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x6e,0x6f,0x77,0x20,0x72,0x75,0x6c,0x65,0x3a, - 0x20,0x73,0x74,0x61,0x72,0x74,0x73,0x20,0x61,0x62,0x6f,0x76,0x65,0x20,0x32,0x35, - 0x30,0x30,0x6d,0x20,0x69,0x6e,0x20,0x74,0x65,0x6d,0x70,0x65,0x72,0x61,0x74,0x65, - 0x20,0x7a,0x6f,0x6e,0x65,0x2c,0x20,0x64,0x72,0x6f,0x70,0x70,0x69,0x6e,0x67,0x20, - 0x74,0x6f,0x20,0x73,0x65,0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0x20,0x61,0x74,0x20, - 0x70,0x6f,0x6c,0x65,0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, - 0x73,0x6e,0x6f,0x77,0x48,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x73,0x6d,0x6f, - 0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65, - 0x20,0x2d,0x20,0x30,0x2e,0x32,0x30,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e, - 0x65,0x20,0x2b,0x20,0x30,0x2e,0x33,0x30,0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29, - 0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x6e,0x6f,0x77, - 0x53,0x6c,0x6f,0x70,0x65,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x6e, - 0x6f,0x72,0x6d,0x2e,0x7a,0x20,0x2d,0x20,0x30,0x2e,0x32,0x38,0x29,0x20,0x2f,0x20, - 0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b, - 0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x6e,0x6f,0x77,0x57, - 0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x73,0x6e,0x6f,0x77,0x48,0x65,0x69,0x67, - 0x68,0x74,0x20,0x2a,0x20,0x73,0x6e,0x6f,0x77,0x53,0x6c,0x6f,0x70,0x65,0x3b,0xa, - 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x41,0x74,0x20,0x70,0x6f,0x6c,0x61,0x72, - 0x20,0x63,0x61,0x70,0x73,0x2c,0x20,0x69,0x63,0x65,0x20,0x63,0x6f,0x76,0x65,0x72, - 0x73,0x20,0x66,0x6c,0x61,0x74,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x74, - 0x20,0x73,0x65,0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0xa,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x61,0x72,0x4c,0x61,0x6e,0x64,0x49,0x63, - 0x65,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30, - 0x2e,0x37,0x32,0x2c,0x20,0x30,0x2e,0x39,0x32,0x2c,0x20,0x64,0x69,0x73,0x74,0x46, - 0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, - 0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x6d,0x61,0x78, - 0x28,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x2c,0x20,0x70,0x6f,0x6c, - 0x61,0x72,0x4c,0x61,0x6e,0x64,0x49,0x63,0x65,0x20,0x2a,0x20,0x73,0x6e,0x6f,0x77, - 0x53,0x6c,0x6f,0x70,0x65,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, - 0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x65,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64, - 0x3a,0x20,0x62,0x69,0x6f,0x6d,0x65,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x2d, - 0x3e,0x20,0x6d,0x6f,0x75,0x6e,0x74,0x61,0x69,0x6e,0x20,0x72,0x6f,0x63,0x6b,0x20, - 0x61,0x62,0x6f,0x76,0x65,0x20,0x31,0x30,0x30,0x30,0x6d,0x20,0x26,0x20,0x6f,0x6e, - 0x20,0x63,0x6c,0x69,0x66,0x66,0x73,0x20,0x2d,0x3e,0x20,0x73,0x6e,0x6f,0x77,0x20, - 0x61,0x62,0x6f,0x76,0x65,0x20,0x32,0x35,0x30,0x30,0x6d,0xa,0x20,0x20,0x20,0x20, - 0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x6e,0x53,0x6e,0x6f,0x77,0x4c,0x61,0x6e,0x64, - 0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x62,0x69,0x6f,0x6d,0x65,0x47,0x72,0x6f,0x75, - 0x6e,0x64,0x2c,0x20,0x63,0x6c,0x69,0x66,0x66,0x52,0x6f,0x63,0x6b,0x43,0x6f,0x6c, - 0x6f,0x72,0x2c,0x20,0x72,0x6f,0x63,0x6b,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b, - 0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x6c,0x61,0x6e,0x64,0x43,0x6f, - 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x6e,0x6f,0x6e,0x53,0x6e,0x6f, - 0x77,0x4c,0x61,0x6e,0x64,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x43,0x6f,0x6c,0x6f,0x72, - 0x2c,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0xa, - 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x37,0x2e,0x20,0x43,0x6f,0x6d,0x62,0x69,0x6e, - 0x65,0x20,0x4c,0x61,0x6e,0x64,0x20,0x61,0x6e,0x64,0x20,0x53,0x65,0x61,0xa,0x20, - 0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x43, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x6c,0x61,0x6e,0x64,0x43, - 0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72, - 0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0xa,0x20,0x20, - 0x20,0x20,0x2f,0x2f,0x20,0x38,0x2e,0x20,0x48,0x65,0x78,0x61,0x67,0x6f,0x6e,0x20, - 0x67,0x72,0x69,0x64,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x20,0x6f,0x75,0x74,0x6c, - 0x69,0x6e,0x65,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x62,0x63,0x6f, - 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65, - 0x78,0x42,0x6f,0x72,0x64,0x65,0x72,0x2c,0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x69, - 0x6c,0x65,0x50,0x6f,0x73,0x2e,0x78,0x2c,0x20,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73, - 0x2e,0x79,0x20,0x2a,0x20,0x31,0x2e,0x31,0x35,0x34,0x37,0x33,0x34,0x34,0x31,0x31, - 0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x6f, - 0x72,0x64,0x65,0x72,0x41,0x6c,0x70,0x68,0x61,0x20,0x3d,0x20,0x62,0x63,0x6f,0x6c, - 0x6f,0x72,0x2e,0x61,0x20,0x2a,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x77,0x61, - 0x74,0x65,0x72,0x46,0x61,0x63,0x20,0x2a,0x20,0x30,0x2e,0x37,0x29,0x3b,0xa,0xa, - 0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x39,0x2e,0x20,0x4c,0x69,0x67,0x68,0x74,0x69, - 0x6e,0x67,0x20,0x26,0x20,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x20,0x67,0x6c, - 0x69,0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x61,0x63,0x74, - 0x69,0x76,0x65,0x4e,0x6f,0x72,0x6d,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x6e,0x6f, - 0x72,0x6d,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x4e,0x6f,0x72,0x6d,0x2c,0x20,0x77, - 0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65, - 0x63,0x34,0x20,0x6c,0x69,0x67,0x68,0x74,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x20, - 0x3d,0x20,0x47,0x65,0x74,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c, - 0x4c,0x69,0x67,0x68,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x73,0x75,0x6e,0x4c,0x69, - 0x67,0x68,0x74,0x2c,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x4e,0x6f,0x72,0x6d,0x29, - 0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x70,0x65,0x63,0x75,0x6c, - 0x61,0x72,0x3a,0x20,0x63,0x72,0x69,0x73,0x70,0x20,0x73,0x70,0x61,0x72,0x6b,0x6c, - 0x65,0x20,0x6f,0x6e,0x20,0x73,0x6e,0x6f,0x77,0x20,0x61,0x6e,0x64,0x20,0x77,0x61, - 0x74,0x65,0x72,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x70, - 0x65,0x63,0x53,0x68,0x69,0x6e,0x69,0x6e,0x65,0x73,0x73,0x20,0x3d,0x20,0x6d,0x69, - 0x78,0x28,0x6d,0x69,0x78,0x28,0x31,0x36,0x2e,0x30,0x2c,0x20,0x33,0x32,0x2e,0x30, - 0x2c,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x2c,0x20,0x34, - 0x38,0x2e,0x30,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa, - 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x70,0x65,0x63,0x49,0x6e, - 0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x6d,0x69, - 0x78,0x28,0x30,0x2e,0x31,0x32,0x2c,0x20,0x30,0x2e,0x35,0x35,0x2c,0x20,0x73,0x6e, - 0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x2c,0x20,0x30,0x2e,0x38,0x35,0x2c, - 0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, - 0x76,0x65,0x63,0x34,0x20,0x6c,0x69,0x67,0x68,0x74,0x53,0x70,0x65,0x63,0x75,0x6c, - 0x61,0x72,0x20,0x3d,0x20,0x47,0x65,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72, - 0x43,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2c, - 0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c, - 0x20,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x61,0x63,0x74,0x69,0x76, - 0x65,0x4e,0x6f,0x72,0x6d,0x2c,0x20,0x73,0x70,0x65,0x63,0x53,0x68,0x69,0x6e,0x69, - 0x6e,0x65,0x73,0x73,0x2c,0x20,0x73,0x70,0x65,0x63,0x49,0x6e,0x74,0x65,0x6e,0x73, - 0x69,0x74,0x79,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c, - 0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x28,0x73,0x75,0x72,0x66,0x61,0x63,0x65, - 0x43,0x6f,0x6c,0x6f,0x72,0x20,0x2b,0x20,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a, - 0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x41,0x6c,0x70,0x68,0x61,0x29,0x20,0x2a,0x20, - 0x6c,0x69,0x67,0x68,0x74,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x20,0x2b,0x20,0x6c, - 0x69,0x67,0x68,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x3b,0xa,0x7d,0xa, - + 0x20,0x20,0x20,0x2b,0x20,0x72,0x65,0x64,0x53,0x61,0x6e,0x64,0x43,0x6f,0x6c,0x6f, + 0x72,0x20,0x2a,0x20,0x70,0x72,0x61,0x69,0x72,0x69,0x65,0x57,0x65,0x69,0x67,0x68, + 0x74,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x46,0x61,0x72,0x6d,0x20, + 0x69,0x6d,0x70,0x72,0x6f,0x76,0x65,0x6d,0x65,0x6e,0x74,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x20,0x61,0x70,0x70,0x6c,0x69,0x65,0x64,0x20,0x77,0x68,0x65,0x6e, + 0x20,0x61,0x20,0x66,0x61,0x72,0x6d,0x20,0x69,0x73,0x20,0x70,0x72,0x65,0x73,0x65, + 0x6e,0x74,0xa,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x69,0x73,0x46,0x61,0x72, + 0x6d,0x20,0x3d,0x3d,0x20,0x31,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x63,0x61,0x6c,0x65,0x20,0x3d,0x20, + 0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x31,0x2c,0x20,0x66,0x61,0x72,0x6d,0x54,0x65, + 0x78,0x74,0x75,0x72,0x65,0x53,0x63,0x61,0x6c,0x65,0x29,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x66,0x61,0x72,0x6d,0x55,0x56, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x66,0x61, + 0x72,0x6d,0x4d,0x61,0x70,0x70,0x69,0x6e,0x67,0x4d,0x6f,0x64,0x65,0x20,0x3d,0x3d, + 0x20,0x31,0x29,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x48,0x65,0x78,0x2d,0x63,0x65,0x6e,0x74,0x65,0x72,0x65, + 0x64,0x20,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0x20,0x77,0x69,0x74,0x68,0x20,0x61, + 0x73,0x70,0x65,0x63,0x74,0x20,0x72,0x61,0x74,0x69,0x6f,0x20,0x63,0x6f,0x72,0x72, + 0x65,0x63,0x74,0x69,0x6f,0x6e,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x76,0x65,0x63,0x32,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x65,0x64, + 0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73,0x2e, + 0x78,0x20,0x2d,0x20,0x30,0x2e,0x35,0x2c,0x20,0x28,0x74,0x69,0x6c,0x65,0x50,0x6f, + 0x73,0x2e,0x79,0x20,0x2d,0x20,0x30,0x2e,0x34,0x33,0x32,0x38,0x37,0x39,0x39,0x29, + 0x20,0x2a,0x20,0x31,0x2e,0x31,0x35,0x34,0x37,0x33,0x34,0x34,0x31,0x31,0x29,0x3b, + 0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x61,0x72, + 0x6d,0x55,0x56,0x20,0x3d,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x65,0x64,0x20,0x2a, + 0x20,0x73,0x63,0x61,0x6c,0x65,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28,0x30,0x2e, + 0x35,0x2c,0x20,0x30,0x2e,0x35,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0x20,0x65,0x6c,0x73,0x65,0x20,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x2d,0x73, + 0x70,0x61,0x63,0x65,0x20,0x63,0x6f,0x6f,0x72,0x64,0x69,0x6e,0x61,0x74,0x65,0x73, + 0x3a,0x20,0x70,0x65,0x72,0x66,0x65,0x63,0x74,0x6c,0x79,0x20,0x73,0x65,0x61,0x6d, + 0x6c,0x65,0x73,0x73,0x20,0x61,0x6e,0x64,0x20,0x63,0x6f,0x6e,0x74,0x69,0x6e,0x75, + 0x6f,0x75,0x73,0x20,0x61,0x63,0x72,0x6f,0x73,0x73,0x20,0x61,0x64,0x6a,0x61,0x63, + 0x65,0x6e,0x74,0x20,0x68,0x65,0x78,0x20,0x74,0x69,0x6c,0x65,0x73,0xa,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x61,0x72,0x6d,0x55,0x56, + 0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2e,0x78,0x79,0x20, + 0x2a,0x20,0x73,0x63,0x61,0x6c,0x65,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x66,0x61,0x72,0x6d,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x46,0x61,0x72,0x6d,0x2c,0x20,0x66,0x61,0x72, + 0x6d,0x55,0x56,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0x69, + 0x6f,0x6d,0x65,0x47,0x72,0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x66,0x61,0x72,0x6d, + 0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa,0x20,0x20,0x20,0x20,0x7d,0xa,0xa,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x53,0x68,0x6f,0x72,0x65,0x6c,0x69,0x6e,0x65,0x20,0x62, + 0x65,0x61,0x63,0x68,0x3a,0x20,0x77,0x68,0x65,0x72,0x65,0x20,0x67,0x65,0x6e,0x74, + 0x6c,0x65,0x20,0x73,0x6c,0x6f,0x70,0x65,0x73,0x20,0x6d,0x65,0x65,0x74,0x20,0x77, + 0x61,0x74,0x65,0x72,0x20,0x28,0x73,0x65,0x61,0x20,0x6c,0x65,0x76,0x65,0x6c,0x20, + 0x75,0x70,0x20,0x74,0x6f,0x20,0x7e,0x31,0x31,0x30,0x6d,0x2c,0x20,0x6f,0x72,0x20, + 0x61,0x6c,0x6f,0x6e,0x67,0x20,0x72,0x69,0x76,0x65,0x72,0x73,0x29,0xa,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x53,0x74,0x65,0x65,0x70,0x20,0x73,0x6c,0x6f,0x70,0x65, + 0x73,0x20,0x28,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x20,0x3c,0x20,0x30,0x2e,0x35,0x35, + 0x29,0x20,0x72,0x65,0x6d,0x61,0x69,0x6e,0x20,0x72,0x6f,0x63,0x6b,0x79,0x20,0x63, + 0x6c,0x69,0x66,0x66,0x73,0x3b,0x20,0x67,0x65,0x6e,0x74,0x6c,0x65,0x20,0x73,0x6c, + 0x6f,0x70,0x65,0x73,0x20,0x28,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x20,0x3e,0x20,0x30, + 0x2e,0x38,0x30,0x29,0x20,0x67,0x65,0x74,0x20,0x61,0x20,0x73,0x61,0x6e,0x64,0x79, + 0x20,0x62,0x65,0x61,0x63,0x68,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x20,0x67,0x65,0x6e,0x74,0x6c,0x65,0x53,0x6c,0x6f,0x70,0x65,0x20,0x3d,0x20,0x73, + 0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x35,0x35,0x2c,0x20, + 0x30,0x2e,0x38,0x35,0x2c,0x20,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x29,0x3b,0xa,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x63,0x6f,0x61,0x73,0x74,0x42,0x65, + 0x61,0x63,0x68,0x20,0x3d,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x73,0x6d,0x6f, + 0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x31,0x35,0x2c,0x20,0x30, + 0x2e,0x31,0x31,0x30,0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x29,0x20,0x2a,0x20, + 0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x30,0x30,0x33, + 0x2c,0x20,0x30,0x2e,0x30,0x31,0x35,0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x20, + 0x2a,0x20,0x67,0x65,0x6e,0x74,0x6c,0x65,0x53,0x6c,0x6f,0x70,0x65,0x3b,0xa,0x20, + 0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x65, + 0x61,0x63,0x68,0x20,0x3d,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x61,0x6e,0x6b,0x46, + 0x61,0x63,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x65, + 0x61,0x63,0x68,0x46,0x61,0x63,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x63,0x6f,0x61, + 0x73,0x74,0x42,0x65,0x61,0x63,0x68,0x2c,0x20,0x72,0x69,0x76,0x65,0x72,0x42,0x65, + 0x61,0x63,0x68,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x75, + 0x70,0x70,0x72,0x65,0x73,0x73,0x20,0x62,0x65,0x61,0x63,0x68,0x20,0x6f,0x6e,0x6c, + 0x79,0x20,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x65,0x78,0x74,0x72,0x65,0x6d,0x65, + 0x20,0x70,0x6f,0x6c,0x61,0x72,0x20,0x69,0x63,0x65,0x20,0x73,0x68,0x65,0x65,0x74, + 0x20,0x65,0x64,0x67,0x65,0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x20,0x70,0x6f,0x6c,0x61,0x72,0x49,0x63,0x65,0x43,0x6f,0x76,0x65,0x72,0x20,0x3d, + 0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x38,0x32, + 0x2c,0x20,0x30,0x2e,0x39,0x36,0x2c,0x20,0x64,0x69,0x73,0x74,0x46,0x72,0x6f,0x6d, + 0x43,0x65,0x6e,0x74,0x65,0x72,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x62,0x65,0x61, + 0x63,0x68,0x46,0x61,0x63,0x20,0x2a,0x3d,0x20,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20, + 0x70,0x6f,0x6c,0x61,0x72,0x49,0x63,0x65,0x43,0x6f,0x76,0x65,0x72,0x29,0x3b,0xa, + 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x41,0x70,0x70,0x6c,0x79,0x20,0x73,0x61, + 0x6e,0x64,0x79,0x20,0x62,0x65,0x61,0x63,0x68,0x20,0x61,0x63,0x72,0x6f,0x73,0x73, + 0x20,0x61,0x6c,0x6c,0x20,0x6c,0x61,0x6e,0x64,0x20,0x74,0x79,0x70,0x65,0x73,0x20, + 0x67,0x65,0x6e,0x74,0x6c,0x79,0x20,0x6d,0x65,0x65,0x74,0x69,0x6e,0x67,0x20,0x77, + 0x61,0x74,0x65,0x72,0xa,0x20,0x20,0x20,0x20,0x62,0x69,0x6f,0x6d,0x65,0x47,0x72, + 0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x62,0x69,0x6f,0x6d,0x65, + 0x47,0x72,0x6f,0x75,0x6e,0x64,0x2c,0x20,0x62,0x65,0x61,0x63,0x68,0x43,0x6f,0x6c, + 0x6f,0x72,0x2c,0x20,0x62,0x65,0x61,0x63,0x68,0x46,0x61,0x63,0x20,0x2a,0x20,0x30, + 0x2e,0x39,0x30,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x50,0x6f, + 0x6c,0x61,0x72,0x20,0x70,0x61,0x63,0x6b,0x20,0x69,0x63,0x65,0x20,0x6f,0x6e,0x20, + 0x63,0x6f,0x6c,0x64,0x20,0x70,0x6f,0x6c,0x61,0x72,0x20,0x77,0x61,0x74,0x65,0x72, + 0x73,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c,0x61, + 0x72,0x53,0x65,0x61,0x49,0x63,0x65,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68, + 0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x37,0x32,0x2c,0x20,0x30,0x2e,0x39,0x34,0x2c, + 0x20,0x64,0x69,0x73,0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65,0x72,0x29, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72, + 0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x77,0x61,0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f, + 0x72,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x70,0x6f, + 0x6c,0x61,0x72,0x53,0x65,0x61,0x49,0x63,0x65,0x20,0x2a,0x20,0x30,0x2e,0x39,0x35, + 0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x36,0x2e,0x20,0x53,0x6c, + 0x6f,0x70,0x65,0x20,0x26,0x20,0x45,0x6c,0x65,0x76,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x42,0x6c,0x65,0x6e,0x64,0x69,0x6e,0x67,0x20,0x52,0x75,0x6c,0x65,0x73,0xa,0x20, + 0x20,0x20,0x20,0x2f,0x2f,0x20,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x3a,0x20,0x31,0x2e, + 0x30,0x20,0x3d,0x20,0x66,0x6c,0x61,0x74,0x20,0x68,0x6f,0x72,0x69,0x7a,0x6f,0x6e, + 0x74,0x61,0x6c,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64,0x2c,0x20,0x3c,0x20,0x30,0x2e, + 0x35,0x35,0x20,0x3d,0x20,0x73,0x74,0x65,0x65,0x70,0x20,0x73,0x6c,0x6f,0x70,0x65, + 0x20,0x2f,0x20,0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,0x20,0x63,0x6c,0x69,0x66, + 0x66,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x6c,0x61,0x74, + 0x6e,0x65,0x73,0x73,0x20,0x3d,0x20,0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x6e,0x6f, + 0x72,0x6d,0x2e,0x7a,0x20,0x2d,0x20,0x30,0x2e,0x35,0x35,0x29,0x20,0x2f,0x20,0x30, + 0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa, + 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x4d,0x6f,0x75,0x6e,0x74,0x61,0x69,0x6e, + 0x20,0x72,0x6f,0x63,0x6b,0x20,0x65,0x6c,0x65,0x76,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x66,0x61,0x63,0x74,0x6f,0x72,0x3a,0x20,0x62,0x65,0x67,0x69,0x6e,0x73,0x20,0x61, + 0x74,0x20,0x31,0x30,0x30,0x30,0x6d,0x20,0x28,0x31,0x2e,0x30,0x20,0x6b,0x6d,0x29, + 0x2c,0x20,0x72,0x61,0x6d,0x70,0x73,0x20,0x75,0x70,0x20,0x74,0x6f,0x77,0x61,0x72, + 0x64,0x73,0x20,0x32,0x32,0x30,0x30,0x6d,0x20,0x28,0x32,0x2e,0x32,0x20,0x6b,0x6d, + 0x29,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x72,0x6f,0x63,0x6b, + 0x4c,0x69,0x6e,0x65,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x31,0x2e,0x30,0x2c,0x20, + 0x30,0x2e,0x30,0x2c,0x20,0x70,0x6f,0x6c,0x65,0x46,0x61,0x63,0x74,0x6f,0x72,0x29, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x6d,0x6f,0x75,0x6e, + 0x74,0x61,0x69,0x6e,0x41,0x6c,0x74,0x69,0x74,0x75,0x64,0x65,0x20,0x3d,0x20,0x73, + 0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x72,0x6f,0x63,0x6b,0x4c,0x69, + 0x6e,0x65,0x2c,0x20,0x6d,0x69,0x6e,0x28,0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65, + 0x2c,0x20,0x72,0x6f,0x63,0x6b,0x4c,0x69,0x6e,0x65,0x20,0x2b,0x20,0x31,0x2e,0x32, + 0x29,0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, + 0x2f,0x2f,0x20,0x53,0x74,0x65,0x65,0x70,0x20,0x73,0x6c,0x6f,0x70,0x65,0x73,0x20, + 0x61,0x72,0x65,0x20,0x61,0x6c,0x77,0x61,0x79,0x73,0x20,0x72,0x6f,0x63,0x6b,0x3b, + 0x20,0x66,0x6c,0x61,0x74,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x62,0x65,0x63, + 0x6f,0x6d,0x65,0x73,0x20,0x72,0x6f,0x63,0x6b,0x20,0x61,0x73,0x20,0x61,0x6c,0x74, + 0x69,0x74,0x75,0x64,0x65,0x20,0x72,0x69,0x73,0x65,0x73,0x20,0x61,0x62,0x6f,0x76, + 0x65,0x20,0x31,0x30,0x30,0x30,0x6d,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x72,0x6f,0x63,0x6b,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x6d, + 0x61,0x78,0x28,0x31,0x2e,0x30,0x20,0x2d,0x20,0x66,0x6c,0x61,0x74,0x6e,0x65,0x73, + 0x73,0x2c,0x20,0x6d,0x6f,0x75,0x6e,0x74,0x61,0x69,0x6e,0x41,0x6c,0x74,0x69,0x74, + 0x75,0x64,0x65,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x53,0x6e, + 0x6f,0x77,0x20,0x72,0x75,0x6c,0x65,0x3a,0x20,0x73,0x74,0x61,0x72,0x74,0x73,0x20, + 0x61,0x62,0x6f,0x76,0x65,0x20,0x32,0x35,0x30,0x30,0x6d,0x20,0x69,0x6e,0x20,0x74, + 0x65,0x6d,0x70,0x65,0x72,0x61,0x74,0x65,0x20,0x7a,0x6f,0x6e,0x65,0x2c,0x20,0x64, + 0x72,0x6f,0x70,0x70,0x69,0x6e,0x67,0x20,0x74,0x6f,0x20,0x73,0x65,0x61,0x20,0x6c, + 0x65,0x76,0x65,0x6c,0x20,0x61,0x74,0x20,0x70,0x6f,0x6c,0x65,0x73,0xa,0x20,0x20, + 0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x6e,0x6f,0x77,0x48,0x65,0x69,0x67, + 0x68,0x74,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28, + 0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65,0x20,0x2d,0x20,0x30,0x2e,0x32,0x30,0x2c, + 0x20,0x73,0x6e,0x6f,0x77,0x4c,0x69,0x6e,0x65,0x20,0x2b,0x20,0x30,0x2e,0x33,0x30, + 0x2c,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x73,0x6e,0x6f,0x77,0x53,0x6c,0x6f,0x70,0x65,0x20,0x3d,0x20, + 0x63,0x6c,0x61,0x6d,0x70,0x28,0x28,0x6e,0x6f,0x72,0x6d,0x2e,0x7a,0x20,0x2d,0x20, + 0x30,0x2e,0x32,0x38,0x29,0x20,0x2f,0x20,0x30,0x2e,0x32,0x35,0x2c,0x20,0x30,0x2e, + 0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74,0x20,0x3d,0x20, + 0x73,0x6e,0x6f,0x77,0x48,0x65,0x69,0x67,0x68,0x74,0x20,0x2a,0x20,0x73,0x6e,0x6f, + 0x77,0x53,0x6c,0x6f,0x70,0x65,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20, + 0x41,0x74,0x20,0x70,0x6f,0x6c,0x61,0x72,0x20,0x63,0x61,0x70,0x73,0x2c,0x20,0x69, + 0x63,0x65,0x20,0x63,0x6f,0x76,0x65,0x72,0x73,0x20,0x66,0x6c,0x61,0x74,0x20,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x20,0x61,0x74,0x20,0x73,0x65,0x61,0x20,0x6c,0x65,0x76, + 0x65,0x6c,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x6f,0x6c, + 0x61,0x72,0x4c,0x61,0x6e,0x64,0x49,0x63,0x65,0x20,0x3d,0x20,0x73,0x6d,0x6f,0x6f, + 0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x37,0x32,0x2c,0x20,0x30,0x2e,0x39, + 0x32,0x2c,0x20,0x64,0x69,0x73,0x74,0x46,0x72,0x6f,0x6d,0x43,0x65,0x6e,0x74,0x65, + 0x72,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67, + 0x68,0x74,0x20,0x3d,0x20,0x6d,0x61,0x78,0x28,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69, + 0x67,0x68,0x74,0x2c,0x20,0x70,0x6f,0x6c,0x61,0x72,0x4c,0x61,0x6e,0x64,0x49,0x63, + 0x65,0x20,0x2a,0x20,0x73,0x6e,0x6f,0x77,0x53,0x6c,0x6f,0x70,0x65,0x29,0x3b,0xa, + 0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x43,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74, + 0x65,0x20,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3a,0x20,0x62,0x69,0x6f,0x6d,0x65,0x20, + 0x67,0x72,0x6f,0x75,0x6e,0x64,0x20,0x2d,0x3e,0x20,0x6d,0x6f,0x75,0x6e,0x74,0x61, + 0x69,0x6e,0x20,0x72,0x6f,0x63,0x6b,0x20,0x61,0x62,0x6f,0x76,0x65,0x20,0x31,0x30, + 0x30,0x30,0x6d,0x20,0x26,0x20,0x6f,0x6e,0x20,0x63,0x6c,0x69,0x66,0x66,0x73,0x20, + 0x2d,0x3e,0x20,0x73,0x6e,0x6f,0x77,0x20,0x61,0x62,0x6f,0x76,0x65,0x20,0x32,0x35, + 0x30,0x30,0x6d,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x6e, + 0x53,0x6e,0x6f,0x77,0x4c,0x61,0x6e,0x64,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x62, + 0x69,0x6f,0x6d,0x65,0x47,0x72,0x6f,0x75,0x6e,0x64,0x2c,0x20,0x63,0x6c,0x69,0x66, + 0x66,0x52,0x6f,0x63,0x6b,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x72,0x6f,0x63,0x6b, + 0x57,0x65,0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x34,0x20,0x6c,0x61,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d,0x69, + 0x78,0x28,0x6e,0x6f,0x6e,0x53,0x6e,0x6f,0x77,0x4c,0x61,0x6e,0x64,0x2c,0x20,0x73, + 0x6e,0x6f,0x77,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65, + 0x69,0x67,0x68,0x74,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x37, + 0x2e,0x20,0x43,0x6f,0x6d,0x62,0x69,0x6e,0x65,0x20,0x4c,0x61,0x6e,0x64,0x20,0x61, + 0x6e,0x64,0x20,0x53,0x65,0x61,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20, + 0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x6d, + 0x69,0x78,0x28,0x6c,0x61,0x6e,0x64,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x77,0x61, + 0x74,0x65,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x46, + 0x61,0x63,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x38,0x2e,0x20, + 0x48,0x65,0x78,0x61,0x67,0x6f,0x6e,0x20,0x67,0x72,0x69,0x64,0x20,0x62,0x6f,0x72, + 0x64,0x65,0x72,0x20,0x6f,0x75,0x74,0x6c,0x69,0x6e,0x65,0xa,0x20,0x20,0x20,0x20, + 0x76,0x65,0x63,0x34,0x20,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65, + 0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x42,0x6f,0x72,0x64,0x65,0x72,0x2c, + 0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73,0x2e,0x78,0x2c, + 0x20,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73,0x2e,0x79,0x20,0x2a,0x20,0x31,0x2e,0x31, + 0x35,0x34,0x37,0x33,0x34,0x34,0x31,0x31,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x41,0x6c,0x70,0x68, + 0x61,0x20,0x3d,0x20,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x61,0x20,0x2a,0x20,0x28, + 0x31,0x2e,0x30,0x20,0x2d,0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x20,0x2a, + 0x20,0x30,0x2e,0x37,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f,0x2f,0x20,0x39, + 0x2e,0x20,0x4c,0x69,0x67,0x68,0x74,0x69,0x6e,0x67,0x20,0x26,0x20,0x53,0x70,0x65, + 0x63,0x75,0x6c,0x61,0x72,0x20,0x67,0x6c,0x69,0x6e,0x74,0xa,0x20,0x20,0x20,0x20, + 0x76,0x65,0x63,0x33,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x4e,0x6f,0x72,0x6d,0x20, + 0x3d,0x20,0x6d,0x69,0x78,0x28,0x6e,0x6f,0x72,0x6d,0x2c,0x20,0x77,0x61,0x74,0x65, + 0x72,0x4e,0x6f,0x72,0x6d,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61,0x63,0x29, + 0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x6c,0x69,0x67,0x68,0x74, + 0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x20,0x3d,0x20,0x47,0x65,0x74,0x44,0x69,0x72, + 0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x43,0x6f,0x6c, + 0x6f,0x72,0x28,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x61,0x63,0x74, + 0x69,0x76,0x65,0x4e,0x6f,0x72,0x6d,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20,0x2f, + 0x2f,0x20,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x3a,0x20,0x63,0x72,0x69,0x73, + 0x70,0x20,0x73,0x70,0x61,0x72,0x6b,0x6c,0x65,0x20,0x6f,0x6e,0x20,0x73,0x6e,0x6f, + 0x77,0x20,0x61,0x6e,0x64,0x20,0x77,0x61,0x74,0x65,0x72,0xa,0x20,0x20,0x20,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x20,0x73,0x70,0x65,0x63,0x53,0x68,0x69,0x6e,0x69,0x6e, + 0x65,0x73,0x73,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x6d,0x69,0x78,0x28,0x31,0x36, + 0x2e,0x30,0x2c,0x20,0x33,0x32,0x2e,0x30,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65, + 0x69,0x67,0x68,0x74,0x29,0x2c,0x20,0x34,0x38,0x2e,0x30,0x2c,0x20,0x77,0x61,0x74, + 0x65,0x72,0x46,0x61,0x63,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x73,0x70,0x65,0x63,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20, + 0x3d,0x20,0x6d,0x69,0x78,0x28,0x6d,0x69,0x78,0x28,0x30,0x2e,0x31,0x32,0x2c,0x20, + 0x30,0x2e,0x35,0x35,0x2c,0x20,0x73,0x6e,0x6f,0x77,0x57,0x65,0x69,0x67,0x68,0x74, + 0x29,0x2c,0x20,0x30,0x2e,0x38,0x35,0x2c,0x20,0x77,0x61,0x74,0x65,0x72,0x46,0x61, + 0x63,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x6c,0x69,0x67, + 0x68,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x20,0x3d,0x20,0x47,0x65,0x74, + 0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x57, + 0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2c,0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x50, + 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68, + 0x74,0x2c,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x4e,0x6f,0x72,0x6d,0x2c,0x20,0x73, + 0x70,0x65,0x63,0x53,0x68,0x69,0x6e,0x69,0x6e,0x65,0x73,0x73,0x2c,0x20,0x73,0x70, + 0x65,0x63,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x29,0x3b,0xa,0xa,0x20, + 0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, + 0x28,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x2b,0x20, + 0x62,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x2a,0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x41, + 0x6c,0x70,0x68,0x61,0x29,0x20,0x2a,0x20,0x6c,0x69,0x67,0x68,0x74,0x44,0x69,0x66, + 0x66,0x75,0x73,0x65,0x20,0x2b,0x20,0x6c,0x69,0x67,0x68,0x74,0x53,0x70,0x65,0x63, + 0x75,0x6c,0x61,0x72,0x3b,0xa,0x7d,0xa, // /home/bart/project/tiletest/shaders/simple.vert 0x0,0x0,0x4,0x27, 0x23, @@ -847,9 +897,9 @@ static const unsigned char qt_resource_struct[] = { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, // :/shaders/simple.frag 0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, -0x0,0x0,0x1,0xa1,0xbb,0x69,0x8c,0x82, +0x0,0x0,0x1,0xa1,0xbb,0xdb,0xc9,0xbe, // :/shaders/simple.vert - 0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2d,0xf5, + 0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x31,0x1d, 0x0,0x0,0x1,0xa1,0xba,0xb6,0x16,0x20, }; diff --git a/qrc_shaders.o b/qrc_shaders.o index a1d4f5b..58da2ca 100644 Binary files a/qrc_shaders.o and b/qrc_shaders.o differ diff --git a/qscenerenderer.h b/qscenerenderer.h index cb11ae1..070affc 100644 --- a/qscenerenderer.h +++ b/qscenerenderer.h @@ -56,10 +56,21 @@ protected: void drawFloatingTexts(QPainter &painter, const QMatrix4x4 &vMatrix); // City & Territory Overlays void drawCityBorders(QPainter &painter, const QMatrix4x4 &vMatrix); + void drawImprovementsOverlay(QPainter &painter, const QMatrix4x4 &vMatrix); void drawCityViewOverlay(QPainter &painter, const QMatrix4x4 &vMatrix); bool screenToHex(const QPoint &screenPos, const QMatrix4x4 &vMatrix, int &outX, int &outY); QImage getTintedIcon(const QString &path, const QColor &color); + float getCameraPitchDeg() const; + float getCameraForwardDist() const; + QVector3D getCameraLookAt() const; + void loadCameraConfig(); + + float m_cameraMinZoom = 2.0f; + float m_cameraMaxZoom = 16.0f; + float m_cameraPitchMinDeg = 45.0f; + float m_cameraPitchMaxDeg = 75.0f; + float m_camera_x = 10.0f; float m_camera_y = 0.0f; QMatrix4x4 Projection; @@ -81,6 +92,11 @@ protected: bool m_draggingMinimap; float m_minimapZoom; + // Saved camera state for restoring after City View + QVector3D m_savedCamPos; + float m_savedZoom = 8.0f; + float m_savedZRot = 90.0f; + // Units & UI state UnitRenderer m_unitRenderer; QMap m_iconCache; @@ -107,6 +123,12 @@ protected: }; std::vector m_citySlotHits; + struct CityBuyTileHit { + QRect rect; + int tx, ty; + }; + std::vector m_cityBuyTileHits; + struct CityBannerHit { QRect rect; int cityId; diff --git a/qscenerenderer.o b/qscenerenderer.o index b40a2f2..62db694 100644 Binary files a/qscenerenderer.o and b/qscenerenderer.o differ diff --git a/terrainmovementmanager.cpp b/terrainmovementmanager.cpp new file mode 100644 index 0000000..f5a64d1 --- /dev/null +++ b/terrainmovementmanager.cpp @@ -0,0 +1,222 @@ +#include "terrainmovementmanager.h" +#include "unitconfig.h" +#include "pathfinder.h" +#include "yamlparser.h" +#include +#include +#include + +TerrainMovementConfig::TerrainMovementConfig() + : waterHeightThreshold(6), + mountainRockHeightKm(2.3f), + snowHeightKm(3.1f), + polarSnowLineEnabled(true), + polarSnowLineBaseKm(2.5f), + polarSnowFactorStart(0.40f), + polarSnowFactorEnd(0.85f) +{ + movementCosts["grasland"] = 1.0f; + movementCosts["bos"] = 2.0f; + movementCosts["steen"] = 2.5f; + movementCosts["sahara"] = 1.5f; + movementCosts["tundra"] = 1.5f; + movementCosts["red_canyon"] = 2.0f; + movementCosts["sneeuw"] = 3.0f; + movementCosts["water"] = 1.0f; + + DomainMovementRule landRule; + landRule.impassableTerrains = QStringList{"water", "sneeuw"}; + domainRules["land"] = landRule; + + DomainMovementRule navalRule; + navalRule.passableTerrains = QStringList{"water"}; + domainRules["naval"] = navalRule; +} + +TerrainMovementManager& TerrainMovementManager::instance() +{ + static TerrainMovementManager s_instance; + return s_instance; +} + +TerrainMovementManager::TerrainMovementManager() + : m_loaded(false) +{ +} + +bool TerrainMovementManager::loadConfig(const QString &filePath) +{ + YamlNode root = YamlParser::parseFile(filePath); + if (root.children.isEmpty()) { + qWarning() << "Failed to parse terrain movement config YAML or empty:" << filePath; + return false; + } + + if (root.hasChild("water_height_threshold")) { + m_config.waterHeightThreshold = root["water_height_threshold"].asInt(6); + } + if (root.hasChild("mountain_rock_height_km")) { + m_config.mountainRockHeightKm = root["mountain_rock_height_km"].asFloat(2.3f); + } + if (root.hasChild("snow_height_km")) { + m_config.snowHeightKm = root["snow_height_km"].asFloat(3.1f); + } + if (root.hasChild("polar_snow_line_enabled")) { + m_config.polarSnowLineEnabled = root["polar_snow_line_enabled"].asBool(true); + } + if (root.hasChild("polar_snow_line_base_km")) { + m_config.polarSnowLineBaseKm = root["polar_snow_line_base_km"].asFloat(2.5f); + } + if (root.hasChild("polar_snow_factor_start")) { + m_config.polarSnowFactorStart = root["polar_snow_factor_start"].asFloat(0.40f); + } + if (root.hasChild("polar_snow_factor_end")) { + m_config.polarSnowFactorEnd = root["polar_snow_factor_end"].asFloat(0.85f); + } + + if (root.hasChild("movement_costs")) { + const YamlNode &costsNode = root["movement_costs"]; + for (auto it = costsNode.children.begin(); it != costsNode.children.end(); ++it) { + m_config.movementCosts[it.key()] = it.value().asFloat(1.0f); + } + } + + if (root.hasChild("domains")) { + const YamlNode &domainsNode = root["domains"]; + for (auto it = domainsNode.children.begin(); it != domainsNode.children.end(); ++it) { + QString domainName = it.key().trimmed().toLower(); + const YamlNode &dNode = it.value(); + + DomainMovementRule rule; + if (dNode.hasChild("impassable_terrains")) { + rule.impassableTerrains = dNode["impassable_terrains"].listValues; + } + if (dNode.hasChild("passable_terrains")) { + rule.passableTerrains = dNode["passable_terrains"].listValues; + } + m_config.domainRules[domainName] = rule; + } + } + + m_loaded = true; + qDebug() << "TerrainMovementManager successfully loaded movement config from:" << filePath; + return true; +} + +QString TerrainMovementManager::getTerrainType(int tx, int ty, Matrix2D *mapPoints, int numPoints05) const +{ + if (!mapPoints || numPoints05 <= 0) return "grasland"; + + QVector2D w = Pathfinder::hexToWorld(tx, ty); + float scaleX = numPoints05 * 2.0f; + float scaleY = numPoints05 / LOD_0_SIZE_Y; + + int mapX = (int) std::round(w.x() * scaleX); + int mapY = (int) std::round(w.y() * scaleY); + + if (mapX < 0) mapX = 0; + if (mapX >= (int)mapPoints->getWidth()) mapX = (int)mapPoints->getWidth() - 1; + if (mapY < 0) mapY = 0; + if (mapY >= (int)mapPoints->getHeight()) mapY = (int)mapPoints->getHeight() - 1; + + TerrainPoint tp = mapPoints->operator()(mapX, mapY); + + // 1. Water + if (tp.height < m_config.waterHeightThreshold) { + return "water"; + } + + float heightKm = (tp.height / 255.0f) * 3.5f + 1.0f; + + // 2. High peak snow + if (heightKm >= m_config.snowHeightKm) { + return "sneeuw"; + } + + // 3. Polar latitude snowline + if (m_config.polarSnowLineEnabled) { + float normY = std::max(0.0f, std::min(1.0f, w.y() / 108.25f)); + float distFromCenter = std::abs(normY - 0.5f) * 2.0f; + if (distFromCenter >= m_config.polarSnowFactorStart) { + float t = std::max(0.0f, std::min(1.0f, + (distFromCenter - m_config.polarSnowFactorStart) / + (m_config.polarSnowFactorEnd - m_config.polarSnowFactorStart))); + float poleFactor = t * t * (3.0f - 2.0f * t); + float snowLine = m_config.polarSnowLineBaseKm * (1.0f - poleFactor); + if (heightKm >= snowLine) { + return "sneeuw"; + } + } + } + + // 4. Rocky mountain + if (heightKm >= m_config.mountainRockHeightKm) { + return "steen"; + } + + // 5. Typemap biomes + switch (tp.type) { + case 0: return "grasland"; + case 1: return "sahara"; + case 2: return "tundra"; + case 3: return "red_canyon"; + case 4: return "bos"; + default: return "grasland"; + } +} + +bool TerrainMovementManager::isTerrainPassable( + const QString &terrainType, + MovementDomain domain, + const UnitConfig *unitConfig) const +{ + // Unit-specific whitelist overrides + if (unitConfig && !unitConfig->passableTerrains.isEmpty()) { + return unitConfig->passableTerrains.contains(terrainType); + } + + // Unit-specific blacklist overrides + if (unitConfig && unitConfig->impassableTerrains.contains(terrainType)) { + return false; + } + + // Domain-level rules + QString domainStr = movementDomainToString(domain); + auto it = m_config.domainRules.find(domainStr); + if (it != m_config.domainRules.end()) { + const DomainMovementRule &rule = it.value(); + if (!rule.passableTerrains.isEmpty()) { + return rule.passableTerrains.contains(terrainType); + } + if (rule.impassableTerrains.contains(terrainType)) { + return false; + } + } + + return true; +} + +bool TerrainMovementManager::isHexPassable( + int tx, int ty, + MovementDomain domain, + Matrix2D *mapPoints, + int numPoints05, + const UnitConfig *unitConfig) const +{ + if (tx < 0 || tx >= MAP_WIDTH || ty < 0 || ty >= MAP_HEIGHT) { + return false; + } + QString tType = getTerrainType(tx, ty, mapPoints, numPoints05); + return isTerrainPassable(tType, domain, unitConfig); +} + +float TerrainMovementManager::getTerrainMovementCost(const QString &terrainType) const +{ + return m_config.movementCosts.value(terrainType, 1.0f); +} + +float TerrainMovementManager::getHexMovementCost(int tx, int ty, Matrix2D *mapPoints, int numPoints05) const +{ + QString tType = getTerrainType(tx, ty, mapPoints, numPoints05); + return getTerrainMovementCost(tType); +} diff --git a/terrainmovementmanager.h b/terrainmovementmanager.h new file mode 100644 index 0000000..2ab0a94 --- /dev/null +++ b/terrainmovementmanager.h @@ -0,0 +1,88 @@ +#ifndef TERRAINMOVEMENTMANAGER_H +#define TERRAINMOVEMENTMANAGER_H + +#include +#include +#include +#include "terrain.h" +#include "matrix2d.h" + +enum class MovementDomain { + Land, + Naval +}; + +inline QString movementDomainToString(MovementDomain domain) { + switch (domain) { + case MovementDomain::Land: return "land"; + case MovementDomain::Naval: return "naval"; + } + return "land"; +} + +inline MovementDomain stringToMovementDomain(const QString &str) { + QString s = str.trimmed().toLower(); + if (s == "naval" || s == "water" || s == "zee" || s == "schip" || s == "sea") { + return MovementDomain::Naval; + } + return MovementDomain::Land; +} + +struct DomainMovementRule { + QStringList impassableTerrains; + QStringList passableTerrains; // If non-empty, ONLY these terrains can be entered +}; + +struct TerrainMovementConfig { + int waterHeightThreshold; + float mountainRockHeightKm; + float snowHeightKm; + bool polarSnowLineEnabled; + float polarSnowLineBaseKm; + float polarSnowFactorStart; + float polarSnowFactorEnd; + + QMap movementCosts; + QMap domainRules; + + TerrainMovementConfig(); +}; + +struct UnitConfig; // Forward declaration + +class TerrainMovementManager { +public: + static TerrainMovementManager& instance(); + + bool loadConfig(const QString &filePath); + + QString getTerrainType(int tx, int ty, Matrix2D *mapPoints, int numPoints05) const; + + bool isTerrainPassable( + const QString &terrainType, + MovementDomain domain, + const UnitConfig *unitConfig = nullptr + ) const; + + bool isHexPassable( + int tx, int ty, + MovementDomain domain, + Matrix2D *mapPoints, + int numPoints05, + const UnitConfig *unitConfig = nullptr + ) const; + + float getTerrainMovementCost(const QString &terrainType) const; + float getHexMovementCost(int tx, int ty, Matrix2D *mapPoints, int numPoints05) const; + + const TerrainMovementConfig& getConfig() const { return m_config; } + +private: + TerrainMovementManager(); + ~TerrainMovementManager() = default; + + TerrainMovementConfig m_config; + bool m_loaded; +}; + +#endif // TERRAINMOVEMENTMANAGER_H diff --git a/terrainmovementmanager.o b/terrainmovementmanager.o new file mode 100644 index 0000000..ba534ce Binary files /dev/null and b/terrainmovementmanager.o differ diff --git a/terrainyieldmanager.o b/terrainyieldmanager.o index bc1cf18..c12cf5b 100644 Binary files a/terrainyieldmanager.o and b/terrainyieldmanager.o differ diff --git a/tile.h b/tile.h index 62f73fe..1a92037 100644 --- a/tile.h +++ b/tile.h @@ -69,6 +69,7 @@ protected: static QOpenGLTexture * m_texture_redsand; static QOpenGLTexture * m_texture_redrock; static QOpenGLTexture * m_texture_forest; + static QOpenGLTexture * m_texture_farm; static QImage * m_image_grass; static QImage * m_image_rock; static QImage * m_image_border; @@ -81,6 +82,7 @@ protected: static QImage * m_image_redsand; static QImage * m_image_redrock; static QImage * m_image_forest; + static QImage * m_image_farm; }; #endif // TILE_H diff --git a/tile.o b/tile.o index 9433dea..5161e4c 100644 Binary files a/tile.o and b/tile.o differ diff --git a/tiletest b/tiletest index ce69029..e4851fb 100755 Binary files a/tiletest and b/tiletest differ diff --git a/tiletest.pro b/tiletest.pro index 59127db..3080d4c 100644 --- a/tiletest.pro +++ b/tiletest.pro @@ -28,7 +28,9 @@ SOURCES += main.cpp \ city.cpp \ terrainyieldmanager.cpp \ gamemanager.cpp \ - unitrenderer.cpp + unitrenderer.cpp \ + localization.cpp \ + terrainmovementmanager.cpp HEADERS += mainwindow.h \ qscenerenderer.h \ @@ -46,7 +48,9 @@ HEADERS += mainwindow.h \ city.h \ terrainyieldmanager.h \ gamemanager.h \ - unitrenderer.h + unitrenderer.h \ + localization.h \ + terrainmovementmanager.h FORMS += mainwindow.ui diff --git a/tiletest.pro.user b/tiletest.pro.user index 89ccd32..8d1c8b6 100644 --- a/tiletest.pro.user +++ b/tiletest.pro.user @@ -1,334 +1 @@ - - - - - - EnvironmentId - {f0a66801-0dd7-42e1-b4c1-85787695328d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Desktop Qt 5.6.0 GCC 64bit - Desktop Qt 5.6.0 GCC 64bit - qt.56.gcc_64_kit - 0 - 0 - 0 - - /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - - /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Profile - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - true - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 3 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - tiletest - - Qt4ProjectManager.Qt4RunConfiguration:/home/bart/project/tiletest/tiletest.pro - true - - tiletest.pro - false - false - - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - + diff --git a/unit.cpp b/unit.cpp index dcee020..d516363 100644 --- a/unit.cpp +++ b/unit.cpp @@ -6,8 +6,10 @@ Unit::Unit(int uId, int pId, const UnitConfig &cfg, int startX, int startY, float groundZ) : id(uId), playerId(pId), config(cfg), tileX(startX), tileY(startY), health((float)cfg.health), maxHealth((float)cfg.health), + buildCharges(cfg.buildCharges), state(UnitState::Idle), pathIndex(0), moveProgress(0.0f), - targetTileX(startX), targetTileY(startY), attackFlashTimer(0.0f) + targetTileX(startX), targetTileY(startY), attackFlashTimer(0.0f), + buildProgress(0.0f), buildDuration(0.0f), buildingImprovementId("") { QVector2D w = Pathfinder::hexToWorld(startX, startY); worldPos = QVector3D(w.x(), w.y(), groundZ); @@ -34,6 +36,10 @@ float Unit::getTerrainHeight(float worldX, float worldY, Matrix2D void Unit::setPath(const std::vector> &newPath) { + if (state == UnitState::Building) { + cancelBuilding(); + } + path = newPath; pathIndex = 0; moveProgress = 0.0f; @@ -55,6 +61,27 @@ void Unit::stopMovement() state = UnitState::Idle; } +void Unit::startBuilding(const QString &impId, float duration) +{ + path.clear(); + pathIndex = 0; + moveProgress = 0.0f; + state = UnitState::Building; + buildingImprovementId = impId; + buildDuration = std::max(0.1f, duration); + buildProgress = 0.0f; +} + +void Unit::cancelBuilding() +{ + if (state == UnitState::Building) { + state = UnitState::Idle; + buildProgress = 0.0f; + buildDuration = 0.0f; + buildingImprovementId = ""; + } +} + void Unit::update(float deltaTime, float tickDuration, float simSpeedMultiplier, Matrix2D *mapPoints, int numPoints05) { @@ -62,6 +89,13 @@ void Unit::update(float deltaTime, float tickDuration, float simSpeedMultiplier, attackFlashTimer = std::max(0.0f, attackFlashTimer - deltaTime); } + if (state == UnitState::Building) { + if (buildDuration > 0.001f) { + buildProgress += (deltaTime * simSpeedMultiplier) / buildDuration; + } + return; + } + if (state != UnitState::Moving || path.size() <= 1) { return; } diff --git a/unit.h b/unit.h index 3848826..aa4d69d 100644 --- a/unit.h +++ b/unit.h @@ -12,7 +12,8 @@ enum class UnitState { Idle, Moving, - Attacking + Attacking, + Building }; class Unit { @@ -27,6 +28,7 @@ public: QVector3D worldPos; float health; float maxHealth; + int buildCharges; UnitState state; // Movement Path @@ -39,15 +41,26 @@ public: // Attack cooldown / flash float attackFlashTimer; + // Building State + float buildProgress; // 0.0 to 1.0 + float buildDuration; + QString buildingImprovementId; + void update(float deltaTime, float tickDuration, float simSpeedMultiplier, Matrix2D *mapPoints, int numPoints05); void setPath(const std::vector> &newPath); void stopMovement(); + void startBuilding(const QString &impId, float duration); + void cancelBuilding(); + bool isBuilding() const { return state == UnitState::Building; } + bool canAttack(const Unit &other) const; void performAttack(Unit &target); void takeDamage(float damage); bool isDead() const { return health <= 0.001f; } + bool isNaval() const { return config.isNaval(); } + bool isLand() const { return config.isLand(); } static float getTerrainHeight(float worldX, float worldY, Matrix2D *mapPoints, int numPoints05); }; diff --git a/unit.o b/unit.o index 275c38c..736b8e3 100644 Binary files a/unit.o and b/unit.o differ diff --git a/unitconfig.o b/unitconfig.o index 540bd02..003d7de 100644 Binary files a/unitconfig.o and b/unitconfig.o differ diff --git a/unitrenderer.cpp b/unitrenderer.cpp index 9b5e3d3..e187247 100644 --- a/unitrenderer.cpp +++ b/unitrenderer.cpp @@ -1,4 +1,5 @@ #include "unitrenderer.h" +#include "pathfinder.h" #include #include @@ -92,7 +93,10 @@ void UnitRenderer::renderUnits( const QMatrix4x4 &projection, const QMatrix4x4 &vMatrix, const QVector3D &lightDir, - int selectedUnitId) + int selectedUnitId, + int cityViewRadius, + int cityViewTileX, + int cityViewTileY) { if (!m_initialized || !m_program) return; @@ -103,6 +107,12 @@ void UnitRenderer::renderUnits( // 1. Render Cities (as stylized hexagonal / cylindrical city bastions) for (const auto &c : cities) { + if (cityViewRadius >= 0) { + if (c.tileX != cityViewTileX || c.tileY != cityViewTileY) { + continue; + } + } + const Player *p = players.getPlayer(c.playerId); QColor col = p ? p->primaryColor : QColor(100, 100, 100); @@ -125,6 +135,12 @@ void UnitRenderer::renderUnits( for (const auto &unit : units) { if (unit->isDead()) continue; + if (cityViewRadius >= 0) { + if (Pathfinder::hexDistance(cityViewTileX, cityViewTileY, unit->tileX, unit->tileY) > cityViewRadius) { + continue; + } + } + const Player *player = players.getPlayer(unit->playerId); QColor col = player ? player->primaryColor : QColor(200, 200, 200); diff --git a/unitrenderer.h b/unitrenderer.h index 56f5c20..3b4e87b 100644 --- a/unitrenderer.h +++ b/unitrenderer.h @@ -27,7 +27,10 @@ public: const QMatrix4x4 &projection, const QMatrix4x4 &vMatrix, const QVector3D &lightDir, - int selectedUnitId + int selectedUnitId, + int cityViewRadius = -1, + int cityViewTileX = -1, + int cityViewTileY = -1 ); static QPointF projectToScreen( diff --git a/unitrenderer.o b/unitrenderer.o index d50a59d..acd7736 100644 Binary files a/unitrenderer.o and b/unitrenderer.o differ