From 2a26ceca8a4538824d48e5e4c70b1aa48d6eecdf Mon Sep 17 00:00:00 2001 From: James Saunders Date: Sun, 1 Nov 2015 21:44:21 +0000 Subject: [PATCH] Version 1.5.9 (Tabular Heat Chart) * New tabular hear chart. * Card Decks. --- d3.ez.js | 180 ++++++++++++++++++++--------------------------- d3.ez.min.js | 4 +- d3.ez.zip | Bin 26926 -> 26961 bytes package.json | 2 +- src/js/header.js | 2 +- 5 files changed, 80 insertions(+), 108 deletions(-) diff --git a/d3.ez.js b/d3.ez.js index e544e04f..15429a6d 100644 --- a/d3.ez.js +++ b/d3.ez.js @@ -6,7 +6,7 @@ * @license GPLv3 */ d3.ez = { - version: "1.5.8", + version: "1.5.9", author: "James Saunders", copyright: "Copyright (C) 2015 James Saunders", license: "GPL-3.0" @@ -791,15 +791,21 @@ d3.ez.circularHeatChart = function module() { d3.ez.tabularHeatChart = function module() { // SVG container (Populated by 'my' function) var svg; - // Default Options (Configurable via setters) var width = 600; var height = 600; - var margin = {top: 40, right: 40, bottom: 40, left: 40}; - var transition = {ease: "bounce", duration: 500}; + var margin = { + top: 40, + right: 40, + bottom: 40, + left: 40 + }; + var transition = { + ease: "bounce", + duration: 500 + }; var classed = "tabularHeatChart"; - var colors = ["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"]; - + var colors = [ "#ffffd9", "#edf8b1", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0", "#225ea8", "#253494", "#081d58" ]; // Data Options (Populated by 'init' function) var domain = null; var minValue = 0; @@ -808,18 +814,16 @@ d3.ez.tabularHeatChart = function module() { var numRows = 0; var gridSize = 0; var colNames = []; - var rowNames = []; var colorScale = undefined; - // Dispatch (Custom events) var dispatch = d3.dispatch("customHover"); - function init(data) { // Group and Category Names - colNames = data.map(function(d) { return d.key; }); + colNames = data.map(function(d) { + return d.key; + }); numCols = colNames.length; - /* The following bit of code is a little dirty! Its purpose is to identify the complete list of row names. In some cases the first (index 0) set of values may not contain the complete list of key names. @@ -828,21 +832,23 @@ d3.ez.tabularHeatChart = function module() { The code therefore takes the list of keys from the first (index 0) set of values and then concatenates it with the last (index max) set of values, finally removing duplicates. */ - var a =[]; - var b =[]; - data.map(function(d) { return d.values; })[0].forEach(function(d, i) { + var a = []; + var b = []; + data.map(function(d) { + return d.values; + })[0].forEach(function(d, i) { a[i] = d.key; }); - data.map(function(d) { return d.values; })[numCols-1].forEach(function(d, i) { + data.map(function(d) { + return d.values; + })[numCols - 1].forEach(function(d, i) { b[i] = d.key; }); - rowNames = b.concat(a.filter(function (element) { + rowNames = b.concat(a.filter(function(element) { return b.indexOf(element) < 0; })); numRows = rowNames.length; - - gridSize = Math.floor((width - (margin.left + margin.right)) / d3.max([numCols, numRows])); - + gridSize = Math.floor((width - (margin.left + margin.right)) / d3.max([ numCols, numRows ])); // Calculate the Max Value var values = []; d3.map(data).values().forEach(function(d) { @@ -853,145 +859,111 @@ d3.ez.tabularHeatChart = function module() { // maxValue = d3.quantile(values, 0.95) + 5; minValue = d3.min(values); maxValue = d3.max(values); - domain = [ minValue, maxValue ]; - // Colour Scale - colorScale = d3.scale.quantile() - .domain(domain) - .range(colors); + colorScale = d3.scale.quantile().domain(domain).range(colors); } - function my(selection) { selection.each(function(data) { // Initialise Data init(data); - // Create SVG element (if it does not exist already) if (!svg) { - svg = d3.select(this) - .append("svg") - .classed("d3ez", true) - .classed(classed, true); - + svg = d3.select(this).append("svg").classed("d3ez", true).classed(classed, true); var container = svg.append("g").classed("container", true); container.append("g").classed("x-axis axis", true); container.append("g").classed("y-axis axis", true); container.append("g").classed("cards", true); } - // Update the outer dimensions - svg.transition().attr({width: width, height: height}); - + svg.transition().attr({ + width: width, + height: height + }); // Update the inner dimensions - svg.select(".container") - .attr({transform: "translate(" + margin.left + "," + margin.top + ")"}); - - var deck = svg.select(".cards").selectAll(".deck") - .data(data); - - deck.enter().append("g") - .attr("class", "deck") - .attr("transform", function(d, i) { - return "translate(0, " + ((colNames.indexOf(d.key)) * gridSize) + ")"; - }); - deck.transition() - .attr("class", "deck"); - - var cards = deck.selectAll(".card") - .data(function(d) { - // Map row, column and value to new data array - var ret = []; - d3.map(d.values).values().forEach(function(v, i) { ret[i] = {row: d.key, column: v.key, value: v.value} }); - return ret; + svg.select(".container").attr({ + transform: "translate(" + margin.left + "," + margin.top + ")" + }); + var deck = svg.select(".cards").selectAll(".deck").data(data); + deck.enter().append("g").attr("class", "deck").attr("transform", function(d, i) { + return "translate(0, " + colNames.indexOf(d.key) * gridSize + ")"; + }); + deck.transition().attr("class", "deck"); + var cards = deck.selectAll(".card").data(function(d) { + // Map row, column and value to new data array + var ret = []; + d3.map(d.values).values().forEach(function(v, i) { + ret[i] = { + row: d.key, + column: v.key, + value: v.value + }; }); - - cards.enter().append("rect") - .attr("x", function(d) { return (rowNames.indexOf(d.column)) * gridSize; }) - .attr("y", 0) - .attr("rx", 5) - .attr("ry", 5) - .attr("class", "card") - .attr("width", gridSize) - .attr("height", gridSize) - .on("click", dispatch.customHover); - - cards.transition() - .duration(1000) - .style("fill", function(d) { return colorScale(d.value); }); - - cards.select("title").text(function(d) { return d.value; }); - + return ret; + }); + cards.enter().append("rect").attr("x", function(d) { + return rowNames.indexOf(d.column) * gridSize; + }).attr("y", 0).attr("rx", 5).attr("ry", 5).attr("class", "card").attr("width", gridSize).attr("height", gridSize).on("click", dispatch.customHover); + cards.transition().duration(1e3).style("fill", function(d) { + return colorScale(d.value); + }); + cards.select("title").text(function(d) { + return d.value; + }); cards.exit().remove(); - - var colLabels = svg.select(".x-axis").selectAll(".colLabel") - .data(colNames) - .enter().append("text") - .text(function (d) { return d; }) - .attr("x", 0) - .attr("y", function (d, i) { return i * gridSize; }) - .style("text-anchor", "end") - .attr("transform", "translate(-6," + gridSize / 2 + ")") - .attr("class", function (d, i) { return ((i >= 0 && i <= 4) ? "colLabel mono axis axis-workweek" : "colLabel mono axis"); }); - - var rowLabels = svg.select(".y-axis").selectAll(".rowLabel") - .data(rowNames) - .enter() - .append("g") - .attr("transform", function(d, i) { - return "translate(" + ((i * gridSize) + (gridSize / 2)) + ", -6)"; - }) - .append("text") - .text(function(d) { return d; }) - .style("text-anchor", "start") - .attr("class", function(d, i) { return ((i >= 7 && i <= 16) ? "rowLabel mono axis axis-worktime" : "rowLabel mono axis"); }) - .attr("transform", function(d) { - return "rotate(-90)" - }); + var colLabels = svg.select(".x-axis").selectAll(".colLabel").data(colNames).enter().append("text").text(function(d) { + return d; + }).attr("x", 0).attr("y", function(d, i) { + return i * gridSize; + }).style("text-anchor", "end").attr("transform", "translate(-6," + gridSize / 2 + ")").attr("class", function(d, i) { + return i >= 0 && i <= 4 ? "colLabel mono axis axis-workweek" : "colLabel mono axis"; + }); + var rowLabels = svg.select(".y-axis").selectAll(".rowLabel").data(rowNames).enter().append("g").attr("transform", function(d, i) { + return "translate(" + (i * gridSize + gridSize / 2) + ", -6)"; + }).append("text").text(function(d) { + return d; + }).style("text-anchor", "start").attr("class", function(d, i) { + return i >= 7 && i <= 16 ? "rowLabel mono axis axis-worktime" : "rowLabel mono axis"; + }).attr("transform", function(d) { + return "rotate(-90)"; + }); }); } - // Configuration Getters & Setters my.width = function(_) { if (!arguments.length) return width; width = _; return this; }; - my.height = function(_) { if (!arguments.length) return height; height = _; return this; }; - my.margin = function(_) { if (!arguments.length) return margin; margin = _; return this; }; - my.colors = function(_) { if (!arguments.length) return colors; colors = _; return this; }; - my.domain = function(_) { if (!arguments.length) return domain; domain = _; return this; }; - my.accessor = function(_) { if (!arguments.length) return accessor; accessor = _; return this; }; - d3.rebind(my, dispatch, "on"); - return my; }; + /** * Donut Chart * diff --git a/d3.ez.min.js b/d3.ez.min.js index 97a5961a..98630c61 100644 --- a/d3.ez.min.js +++ b/d3.ez.min.js @@ -1,2 +1,2 @@ -d3.ez={version:"1.5.8",author:"James Saunders",copyright:"Copyright (C) 2015 James Saunders",license:"GPL-3.0"};d3.ez.discreteBarChart=function module(){var svg;var width=400;var height=300;var margin={top:40,right:40,bottom:40,left:40};var transition={ease:"bounce",duration:500};var classed="discreteBarChart";var colors=d3.ez.colors.categorical(4);var gap=0;var chartW=0;var chartH=0;var maxValue=0;var categories=[];var xScale=undefined;var yScale=undefined;var yAxisLabel=undefined;var xAxis=undefined;var yAxis=undefined;var colorScale=undefined;var dispatch=d3.dispatch("customHover");function init(data){chartW=width-margin.left-margin.right;chartH=height-margin.top-margin.bottom;yAxisLabel=d3.values(data)[0];maxValue=d3.max(data.values,function(d){return d.value});categories=d3.values(data)[1].map(function(d){return d.key});xScale=d3.scale.ordinal().domain(categories).rangeRoundBands([0,chartW],.1);yScale=d3.scale.linear().domain([0,maxValue]).range([chartH,0]);xAxis=d3.svg.axis().scale(xScale).orient("bottom");yAxis=d3.svg.axis().scale(yScale).orient("left");colorScale=d3.scale.ordinal().domain(categories).range(colors)}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("chart",true);container.append("g").classed("x-axis axis",true);container.append("g").classed("y-axis axis",true)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr({transform:"translate("+margin.left+","+margin.top+")"});svg.select(".x-axis").attr({transform:"translate(0,"+chartH+")"}).call(xAxis);svg.select(".y-axis").call(yAxis);ylabel=svg.select(".y-axis").selectAll(".y-label").data([data.key]);ylabel.enter().append("text").classed("y-label",true).attr("transform","rotate(-90)").attr("y",-35).attr("dy",".71em").style("text-anchor","end");ylabel.transition().text(function(d){return d});var gapSize=xScale.rangeBand()/100*gap;var barW=xScale.rangeBand()-gapSize;var bars=svg.select(".chart").selectAll(".bar").data(data.values);bars.enter().append("rect").attr("class",function(d){return d.key+" bar"}).attr("fill",function(d){return colorScale(d.key)}).attr({width:barW,x:function(d,i){return xScale(d.key)+gapSize/2},y:chartH,height:0}).on("mouseover",dispatch.customHover);bars.transition().ease(transition.ease).duration(transition.duration).attr({width:barW,x:function(d,i){return xScale(d.key)+gapSize/2},y:function(d,i){return yScale(d.value)},height:function(d,i){return chartH-yScale(d.value)}});bars.exit().transition().style({opacity:0}).remove()})}my.width=function(_){if(!arguments.length)return width;width=_;return this};my.height=function(_){if(!arguments.length)return height;height=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};my.transition=function(_){if(!arguments.length)return transition;transition=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.groupedBarChart=function module(){var svg;var width=400;var height=300;var margin={top:40,right:40,bottom:40,left:40};var transition={ease:"bounce",duration:500};var classed="groupedBarChart";var colors=d3.ez.colors.categorical(4);var gap=0;var yAxisLabel=null;var groupType="clustered";var chartW=0;var chartH=0;var groupNames=undefined;var categoryNames=[];var categoryTotals=[];var groupTotals=[];var maxValue=0;var maxGroupTotal=undefined;var xScale=undefined;var yScale=undefined;var xAxis=undefined;var yAxis=undefined;var colorScale=undefined;var dispatch=d3.dispatch("customHover");function init(data){chartW=width-margin.left-margin.right;chartH=height-margin.top-margin.bottom;groupNames=data.map(function(d){return d.key});categoryNames=[];data.map(function(d){return d.values})[0].forEach(function(d,i){categoryNames[i]=d.key});categoryTotals=[];groupTotals=[];maxValue=0;d3.map(data).values().forEach(function(d){grp=d.key;d.values.forEach(function(d){categoryTotals[d.key]=typeof categoryTotals[d.key]==="undefined"?0:categoryTotals[d.key];categoryTotals[d.key]+=d.value;groupTotals[grp]=typeof groupTotals[grp]==="undefined"?0:groupTotals[grp];groupTotals[grp]+=d.value;maxValue=d.value>maxValue?d.value:maxValue})});maxGroupTotal=d3.max(d3.values(groupTotals));xScale=d3.scale.ordinal().rangeRoundBands([0,chartW],.1).domain(groupNames);yScale=d3.scale.linear().range([chartH,0]).domain([0,groupType=="stacked"?maxGroupTotal:maxValue]);xAxis=d3.svg.axis().scale(xScale).orient("bottom");yAxis=d3.svg.axis().scale(yScale).orient("left");colorScale=d3.scale.ordinal().range(colors).domain(categoryNames)}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("chart",true);container.append("g").classed("x-axis axis",true);container.append("g").classed("y-axis axis",true).append("text").attr("transform","rotate(-90)").attr("y",-35).attr("dy",".71em").style("text-anchor","end").text(yAxisLabel)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr({transform:"translate("+margin.left+","+margin.top+")"});svg.select(".x-axis").attr({transform:"translate(0,"+chartH+")"}).call(xAxis);svg.select(".y-axis").call(yAxis);var barGroup=svg.select(".chart").selectAll(".barGroup").data(data);barGroup.enter().append("g").attr("class","barGroup").attr("transform",function(d,i){return"translate("+xScale(d.key)+", 0)"}).on("mouseover",dispatch.customHover);var bars=barGroup.selectAll(".bar").data(function(d){series=[];var y0=0;d3.map(d.values).values().forEach(function(d,i){series[i]={name:d.key,value:d.value,y0:y0,y1:y0+d.value};y0+=d.value});return series});if(groupType=="stacked"){var gapSize=xScale.rangeBand()/100*gap;var barW=xScale.rangeBand()-gapSize;bars.enter().append("rect").classed("bar",true).attr("class",function(d){return d.name+" bar"}).attr({width:barW,x:0,y:chartH,height:0}).attr("fill",function(d){return colorScale(d.name)});bars.transition().ease(transition.ease).duration(transition.duration).attr({width:barW,x:0,y:function(d){return yScale(d.y1)},height:function(d){return yScale(d.y0)-yScale(d.y1)}}).attr("fill",function(d){return colorScale(d.name)});bars.exit().transition().style({opacity:0}).remove()}else if(groupType=="clustered"){var x1=d3.scale.ordinal().rangeRoundBands([0,xScale.rangeBand()]).domain(categoryNames);bars.enter().append("rect").classed("bar",true).attr({width:x1.rangeBand(),x:function(d){return x1(d.name)},y:chartH,height:0}).attr("fill",function(d){return colorScale(d.name)});bars.transition().ease(transition.ease).duration(transition.duration).attr({width:x1.rangeBand(),x:function(d){return x1(d.name)},y:function(d){return yScale(d.value)},height:function(d){return chartH-yScale(d.value)}}).attr("fill",function(d){return colorScale(d.name)});bars.exit().transition().style({opacity:0}).remove()}var legend=svg.selectAll(".legend").data(categoryNames.slice().reverse()).enter().append("g").attr("class","legend").attr("transform",function(d,i){return"translate(0,"+i*20+")"});legend.append("rect").attr("x",width-18).attr("width",18).attr("height",18).style("fill",colorScale);legend.append("text").attr("x",width-24).attr("y",9).attr("dy",".35em").style("text-anchor","end").text(function(d){return d})})}my.width=function(_){if(!arguments.length)return width;width=_;return this};my.height=function(_){if(!arguments.length)return height;height=_;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;return this};my.yAxisLabel=function(_){if(!arguments.length)return yAxisLabel;yAxisLabel=_;return this};my.groupType=function(_){if(!arguments.length)return groupType;groupType=_;return this};my.transition=function(_){if(!arguments.length)return transition;transition=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.radialBarChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"bounce",duration:500};var classed="radialBarChart";var colors=d3.ez.colors.categorical(4);var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var capitalizeLabels=false;var colorLabels=false;var tickValues=[];var tickCircleValues=[];var domain=[];var numBars=undefined;var barScale=undefined;var keys=undefined;var labelRadius=0;var categoryTotals=[];var groupTotals=[];var maxValue=0;var dispatch=d3.dispatch("customHover");function init(data){keys=d3.values(data)[1].map(function(d){return d.key});numBars=keys.length;labelRadius=radius*1.025;maxValue=d3.max(data.values,function(d){return d.value});tickCircleValues=[];for(var i=0;i<=maxValue;i++){tickCircleValues.push(i)}tickValues=tickCircleValues;tickValues.push(maxValue+1);domain=[0,maxValue+1];barScale=d3.scale.linear().domain(domain).range([0,radius])}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("tickCircles",true);container.append("g").classed("segments",true);container.append("g").classed("spokes",true);container.append("g").classed("axis",true);container.append("circle").classed("outerCircle",true);container.append("g").classed("labels",true)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr("transform","translate("+width/2+","+height/2+")");tickCircles=d3.select(".tickCircles").selectAll("circle").data(tickCircleValues);tickCircles.enter().append("circle").style("fill","none");tickCircles.transition().attr("r",function(d){return barScale(d)}).ease(transition.ease).duration(transition.duration);tickCircles.exit().remove();var arc=d3.svg.arc().innerRadius(0).outerRadius(function(d,i){return barScale(d.value)}).startAngle(function(d,i){return i*2*Math.PI/numBars}).endAngle(function(d,i){return(i+1)*2*Math.PI/numBars});var segments=d3.select(".segments").selectAll("path").data(data.values);segments.enter().append("path").style("fill",function(d,i){if(!colors)return;return colors[i%colors.length]}).classed("segment",true).on("mouseover",dispatch.customHover);segments.exit().remove();segments.transition().ease(transition.ease).duration(transition.duration).attr("d",arc);spokes=d3.select(".spokes").selectAll("line").data(keys).enter().append("line").attr("y2",-radius).attr("transform",function(d,i){return"rotate("+i*360/numBars+")"});var axisScale=d3.scale.linear().domain(domain).range([0,-radius]);var axis=d3.svg.axis().scale(axisScale).orient("right");if(tickValues)axis.tickValues(tickValues);axis=d3.select(".axis").call(axis);outerCircle=d3.select(".outerCircle").attr("r",radius).style("fill","none");var labels=d3.select(".labels");labels.append("def").append("path").attr("id","label-path").attr("d","m0 "+-labelRadius+" a"+labelRadius+" "+labelRadius+" 0 1,1 -0.01 0");labels.selectAll("text").data(keys).enter().append("text").style("text-anchor","middle").style("fill",function(d,i){return colorLabels?colors[i%colors.length]:null}).append("textPath").attr("xlink:href","#label-path").attr("startOffset",function(d,i){return i*100/numBars+50/numBars+"%"}).text(function(d){return capitalizeLabels?d.toUpperCase():d})})}my.width=function(_){if(!arguments.length)return width;width=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.height=function(_){if(!arguments.length)return height;height=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.radius=function(_){if(!arguments.length)return radius;radius=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};my.transition=function(_){if(!arguments.length)return transition;transition=_;return this};my.capitalizeLabels=function(_){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_;return this};my.colorLabels=function(_){if(!arguments.length)return colorLabels;colorLabels=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.circularHeatChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"bounce",duration:500};var classed="circularHeatChart";var colors=["white","orange"];var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var innerRadius=50;var domain=undefined;var radialLabels=[];var numRadials=24;var segmentLabels=[];var numSegments=24;var segmentHeight=0;var maxValue=0;var dispatch=d3.dispatch("customHover");function init(data){radialLabels=data.map(function(d){return d.key});numRadials=radialLabels.length;segmentLabels=d3.values(data[0].values).map(function(d){return d.key});numSegments=segmentLabels.length;segmentHeight=(radius-innerRadius)/numRadials;d3.map(data).values().forEach(function(d){d.values.forEach(function(d){maxValue=d.value>maxValue?d.value:maxValue})});domain=[0,maxValue]}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("rings",true);container.append("g").classed("radialLabels",true);container.append("g").classed("segmentLabels",true)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr("transform","translate("+width/2+","+height/2+")");var color=d3.scale.linear().domain(domain).range(colors);var arc=d3.svg.arc().innerRadius(function(d,i){return innerRadius+d.ring*segmentHeight}).outerRadius(function(d,i){return innerRadius+segmentHeight+d.ring*segmentHeight}).startAngle(function(d,i){return i*2*Math.PI/numSegments}).endAngle(function(d,i){return(i+1)*2*Math.PI/numSegments});d3.select(".rings").selectAll("g").data(data).enter().append("g").classed("ring",true).on("mouseover",dispatch.customHover);d3.selectAll(".ring").selectAll("path").data(function(d,i){for(j=0;j=0&&i<=4?"colLabel mono axis axis-workweek":"colLabel mono axis"});var rowLabels=svg.select(".y-axis").selectAll(".rowLabel").data(rowNames).enter().append("g").attr("transform",function(d,i){return"translate("+(i*gridSize+gridSize/2)+", -6)"}).append("text").text(function(d){return d}).style("text-anchor","start").attr("class",function(d,i){return i>=7&&i<=16?"rowLabel mono axis axis-worktime":"rowLabel mono axis"}).attr("transform",function(d){return"rotate(-90)"})})}my.width=function(_){if(!arguments.length)return width;width=_;return this};my.height=function(_){if(!arguments.length)return height;height=_;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};my.domain=function(_){if(!arguments.length)return domain;domain=_;return this};my.accessor=function(_){if(!arguments.length)return accessor;accessor=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.donutChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"cubic",duration:300};var classed="donutChart";var colors=d3.ez.colors.categorical(4);var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var innerRadius=70;var values=[];var categoryNames=[];var colorScale=undefined;var pie=undefined;var arc=undefined;var outerArc=undefined;var key=undefined;var dispatch=d3.dispatch("customHover");function init(data){values=d3.values(data)[1].map(function(d){return d.value});categoryNames=d3.values(data)[1].map(function(d){return d.key});colorScale=d3.scale.ordinal().range(colors).domain(categoryNames);pie=d3.layout.pie().sort(null);arc=d3.svg.arc().innerRadius(innerRadius).outerRadius(radius);outerArc=d3.svg.arc().innerRadius(radius*.9).outerRadius(radius*.9)}function key(d,i){return data.values[i].key}function arcTween(d){var i=d3.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}}function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2}function my(selection){selection.each(function(data){init(data);svg=d3.select(this).select("svg > g");if(svg.empty()){var svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);svg.append("g").attr("class","slices").attr("transform","translate("+width/2+","+height/2+")");svg.append("g").attr("class","labels").attr("transform","translate("+width/2+","+height/2+")");svg.append("g").attr("class","lines").attr("transform","translate("+width/2+","+height/2+")")}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);var slices=d3.select(".slices").selectAll("path.slice").data(pie(values));slices.enter().append("path").attr("class","slice").attr("fill",function(d,i){return colorScale(data.values[i].key)}).attr("d",arc).each(function(d){this._current=d}).on("mouseover",dispatch.customHover);slices.transition().ease(transition.ease).duration(transition.duration).attrTween("d",arcTween);slices.exit().remove();var labels=d3.select(".labels").selectAll("text.label").data(pie(values),key);labels.enter().append("text").attr("class","label").attr("dy",".35em");labels.transition().duration(transition.duration).text(function(d,i){return data.values[i].key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)maxValue?d.value:maxValue})});maxGroupTotal=d3.max(d3.values(groupTotals));xScale=d3.scale.ordinal().rangeRoundBands([0,chartW],.1).domain(groupNames);yScale=d3.scale.linear().range([chartH,0]).domain([0,groupType=="stacked"?maxGroupTotal:maxValue]);xAxis=d3.svg.axis().scale(xScale).orient("bottom");yAxis=d3.svg.axis().scale(yScale).orient("left");colorScale=d3.scale.ordinal().range(colors).domain(categoryNames)}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("chart",true);container.append("g").classed("x-axis axis",true);container.append("g").classed("y-axis axis",true).append("text").attr("transform","rotate(-90)").attr("y",-35).attr("dy",".71em").style("text-anchor","end").text(yAxisLabel)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr({transform:"translate("+margin.left+","+margin.top+")"});svg.select(".x-axis").attr({transform:"translate(0,"+chartH+")"}).call(xAxis);svg.select(".y-axis").call(yAxis);var barGroup=svg.select(".chart").selectAll(".barGroup").data(data);barGroup.enter().append("g").attr("class","barGroup").attr("transform",function(d,i){return"translate("+xScale(d.key)+", 0)"}).on("mouseover",dispatch.customHover);var bars=barGroup.selectAll(".bar").data(function(d){series=[];var y0=0;d3.map(d.values).values().forEach(function(d,i){series[i]={name:d.key,value:d.value,y0:y0,y1:y0+d.value};y0+=d.value});return series});if(groupType=="stacked"){var gapSize=xScale.rangeBand()/100*gap;var barW=xScale.rangeBand()-gapSize;bars.enter().append("rect").classed("bar",true).attr("class",function(d){return d.name+" bar"}).attr({width:barW,x:0,y:chartH,height:0}).attr("fill",function(d){return colorScale(d.name)});bars.transition().ease(transition.ease).duration(transition.duration).attr({width:barW,x:0,y:function(d){return yScale(d.y1)},height:function(d){return yScale(d.y0)-yScale(d.y1)}}).attr("fill",function(d){return colorScale(d.name)});bars.exit().transition().style({opacity:0}).remove()}else if(groupType=="clustered"){var x1=d3.scale.ordinal().rangeRoundBands([0,xScale.rangeBand()]).domain(categoryNames);bars.enter().append("rect").classed("bar",true).attr({width:x1.rangeBand(),x:function(d){return x1(d.name)},y:chartH,height:0}).attr("fill",function(d){return colorScale(d.name)});bars.transition().ease(transition.ease).duration(transition.duration).attr({width:x1.rangeBand(),x:function(d){return x1(d.name)},y:function(d){return yScale(d.value)},height:function(d){return chartH-yScale(d.value)}}).attr("fill",function(d){return colorScale(d.name)});bars.exit().transition().style({opacity:0}).remove()}var legend=svg.selectAll(".legend").data(categoryNames.slice().reverse()).enter().append("g").attr("class","legend").attr("transform",function(d,i){return"translate(0,"+i*20+")"});legend.append("rect").attr("x",width-18).attr("width",18).attr("height",18).style("fill",colorScale);legend.append("text").attr("x",width-24).attr("y",9).attr("dy",".35em").style("text-anchor","end").text(function(d){return d})})}my.width=function(_){if(!arguments.length)return width;width=_;return this};my.height=function(_){if(!arguments.length)return height;height=_;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;return this};my.yAxisLabel=function(_){if(!arguments.length)return yAxisLabel;yAxisLabel=_;return this};my.groupType=function(_){if(!arguments.length)return groupType;groupType=_;return this};my.transition=function(_){if(!arguments.length)return transition;transition=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.radialBarChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"bounce",duration:500};var classed="radialBarChart";var colors=d3.ez.colors.categorical(4);var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var capitalizeLabels=false;var colorLabels=false;var tickValues=[];var tickCircleValues=[];var domain=[];var numBars=undefined;var barScale=undefined;var keys=undefined;var labelRadius=0;var categoryTotals=[];var groupTotals=[];var maxValue=0;var dispatch=d3.dispatch("customHover");function init(data){keys=d3.values(data)[1].map(function(d){return d.key});numBars=keys.length;labelRadius=radius*1.025;maxValue=d3.max(data.values,function(d){return d.value});tickCircleValues=[];for(var i=0;i<=maxValue;i++){tickCircleValues.push(i)}tickValues=tickCircleValues;tickValues.push(maxValue+1);domain=[0,maxValue+1];barScale=d3.scale.linear().domain(domain).range([0,radius])}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("tickCircles",true);container.append("g").classed("segments",true);container.append("g").classed("spokes",true);container.append("g").classed("axis",true);container.append("circle").classed("outerCircle",true);container.append("g").classed("labels",true)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr("transform","translate("+width/2+","+height/2+")");tickCircles=d3.select(".tickCircles").selectAll("circle").data(tickCircleValues);tickCircles.enter().append("circle").style("fill","none");tickCircles.transition().attr("r",function(d){return barScale(d)}).ease(transition.ease).duration(transition.duration);tickCircles.exit().remove();var arc=d3.svg.arc().innerRadius(0).outerRadius(function(d,i){return barScale(d.value)}).startAngle(function(d,i){return i*2*Math.PI/numBars}).endAngle(function(d,i){return(i+1)*2*Math.PI/numBars});var segments=d3.select(".segments").selectAll("path").data(data.values);segments.enter().append("path").style("fill",function(d,i){if(!colors)return;return colors[i%colors.length]}).classed("segment",true).on("mouseover",dispatch.customHover);segments.exit().remove();segments.transition().ease(transition.ease).duration(transition.duration).attr("d",arc);spokes=d3.select(".spokes").selectAll("line").data(keys).enter().append("line").attr("y2",-radius).attr("transform",function(d,i){return"rotate("+i*360/numBars+")"});var axisScale=d3.scale.linear().domain(domain).range([0,-radius]);var axis=d3.svg.axis().scale(axisScale).orient("right");if(tickValues)axis.tickValues(tickValues);axis=d3.select(".axis").call(axis);outerCircle=d3.select(".outerCircle").attr("r",radius).style("fill","none");var labels=d3.select(".labels");labels.append("def").append("path").attr("id","label-path").attr("d","m0 "+-labelRadius+" a"+labelRadius+" "+labelRadius+" 0 1,1 -0.01 0");labels.selectAll("text").data(keys).enter().append("text").style("text-anchor","middle").style("fill",function(d,i){return colorLabels?colors[i%colors.length]:null}).append("textPath").attr("xlink:href","#label-path").attr("startOffset",function(d,i){return i*100/numBars+50/numBars+"%"}).text(function(d){return capitalizeLabels?d.toUpperCase():d})})}my.width=function(_){if(!arguments.length)return width;width=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.height=function(_){if(!arguments.length)return height;height=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;return this};my.radius=function(_){if(!arguments.length)return radius;radius=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};my.transition=function(_){if(!arguments.length)return transition;transition=_;return this};my.capitalizeLabels=function(_){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_;return this};my.colorLabels=function(_){if(!arguments.length)return colorLabels;colorLabels=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.circularHeatChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"bounce",duration:500};var classed="circularHeatChart";var colors=["white","orange"];var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var innerRadius=50;var domain=undefined;var radialLabels=[];var numRadials=24;var segmentLabels=[];var numSegments=24;var segmentHeight=0;var maxValue=0;var dispatch=d3.dispatch("customHover");function init(data){radialLabels=data.map(function(d){return d.key});numRadials=radialLabels.length;segmentLabels=d3.values(data[0].values).map(function(d){return d.key});numSegments=segmentLabels.length;segmentHeight=(radius-innerRadius)/numRadials;d3.map(data).values().forEach(function(d){d.values.forEach(function(d){maxValue=d.value>maxValue?d.value:maxValue})});domain=[0,maxValue]}function my(selection){selection.each(function(data){init(data);if(!svg){svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);var container=svg.append("g").classed("container",true);container.append("g").classed("rings",true);container.append("g").classed("radialLabels",true);container.append("g").classed("segmentLabels",true)}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);svg.select(".container").attr("transform","translate("+width/2+","+height/2+")");var color=d3.scale.linear().domain(domain).range(colors);var arc=d3.svg.arc().innerRadius(function(d,i){return innerRadius+d.ring*segmentHeight}).outerRadius(function(d,i){return innerRadius+segmentHeight+d.ring*segmentHeight}).startAngle(function(d,i){return i*2*Math.PI/numSegments}).endAngle(function(d,i){return(i+1)*2*Math.PI/numSegments});d3.select(".rings").selectAll("g").data(data).enter().append("g").classed("ring",true).on("mouseover",dispatch.customHover);d3.selectAll(".ring").selectAll("path").data(function(d,i){for(j=0;j=0&&i<=4?"colLabel mono axis axis-workweek":"colLabel mono axis"});var rowLabels=svg.select(".y-axis").selectAll(".rowLabel").data(rowNames).enter().append("g").attr("transform",function(d,i){return"translate("+(i*gridSize+gridSize/2)+", -6)"}).append("text").text(function(d){return d}).style("text-anchor","start").attr("class",function(d,i){return i>=7&&i<=16?"rowLabel mono axis axis-worktime":"rowLabel mono axis"}).attr("transform",function(d){return"rotate(-90)"})})}my.width=function(_){if(!arguments.length)return width;width=_;return this};my.height=function(_){if(!arguments.length)return height;height=_;return this};my.margin=function(_){if(!arguments.length)return margin;margin=_;return this};my.colors=function(_){if(!arguments.length)return colors;colors=_;return this};my.domain=function(_){if(!arguments.length)return domain;domain=_;return this};my.accessor=function(_){if(!arguments.length)return accessor;accessor=_;return this};d3.rebind(my,dispatch,"on");return my};d3.ez.donutChart=function module(){var svg;var width=400;var height=300;var margin={top:20,right:20,bottom:20,left:20};var transition={ease:"cubic",duration:300};var classed="donutChart";var colors=d3.ez.colors.categorical(4);var radius=d3.min([width-(margin.right+margin.left),height-(margin.top+margin.bottom)])/2;var innerRadius=70;var values=[];var categoryNames=[];var colorScale=undefined;var pie=undefined;var arc=undefined;var outerArc=undefined;var key=undefined;var dispatch=d3.dispatch("customHover");function init(data){values=d3.values(data)[1].map(function(d){return d.value});categoryNames=d3.values(data)[1].map(function(d){return d.key});colorScale=d3.scale.ordinal().range(colors).domain(categoryNames);pie=d3.layout.pie().sort(null);arc=d3.svg.arc().innerRadius(innerRadius).outerRadius(radius);outerArc=d3.svg.arc().innerRadius(radius*.9).outerRadius(radius*.9)}function key(d,i){return data.values[i].key}function arcTween(d){var i=d3.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}}function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2}function my(selection){selection.each(function(data){init(data);svg=d3.select(this).select("svg > g");if(svg.empty()){var svg=d3.select(this).append("svg").classed("d3ez",true).classed(classed,true);svg.append("g").attr("class","slices").attr("transform","translate("+width/2+","+height/2+")");svg.append("g").attr("class","labels").attr("transform","translate("+width/2+","+height/2+")");svg.append("g").attr("class","lines").attr("transform","translate("+width/2+","+height/2+")")}svg.attr({width:width,height:height});var creditTag=d3.ez.creditTag();svg.call(creditTag);var slices=d3.select(".slices").selectAll("path.slice").data(pie(values));slices.enter().append("path").attr("class","slice").attr("fill",function(d,i){return colorScale(data.values[i].key)}).attr("d",arc).each(function(d){this._current=d}).on("mouseover",dispatch.customHover);slices.transition().ease(transition.ease).duration(transition.duration).attrTween("d",arcTween);slices.exit().remove();var labels=d3.select(".labels").selectAll("text.label").data(pie(values),key);labels.enter().append("text").attr("class","label").attr("dy",".35em");labels.transition().duration(transition.duration).text(function(d,i){return data.values[i].key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)v#(=gW81cEZERy>+sQw+jSV)oZ5tcg*x1JA?t4yMoLe>XWu|+oYig!y z=GXny%!AI&gR&~gfkU8!fPlb&;8q(;O}~*mnA3oO^uvJu8^H%LWn(n+X0&!uSAzus zKM3R0_}3FzXTTJ78o@w$Q2;Jm;=f9(xoQdh21PPgE@6UhH|C^mNq1j zxI5iYrS%!<2Tl6mn>fAjvmqLN$W>UM-{3YNlIE_PG)RZ18T?)>a36SBY3#|a=g$!} z*3vC1Ha_5gKfGSp!&e+RY z#`#!M_{}`2$r2zn4Q<9(=UJU*bc2lqcO&)pNSbWVBzI`FEY5b-<4}|LO-qyPw1M%R zd~Pnd8D*{(HbT#_vufvC(Vk8M`v~X79gi*amebE&9^Gb!i(ddnA5tfKxlqicGcY$O z>3@=;Cw619);!3;KJ&e!)+wn(yVEX@Se#hnlYg#1IIykKhZ1Ko?(BXO?%`APbRki& z7dh=BPx7}EdC7ARd>hd?^_M{>p{`r=s8BUC_x;mdFD7W6V#4sD^|_lORGIu@ji}9g z6?Y2{meD5NoC1I{z0ZW_iumOWmIeK;0d8r++jUR(a`yozIKfwlxQ-2}?TM!Vd37o2 zA?h$SxI2lEAW!PV-eKwLzlfP31N%1-YgfkOT!(q7Ne zb|(RTvl-D$?13UZCfX8!h%G5OW{HW7TlVMOC=Tx-&J*ZMKIFdwg_=L7?;zCiSMbMi$9b_W;#jxU(XJ)5hq`-q*|N$WF9PE=!ZnM8OP!w&2N)~4`+ z$;Pxu&Hw`|A>Ohcz2%4cMYlT**bq}S3BBLVEr?V6J(hbIMM@s;8q{Pd)xW>|1Nsrg ztuXRc9IIvVHaKiGal4;fJJyGWG-OKLNC<3l*4^VR!&SbwKm4dfkn2I3>J>B=czRsn zC!Qtofr}Q&&y-i?o}fE5eWsmetSvZc7*_BLT?TBCL@AE)?5`)68k!nz;nS3`JRhKP zWh_UJTT01v`LpYM4!yYcpsZ#UiA>MCx4#Riux$wql&4WY$-99zV97V@j@6(8C)D<)4 z%Ep&2@vbE>;d`VR^5vi7+=U>{F;bykvhxC0*;|H^(e&V~VSXxjrHP?}^_RK!PW#L> zVC4<8B=#m_OA?yB?n0PY>RpWS>k>Hp@gZjh@HZ?1ss}m%@p<5mDDg1p)F)l`3oyV% z;wHJ^Rd4N4@v-Bu^Jb)rM=ycaU65GIckJNiQ7v-KTChNMM!=cAar&`yd3>l_Kw65W zpx3g|UBrEEfHj-Yfw3tY;=B;ebXaXUR%%b-kU?aAhKKZnwah?190w z5rTX8(w_J&$d@kpM}Z+mV?AZTAAr+%`{Epde^88=Zz=~F#i9DFCO8~1we|F2#lEZh z4dd8=UPq_ZJE$^=g`O0xabB<8Y$5aY{dvc3AbFv1oE8t3N&WL|$tU;DW*C>C&2h)N z{-%i@UfI*pwK0qaB?lE0#qbnip3!tA0+J7cD)z z$z9kuU{eXnE7;VCSZ6iHX7_q!e1E$b7n2ciNLY{qP?Ya?E;Wz^o$HNwl2?`5rZ9B{ zvNVyvU@xi8=kWm4w*~PSHIVU3IS;aJjv9|-0~{JasFVyp;hTg^-CZ}8(h`JK+==a> zoq0x434ER6URZ`5sPfI~P4L42!e6NwzWzS7i>2HfI7!(V{}?x~P26Jk4- z@nq~*t)vOJ^x^7!v;iI;r{ic(2+{6sU+e}+znGSJ4snkQAmg# zT(x(_C@K`s*=rZmEq3%ID;;Kt-sO=nkf3^4XF7AdNuK8$0w=vEdG-ngmvs&%qh44f zkGg422AhasF{U-@_60c9k>uAo){hKc13Ci%?;x7~7X#Ve`o{&W$kIkk3!)h`8Kji2 z!F9vNJig68edyyJb;(fh5H}A5wdhlnC({owAl)xV{M(< zyPH^K0t=CWx?m!?wVkV6xUX1v(qi9zV-~?31lZyoslmuMFL*Q^LB|m2#PI~aAlD8+ z43$7BwC%@Hh=_aS=?t5+NBYyE#g-Y5vv_AS9q?t}a>8^olN+H%tBoaZnRvGgyNT8U zXYa;fMwagbQLyUjyX!=b*4iYjK1*p+uWYq}f%Uu6q;URkF(=u%^pn~~xq?@U%VqsZ zqv0&%;DqjtU&0DUhP(5?nfr)m_b{S4kR9?MznwuM#H1O0WV{Gn@e{D2*ccszZhzX}7?+kKAa zAN0Pry$*>fhPx#**+t#mtnET2E$e>Xb$@!<=DQ^1jbF|rCU^+I58WD(pwsE>FSs(O zEg6sa=>LAwQrUT|lKAC}*`nN(qA94#x4XqaSLz@y(y9L3&;u2?Y^n-DUke>lRa1nqs<>R5mdr(m1`g2)3vPPKFgWBRT(K@6?YTwNpcAvAz-B-su~Prs)Q_uR|%fy z2(|DTa#XEzRoeUfxtKA1;@J$Au?WZu!sBEPGC`RVZHlv)xEv2jzLatd?%MNH{vO`r|gFt?xuH$aM zuFF;IoOJSRw01|ZnG+me;ZyLUu|Acc!>qmLv#r+E4rl+!gDL{2gqg+tFzG68=Y(>75M4&bY6PReP6G$)V11 z3d1+3v*V}$j@Q0?7hl3w&N45ZrG$1GU4fdaQL&=+Zjr5CK89#TQhnpe8ht|VG{IyW zHYVt*V#R%AzTO_7avroM&>GrZ30AMUz^$uGfD9-+?phf1Bk^uKO50kGN2&Z_)@ZM( z>)zSWp>MZ*S*l!MS6kzgN;J=^xl3W^$QZ2({X zQKuN!sAW+p3AYF&i3O%Wh@Zs^Y3`Mxr4%26%JSlxpJiWY&v@NZ&1;rS{>*=A={naO z_c@vM?U4lcl&?rl(&T5d;lKg3;A{x!7LT(ASVz&omA&PHPOFLGW*7sQ*O;;PeV_~Z zX^af8#y!C|liw=&>$a%M3ARoqNi-kaNida}$>on(1Mb|Yxz7C;oW1+$NUFn_6BBp!|X)=AsuNv*e-{ zCQAUSH&P89q)+CHO94mHRULm(@;6Ms0?Sc40fr=-@)Wva@(Xu7lJT1Kp+`Q#BL`HE zUhBeSrf=etUd)Yy_GOWO+W#^-W)j=E1==4wG`JFe_v}K6S80D5$^F~kK0LZ_1fGfq z?{f!1t)H`}W23k4ZC^ueS91asiNGDV*rPq~RIG~Hs{Ek~~Igk?r_3+%U80#!*A3$hRqA%QZYQ3!y z^}@>K5|sq8wM(#e7K`t)B$<0d3zX8exaSAG1MhgfXf>=xes) zk!-!ie$eD(?q64&BU?VKVw?nb>}Lc1;3TR@v-pMyMaIh$o2lO45L;WITkQ5&`W6h& ziBsro5Ice_PE4#JXope?Y13`@ph-Hz+t(!?_D`i}@aoQA=VQUcn4Oeb4*ByY2AlO@ zH(VL4(*;teInMv8Lfs|Oxn|dt+pk62R%nmnqOF!VXm?-8+0@}c_%`Ewx~Kwz@1eCV zBYh|QiQCH}GLpL26x@{0AH%$E*;CJ0(Iu5(1=vOXkcfH{6?!_!jRhuS?61>a& z9Ajr{}7w9foE4Lq=u4lzAETWwq{WU(>opmD>0O1fC+5@=A3C_g3DJ? zIM9UOoKHIHzSSd0TPB=h z$WfQZ?WsL(f6x(r9?YU@*-tQ-S~&Ca^{sHYHprCw6y5HhcNp%dwesq)WJvaO_ljCv zKSz5#_?iM2Dfa$?BmeUN*V1UYJkmnz7S;DDo3#`68MSWqZsvkWR(f09tUkqF zrt?ICYkhLquX(A#NC+r3Ux=|UR%ynf*)B9z89Wtpth!d}+WEPJpPl(ER-6hD0E;{* zBm43R`48#u?y(aqu5YrnI>+HG%#$+w*`6-iEQY*zu?TuA~A#Me^{&r363Y zI!E`x{nmR|P0#dLejt9aPU-^c!RrZW7A};AH;g_8g+GGl9&qIR@VP$|iM`j_1_LLn zy{nAdeN*U_u;)a>SYQv_A|nYY$NWu{|yPxvn4 zQ4tX{nDMs+dvApKg~J?1-BBynDaL#5;M?=CYedrLJ$rYPP5&RBiin{<(9Y(A4zwrN?J#f90=`aBtIqYEkFkPm*vpu{y}EBh`X81NTlp2tt8 zZ}@~awNl;2o~~1>@9~m@gnk59c@NK{`{#v)dxCz5g>x@P^b<&N(BTh{%tJy9T|7ny zwmbbe>8H6CbLuIe^C64EA#6oMe)$EbxzJWq*yrapqCi0$S0ph(ZA{@=)HiZvt9|SZ zE%iM+etbeGl+odS>KLRGx`_0_IpG2`Y$v^#!W(k#eZxIA+_@FYZ-mHVxwv5>L#m_i zFQd_|;Lr}W^XS1qcZ_pFuuuqKnWl1KSpCWt zYB{a~1u(9SrZh7tS8Wh^Mmt0p1O2%tOniRWHY#)N$<51s*yP2!4v@n*^T&lji@mM$ z!6=M?ZH0$JL*s9CZ;#KhlpaV?1^4gOW7UV33L4?o^*(;T17<>(( zSE0u5O(5n=1OK*4!Xos*|FS{~k`{**zwKgJ3^2Y+^}r;V4o6k0-RpD+yLE31vZx@* z4~=N^nt{qmdmemVQqP7dV|c9|r7OW}#HO72jZKBFgKo0ORs?{k;K@pFC0XqX&Qrai75-qddliM|mOeug(Jm<{}9Y&#z!29 zUkn&^E{`7>6dT7ZkTRLXB_bfYimoN^KG9r?k=F+~r8IIV%03KXG z=^FI3i=?3hA=p4zHCn$`XI=$`sm!$xL5V7GBz4osM^6a9fz}?QTRPg*FgcbRdLPJN zOB>BFAi826m9=qg;i{_@Ww76TNc^zI>FESb%(r5Z?x4ZwoZOD=NfB|3k)itFSh=yRN2c|`Gqt<;azIt1IP%q+UpD9_sVBvZJyxk+B{TLzX$tRVtHhh@tqHWNcv>s8OcoF8%QG=91F91 zi`x71nr^f<@}7_V3w}LtPK50p9069f$i%<9I;vmLcYqm+RpRALIzsYqKqwJ?Pk7N* z4%1yUr^8ets3%KJRmpt3TMY#TLac=o()Y@7mZukuqy$-8CPT~+5~0Kty>Cw%0l%}d zgdS9se8COHPkFu{NT$Im5d!(kjjSd;wEr5vUTjINx%!adT?IFpwV0;!c7A2-f!S7Z z;9Jrc`2We$Fc5p#JXp%rc5dM$mZD(cw|LNWuZl3TUpb$@>ARzyxm|qImxNLAI z?L2FGW~?*J7oY>O4W_#I_O#iZ>uZ&3Tjk@Mm(c0u7g6N$@(U;eQp!62{` zDVL_na{DRrU?)(&w=7+`2xGzp?rL}c#+iC0)lg~la-Hex+P5*-FW8!VYPONSu5CDW z#{CL8k~}rfqln%xG3iE$w|K()W4rq(WwA6rNltqH^LrH_^!4z=WA(l&m}ue6+bKy3 zhh{8q;9}Y?1Eb%!GY-zOZ;dv#RnCO(*~8d9ZHK}4?O6;JtF=G$&)x>ZuVyH*za4Om z5)DXK(XMRmH+svwo*Bgwi8Ut+NmEu6pwU>`Z8K;(nvRO1>uuU_sc4h2t=iHHRAlk# zv1!J+$=r27#bvXWd&l=iej|MorfzEbG1BQIYQ1$VBuw3q>;Mjqg1RpyLw^`?D)%om z##Zq|Cwg*Z`;v?XA9!pTVH!TgW%7}sZkF3e#&H0_!c=>Fbq+ywPZsxSChGN-MtKN3lG6dW-9=-PHkm z9jpSxA%`WXO7S!O1}*=1t6IW4rv&XVc$4shQ=2qs)8!D_jds*ANGk2F^`Mv?i*TWae&3!MPuh)kVIuM&hv=t0jTKd!NY0zOyv{ENacb>@BF@*}q*PLG zTT5`W)lIPA5fBWrqa#cLwCxk^WHQIT8q@&Bw{x&{g$59rer2l&QLJtOma@%gSR4brXPM5NQ zUBRYObH0CX>6dv<>6*34-T^8^UkmRY-iQMKQp%}zeqtB5NuOaicJANruSSAq%|#DO!F`1lv8I%Wy%$q2?)bd>J-#P zHTK2>)e~G6Hjrd-kt7{+0wnrVttLn{Os!k520dK4^omJIVX1(dInnpCD@ux@Z0Xe; zxRt$bfQP&79agi?H^nOe-Kbi%23YN4dsD3z7qE1^ES+6-zm*zmW>inVIZT+k3rPqsd^GHe;z;c z57h=y6FP~%gbSg7&S@|}Z$)wdO?$$bsuff$N*?Hk*4wnUjgG;1=20UcX#HF-_%ZB< zq%KveRcxo6M%)9YFM=2)Kn65Ige_Pznf-2_=deUDaBRlXcqNr<#X|*XB)y8;F8^BHlE`ww84}8S(3ah(hE%jJ<##9IH9Ido2KT3 zu=_aMptRKEa7p^{bpwGObzpiIkZ5o)=tRuPK~SbS7d-wZaHRgM zV%9LGeWSsXB;0f74ui{imuNBOcqwoiG4Vd)f?+{~`*!T=Z$5(nCfBgyeIy@K?EAx- zYByH7(-T}iRegEBvRNH|kvY{ZWt%|mrBK>)7>$w?^cZ<`1v>f$rr4u&@c{pRFOJW4 zV2h^sHUe4GWd*&qMh)N%OvN&O$W4+uA1HGD5CrE^yg#K?Ai_i2;qQ(=J5}$Fi$Bq4 zRxJ2Q+v}By?47wuGcdO?!7`9k;SrL?RMT${dNu+Fc2lk)jLk)sH8*2mi`nxcbCRnTEi-ZUD3c$efl zdiXWNF?cG4ApvhmtaPa)#q7L(`$b|%ONU76%C&ot383>4Cj z%N9{O?w}PFqIo1q`Q5^PsaiP;-n^(y-DDj2@=cm;8-K}??{yxf!N!o#hi=fv%u{IF zq*`(&Rhc^e%8*#;P-e$(W{sNKTbdR09|mW)o2%a!3Mp)%(21#o=>?FvNLMf3!5xJd!Y-Cj@L_ds`z9@bd&F)v)x zD3q>{+I1vglv8RIhNtYGdUNh0bIFGAwX0iDA`XlunL0Jwur8NC?Ut(5TW@4Pl24M5 zD=2L&2XwotTPuZ>JGJAh`pJ#p+5+u#86wXGgxGj3JE0ViXaza5!ee>;n)O_N2Hhv_ zR^}LY30yyS^`G3rzfn^5nVKyiQT@I>d>7t*N>&(cuLXPH-1t~l_!&H~YmL)8^&_ggW{^WX%u4Bf(S;2W&NBO0B9(xH^QWy8-yR%TV5#rc5t6>rR75| z)h0`I>q@llb(aIgc6WNBYKP+&u|YX^k3fRys{G&fwa%m`F@808(}Fi!h8JPtmMpOp zlT>LJqiV2yRJnCfdaJskWj!*m;U1WXi_Y&U3r1`knfJki6KJEGC&qM|qa0G&5c8;d z04;wWl(b$dot&C&3vO7bL5=2pyA6aZP@oX5?t8M|PVge$cAy z(^y-ClQJ8*f2q;1Z70SEzT4Vl-+L>R7n}^84 zUwL9tT~yJE(M$qkxyU<@yFhmYw`Dvc&$tFI`BNRuS3?z5l`9+b+WM5;>nKM%2dFWj zcB^XqeRcx7$hi;F|xF`i~}}n7gRv zF0%KuP`T@BU`BV|rn#`linlQ_I_+@p>>nN)+^oc(&)q5|Qc<2?xg!eMzHb$}H?&Yx z`@O$%*6?_5a>nnuKZ%B`y{?o7r~s=&RdDpYqQtJWmRQqaiH)9Bd5NZC4yJayY`Oq{ zL{)HYh3e9fTlJSxam}*JcKxt5WODkR2oSmIew~=3kvGR|^niX@r?i$5BA%uKt?vFY zRWVX;)8OGy?!gJm@!5=@(82Ia_|+IbbW>{Go5(RABL|rAhyj*}c8$<7r$8tiT>-Io z`okF9RycW@BvFk7s)(3&d3f@WIsP^6g_A)VgMe}L{9LRImHl?PlwygY<_DSFa&*fa zta^q5eA>rLu_Qqesm*z?Y}DTHf3P{lfY!kNnvkzgpK(K#HtWlwqqY zn{o8MsVr@rFN7ZHe0E1|u#(FRc_A>WXuo z^-{LH-X~f8sCZEL2<&S`E5gXa3_l992SMUFQXWiDGN;}34wLl^lMxcdD-pD`aARN_ zhJGa#5HHPs8 z@O|Kx3KbXIMl{H(kBcl$eVb0yS$Af*PX6udZD(@4G!5 zwT40))OOKbfy60^LC2o&{RXXW)iD;ZYKWKIOs|aSb0q17dAw6^9m%@#xipr}r56k| zEB>czlqAc(k|^+1OP{Qy`XQH zN1vNhsWf(x2{}T|343{rEfCbD{j^kK)OAtid5?T19}ji7^OH+Q8@lgEBgSNkF1IkL zEBV?c0askYs5IE$y(H{I-W4p0_BAKT#s_dsUbEf5i}0%xPDp7SIXdUARj%Mg2k?$~p|hs<`=q1YNol=9L(;6x!hN?4@@>(SWA;IHmv=MT{NH$YgBiqD*PeoZE&rs)4+-(qN z*7O)TLw_`FD83MDLs*tjwaPd9$hH_s{hAueV)wI^tt-7Xk ztFMfCuy_b%BQrbg>g>+2=7i3|7ZSJ8#p=RsI6$bzjf0e9b&(gVxpl`sy4{L+>Arkj zhsJt&gS#8KDG2h%GUYTli~J)g(3e&$V>=3-fwS;2k{xy6?OwhEJ@f2qGhXTMz%svu|avFu&^4Npt+Er|E5ZWrdL?;Mx%da<*X!B5RyPKLYSx6 z-53vapnKfWI1@TGE5$2&eUi@@p7ozTUAnI+nGB;vf%9g;AeqFW_LHNxakS|cc8+i>*m3w4gBAaB($53f4yU) zMd8O;mxCy8^ar9rN_7o9a1Uxm7+t)j8}@!TWQazbRmF{!9bhquzLNeOibud#?{uo= zrOhvK+Dpv>n}YB(b2hUQt@s?DoPl=!qLbJ&$82x=7Y?XFv*05JGNG8}WU>D*$uxgY zaPWxSGhyEnj0aR{!AN~b=g1kX2wsA{A1%F2n%z^6KenhR`6iKVfx7xz6?Pp6*soy7 z;BxN`jEBRji@MvA7`*6P_leuq&j?857=ljB=2@0pUnv^Glj>X#6jc$9`L(X=FITv+ z;0aeG?J2GAzfY%?aFkWom)Q21eH4>R4OcP4O1G5Xns?r4uHudVAUHPNUy6IqfJo60 zg}(W|$s*0dBA^}70@>Lfs*IuS9DdT$?ejju|LQY}#N|}`QYFEJLVB5ZIJH&o2^nHI@b@fzB<;HZk?WZ~|NV%9b4;e8t)o9S16`yi?&uSRs@zG|c`Y?>3AkWjj$t=rC7n$a2Rno~- zyi9;N!E%Ly9peFEYm!)~$1t>o6xKcbe2@M<8Pls6%djx|n7h05Tfq2f_0f|~@dGnB z%7lJ~Ik|3=OIWn8j%|9&`R&;eb^BR9bO>YQx0~^T5-jx*F zn6I|xb52Lf;>FA_G*B8uA`tdA!>Yv6Yo6Lcze5c7txV>tLjHcYLP_IchaUoG<&1jZ z&S!&{shtaUxX#9SYU&O(EjDVkBA*#zOL8hj!k^r`YPwZa#tzqO&0*YcxgeNIWh+Wi za;k_;AwZlQ#8D6H59bwJwBGAf#jh}%s*N3kY39ppW`S&D&!k~@-KwH#h=iu}VeH(?>y`O`QVOpz2xY5?I*F&4auV z93&UTtb+$tjF)gfm!PF0DB_vw2~9A28EojP48Rsd{y;g`D+_bUHfyBO!m6v*e1Uze zC$=$wl$MP(tzua0Y{gv~Z@!^~l)ScXh(&KAP^)Z+Q$H|auF=0qUuSDwN(xbH(#H~k zNc%O1G33%+bI!fV*3IigxwpK}bEb@P>v3jilvnjs&ZY2bNaFjfKq}1ef(}Q+T~B~d z1>pU`GM>%9Mq#>?N(Nb{u;N5j6YeKP=W%syUY4H#eEtY(pdh5} zx@?e?DYnYDO53BP;`M6(gJzqKXqs612COHREFWG^F<=t0qlA-Mqh|U}@WB_(9A+=`J-rK0vYuyuP$(Cz&L;VeRBk7ktLhLQ`Ab`NMo7ua z>r6Yo()rxltGy3jkA+`i`?)ExR!=`g?8(N93>}TR!`qPPNGBo-Gw|<%kh~oAB5-_t z=daBOC|%R1u~;wDOsaS2kDogyi=OtJZt$i;m6xt1u+H)ZVywS%erx|wp)BB8abzx}tfl|Ousrwt~Pdm4j_*Jf0~8EN|M z=3qe#MVAvFrxG6bxrDF0psZOYkw4^rH%%ey4w0cxSnVsq8@Fh+sh$@To)SSubOpjIa zv_ZRjtlCvnAGEF>T&GV0Smwh)gt9)-YN{a4ycvc`#Uy!_-K7Lf!V3gke}> zzPLV(o-yet)9>kX2u##jh&AuQJU$)xvrrE-lykn^7DtkrWL-@s0BMO3=4TD38ap*z z)~q=ei3r3XHKkY=0S#%R<&g3;3~5I43orfw+D9~Lm!cKA;k3#3=z|2KbzfmXTw<`H zV9$3kFBUuKoDNwR;D`>xT5UbIbR73)&r4qW#$NB2^dg;B(!yzn*ZC>PFG}WkeBlr%Qf5JZ{?+CFzIE z$DM8X2rXUdiR5RdhL>CkLnBBuN950@E`4)45xo!NP>CB?!&IB_%K+dfL;=S;nEb`n zX4-^1iiJRPW4dWEMYg^4o!KF*Y~O~}!fKDZhmZ{xFF1q*uodd+!S#aTRM~J7w7A4W zJpS%1soBU=5OrY5-iwYg%_COG(`f^bt;m?EG&`z^1^yJWe1ksrGa0ZqKA|{s1P!D2 zC+5o#Z?W-T3~Hz)&dwi=vGM%0X@mDX5LKCltByKMLk2;DE0=Dmt)J;gGCz=->~@4s}h^=|}i!_&P<668*^#zcJH9RuB0ZmT(p zhK#5yCKlpeG&S)(M10R+h+lG=cnI-+2M5A_;=OM2f=Z^#@I68LYwnz;+0z9^Xy!bx zlN||&6Rm8_;TIl%z&&=`KI;#pF1#yauI8I=6LYNqBjmlAr_D079B>hQ59R_s%cvC9 zAh1SvSFjGn%`@@1J|b9oUn6phR@M6XIOZg+<$esYPIO|<4y&*>PN|#N_;>5NC;FI! zUOP=TX84esyPA@k zSX{*afuJN8T9E#SIZ4K~#OM6a%>PW(VgG|xKtTQ_<3Nf6%l;uN|Bb5r@3bA{f8i?s zaRvY9n#^N~hcPYwzm0yl`~zD4uLaw`prj5&gMh$-{J)En%YcBWNQj8b gOEB7*{+Hjs;QzC7@}ean=u7gwB?nZs#eahNUz{9i>i_@% delta 13057 zcmY*=V{j$F)@^J|Y-eKI6Wg|J=Y%ItCblQm#I}uzZJQ^a@XfvNd#~!N>L0th*Y3Uh zPgmDkz2@e@Yv#e(l;t3yFu}mU;K0yDHKnBbJc|`+!N7Fk!2itA?L&WPfLV)w30b74ya!Knk&r^D#1LbS0hGeiK$k8=t`l6Zjz0wT5 zivU0-mzr#-yyb9DH5i^C+qDK?vKx`LF*ab?NTIHV{F^FBo+_Hmk&ELW0_6wzN zQFJt`K8JcBO}u-?j%^gzBoH8Y^O=Zi0oFs9y!vP&)j8`ye+v?vU-@-*fK%GJiUllH z@o?oG5zNr&hdC9@py(wnMZL=1Ne(^FP%=)(-zkeDLnE)) z1;>(wNR@RQMV)3w*hGr61$3X1AMs$F=Nie0WzS!Elos;|QKdoobNh6T z^l58lk#SUs+gEfP(m8L?>ZJq0KK z;Vxf82B^PW-^0hZqGDX(ky)tPYMDVGKdcCFJ>5kU-kcCjMzWQ9^mYt;2q@qD}RK3VWQno5L0MxXO$@y`{ z4^(&9n=W*+zW}{qfM4- zx1->@-}}|@91HQIcZWgWO@ZO~57*$Tg$@3N(YroZvoU>td9k#R<1ZQq=O!92K@V@_ zPIV^)bNY{Ta(NLeOJ||AXpF+zKf+o+(Z){Fr#2~hf@81>nf#uLLeBM!6pUC6sEJdB zr6o0nptra;`hcJNhzABD2p%h@Vb{WVp!c8;WJglj%CW>?I}QBa8WZ*T)8?{;C90NM zS+?rvX6*}y7GH7x6w`^45FLxITMy&UNBE2S+TPcU+JsIjwEgMg7 zEQxeR&vW`FOSfD#x1(n+~zNd@uU&HuS^JY?p_%Ys*b* z))*;64B)0nHGGZu7Y=&e!UF}MX{o!74ZEyJ(BO^9F;)Wk{=`KB#_RdnJfZYNM}ukI zO{n@zvB3HbkjV-D-9djxRC!ttn2YwqZ@VCsQoBFKbB`M)UnU5nNJpE#{dhYfpnbZn zjI6LL1=%K4Z7nN`WL*%{Ji^{3>nL1C(ITs#4pb?f-oHl&X(ED6@$)2WyHP;~LX5Ez zV;$4VJhwS{0`V9dkj8MIWE^rNvH2=nd^>_72aDl~C*VTcev)b77<{aMXm65&Ude5_ zwQmK`D-fysMjzy3?LLC4U;_|?FkxAqYwh==D?=CY6i$XKwtlQplvvf=-#6s9HM;CEAQKKwBu(Ey)$(ya12q1OWGQEF z3>h`v;N2pj23@jv35k<7Rmi~+bEzA;nJnZLfLhMAGJNZ;ZMM$gYh*|2BIWV8I^UM9i@m&duCIIi zUA%T$dc2=tzc5F9vmN{?CU)c;9dd{!Jjh z)95VD1)(dl+gvbga-k+T*WXaXAn>9)Ccm6PexSYZ_Q{udK$>AU7*_>!pvFS@ft}~Q z^o_WG`tzXZ7Y5Hu;;$cm+CYYljeA~*UBwQDTWGYUGLI~+^T|dhrlKY8llTv+2n1M2 zBfJw4h3*93(bYbS?xUPr6%wdw(3a>sZqc3L<-Lh+LMQ?|y*4N}i!Ord3jfNr)~|0% z7$~R`XY9vZva|YXQ#G`p6Wxe>J!(Ok%+iPQj=AcpCy-0UP@tKBhZPeLZCX_ zJg4x``J1A>(1Wfpct#`QfsirtF(MJZEg;!XlycF{de;Hc&LQ^`|H4i=-}A=n214G# zt@YGiAh+HF4!}w&^jm6GG*y$dcNOF{ydHFGM_L2gtRRGnJ)h7mPts34-TaE@nCASF zrmLv8eGL&gn=jSuL=Q^eiYxW9_lCx&sQb0rlVFph>U$3clpl7hgd~MZ4hq6G7Qil3 z-0!vOCksSZP5gMX9&hgF8lSNdI)_u(6S-5in-AiCY5< z5Yi(XvB!8BcX(3Shv4FIgQq^I&-1-0d?P^uoyu$9oQA;EC=08*1inCZ+w;um3a|2Xmls&^L`WE zUZDHEZ)mFtR%7h|82)*at?HW|580 zg*ib6tx2!dF1%E4WBS6H3Rd~?RG&OP55Mrfm$;(!`xZ}V-=2`Y-On&O`rW};h7NRL zT!pW7UpHJW1*RGlWO0uY+yZdV@+D)m^#9TeA$8s}5KCByEMR*naSsU^+R=7eWshGk zL4|Qhy-0N>JVF19s0)7g1LbK&FU(}}9;Zn*e%0b@US(^vcDs36vAq#q_ZPGGDfJ^0 z;NI53S(53FHd^OO@ET{yXc&t*@O~jF!P!9^N`93ZhHRfeo|F)^!1-_cZ@27gLE1#@a z&b8ReI>ZOtH*0=3sg%cuT=EKpfWy?z+4Rz$Dcd^Y>C)lk4{x?6F$u*$#kR#a(23nA zZ^;t4YdeC#J}$Npi`Pe(d0>c!C_4c|e|!s90V870#>-sHY_}@k z8BIeOhpzwbp|-ot0c`s6HtL{AkV=eO+y%jfW0Ky`mCD zt#LS;F5Dx@RqDQs7jFs!FPbn9$`5nmD+zYPtY<9nHyp{R;85c! z$oV7mdwW7{W{8V5K%YRvVWU!o#;rsw%A1-6p`+4p15a+W1NdtUxzfWJEyM^_v%SHt zZ$K0qEH3L_5%oFjbT3WM)2*d7TU``DQ=$6KxYMdVSG%=Vwj}_$j zC*g)mP+J};62L53iJ;$Sa+CzT*9JE>-i*SX)PBhEh_-L-{+DIcT(_o+;cgW1$}ecb zl_v+{A1h$x$Sq&qHdZex<%g(xd6Cw5-nBYue#5?Wh408S5}FCRuPfNACX|6O2mtrw zmk`Y*PF=Or6TV$A96l$pSTHqzvR|V%x@{$_OIkh|;XwLUj#5py0m8=B_IrjqiHyV% z7P!eYwoW`6^EQ~a8&oZ*%mADiCOjBo(?QA%g9eopO8KsE{up7O3~=G=pOR|F1=#W1 z)6gnEi0o#fZ#5P@&grJ~D~G2`zUo^J^{0XkCISb=VEol)g45K5*{#?xKO3MeacQQ{ zcZ!%M%7DvTv!%_B!#!=tdQf)>gAK=!C(`qH$)61_DPB1uPO;aID1Y$n51S>jk*rpk zaQWs5B$bQ~3a=D30m;eD@D>_Oq(Hq^`rhq?*%CRWuU+xF=J!zP2gX*X&#+DIV$`~_l9|pT@BJ1Z6 zTYq-U&jd1V0Tjd~u2->wA0ckhPM!TQblliahw#cBe1px)Z9|Wnl0SH8-A_0`vp?hT zSAmns#&Ifb?&qKlTy!L&c4@j&)o$>HEB99wvFA&CW641jG^lR!0NMC90Jl_FE1m5# zr|w)RKOXYwO-LU8QRpU^;Ie#Yp!LF1S2ZTc!togMJA6k!f5Q?1?{P(}z@EmZqL%%Y zF!b}+6L$c$zD3`A?7r#JwMVluw0C03zXxBZQK@p}74{>gVL%;41Zs@G0c25t-HxSI zjT;m?WbkD`<{0dQ=yK;yk0JM_%#@FJXgB(0PN)7k*4s3)ph zbM)!(LShcL@ydM(0W6Zqe!l&>@)OV(mJpHL){HWjzI&4Llb{> zI+v#9R+XgU%Q6l*Q3v+!u|gLDl$_yrcPCU-#VwA5=iSBSiZ^w2hbp*&Q((@SiD46> zHsg{{W?1(@+pJ*WzFmQUBt2%HfCGSzK(!^+UYKb&PFYm z5=&+xR+8oeM7~;-tD~ti1)Ln%Z|7sE?sn1Rt4!eVGn#TcYYx1Q;8e07ChN{9Te^RF zQQz6_W=nq!>k28^iSjU7xO1P=r2<{vVgCN@AuC?8LVY*-l?fXx`}m0^J$;5{Z#7pH z>!5Lt8T6LQ(Tn_s)jat$d5kZqcpzt2nPH>cd@07UI6EFvyI!p?0L-^ti?A-&sl}&W zEw$3=zLc}8JJW1ke?3N7T6!+mSn%chEO#T18O|mZIb(jl!cVO|dq_2G{)1{}oR$pW z0v#XE^{aIE`BUp|Wj;Zmal&0p3Wmvbw7pE5uo zLyr(2{`JBN3w|u>Na5u!z**V|RqTCXARCfv`iUsVCG*-F+du-3R6!b9oJUM{6P7OP z+B;z+roQJINJn`NNQRpSP4HCIz=@!zQpMHBYG7@T4DOkHbI~V^88{8>2?p>IB2(&y zqm2&pASeY>d}0X|q4~$c?15Mgf1BWn3wU(J1G@nH&bLo=3al?HlQgir<>H%5OB!CH zI-xBI4bOMp9P1RHL#%RC7(ZlPb1A;746ui|483HKLdOfLRh0 zs0PJ2-<*fIh@ucN#cb-L52;|%(F1D$OL1*?$gVlVtUmzY+&8y%@r#hijW58R4VRGE z7tI%N4p|ERrZSB0F5P!a9`RkRMNkelIo?0%U|RJ_CSG z1)qT$=MBKaXi^!?sy129+7d+dm5VD3ilbR^`rdOO@d?AIrGgzuz&DN=A3~B3L~6-Myj{TEh}?lw za>Q)yNFB*-ZQ4kkE*;!B`(xYwiU&&0nKypVLQ|Ujb$@^}CJU2!IqyO-0lxEZ{=k%; zfcZ*%mI>U0df^9SAOqlZ7r=9T06#cq{4R|QU`T(p77$3WC-b3fsRGS`_Ih4q=c5BO zrnJpV%8RPmv`dnmioVl*!)YAQb#T%^-f_*g0&$F)YOAZBM_N({jAu_OF>v|K4Qtze zRi~q;vD;&daX}0sa{`i=P>f>QfCeHzaO%h>QzfFzcg0vBNzFXo;;(XUAl*&VB#3Vd zvP_yRWL#se!O?DQ6@y?}k6$6uUrV^RAL5{nH|K?|RN|t17phexB%)*>XN)*X)Al+E zzQJc9{w)x z_ImpA?WFF%e(`fchXjAkrN>Ae$_)AlBl^o=VqvsT&>Oe+F<1Lu@AO&TIBWB)8I&We z3@)n($6SQCegz&6LQ+yGeGxkjK8+e&@7VFVJdFE8X=Gg)G7+fx0ztL~`f}8ySv-n1 zF*J9GxoYSgybTKN@xM`C29{XivBlW0me%41z-?^f33WL`v=;hogBWnD7y}tsp(caV7b2 z<-p*Q^{cI>#QXQ!DE2}w_wOgj9qT-X%Le%6%zuCUZ(iG&+>?C~9}EmOxtA6f_>aW? z50S0u0YC%;hk61B1N$!pekFM0w!zh~b5rY_*-kKDh%4J*uEUTmbHCm6T)J|>;ay82 z;6oHuY)+L_PC+YGQTg@3SO*4|kT1Wc$mA`PQ!fM73Fe6ty)}#~2}%7q*xMP~C?Kx`N9{$_9Pe9D$xAMRUd!@W6?6o*T#f?vDb zU0$$GSC#ptba;*PcVO(3cm!T~9emVn_(R5zY{|B%py?l_q@v+R@RC#)#Vkena8>-v z4im#n4U=R7dow8(#6_^K=~m!se<|)3k~?6h+P;fV*5}%Jox}5q5(_LKX^tH$uv1*1 zWVBB$TcI5jF(?%RupFEa%DGCh-wnE8jYkN<{)~qtTdFj`fCKAtXbhmo*BR>dP{wx1 zKe5c2UWK%!+P$yVrSpGZJuo;K^*2M^!Rq`(h`Lu)#ACb1x3TI}vqn6k0q-^70T+Oz z88$biXN+hvGsu8J#{{%EL9J;C!>xb`CnaFK+V6j>M>#Uy$@cDwIg9q7CjP|()=zh) z5LTW-&77INBMejn-}e+D5C)&xrwXbFo}x08Dh2lrKdM8s$Dbqp9IT7BCrJN!$y~}d zXM{8R#B)zei%SQcNHb99O2(c`UE`*?l;=yJ6ONuiV5b0v0+CCCjrvM7YI0_Qx?vvLozZAsewa6wlIVx;Ejwng}arQVX8Stx{sven`v-_m>O$j~goigw?)DWK3gC5#9dBA7Xr+@)W76J<lOx*fD#)AM78ccfy)a(q<7;7mJzFD{ ztebg-Z&bs%s*KTE!gv^MuG&{bO>g2Jy@L#36(kR%p3nnHA&NT8Q3TP=foV_Qj=kc) zCjn*lcEOn}Ia?&chXr9Yq(<#~TTbiRM)S{4DJz>8C(wtI^Xbb)>a9QwL3>T>hJFktPENKuWqp62M=uR)9i8b#`4-xZTU?`%p-7ZN>i;ie#ESl6$YOKiJM3pZf zFEG38#T}~*b#zEe=_bU-N2B%t(g){MCPnQ?i}~J=Ihj|&{h`G*##&~Lzc7tmp}Ji% zy28j@8qU@=zi|a?|94!FNnU%?Ah22=cklh@2p5mv9cAjMtG(NeEC$&#e7r(_qKCT%%51`&0;ft>N)aCm@`fht?2Ac{PT|0Nh`)n zl=r*6^B+hm%<{IriXW%8{)=jU7OG($FM&*zm2Cwc)b2YA-uYRsHA@QY|@)qGH-{jr-h#rwCM|*%elBD*9x1o}f7Domaxv zba%dG1FXI^`+EZRdLRmVNTo#=8)~#$%CFob7teIWr(fHP7)Xx#d!s+dwV^`d(am4O z!qjASTagnFLBSO(EyLVroy%?UQnsS&itT=P@h+oFS75_acHwJ0yhi0 z2+K-_3}VDK?Ud@_6zs}BJ>hIs2AlXwF+({k)%)ne^Xe5>>VfN+OQ9n@7P@9R@zTx#D-5BV=E#&%9#$P`Vqsz3wm4doRIVf;-@vG*(l4NkZB6=i zg}$VeH+g#BKX}#Ji+wN3@kZo@ozD8KnO|;IGZ;p4223(U9h(q8x&X1YNTPcc>*9r7 z+D&+R7qrI<9>6;-OQzivHo-+s$Q83{2t5lmdO|EbrGrlVM3WG8FvE&?_4C3gRcpCY zL`6Neuw_AR&0tk^|z&YjeQDa75zCqNt^2sGQ z+i5)aC%Q7dXiWDBFWyOvRbHZ_7klBs#-spE*$E##RUko5pl&rq6>GC<=`16Mqia7g z%YIDOu9wvu_C@MAr51rMBuha;kpDsx zYu?=CK#6_g@Mh1Am6*2Nb=cxi1Lngik8IA{oQpn^yhnmzK-O~NiD&*}L zY09uN@|Il;h9oI#Wn=alBu1aKbb)HXOIaw%1!Q3w!qt?N3n&?H-|0=5n$xXc*_79q z{D?eUA#Md&gNfT%XA4TJGMj4?L#uQaOKOe@QTA~702zbf5GG^=V<@RyyXfmjeGFS3 zLK$VHxT$`%d6y9jW(Meh;u&<9*CnaVP52nK?-ow*J-$U%Rih60jlL1NcCTq;pNgaG z0jJv8qEHyS0C*7)o1q|aoIKQ5*tWml%c(nAXhNdi+Lc?%t+kM`(1gZMusseCsKT6( z7|IPO>bF|+XLbVUJw|=y$UF5J4SIj6rUbZ_JKWnNNYgO+R9YCY!wvGx>;=KvRUIos zO-CmhowW(L5V#}KEo?3>{edKT=M~cU1gbv^V0p}9nm#~P>2vaxrS!0+@%dkaOdo^7 z&?!7F_+%DYJ8n-%(R9O#e?1%}Le5`2FnUz6=uK(k{X!b%ivXd9HuS+>M-8z|d6NUC z@gCFJACmUUMMi@e1uvrx_#-y&l&lJn6K&&V&bUT9X<`y@*q;}42Jm)g-vaI((B9!eY#A;|7j zW)mYTX?Hy%6#oV>aeM+%OAF6;T&3`@oFbw}5l>W8lwJ6-(IKKJV^5z|lj3k9NfMB; zW^;FH`CudOdvs0Ya!k=*z%m6;Y0tusvy)UQ{hlRjYHUHmi3`C-m$~CSjLG}_Il_gd zRB5n(7;DO7wA-48D@6f&pFwMQ36|)M&fxfHqxS4gpKwo>yrXyJ2w8L5-r~&n5oskk zFK!>J1?l^2oHOZ~C=vj}O37uKHerUVS$sry<%*N+*SIvah1C!zQpf-hiIAmX+>asO z7=@amS|1(y3UjyVdfh+p4bg;lbo`7wLyockFB>%EmiiKlpa5y5`J~Tu%dcCM zHKdP4QMU`tOGfWPn(^wU%wqk^;X!#*ia)(A{T*flRqCbZ_YuyQB=q?BOT!=7 zfU7uRC1(zX{dIRBl1$Aj|IWw8PLk6{G!D#-;A;8BgS_>`^&5xpvrya)9)<#1O{{RB zhxzjM{J>y(<-yuMejwqM^14kJ*` zTc3W02asDK9sa6l)4HpiTQK6q#8bQK>cA@U!YH@9#Xmkh zgh0jjWtLd{y#!SeCmNX;46MQ!(C(%Y|uHj$Dg?@^T`7$Gh-}edrjHS$_x?VxAmb01K zZ1!ijlpOE&Pa@ zP|n1jl%{!rv=o=97S2B5k&nbrJT5YnoyyH7Cav@@*LFj`zR9`MUvdt$^f2!()s^3V z_m^q{+snH?{#p&mLl)#JEiJ36bZ?g~_!`k_lQweMT;JPFz=P|hQ6=I%npn!;+j&jQ z>}Qq)-01Bz_){?ZC<5ohjJi}M@W3GOGxiiw%MvdC`rUEtx75}=|8dAx_R1P^Z0kCQ zfu74d&oIW!I-T;}3ggui2kf1px04eC(JRV$NjbmO$A zom&xsPOctyg8Zb#0yj^f12>9?_A?0o>OlHZabnvNp5m?zX7IV=mmgK?RA<7clb{)^ zR&(jf37Y4ALFYQy#_FNAdx|rGHg$#?&ZhK}f+EKtEQBu(Wo0Zb2+dcFti}y8Naw1#f%!agr+*_Mkl{7i!^B8X!Dl` z;>X|A-nSg?&H5Fs7UpMfS}cKMiO5kvrB+=-h@aFwA;JuE-h?V;gZ_V>xbG&on*+)( zOm(c*Y>)^EX1t5M6K;R7;L0y<)R2yvN<=iT80!;^ZO{(xJRxE+uy|fhFAxs`?x2ew znj9Zl5c3c!5~q(9KFZXDb401!#!SOmMJ6*fW4Jzf+Wz0jjIejdN*T35X_$^d32o~N#Q)s(=i}RX=rJGow z?M*1_FrE-UN{W(LNa@#xi4d=v$hmxI41U*Eg`Wrgbzb>~a)1+SNRa;umIxOZ#&S`& z@eoQUaO1U;8{HZQ;0wr>qN*?k7B{1mIgliP&(%Tt7tKp;OKb=8$qt==#$_EH%+5PL z@QBV`4;SFW>^AxxbTm(lgaUyJK5VSg{w_>Mj+s6*84t4yz9 z3z+F8ypi@+E#1%mu!&6+1AMQl$?Q}Exx&?ker(alGA8{AHw!B!c_c{x;^Jtr# zELYcdN!h|waoKgsh3yN~i#V7)+htToyO;&Z<=E0BaGTB2J zckqQ|%s|vmxS*>!P7OFOXzyu$_>>C1eHTV!ExYmxU&Ah;cTpMmm_$jN(EHA;lT)#IcmW)-^LtZ*Mp=a+C6StNe|&&;!4aj2BL= zW6wQo`>p7phiTaHgf@Mk}&tg(VC*#2g@AH*&d3OPyiPnZM_?4!&w z88 zSESZU7OVYK)I*xP%#U-OB7J~1o!wC!#TJc|7;)!eAvZ&koM?Rd8S+IRD%W(sf?MJ-oqrbvG=y4LHl8_BSGgWO_9W%h3| zu~7wC?ecM`SXn!MdX4W<-za|G4#%d*th(`-BZju9q`y~d*v=cDTX&u zc}RzMwE=WM<))z$e5cMT6;)gO@+^zGakJE}KaZf+NtlL6Gyf}THM=|RSL}NwOr>cg z5E0#kP*{uZei{b$&Ak7i0~LbU8Vz$f%I7b!j1k9!$SQB{7*qeT2!H(1QMtrBa=D%1 z+PXvb^iTHUoSpJJ*P}t=1J@f{Z;w7gKUN>}t`j;Sg;7TaO~hsTeh)P!OM{;g$&qYK z7G}_A@(%?&nxWI1h5$S+-vlR0Y!Tbb6cf3vnnRCF1u_q#=c63iki!G}6t)4uHIc_( zJzX1I7cuz3#|%ULc92P)@N>rdri)j&*#-_5nm6?c{a(9mZd<8i5OTqSrSQGe zIa?%;x=k%Tqbfxn<6tdSE?~lii`9oIrYWRwf<;y;l9o4;JZ;Dit3o@Z)aaq_bo#N!DYn&j+uNL7b)k9p>9TljlyKTQ#0`S{mEJ=-U`xZD~TTnS97fW zcX-%XnBHrvaxP;XiE7h56?Gxl_v@7^6UQ=I{qOEoUqk2gYD2{Iw<_g2 zbdkS|Nss&HTycXYGbKbhQ={ENB^n$NJ>*N0Af95(Jk)X2PA|I1vxQaUqJ(V;PFzES zI9jo-ZEKDgPWu=pSjR7P8_p;o(>K~%^F^`a;cLK1CU;SJVI?5Wrk|z*zaTVLc!0*9 zxeXuH0GZ(D6WR9pTZBqv!MhqdB}x z_*md`1v}i392LiSY=0C0n>^+@HLd&Y2@5phHQN@x0)*nvE6H65z61c-$7Pp$Hip>* zu6j5-iI+8N#>t2Y>g&SV8Kzq&ML#07;{ArA2ljEg!1_)eGk+e{PruY6x?a%V5V!!i zCP`zaPFB7yJZpom{a*bNS7C_JElM(kUOmmXTsSV7bsT2}o|@wQ|0cdxU%Uv4SPGcQ zt)}{0L2f!=zh;w89`pih5$E##_#xfK{Cu}t-_o`SbPOZCbS%uXOJzvL3t;@;ui#P|#RhEOMwl?k)G zGyKen4b`F){TY~z*u~cXx1V>w|0SL!uZxqw{*U*gL4pYilDSqTnN@}ambZmmQ}LC$ zQA=hX67oL*gF-Am^8d1tB#&5;|Hn6yEND&0^`DjhFT^E*fgyq6{xhC{f&J6pz>0$s z{@G6cuieDK#__+F6KF8Ve=6O7QX&7PChJ=hU{#3!KaiQ*KU2y-#Q$vm-=-@6A;4w8 mz*Hqf#1$l%9L)cV_}Aut_DFuVCI(+h#