����C
Файловый менеджер
Файловый менеджер - Редактировать - /home/ypacad/public_html/admin/assets/libs/jquery.flot.tooltip/js/jquery.flot.tooltip.source.js
Назад
(function ($) { // plugin options, default values var defaultOptions = { tooltip: { show: false, cssClass: "flotTip", content: "%s | X: %x | Y: %y", // allowed templates are: // %s -> series label, // %c -> series color, // %lx -> x axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), // %ly -> y axis label (requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels), // %x -> X value, // %y -> Y value, // %x.2 -> precision of X value, // %p -> percent // %n -> value (not percent) of pie chart xDateFormat: null, yDateFormat: null, monthNames: null, dayNames: null, shifts: { x: 10, y: 20 }, defaultTheme: true, snap: true, lines: false, clickTips: false, // callbacks onHover: function (flotItem, $tooltipEl) {}, $compat: false } }; // dummy default options object for legacy code (<0.8.5) - is deleted later defaultOptions.tooltipOpts = defaultOptions.tooltip; // object var FlotTooltip = function (plot) { // variables this.tipPosition = {x: 0, y: 0}; this.init(plot); }; // main plugin function FlotTooltip.prototype.init = function (plot) { var that = this; // detect other flot plugins var plotPluginsLength = $.plot.plugins.length; this.plotPlugins = []; if (plotPluginsLength) { for (var p = 0; p < plotPluginsLength; p++) { this.plotPlugins.push($.plot.plugins[p].name); } } plot.hooks.bindEvents.push(function (plot, eventHolder) { // get plot options that.plotOptions = plot.getOptions(); // for legacy (<0.8.5) implementations if (typeof(that.plotOptions.tooltip) === 'boolean') { that.plotOptions.tooltipOpts.show = that.plotOptions.tooltip; that.plotOptions.tooltip = that.plotOptions.tooltipOpts; delete that.plotOptions.tooltipOpts; } // if not enabled return if (that.plotOptions.tooltip.show === false || typeof that.plotOptions.tooltip.show === 'undefined') return; // shortcut to access tooltip options that.tooltipOptions = that.plotOptions.tooltip; if (that.tooltipOptions.$compat) { that.wfunc = 'width'; that.hfunc = 'height'; } else { that.wfunc = 'innerWidth'; that.hfunc = 'innerHeight'; } // create tooltip DOM element var $tip = that.getDomElement(); // bind event $( plot.getPlaceholder() ).bind("plothover", plothover); if (that.tooltipOptions.clickTips) { $( plot.getPlaceholder() ).bind("plotclick", plotclick); } that.clickmode = false; $(eventHolder).bind('mousemove', mouseMove); }); plot.hooks.shutdown.push(function (plot, eventHolder){ $(plot.getPlaceholder()).unbind("plothover", plothover); $(plot.getPlaceholder()).unbind("plotclick", plotclick); plot.removeTooltip(); $(eventHolder).unbind("mousemove", mouseMove); }); function mouseMove(e){ var pos = {}; pos.x = e.pageX; pos.y = e.pageY; plot.setTooltipPosition(pos); } /** * open the tooltip (if not already open) and freeze it on the current position till the next click */ function plotclick(event, pos, item) { if (! that.clickmode) { // it is the click activating the clicktip plothover(event, pos, item); if (that.getDomElement().is(":visible")) { $(plot.getPlaceholder()).unbind("plothover", plothover); that.clickmode = true; } } else { // it is the click deactivating the clicktip $( plot.getPlaceholder() ).bind("plothover", plothover); plot.hideTooltip(); that.clickmode = false; } } function plothover(event, pos, item) { // Simple distance formula. var lineDistance = function (p1x, p1y, p2x, p2y) { return Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y)); }; // Here is some voodoo magic for determining the distance to a line form a given point {x, y}. var dotLineLength = function (x, y, x0, y0, x1, y1, o) { if (o && !(o = function (x, y, x0, y0, x1, y1) { if (typeof x0 !== 'undefined') return { x: x0, y: y }; else if (typeof y0 !== 'undefined') return { x: x, y: y0 }; var left, tg = -1 / ((y1 - y0) / (x1 - x0)); return { x: left = (x1 * (x * tg - y + y0) + x0 * (x * -tg + y - y1)) / (tg * (x1 - x0) + y0 - y1), y: tg * left - tg * x + y }; } (x, y, x0, y0, x1, y1), o.x >= Math.min(x0, x1) && o.x <= Math.max(x0, x1) && o.y >= Math.min(y0, y1) && o.y <= Math.max(y0, y1)) ) { var l1 = lineDistance(x, y, x0, y0), l2 = lineDistance(x, y, x1, y1); return l1 > l2 ? l2 : l1; } else { var a = y0 - y1, b = x1 - x0, c = x0 * y1 - y0 * x1; return Math.abs(a * x + b * y + c) / Math.sqrt(a * a + b * b); } }; if (item) { plot.showTooltip(item, that.tooltipOptions.snap ? item : pos); } else if (that.plotOptions.series.lines.show && that.tooltipOptions.lines === true) { var maxDistance = that.plotOptions.grid.mouseActiveRadius; var closestTrace = { distance: maxDistance + 1 }; var ttPos = pos; $.each(plot.getData(), function (i, series) { var xBeforeIndex = 0, xAfterIndex = -1; // Our search here assumes our data is sorted via the x-axis. // TODO: Improve efficiency somehow - search smaller sets of data. for (var j = 1; j < series.data.length; j++) { if (series.data[j - 1][0] <= pos.x && series.data[j][0] >= pos.x) { xBeforeIndex = j - 1; xAfterIndex = j; } } if (xAfterIndex === -1) { plot.hideTooltip(); return; } var pointPrev = { x: series.data[xBeforeIndex][0], y: series.data[xBeforeIndex][1] }, pointNext = { x: series.data[xAfterIndex][0], y: series.data[xAfterIndex][1] }; var distToLine = dotLineLength(series.xaxis.p2c(pos.x), series.yaxis.p2c(pos.y), series.xaxis.p2c(pointPrev.x), series.yaxis.p2c(pointPrev.y), series.xaxis.p2c(pointNext.x), series.yaxis.p2c(pointNext.y), false); if (distToLine < closestTrace.distance) { var closestIndex = lineDistance(pointPrev.x, pointPrev.y, pos.x, pos.y) < lineDistance(pos.x, pos.y, pointNext.x, pointNext.y) ? xBeforeIndex : xAfterIndex; var pointSize = series.datapoints.pointsize; // Calculate the point on the line vertically closest to our cursor. var pointOnLine = [ pos.x, pointPrev.y + ((pointNext.y - pointPrev.y) * ((pos.x - pointPrev.x) / (pointNext.x - pointPrev.x))) ]; var item = { datapoint: pointOnLine, dataIndex: closestIndex, series: series, seriesIndex: i }; closestTrace = { distance: distToLine, item: item }; if (that.tooltipOptions.snap) { ttPos = { pageX: series.xaxis.p2c(pointOnLine[0]), pageY: series.yaxis.p2c(pointOnLine[1]) }; } } }); if (closestTrace.distance < maxDistance + 1) plot.showTooltip(closestTrace.item, ttPos); else plot.hideTooltip(); } else { plot.hideTooltip(); } } // Quick little function for setting the tooltip position. plot.setTooltipPosition = function (pos) { var $tip = that.getDomElement(); var totalTipWidth = $tip.outerWidth() + that.tooltipOptions.shifts.x; var totalTipHeight = $tip.outerHeight() + that.tooltipOptions.shifts.y; if ((pos.x - $(window).scrollLeft()) > ($(window)[that.wfunc]() - totalTipWidth)) { pos.x -= totalTipWidth; pos.x = Math.max(pos.x, 0); } if ((pos.y - $(window).scrollTop()) > ($(window)[that.hfunc]() - totalTipHeight)) { pos.y -= totalTipHeight; } /* The section applies the new positioning ONLY if pos.x and pos.y are numbers. If they are undefined or not a number, use the last known numerical position. This hack fixes a bug that kept pie charts from keeping their tooltip positioning. */ if (isNaN(pos.x)) { that.tipPosition.x = that.tipPosition.xPrev; } else { that.tipPosition.x = pos.x; that.tipPosition.xPrev = pos.x; } if (isNaN(pos.y)) { that.tipPosition.y = that.tipPosition.yPrev; } else { that.tipPosition.y = pos.y; that.tipPosition.yPrev = pos.y; } }; // Quick little function for showing the tooltip. plot.showTooltip = function (target, position, targetPosition) { var $tip = that.getDomElement(); // convert tooltip content template to real tipText var tipText = that.stringFormat(that.tooltipOptions.content, target); if (tipText === '') return; $tip.html(tipText); plot.setTooltipPosition({ x: that.tipPosition.x, y: that.tipPosition.y }); $tip.css({ left: that.tipPosition.x + that.tooltipOptions.shifts.x, top: that.tipPosition.y + that.tooltipOptions.shifts.y }).show(); // run callback if (typeof that.tooltipOptions.onHover === 'function') { that.tooltipOptions.onHover(target, $tip); } }; // Quick little function for hiding the tooltip. plot.hideTooltip = function () { that.getDomElement().hide().html(''); }; plot.removeTooltip = function() { that.getDomElement().remove(); }; }; /** * get or create tooltip DOM element * @return jQuery object */ FlotTooltip.prototype.getDomElement = function () { var $tip = $('<div>'); if (this.tooltipOptions && this.tooltipOptions.cssClass) { $tip = $('.' + this.tooltipOptions.cssClass); if( $tip.length === 0 ){ $tip = $('<div />').addClass(this.tooltipOptions.cssClass); $tip.appendTo('body').hide().css({position: 'absolute'}); if(this.tooltipOptions.defaultTheme) { $tip.css({ 'background': '#fff', 'z-index': '1040', 'padding': '0.4em 0.6em', 'border-radius': '0.5em', 'font-size': '0.8em', 'border': '1px solid #111', 'display': 'none', 'white-space': 'nowrap' }); } } } return $tip; }; /** * core function, create tooltip content * @param {string} content - template with tooltip content * @param {object} item - Flot item * @return {string} real tooltip content for current item */ FlotTooltip.prototype.stringFormat = function (content, item) { var percentPattern = /%p\.{0,1}(\d{0,})/; var seriesPattern = /%s/; var colorPattern = /%c/; var xLabelPattern = /%lx/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded var yLabelPattern = /%ly/; // requires flot-axislabels plugin https://github.com/markrcote/flot-axislabels, will be ignored if plugin isn't loaded var xPattern = /%x\.{0,1}(\d{0,})/; var yPattern = /%y\.{0,1}(\d{0,})/; var xPatternWithoutPrecision = "%x"; var yPatternWithoutPrecision = "%y"; var customTextPattern = "%ct"; var nPiePattern = "%n"; var x, y, customText, p, n; // for threshold plugin we need to read data from different place if (typeof item.series.threshold !== "undefined") { x = item.datapoint[0]; y = item.datapoint[1]; customText = item.datapoint[2]; } // for CurvedLines plugin we need to read data from different place else if (typeof item.series.curvedLines !== "undefined") { x = item.datapoint[0]; y = item.datapoint[1]; } else if (typeof item.series.lines !== "undefined" && item.series.lines.steps) { x = item.series.datapoints.points[item.dataIndex * 2]; y = item.series.datapoints.points[item.dataIndex * 2 + 1]; // TODO: where to find custom text in this variant? customText = ""; } else { x = item.series.data[item.dataIndex][0]; y = item.series.data[item.dataIndex][1]; customText = item.series.data[item.dataIndex][2]; } // I think this is only in case of threshold plugin if (item.series.label === null && item.series.originSeries) { item.series.label = item.series.originSeries.label; } // if it is a function callback get the content string if (typeof(content) === 'function') { content = content(item.series.label, x, y, item); } // the case where the passed content is equal to false if (typeof(content) === 'boolean' && !content) { return ''; } /* replacement of %ct and other multi-character templates must precede the replacement of single-character templates to avoid conflict between '%c' and '%ct' and similar substrings */ if (customText) { content = content.replace(customTextPattern, customText); } // percent match for pie charts and stacked percent if (typeof (item.series.percent) !== 'undefined') { p = item.series.percent; } else if (typeof (item.series.percents) !== 'undefined') { p = item.series.percents[item.dataIndex]; } if (typeof p === 'number') { content = this.adjustValPrecision(percentPattern, content, p); } // replace %n with number of items represented by slice in pie charts if (item.series.hasOwnProperty('pie')) { if (typeof item.series.data[0][1] !== 'undefined') { n = item.series.data[0][1]; } } if (typeof n === 'number') { content = content.replace(nPiePattern, n); } // series match if (typeof(item.series.label) !== 'undefined') { content = content.replace(seriesPattern, item.series.label); } else { //remove %s if label is undefined content = content.replace(seriesPattern, ""); } // color match if (typeof(item.series.color) !== 'undefined') { content = content.replace(colorPattern, item.series.color); } else { //remove %s if color is undefined content = content.replace(colorPattern, ""); } // x axis label match if (this.hasAxisLabel('xaxis', item)) { content = content.replace(xLabelPattern, item.series.xaxis.options.axisLabel); } else { //remove %lx if axis label is undefined or axislabels plugin not present content = content.replace(xLabelPattern, ""); } // y axis label match if (this.hasAxisLabel('yaxis', item)) { content = content.replace(yLabelPattern, item.series.yaxis.options.axisLabel); } else { //remove %ly if axis label is undefined or axislabels plugin not present content = content.replace(yLabelPattern, ""); } // time mode axes with custom dateFormat if (this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { content = content.replace(xPattern, this.timestampToDate(x, this.tooltipOptions.xDateFormat, item.series.xaxis.options)); } if (this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) { content = content.replace(yPattern, this.timestampToDate(y, this.tooltipOptions.yDateFormat, item.series.yaxis.options)); } // set precision if defined if (typeof x === 'number') { content = this.adjustValPrecision(xPattern, content, x); } if (typeof y === 'number') { content = this.adjustValPrecision(yPattern, content, y); } // change x from number to given label, if given if (typeof item.series.xaxis.ticks !== 'undefined') { var ticks; if (this.hasRotatedXAxisTicks(item)) { // xaxis.ticks will be an empty array if tickRotor is being used, but the values are available in rotatedTicks ticks = 'rotatedTicks'; } else { ticks = 'ticks'; } // see https://github.com/krzysu/flot.tooltip/issues/65 var tickIndex = item.dataIndex + item.seriesIndex; for (var xIndex in item.series.xaxis[ticks]) { if (item.series.xaxis[ticks].hasOwnProperty(tickIndex) && !this.isTimeMode('xaxis', item)) { var valueX = (this.isCategoriesMode('xaxis', item)) ? item.series.xaxis[ticks][tickIndex].label : item.series.xaxis[ticks][tickIndex].v; if (valueX === x) { content = content.replace(xPattern, item.series.xaxis[ticks][tickIndex].label.replace(/\$/g, '$$$$')); } } } } // change y from number to given label, if given if (typeof item.series.yaxis.ticks !== 'undefined') { for (var yIndex in item.series.yaxis.ticks) { if (item.series.yaxis.ticks.hasOwnProperty(yIndex)) { var valueY = (this.isCategoriesMode('yaxis', item)) ? item.series.yaxis.ticks[yIndex].label : item.series.yaxis.ticks[yIndex].v; if (valueY === y) { content = content.replace(yPattern, item.series.yaxis.ticks[yIndex].label.replace(/\$/g, '$$$$')); } } } } // if no value customization, use tickFormatter by default if (typeof item.series.xaxis.tickFormatter !== 'undefined') { //escape dollar content = content.replace(xPatternWithoutPrecision, item.series.xaxis.tickFormatter(x, item.series.xaxis).replace(/\$/g, '$$')); } if (typeof item.series.yaxis.tickFormatter !== 'undefined') { //escape dollar content = content.replace(yPatternWithoutPrecision, item.series.yaxis.tickFormatter(y, item.series.yaxis).replace(/\$/g, '$$')); } return content; }; // helpers just for readability FlotTooltip.prototype.isTimeMode = function (axisName, item) { return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time'); }; FlotTooltip.prototype.isXDateFormat = function (item) { return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null); }; FlotTooltip.prototype.isYDateFormat = function (item) { return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null); }; FlotTooltip.prototype.isCategoriesMode = function (axisName, item) { return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'categories'); }; // FlotTooltip.prototype.timestampToDate = function (tmst, dateFormat, options) { var theDate = $.plot.dateGenerator(tmst, options); return $.plot.formatDate(theDate, dateFormat, this.tooltipOptions.monthNames, this.tooltipOptions.dayNames); }; // FlotTooltip.prototype.adjustValPrecision = function (pattern, content, value) { var precision; var matchResult = content.match(pattern); if( matchResult !== null ) { if(RegExp.$1 !== '') { precision = RegExp.$1; value = value.toFixed(precision); // only replace content if precision exists, in other case use thickformater content = content.replace(pattern, value); } } return content; }; // other plugins detection below // check if flot-axislabels plugin (https://github.com/markrcote/flot-axislabels) is used and that an axis label is given FlotTooltip.prototype.hasAxisLabel = function (axisName, item) { return ($.inArray('axisLabels', this.plotPlugins) !== -1 && typeof item.series[axisName].options.axisLabel !== 'undefined' && item.series[axisName].options.axisLabel.length > 0); }; // check whether flot-tickRotor, a plugin which allows rotation of X-axis ticks, is being used FlotTooltip.prototype.hasRotatedXAxisTicks = function (item) { return ($.inArray('tickRotor',this.plotPlugins) !== -1 && typeof item.series.xaxis.rotatedTicks !== 'undefined'); }; // var init = function (plot) { new FlotTooltip(plot); }; // define Flot plugin $.plot.plugins.push({ init: init, options: defaultOptions, name: 'tooltip', version: '0.8.5' }); })(jQuery);
Переключить редактор
| ver. 1.4 |
Github
|
.
| PHP 7.1.2 | Генерация страницы: 0.25 |
proxy
|
phpinfo
|
Настройка
%# , #&')*)-0-(0%()(��C (((((((((((((((((((((((((((((((((((((((((((((((((((����"�������@�@�hC��}!���Ѱ��<"� 9iׂIIIHk�+?�c?��*Y�����!�du)b�T�9вU�$8G��I.�澬��D���Sq� q�}.<��Z�l�V!X� *x�-�\����t3i�Ũ�sNv71�ƛ\��z|t�L���$�����*f��kʮ��7�H;���~F%�'3�@�H�q�` 9mOL����/x@ @��G
d�8F�ه��Ka�Kdr�Fh.�]y4 JЛ��]�K�B�E$��$ $ �PR�����G�]��u�i$�$���'! "#031���C/Td=S�Q?���62Ccj{ ����̏d�چ/c�V�`��Wz͈�{Y`�d�h�L �]OB���l���o���mr���n��s-ڗEZ��N�_��1%b���H�ϣ������V�7):�ӷ)�}�~�(�;�!�b1�5K��[E�vϻ>��q.%� ���O���(�c�#x�$�'+��`٥v��v(�����M�"�v��B��.�a ���T�~�ϕ�hy(6nݱl��1yNɓx�������AR�8�rqv1.cS�+��_���&@�� �u�M�5Ĉ�Xm���eL�X�q��y#�9]�c�}ɄL��d�eJ몓���I1T�d��CaM�$��T�,�X �bʭ�!�%F5��X1x#���!�q��\��F��2��&Rq���C�ol~�̱�.0ϦL�d�`.������ ���m{�Y~k{C��}bv�;U��c<�r�~ɜs�1�j��]W�l��*նCr��Q�N9�-������d��E؛��nF��eړ�8(q��5UgRȱGTA��*������̆��V�珰����ezN��h�U]�T�FG�^���<��ay�,!���5.� �u�bΚ�V�J%��m�Dxn'�����6�@BPa�`��Hts� �ɮ���Ŏ�Zɬ��%B�X��d5Z���hC}�䅸�p+ k=��ʒ(�aՏFG&�%@/�{+�Yu+�ȣGѩ"O%�|vȲxF>�N(��ou�h6 &Y5��8�7�E$-��']n,@TD\��+���Ry�U��U^�Q,f>��1�����q��f��U��� ����F���ڥ��>I�����fNUw�u��#OMMQ6� N�*��_�� k� ����rS��`���1�:��!�F'<+� � b?O��2 !Q12A��� "3a������#$��?�,�7�!`yǮ(�1�6w��a���� �F�#��?*"s���v>��Ⱥ����f�v��͑���s����������]Gn��S ���ȥpG ы�E�g�)Z���x�rY�q�]�@f�_܃�pչEڎّC ����Ŝ*/ �h�O�Sv�و\��5��U��y��|o�Hm2C�S�BW����)��5��{T��W���=o*RA��<����L0g4{��쁢�ep�rw�8��7��U���t<Ԍѻ7�fGf�k}���Ê�㛆Gռz�Q@��{C��'G��8�!�S$�j��x���|���צV<��,����u�k�uu�rM�f�_dϣi ߫�ԟn�!K����mxu�=�槻�'j�X�����������%!A "1QR#Br��?�R:��R�n�b[�II?#��6<:�$gN����lGNlrr��dעMMn`ɿy�,�%B�e�W��dVS��r���� %�tT��(�ɷ��S�]�O]#�_LEMHN�M���kv���~X���O6�U�V_�����b���J�t�774����D!1AQa"2q�#3BRb����0���� 4CSr����cst�����?��^q���7�dG�U�"p��moz��'��n_x���唹e������<6��O�t���R>k��s=�Cr���e�?�i��� ����/��ں$be���o`ޮ�GHy�;fNAl�8��.�\�S������"���a�úF�YvNk�-*`v�k�ʈ2f�EE��Wa�,� �fF^#�;��[9��^~������Y$:0#W3������Z*���I�Z�ڹ�k�n--9=��G��;7F)m{T�Ɇ��=�����Ȭ5�5�B�aڞ5M����#m�5Ʀ��m�8��+Hh���$�}�:&�e�Q�[;i]С�:�:��o����$<~��5RB�?�s3�5�r��O��ֿ�w�P/��̅���(�Z6�R>)��N��4�!ʊ�wz�-�r�w+�yk���q�1�bKhƸ�4N�Ӑ�X����Q��_��})�+e1�5��n��q?��[�^�9�<�z3Fsi�8�'�)9p)�{��RP�Z+�*��p(aY��V����6l�g�9��;���d�u���Nt@�3�sTwzaŇ�GT�b�H��(#��*zc�������9K�b1�����t����Ê��
�Z?g�iD���H�R���B���^M����v���O���L�D,'d�q�C�P�����$Δ��U�֟֊=�s��F�$��J�ދZ?�N��������A�N�WP��,�� �¦�&;�x��dup�����i���Ipd���;�Dž!��ֿѮAb%�u��}j��-p��>I�[�N�bi����G�'�;4w�m]H�]����#LӘNN��R��������s�.]��en��-�8e��Ps����Q��;���ț�E�ݫ���7��g�_L��W��EZ:/��I���a�g�n�ܤ��iٹ���ŷ�T���H~i�a�����֎�~KV������ A-2m]�F"�m�9-Zbǰ�״ @����~�4�N�[�Uxč�tl>������u#r�gѐ�3���;M9�<�J�����1�vfL8����1�P�HgP�Xv��������{����O�}�n��KQ؋����7<�l�fey<�}�>�bX���4<`Y7���si��V)�s�:�{�rO�h�z �@4VW�B���&�������ɡob܋�F��4>y�s�fXWS�N�O$�,.u:�ԫ��g�yao4��$h��D#��ٸf^kh�7�#1Z�֥&���*�v-��;bޭ����Q�����h�ow�y]�ه.+�7�M�ⴻ �JY��g�f�i3q��KC��3�¹�?5�Z.N��^Z w���KF͂���7��ރ۞��wj��T�J.�q��\Sv1U����R��욽&�N����pЖ`�`у��m`v�n#z��4��>e��V�`'���h�����'�j�AҔ�-�4:H���n]9�h<��n����U�6m��2c�E�1/�Y�%���I��~ʏ�|VBƟ@����;�������%�M9M���}��1�D��d����%g���O��]��у&�r��f�7�uܲ���(!1AQaq�������0� ���?!��*��@)�Je�G��j��{�['��v+���������)���(�/����д%젍Z��kk�Lu�Rm���j.c���@Z� V�J��d��j���h6���2AO�� a;oBu���H�=���nK�W8�B�ɰ�u?��бأm,�sr����|����8˨i��qI2tZ�ۄJP��XE��������zޔj~]UMu����zv!����N�&�1�Y��zJ�ՠ��\p��o'ሸ�C؊Y��TD"HM5�Ъ��i߯a���F����A)�����ڮ����z�E���@�hg�֝8�1jk��\�M�3�8ܢ�� ������s�7����N}�ޭ������GN�Bc���L pk�;�J�δ3�e�iU�gAYW]\�>�GyگQ=��f�KA;T�a`eM+Q �� �Ln���̌]GM�����<Ħ�j���H��N�M�x�}aX{̣S� ��ԅ��n�MA�S�r�(����(�L��zo9���.�;
�ӳf������`Ӕ٢3�� IW��\9~_���saa�\ԊW�ܭX:���ӆ�38�ty*����N�qP����BI�Y��jE��>DP�!�R%-��4��'�皺;��~J�!�7m���X��h�P!曭���$�\�AYj�.lC��4��+�jD�dgC0-*���|��`ZD�+л�C"��)��s��8Kq�pq���Ms��4� ��7\U`�.��[Ey8��AH!/��,���(:M -�T䓥�~O�4-���Ԓn��}HDN7���K���$�_Ԕ䚞`�R�hB�_aX?4V��ŗ�@ه�u�a�;�{PcT+�������7YBo�?��r-ͩ{�ĎA�� ����˼n��M286��G���1���V�˜Jв"l��V5���5�C]h���̊�A���%� �'p���Ԃ���Ր��9=�d�=�e�{�'<3�_ �:^�~��4�(�n�-C�s��5m![�jmIqU�~�Tw8��`���p�H8�u�Д l m�aP�0�������9y����CM��F1G糞�.�U~�������FC�{�!e(Y�:���P����7~;�L�N^{�1r�\���ԬG(���0d�ÏO�qK�Z�⑼�T�{ 2��s��Kd�Տ?mMQ��=���6�7�i�����H+����9��d��=��;�QؤH8n�Lb�D��yS%�(�{b���Cu���p�t#C���$A"�H{���jqᶯ�:�n=E����hH�`�!�m��MA������?�v6���+MԿ⟚qK�i�D�*Q5��CZ���2�|]�:Xd+�t�:o@��M��� :�32��b����[\5=�ֵ7])�|t��Ϻ����w�B�ń�e���!`�:��I,��9:����j@/a 8����+<�u�(T^ۺ~��2oE�B�%b)��z��ݳځ�)��i�j��&��Fi`qr��w���7�@��P�� �3Z&<�m�S�C����7t�T����ƴ�q~J�e�r6�Z]�rL���ه�E17'�x���+[�ܜTc6�/�����W�`�qpMJ���N5^����x�}{l�Fm������1�oZ\�����/d�/6� �uӸ�0elXuX;M��$M�}mB��������Z%e���3f�js����O�J~2�z�86�*PB��v�Ν��e-��.�/��L�O����2����9���4}|��T5M���hÐ7�F*��l+y0����:|��=k[�d�;|�ԉe�=w�<��õ�<��'!1AQaq����� ������?��5����)�(���+>v����6&{���Ǹ@����M�����v��iA 6T'�w��h�s �E}�x��G&'g�� J~1q�f�f���&��q˘���-���vYm
�/i1 �I��6��u,)�#�,����l}*&`�$�ͬe�%�w3�x�Ѥ�Xc�D��执g�峕�5B/�|$��=���%8 a��2.l� c�@G� �\�/x[өq�]�v5?�����N|�!���\��,>��{�"r�/��?��&!1QAa�� ��ᑱ����?ĊD�肭�� nv@�yޝ (�����I ����U - ���b�m�E>,��1v!�d�&�� ���&�檔�5D�&0P��Ԕ�͒@Z��:E"� Q��`>PH:~�O�����P�3W��@hM��k�U��\�O��R�������5ʄ�,��f�|��r���}јxo)�"+h�QK���/��0�`�5�{M~�� ���'!1AQaq���0 �������?�?�k��#^�~�G��#V,������#Z�1'ܤ����������~p�O%O�O�\�q�`�~��}��E�Ű5 �輸�du����x\�$���s[�{T2t`B��gq�4Z]b� 㛪�3,(@����bAp�r)9:@|b�!r�g:N�^�Ʌ��� �x_�\��pm7I��0?>^k��������w���|.K�[sF@�]Gn*L �yO� le�P�.p��֍�j�S�=�ʨ�ןQF�"��5zʼn���k�*8�u" ����Fg��� �cSy�V������Ƈ��N��ؐ(�����48hV�A�ӎ^��^ ���jyB� ��p"�����y]�ļlU�(�7�U`3�pCGF'&yg������o��z������X��ν:�P"@�G@x[��o&MJ�$F.����hi w;}�/^͇q���n�mN�/�TQ���އ��O1\,}��bQ #¯^S!)��X���#GPȏ�t�� c^\��' }iIZ���a�)��������z��4͊�Ξy��48,��f���#�����KP!Jx�|w�ʆ�������������#��Z�������< �~K��r�p&qH/;�R���沽�+�E�R���~0v���V#ʀ�T��S(-ڝ��B�y�b�C�D������b��������8��~�= �Y�ͧ]��@n����M�k2�%�;�%,�r6�LR腻?^��;KŇ=�ք ���=`�ɥ��/����z�&�I{���#J��M���C��}�H9^UJ�,P ��pS����G�d69Ϭu���%"��ˢP��K�"k)��=��9� ����㇌,��Oli��Xzh� " � ������R��^�s����N�k��Q>�63(���� ��PQ�Py�����3����$f+W՛=4�ǁ`*��^��Eb�K�t�6��^��!�籷��ȭ��K{/;�L���p�x�����;a���Oلz�[�.NP4�]Gc�T�v����~sg'LED��]j��'�G�]�6rY����UPw�*O�İՋi�'8�۴�#g�Xx+=�eU6�R��c�"�u2��~�?n�y�;�u��3�'��6�f������b��߬M�$*��k&?6���*^1n����ێz)<��Gz� �����7����Y� ��ۃ)$A��2�L6� ե�H�<�r��#ʽ2��O��R���z�A��XW��@���������<�G� Ϥ�^�˓i�M�W���6 ��0��m){c�;ݧ�>R�a����}1�ٯ%�EY2�Q��Ep���$ ��E��qS��t#+x� *�h�UI��XM?�'//��a'�G�����q@���<��z��؟����cd��z�ˬT_u�Ѯ����&�z�k ��n ]�a%�py»�`Qd�xc������n�� ��*��oTd�;'j�<�!j���'�(~�ʹW�M� P�mȘ��@֨V+��R�`�$��`�+@��_[�kG����P���Zh9�R����&5b�v���Z���#p�&�Ա+��8�etZ7G���;��@"�e0���v7����?��z�?_���_�q1�T�"�p�ˎ/U 6_�B�>��0( ��}G#������Ȣ�p�� �9��;/& `�B&$�y��t(�*z�x���Ӕ������S�?Kȏ3���{p� b � ۍ-�z܈֦��6?<���ǬP�N�G �更� �6�/h�����0Z���������i�ua��e�*M'A� �x��v�q.>�F� oN{��Q���{gD��L��u��=|���O xN���d���q�8(��E�Uu��,��O� t�DJ ����;��G����e���C��VYZ�� ���T4{����(�Ӳ'c�t�f��w�c�jr�e�m �#7,�6��B�E4Q�P�.P�(&��^{9H-�m�o ��q�g1���=��>p�)/"p0!4�mS6ú�FN���h��D �)��XdT �FؤZ⸚�k���H�c8v� <���u�P�Հ���:��_�EN��|�ӛ��u?-�/�o�Lhk�ܸ�S�;�Rī�����T"�N����M��px7<�� j�$��`�Y)Pjh 5` K�Qf�4�C�bX"�D���;HD�Z�9R b�F)�UA����v�#��HD�!{������>I� �`�ԁ i�4�)t*�ç�Le�_���>ru�GEQg��ǔct��ō0��l6v���d�� ��GG8���v^�|�#JyZPSO�� Y�CuAߐ�"�x���OfHF@�K�V�!少Eҕ]h� ��[���)��.q����*0I<8��^�6�}p��^tho���ig�i����DK���p,��2�3�I��5����쓄OY�6s7Qs�Ow^�w�J/�A➰������0������g(Մ��y��Kԇ����QS��?H���w�X�=��ҞX�~���Q=�'���p?7�@g�~�G�}�r��g�T?���