From 35a10d48cc98ed5c262a68cfd0340ab9c3ac2a4d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 26 Sep 2012 14:12:55 -0700 Subject: [PATCH 01/20] remove the uneeded save_data test utility function --- tests/python_tests/multi_tile_raster_test.py | 4 +--- tests/python_tests/raster_symbolizer_test.py | 11 +---------- tests/python_tests/utilities.py | 14 -------------- 3 files changed, 2 insertions(+), 27 deletions(-) diff --git a/tests/python_tests/multi_tile_raster_test.py b/tests/python_tests/multi_tile_raster_test.py index ce2854f31..fff685487 100644 --- a/tests/python_tests/multi_tile_raster_test.py +++ b/tests/python_tests/multi_tile_raster_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python from nose.tools import * -from utilities import execution_path, save_data, contains_word +from utilities import execution_path, contains_word import os, mapnik @@ -40,8 +40,6 @@ def test_multi_tile_policy(): im = mapnik.Image(_map.width, _map.height) mapnik.render(_map, im) - save_data('test_multi_tile_policy.png', im.tostring('png')) - # test green chunk eq_(im.view(0,64,1,1).tostring(), '\x00\xff\x00\xff') eq_(im.view(127,64,1,1).tostring(), '\x00\xff\x00\xff') diff --git a/tests/python_tests/raster_symbolizer_test.py b/tests/python_tests/raster_symbolizer_test.py index f285c615f..9e7870703 100644 --- a/tests/python_tests/raster_symbolizer_test.py +++ b/tests/python_tests/raster_symbolizer_test.py @@ -1,7 +1,7 @@ #!/usr/bin/env python from nose.tools import * -from utilities import execution_path, save_data, contains_word +from utilities import execution_path, contains_word import os, mapnik @@ -51,8 +51,6 @@ def test_dataraster_coloring(): im = mapnik.Image(_map.width,_map.height) mapnik.render(_map, im) - # save a png somewhere so we can see it - save_data('test_dataraster_coloring.png', im.tostring('png')) imdata = im.tostring() # we have some values in the [20,30) interval so check that they're colored assert contains_word('\xff\xff\x00\xff', imdata) @@ -135,8 +133,6 @@ def test_raster_with_alpha_blends_correctly_with_background(): mim = mapnik.Image(WIDTH, HEIGHT) mapnik.render(map, mim) - save_data('test_raster_with_alpha_blends_correctly_with_background.png', - mim.tostring('png')) imdata = mim.tostring() # All white is expected assert contains_word('\xff\xff\xff\xff', imdata) @@ -166,8 +162,6 @@ def test_raster_warping(): im = mapnik.Image(_map.width,_map.height) mapnik.render(_map, im) - # save a png somewhere so we can see it - save_data('test_raster_warping.png', im.tostring('png')) imdata = im.tostring() assert contains_word('\xff\xff\x00\xff', imdata) @@ -195,9 +189,6 @@ def test_raster_warping_does_not_overclip_source(): im = mapnik.Image(_map.width,_map.height) mapnik.render(_map, im) - # save a png somewhere so we can see it - save_data('test_raster_warping_does_not_overclip_source.png', - im.tostring('png')) assert im.view(0,200,1,1).tostring()=='\xff\xff\x00\xff' if __name__ == "__main__": diff --git a/tests/python_tests/utilities.py b/tests/python_tests/utilities.py index f76c5e54a..b47df7be4 100644 --- a/tests/python_tests/utilities.py +++ b/tests/python_tests/utilities.py @@ -15,20 +15,6 @@ class TodoPlugin(ErrorClassPlugin): todo = ErrorClass(Todo, label='TODO', isfailure=False) -def save_data(filename, data, key='MAPNIK_TEST_DATA_DIR'): - """Saves bytestring 'data' into os.environ[key]/filename if - key in os.environ""" - if key in os.environ: - dir = os.environ[key] - if not os.path.exists(dir): - os.makedirs(dir) - fname = os.path.join(dir, filename) - f = open(fname, 'w') - try: - f.write(data) - finally: - f.close() - def contains_word(word, bytestring_): """ Checks that a bytestring contains a given word. len(bytestring) should be From 8228d99186457919fa92cfaf85f5f3bbe47343c6 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 27 Sep 2012 16:02:14 +0100 Subject: [PATCH 02/20] + cleanups: use preincrement iterators in for loop etc .. --- include/mapnik/simplify_converter.hpp | 32 ++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/include/mapnik/simplify_converter.hpp b/include/mapnik/simplify_converter.hpp index 83e9a0235..b551287e7 100644 --- a/include/mapnik/simplify_converter.hpp +++ b/include/mapnik/simplify_converter.hpp @@ -17,7 +17,8 @@ namespace mapnik { -struct weighted_vertex : private boost::noncopyable { +struct weighted_vertex : private boost::noncopyable +{ vertex2d coord; double weight; weighted_vertex *prev; @@ -27,20 +28,23 @@ struct weighted_vertex : private boost::noncopyable { coord(coord_), weight(std::numeric_limits::infinity()), prev(NULL), - next(NULL) { } + next(NULL) {} - double nominalWeight() { + double nominalWeight() + { if (prev == NULL || next == NULL || coord.cmd != SEG_LINETO) { return std::numeric_limits::infinity(); } - vertex2d& A = prev->coord; - vertex2d& B = next->coord; - vertex2d& C = coord; + vertex2d const& A = prev->coord; + vertex2d const& B = next->coord; + vertex2d const& C = coord; return std::abs((double)((A.x - C.x) * (B.y - A.y) - (A.x - B.x) * (C.y - A.y))) / 2.0; } - struct ascending_sort { - bool operator() (const weighted_vertex *a, const weighted_vertex *b) { + struct ascending_sort + { + bool operator() (const weighted_vertex *a, const weighted_vertex *b) + { return b->weight > a->weight; } }; @@ -360,7 +364,8 @@ private: } } - status init_vertices_visvalingam_whyatt() { + status init_vertices_visvalingam_whyatt() + { typedef std::set VertexSet; typedef std::vector VertexList; @@ -371,13 +376,13 @@ private: v_list.push_back(new weighted_vertex(vtx)); } - if (!v_list.size()) { + if (v_list.empty()) { return status_ = process; } // Connect the vertices in a linked list and insert them into the set. VertexSet v; - for (VertexList::iterator i = v_list.begin(); i != v_list.end(); i++) + for (VertexList::iterator i = v_list.begin(); i != v_list.end(); ++i) { (*i)->prev = i == v_list.begin() ? NULL : *(i - 1); (*i)->next = i + 1 == v_list.end() ? NULL : *(i + 1); @@ -415,9 +420,10 @@ private: v.clear(); // Traverse the remaining list and insert them into the vertex cache. - for (VertexList::iterator i = v_list.begin(); i != v_list.end(); i++) + for (VertexList::iterator i = v_list.begin(); i != v_list.end(); ++i) { - if ((*i)->weight >= tolerance_) { + if ((*i)->weight >= tolerance_) + { vertices_.push_back((*i)->coord); } delete *i; From 03315ff893fd42a430c6af4e0ef6489a97c444b7 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 27 Sep 2012 16:03:21 +0100 Subject: [PATCH 03/20] + formatting --- include/mapnik/util/vertex_iterator.hpp | 84 ++++++++++++------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/include/mapnik/util/vertex_iterator.hpp b/include/mapnik/util/vertex_iterator.hpp index 5cc794078..256903463 100644 --- a/include/mapnik/util/vertex_iterator.hpp +++ b/include/mapnik/util/vertex_iterator.hpp @@ -33,55 +33,55 @@ namespace mapnik { namespace util { - template - class vertex_iterator - : public boost::iterator_facade< vertex_iterator, - typename boost::tuple const, - boost::forward_traversal_tag - > +template +class vertex_iterator + : public boost::iterator_facade< vertex_iterator, + typename boost::tuple const, + boost::forward_traversal_tag + > +{ + +public: + typedef typename boost::tuple value_type; + typedef vertex_vector container_type; + + vertex_iterator() + : v_(SEG_END,0,0), + vertices_(), + pos_(0) + {} + + explicit vertex_iterator(container_type const& vertices) + : vertices_(&vertices), + pos_(0) { + increment(); + } - public: - typedef typename boost::tuple value_type; - typedef vertex_vector container_type; +private: + friend class boost::iterator_core_access; - vertex_iterator() - : v_(SEG_END,0,0), - vertices_(), - pos_(0) - {} + void increment() + { + boost::get<0>(v_) = vertices_->get_vertex(pos_++, &boost::get<1>(v_), &boost::get<2>(v_)); + } - explicit vertex_iterator(container_type const& vertices) - : vertices_(&vertices), - pos_(0) - { - increment(); - } + bool equal( vertex_iterator const& other) const + { + return boost::get<0>(v_) == boost::get<0>(other.v_); + } - private: - friend class boost::iterator_core_access; + value_type const& dereference() const + { + return v_; + } - void increment() - { - boost::get<0>(v_) = vertices_->get_vertex(pos_++, &boost::get<1>(v_), &boost::get<2>(v_)); - } + value_type v_; + container_type const *vertices_; + unsigned pos_; +}; - bool equal( vertex_iterator const& other) const - { - return boost::get<0>(v_) == boost::get<0>(other.v_); - } - - value_type const& dereference() const - { - return v_; - } - - value_type v_; - container_type const *vertices_; - unsigned pos_; - }; - - }} +}} #endif // MAPNIK_VERTEX_ITERATOR_HPP From 42bcf4ea98181c7662d9403962562c2b4ebcf338 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 27 Sep 2012 16:04:29 +0100 Subject: [PATCH 04/20] + make WKT generator templated on geometry type - the goal is to be able to use generator for any type that implements 'vertex' concept --- include/mapnik/util/geometry_to_wkt.hpp | 4 +- .../mapnik/util/geometry_wkt_generator.hpp | 76 +++++++++++-------- src/wkt/wkt_generator.cpp | 45 ++++++----- 3 files changed, 71 insertions(+), 54 deletions(-) diff --git a/include/mapnik/util/geometry_to_wkt.hpp b/include/mapnik/util/geometry_to_wkt.hpp index bd7e0268b..31cd67802 100644 --- a/include/mapnik/util/geometry_to_wkt.hpp +++ b/include/mapnik/util/geometry_to_wkt.hpp @@ -40,7 +40,7 @@ bool to_wkt(std::string & wkt, mapnik::geometry_type const& geom) { typedef std::back_insert_iterator sink_type; sink_type sink(wkt); - wkt_generator generator(true); + wkt_generator generator(true); bool result = karma::generate(sink, generator, geom); return result; } @@ -49,7 +49,7 @@ bool to_wkt(std::string & wkt, mapnik::geometry_container const& geom) { typedef std::back_insert_iterator sink_type; sink_type sink(wkt); - wkt_multi_generator generator; + wkt_multi_generator generator; bool result = karma::generate(sink, generator, geom); return result; } diff --git a/include/mapnik/util/geometry_wkt_generator.hpp b/include/mapnik/util/geometry_wkt_generator.hpp index e2c4eb220..edb17838c 100644 --- a/include/mapnik/util/geometry_wkt_generator.hpp +++ b/include/mapnik/util/geometry_wkt_generator.hpp @@ -25,7 +25,6 @@ // mapnik #include -#include // boost #include @@ -36,17 +35,17 @@ #include #include #include - +#include //#define BOOST_SPIRIT_USE_PHOENIX_V3 1 namespace boost { namespace spirit { namespace traits { // make gcc and darwin toolsets happy. -template <> -struct is_container - : mpl::false_ -{}; +//template <> +//struct is_container +// : mpl::false_ +//{}; }}} @@ -58,34 +57,41 @@ namespace phoenix = boost::phoenix; namespace detail { +template struct get_type { template struct result { typedef int type; }; - int operator() (geometry_type const& geom) const + int operator() (Geometry const& geom) const { return static_cast(geom.type()); } }; +template struct get_first { - template - struct result { typedef geometry_type::value_type const type; }; + typedef T geometry_type; - geometry_type::value_type const operator() (geometry_type const& geom) const + template + struct result { typedef typename geometry_type::value_type const type; }; + + typename geometry_type::value_type const operator() (geometry_type const& geom) const { - geometry_type::value_type coord; - boost::get<0>(coord) = geom.vertex(0,&boost::get<1>(coord),&boost::get<2>(coord)); + typename geometry_type::value_type coord; + geom.rewind(0); + boost::get<0>(coord) = geom.vertex(&boost::get<1>(coord),&boost::get<2>(coord)); return coord; } }; - +template struct multi_geometry_ { - template + typedef T geometry_container; + + template struct result { typedef bool type; }; bool operator() (geometry_container const& geom) const @@ -94,9 +100,12 @@ struct multi_geometry_ } }; +template struct multi_geometry_type { - template + typedef T geometry_container; + + template struct result { typedef boost::tuple type; }; boost::tuple operator() (geometry_container const& geom) const; @@ -113,10 +122,13 @@ struct wkt_coordinate_policy : karma::real_policies } -template +template struct wkt_generator : - karma::grammar + karma::grammar { + typedef Geometry geometry_type; + typedef typename boost::remove_pointer::type coord_type; + wkt_generator(bool single = false); // rules karma::rule wkt; @@ -126,33 +138,35 @@ struct wkt_generator : karma::rule coords; karma::rule, geometry_type const& ()> coords2; - karma::rule point_coord; - karma::rule polygon_coord; + karma::rule point_coord; + karma::rule polygon_coord; // phoenix functions - phoenix::function _type; - phoenix::function _first; + phoenix::function > _type; + phoenix::function > _first; // - karma::real_generator > coord_type; + karma::real_generator > coordinate; }; -template +template struct wkt_multi_generator : - karma::grammar >, geometry_container const& ()> + karma::grammar >, GeometryContainer const& ()> { + typedef GeometryContainer geometry_contaner; + typedef boost::remove_pointer::type geometry_type; wkt_multi_generator(); // rules - karma::rule >, geometry_container const& ()> wkt; - karma::rule geometry; + karma::rule >, GeometryContainer const& ()> wkt; + karma::rule geometry; karma::rule single_geometry; - karma::rule multi_geometry; - wkt_generator path; + karma::rule multi_geometry; + wkt_generator path; // phoenix - phoenix::function is_multi; - phoenix::function _multi_type; - phoenix::function _type; + phoenix::function > is_multi; + phoenix::function > _multi_type; + phoenix::function > _type; // karma::symbols geometry_types; }; diff --git a/src/wkt/wkt_generator.cpp b/src/wkt/wkt_generator.cpp index f9d82efb6..e4c82e0a5 100644 --- a/src/wkt/wkt_generator.cpp +++ b/src/wkt/wkt_generator.cpp @@ -24,19 +24,22 @@ #if BOOST_VERSION >= 104700 +#include #include #include #include namespace mapnik { namespace util { -boost::tuple detail::multi_geometry_type::operator() (geometry_container const& geom) const +template +boost::tuple detail::multi_geometry_type::operator() (T const& geom) const { + typedef T geometry_container; unsigned type = 0u; bool collection = false; - geometry_container::const_iterator itr = geom.begin(); - geometry_container::const_iterator end = geom.end(); + typename geometry_container::const_iterator itr = geom.begin(); + typename geometry_container::const_iterator end = geom.end(); for ( ; itr != end; ++itr) { @@ -50,8 +53,8 @@ boost::tuple detail::multi_geometry_type::operator() (geometry_co return boost::tuple(type, collection); } -template -wkt_generator::wkt_generator(bool single) +template +wkt_generator::wkt_generator(bool single) : wkt_generator::base_type(wkt) { using boost::spirit::karma::uint_; @@ -62,50 +65,50 @@ wkt_generator::wkt_generator(bool single) using boost::spirit::karma::_r1; using boost::spirit::karma::eps; using boost::spirit::karma::string; - + wkt = point | linestring | polygon ; - + point = &uint_(mapnik::Point)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "Point("] .else_[_1 = "("]] << point_coord [_1 = _first(_val)] << lit(')') ; - + linestring = &uint_(mapnik::LineString)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "LineString("] .else_[_1 = "("]] << coords << lit(')') ; - + polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "Polygon("] .else_[_1 = "("]] << coords2 << lit("))") ; - - point_coord = &uint_ << coord_type << lit(' ') << coord_type + + point_coord = &uint_ << coordinate << lit(' ') << coordinate ; - + polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1] << string[ if_ (_r1 > 1) [_1 = "),("] .else_[_1 = "("] ] | &uint_ << ",") - << coord_type + << coordinate << lit(' ') - << coord_type + << coordinate ; - + coords2 %= *polygon_coord(_a) ; - + coords = point_coord % lit(',') ; } -template -wkt_multi_generator::wkt_multi_generator() +template +wkt_multi_generator::wkt_multi_generator() : wkt_multi_generator::base_type(wkt) { using boost::spirit::karma::lit; @@ -138,10 +141,10 @@ wkt_multi_generator::wkt_multi_generator() } -template struct mapnik::util::wkt_generator >; -template struct mapnik::util::wkt_multi_generator >; +template struct mapnik::util::wkt_generator, mapnik::geometry_type>; +template struct mapnik::util::wkt_multi_generator, mapnik::geometry_container >; }} -#endif \ No newline at end of file +#endif From 2427daa40399dddfd2d6c551e217cdd11e771fe6 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 27 Sep 2012 16:04:29 +0100 Subject: [PATCH 05/20] + make WKT generator templated on geometry type - the goal is to be able to use generator for any type that implements 'vertex' concept --- include/mapnik/util/geometry_to_wkt.hpp | 4 +- .../mapnik/util/geometry_wkt_generator.hpp | 76 +++++++++++-------- src/wkt/wkt_generator.cpp | 45 ++++++----- 3 files changed, 71 insertions(+), 54 deletions(-) diff --git a/include/mapnik/util/geometry_to_wkt.hpp b/include/mapnik/util/geometry_to_wkt.hpp index bd7e0268b..31cd67802 100644 --- a/include/mapnik/util/geometry_to_wkt.hpp +++ b/include/mapnik/util/geometry_to_wkt.hpp @@ -40,7 +40,7 @@ bool to_wkt(std::string & wkt, mapnik::geometry_type const& geom) { typedef std::back_insert_iterator sink_type; sink_type sink(wkt); - wkt_generator generator(true); + wkt_generator generator(true); bool result = karma::generate(sink, generator, geom); return result; } @@ -49,7 +49,7 @@ bool to_wkt(std::string & wkt, mapnik::geometry_container const& geom) { typedef std::back_insert_iterator sink_type; sink_type sink(wkt); - wkt_multi_generator generator; + wkt_multi_generator generator; bool result = karma::generate(sink, generator, geom); return result; } diff --git a/include/mapnik/util/geometry_wkt_generator.hpp b/include/mapnik/util/geometry_wkt_generator.hpp index e2c4eb220..edb17838c 100644 --- a/include/mapnik/util/geometry_wkt_generator.hpp +++ b/include/mapnik/util/geometry_wkt_generator.hpp @@ -25,7 +25,6 @@ // mapnik #include -#include // boost #include @@ -36,17 +35,17 @@ #include #include #include - +#include //#define BOOST_SPIRIT_USE_PHOENIX_V3 1 namespace boost { namespace spirit { namespace traits { // make gcc and darwin toolsets happy. -template <> -struct is_container - : mpl::false_ -{}; +//template <> +//struct is_container +// : mpl::false_ +//{}; }}} @@ -58,34 +57,41 @@ namespace phoenix = boost::phoenix; namespace detail { +template struct get_type { template struct result { typedef int type; }; - int operator() (geometry_type const& geom) const + int operator() (Geometry const& geom) const { return static_cast(geom.type()); } }; +template struct get_first { - template - struct result { typedef geometry_type::value_type const type; }; + typedef T geometry_type; - geometry_type::value_type const operator() (geometry_type const& geom) const + template + struct result { typedef typename geometry_type::value_type const type; }; + + typename geometry_type::value_type const operator() (geometry_type const& geom) const { - geometry_type::value_type coord; - boost::get<0>(coord) = geom.vertex(0,&boost::get<1>(coord),&boost::get<2>(coord)); + typename geometry_type::value_type coord; + geom.rewind(0); + boost::get<0>(coord) = geom.vertex(&boost::get<1>(coord),&boost::get<2>(coord)); return coord; } }; - +template struct multi_geometry_ { - template + typedef T geometry_container; + + template struct result { typedef bool type; }; bool operator() (geometry_container const& geom) const @@ -94,9 +100,12 @@ struct multi_geometry_ } }; +template struct multi_geometry_type { - template + typedef T geometry_container; + + template struct result { typedef boost::tuple type; }; boost::tuple operator() (geometry_container const& geom) const; @@ -113,10 +122,13 @@ struct wkt_coordinate_policy : karma::real_policies } -template +template struct wkt_generator : - karma::grammar + karma::grammar { + typedef Geometry geometry_type; + typedef typename boost::remove_pointer::type coord_type; + wkt_generator(bool single = false); // rules karma::rule wkt; @@ -126,33 +138,35 @@ struct wkt_generator : karma::rule coords; karma::rule, geometry_type const& ()> coords2; - karma::rule point_coord; - karma::rule polygon_coord; + karma::rule point_coord; + karma::rule polygon_coord; // phoenix functions - phoenix::function _type; - phoenix::function _first; + phoenix::function > _type; + phoenix::function > _first; // - karma::real_generator > coord_type; + karma::real_generator > coordinate; }; -template +template struct wkt_multi_generator : - karma::grammar >, geometry_container const& ()> + karma::grammar >, GeometryContainer const& ()> { + typedef GeometryContainer geometry_contaner; + typedef boost::remove_pointer::type geometry_type; wkt_multi_generator(); // rules - karma::rule >, geometry_container const& ()> wkt; - karma::rule geometry; + karma::rule >, GeometryContainer const& ()> wkt; + karma::rule geometry; karma::rule single_geometry; - karma::rule multi_geometry; - wkt_generator path; + karma::rule multi_geometry; + wkt_generator path; // phoenix - phoenix::function is_multi; - phoenix::function _multi_type; - phoenix::function _type; + phoenix::function > is_multi; + phoenix::function > _multi_type; + phoenix::function > _type; // karma::symbols geometry_types; }; diff --git a/src/wkt/wkt_generator.cpp b/src/wkt/wkt_generator.cpp index f9d82efb6..e4c82e0a5 100644 --- a/src/wkt/wkt_generator.cpp +++ b/src/wkt/wkt_generator.cpp @@ -24,19 +24,22 @@ #if BOOST_VERSION >= 104700 +#include #include #include #include namespace mapnik { namespace util { -boost::tuple detail::multi_geometry_type::operator() (geometry_container const& geom) const +template +boost::tuple detail::multi_geometry_type::operator() (T const& geom) const { + typedef T geometry_container; unsigned type = 0u; bool collection = false; - geometry_container::const_iterator itr = geom.begin(); - geometry_container::const_iterator end = geom.end(); + typename geometry_container::const_iterator itr = geom.begin(); + typename geometry_container::const_iterator end = geom.end(); for ( ; itr != end; ++itr) { @@ -50,8 +53,8 @@ boost::tuple detail::multi_geometry_type::operator() (geometry_co return boost::tuple(type, collection); } -template -wkt_generator::wkt_generator(bool single) +template +wkt_generator::wkt_generator(bool single) : wkt_generator::base_type(wkt) { using boost::spirit::karma::uint_; @@ -62,50 +65,50 @@ wkt_generator::wkt_generator(bool single) using boost::spirit::karma::_r1; using boost::spirit::karma::eps; using boost::spirit::karma::string; - + wkt = point | linestring | polygon ; - + point = &uint_(mapnik::Point)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "Point("] .else_[_1 = "("]] << point_coord [_1 = _first(_val)] << lit(')') ; - + linestring = &uint_(mapnik::LineString)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "LineString("] .else_[_1 = "("]] << coords << lit(')') ; - + polygon = &uint_(mapnik::Polygon)[_1 = _type(_val)] << string[ phoenix::if_ (single) [_1 = "Polygon("] .else_[_1 = "("]] << coords2 << lit("))") ; - - point_coord = &uint_ << coord_type << lit(' ') << coord_type + + point_coord = &uint_ << coordinate << lit(' ') << coordinate ; - + polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1] << string[ if_ (_r1 > 1) [_1 = "),("] .else_[_1 = "("] ] | &uint_ << ",") - << coord_type + << coordinate << lit(' ') - << coord_type + << coordinate ; - + coords2 %= *polygon_coord(_a) ; - + coords = point_coord % lit(',') ; } -template -wkt_multi_generator::wkt_multi_generator() +template +wkt_multi_generator::wkt_multi_generator() : wkt_multi_generator::base_type(wkt) { using boost::spirit::karma::lit; @@ -138,10 +141,10 @@ wkt_multi_generator::wkt_multi_generator() } -template struct mapnik::util::wkt_generator >; -template struct mapnik::util::wkt_multi_generator >; +template struct mapnik::util::wkt_generator, mapnik::geometry_type>; +template struct mapnik::util::wkt_multi_generator, mapnik::geometry_container >; }} -#endif \ No newline at end of file +#endif From bb27ab5d1bf3613f568858c83856c6be591548b1 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 27 Sep 2012 16:03:21 +0100 Subject: [PATCH 06/20] + formatting --- include/mapnik/util/vertex_iterator.hpp | 84 ++++++++++++------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/include/mapnik/util/vertex_iterator.hpp b/include/mapnik/util/vertex_iterator.hpp index 5cc794078..256903463 100644 --- a/include/mapnik/util/vertex_iterator.hpp +++ b/include/mapnik/util/vertex_iterator.hpp @@ -33,55 +33,55 @@ namespace mapnik { namespace util { - template - class vertex_iterator - : public boost::iterator_facade< vertex_iterator, - typename boost::tuple const, - boost::forward_traversal_tag - > +template +class vertex_iterator + : public boost::iterator_facade< vertex_iterator, + typename boost::tuple const, + boost::forward_traversal_tag + > +{ + +public: + typedef typename boost::tuple value_type; + typedef vertex_vector container_type; + + vertex_iterator() + : v_(SEG_END,0,0), + vertices_(), + pos_(0) + {} + + explicit vertex_iterator(container_type const& vertices) + : vertices_(&vertices), + pos_(0) { + increment(); + } - public: - typedef typename boost::tuple value_type; - typedef vertex_vector container_type; +private: + friend class boost::iterator_core_access; - vertex_iterator() - : v_(SEG_END,0,0), - vertices_(), - pos_(0) - {} + void increment() + { + boost::get<0>(v_) = vertices_->get_vertex(pos_++, &boost::get<1>(v_), &boost::get<2>(v_)); + } - explicit vertex_iterator(container_type const& vertices) - : vertices_(&vertices), - pos_(0) - { - increment(); - } + bool equal( vertex_iterator const& other) const + { + return boost::get<0>(v_) == boost::get<0>(other.v_); + } - private: - friend class boost::iterator_core_access; + value_type const& dereference() const + { + return v_; + } - void increment() - { - boost::get<0>(v_) = vertices_->get_vertex(pos_++, &boost::get<1>(v_), &boost::get<2>(v_)); - } + value_type v_; + container_type const *vertices_; + unsigned pos_; +}; - bool equal( vertex_iterator const& other) const - { - return boost::get<0>(v_) == boost::get<0>(other.v_); - } - - value_type const& dereference() const - { - return v_; - } - - value_type v_; - container_type const *vertices_; - unsigned pos_; - }; - - }} +}} #endif // MAPNIK_VERTEX_ITERATOR_HPP From 43ded34222d5ddbadad47d2b432b0d12c48c9bec Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 27 Sep 2012 18:58:50 -0700 Subject: [PATCH 07/20] visual tests: don't output debug by default and handle exceptions from rendering --- tests/visual_tests/compare.py | 6 +++++- tests/visual_tests/test.py | 21 +++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tests/visual_tests/compare.py b/tests/visual_tests/compare.py index 43bd251d9..70cef5345 100644 --- a/tests/visual_tests/compare.py +++ b/tests/visual_tests/compare.py @@ -24,6 +24,10 @@ def compare_pixels(pixel1, pixel2): else: return False +def fail(actual,expected): + global errors + errors.append(('N/A', actual, expected)) + # compare two images and return number of different pixels def compare(actual, expected): global errors @@ -65,7 +69,7 @@ def summary(generate=False): else: print "Could not verify %s: No reference image found!" % error[1] else: - print "Failed: %d different pixels:\n\t%s (actual)\n\t%s (expected)" % error + print "Failed: %s different pixels:\n\t%s (actual)\n\t%s (expected)" % error sys.exit(1) else: print 'All %s tests passed: \x1b[1;32m✓ \x1b[0m' % passed diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 1fe3167cf..280d74e20 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -2,9 +2,11 @@ # -*- coding: utf-8 -*- import mapnik +mapnik.logger.set_severity(mapnik.severity_type.None) + import sys import os.path -from compare import compare, summary +from compare import compare, summary, fail defaults = { 'sizes': [(500, 100)] @@ -66,13 +68,16 @@ def render(filename, width, height, bbox, quiet=False): if not os.path.exists('/tmp/mapnik-visual-images'): os.makedirs('/tmp/mapnik-visual-images') actual = os.path.join("/tmp/mapnik-visual-images", '%s-%d-agg.png' % (filename, width)) - mapnik.render_to_file(m, actual) - diff = compare(actual, expected) - if diff > 0: - print "-"*80 - print '\x1b[33mError:\x1b[0m %u different pixels' % diff - print "-"*80 - + try: + mapnik.render_to_file(m, actual) + diff = compare(actual, expected) + if diff > 0: + print "-"*80 + print '\x1b[33mError:\x1b[0m %u different pixels' % diff + print "-"*80 + except Exception, e: + sys.stderr.write(e.message + '\n') + fail(actual,expected) return m if __name__ == "__main__": From a7670459d62312aca764fb0ac3671f5281e20c2a Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 27 Sep 2012 19:11:11 -0700 Subject: [PATCH 08/20] add testcase for #1508 to visual tests --- .../tiff-opaque-edge-gdal-600-reference.png | Bin 0 -> 38046 bytes .../tiff-opaque-edge-raster-256-reference.png | Bin 0 -> 38046 bytes .../styles/tiff-opaque-edge-gdal.xml | 17 +++++++++++++++++ .../styles/tiff-opaque-edge-raster.xml | 18 ++++++++++++++++++ tests/visual_tests/test.py | 12 +++++++----- 5 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png create mode 100644 tests/visual_tests/images/tiff-opaque-edge-raster-256-reference.png create mode 100644 tests/visual_tests/styles/tiff-opaque-edge-gdal.xml create mode 100644 tests/visual_tests/styles/tiff-opaque-edge-raster.xml diff --git a/tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png b/tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..ce326349090cbf57a1d57c52eccb3363d936b0f7 GIT binary patch literal 38046 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%0ABeARKg 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 literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/tiff-opaque-edge-raster-256-reference.png b/tests/visual_tests/images/tiff-opaque-edge-raster-256-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..ce326349090cbf57a1d57c52eccb3363d936b0f7 GIT binary patch literal 38046 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%0ABeARKg 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 literal 0 HcmV?d00001 diff --git a/tests/visual_tests/styles/tiff-opaque-edge-gdal.xml b/tests/visual_tests/styles/tiff-opaque-edge-gdal.xml new file mode 100644 index 000000000..5d62e2d8b --- /dev/null +++ b/tests/visual_tests/styles/tiff-opaque-edge-gdal.xml @@ -0,0 +1,17 @@ + + + + + + test + + ../../data/raster/river.tiff + gdal + + + + \ No newline at end of file diff --git a/tests/visual_tests/styles/tiff-opaque-edge-raster.xml b/tests/visual_tests/styles/tiff-opaque-edge-raster.xml new file mode 100644 index 000000000..ec5519725 --- /dev/null +++ b/tests/visual_tests/styles/tiff-opaque-edge-raster.xml @@ -0,0 +1,18 @@ + + + + + + test + + ../../data/raster/river.tiff + raster + 0,0,256,210 + + + + \ No newline at end of file diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 280d74e20..699946a3a 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -52,12 +52,14 @@ files = [ {'name': "tiff-alpha-gradient-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-raster", 'sizes':[(600,400)]}, + {'name': "tiff-opaque-edge-gdal", 'sizes':[(600,400)]}, + {'name': "tiff-opaque-edge-raster", 'sizes':[(256,256)]}, + ] def render(filename, width, height, bbox, quiet=False): if not quiet: - print "Rendering style \"%s\" with size %dx%d ... \x1b[1;32m✓ \x1b[0m" % (filename, width, height) - print "-"*80 + print "Rendering style \"%s\" with size %dx%d ..." % (filename, width, height), m = mapnik.Map(width, height) mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), False) if bbox is not None: @@ -72,9 +74,9 @@ def render(filename, width, height, bbox, quiet=False): mapnik.render_to_file(m, actual) diff = compare(actual, expected) if diff > 0: - print "-"*80 - print '\x1b[33mError:\x1b[0m %u different pixels' % diff - print "-"*80 + print '\x1b[31mError:\x1b[0m %u different pixels' % diff + else: + print '\x1b[1;32m✓ \x1b[0m' except Exception, e: sys.stderr.write(e.message + '\n') fail(actual,expected) From 8135ac8ac1e37e7f22544c313d5dbf1b684f57ef Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 27 Sep 2012 19:18:07 -0700 Subject: [PATCH 09/20] add more color to the visual test output --- tests/visual_tests/compare.py | 5 +++-- tests/visual_tests/test.py | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/visual_tests/compare.py b/tests/visual_tests/compare.py index 70cef5345..933309433 100644 --- a/tests/visual_tests/compare.py +++ b/tests/visual_tests/compare.py @@ -57,7 +57,8 @@ def summary(generate=False): global errors global passed print "-"*80 - print "Visual text rendering summary:", + print "Visual text rendering summary:" + print "-"*80 if len(errors) != 0: for error in errors: if (error[0] is None): @@ -69,7 +70,7 @@ def summary(generate=False): else: print "Could not verify %s: No reference image found!" % error[1] else: - print "Failed: %s different pixels:\n\t%s (actual)\n\t%s (expected)" % error + print "\x1b[34m%s different pixels\x1b[0m:\n\t%s (\x1b[31mactual\x1b[0m)\n\t%s (\x1b[32mexpected\x1b[0m)" % error sys.exit(1) else: print 'All %s tests passed: \x1b[1;32m✓ \x1b[0m' % passed diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 699946a3a..dd3057810 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -59,7 +59,7 @@ files = [ def render(filename, width, height, bbox, quiet=False): if not quiet: - print "Rendering style \"%s\" with size %dx%d ..." % (filename, width, height), + print "\"%s\" with size %dx%d ..." % (filename, width, height), m = mapnik.Map(width, height) mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), False) if bbox is not None: @@ -74,9 +74,9 @@ def render(filename, width, height, bbox, quiet=False): mapnik.render_to_file(m, actual) diff = compare(actual, expected) if diff > 0: - print '\x1b[31mError:\x1b[0m %u different pixels' % diff + print '\x1b[31m✘\x1b[0m (\x1b[34m%u different pixels\x1b[0m)' % diff else: - print '\x1b[1;32m✓ \x1b[0m' + print '\x1b[32m✓\x1b[0m' except Exception, e: sys.stderr.write(e.message + '\n') fail(actual,expected) From 446ef47242a918890e0670a27c5493e9f41106b0 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 27 Sep 2012 19:24:02 -0700 Subject: [PATCH 10/20] Add test file --- tests/data/raster/river.tiff | Bin 0 -> 217266 bytes tests/visual_tests/test.py | 9 +++++---- 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 tests/data/raster/river.tiff diff --git a/tests/data/raster/river.tiff b/tests/data/raster/river.tiff new file mode 100644 index 0000000000000000000000000000000000000000..1f68f396dc716a9125fc0bec7d952ca069d23ca5 GIT binary patch literal 217266 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 R8@=AYHc9>Odpw7u{tueYPG$fA literal 0 HcmV?d00001 diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index dd3057810..0958b552c 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -73,10 +73,11 @@ def render(filename, width, height, bbox, quiet=False): try: mapnik.render_to_file(m, actual) diff = compare(actual, expected) - if diff > 0: - print '\x1b[31m✘\x1b[0m (\x1b[34m%u different pixels\x1b[0m)' % diff - else: - print '\x1b[32m✓\x1b[0m' + if not quiet: + if diff > 0: + print '\x1b[31m✘\x1b[0m (\x1b[34m%u different pixels\x1b[0m)' % diff + else: + print '\x1b[32m✓\x1b[0m' except Exception, e: sys.stderr.write(e.message + '\n') fail(actual,expected) From 02e7aef9c9f7adab30c511532bb57d3dc4f9ed63 Mon Sep 17 00:00:00 2001 From: artemp Date: Fri, 28 Sep 2012 09:43:29 +0100 Subject: [PATCH 11/20] + restore g++/darwin fix - #1507 --- include/mapnik/util/geometry_wkt_generator.hpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/include/mapnik/util/geometry_wkt_generator.hpp b/include/mapnik/util/geometry_wkt_generator.hpp index edb17838c..ee75c3dbd 100644 --- a/include/mapnik/util/geometry_wkt_generator.hpp +++ b/include/mapnik/util/geometry_wkt_generator.hpp @@ -42,14 +42,13 @@ namespace boost { namespace spirit { namespace traits { // make gcc and darwin toolsets happy. -//template <> -//struct is_container -// : mpl::false_ -//{}; +template <> +struct is_container + : mpl::false_ +{}; }}} - namespace mapnik { namespace util { namespace karma = boost::spirit::karma; From 77e585895fc8a7e4e178808fa6f5641736986603 Mon Sep 17 00:00:00 2001 From: artemp Date: Fri, 28 Sep 2012 16:37:21 +0100 Subject: [PATCH 12/20] + add premultiplied_alpha method to image_reader * tiff - TIFFTAG_EXTRASAMPLES * png - non-premultiplied alpha (http://www.libpng.org/pub/png/spec/1.1/PNG-Rationale.html) * jpeg - no-alpha channel, ensure pre-multiplied model --- include/mapnik/image_reader.hpp | 1 + src/jpeg_reader.cpp | 1 + src/png_reader.cpp | 1 + src/tiff_reader.cpp | 20 ++++++++++++++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/include/mapnik/image_reader.hpp b/include/mapnik/image_reader.hpp index bb8d30198..bda9b735e 100644 --- a/include/mapnik/image_reader.hpp +++ b/include/mapnik/image_reader.hpp @@ -53,6 +53,7 @@ struct MAPNIK_DECL image_reader { virtual unsigned width() const=0; virtual unsigned height() const=0; + virtual bool premultiplied_alpha() const=0; virtual void read(unsigned x,unsigned y,image_data_32& image)=0; virtual ~image_reader() {} }; diff --git a/src/jpeg_reader.cpp b/src/jpeg_reader.cpp index c98dddb49..df03314f9 100644 --- a/src/jpeg_reader.cpp +++ b/src/jpeg_reader.cpp @@ -50,6 +50,7 @@ public: ~JpegReader(); unsigned width() const; unsigned height() const; + inline bool premultiplied_alpha() const { return true ;} void read(unsigned x,unsigned y,image_data_32& image); private: void init(); diff --git a/src/png_reader.cpp b/src/png_reader.cpp index 0cde465f5..dde14ed70 100644 --- a/src/png_reader.cpp +++ b/src/png_reader.cpp @@ -46,6 +46,7 @@ public: ~png_reader(); unsigned width() const; unsigned height() const; + bool premultiplied_alpha() const { return false; } //http://www.libpng.org/pub/png/spec/1.1/PNG-Rationale.html void read(unsigned x,unsigned y,image_data_32& image); private: void init(); diff --git a/src/tiff_reader.cpp b/src/tiff_reader.cpp index effb6551b..8cf5f89ae 100644 --- a/src/tiff_reader.cpp +++ b/src/tiff_reader.cpp @@ -64,7 +64,7 @@ private: int tile_width_; int tile_height_; tiff_ptr tif_; - + bool premultiplied_alpha_; public: enum TiffType { generic=1, @@ -75,6 +75,7 @@ public: virtual ~tiff_reader(); unsigned width() const; unsigned height() const; + bool premultiplied_alpha() const; void read(unsigned x,unsigned y,image_data_32& image); private: tiff_reader(const tiff_reader&); @@ -103,7 +104,8 @@ tiff_reader::tiff_reader(std::string const& file_name) height_(0), rows_per_strip_(0), tile_width_(0), - tile_height_(0) + tile_height_(0), + premultiplied_alpha_(false) { init(); } @@ -132,6 +134,16 @@ void tiff_reader::init() { read_method_=stripped; } + //TIFFTAG_EXTRASAMPLES + uint16 extrasamples; + uint16* sampleinfo; + TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES, + &extrasamples, &sampleinfo); + if (extrasamples == 1 && + sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA) + { + premultiplied_alpha_ = true; + } } else { @@ -156,6 +168,10 @@ unsigned tiff_reader::height() const return height_; } +bool tiff_reader::premultiplied_alpha() const +{ + return premultiplied_alpha_; +} void tiff_reader::read(unsigned x,unsigned y,image_data_32& image) { From 3ffe8ec21cd98f15fba3fb1a66f3a648c3daf52c Mon Sep 17 00:00:00 2001 From: artemp Date: Fri, 28 Sep 2012 16:43:05 +0100 Subject: [PATCH 13/20] + add premultiplied_alpha flag to mapnik::raster --- include/mapnik/raster.hpp | 8 +++++--- plugins/input/raster/raster_featureset.cpp | 2 +- src/agg/process_raster_symbolizer.cpp | 4 +++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/mapnik/raster.hpp b/include/mapnik/raster.hpp index d48cf6bd0..2a9951966 100644 --- a/include/mapnik/raster.hpp +++ b/include/mapnik/raster.hpp @@ -32,11 +32,13 @@ struct raster { box2d ext_; image_data_32 data_; - raster(box2d const& ext,image_data_32 const& data) + bool premultiplied_alpha_; + raster(box2d const& ext,image_data_32 const& data, bool premultiplied_alpha = false) : ext_(ext), - data_(data) {} + data_(data), + premultiplied_alpha_(premultiplied_alpha) + {} }; } #endif // MAPNIK_RASTER_HPP - diff --git a/plugins/input/raster/raster_featureset.cpp b/plugins/input/raster/raster_featureset.cpp index affe873be..9d7c0b4d1 100644 --- a/plugins/input/raster/raster_featureset.cpp +++ b/plugins/input/raster/raster_featureset.cpp @@ -113,7 +113,7 @@ feature_ptr raster_featureset::next() image_data_32 image(width,height); reader->read(x_off, y_off, image); - feature->set_raster(boost::make_shared(intersect, image)); + feature->set_raster(boost::make_shared(intersect, image,reader->premultiplied_alpha())); } } } diff --git a/src/agg/process_raster_symbolizer.cpp b/src/agg/process_raster_symbolizer.cpp index 2830b2564..d8f145a7d 100644 --- a/src/agg/process_raster_symbolizer.cpp +++ b/src/agg/process_raster_symbolizer.cpp @@ -96,7 +96,9 @@ void agg_renderer::process(raster_symbolizer const& sym, filter_radius); } } - composite(current_buffer_->data(), target.data_, sym.comp_op(), sym.get_opacity(), start_x, start_y, true); + composite(current_buffer_->data(), target.data_, + sym.comp_op(), sym.get_opacity(), + start_x, start_y, !source->premultiplied_alpha_); } } } From 76dec5076e7d2a645eb58c8c16720665ef02b2cf Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 28 Sep 2012 11:19:20 -0700 Subject: [PATCH 14/20] fix up expected results for testcases being developed for #1508 --- .../tiff-opaque-edge-gdal-256-reference.png | Bin 0 -> 10551 bytes .../tiff-opaque-edge-gdal-600-reference.png | Bin 38046 -> 0 bytes .../tiff-opaque-edge-raster-256-reference.png | Bin 38046 -> 10551 bytes tests/visual_tests/test.py | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 tests/visual_tests/images/tiff-opaque-edge-gdal-256-reference.png delete mode 100644 tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png diff --git a/tests/visual_tests/images/tiff-opaque-edge-gdal-256-reference.png b/tests/visual_tests/images/tiff-opaque-edge-gdal-256-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..cb90dea1d2dac74767ed6303d607135ce50e70aa GIT binary patch literal 10551 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%0A=n2mv0rcNiFN0T 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 xaD1chrY1xJ40TO(%CsFL{vXwsV{HHc literal 0 HcmV?d00001 diff --git a/tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png b/tests/visual_tests/images/tiff-opaque-edge-gdal-600-reference.png deleted file mode 100644 index ce326349090cbf57a1d57c52eccb3363d936b0f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38046 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%0ABeARKg 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 diff --git a/tests/visual_tests/images/tiff-opaque-edge-raster-256-reference.png b/tests/visual_tests/images/tiff-opaque-edge-raster-256-reference.png index ce326349090cbf57a1d57c52eccb3363d936b0f7..cb90dea1d2dac74767ed6303d607135ce50e70aa 100644 GIT binary patch literal 10551 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%0A=n2mv0rcNiFN0T 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 xaD1chrY1xJ40TO(%CsFL{vXwsV{HHc literal 38046 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%0ABeARKg zmt+wtNpiozzjEhKCFx6#Px>h@%G7>4a2^y&gj1g}n*Ykexlb`t^pEC~-%d-tUR`kB zJ>=8%9w54apSaMJIdh6G6&Y$P4g`JR%!-V>%NvE__8fe1c(jMec4tKWrKPrKe9(R~iHD7L z#3(&>g4M?rm}kSSb4xjGMS$_-cy3we-pBa$SI#J@26uWMc7)cz;B)RO717<0gMwBI zSO?Wg0>u{7&hHq8fTeOP2_9%x>7Dt&QX8=w)bR1Sc6M#VxTzX#@0CnVYdnWwKaj#J zSGBBzDUtu$wcIFuKU~buZoV|i{hWMNk2;t9dG23WTyl+>bVM$KJRbA3!W;slAy{~X zPYn4@@JNUpkg{57+LV49RbRic#rM^Ge=M>3YMGd=PT_&CyaPH_SVsC?FwQx_6c*S= zl}7gD_mTQC+_65G<&B2e2H8_2Yk~7}T_Dn;xAJ+~GY>e^!-mP$ejiwDY^ZSBB2%M; znSzAS2*@jQ~MlS7}Qe0JksZ0mbz8H+o;>ylJ zxk5tsVo5mq{T{iRxo|-$J&$dqGw)58=b{6;vU7;vD0%jOv8U3?NYVE#R%*3mG;?S7 zG}mbVas8uDro55wpSXIf$`ivZck0EK)%nsL;=#a-e`bN>wJfzG8^0FH;OvDN?sbPU zgjP~wsprEzIq0UqKztR7Dy&tyPgM)&gIaDfyWGdKUAKh`TJ?;14(1WFDCS>>4mE?o zI6d?F^B8THB7>MzY_0d4lJeMZKb(9rG%}0OX!;XPs0dR1`XSNwRZ=&{8ojyJ!y6;R zia-85G1MR)F~}RmOdkp)z82Oeh+=xh4slg*ElxQ>2q&2bJ(Cryiqmc$TOP7r_SB4h ztpfPVd!#>ZAqHV}p2Q_%KTy(Som%XV(ra~U{@SQESDXrug>a2< zd>_r*Mz&f)cKcoNgPg^xU&+DFSo( zc+-ia;hQqfcvJ&p*(2SUUlDW166fOi>frQWw-i*TpH`a(|8%Z#Gy7@Ngc@$h)kr$C7b< z{`eM&Yw5YJ(qw>&?B!BOB-Oe_STQ+WhC(f8IJUZ#dt$am!YF!qPlN{E{6^#=B9>zV z%Ol?J5H0#M>>6=qrm27oL)!RStw*F8wAM(K8xD|MBejTzg6i_k-*$Fp-%PVNHMFzq zqM-(RkmK6Y>VG5azLVAe0*p1r+Mhe&Xgg`gojF7Fn1b)Nf@*J@toV$cZ~opq}g*KX?(8Lqx;OXBfj zoJJa(Y>N(qkKp4}DT36eol%D#H?;N+XFs+b-#g#AY_?f4-bP76Jk0)zp@_*O(%P4z zOJ|c)rqmC1(5?A=ANPW)vvUtjjdpy)!Vm@NVxBn3Wx@c)0RJPj5%#4hEt)L(rQ!DT z58VNB7h^RNW2G)Jdd!z8f7PfP~EV&99AvY7aH7h z6@O%|ZKv*ZMf0nbOJCNYmiSR_$TnsUA0@Um$@d(>4v|)$8Q*>Hz2x*4nwR^f3gom`~M`&amCo5hh7Li zBiV{vDjT{q#qV$u-c2sVs&^Tf$&C`>YiSOEe%-u)vTrzo{x*4kgfWlW+iC^4c>~?a z`ay+6HY%(hVZl`UcTxfwuJGZl5G4zPZ-;-6YkeD03x0w@mS{}aKSbP0Tu+b5xn)^) zC774OO;=n#WV7`mJNS2XqPl{1;?i5k7+Fwc`h%#=r1meP%lY^8MAZRvyt=YqYYEwOC`sKpahLEaRVA*7J#cXKP`S~k12ZnSR|Nuuz3G! z_Y3h^aG$uPzf|i>75j-Pwd;teR`J{JbCi5ZQ3d1Gqx-Sjps|!|%fy2bx!jE|uU|h8 zOgv_?RVS(8JZX5$yJqeSsiCIEx)r<5zxEIQ@?ej*&7>J#Sj^$)zcC*jQ{m2Ib)(b# zj=t1qCc&OvmT)mD+Bqn?E&?6MKlZYgy?*O>0|91B(*krw&EOj>we{Wi5A-({9xNim z7vi4>fH3`(TYjVUz3BVBzjg9(pB|6&%6gxepi<8^yPW+GE>f0H3cEbH4q(rsuN<}Q zNhcN~34_XcJ@9%@{dpD{vB~yjg(BaD;d@c)W&}Cnj7QfBEC>FmW^5I(;JnEve$e?t z?~17wp_#X^m4kN1i+NtpG8D%RdTsP(QOZ=iRF*(%@+H@=(zSm@%nYBXB<*AQ?1}2t zk2P~cSeuAFzaN;BHYW`=L{Ue;f|u(Rs!*Z4wlV-6ic%yi_-MFdtu6x=I9ap zg*M9Ci0+-Bq(?MeeKq;i>X{$A$=@HpPE8w%|D=W_xaW>^R6C2`BIFxB0ka7tFA)c3 zZttjux_I+7&+v#iFMlSG`DujR8iA_i}R9XUj+uFjN%^0Ll!;&pl|r571_bw!Z(!eMfbu3|(N zI$D}2?HhUT*Lp^tyPdtlLH z9O=;K3|ec{Sv^I+6{3NUtQf4_U{R3~;)d>XJI;r_^s5^dP>(;m`1BF$PuQ8woz0U} zfYy1=8)A%@0*9hQS3*DiTK0Rw7dNuDri~-7`iyVz)uO#6N%0HM!emNfD`GYTomX1P zGr_-*%bMM*6`#Jig|g%$rpr3Ym)SAyq6hjfjI@59Z-p8C&xMc5jZdoSRDDyN38MdX z4~H&KGDs!y@NA5P233IGCgCGfpU|Ze5$M?uRpl@O)q zRwQeFI}B%6)UzZfT8sZ-aBnbZdF=WX+|g$6xTW`A#Kxltsq+sMM(CyJZ?RQvkOqbT zT|>He?g%*; zpRYNb+|1|I%T{*qef4x7;BK1kirT`J|KL|#V*V$jPu#e$LH!WiDHnSodlmRrp7GJ$ zS|hB84MKDC2S5C^j$w>yT1WlC*Yj;*WoSS{zYpq%>DuKb``4K&W_9LQ=#24D-UH*b zph8y@d3WWRKN%rmey=I6)IYN|Cmg+}lOc07lr}x)?7;9xehSx+_5jR z&p8m0oQDjewf>ochH47Dl9HBDo|KgL-WKA-?jYXlxCKQIVO`C`)S?F?t55|zT=8}? zdtFTGaSt-9pj=v`a_F-J<89Q4efWFC@umMh)S`Jw#`VWROGuIvNQ_l$|0_>4@V;Z=}7gMTf;xiKZ)%kUXLdWCxM&5|D%FE4j^rm`~_cDRWf z0r|a@I`@s>g2PiPIT2S>P&EFmlSmZIc<=8yImdzd2^|+E9};mEAmJ4(ha3UMjvV9r zWF8+%7~dDDCXxic-Rb;x?nhF4&%%E{pIG1)3Cf#s#5%y`qCNdWVreW|HGzf<4x*yES6N~ySuH`RSl0C3oK4?D(Rb>m=NEIR#f@C9`I-LhIm3u^ zc0YrKErSx}8Y>t~po>y{0IH_S4UaryQo0c|H< z8SP-^C}J{<>{|EYPfk{r7i)$i)pZ+F^z3uf_ck?^yB^92mTO#S6jl^vv8kI5>dYT!06TM?cKNJ)V_H+;ptNfK&Qx~Ot z(_Iw3%Xr4q>ajYLm#e1PET4#3-p5vUR&S}cL0?ue$*X>5pfn8a*uQ|@jJ-wIN+R5g zR1~KYn>~wDw1iU2a>f5*e3E0Nj8wH)m4fk=5#8d+C!sV*@m5pV>t)R?rfGbdT(yFp zQm7TYlzo=t_=Jt;R8aQy?bd9nq$aC?kB!AbUfjCRDMp8^ugwKMLPr(C;w@0fMNeMhnBAB4VelUHUox_f`X3fn-wLjL2;B6I7iA*>?X>fvWLB}Nj z(|k(v2BQ4^;!VQ-tdf?gl!SXo&-%i;f2eNQ`^O;t@_M+p_N>+&0Y0Z?B`y9$dkrQX zJu@H6;*JthFKP68XfT+E_vsxEa?-lPWJ=*B5h{2c8Cp#`5lYNt)S_|FGdwWdY~Sd| z)lg!#kD_=eO$mVp>DEd!%~o5%#3XqyY(Jd6MVHMZv@P8z)ONBBXeF8Qr!@ITV-vbh zOGHi$4*Kx9QVI@WKDiNv<-_Iv(AG=Yev8x5q8DFm6P_JPRf_BNLtPb$2UOM$)$3O* z(|xE2k!(r2tyk^pFPfjypPX$f_YO9E3F|J=cbk@&d149VS=hFR)G}YL2B&igUZaQ& z%w11AKWvV_q=I!=>*n5GbElDCx0mhwz_LhDYW!fh9>R<0LYM84ul6!nr2Mt^4 z>22hCSuG`&>axTtSifg1g4|0!!ryLJ4Xos5T%+(~SGO#=c;DZ(k?Aqr8SP|=)w5HM z{qkyVThaH2Pv``=VN=@I#B(Hnp`t6aHnQkaF)X2nuP(h}nYn9!OVB6c7dQCy<=cN9 zOp6?Dsks^un!fMQ=uaUtJ?iVuLaD+gsIfNBf)V23YDe*)v(nvbH`hu0r=CCLlC&i$ zh@;dCh)y01LE%MrWkZ+{`1j`?L^lO=>HVv&ks+?zS~IIeD=d_1o1C29$zcm`laldJ zh3TlEV@+3r^%n;*-AjlplT}Pw#xZ-5T}G+$zwgTkkk{uG8P7U+qD-rmZ^8&;D8d6= zh2&{4Nqv@E_mNev0%ii9<>WH-V#yYutT5d^%~lJ#KEVrSIOLEB==Z<}w{EdL2sM>v zs~b%jEM8Kg!c7QnKel|okv2ot26{4NLXLqcMX6$r*N#fQ1qI^}aTQ5*8vO2wAZ4wj zq=tu1hb(&;^UnXl8lBeVNYUC-F#gwrlc7ba?;IM<_`%pMI0Gq$7y^2_%EsTd{M6m_ zS4tb(Hy)%Hd6k11ISENG%kZ9MPVaY%N>n;zq3v?V=tQRXM;{2L%gZU-x`q!9ExH&g z-#VKGC1JYjfrCLZ_N6=LDfnZ7?#JDgp^y9Wt(`omUs_YT62Hh`4_E}pIl5dx4YEg4P=;}j> z*+3DTr1^n{GifQQAyog`Jlsd&-d#gD4XABU<}72W+4< zuX=W2vzC8zZi!Km{wZ1~{kWUsT@d7dVcF~c(&iFL2cRBit8^l`HI(_u`aqFUaC765LH+vX%B;c$9H`I?T-KqVBZe+eP7z)$a9Dn8@#&aPQ|cH24W| zZ_Bt$gQxIHo*j1rh$Hn`GF*#WATDZ)GB$H*5=~;KdxGt_S&&KPv*GYBABdZBTU{nL zz>>;UIlcF49Rq?bOtK-$?nF;onGyhgW%$E(%s@O-!Tkkvi)q&G3OQt>m|8u19i{I40$)|iF6Xp!V*%B)8K=DTK8le42_HV`eF{5-Uu$#%TaNwkMdw84Jdh3cC}$qd?rG-~d2qs;ew z4}+VY5=~Ze5&k%G&v@;J&{P$seIm)EnCXJtqzG58ugN{Pg8rV7<%GV7tg(_d68M;o zC`hM#{Iuk}%a=Hqknq?QIQsm|T@Np$?YlSn&f3x|Kw0-wrNca3j~%&$t}?M3{Dj`e40 zovAk)4|cr*eHWFQQ{OlgM_gHB&CHW@>+-HCcPdO&NK6K_W`7+`ZF+4Udpq!+8lJS~ z-^k|#u_pP6_*s9f(ZU;O+Z21?es(kQ0lJSk&bOz=t0yp6k%svGw0<9V zPn)VZL*Qg4fYeO9U)~t8$30si5jP1^s~C;K0kTJ{tz8Z9Aik?^Xl3AB%`M*-hO{}n zfe3K(a`kq^D;#srla)Vd zhR=fWMD2NBOk+atguM`v3!F1W5RMdhA()bI;+dP-Hw{Ch-~kbo+>(1T4abcbop& z#v=F0fp6LAd28u#aU-eMwgLlD{BKwLwmumb5hK?`rmvKB8IjM1h<@R{P0{1`~>~HsR(~NkTg506H4q?zw-%s){=fyNQGC)L%6MA~UB? zzrP*tzgBsNf9|z(Xoq@SXXdpR5&CA!R8~gzLoN2;Ugo!Ve`u$fA9bO;L_80nbBd#R zvE}$zX1`X(JNUaSK_#K`!t^R1UDv?B*rhZ+`Y+Mnd5TFr#ZM$sOW1*@Y>fR&6XCDr z+Hnwa&SEZ#4DRP&|MaV1iy1rLIJIX>v>0)%aFF_sv=~S3p@fRK^FRPQ;Yct1<78Z~ zWa{|_fub`OWDRTnE%uY0$*91`is6f_9S>sLK4WQfFBK1(Ar}T5^Nb5g)Mh>dz1Zw0 zKT^}Sj0(L?-1DSp-nVRRDo3w}!M!2oEx(3y*>yLB6o~Xw4L240_mF^GI>I_^J;|sy++xqboT2)Qbnv+$MFa}+z zgmt3eh9pB0y1fI(9{bE@IEE zxjp~c{D%$uRNWRMh4}}dTzxirPV+{*37 zmNPdjm#M5Qgp}ghPutS;Q8b$=Hz}c~A5zX>bF?}s%1rfgt*cvX-|%Ynqo&VcNxNk6 zX7vviko{(Sjf#EF9V5L3K~!B!^1@`0!q_ z2L5Yy%>tz`gQGAcb$s*t8wN*U%bCsLh`Fk)Dlau-J_=`TUbf!b7nM^QA|!8Y?2#5w z3!EuyV)82n}sT2eALrOSt)TBqkoRC|+D$`Nrz-MN~}Q zvn?M`IcJ&8$Yr&ggq$=lyGYHizZW6LOy^i?&wIDOl`LJb9>X5dqp5yCG)`^$)x#X@ z?{dQX(zj-8^EWjM4$G{DU2luT1}LuUc=cgsk9B-AU?j{;0qP^PL$+?%+4O9k&pf)S z*TcxNw|MVb(xNeNQQ@~DQ4q?`jGgdzmtB61Oe`O9gHJp%WJfnH&?eTw$IA`!@^QTC zIR^}Az&ZTNBX_uWJYc?#4dX>YMDGIUgbwScBKa98O1@vW&@=J$g@RP1tWD?yV1GJCx^ou#GPVa+(jd-`IgT2Fph=;q* z|GK*=!d4Uxd7+5RQ76>Wz;J|*Wtfg7!D+%b1k$e6onni&3KS*>qT{^E~T zIU6ic-(&lc;25ntu6F^sz;EaFRH*s(ExL^c=aWbje|i8Hm*2FJb4k8DG30 zel5WAQ9Gm96W{%*0*sRkWWe*XwP^6MYt(nT&XsKz_re|az{I|PPgT+3ktNP*T{UFL zK-$=TNvkz=PQHMhc$)#WBo)H@7s?KLKEm6S?&AQ7w))rW;oXtSD_ zF%KSB$yHK~>c7@tOauB`{dQS?1Qv}7A^J32}d<`~3g@rZOsob`Dc#+65gfJSWl z4I6JggQMJGx3%BJ_;oE-P=FzIQivN5|7wErKTz_2j>s4$^UIR{_bjZUP{P(;&iuPV zVSrzebh0AhzdT_5g9&rSmaB-;6L!)Oou`Ys9UmkAs7IF^vGT+-dr65G;=H8qHdB>D zkf)@8{=^mZC;reGxl1%Iju(iqRe@lDLCk#)6L^K_HUfv-O>Hhgm$cNY@zK&>uwq>1 ze()iHy@F!nS7SGw*O|?O^ao#jGLEw=<2&dAC|3Vm9{B=8Rvfn}=`M%1pYJ{ikm#fO zQ~;pi@nK-G)k#}zw~N(DhiODBXK2u-gRq`P-vy1R0m!A{9?1a3N)}#-FqGHZv?Wzj zLDM0LvCvYHB=Wrvj+yZ-_-PnLz;>GhgBbSiZ-52oWW6~DaW;LsC2(!?rmDoaOkLvq zheVC2U+gWUO|LxP4%Z-D3kHtwSArE@jif%;a zi9^E$&;9#)UVPh#Y}YD1d-uHo;Iild@{#I3_+}rZ_XSsky6LXqppxr1&!NLfktqL| zOEk|RPC%Y8badVn;5zV{+9#%-zgyk-`~>Cm6Hs7D=iot-ukhdcD?7DUkBt_3*!8B8(gF< zx86(eW3%xduST@o*Be=R)7PtLW~llAtdj@=KzX?Cw`0L^+x5=Q zrZaHws`%)3pQ_AP_J8FB6Eh1L#iN|4(=g((^zfn%NvAYORb4ArOqsEkMi^cXTXG4F zbiIBIB&KD1H8lUn?uir4q3`?87WZJnbz{&Aq_q8cUV6gjOeVFSN1nf7i7N>QNKH}b z14Nv()Yy<=rwaj&qwJp%@KDfe*LGL4{E6_tnwZIV07Yx+48RWe1~?Oq0h%RyAQLSb z{}$v^Bo<_oZk`#)T4}6_ze#G)05A@X5zo$lN-W5vjyo4eT`l`Kn9jPNAc}|2nYEVO z|FnTkDF^+{jH0e))HWPTK=M_n9bWqKVLu0Jfu_H2cq-Qh2}8oGDb8aG_W^1L8WZ9U zUi1p12>d=A#U(F5um1blmd%-3ye2#iV5=-Sv2M0O%y0EDA(p02TR=oJb+i3eEkX1G zKNaFyHBSF|Kkc5DRh}T!^w;QcO0s)1)9^!N3BWe?CIEDn05&<~+&;wvYZmVzKF}Xu z0V<3`g}*b72!D5~>tFliPhj!WDEs$w8kE{wMje>gTqhx^L3BauRprK4{Pkd-le@&k~kE0!28I9_MjxIkA$8N?1qKWTL@C@q{^k0b46+p>pBg&8utu>q^s~0`>v- zOCztfCuen6k2()+Rn)Z?1rOsmOokCT6@a#Y0NTR4JL#ls{MV;rb2G(N5nEhV@ks6{ zy-3JW_JiAB(QNWu+`=aG7=vN>vBS*{zjhlD2BQ6Me7Dmpn0_wOcZmF0_4|)wC>Yo( zv{&#ssVZ{7KZ{(Rf_CBJb4Gt~B34HjEGrr)H^80H4l^I0mwo21d-)rw=8y@%mAagr zldlK;=3b2qI&)s&YC=Za@s9Axbpaq7V8+BLso2>?Y!BS@(>Cb#XVQMGZBUankBVWH z{aziwiNlRkgmLJJSg@=9JvKsBLcTaQ0#i@zkwmpn7&&4O);uzFKD=%Ot2EmPiUaKU zf7_AcL9O|H*kDKHJqAjso1(SXuN@=Gz8~p%L@)E;R=4nqSP5?uBDinRiP7<-x_o3o(PrtV;K_7! z*}O)o)MGXesM5I!33w9?D11zW&cm>=>8qYP-!65Kns96J9a!m1^hyV5z!^LyK5URlSJ0&3 z+;!u1bX70Di$K^D!`hyVM{zrSk$az9(8&o-B6eHg@oj=TSwcR;tu19Mdb|yM1cq9I z<-!pmheoMa75O8x7*JtUYGhNo8u0F)(2surl7|mfeT}V+!jPAxHp1wr30%7_Q(P+S zWc@nBn$wYA+;mes@B*95RN=h@YR7uARn-vUrX9Ol}?v<0Yq zEG$nNhhCoDJd}{0XBcz1c418f>pxrkPqXD1&?TVwy|O%)0O#l#iUPN!Dkl7R1C8DH z6gWAONt=H9*0c0)r+=~@B`Kh)fyR+I-{GH#=-yeG=V6F|Y>pQf-yGjvR0b-4xCihZ zv#Z@VH4pLIVq~<@x1t2VTI-i&_59KKCCyEkWCD|lW8m2oO&~~xoiK;xm)M{+(%fq$ zoPX$WcR6KaFbDf0qH1k3h(g~8Vc-O{v63d!E0K^93;p^?iExeJ%J9qz+6o9S1-Ljv zSqifFQW0$fmH_$`rp__8uWhO<+x%@7mzN}zQl7$?)sJUjm#u6J&zS_%VA|iLrsoOQ z39>&UTR^%AQFvzTE+M~=%Mv%pOMOlT9X<#7>!*6pDi1f!>l>HCcqtVCuY(_LFG%Jw z`S{(#8+4`QPy1syP7PN{y>&w3>3juGard?>qYrnzjBb8uB@8e6=LF*A?EhM}h0{?s zX<39Y$w|!=qsL#+r;UX8iIrFUrAOoOKcfN12Q)|eH2YW-Uw@8G8n}!5l!CJ;LW#S7 z{>rb$j=)zVbH*Qhvct)B30~Iw+Juq|@k?lG}Ru3^RJYnUdvxE8xvfPLQP8N@OZ@F8YRc@O9q04YG% zQpfprzxeb(67rO4K8pV(#OT_NTGI+M<-|#5$vU&l_WP2eh}1zE{O*=AQ7}eu zbMIqlvXOEcN^99<=Z#dCE&}!E{L5YfTaD13OB}RRT7{tBCpc|u3s!c1t6`IbrTOrq z3mF((ozULM{``~|p#5iVnsZbyX>XdyrEWpYCFlC(%`MK>zo0FUe!w{0U?j!Ik1T#Z zRPMG7!Fe2OL%7;5D(B3)RG77|M+v!K6CH*~Hv0FpT9goBPA?c*n$8HESQ@2eq14{T z3J4{{nlsIyl8i*Y86X=`ZXhPH!iR)X2wn*FWWN$ix z7LrfTe>Tt4$F%$0-YLEk#CG ze!}mv^JWdI#-7(u0vx^sMPm1Kg-?}i>h@57CT`C{A5mT=#1)dmRsu%MlS?3q&% z$XzwP6-p?g^2NAt`|~_e4?DG)UFv>u*d$ypOYQ(5pGE{L^sC1~+$?+SX$!aIIbd@8 z1|lTXS_{AFXG%ZYwcCRuBZ&kJQ*H;$Cu)SKv!=>xkH*4^CIfl&-FOKO9oyoHy<&|a zbSlZl4cjs^p9N<*Z#2g62abc0;fn?xPeO-9$+^L;iS~j@nkAsrZ^4&I9ID;&xw5dp zNb=AkZ5-wO#g8*98y1^8oYl^AFexaNc}aBkb(k=NHTS4pUcL1B*k_u`pksGky0F(R zWt&w?LRANAGy-#?BN;L?d^Ow*J{=BbZv6mG?_L8ito}nO3QKrDNu=>56^Qj@OzUEmhZ-}K^!ZQbEoxN&^JWr%l^l# zhhpI2>YE=iD1A}m$KDF`1HE(!%PO3lE(<=(gE#ec)0eo^iU8z)^)O%oyc~hsw z=gq0cuTHw8eG3i4vj_#eV4o0NJcoFNJ|?xt$Nl{pA6es0tsJrA3-728m%^P8Z^sk67-28#-lW#o($YH zODw4}@1ZF+X60#rSMmFYMRpwLe)vy*xiFL9I07BFoEL;ir8*|n1g*8ba8Zfxx$QjUg8gkX&#U>hfb=p*bLN^&_j>?yqE$5 z|1{B*q~(hBLB{~Y71)J4{Xv7*Q|$QD7m$!OX+MhN3|^FJwCm0o%b!2%l-Y!$5FhfE z|FS!gTS?9DOo(sn+rP{#wVuOEs7Ia;A_Ni^waOb*a;f<1fK*NLz0cX>DR5GCCp9vl0(GJ15oAt>}43IKWF1 zPTvSKC$w()I?$(h!0E|QHpm>x{U7>O{#M_I9_cG@V&t?wY(yaT{&tVg5 zxl%o4n}m=aK-pTGW}C-L2kS@-s>WKK4UEb5IMQpbbaTpc7!%!aehq+muO4Hp*#*{? z`+IOa`mpBBWL%)pv-@P@wS`U5q%KUqpMp~ugwy|1mr{*9{5=-8^QR+BwFB@5m_8uu z{NzsUS#{&hSP-VCGK-=Az0(D9`8KFnV|6Q5+VLh$2F$GI661){5k<_4o;_3nwu}2A zIk!Od;!Cd=v=Zu;ptVLyog@uO#GbEgr+fDxzWjg8>36xA_c-?Li{$dSS}TWoe$ADW zyQo2mZv6f75TZwuEi$WjDHdMen(k{|2pb_Q2+tG4_qX~J19H>cb&OMxjS>a&Brd(9 zjg^ViguL%TL)G8~;uD=q#1Tp;YI}|U(!^=z7+lq?Z_(gi9Zpl?cS>!}0oWd*fH2!6 z3^a2r_jVPEF#w%xWycy1z^v@Et)&qV3Y)yY>NiD)#mb<<^-Ngm8xYgYN!#{k+ibNi zt2F{$iQBEM+~$&1;ch}5-+;KLt<0{*U4d@SQ+VKOE|x;u!O?UHe`5PHJelXr33g|< z)l*&+CHvZK$BGdu7Glfced~8dJ-5r0!Drd4NQb<&#Kohg(1wSj|95GoifVC0!83oY zHMymf6RmdAPeG+KS7LNI_c_%Hp2!CL^9zdT*XjN% z)J=df|6W3^W3^JhksirA>S#fPD+uw1O@atic}7paQXFJ9oRWqvF=+gw1v(S`phdlM)R0B5P&_Y=zpzg8ciQD>;g06XvDK5 ze+tsTjSBwh`Bsdlr8VX0Y!$w4@jLd;=c$5Rp&m%i=G z1@pQG8!IZz26kMnzvvoLxrg0Wy-d`4fiRPIaIivv_|*C718F_vy@8yAr7i~~>+jh8 zlZ+6svhC*6|1^FF6Ickv#5`&^I)Q8raMDV!J&u|3x3&0Dl+`yCCTy?Z6E99^zpGXO z6F&+Vq9~Hqq#lHG-IP7|!s76$no6lHDmTr}@gNJol>OMG%r{#_=xre4firOJ+r(Eq zJp9pGAgd+}|s2fqTp&2dr1%ZQD(?KUarxpywy< zON`Rz&lb1DN~%SPb&DH1SxxZCmZ^&D8i-l;e4Z!AOpN`FP@z!Hdp{iO~ub6^aBEz2Slz z6Nx#n=fdHYy*+ zX)WLLL4!da|Gs_9<<<{Alumm&6{63Sj@U`M|DvM)+B&N-&{f2Hex$|I{%)%^@Go-f zE7hQMli9eF$;|Ar=4KAXnoQ#>SY?hm!r-OkT?;swNiB|3Ud;ReFaObz(B=xLKl-``l8 zz3aFi&@Dny>y~vME|=bNY~ZooyY9FY$32xd`sP4=NIVf841e}}{V1|aL_)i2>bN7v z>}%`wbVDSYXswY@=$0IupcGv5jzbSP457g8ixzG){5KI-_gMXMmGR}K`)4WZCm zlTlX@|3^DUnmEXy>xkw<>5Nm`a28n~Q1J(g^I2@EgjFlal$pHcG#pEc=lE|8puK@) zi?$apQoL%12Xym5Jly?KZD*-^)Sn{ES6x1CxpIX^qs-%lZOeh_TR2!TH;@}plLs5h z5+=riAB?1AW`hZ}_HwK*U-#Yca2VF?yy8p}+tcr660<2=nt^#E4l!i;1H;I^h%m+d z(W$tZwPWpt&Ro)Y$W^e_eZmwg%DXxcH{-=~L_!2G4hRd6@~Twc z0L(2j{Cy`Z*P|w*CL?_!>cZ>=zYq81AY)NTT(LS2X4K~K?77U{^`zIpZjH3(T)ZRNH8=hq5#aqk~H8uNq>h)!El-Y%gZ&@dSmuqvI0(MZfen>dC58 zoU0n9#y-uA<)UzgERr`Yk`}V#^tsIxLp!Veb#Wk@n2xmqt|13@6TLVQFAAl~*rV4% z+h{Nyzi(o%$G@VyPd;J_#=|)M(gG%;B)zBxdCLMr34uWp+yZ3X5DSS?%2ny*J`2Mh zVjhX%*Db$>HU=`2+q~dp+>xY3uR%Ez^b6a$o31rE?8Iz1DBhPt4Ocu8=X<@Otcw-_ zygEY~)18gXHBa5LE?X}zSpWYAWBz^jhUorE>hToTkVuD*w}vsr(=j5r#2iDzFejge z=g;}B0 zV$>~e?M#GE>X9n%xFSXEEG^2I->_b}qQ3MSmSdO8zsnF`U*6*K2 zRn-3#X5@oC@<&oho1Nw#@}oy?{O_GcYgRQLSa0pkC?h)uA*w?|PoLgD<}fI=shWlG zvXH~bQ=H|B{?>{s6x=S-7irptNmy{a;KlsNDVbXJS>#dZ$KDumAf0wX1h|w~mh;&U zY93CUi|^3PIT;!hId}uEZLA^h^qOy^xr{34ZCgXgUtxUJ+Aa>TPN{1&NbZEU^!IB; zdzsD(O12-3PxUDQuZ#Hv?Vn`KJLweO9KP*RSY#NyK-GTt( zJ1}R38%&x0j-xKC@Yo^;l)nj&-`8dxQo=Bh?68-6Iuz#0e9K^eXooG#Tca9kCOx`g z)jwYKs#&g4>A1Iakf!g&e|5kxNVEcp!(xLM*X-nWf^O`Y4NwfM;wDcSN1d4U5zS)M z{rSnsU77J?JV?k!v*v6 z6RM}Z-=0~?ObuS5BWNJXfBeG+iIhDsj8yk}BjB^I@11&|2 zfE0C;EW9r~{peo326kSDEYYXiUo8qB*Ew(W1U$PZhn+QpN~gajw0wfSZEx77p|WIP zf{4UMigI)NJo>(skA4aP`u^eUnskB~pMU(wRnj3_e7HS4X4N9n-pKHDi14W@+*qm} zh8S#4vH(5K$99xNa_YA>3Ox?U2c|;&6J={oXopJi8-Co!otOjHzjUf5epXG6SG@}! zgVTH7!fc0KYs-7Zan}En_(XYevlHqxorK-LKW$OF%1d;%}g zj|VFk(%H35R{2|47lVpxe+CC{%zI`IkJwKH#F8VZ?q{ndAbh1 z@4il{@*S@KI2~=;0k;{>6~{A9E#}?_)12I4OX6IZ#brnn?EzUO(Sffb8T}CSJOK3J z4~Twe{+oK2Qt`W17(PFt%V+m`9G~yWK%g#h*h2IF4i4y8J2&JYU~6Uk6(v})@)F@) zh;*Mi)}(6qazLj z*RMywbI^bDnzgKhX5^KB{!J3rkfAs!8$q+nPZ*p2Lg^yU2hY#{v>;mYHi*i0$e&Ox z7RtQ+JxfgSja|RtKQ)RR7yvR!t9`9j-W#ldzJbVq!`qKp`8AZDtE5GiQ@rf;T$IDl z3k^!{{&|m0qcBH!(2Gt|yHQg>A_>s~Ex=t9$6Q)!Ob+u{)YcN8<$X?mqE%?_f2iS; z#C4DO?A(6RT55CPEx2zKkGzlt5M%=Ap9uXa6Uihoi_v!QNDpN=^v32ur=pcrA2}6@ z!`Ktm`8_kf_G`ip!t7z}Vc*ueJs2I*M}I8{L*@-BZPDulm$Pw7iz;_e!c3#iF~Z8a z&>7n1XiO*YR$8it5ST7g4X6(gj8C{wCT}{=rS^CdrD)IvDsp(hXa z5dGVAdf+BohL%xjhJObX`btG_q1$1`|H;O}$2;0Ba|1S=F`}Agk$&hO_QdaHtz;r9 z=#|1ie};}00@n4%BHsOCra{LuQu7LPr9$WEcqprMs7XvryGm30*qSc|UX;Mc!@AG4 z?yTeyqe%z|3gDsOq^i(T<6RAmjMtu=&r5aTCBW%?w=m6pWHXs8v26`a4~RGZ9LQwu z5o}mJO*yZPUl>-aVMIHr-a-HV`)e=JcyAZ3Ol~Ek2YjekAg}wJ{gv2ay}KjwFK{_c z;ZssdwiP3JuOHN>c#&wK1^(f`HA%eEZ;i&{ZzP()JF0V29ap8?EFD*o5UH>75lhPZ z8b2G6>SuS!5SoG^mkNBS5b&XQptU$}S}16pIAGebY5UPWl9Q-n0XPsdyX5s5zYXVh ziI66MR{5Gd5}xq8E@3^>vsAW*aQ#FJ7)JR|lS_Y?=!DYgjeUgf>bWlOzQ#+=LV!Jr zV9wU1qDiy0;0n%EqrF9ZN3S?vA&taf1+=#SM0J2)o;1j}cp^lWe;c0YhWCA!g!S1- zM>JKD!Qd}&P7Ph~vV*;WqtTob-JCO5J?WO1U|GwyZF%pmJNy4xzx^K*AfA&q9A07i zA+V&*?u&$i(7vP+*meQKHAu7ORt+!SupC*X17vGyu3*l&-q4Mz!(s@C3+m?^515uT zfLI7BbAl_uKZ(1LRQ_Cg7~-VKu*T~eJjmBKXVg51Q;%?qf)>sG>Cx2W5jAFm{WS-N zxkH)@)A+2su1|7Zx+0-*SRVkRh9DtxRBqz|=A#o;YLJV`)#v_P+6}7?f!@By=Kb`= zwvSdjXXlsRKD{GAT3_r2#RFkSIzra8Ey&VYbaA|DZLwlLAqS8wRsiIupCBZf*d}Gv z`QuPlCpVcu?%$&qHA^>IHqr~Bvam&BO`PdW*o6Z0kAP16 z0NMA7^%J3^w6xkV;c=g43H2${!#>_DXduGw*-G8>N-E~;`4T$e7^vXqgxG=m#hyRi zaLL!kp%f_JF*Map@^iY*^-^Awccuaa{(s*@G6|aa6 z#kxyVX@-933p|7aWtDqTy0QgAfYabmtqNQv;O(Iwsi*o1*{KX5@TwQ>!R8TnMjy93Ab-{yRb%e;&U4s)2Et97f^Es$6hJ4Ahs zEBOts5LPQKp@P*0XesN?>NQ#}kxTWR$kZ*pgk6mb9bZijGSA28^%8dF>lQ{d>k<6& zDywk1sVzdp9DRaG}mO)5Bq3r5l{q56Vb-{6TD6T&d=zeCn$l<7a_55 zGL%%!^n!`-;hPJrHK~0^F1j$FT)^mR5wHWk8`9^Cqg z=~m61J@|e}&ql{=IW@Tfq_O@T5RBX_y#}DLNdXTWX7H>Z@1c@r$GjugTmeOJZPvh) zi7|$k1K+GyME_9!y)lKOIZ|$@UrTq$klEpV>%!uacu3gA8tJMW=Z&{=k`l7mH>3fF z0duGy<<8}6vR`Dx-*KCbaSBX)CPvE-za<6!iOv`Q;GZ(C8vLF1GBw!oZf85@OzK|O z$77ymQZL?5;AEBh54h^DCl6P>u~4#zN`^0rTq{qD^qrSi z!-%DOt{HU3Ao#0Bl4oP}zmFXK|1KS-?E(dy-so)JM}DyfBBwbRG+-mw>Oy2Ko%7g6 z50FlraXPB?>?%tNtnvjL!CWMlOx)?!b(jcDm4mAs)wa^7Oi=~~MLobFL$w-rM zHj4^|t|Jh~o`n24#nKP}KN-CGofu^tFNb6B0x(vFslT5I%-~aoK9bwm&4-vy$KJH0 zA$Aog*dD}|Fxom34Pu9@EnlV7;kZdhPP#FJ9nZ3d$_)Xs0SbS@L1M?p8>}V4X?rBr za?FN(0RZ)#*b6;xAIsNpYbyBGm0RyqPlk2)3C5THOCL<2Rkl^`#3OIJt^F)}0~h_2 zH=(H&sa*h_HFaE3SV)(;&;f_j2t(7Gc**PF#RLhE3DgJ z^bF3eQvwV-FPerfH#$&yG6p!jC+P|+KcZ)xH(W}$^Y%y@f|wvsYm(iRtmtDG`A;|} zi-;4(_?1nYDyj^tk56Tq7P)X{?(49RcbMFH#0WC_t~dxP`_30Lv_k>N^IEvWPeay3 zsxa!(no_5Ccm@uf^>@!~Os`O%QpDOsY5NU@xG;z6S=E6|a-aUC7z zC4Ce2LKYcog6TljI(CAs1^V7qCKAUiz6<3t?{hH`>$k>wu;u-&UNgX_>u~6HQNZ;%NiO;(S9$wBBQ$?siKGin! zVdA3x3eMdVpj3A&ZXd*l66x5k-(Vm4hoR5cQ>+%dj_ z{%q9}G6fg+AG9VHo4@wXnw?afg zpSL=+meJs#90^x{OoS7gxrCMPS8{e&kP$?6HR5u{vk`lyu>*z4KWlQa`w?iv&Al-Lzom5IZv)P*VXK z{(gLWVx-(kw8Ey7d8Bhmr-DE;WRz6=V3fD{EAi@2p!r!As@jzPq|5J-MjdR}dTTTY-;8(aD6W zsD_zg^f)WPnn;c%+Yi`#1%Wj2lJI7+!>rlzj$17-iZ+T5irs%q;U>OXJc>TQyRs>oGv<+Z;NYX>~|d z`mqwQ&lm^ne&kN>kKf92l;K&yJv@IzdiU?FyK4#m^Ju zp(LCHuv2`M%T5Y>;SEsJBVBnr8V|-+hkf^(q35I<^QBknz1)N}t4`l1Wnf=+cl;RjF3P!15&AgevIql7&PoEHz$Idj zL*Ws(*91r+P()N=YH#Z<4^xi1#ouOdh8A*l-l?-^=jI9n1o>JcWIzWAvq5>wj14*B zW{Bsxk-}CQ>t%EG=`zoYX;gpB4CiWYg#+BebxFE|BC4V2L}UDD_c{0==kWTiGii`J z?lfJS5Z6-w`h=eoWegKklMK${!rDo#=(P~br|V=N67P_n#sd@1ubpVcwe7lLE!#?=O>6heH--t^ch@kXzf?t;;RV z)0|M}vGN)7@Vqw#e+hNi9v_9e1c2w1SR0jloLs+)uKdzdnI|cgb2`@HK{c|cc3VWZ zYjqU>0@o1uFGOo-#6ztBT~4Nt(|La1qEBbisX59K?sn@OcnOAw2{%)%be~S*hpgP4 zac>JjXYdc^E_vx$>IFerp#wf%Z-u_r1hanX4&eM}Wq1}lt{0_$*|-Gj)Qt}UB*yQ?7RmB$|sed z<%|&h%VcE+;+Y^I8oN+vS_p~>&mv|@7-pyfzVhZ~QR|?`dXFH!8MY7Gi(9@@GJd1H z$CE-MXjF&k56*YP>-87p4;9tOgS+YZ6V zK;I=dx_;@hgSryL53&<)D^}t>`drw)Z-g`mMe!+{J7)x}vdgl&tz-<>n#ZpNcj81Q z?=J+w`;S%5>IyJ-y>26ik{ptS?-dNR$PvN7Tm4ZKR@zR?t3`VdUGwS<UW69974V=r_#3|yoz9w9vO?1r7%Kzeg57q4VB-Og;|_mUjkM!Xe6D5y z{O%noxGFLW8G33+uUX%I-(zpyAJVB*5T95k%v{yw6 zzvbKU>+)qJ`-#75>Yf6CXqbD@`E=%}H~iyt?c%#Y%H`CV-D-)iK+B=W5wMfdfBZ%J6ey}aV{wu2RkS9Aa)7>O z`Xj8=0x7Rjrwy9_`eL8~C6Cax%80|=z=p2n&Y+uxl^wPHJ z3{(Zg7b;vwAF6wwVM-~9xIT{^>(+bj}+GebhWBqTR)Y#6cHLYk9D~48IcV>6>sBFg5ZBU@I8~N|qiE$#@v&(hDe_0JixC%<5mn2<^%kZA!PC z=0g6X=0dDRWrC&QvU4) z^+zE2GM0QS^Tw5oF{V5O^AISgXZGJq*4Jj6qG76p%*&<+))Vf4$J88aWzX%B9HWc_ zO$U2kIp{p;l&Jmvl3Mz3Fd=@zaxMH&28#|23^!6Jm5F7pepLF!6T>bm93g^H`w|f3 z0T|}wfSpN*tWh_KPdeAXm|bJo76%hOt6P!Se2U>$o9_*9x%SNZV;a?X54OrXa}!2+ zN4%sXEtnltb|qGExX&8GO)^`#nIY0RqDV@P*B{l%Zzl-ktGgyGpO{*%zA@8l&j1=6ta%5hq$3o%vYev-wTj#Fm=SD}{IDn%GbY{F z1P~`veMiO6yzV};!X%Hh(vUaG*UAC(xV?`aj5Jb12-Z#VSl$c#H|KAgiPSJ^plA#} v_+_rAG^ZwKW^&caEf13d_@7A5`ugV}R;m#$wE0H=0PwRkN1K(SJY)U~)}XJb diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 0958b552c..5fbe4be36 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -52,7 +52,7 @@ files = [ {'name': "tiff-alpha-gradient-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-raster", 'sizes':[(600,400)]}, - {'name': "tiff-opaque-edge-gdal", 'sizes':[(600,400)]}, + {'name': "tiff-opaque-edge-gdal", 'sizes':[(256,256)]}, {'name': "tiff-opaque-edge-raster", 'sizes':[(256,256)]}, ] From 2714bdcef34a1088f43cce79b2d0dbbb2b548e34 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 28 Sep 2012 15:07:33 -0700 Subject: [PATCH 15/20] more test fixes to set up to enforce desired behavior around tiff and premultiplied alpha in source files - refs #1508 and #1511 --- .../white-alpha-assoc-alpha-correct.tiff | Bin 0 -> 2337 bytes ...iff => white-alpha-assoc-alpha-wrong.tiff} | Bin tests/visual_tests/compare.py | 27 +++++++++++------- ...-broken-assoc-alpha-gdal-600-reference.png | Bin 0 -> 4442 bytes ...roken-assoc-alpha-raster-600-reference.png | Bin 0 -> 4442 bytes .../images/tiff-alpha-gdal-600-reference.png | Bin 4442 -> 4441 bytes .../tiff-alpha-raster-600-reference.png | Bin 4442 -> 4441 bytes .../tiff-alpha-broken-assoc-alpha-gdal.xml | 21 ++++++++++++++ .../tiff-alpha-broken-assoc-alpha-raster.xml | 22 ++++++++++++++ tests/visual_tests/styles/tiff-alpha-gdal.xml | 2 +- .../visual_tests/styles/tiff-alpha-raster.xml | 2 +- tests/visual_tests/test.py | 18 ++++++------ 12 files changed, 72 insertions(+), 20 deletions(-) create mode 100644 tests/data/raster/white-alpha-assoc-alpha-correct.tiff rename tests/data/raster/{white-alpha.tiff => white-alpha-assoc-alpha-wrong.tiff} (100%) create mode 100644 tests/visual_tests/images/tiff-alpha-broken-assoc-alpha-gdal-600-reference.png create mode 100644 tests/visual_tests/images/tiff-alpha-broken-assoc-alpha-raster-600-reference.png create mode 100644 tests/visual_tests/styles/tiff-alpha-broken-assoc-alpha-gdal.xml create mode 100644 tests/visual_tests/styles/tiff-alpha-broken-assoc-alpha-raster.xml diff --git a/tests/data/raster/white-alpha-assoc-alpha-correct.tiff b/tests/data/raster/white-alpha-assoc-alpha-correct.tiff new file mode 100644 index 0000000000000000000000000000000000000000..2085393c442e13729e355b8b336cc44b1aed02f8 GIT binary patch literal 2337 zcmebD)MD7e&cIM{>+MxWUIqgJ=7pB?zwGPtKEQJOA2Y+HXT=OBK3g(;`6xE z){ecwZa%Za{PTU+u znHd-v7#O|)2}UF~6OhdU6hFqnz`zU@2QnGhpll`}n+wVY>E~r+Vh{$>e4Gpnf{ZL+ zGePQwkkp7m*&uVpplp!6;!yRgfvpEAMpm%iZ9vV^Q1(6`TL#G-4J5WEkPUJR(De+q zP;n674yYGI{{!l^2eR3K>~lbN5Rw|85Q7I0gWM0JIT#?2f$RF>|3J|2uqp&ZGn_r+ z1Ey!qoC%^E($dsG^aqU?elTB}HvmL4L|B5=muF;_r0OQ;=ar=vmFSgZrlm0e0PMcB A+yDRo literal 0 HcmV?d00001 diff --git a/tests/data/raster/white-alpha.tiff b/tests/data/raster/white-alpha-assoc-alpha-wrong.tiff similarity index 100% rename from tests/data/raster/white-alpha.tiff rename to tests/data/raster/white-alpha-assoc-alpha-wrong.tiff diff --git a/tests/visual_tests/compare.py b/tests/visual_tests/compare.py index 933309433..d2f05b08d 100644 --- a/tests/visual_tests/compare.py +++ b/tests/visual_tests/compare.py @@ -24,9 +24,9 @@ def compare_pixels(pixel1, pixel2): else: return False -def fail(actual,expected): +def fail(actual,expected,message): global errors - errors.append(('N/A', actual, expected)) + errors.append((message, actual, expected)) # compare two images and return number of different pixels def compare(actual, expected): @@ -56,12 +56,14 @@ def compare(actual, expected): def summary(generate=False): global errors global passed - print "-"*80 - print "Visual text rendering summary:" - print "-"*80 + if len(errors) != 0: - for error in errors: - if (error[0] is None): + msg = "Visual text rendering: %s failures" % len(errors) + print "-"*len(msg) + print msg + print "-"*len(msg) + for idx,error in enumerate(errors): + if error[0] is None: if generate: actual = open(error[1],'r').read() open(error[2],'wb').write(actual) @@ -69,9 +71,14 @@ def summary(generate=False): continue else: print "Could not verify %s: No reference image found!" % error[1] - else: - print "\x1b[34m%s different pixels\x1b[0m:\n\t%s (\x1b[31mactual\x1b[0m)\n\t%s (\x1b[32mexpected\x1b[0m)" % error + elif isinstance(error[0],int): + print str(idx+1) + ") \x1b[34m%s different pixels\x1b[0m:\n\t%s (\x1b[31mactual\x1b[0m)\n\t%s (\x1b[32mexpected\x1b[0m)" % error + elif isinstance(error[0],str): + print str(idx+1) + ") \x1b[31mfailure to run test:\x1b[0m %s" % error[0] sys.exit(1) else: - print 'All %s tests passed: \x1b[1;32m✓ \x1b[0m' % passed + msg = 'All %s visual tests passed: \x1b[1;32m✓ \x1b[0m' % passed + print "-"*len(msg) + print msg + print "-"*len(msg) sys.exit(0) diff --git a/tests/visual_tests/images/tiff-alpha-broken-assoc-alpha-gdal-600-reference.png b/tests/visual_tests/images/tiff-alpha-broken-assoc-alpha-gdal-600-reference.png new file mode 100644 index 0000000000000000000000000000000000000000..3c79bb304fcceb8156121a887dea740457e8b03e GIT binary patch literal 4442 zcmeAS@N?(olHy`uVBq!ia0y~yV2WU1V4T3g1{5hWm7Br9AgJi+;uumf=k2wHyv&R| zEC=6z`@LRap&@T%w3NY}CtK?5&VNqq{Lb3&{|aw%#Vh6?f&Ib_yI-{#R%|d^d7Se= zZ0TVMn~2$09 zJ#GCM-mQ{8_Tb>HC35Nv37?vy>kGLnJ{>|`njxgN@xNA zJ#GCM-mQ{8_Tb>HC35Nv37?vy>kGLnJ{>|`njxgN@xNAcym`rzQLWpWw}=2!nFeMra+ z<`-$0{i@EeV#BtT>|6(Yf#%vo+#WS{G!RBp!f19FEfYoy#?jhgw2B;UCyX|hMq7-d r&F0a*!)OO;v==$rl^(G1gc?RYS9=jtg{!5&Arl5qS3j3^P6 zJ#GCM-mQ{8_Tb>HC35Nv37?vy>kGLnJ{>|`njxgN@xNAcym`rzQLWpWw}=2!nFeMra+ z<`-$0{i@EeV#BtT>|6(Yf#%vo+#WS{G!RBp!f19FEfYoy#?jhgw2B;UCyX|hMq7-d r&F0a*!)OO;v==$rl^(G1gc?RYS9=jtg{!5&Arl5qS3j3^P6 zJ#GCM-mQ{8_Tb>HC35Nv37?vy>kGLnJ{>|`njxgN@xNA + + + + + + white + + + + ../../data/raster/white-alpha-assoc-alpha-wrong.tiff + gdal + + + + \ No newline at end of file diff --git a/tests/visual_tests/styles/tiff-alpha-broken-assoc-alpha-raster.xml b/tests/visual_tests/styles/tiff-alpha-broken-assoc-alpha-raster.xml new file mode 100644 index 000000000..61cdb9c47 --- /dev/null +++ b/tests/visual_tests/styles/tiff-alpha-broken-assoc-alpha-raster.xml @@ -0,0 +1,22 @@ + + + + + + + white + + + + ../../data/raster/white-alpha-assoc-alpha-wrong.tiff + raster + 1001859.9561,5922814.94334,1021141.75555,5942096.74279 + + + + \ No newline at end of file diff --git a/tests/visual_tests/styles/tiff-alpha-gdal.xml b/tests/visual_tests/styles/tiff-alpha-gdal.xml index e7fe88453..ce42b1a3f 100644 --- a/tests/visual_tests/styles/tiff-alpha-gdal.xml +++ b/tests/visual_tests/styles/tiff-alpha-gdal.xml @@ -11,7 +11,7 @@ srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"> white - ../../data/raster/white-alpha.tiff + ../../data/raster/white-alpha-assoc-alpha-correct.tiff gdal diff --git a/tests/visual_tests/styles/tiff-alpha-raster.xml b/tests/visual_tests/styles/tiff-alpha-raster.xml index ce9e2fb6c..a86c7603d 100644 --- a/tests/visual_tests/styles/tiff-alpha-raster.xml +++ b/tests/visual_tests/styles/tiff-alpha-raster.xml @@ -11,7 +11,7 @@ srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"> white - ../../data/raster/white-alpha.tiff + ../../data/raster/white-alpha-assoc-alpha-correct.tiff raster 1001859.9561,5922814.94334,1021141.75555,5942096.74279 diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py index 5fbe4be36..d647a258b 100755 --- a/tests/visual_tests/test.py +++ b/tests/visual_tests/test.py @@ -49,6 +49,8 @@ files = [ {'name': "line-offset", 'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)}, {'name': "tiff-alpha-gdal", 'sizes':[(600,400)]}, {'name': "tiff-alpha-raster", 'sizes':[(600,400)]}, + {'name': "tiff-alpha-broken-assoc-alpha-gdal", 'sizes':[(600,400)]}, + {'name': "tiff-alpha-broken-assoc-alpha-raster", 'sizes':[(600,400)]}, {'name': "tiff-alpha-gradient-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-gdal", 'sizes':[(600,400)]}, {'name': "tiff-nodata-edge-raster", 'sizes':[(600,400)]}, @@ -61,16 +63,16 @@ def render(filename, width, height, bbox, quiet=False): if not quiet: print "\"%s\" with size %dx%d ..." % (filename, width, height), m = mapnik.Map(width, height) - mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), False) - if bbox is not None: - m.zoom_to_box(bbox) - else: - m.zoom_all() expected = os.path.join(dirname, "images", '%s-%d-reference.png' % (filename, width)) - if not os.path.exists('/tmp/mapnik-visual-images'): - os.makedirs('/tmp/mapnik-visual-images') actual = os.path.join("/tmp/mapnik-visual-images", '%s-%d-agg.png' % (filename, width)) try: + mapnik.load_map(m, os.path.join(dirname, "styles", "%s.xml" % filename), False) + if bbox is not None: + m.zoom_to_box(bbox) + else: + m.zoom_all() + if not os.path.exists('/tmp/mapnik-visual-images'): + os.makedirs('/tmp/mapnik-visual-images') mapnik.render_to_file(m, actual) diff = compare(actual, expected) if not quiet: @@ -80,7 +82,7 @@ def render(filename, width, height, bbox, quiet=False): print '\x1b[32m✓\x1b[0m' except Exception, e: sys.stderr.write(e.message + '\n') - fail(actual,expected) + fail(actual,expected,str(e.message)) return m if __name__ == "__main__": From b9fed932b93e4f40daad54d44b287dd04f3fcaca Mon Sep 17 00:00:00 2001 From: artemp Date: Mon, 1 Oct 2012 10:20:10 +0100 Subject: [PATCH 16/20] + template vertex_iterator on path_type + rename vertex_iterator to path_iterator --- .../json/geometry_generator_grammar.hpp | 54 +++++++++---------- include/mapnik/util/container_adapter.hpp | 12 ++--- .../mapnik/util/geometry_svg_generator.hpp | 2 +- include/mapnik/util/geometry_to_svg.hpp | 1 - include/mapnik/util/geometry_to_wkt.hpp | 1 - ...{vertex_iterator.hpp => path_iterator.hpp} | 30 +++++------ src/wkt/wkt_generator.cpp | 2 +- 7 files changed, 49 insertions(+), 53 deletions(-) rename include/mapnik/util/{vertex_iterator.hpp => path_iterator.hpp} (71%) diff --git a/include/mapnik/json/geometry_generator_grammar.hpp b/include/mapnik/json/geometry_generator_grammar.hpp index a1915b062..408bbf212 100644 --- a/include/mapnik/json/geometry_generator_grammar.hpp +++ b/include/mapnik/json/geometry_generator_grammar.hpp @@ -26,7 +26,7 @@ // mapnik #include #include -#include +#include #include // boost @@ -137,14 +137,14 @@ struct geometry_generator_grammar : using boost::spirit::karma::_r1; using boost::spirit::karma::eps; using boost::spirit::karma::string; - + coordinates = point | linestring | polygon ; - + point = &uint_(mapnik::Point)[_1 = _type(_val)] << point_coord [_1 = _first(_val)] ; - + linestring = &uint_(mapnik::LineString)[_1 = _type(_val)] << lit('[') << coords @@ -156,13 +156,13 @@ struct geometry_generator_grammar : << coords2 << lit("]]") ; - - point_coord = &uint_ - << lit('[') + + point_coord = &uint_ + << lit('[') << coord_type << lit(',') << coord_type << lit("]") ; - + polygon_coord %= ( &uint_(mapnik::SEG_MOVETO) << eps[_r1 += 1] << string[ if_ (_r1 > 1) [_1 = "],["] .else_[_1 = '[' ]] | &uint_ << lit(',')) @@ -170,25 +170,25 @@ struct geometry_generator_grammar : << lit(',') << coord_type << lit(']') ; - + coords2 %= *polygon_coord(_a) ; - + coords = point_coord % lit(',') ; - + } // rules karma::rule coordinates; karma::rule point; karma::rule linestring; karma::rule polygon; - + karma::rule coords; karma::rule, geometry_type const& ()> coords2; karma::rule point_coord; karma::rule polygon_coord; - + // phoenix functions phoenix::function _type; phoenix::function _first; @@ -200,7 +200,7 @@ struct geometry_generator_grammar : template struct multi_geometry_generator_grammar : - karma::grammar >, + karma::grammar >, geometry_container const& ()> { @@ -223,36 +223,36 @@ struct multi_geometry_generator_grammar : (mapnik::LineString + 3,"\"MultiLineString\"") (mapnik::Polygon + 3,"\"MultiPolygon\"") ; - - start %= ( eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)] + + start %= ( eps(phoenix::at_c<1>(_a))[_a = _multi_type(_val)] << lit("{\"type\":\"GeometryCollection\",\"geometries\":[") << geometry_collection << lit("]}") | - geometry) + geometry) ; - + geometry_collection = -(geometry2 % lit(',')) ; - - geometry = (lit("{\"type\":") - << geometry_types[_1 = phoenix::at_c<0>(_a)][_a = _multi_type(_val)] + + geometry = (lit("{\"type\":") + << geometry_types[_1 = phoenix::at_c<0>(_a)][_a = _multi_type(_val)] << lit(",\"coordinates\":") << string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = '[']] << coordinates << string[ if_ (phoenix::at_c<0>(_a) > 3) [_1 = ']']] - << lit('}')) | lit("null") + << lit('}')) | lit("null") ; - - geometry2 = lit("{\"type\":") + + geometry2 = lit("{\"type\":") << geometry_types[_1 = _a][_a = type_(_val)] << lit(",\"coordinates\":") << path - << lit('}') + << lit('}') ; - + coordinates %= path % lit(',') ; - + } // rules karma::rule >, diff --git a/include/mapnik/util/container_adapter.hpp b/include/mapnik/util/container_adapter.hpp index 2cac51f28..ae985a837 100644 --- a/include/mapnik/util/container_adapter.hpp +++ b/include/mapnik/util/container_adapter.hpp @@ -26,7 +26,7 @@ // mapnik #include #include -#include +#include // boost #include @@ -40,26 +40,26 @@ struct is_container : mpl::true_ {} ; template <> struct container_iterator { - typedef mapnik::util::vertex_iterator type; + typedef mapnik::util::path_iterator type; }; template <> struct begin_container { - static mapnik::util::vertex_iterator + static mapnik::util::path_iterator call (mapnik::geometry_type const& g) { - return mapnik::util::vertex_iterator(g.data()); + return mapnik::util::path_iterator(g); } }; template <> struct end_container { - static mapnik::util::vertex_iterator + static mapnik::util::path_iterator call (mapnik::geometry_type const& g) { - return mapnik::util::vertex_iterator(); + return mapnik::util::path_iterator(); } }; diff --git a/include/mapnik/util/geometry_svg_generator.hpp b/include/mapnik/util/geometry_svg_generator.hpp index 11a7994b0..b229e73c1 100644 --- a/include/mapnik/util/geometry_svg_generator.hpp +++ b/include/mapnik/util/geometry_svg_generator.hpp @@ -26,7 +26,7 @@ // mapnik #include #include -#include +#include #include // boost diff --git a/include/mapnik/util/geometry_to_svg.hpp b/include/mapnik/util/geometry_to_svg.hpp index 018545cc9..d65d14d6c 100644 --- a/include/mapnik/util/geometry_to_svg.hpp +++ b/include/mapnik/util/geometry_to_svg.hpp @@ -26,7 +26,6 @@ // mapnik #include #include -#include #include // boost diff --git a/include/mapnik/util/geometry_to_wkt.hpp b/include/mapnik/util/geometry_to_wkt.hpp index 31cd67802..e49423ece 100644 --- a/include/mapnik/util/geometry_to_wkt.hpp +++ b/include/mapnik/util/geometry_to_wkt.hpp @@ -26,7 +26,6 @@ // mapnik #include #include -#include #include // boost diff --git a/include/mapnik/util/vertex_iterator.hpp b/include/mapnik/util/path_iterator.hpp similarity index 71% rename from include/mapnik/util/vertex_iterator.hpp rename to include/mapnik/util/path_iterator.hpp index 256903463..f62624ab5 100644 --- a/include/mapnik/util/vertex_iterator.hpp +++ b/include/mapnik/util/path_iterator.hpp @@ -25,7 +25,6 @@ // mapnik #include -#include // boost #include @@ -34,27 +33,26 @@ namespace mapnik { namespace util { template -class vertex_iterator - : public boost::iterator_facade< vertex_iterator, - typename boost::tuple const, +class path_iterator + : public boost::iterator_facade< path_iterator, + boost::tuple const, boost::forward_traversal_tag > { public: - typedef typename boost::tuple value_type; - typedef vertex_vector container_type; + typedef T path_type; + typedef typename boost::tuple value_type; - vertex_iterator() - : v_(SEG_END,0,0), - vertices_(), - pos_(0) + path_iterator() + : v_(mapnik::SEG_END,0,0), + vertices_() {} - explicit vertex_iterator(container_type const& vertices) - : vertices_(&vertices), - pos_(0) + explicit path_iterator(path_type const& vertices) + : vertices_(&vertices) { + vertices_->rewind(0); increment(); } @@ -63,10 +61,10 @@ private: void increment() { - boost::get<0>(v_) = vertices_->get_vertex(pos_++, &boost::get<1>(v_), &boost::get<2>(v_)); + boost::get<0>(v_) = vertices_->vertex( &boost::get<1>(v_), &boost::get<2>(v_)); } - bool equal( vertex_iterator const& other) const + bool equal( path_iterator const& other) const { return boost::get<0>(v_) == boost::get<0>(other.v_); } @@ -77,7 +75,7 @@ private: } value_type v_; - container_type const *vertices_; + const path_type *vertices_; unsigned pos_; }; diff --git a/src/wkt/wkt_generator.cpp b/src/wkt/wkt_generator.cpp index e4c82e0a5..9e04640b1 100644 --- a/src/wkt/wkt_generator.cpp +++ b/src/wkt/wkt_generator.cpp @@ -26,7 +26,7 @@ #include #include -#include +#include #include namespace mapnik { namespace util { From f03e08bbba7a8c168e5b94f0000b847c2be85c33 Mon Sep 17 00:00:00 2001 From: artemp Date: Mon, 1 Oct 2012 15:45:30 +0100 Subject: [PATCH 17/20] + make rewind() const --- include/mapnik/simplify_converter.hpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/include/mapnik/simplify_converter.hpp b/include/mapnik/simplify_converter.hpp index b551287e7..2476311d2 100644 --- a/include/mapnik/simplify_converter.hpp +++ b/include/mapnik/simplify_converter.hpp @@ -101,10 +101,11 @@ struct MAPNIK_DECL simplify_converter { public: simplify_converter(Geometry& geom) - : geom_(geom) - , tolerance_(0.0) - , status_(initial) - , algorithm_(radial_distance) + : geom_(geom), + tolerance_(0.0), + status_(initial), + algorithm_(radial_distance), + pos_(0) {} enum status @@ -121,8 +122,10 @@ public: return algorithm_; } - void set_simplify_algorithm(simplify_algorithm_e value) { - if (algorithm_ != value) { + void set_simplify_algorithm(simplify_algorithm_e value) + { + if (algorithm_ != value) + { algorithm_ = value; reset(); } @@ -149,7 +152,7 @@ public: pos_ = 0; } - void rewind(unsigned int) + void rewind(unsigned int) const { pos_ = 0; } @@ -437,10 +440,10 @@ private: double tolerance_; status status_; simplify_algorithm_e algorithm_; - size_t pos_; std::deque vertices_; std::deque sleeve_cont_; vertex2d previous_vertex_; + mutable size_t pos_; }; From 037c1a84c69c078054847cefdd4546a43ad9831e Mon Sep 17 00:00:00 2001 From: artemp Date: Mon, 1 Oct 2012 15:46:03 +0100 Subject: [PATCH 18/20] + use format_ --- plugins/input/sqlite/sqlite_datasource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/input/sqlite/sqlite_datasource.cpp b/plugins/input/sqlite/sqlite_datasource.cpp index 1b769af53..f662efb2f 100644 --- a/plugins/input/sqlite/sqlite_datasource.cpp +++ b/plugins/input/sqlite/sqlite_datasource.cpp @@ -524,7 +524,7 @@ boost::optional sqlite_datasource::get_geometry_ if (data) { boost::ptr_vector paths; - if (mapnik::geometry_utils::from_wkb(paths, data, size, mapnik::wkbAuto)) + if (mapnik::geometry_utils::from_wkb(paths, data, size, format_)) { mapnik::util::to_ds_type(paths,result); if (result) From d24175e80e7482428882752556a1977ecdee89aa Mon Sep 17 00:00:00 2001 From: artemp Date: Mon, 1 Oct 2012 16:57:31 +0100 Subject: [PATCH 19/20] + style : assigment init for built-in types --- include/mapnik/util/geometry_to_wkb.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/mapnik/util/geometry_to_wkb.hpp b/include/mapnik/util/geometry_to_wkb.hpp index 3b0159345..ee3686568 100644 --- a/include/mapnik/util/geometry_to_wkb.hpp +++ b/include/mapnik/util/geometry_to_wkb.hpp @@ -126,8 +126,8 @@ namespace mapnik { namespace util { ss.write(reinterpret_cast(&byte_order),1); int type = static_cast(mapnik::Point); write(ss,type,4,byte_order); - double x(0); - double y(0); + double x = 0; + double y = 0; g.vertex(0,&x,&y); write(ss,x,8,byte_order); write(ss,y,8,byte_order); @@ -146,8 +146,8 @@ namespace mapnik { namespace util { int type = static_cast(mapnik::LineString); write(ss,type,4,byte_order); write(ss,num_points,4,byte_order); - double x(0); - double y(0); + double x = 0; + double y = 0; for (unsigned i=0; i< num_points; ++i) { g.vertex(i,&x,&y); @@ -167,8 +167,8 @@ namespace mapnik { namespace util { typedef std::vector linear_ring; boost::ptr_vector rings; - double x(0); - double y(0); + double x = 0; + double y = 0; std::size_t size = 1 + 4 + 4 ; // byteOrder + wkbType + numRings for (unsigned i=0; i< num_points; ++i) { From 00517a507f68237874630dae1821c8a2c844bc3d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Mon, 1 Oct 2012 12:14:09 -0700 Subject: [PATCH 20/20] add more river images to test up for better testcases --- tests/data/raster/river_merc.tiff | Bin 0 -> 3077386 bytes tests/data/raster/river_wgs.tiff | Bin 0 -> 3077386 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/data/raster/river_merc.tiff create mode 100644 tests/data/raster/river_wgs.tiff diff --git a/tests/data/raster/river_merc.tiff b/tests/data/raster/river_merc.tiff new file mode 100644 index 0000000000000000000000000000000000000000..447263f4b02db1b27dd74b25818b05011bca1ab8 GIT binary patch literal 3077386 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 literal 0 HcmV?d00001 diff --git a/tests/data/raster/river_wgs.tiff b/tests/data/raster/river_wgs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..60fe5577f0facd32ca425793675524e9f14dbd4e GIT binary patch literal 3077386 zcmeF&5A3zqT^RP`KY4A(&YL)K>^O03$8qe$iA{xuhg#ufLzr|3i#3~9MCB6!1l zEWP^QT$b+pxy#by&tH~a_*a*u3x9T5dg%Jg)6?H{d3xo$FHd)U{_^zLPhFm#|EHIy zH(tCvJ^0nj(^FSmkzW4D73tPbUy&Yt^yKedkzV?DSEL(n zxH3KR%~z&pzvs&I+GAIy`+xe%^u#Y;nO^+OE7Qe4zA`<0;T`FjJKvFB{g2*}?)%(3 z(&In&j`YGmc}KeNtM5n;{r)@B(|`Vs^vaDF(p}$jAwBll3+eg4e<8i`KVC==K6fEK z^;;Lx%m3y=y7ii?(xZ1@m7e>KtJ3R#=c@F;k6)FZ{DrI1OD|lNZv2C*(j$LyReJX3 ztJ7=${?+OJhp$dgeDUh^;y<`LUHtOZ>EYkLIz96zSEpC6y(Zmv&o$}s&s>vUc=Vcd z;U}(15B=gb>FHm;CcW~nuSs{kaZP&cmUpJ-|LQx_8-Mei>A@d4|T8{^+S9#e zy7=wyNe_SSJ?WVrdrx}xpS&mC_p9$okN^IA(hGn7o^;`+>(fKua(#OGv)89r{{Hpp zuAjL+J@(x7>G|KfKE3g8u1^nM^WOB--S15=f5&^%t>6FN^yrVjH$C?Y?@h12@ZR*m zAG|j``4{g^FWvmUbmOBT>JU%GhR4e8-~ zZb;93=7#j@qc^1ce&UAo_%Gg&UikGJ(uF^~AwBfQ4e9Ay-k)CitM5;Deee6zV?X@< z^!(4hKfUqK-=7}*o%g4w{`CFn<%>6_TkpLwJ^EcYrssa}#`OA^ZcGn6dt-X?D>tT> z{^-U_-`{RZkKA@sdiL9HO0Rw2P3it0xhXyIb2p_IpT8+x{N0<#;9{PbPqxH&!c>6_E@kKCNz_|cow zgFkB*n|V0!77KbUU(mmf@z z{P73Vvll*;Uc2){>Hcs3PD52~P`dA?Thim- za!Y#Qv$v!RKXgla=x1(8Pd|4{dgZrnNq7C*The3Kd^kOS_lMIP-|^w};P-zxJ@w-s zPA~t$htsXU_TlvCAAC4H_ZJ^duit!Ydf;1cO;0|2YkKL6x27Ba;jQVBFW;J;{q0-R zYkzWUy8pV{(i8XGmR|hKZRz3<+?F2xiQCdMzj#}E_1AAp_x<5*>G3yiOE27Vd%Ez~ zZch(=@9pX7AHF@k^0T+6yZ*)P>9OCrJw5-Yx2HEQek473??=*8-}RC7@(+F_-TIRs zNsm7Jk@VbGK9XMlqmQHqF1sT=dD|W7rEj|<-T1feNRRx;9qHMhyCc2!{2l53-@PL} z@n?6W7q9A=NQy)$D{nAI%A9c& zSbF`JKb9W&mmf<{{_)4sOBe1+H-7A{^vJj0m7e|FUFo$SyDQ!Q%w6e;U%e~6`1^OI zi~sLk>EWC1PS1SH-RafO-kt9Ip}W)LKXZ3_;kmohh5zI3^w7V(J3W2P$I~l!e>~mw z;K$Qr-~aLS{EvS;z3~elPY?du$J0}P@bUEWUwk~>`oT}6N5AzG>A8nLkzW7eC(;A| z@Du6DFMlGv^xL0EH@^0X^vHGhq-XEBC%yKWd(!7jq|$@KK^d@{ZAr=LuBz57$?v3oz2 zp8u{-r8j=?Q|ZB<{8W1C*-xdHzw)Vc>;L(w^yp>xrsr|_WaaGueti4ed*F~ zpmgom+IOT&KQ=GL{pF8c{`K~XueDdDE5Fu$;-gnzm*X!>*L78F|uSnN^t-Uhc z@U=GI@>>7%r~g4c`jda}i%);}fBKEnE(L-M-}+WzkdBMyZ-bQ z7Hj%q%n=|!fB*pk1PBlyK!5;&H3;N8>`)zbOx$~0Z7Wy3z7=DP009C72oNAZfB*pk z1PH7_pzjXbHP^Zy_rW8)*PFPAw21PBly zK!5-N0t5&UAaLpeasQ3Bb)LStR=hC+1PBlyK!5-N0t5&UAaIHTasQ3Bb%s3G8aGCO z009C72oNAZfB*pk1m+OvyOYk5e@u?3p=?|0+>u)<#t0A~K!5-N0t5&UAV6SWf$}~Y z{e5%pvOe}M+g6@D-x@bYfB*pk1PBlyK!5-N0tEIISj(NWyc>7b)HS}Zf%OCk5FkK+ z009C72oNAZU=4T9`fl7+Q`fk+NPqwV0t5&UAV7cs0RjY0S)g?$a83be*zzHcsKv;+tcAV7cs0RjXF5FkL{)C9WjyIte?e0lEF z&Z%Ak1PBlyK!5-N0t5&UATT7*x(mlx>nQnV+>PUT?tSDVK!5-N0t5&U zAV7cs0Rn3mDDTGZ$7_FE>LWma009C72oNAZfB=D|1nT>-JMvP}@)96GfB*pk1PBly zK!CuS1>BF<{C3nvfB*pk1PBlyK!5-N0*4f+@5qPT+g=0+5FkK+009C72oNAZU@Zdf z$7^{L>L5UX009C72oNAZfB=DG3b-F1Q{UbM2oNAZfB*pk1PBlyuoi*(ew?4zQkyym z5FkK+009C72oNAZfWRRHT6bgj<3q^Xg8%^n1PBlyK!5-N0tD71;C{TOx1kmS1PBly zK!5-N0t5&UIHo}Bj(p5|>`j0G0RjXF5FkK+009C7jv?TFd<=Da5+Fc;009C72oNAZ zfWX=W>ihB9>QfH^0t5&UAV7cs0RjXF5LjBk-FRtX`3VppK!5-N0t5&UAVA<$1j;+| zsno1a0t5&UAV7cs0RjXF5FjwOKzTpT{kikYM}PnU0t5&UAV7cs0RjY0LBRd^6yA~= z2@oJafB*pk1PBlyKwxQs`hM)+ke3#hp8x>@1PBlyK!5-N0tD75P~VSpjqb>6d{b&7 zK!5-N0t5&UAV7csfh7f6_v5^uJMxn1auXmxfB*pk1PBlyK!Cs+1>BL>_*T?JfB*pk z1PBlyK!5-N0*4mpx*z8{{5$fY--i7N5FkK+009C72oNAZ;8+6n{n(xOSZ~6<1PBly zK!5-N0t5&UAaHDf`i^|;dhAbt009C72oNAZfB*pk1db_C-jk16hrJ09AV7cs0RjXF z5FkK+z_A75j(qGo>`#CI0RjXF5FkK+009C7jxFGheC#)1e*y#u5FkK+009C72oP9{ zfIIS9-h?^`5FkK+009C72oNAZU=0HKp1g)S)Ifj$0RjXF5FkK+009C7jw#^Zk&mfw zZvq4e5FkK+009C72oPA4fIIS<-iBHT5FkK+009C72oNAZ;FtpL$j8*THvs|!2oNAZ zfB*pk1PH82AnwSyT~l3ZAwYlt0RjXF5FkK+009Dr7H~&Cw7C5U5FkK+009C72oNAZ zV66h~$ZLHw>LNgZ009C72oNAZfB=C*3zTE2oNAZfB*pk1PBl~6@jk%ag3kJIn+sj009C7 z2oNAZfB*pk1m+Zoe?N|P&fIblAV7cs0RjXF5FkK+0D)5wDF4kk?#I!dLj7taK!5-N z0t5&UAV7cs0RnRhblsEZ+(Rw`1PBlyK!5-N0t5&UAaE)IaZiqaLyqTDsb8H02oNAZ zfB*pk1PBlyKwxeGcjUQ6vvB)iBKO@vW(u009C72oNAZfB*pk1eOwTPhLt^ zUIGLN5FkK+009C72oN|mf%1-=`=?gFdI=C9K!5-N0t5&UAV7e?TmtnS**$qKS$PN$ zAV7cs0RjXF5FkL{)C5|0WcTD#dyDENK!5-N0t5&UAV7csfw=_Sljo9@hX4Tr1PBly zK!5-N0t8N7z#aM2-=O*l5FkK+009C72oNAZU`_$|iFB1PBlyK!5-N0t5&Um{Xv2Po6WsTm%RZAV7cs0RjXF5FkL{)CB6g@~PFY zUIGLN5FkK+009C72oNAJw?KJUo;$aE1PBlyK!5-N0t5&UAVA>M1j>7I?w?xy>Loyc z009C72oNAZfB*pka|@JraOp^ z^>f!c;{*s0AV7cs0RjXF5FkL{)CA&=+;#V@$Lr@)JFj{P5FkK+009C72oNAZfWVMI z+?88#?!_$?V+05gAV7cs0RjXF5FoHsfw&|0wOc*Aa}gjwfB*pk1PBlyK!5;&TA=TK zT+Y?&JQE;5fB*pk1PBlyK!5;&Eee!(;lBPB&+beF2oNAZfB*pk1PBlyK%gZM_v4t0 z=dz7CEdc@q2oNAZfB*pk1PBl~2Z4MiF3(xsk?XlKPM-h)0t5&UAV7cs0RjXFY*C=T z7uU~QJhL+qAV7cs0RjXF5FkK+0D-Xr?#W}N#1SAsfB*pk1PBlyK!CtG2$c8ab2zUv z5+Fc;009C72oNAZfB=C$0r%uS9diT-5FkK+009C72oNA}P6Fi}Irq=$?9NJn009C7 z2oNAZfB*pk1Zn~ID009C7 z2oNAZfB*pkhZd;sjpg&9YdOSz<@wx`42&KP5-bBgJe zp2HcZt5`vR009C72oNAZfB=E>7KpoIw4qTy$GDaN0RjXF5FkK+009C72y9s(?!&o_ zbH-RaYY7k_K!5-N0t5&UAV7e?IS9mkxV$6hbI15O7&s#V0t5&UAV7cs0RjXF5D0A)WvM0t5&UAV7cs0RjZpCs5w=qQAZ>k6%&P^tH#YQUwGE5FkK+009C72oNB! zk3j3rw@e`~(OPAV7cs0RjXF5FjwW zK-c|n{+*7SF`six1zjHHc;qR^TK$OA5+Fc;009C72oNAZfWT=8wC;8>b{Z!bt}>rz zIO@%aID4z@%Tex8ukBlBjsO7y1PBlyK!5-N0tD70P~Ye3=k-*&TP5Y)wJSq?=GJr9 z+OF|BM^~J20t5&UAV7cs0RjXF5Ll-`eXon>byhoE)!6!TT+SBpWjnk}cSM;d_UMi_ zLx2DQ0t5&UAV7cs0Rn3isPA?0ytX>W)YEq_tSKCMNPlJ7$d-0t5&UAV7cs z0RjXF5Lk~u+~?|cJr(v>5_NY)#eA#nTC>l1z0W?mtR+Bz009C72oNAZfB=Ez1@b+v z-le|VwPNZu$9yj9ZPiiExB9I$bBxt{&5=_M0t5&UAV7cs0RjXF5LjNIzR$Ium#<>_ z4t1S%hI+n!uH)x?uJ_8%bLN+e009C72oNAZfB*pk1P&w6y5GgvVJaBjCF4slL<5FkK+009C72oNAZ z;9Lc|?tNp%TV`X{MNGXu#>cev+Cw~d)pdxy?LmM50RjXF5FkK+009Ea3v}K4TH{eo zYi{aTX(LYu@RO7MgvM&Jw1PBlyK!5-N0t5)mE6{cSE62y|SjKnt%RF5% zc|79EevBQX?W*+{wb+vY0RjXF5FkK+009C74kOTY7aY2)_N|M#I6*wO+K5?G+p05< zt*J(}5FkK+009C72oNAZfWR^WU3bEAyxh4Q-?d-nTU)<%rnS|m9s&di5FkK+009C7 z2oP9apmjeSGuEms*0tu=JQj6FyXIQeMt}eT0t5&UAV7cs0Ro2;h#31PBlyK!5-N0t5&U*qT6j4{n{UoOe%d2^k|mfB*pk z1PBlyK!5;&tq7EN;I1=`iRoHvoB#m=1PBlyK!5-N0t5)0ia^|d`|6FDX!~N#5g)9o5FkK+009C72oNA}ssdx~z7Z4csh(Bc z1PBlyK!5-N0t5&UAV6S@z|j3S=5sqHpBMrJ2oNAZfB*pk1PBlyaLNL44{n_y=Av!I z7$ZP{009C72oNAZfB*pkTM>x+Z?yHfVm#V<-ZKFL1PBlyK!5-N0t5&U*pfis{Ws>K z-O{<8g#ZBp1PBlyK!5-N0t5)u0)6-2n2WYv>zM!n0t5&UAV7cs0RjXFY)v5Ff$KBH zy|`@a7|#R<5FkK+009C72oNAZU~2+#4{n_+=Av!I7$ZP{009C72oNAZfB*pkTN3EH z1IKvTZt2|4LVy4P0t5&UAV7cs0RjYC0&x#6=VGkYmT|3qtckgJuG^T`5+Fc;009C7 z2oNAZfB=ED3B(;X*A@Mtwu~*$Gqf(|%QgB02oNAZfB*pk1PBlyKwxbGaeqBjySDSI zhX4Tr1PBlyK!5-N0t5)u0*AUI=Y8tEJrf{6fB*pk1PBlyK!5;&wF&HUPwqNHoh!$c zV_oZv6Cgl<009C72oNAZfB=ED2$c8Oq5e?K_4*tiV?%4r6Cgl<009C72oNAZfB=DG z3(R$gjXZUm&lh9IKCAr+5FkK+009C72oNAZfWVMIzQYd1^v%Z|xYg!$G2WNM9039Z z2oNAZfB*pk1PBmVgTOv_3!lZWQV z))n{TXveM-M}PnU0t5&UAV7cs0RjXLArSY~);+j2wr@@4es%u(dEdRPCqRGz0RjXF z5FkK+009D11?qciJWtItCO&ePZP&US(=}(D009C72oNAZfB*pk1PE+Fpu8W~{rY_F z$+d`Q0t5&UAV7cs0RjXF5ZIbPeK)S3!E; z*Ou}61PBlyK!5-N0t5&UAV6U20)2PnJh%1pJ0Af81PBlyK!5-N0t5&UXbH6L%dI$L z1PBlyK!5-N0t5&UAVA<81l*I);VnBO0RjXF5FkK+009C72#gVE-I4t_*JI?w5FkK+ z009C72oNAZfWTG->bvq*&*@wQ2oNAZfB*pk1PBlyKwwC~9eGH|JOKg(2oNAZfB*pk z1PGjyKzUC-r*k_i0RjXF5FkK+009C72oR_R+>vV$&jbh%AV7cs0RjXF5Fl`l0`AA> z_|~17009C72oNAZfB*pk1X=>_$SoCP1PBlyK!5-N0t5&UAaHI1<^4GK&+YuqOMn0Y z0t5&UAV7cs0RjXar1PBlyK!5-N0t5&UIA?+Kew_Q~Y~kz#2oNAZfB*pk1PBly zaDD>yy*QrFPr``_5FkK+009C72oNAZV9Nq=-`%C%vWv43AV7cs0RjXF5FkK+zodoAS6jz>CP07y0RjXF5FkK+009E0 zCeXU`w$9LsE5}-Ej1eF}fB*pk1PBlyK!5;&QxYiexn)1jP>yx=BUVd*009C72oNAZ zfB*pk1Ws9?>)zWpe#+-nI{^X&2oNAZfB*pk1PBml3AhKhRE!ZIK!5-N0t5&UAV7e? zxe2uH$LD6?yaWgkAV7cs0RjXF5FkJx3)FXHDg+1+AV7cs0RjXF5FkL{90lt8aeh8W z2WKWgfB*pk1PBlyK!5-N0`AB@0|W>VAV7cs0RjXF5FkLne`D=4K!5-N0t5&UAV7cs z0RjXfB*pk1PBlyK!5;&tqHgzZ|#jb4*>!M2oNAZ zfB*pk1PJURP~VT^d6!()5FkK+009C72oNAZfB=D07l?at-Jbfn)K7o_0RjXF5FkK+ z009C7rU=yc;`(_?F0lj%5FkK+009C72oNAZ;8X?TKAh{1e%+qx+0;#d009C72oNAZ zfB*pk1f~eYeK^*{bJ@n6mH+_)1PBlyK!5-N0t5(bSs>qq%k!0YN|2?AOC(F?bMv&2@oJafB*pk z1PBlyK!Ct03B>)^9r={rnpz1EAV7cs0RjXF5FkKc34!vCT;G$+xh3|NlK=q%1PBly zK!5-N0t5&wDNx>PTm9I(o-4=8e#FI?mH+_)1PBlyK!5-N0t5)GSs?DQWn0(VH&@5z z=c)0n9L5L`AV7cs0RjXF5FkK+z@Y{5eKzkI?Hv2NBhR5I2LS>E2oNAZfB*pk1PB~b zpu88C{e5b1Ki)^rS^@+J5FkK+009C72oN}iz+89YvUd05QbV5r0RjXF5FkK+009C7 z)-DkD*s{(!?#pxJC~MLuK!5-N0t5&UAV7cs0RqPm*!OcU?brA8`Z-5FkK+009C72oNAZ;1B}4-f!KH5Ak;FL4W`O z0t5&UAV7cs0Ro2*h&%2sd&Sya@7KHRX$=7a1PBlyK!5-N0t5&USW;k@JFffjl5a$A z0t5&UAV7cs0RjXF5IB~AJMyvQ?Mr|F0RjXF5FkK+009DP6NrBk9$Qz$M>}?%I06I+ z5FkK+009C72oNA}3IbE^yAd1hDV$G@1PBlyK!5-N0t5&UAV6TOz?A!L#6~-I4{-zt z5FkK+009C72oNAZ;8X<0-gzS~+EY27Iu9cdpNpaPFxA+F009C72oNAZfB*pk`w8T` zO<#uk?$Z}*?z{x*&&Js2^HOqJ0t5&UAV7cs0RjZJBv9XbwsbaU*-fDSOw`XgYdzNW zyjulU5g6^S!!>2*DX+f2DXBN@qEZy z?6od|_zZNlb5vXBo+GCm1PBlyK!5-N0t5&Um?}`;O1lmps-G zAV7cs0RjXF5FkKcia>b>$^9v7#h!;i{TYeRNwirZV&)Qwd}TXVZg~h0AV7cs0RjXF z5FpSJaQ|qj7^?-!&q>{n*gPKnx!QWKCH9!BR(S{zAV7cs0RjXF5IB8-@(yzPr*VR% z1j^4z*^m8}yt|hBML+h{5+Fc;009C72oNAZU`~O!b1ZqsnX_KGjw4WhPNE-`)Xyw~s)4Mq2GYdG}cxwUjwxtZvH~eF6js5FkK+009C72=ocWeWEYM-1!Q` z=cCoGS*2BP9$RzGY9l~^009C72oNAZ;P?XNUE=uFs9;S3}=c4Y{v1@;>>yPKP*R4JR1PBlyK!5-N0t5~# z5O;-W54*eF)+`X8iMm~L&3(1i=O~}Ytm}(0M}PnU0t5&UAV7e?b_B}1Lhf(pWKJ?w zp#Chho~PzqQ+(?@MEWY+Y;CdhUJd>N@K_ zkw$&3D!}WDux8gcQ+JU&X?<$67W(CR>;5k1 zn_Pto_817<`$UiJw={qbDh!8?c8;*Dc{`ZEc0#M zZcXn|Ed&S zAV7cs0RjZJArRl;>vkKb+ukYSJ4Df5;6U2<8|7ARd?{q`!O1PBlyK!5-N0t5&gOQ7|=J&zr$ z9{aWhy57^!cq?1qnpV8A-37|OOMUKT-0r(sNq_(W0t5&UAV7e?z5?ZU^YT0VzIm;m zSD<`1OZDfi_%ySXe;<}S!7lG`$$I1_K!5-N0t5&UAVA_Ms)lm)y_2rFxoVS#009C72oNAZfB=DRf!6o&?r1ZI5-8ux)IH0! zt^U+};-?E__pz&5@2GEVY+i8$2oNAZfB*pk1PDwMD8Gm2mG$$qY@+89@E+!pJncN? z=b-MN_Q_OFfB*pk1PBlyKw!NB@!dODSoYUj@pdZ<|J-i(luovbK>6A5`PfC!8Uh3e z5FkK+009Ey1}J$8*a0$IRk$LD|m0RjXF5FkK+!14m+_wMK~zw7z#5XQMZ zUxm{>dAz@4oFMj&_82wTlK=q%1PBlyK!Cv31Jb@#6@r z;k`r+(H=*_t^^1WAV7cs0RjZJD^Pydj(%>pd*b7stTb*px5kcJvE4&p&UdpX%{CPutn$cGgS9?Q?iNx z0RjXF5FkK+0D<^!9TM>zZH#NX1;Q%Y?#Q>#M0{@FKI4hNIDzsr)asARB8mV30t5&U zAV7csfe@(gXZ82&h|{(OO0RZA_h`Aceh=NN%xq0y-*;bsj#|%KGjkpS1PBlyK!5-N z0!s+Qcj-EJjOVtV^Zcej813s3dAizt^IQLo0;Tmg&TeOK!5-N0t5&U zATX~$*LUU^&+WWBZYSH^Hl=y1za2RzIfj7G)G^fUNq_(W0t5&UAaH5|@x8gOJH~Tc z&v{NMeCD=@yj^YAepBPS@)%!_Kz^rv)wJGuUwocxttrQb)_2X%k)tcOaRLMg5FkK+ z009Dr6v*FgTl@LW+fsS^9itu59_@0jqf7Tzzm9J`*Xvp_#?Duu{(SU3@1hj>c3Eo; z0RjXF5FkK+0D(0Kw7%2ESZ>!)<63GcU22=5xv^)c^VH8{@|0`F#EUr}f&AHs)0Ur; zu71R72@oJafB*pk1PGjyK;QS~b8;AS)~>rmIbP=}ee1dUxy;k**YSPNvA!?H+;o9c zaLqN=Cu@!6m^e>gTj%mjfB*pk1PBlyK;T>i>hHssSe_ip7d_NKr-@8KARQSX?&Bet&{lSd2z0t5&UAV7csfh`Ht-;cL+wmHvIJLTu0 z{9|Iu9IZWKtc)A#@3Lkn=ef>@Wwcvzh%@!ITRN|^5FkK+009C72oM+}P=7xjvqsEv z0`>dI&r^4c98=ecZwqYMv;2I;IqSBqVw3;@0t5&UAV7e?b_L4s#M?dPX`HNl7iE7+ z^|5Zs8nNdokUuNs$>XzAw&lD&0RjXF5FkK+0D*H5@O^k)Z@GLQ(VtRbtjX<^bz;v` zp#GecpP%TTr;Jk*AV7cs0RjXFoU1^553au}pR32Q&t1Qdsqdv;f9&(vfBgdWXRQ1T z)pP4VjS2}6AV7cs0RjXF>?cruAKovM)%yyR@1pEa$?HxtMN4c;p#1DbzZGYU009C7 z2oNAZfWQ_7;yZA(TRh{boGIQxt38!7sB;?v^=EJ!r*aAc1PBlyK!5-N0{sH@_u%~8 zzryTN0`m8t>+^WX8tg@Y009C72oNAZ;E)3Kci^~-MSI9v&V8@0cadGZ zk8}TY9QOS2dF%U39=0O85g2O6=lY_zbK?p!Hddv9;8w z4gv%S5FkK+009C^2*f=&zW>Ja5_`$n7AWn@enfjGA)!5_K>1lL`-iN-UIYjbAV7cs z0RjXLDNugzE&GS8;oSEs-E%*C#8}wGcsy$fEG-b9!B)HU-trS5K!5-N0t5&UIF>-` z`)`aLtEO|?H@tHjXD`R1A9LDm36$?WPSzTWxkI(_xofqDs=+=42oNAZfB*pk1P(3G z`uuKsZ&o;uq-b-eF2o-k@_wQHCY<= z#zXDAyUKQKf&9MrsUbcu`{bzCM$WFbj`vJ}009C72oNAZVCw>1-;MM5*3W*7^YwX` zbH}L7p8W#xe(I<(e^h?j$56dxp4L9)*if!AR-XU?0t5&UAV7e? zF$7xQSKa-xF}9RV zd(fK&%3^hs41`S zbLyMhb#Lnk5FkK+009C72pn1(kq3f7)zw#_|<{ipa?%V1Qtv7!>f&9M4?mi{9 zD`)HTvD8>s4aNx&AV7cs0RjXF5a<@@`hMQMVx2R`I!D*OF}_YMRfRx)PtjkxjnBlA z?b2tEp8x>@1PBlyK!Cv31^T|PpUTvK|$M|?RJ{X7@_x{Y;O0t5&UAV7cs0RjZ}7pT8)cRlaF)4Um?&Y`ShB|}Gx^k7{$Ljahf2^A9OMn0Y0t5&UAV6SWf%q;y)b6{_ zT%I9KAY@9ki8+9A=S^@+J5FkK+009C7)+tbb zhwpkmcJ)!$*g7IU+Og}(xL8}a5fkI_tlg%-)b||mb-PU+ry@Xr009C72oNB!J%ReW zeAn}_P9F74-9Ofq?bsaUnzCQ6&*SB@{x$`=-hbC=%lPPb#Tq9-fB*pk1PBlyKwzB$ z@m+qXJx29W(;R!}Ttj(czq+m0jmcH7@w^^^DerGgZ2fr|vt~USDj`6C009C72oNAZ zpcaVl_~m$vMO)4tsvmpjcIiFKy`rD@Z0+3|Te?2^=M$Lv{)Xc7eEDa-N@XHIfWUeL z%Aa#XKNr_iwMqyOAV7e?ZUXUpuU;MFWn0HA`FyB-^FH|;WA}^rCC@JRass=&zpgdq zXD0f~RW36D0t5~#5I@)Y+QU|4Hv$9*5Fl_kf&BZgwOi}=Vk>T`v97x2+ONzXXPqmz zJnIxF-}ycj#^pD2@oK#uR!Z(THn~d`&mzb009C7)+!Lc|LXc;yl(5b zrJnP?OXV)}#`(&zR{v1-wDvYOkHB2-Fg`P_cAiSVF-y7EH_jR%K!CvR0_D$_DgE7d zw2}Y;0t5)GUm*WZY*pF%UD=9TYOJfSIrkg8$Jn?zYm;j}fjQq_&eiv4uB!X?7@Es9 zAV7csfwv3veV?v>PriNSvQK?=?Yi^S^DI%ruC-e? zU0}}lSATZ8o~Kv&_7z=ucO8Fwc25KdoU_2LKS%0y=WOWg1PBlya6SV0_h0L@_3y>5 zxYpXWjg@D~wYAO?FB~J{x1&p=@Jv%pEgSlX(IJwka_8&yt*P zn^I0ifB*pk1l|&e-=A-dyuBCmb^G?H^*`11=jXcWa;)svah}&Lu++QDdB^_g5*oXH ziMXzsj1wTRO@Up0j%-uHsR$4tK!Ct>f%rYzS{ZX?8*wof&ueX?&S>j8V?4L@oae&` z#5)H=3}GmVXp`upM|XS98>^<1pc5+JZmf%@WTSd)OKonhSePHn6uBZPgjmH`;Up~%0Kt`m|D7G#@5oce&6xD|Gqh_ zCqSSrF!t|v8Q0EalmGz&1PBlq5-5M4w)(C05m(OTvHCgUqAlm=?#CW=9eJO=xw-2& z)qJJVP=CoY4(&b1{2cYqQAeF)pStQ?yFBl+zqJGiEGsbe@AR_O$WDL&0RjZhL!j^X z?~p*bHpiCFt^QEHUFOSu>h*c99y|Bv(yOb#CZnzz=NRAToOA4-bL1ML-L;;%YS}l> zuJv0-fIwSd>fgzB7NZ0R5FkK+z%BxPzlZC5Ikp^Yt>9>j&;48zVqfat@+5+n%m-7ocCPYc&F!j{;i!m-sjl1b^ch} znlna#009C72<$EpzhlR?d8ddSvulnW6W13L`?cD>bz7TjoqrDBV>)%6sT_~`%CWWf zqt2vy5{mc zxnIxc=Q`#TpIhhJb!^J{cip3J-IV>8j_s>+i*wm?i|0DWGwt$s;~brwnE(L-1PH7} zAbxl6QctYyYIn(**UX)7*E$ZduIsEZeux^D+#}A>YRi3F^L=CG+OB@z`laT&YMDA7 z^_A;ltksrrOZQv*?>bi3I+Ul5-{Nx^Z1HU8cBXijQ`>WMa$W)i2oNB!Hi7uvy=z^u zzHaBrw`-m?udA)Pp4WVaq1w96wD0)PzFqTE_T48(*V-xLQERy-kLBl>E88;eSpBk| zDgC~ByYlp{IrX`G=2Jg|`ri`h`V0?^zm-9c009C72oN}iK>V(rWADh7+g2#-Xvg z_M!MZU$5~@U=0FeKD&J}YdC`%2oNAZfWWy6#P9049CpnY>vB6+Er-rio?)N(i>wHT-mo?V=)N|!?t6#6*^|_V19NRVTA=Z_39-@DUGueYcpTNGK^S<2X z2oNAZfB=ER3gqAGbL}`aSN)x0t~w5pr>=d8=kgp=ZOgSw^y9pB?ik;-t@9o7xvn|( z&f~csZS?E-@;TP-(ng+gZH$#|Iltz9S@WU#YxYpvwgl$-Om9oYX$TM?K!Ct$3&ijD zIZlytjm;DLPFXWH_fm0X&ByN7XDsWf=jMLydS_(~Q~Pt*xNE+;?lMn3*Y{kmo6?V* z<(e2P+j9OC`ep5h?w^8>8c$PT-_P=Co?6ue2oNAZVEY2)@A!RBJ2uzYxP9xHV|`ic zsrKh^D05_o`gtFlGS`~=ai+4S7#q`;>!$Ym@=wjRmiWFi9b#@R4(d2vfw?}Xrz@ax z0t5&UAaGs+yZ-LaO7+@4xiYpd?pSkWeW%*bc4KOv%XrLQt(dv?Un)n3=K6V@R zoO@fphti{Ou8bSouk)SCb3R{JtwU$8*F}6e9%Ef?8GGvet~2g39u`yA#yahJ3e=yM zu?qFNDbHi~5J!Lj0RjXFoVGyM_k-4{a%^k-&|_USPZ?jL<|+Fx9b2Doj{WMKTYR44 z6z3naCSteNjyZc@OqWOBntHA)hw*I+UcvxWcx0t5&UIBkKk-xZF1 z%CU9UamT2;u3?wwzPfkGx67Ko8n!&Qi&fW}Ej#72b)9?6_>j$*964qvkNNW!82dTu ziaT#Trzb#w009C7*7zNvtER5;HNM5JT8GBVvkb+~HDB&|&iy$&&&h9BuQ5hrbC1a- z<~#((erEdO&O^#62@oJafB=Cp0`+%>F>98Hsp}YeUZRG%a}J&181r+VaZCAjeIHvg zn0l6}W>fNy$vq{X*zF07`HT$3Y){3B2oNAZfB=Dg1j_FY`{dbWZMpZDe%>SEcG>UP zYohikZJfDm%X5s)Rj%1;KU?g2ws6erqd&IYb=Sm@BjZ_$Ude0E?(t(sQbI*v*xq}>UZAtd1}SA#*TgZzWR?{oBat8AV7e? zISF+APF~ue_5EaMtX0#o>TlJu@7U1!V?OqY=do?9)4nCpXZKc=-aY~?)&>cVNreu80wex<=FB$ z`jI1^PrZ%v%-x>4i~3Jrp#DtHeWE&l`8@YtQ}eBTxS{8+JjMwS zAV7csf$a;#_k?4dH1-~9Teamit??Kenvb|sYlp0c=1=Xs>fKLZ?SBvA^Sa+DhgZiw zbvwLrzKDA7uIKr7+TmAQ;d|pQW&8+1<(eK(X=F7G#_SDDYjJuvA*5|g) zQO-^6*SS0sAV7cs0Rr0=D8DNlqwmC=nyla1IE#e6fAV7csfzuU;?+eE|LF_-K9aCe@ zGd6B)?3jF~6mzcUKBaebjwOehR}ZyK79Jkd^#k9ArC1m+Wnp9Aw{+%Hqqvvj*(mEX9!uJ;=wPGcmW zV``=K+2?$oT8nrB1PBlyK!Ct50%N|vwDRuq-Kmu)#^%l!d9~XRh|lRZPP6_~9P005 zyw|d=b;`M^{hTYWsdFCUxvupPdmej_`pk1aANy?fCqRGz0RjZJFEIAIOP54m-!-@E z_!2pHt;M=^2-Kg`byRg8RV@AYG2U&h+1fW^$Fz06H9XgKuc4+nYpBmR_w$^!%0++x z0RjXF5NHXE`To*cxAa)9Yw11YKRto?yq;d=r(N-qe;;>wr?FU{guXe|K(1PBlyKwykO{r#hUo|0os>@G36rd`%qLx8|C z0`YTVuIy9)j<@!Yv7vUZnwQ8EwJ(u-shm;s+-=lb=Z$eK0RjXF5FkKcZh`uHN9%da zp0RFB?5;6+k6qVVM}WXG0(1V|-{3Ga z)|NHzyGNO8YQNrl>iWL;I(OG|nWHPlH~|6#2oNAZU|)gqJ4dTOCVyTRab-Wo=4zMB zJy(tL5IARn@@L3YhgdsxT^%2J;^#&AJhorwJoa-}-L1O1V%Ip{s=sfnJVRfcIRXR- z5FkK+z^(%2_l>Up)Z97G)HP${m&`r325|%k^b3?fOZp?z?RkQ!< zxz4esJX2M2?Ria{Vd{GE1PBlyK!5;&F#_>jqpuy4Ct~6|OgzusE}ehwdgUW<&I0An zl|F}v>x5ExnF7LZUUO5R6*uFsg+&Wa-CwizF*04{X!<4!5EK}BrB|v}x z0RjXFj1efmYjpKnc_OwocZjjP{~`9V2LS@x6NsN*+SmW`kOp&olFFLr$|(;40t5&U zAV44sl;1PD`lVDEQ;r{_pKCeBzV;+QU>gGE&$BJ`*YH-xIPP0#y~n=!tS3N#009C7 z2$TZ#ca6U1ye`j|>yO!AQ!U4Iur~n$y9xCDyz86GyTyFjkFi6vyPf#3tNI*TmE`!= zc#M_vW$u{Q5+Fc;009C7_7y0U<@co}@~cu^%@N-v|r_ z)0*$fwbt=`hN-p1xev8&>OSHL5FkK+0Dpr?G%kV*Oaw&Y~-rP%jXj`hJG) zGS}xA`TAnkG8eVxcAuKcJY}wOe4qT*5+Fc;009C7LZJM9(dtK>mH+_)1jY%pewL0M z8@Iz-QIYqpk#+ZWtvA+nwd+2$>Ie`ZK!5;&QxWL;t`Xy>at?J8AV6TP0`c>-uU%{H zOV(9-Ox>qkoBLDOizh&U009C72($$1?-=!SYmG4i1PBlyu!KPQJ7{cv_v5ir;s_8R zK!5;&A%XI{NUJ}z-aG*U1PBn=N1*F|TmMe#+oLN--x_lS2oNAZfB=D(K>Z!0d~U@X zBS3%v0RnRgjJeyEzn7vv*Z%SlAV7cs0RjX{f%vY`YRfo%0t5&UAg~63^7qvm>QMs$ z0t5&UAg~RA@;gSWzl~Em1pxvC2&`Ek|NdEXeQF~>fB*pk1kOjGbuW&w^HFe80t5&U zIHrI*@-g-8O@IIa0t5(zK-`5}ZNz8^5FkK+z>)&)$4lzUO@IIa0t5(*5oq0s%ds&z z#1J4rfB=Dg1?IdT$M3OyYqFjI0RjXF5I8S^_zuz4o|lHx5+Fc;z*Ypx-)mbrlXDOt zK!5-N0?P`N-yd52Wp|gI009C72rMfQzuT7GMRo!N2oNAZ;M4`;J40W4>St6x0RjXF zoQ6RBE;@~BRY`yV0RjXFY)v4(i}bZyJG1i;AV7cs0RjXF5FkK+0D)4V?@nCKm230~ z5FkK+009C72oNAZfWX!S$~$mhe{1J<9s&di5FkK+009C72oN9;0)6-4dM?&z2@oJa zfB*pk1PBlyK!Cv31nN8R(DT;L?>qzu5FkK+009C72oNAZAPWrLhg?%LI# zQg7slHSt`wF{dR!fB*pk1PBlyK!5-N0&5T`@2o@psrBZ3v8I(f=ClL|5FkK+009C7 z2oNAZ;MfAKdu!L&zO}aU?wiwk0t5&UAV7cs0RjXF5FjvzK z=BlZ+$6UGPAwYlt0RjXF5FkK+009D11j;*VtSiS_{fL{RT{{09HOfJN009C72oNAZ zfB*pk+ZHJArsYY?@m4>_=J9gPzWuI!_RVWO0RjXF5FkK+009C72oUHKsPCh7Y&~B; z=lDEUuiNLj-ed0k`_yJF0RjXF5FkK+009C72y9cJzKga_S;y4RdClB+*m{q-^S91v zi~s=w1PBlyK!5-N0tC)epmhf=@1b4u_4rbH^*-^u)PC|3AV7cs0RjXF5FkK+zwdcXX<)L!xuAV7cs0RjXF5FkK+z-jOyb&e&TTXih4kDLSu5FkK+009C72oNA} z9s=b(v+KlV%-DWct~tkBwal4cE&>Dy5FkK+009C72oN|Af%1MibmB60On)ffT=T73 z=E^M(0RjXF5FkK+009C72%L{V+%Jbt9C2gXpZb>+NueM{^mCjkNk2oNAZfB*pk z1PE+XAnuf{)5Y8_Z7bhWW4XSZyH)2>d&*0I009C72oNAZfB*pk+Y*R7W$RQiw`<$V zxzt#$G3TypU1~ph2@oJafB*pk1PBlyKwx_Uaks2bR^K(JKG*q{d@j#W*SX}rauXmx zfB*pk1PBlyK!CvZ1?qd|)aOGB#T~g-=b>w{9{~ac2oNAZfB*pk1PGj_K-?|M>Rb2B zDPv`>L-gYetr`!pzdZ;LAV7cs0RjXF5FkL{^abKhS)L@u_G!y}OZRh~#K8?bFF&oc+Ug~5FkK+009C72oNAZpe0b=Df4{!yl=m? z-#%kePgjnZFWatI;{*s0AV7cs0RjXF5FkLHB~ace=kB-m+jT5ztJlYP+14?h2@oJa zfB*pk1PBlyK!Ctlf%1MiwO{X1udnCldan10=ehFBLx2DQ0t5&UAV7cs0RrbK5ckWe zZA+__qZPN$SZj|wwoguL2@oJafB*pk1PBlyK;V1?`tFcjcg`{6Ay~%dvGO_hBW~Ze z&KuAB=Cz&x0RjXF5FkK+009C7wk^=QKX%<$BX-}m6m8`y=co2t`SRG*JmLuuAV7cs z0RjXF5FkL{yaeJt**bOWUK#QGv|W33+zxIysnIiJY(B(?bQC5J*MUqPk;ac0t5&UAV7cs z0RrbOP~UT>XtdUjxw}Tpl)a|Jw(6R)UMv9u1PBlyK!5-N0t5)0pTOLA)yOxdJwI(H zCP07y0RjXF5FkK+0D(0N#9el-8YAD>cCLNpAwYlt0RjXF5FkK+009E~3go-&zB$VE zWADagT)AGK009C72oNAZfB*pk1PB~UVD39|K1X@~9os+F`Rz-9009C72oNAZfB*pk z1VUi$J92p^&U=*4L;a{pOMn0Y0t5&UAV7cs0RjXLEf9Cs*f&4tezY+@rH!0*j&gjc zKV?6$1PBlyK!5-N0t5&UAV6Raf$|<(_si!gd&T{?wI=4qw5|2V2oNAZfB*pk1PBly zK!Cs!0&!1m<<4`h@iAk4dGq?1AJdN6PYeM91PBlyK!5-N0t5&U*i|6zrhV&kOy7Lp z+))0QpVId2XN~{?0t5&UAV7cs0RjXF>>?2N($?CTi?$UrW^C;Gh#T9E*;@<&0t5&U zAV7cs0RjXF5Evs6chSDs9Md;HW^QbbGA?Qx+m5M23;_ZJ2oNAZfB*pk1PBml36%HI zUFKVBy2gg~%IjJ&WADci*R{WK0t5&UAV7cs0RjXF5Fn5R;{MpWgANJpvZl^Clq2e^ z*X8G!o6@%O7$ZP{009C72oNAZfB*pkS)jb5mi>CJrB%nbVur@zep|=I_?SJ)*r9&C zk7oh|2oNAZfB*pk1PBly5CY{LwCuO$W2|ml>*|=U=kiXQW6I~U-?hFRFXQ|A!M2oNAZfB*pk1PGkA zK-?2^Tc4ygmSeic>-AHg%UW9fsre$lm8%|$SSxz>K=*pys#Y?-I4U$5~@fB*pk1PBlyK!5-N0_P);?}}qiTgG+u>pW## zJ=gV|*Yy4AS~qsQFL%t1%_WWi0RjXF5FkK+009C7wkI(4ZkXdkq3qXVt+|NlYongJ z?OQWtuFl(fo{~>20RjXF5FkK+009C72y9Ov-xbH6Dq^E8*TtQ)92?V*b**;H`l&Ik zeaf+^`NR_-K!5-N0t5&UAV7e?wgmDWamA9&)Ve=r{nVIxkNSCPKJf$y z5FkK+009C72oNB!9f5pD9CMoTE;%NCY)qNA?2lc)OI*26-QOjjH3SF{AV7cs0RjXF z5Fl`R0&yRV%JXydkJ(0Dt#*mJTKkk^OYA8p0RjXF5FkK+009C72+Sw2?;S4I=Zeby zd=>7VDe9@)-7^latoN#)hck#EK!5-N0t5&UAV7csfwc(aJKdC8;tn`v%^_l=uC8{e z8oKt&<4f%+F98As2oNAZfB*pk1PJUe5cj!#GtHG}-#S|Bqqeeb#mzNV?$heewU0am z2oNAZfB*pk1PBlyFrPrazs;BJ&Hv7N&U|y_I>tS2QwT|MfHcIi4}pH{o{-trS5K!5-N0t5&UAV7e?@&a++TYjf`c8GfG zcAo6RS?Ybu=i${N2oNAZfB*pk1PBlyK;YN{UH7;c@2W4)cg>yac$l@?b2V{p0t5&U zAV7cs0RjXFoRUC!*X`=J&J(fGwqn*a7Ij9uRBbtb>(5gA$xDC$0RjXF5FkK+009E? z3DkGS@_yI1OTDfy_MGNQzq)@;4$ew|009C72oNAZfB=ED3iRD);~rPm-WR`1T)AfJ z{qStHTR*$=5g!!oZyxLS6NvZF z)$W(wY61iZ5FkK+009C72oM+}kndz;;>0W`&~+~^$Cuk(WV5FkK+009C72oMMX zcjS;bUR&OUyZXng&dvk~5FkK+009C72oN|Q0e9r%zw54haXEhcDpf#$009C72oNAZ zfB=E*3AFBAQ}4-B6@ITrn~t$XrV zss6a~ef0JFvzR47fB*pk1PBlyK!5;&T?ERzZS(xncptfq{mZewe#C1D5FkK+009C72oNAZV7fqg51YQ)in#^K`)`@M9PjFv@%jV^ z5FkK+009C72oNAJU0{wo@*Fv)SH8U!<=wYDT{+&@FW2Z3AV7cs0RjXF5FkK+z;uDR z?zeO0nSO%ptSIllajJ4`s2^*z1PBlyK!5-N0t5&UAkZ%m_p7d`n9prjOyBsf>-ut@ z(_HBvmi1WqoNdbISaVKh&Psp)0RjXF5FkK+0D*l3rre{Z#70fKtckVf+-A4=a@ zNrO0J>=Dm>ZN%1Xy{4Y`On?9Z0t5&UAV7csfm0F4_nWoVdhD9Ee&>tx#e0wEzBXc8 zZN07)V~hX+0t5&UAV7cs0RpEWkncCgsB>uFq4}k2F7JIy?{%pBai(&=80%`w*jB$@ z*NQPlfB*pk1PBlyK!5;&QxeGcoI}=I-mALyJ#G;ha~sjO($X>~(zWc_@c@0t5&UAV7cs0RjXFoT5P7 zfBI@4ii!EU?aOIyK7s5W+3I&tKSx|&Tdv7*<#Y7=)|(?hfB*pk1PBlyK!Cs@1m?b< zOv#sHTW73ubj7vS8rxr>^p1DY*ADGiuZ{Sw@tD^VAV7cs0RjXF5FkL{Py%s3iT(0( z^!I6}krOn?9Z0t5&UAV7csfjI>7onx0gQ|>Ae8+%2Y_bvNck0T~+H-1d@dOAEAV7cs0RjXF5Ev3D?<7O9<$SEmW99v&jER24mT`5z ze2#V6^$L{lw5vb0`c|Htqx@_{%+%cC2@oJafB*pk1PBn=wm{q!qTT1TaR-TZOs+Dv z?6=m&e6%^H?6;m~=WFFCV_NgZ2oNAZfB*pk1PBl~ZGrgCKlK!O zUAZQnBVXN?v1LEj#aOJ1=dQL~SN7}puDN==ey;O)UXMV2SABo>skF=+dE&EC&c#^7 zXbBJ?K!5-N0t5&U*oHuS*N?XAROS63$8^QF#>=rXPdQ%h8!_cr>=|?Q+WI-xjveoc zi#*zO2;}$F^=FO>>)d6|zPU0^p8x>@1PBlyK!5;&(-p|y`-iHJyFrdC+705Z$}`%=hmMkPT1O~9Lsyw&r8%H zCjkNk2oNAZfB*pk!vgW$JV!=9x5F#neh(hAri|(8M;)<$8CTEs#nkH}HgXKjm+|`B z63Fkq@6X()E%(Z~%jZ^q?)~K>K!5-N0t5&UAV6T8K>mI{F0wzWFHh?Z5Mw!OYi(;R zDrn8M#v*=fTjnVHW7ms29fACQTYvHimU{Pf-oE|o*wc|!DFFfm2oNAZfB=Eh7U=pe z-WrdwXv>qg#>)A!pJRvOyXL2km-`O&%iLvuXr1}f63Fki^(RgdbMZV^TYsivpR&z+ z#q(VI%0qwv0RjXF5FkK+z<7cBdwZ;GjmKED5u4lASUF$zbL>!j*ZkD+a^InTnY-){ ztuudG0{Pvx{=_L_E}rLV>(5l|Q?_}pc%Extc?b|7K!5-N0t5&U7%xzNZ_g{ojMXvm zy}llgN@6_X>hXAvHsa&CY$He6mh=1cBj-LjtX-!-yxY31tIhNE*xb)`4e=cN)Xy=l zB|v}x0RjXF5FkKcd4cjyQ1;86TjS+e*)P}C{W`9G&hdGyHD2fPOkk`)e5UHQYyHxn zzq*ckzxuhWPU8d!5FkK+009C72rMHo^qsslUyemT+E$fabM<)r+{$H)z!ZV}nQHy% z%dzC=uvJUFU;W%yt2qJ$2oNAZfB*pk1eO!1znjPR`PPnobFKKUvB*>J-4$<~z*vFu zvsL!Tu3sXqtRp`2(Z+re6VF-#1PBlyK!5-N0t5~#P<}^`@8{7Twi3G$m`5N!ztQHb zxj#?#=~<$VvW+Y;7SFjoX02r%`UD6NAV7cs0RjZhO~7~Yb9>|4KX2SQqm2_!{j5)o zkA0$z{abCs#np0t5&UAV7cs0RjZ33&eNt+}5jGV|9#Y0;ecYe(vLQ9%EC^ z6Kkie$+59lS6k76Y*uP==ZIQ7%c$;1PBlyK!5-N0&f@S`ySml_x3EF2%Nq^+&81m zCyKuV(Jpby*e}|#dqjL!Z81MKpEv>p2oNAZfB*pk1l|y)CA%VIi{U*wkdya z>b+b0jEU)6*P1g%fB*pk1PBlyK!8BEK-YKruJP_nW(b^yKz;A5pW_s}{2ds(rrb03 zi#F!sd1|}w`lfxhqaeREqmzjK_IK-?XN+N=^WO9@5(+?IR9 zcsVw;U+0{cLw)wU_Kfje z^$%75uJu_*fB*pk1PBlyKw#|x`+g^1`}x#IAPdCjylz`_`-+XZr?%>deaEbi*s_hB z<(NJJ0t5&UAV7cs0RjXF5U2&>{y3(s*G_#NbH}agn7T(DANlHW&jbh%AV7cs0RjXF z5FkLH6o~ud*tT4|RKKpJ-Y3u3V_nZ>uC5s41PBlyK!5-N0t5&UAV44sly}H6{e9HN z-finT_T6*rzWeNBEdc@q2oNAZfB*pk1PGkIKz$$Wd*1i7WACbU4ZH4J=Girebp!|y zAV7cs0RjXF5Fl_q0_8n&sK2jD&OatcT}QoUYMy$%X95HW5FkK+009C72oNC9B~af< zyPmt&j~yR-x6S#=8tVLG^F)q%y=MXh2oNAZfB*pk1PBly&=QDyb!&*fa*j~w;5X95HW5FkK+009C72oNC95{P@`n6|Zk%vj_e6B{wHCbxMk+L#~H zMvgJDVh9i*K!5-N0t5&UAV7dX7Kpp#P`j&EH{mMLo^cIuw7PD_9Q0RjXF5FkK+009E$El}S{yPkJd zntER?_dnF0yY6Eh0RjXF5FkK+009C72y9QFyqEU%cR9H`@-AxD5FkK+009C72oNAZ zfWWZ@`tHXuw`7g6N3^@{weR{}_qC1y0RjXF5FkK+009C7wj~hv%f5E06W4q0vro>o z&w6VK5FkK+009C72oNAZfIt?g@2XwTW3|TKSL=Po=5NJCuGX9}0t5&UAV7cs0RjXF z5Fju`Anuq`+OGULN7r0AUhh@T?b08+?=HEmAwYlt0RjXF5FkK+0Dr&$ZIn zyK0@c&NKBn@=aYQo&W&?1PBlyK!5-N0t5*33B-MKN*np|n&|hnb?&~{F>{e`Osp6J z1PBlyK!5-N0t5&UATUKB?wnKGF?+Ofj#)Pplk*P6m?uDh009C72oNAZfB*pk`v|n| zw0&bkd(~@);>XOpACFNILx2DQ0t5&UAV7cs0RnRg)OXvV=dOMK|90+ehi()G0AT=SZAV7cs0RjXF5Fjv1pzd*( zzFRr#_*Tr;H9hiHG4TWl5FkK+009C72oNAJQ=sm3m%ek}Ixg?+o$HbJ$~i}X009C7 z2oNAZfB*pkGX?6NchC3Hdi2Og1)V2AfB*pk1PBlyK!5;&nF4!y<2ZAqjv03x$?q%y z0t5&UAV7cs0RjXF5aCjvT*y zr`!Yx5FkK+009C72oNAZU_>B#*e&D8y(K2@9E}%8fB*pk1PBlyK!5-N0tD_L5dG}v zxK?xAvleHc009C72oNAZfB*pk1PI(!AbQ)8vG;~J+uOHJfB*pk1PBlyK!5-N0tB8Q z5dH1QSidLE)a$+p5FkK+009C72oNAZfWVUlqTgK`^BW^JubC4dK!5-N0t5&UAV7cs zfj0<5&%0%O!@IqK009C72oNAZfB*pk1PJs5^vFFK>jVf8AV7cs0RjXF5FqeHfzdws zi#Fa&fB*pk1PBlyK!5-N0^buD>65>w;>83A5FkK+009C72oNCfRRMkSSATi$CP07y z0RjXF5FkK+0D+dkTA$oHV~qd-0t5&UAV7cs0RjXFyj5VSPk!s0y^8<=0t5&UAV7cs z0RjXF^aS+DJsIl+2oNAZfB*pk1PBly@I?WA@)v(~Zze#1009C72oNAZfB=D(fF8M} zVvPU+0t5&UAV7cs0RjZRD$whbzv|)L1PBlyK!5-N0t5&UAn+Z5(i7LOZS~1@jBf%2 z2oNAZfB*pk1PBly@HT-~k6hlUPk!4k?L7nt5FkK+009C72oNAJBA`zmQ4&Ld009C7 z2oNAZfB*pkUl8c^$mQ++J^2fN1H6#{0RjXF5FkK+009C7Mg;W8BT8Zj5FkK+009C7 z2oNAZ;41?9OT2PZ}(OL1PBlyK!5-N z0t5&UAdm&>9=UwyeRBc?2oNAZfB*pk1PBly@Fjt|PyW)|y_Em~0t5&UAV7cs0RjXF z)B^hCTEsU20t5&UAV7cs0RjXFd{sb?{MBFHy9p2=K!5-N0t5&UAV8ocko)A;zBK{_ z2oNAZfB*pk1PBly@D%|)@>hOo?<7Eg009C72oNAZfWWl^x!S009C72oNAZfB*pk1PGijQ1{1r4wAV7cs0RjXF5FkL{Jb_-192xb=Az>syfB*pk1PBly zK!5;&Hw*OoV}0?Pe|2voK!5-N0t5&UAV7csfm&d+Kh`hTa=r-=AV7cs0RjXF5FkL{ zY=P)m&(2fsk6gX+iW=k~K!5-N0t5&UAV7cs0RlaN+^_axW~}Etz4?qh?jS&b009C7 z2oNAZfB*pkTLoHu>ef3(<6F66t=v)Oqj!lTK!5-N0t5&UAV7cs0RpoHqDRf+6*(eb zRC*7G}CYkA+C009C72oNAZfB*pk z1PDA;AbQ^3Sih^p)oZ>95FkK+009C72oNAZfWR9BdcAS47w)aU!NMB|5FkK+009C7 z2oNAZ;JX4#{c)=oZmoS+&&vrAAV7cs0RjXF5FkL{EdpEn_m=?;t>c009C7 z2oNAZfB=CISnH2ly>M$S?lTe~K!5-N0t5&UAV7csfhP)#^vC+)C;qZ(CP07y0RjXF z5FkK+0D&z6`r|EHVhIo+K!5-N0t5&UAVA>F0wX>0o8Rwk1PBlyK!5-N0t5&UAV44l z^vEG$BtU=w0RjXF5FkK+z&iwbecn4>cit;{Zh8H@>~1DNfB*pk1PBlyK!5;&SpvC_ z8=23_`=)!=+}`w7Zy`W{009C72oNAZfWVstqQ6^vV~Jaf`RaZc_QtQecsBt81PBly zK!5-N0tB8U5ItS4xwV$}N9J+I+BkC8-DB3?SoZJ!2K5mjK!5-N0t5&UAVA>D0@2rv z8mz^~{@!u4jyuM!z4?wctBC*s0t5&UAV7cs0Rja63Y5O?@7MAy_keX|-a9(4?|#Df z$eW+=4mA=WK!5-N0t5&UAVA=&0@2rvygy>gSjXqRne#f&UB5@)eAoKbMSuVS0t5&U zAV7cs0Rn&iL~l1@5wT^=@p-*9&#|p}>rB1YI(MhFy583Jo$6H!0RjXF5FkK+009C7 z2>dG$z1+V$|E@%A8S`#luje^#XTVup*9b0$hwXOG^8DHuu_viY0^E2ykHvs|!2oNAZfB*pk1PB}xh+eL~ zCHlUyp69K&xT7BH*gfC%o$ec<)n`Ue zSE_35$9lxI#xq{j%G0awX#SCVb3KtSueIh8*BeLj_Rd--K!5-N0t5&UAV7csf&Bt? zKNdY*+*t3I^@v#-oFnElbHtrxT)Q`7>$q6&jdi?l0t5&UAV7cs0RjXF5V(gx-3!*= zb(OuouU@au&HAqM#P_WGNAD?lb8LJ^J-soXF(*KP009C72oNAZfB=De2}ExaVR=%=!My~qK$P;7i=kGG_{fT%Z0RjXF5FkK+009C72s~FH_k8h+yjIU6 z=8Unwj9^*myX1PBlyK!5-N0t5&UAaGBC+~4&oj9xGH-WmY{1PBlyK!5-N0t5)$OQ7^~t%~YCFJkKT)_267IkxhawKH<&Tub-o zxYm5>tUUq*2oNAZfB*pk1PBoLy+E(8jP>aCqSE+Y8YA}1v6ug>oRP10f9x-fy|dN{ z5FkK+009C72oNAZ;NAkI*DDpq81tnbF!ru^S>&q6Gjf+4ac`c-S{ds)THiU|oB#m= z1PBlyK!5-N0tB8R(CY6-*RFhFuck9=C^_@}xrVZyzw3EEXHI|s0RjXF5FkK+009E` z7pVKXt>0I@uvgdF`Ago&5jDhj8Dp(A<~VZ#1PBlyK!5-N0t5&UxW7QFx7)II)eDzu z>ebLY(~Gay%lWbv_vHOp>y0_qoB#m=1PBlyK!5-N0tB8R(ChI=*ROo#Qcb0f)_$(9 z-j6dmCgu?vG37h<@>;~@F~^w`AV7cs0RjXF5FkK+z;gt0Z?|WD0BM_n*ad< z1PBlyK!5-N0tB8Tu+;CZ?OplGwOY#l-g=hquJ2rmJyJuR$2S221PBlyK!5-N0t5(L zFR;|}MK!IM*t=?M)zDfyQqS6bt^K@qB)78!2oNAZfB*pk1PBly@Oy#W<87I*RbK8| zi`lwATHn@tb9~N`*ULQbwdQraZvq4e5FkK+009C72oQLlK&#(dTU&Z%IlHvKcWiv-#^O=Y*YcVfl zj_J*Fyg2~^1PBlyK!5-N0t5&=Q=r%L_11s=%3fW)^KF5^x`a8$A<~iP+009C7 z2oNAZfB*pk1fDC<>iO2ze)Zb5y0-4O-cjx->s#(>-D8aa0RjXF5FkK+009C7?kx~~ zU#>FNwvPFZE9YD5JTrdlyGt!w&xj{LfB*pk1PBlyK!5;&a|EJatZ$F?wXvMbG4(xH zeCPbXoNsw+sdG!bSONqH5FkK+009C72oShNpw+L9^qRT49G};(n&U-8#?f5j2oNAZfB*pk1PBlyK;XRsYklR`mzVqMGrb&j z+|ln|o~8ApIh`j!fB*pk1PBlyK!5;&_Xy1FAIn{%GLd&QeoI{3y)if1PBly zK!5-N0t5(rL!j43?tOi^Z}e>B9*q}AfB*pk1PBlyK!5-N0tC(!h(5I*_vVayM$T`E z9l1{o0RjXF5FkK+009C72oN|T5PfPMkK9+zmb*son3;1VpBMrJ2oNAZfB*pk1PBly zuq2TC)R-^DkL>A@N0h`6AV7cs0RjXF5FkK+z?}r5C(h%n`bPTXGxE-=-#r8f5FkK+ z009C72oNCfErHyl#(b8*mL7R;&XF9wyW_n_?&#fZod5v>1PBlyK!5-N0tB8Xko&}# zU-^n7IrsLqk#q0)D}Cf5K!5-N0t5&UAV7csf$IcvzZmlw*+=`&BRNNN%y^GG2oNAZ zfB*pk1PBlyK;ZoX(WAyV>%}Ae>yexz_s@EZdk7F9K!5-N0t5&UAVA>#0@0)9@#w2Z z?~1rR`O4Wn=bRxxfB*pk1PBlyK!5-N0zHA~Q|qx8Ke8To^M}PnU0t5&UAV7cs0RjX< zAor`$f9AD_+d9S_^|@G&T=l+h0t5&UAV7cs0RjXF5Fqd?fnLwrTOX~n)dRQgY{iY{ z5J!Lj0RjXF5FkK+009C7W(nk;wbiTU{n4EHOl#h{C+E)dR;)Dw1PBlyK!5-N0t5&U zAaI62-NV*7*7hU5j%$5KY;P=Q%3hr9#aSmnfB*pk1PBlyK!5-N0<#687tLdxBkz^@ z+I}4$-}SlHcfLQ*Td~#%5FkK+009C72oNAZfWS!1PBlyK!5-N z0t5&U_@+Sacel>36w@DHsVx@)0t5&UAV7cs0RjZRDX_IKj`*v!_Vmbm&RqR2`3Mjo zK!5-N0t5&UAVA7SQU5ale6(y<)R1>AV7cs0RjXF5FkL{DuLXyjn1#C zZFZhJ^vT(H_WRsNfB*pk1PBlyK!5-N0{aDWzcxDGpKbriS-ow%aepO${v5d@&c=A8 z4rd7vAV7cs0RjXF5FkKconzzF5R2sV!jl=wzrmV?Yw;g1PBlyK!5-N0t5&Um?sc@ z-sm_l^ZuL8>MKVLa@_t`I7xs20RjXF5FkK+009Db5y*Ys$owvKmpV$ld7N3>h(*M- z^2T1&*ov`6fB*pk1PBlyK!5-N0{0NeJ>1Cr9##LXB5MA-a^5U*m9b=r@1=|p6K9rU z?GYeAfB*pk1PBlyK!Ct+1aj{-GXG7L%UN^XCGxI)XkF*>tLzdWK!5-N0t5&UAV7e? zRRXzR8<}5K*PcAl6UVsc4rd4uAV7cs0RjXF5FkL{n*t*}am3tRDC&$c>Mh?fHxeK~ zfB*pk1PBlyK!5;&mO%89Yh&x|-PYm_rLH`WI?Gzj?=;@Et~(j2g#ZBp1PBlyK!5-N z0%r?EAGtK1UBj&V^Bc;Y@tyB4Yx&!p009C72oNAZfB*pk1PBy?=pmQJCrQOSa?P!t zxV4tgm=hpCfB*pk1PBlyK!Cuv1frkpjZf96```Nesqa!Z0RjXF5FkK+009C72+SAg z^~8C7epWXUAV7cs0RjXF5FkK+0D*f6#z=tX$Ou2oNAZ zfB*pk1PBlyaE3tciSzu7T)(<=trw1W|EfND2@oJafB*pk1PBlyK;ZWR(HpkL-&Z%c zf_UTFt)p>k_t+;ufB*pk1PBlyK!5;&X9+|<*c+eqnz3r*txM4*W@+CZ0RjXF5FkK+ z009C72)s)mdc~#jT`&IkHPH))!M_o6R^tB1H|JKj5FkK+009C72oNAZfWQoa+_SCC zXXJAS0RjXF5FkK+009C72oSidz*=8i@89(u>LNgZ009C72oNAZfB*pkM+I6vaJ`nl zkLGip009C72oNAZfB*pk1PI(!AosszUh1sZ>hHV0MO_345FkK+009C72oNAZV3t7i z$mPDeFRs65<#Z1L0t5&UAV7cs0RjXF5V(s#?u+Z1>b^LC*Rj3{5FkK+009C72oNAZ zfWT7)mU`oOQ|^iDdBhkA5FkK+009C72oNAZfWXrQj`qkS=bvt*egXst5FkK+009C7 z2oQL;z}9~cuH*Cfl~TXTd*vJDB0zuu0RjXF5FkK+0Dkdd#KQ*YWlD(%G~3qBqVpot@MD1PBlyK!5-N0t5&UAn+c6+)qZ2x%RsHO#Quf z{;K`a_gqzvJOl_3AV7cs0RjXF5Fl`Wf#@Y;9I3eOi|g-^JH!wmK!5-N0t5&UAV7cs zfjbIp>5ohObx&M>-|>xVB0zuu0RjXF5FkK+009DL3DkXY{e4zm_YxpLfB*pk1PBly zK!5;&y9v}iaqIhTHLHgJ0RjXF5FkK+009C72+S5}^~0^T*?HYZfB*pk1PBlyK!5-N z0tD_T(CUd}E$XemW8FxA009C72oNAZfB*pk1l}YN{cmf`?=1WI+nfLa0t5&UAV7cs z0RjXFyiK6h8^>CHYilj