diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 6c3a8d192..000000000 --- a/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM alpine -MAINTAINER xRain -RUN apk add --update openssh sshpass python py-mysqldb py-psutil py-crypto && \ - rm -rf /var/cache/apk/* -COPY . /jumpserver -WORKDIR /jumpserver -RUN python /jumpserver/install/docker/get-pip.py && \ - pip install -r /jumpserver/install/docker/piprequires.txt && \ - rm -rf /jumpserver/docs && \ - cp /jumpserver/install/docker/run.sh /run.sh && \ - rm -rf /etc/motd && chmod +x /run.sh && \ - rm -rf /jumpserver/keys && \ - rm -rf /jumpserver/logs && \ - rm -rf /home && \ - rm -rf /etc/ssh && \ - rm -rf /etc/shadow && \ - rm -rf /etc/passwd && \ - cp -r /jumpserver/install/docker/useradd /usr/sbin/useradd && \ - cp -r /jumpserver/install/docker/userdel /usr/sbin/userdel && \ - chmod +x /usr/sbin/useradd && \ - chmod +x /usr/sbin/userdel && \ - mkdir -p /data/home && \ - mkdir -p /data/logs && \ - mkdir -p /data/keys && \ - mkdir -p /data/ssh && \ - cp -r /jumpserver/install/docker/shadow /data/shadow && \ - cp -r /jumpserver/install/docker/passwd /data/passwd && \ - ln -s /data/logs /jumpserver/logs && \ - ln -s /data/keys /jumpserver/keys && \ - ln -s /data/home /home && \ - ln -s /data/ssh /etc/ssh && \ - ln -s /data/passwd /etc/passwd && \ - ln -s /data/shadow /etc/shadow && \ - chmod -R 777 /jumpserver -VOLUME /data -EXPOSE 80 22 -CMD /run.sh diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d7f105139..000000000 --- a/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/README.md b/README.md deleted file mode 100644 index b2b1360f6..000000000 --- a/README.md +++ /dev/null @@ -1,80 +0,0 @@ -## 写在前面 - - 版本号变更 2.0 -> 0.2版本 3.0 -> 0.3版本 - -#欢迎使用Jumpserver -**Jumpserver** 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 -支持常见系统: - 1. CentOS, RedHat, Fedora, Amazon Linux - 2. Debian - 3. SUSE, Ubuntu - 4. FreeBSD - 5. 其他ssh协议硬件设备 - -###截图: - -首页 - -![webterminal](https://github.com/ibuler/static/raw/master/jumpserver3/index.jpg) - -WebTerminal: - -![webterminal](https://github.com/ibuler/static/raw/master/jumpserver3/webTerminal.gif) - -Web批量执行命令 - -![WebExecCommand](https://github.com/ibuler/static/raw/master/jumpserver3/webExec.gif) - -录像回放 - -![录像](https://github.com/ibuler/static/raw/master/jumpserver3/record.gif) - -跳转和批量命令 - -![跳转](https://github.com/ibuler/static/raw/master/jumpserver3/connect.gif) - -命令统计 - -![跳转](https://github.com/ibuler/static/raw/master/jumpserver3/command.jpg) - -### 文档 - -* [访问wiki](https://github.com/jumpserver/jumpserver/wiki) -* [概览](https://github.com/jumpserver/jumpserver/wiki/%E6%A6%82%E8%A7%88) -* [名词解释](https://github.com/jumpserver/jumpserver/wiki/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A) -* [常见问题](https://github.com/jumpserver/jumpserver/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) -* 安装基于:[RedHat 的系统](https://github.com/jumpserver/jumpserver/wiki/%E5%9F%BA%E4%BA%8E-RedHat-%E7%9A%84%E7%B3%BB%E7%BB%9F),[Debian 的系统](https://github.com/jumpserver/jumpserver/wiki/%E5%9F%BA%E4%BA%8E-Debian-%E7%9A%84%E7%B3%BB%E7%BB%9F) -* [快速开始](https://github.com/jumpserver/jumpserver/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B) -* [安装图解](https://github.com/jumpserver/jumpserver/wiki/%E5%AE%89%E8%A3%85%E5%9B%BE%E8%A7%A3) -* [应用图解](https://github.com/jumpserver/jumpserver/wiki/%E5%BA%94%E7%94%A8%E5%9B%BE%E8%A7%A3) - -### 特点 - -* 完全开源,GPL授权 -* Python编写,容易再次开发 -* 实现了跳板机基本功能,认证、授权、审计 -* 集成了Ansible,批量命令等 -* 支持WebTerminal -* Bootstrap编写,界面美观 -* 自动收集硬件信息 -* 录像回放 -* 命令搜索 -* 实时监控 -* 批量上传下载 - -### 其它 - -[Jumpserver官网](http://www.jumpserver.org) - -[论坛](http://bbs.jumpserver.org) - -[demo站点](http://demo.jumpserver.org) - -交流群: 552054376 - -### 团队 - -![](https://github.com/ibuler/static/raw/master/jumpserver3/team.jpg) - - - - diff --git a/connect.py b/connect.py deleted file mode 100755 index aa5848888..000000000 --- a/connect.py +++ /dev/null @@ -1,813 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -import sys - -reload(sys) -sys.setdefaultencoding('utf8') - -import os -import re -import time -import datetime -import textwrap -import getpass -import readline -import django -import paramiko -import errno -import pyte -import operator -import struct, fcntl, signal, socket, select -from io import open as copen -import uuid - -os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' -if not django.get_version().startswith('1.6'): - setup = django.setup() -from django.contrib.sessions.models import Session -from jumpserver.api import ServerError, User, Asset, PermRole, AssetGroup, get_object, mkdir, get_asset_info -from jumpserver.api import logger, Log, TtyLog, get_role_key, CRYPTOR, bash, get_tmp_dir -from jperm.perm_api import gen_resource, get_group_asset_perm, get_group_user_perm, user_have_perm, PermRole -from jumpserver.settings import LOG_DIR, NAV_SORT_BY -from jperm.ansible_api import MyRunner -# from jlog.log_api import escapeString -from jlog.models import ExecLog, FileLog -from jlog.views import TermLogRecorder - -login_user = get_object(User, username=getpass.getuser()) -try: - remote_ip = os.environ.get('SSH_CLIENT').split()[0] -except (IndexError, AttributeError): - remote_ip = os.popen("who -m | awk '{ print $NF }'").read().strip('()\n') - -try: - import termios - import tty -except ImportError: - print '\033[1;31m仅支持类Unix系统 Only unix like supported.\033[0m' - time.sleep(3) - sys.exit() - - -def color_print(msg, color='red', exits=False): - """ - Print colorful string. - 颜色打印字符或者退出 - """ - color_msg = {'blue': '\033[1;36m%s\033[0m', - 'green': '\033[1;32m%s\033[0m', - 'yellow': '\033[1;33m%s\033[0m', - 'red': '\033[1;31m%s\033[0m', - 'title': '\033[30;42m%s\033[0m', - 'info': '\033[32m%s\033[0m'} - msg = color_msg.get(color, 'red') % msg - print msg - if exits: - time.sleep(2) - sys.exit() - return msg - - -def write_log(f, msg): - msg = re.sub(r'[\r\n]', '\r\n', msg) - f.write(msg) - f.flush() - - -class Tty(object): - """ - A virtual tty class - 一个虚拟终端类,实现连接ssh和记录日志,基类 - """ - def __init__(self, user, asset, role, login_type='ssh'): - self.username = user.username - self.asset_name = asset.hostname - self.ip = None - self.port = 22 - self.ssh = None - self.channel = None - self.asset = asset - self.user = user - self.role = role - self.remote_ip = '' - self.login_type = login_type - self.vim_flag = False - self.vim_end_pattern = re.compile(r'\x1b\[\?1049', re.X) - self.vim_data = '' - self.stream = None - self.screen = None - self.__init_screen_stream() - - def __init_screen_stream(self): - """ - 初始化虚拟屏幕和字符流 - """ - self.stream = pyte.ByteStream() - self.screen = pyte.Screen(80, 24) - self.stream.attach(self.screen) - - @staticmethod - def is_output(strings): - newline_char = ['\n', '\r', '\r\n'] - for char in newline_char: - if char in strings: - return True - return False - - @staticmethod - def command_parser(command): - """ - 处理命令中如果有ps1或者mysql的特殊情况,极端情况下会有ps1和mysql - :param command:要处理的字符传 - :return:返回去除PS1或者mysql字符串的结果 - """ - result = None - match = re.compile('\[?.*@.*\]?[\$#]\s').split(command) - if match: - # 只需要最后的一个PS1后面的字符串 - result = match[-1].strip() - else: - # PS1没找到,查找mysql - match = re.split('mysql>\s', command) - if match: - # 只需要最后一个mysql后面的字符串 - result = match[-1].strip() - return result - - def deal_command(self, data): - """ - 处理截获的命令 - :param data: 要处理的命令 - :return:返回最后的处理结果 - """ - command = '' - try: - self.stream.feed(data) - # 从虚拟屏幕中获取处理后的数据 - for line in reversed(self.screen.buffer): - line_data = "".join(map(operator.attrgetter("data"), line)).strip() - if len(line_data) > 0: - parser_result = self.command_parser(line_data) - if parser_result is not None: - # 2个条件写一起会有错误的数据 - if len(parser_result) > 0: - command = parser_result - else: - command = line_data - break - except Exception: - pass - # 虚拟屏幕清空 - self.screen.reset() - return command - - def get_log(self): - """ - Logging user command and output. - 记录用户的日志 - """ - tty_log_dir = os.path.join(LOG_DIR, 'tty') - date_today = datetime.datetime.now() - date_start = date_today.strftime('%Y%m%d') - time_start = date_today.strftime('%H%M%S') - today_connect_log_dir = os.path.join(tty_log_dir, date_start) - log_file_path = os.path.join(today_connect_log_dir, '%s_%s_%s' % (self.username, self.asset_name, time_start)) - - try: - mkdir(os.path.dirname(today_connect_log_dir), mode=777) - mkdir(today_connect_log_dir, mode=777) - except OSError: - logger.debug('创建目录 %s 失败,请修改%s目录权限' % (today_connect_log_dir, tty_log_dir)) - raise ServerError('创建目录 %s 失败,请修改%s目录权限' % (today_connect_log_dir, tty_log_dir)) - - try: - log_file_f = open(log_file_path + '.log', 'a') - log_time_f = open(log_file_path + '.time', 'a') - except IOError: - logger.debug('创建tty日志文件失败, 请修改目录%s权限' % today_connect_log_dir) - raise ServerError('创建tty日志文件失败, 请修改目录%s权限' % today_connect_log_dir) - - if self.login_type == 'ssh': # 如果是ssh连接过来,记录connect.py的pid,web terminal记录为日志的id - pid = os.getpid() - self.remote_ip = remote_ip # 获取远端IP - else: - pid = 0 - - log = Log(user=self.username, host=self.asset_name, remote_ip=self.remote_ip, login_type=self.login_type, - log_path=log_file_path, start_time=date_today, pid=pid) - log.save() - if self.login_type == 'web': - log.pid = log.id # 设置log id为websocket的id, 然后kill时干掉websocket - log.save() - - log_file_f.write('Start at %s\r\n' % datetime.datetime.now()) - return log_file_f, log_time_f, log - - def get_connect_info(self): - """ - 获取需要登陆的主机的信息和映射用户的账号密码 - """ - asset_info = get_asset_info(self.asset) - role_key = get_role_key(self.user, self.role) # 获取角色的key,因为ansible需要权限是600,所以统一生成用户_角色key - role_pass = CRYPTOR.decrypt(self.role.password) - connect_info = {'user': self.user, 'asset': self.asset, 'ip': asset_info.get('ip'), - 'port': int(asset_info.get('port')), 'role_name': self.role.name, - 'role_pass': role_pass, 'role_key': role_key} - logger.debug(connect_info) - return connect_info - - def get_connection(self): - """ - 获取连接成功后的ssh - """ - connect_info = self.get_connect_info() - - # 发起ssh连接请求 Make a ssh connection - ssh = paramiko.SSHClient() - # ssh.load_system_host_keys() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - try: - role_key = connect_info.get('role_key') - if role_key and os.path.isfile(role_key): - try: - ssh.connect(connect_info.get('ip'), - port=connect_info.get('port'), - username=connect_info.get('role_name'), - password=connect_info.get('role_pass'), - key_filename=role_key, - look_for_keys=False) - return ssh - except (paramiko.ssh_exception.AuthenticationException, paramiko.ssh_exception.SSHException): - logger.warning(u'使用ssh key %s 失败, 尝试只使用密码' % role_key) - pass - - ssh.connect(connect_info.get('ip'), - port=connect_info.get('port'), - username=connect_info.get('role_name'), - password=connect_info.get('role_pass'), - allow_agent=False, - look_for_keys=False) - - except (paramiko.ssh_exception.AuthenticationException, paramiko.ssh_exception.SSHException): - raise ServerError('认证失败 Authentication Error.') - except socket.error: - raise ServerError('端口可能不对 Connect SSH Socket Port Error, Please Correct it.') - else: - self.ssh = ssh - return ssh - - -class SshTty(Tty): - """ - A virtual tty class - 一个虚拟终端类,实现连接ssh和记录日志 - """ - - @staticmethod - def get_win_size(): - """ - This function use to get the size of the windows! - 获得terminal窗口大小 - """ - if 'TIOCGWINSZ' in dir(termios): - TIOCGWINSZ = termios.TIOCGWINSZ - else: - TIOCGWINSZ = 1074295912L - s = struct.pack('HHHH', 0, 0, 0, 0) - x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s) - return struct.unpack('HHHH', x)[0:2] - - def set_win_size(self, sig, data): - """ - This function use to set the window size of the terminal! - 设置terminal窗口大小 - """ - try: - win_size = self.get_win_size() - self.channel.resize_pty(height=win_size[0], width=win_size[1]) - except Exception: - pass - - def posix_shell(self): - """ - Use paramiko channel connect server interactive. - 使用paramiko模块的channel,连接后端,进入交互式 - """ - log_file_f, log_time_f, log = self.get_log() - termlog = TermLogRecorder(User.objects.get(id=self.user.id)) - termlog.setid(log.id) - old_tty = termios.tcgetattr(sys.stdin) - pre_timestamp = time.time() - data = '' - input_mode = False - try: - tty.setraw(sys.stdin.fileno()) - tty.setcbreak(sys.stdin.fileno()) - self.channel.settimeout(0.0) - - while True: - try: - r, w, e = select.select([self.channel, sys.stdin], [], []) - flag = fcntl.fcntl(sys.stdin, fcntl.F_GETFL, 0) - fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, flag|os.O_NONBLOCK) - except Exception: - pass - - if self.channel in r: - try: - x = self.channel.recv(10240) - if len(x) == 0: - break - - index = 0 - len_x = len(x) - while index < len_x: - try: - n = os.write(sys.stdout.fileno(), x[index:]) - sys.stdout.flush() - index += n - except OSError as msg: - if msg.errno == errno.EAGAIN: - continue - now_timestamp = time.time() - termlog.write(x) - termlog.recoder = False - log_time_f.write('%s %s\n' % (round(now_timestamp-pre_timestamp, 4), len(x))) - log_time_f.flush() - log_file_f.write(x) - log_file_f.flush() - pre_timestamp = now_timestamp - log_file_f.flush() - - self.vim_data += x - if input_mode: - data += x - - except socket.timeout: - pass - - if sys.stdin in r: - try: - x = os.read(sys.stdin.fileno(), 4096) - except OSError: - pass - termlog.recoder = True - input_mode = True - if self.is_output(str(x)): - # 如果len(str(x)) > 1 说明是复制输入的 - if len(str(x)) > 1: - data = x - match = self.vim_end_pattern.findall(self.vim_data) - if match: - if self.vim_flag or len(match) == 2: - self.vim_flag = False - else: - self.vim_flag = True - elif not self.vim_flag: - self.vim_flag = False - data = self.deal_command(data)[0:200] - if data is not None: - TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() - data = '' - self.vim_data = '' - input_mode = False - - if len(x) == 0: - break - self.channel.send(x) - - finally: - termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_tty) - log_file_f.write('End time is %s' % datetime.datetime.now()) - log_file_f.close() - log_time_f.close() - termlog.save() - log.filename = termlog.filename - log.is_finished = True - log.end_time = datetime.datetime.now() - log.save() - - def connect(self): - """ - Connect server. - 连接服务器 - """ - # 发起ssh连接请求 Make a ssh connection - ssh = self.get_connection() - - transport = ssh.get_transport() - transport.set_keepalive(30) - transport.use_compression(True) - - # 获取连接的隧道并设置窗口大小 Make a channel and set windows size - global channel - win_size = self.get_win_size() - # self.channel = channel = ssh.invoke_shell(height=win_size[0], width=win_size[1], term='xterm') - self.channel = channel = transport.open_session() - channel.get_pty(term='xterm', height=win_size[0], width=win_size[1]) - channel.invoke_shell() - try: - signal.signal(signal.SIGWINCH, self.set_win_size) - except: - pass - - self.posix_shell() - - # Shutdown channel socket - channel.close() - ssh.close() - - -class Nav(object): - """ - 导航提示类 - """ - def __init__(self, user): - self.user = user - self.user_perm = get_group_user_perm(self.user) - if NAV_SORT_BY == 'ip': - self.perm_assets = sorted(self.user_perm.get('asset', []).keys(), - key=lambda x: [int(num) for num in x.ip.split('.') if num.isdigit()]) - elif NAV_SORT_BY == 'hostname': - self.perm_assets = self.natural_sort_hostname(self.user_perm.get('asset', []).keys()) - else: - self.perm_assets = tuple(self.user_perm.get('asset', [])) - self.search_result = self.perm_assets - self.perm_asset_groups = self.user_perm.get('asset_group', []) - - def natural_sort_hostname(self, list): - convert = lambda text: int(text) if text.isdigit() else text.lower() - alphanum_key = lambda x: [ convert(c) for c in re.split('([0-9]+)', x.hostname) ] - return sorted(list, key = alphanum_key) - - @staticmethod - def print_nav(): - """ - Print prompt - 打印提示导航 - """ - msg = """\n\033[1;32m### 欢迎使用Jumpserver开源跳板机系统 ### \033[0m - - 1) 输入 \033[32mID\033[0m 直接登录 或 输入\033[32m部分 IP,主机名,备注\033[0m 进行搜索登录(如果唯一). - 2) 输入 \033[32m/\033[0m + \033[32mIP, 主机名 or 备注 \033[0m搜索. 如: /ip - 3) 输入 \033[32mP/p\033[0m 显示您有权限的主机. - 4) 输入 \033[32mG/g\033[0m 显示您有权限的主机组. - 5) 输入 \033[32mG/g\033[0m\033[0m + \033[32m组ID\033[0m 显示该组下主机. 如: g1 - 6) 输入 \033[32mE/e\033[0m 批量执行命令. - 7) 输入 \033[32mU/u\033[0m 批量上传文件. - 8) 输入 \033[32mD/d\033[0m 批量下载文件. - 9) 输入 \033[32mH/h\033[0m 帮助. - 0) 输入 \033[32mQ/q\033[0m 退出. - """ - print textwrap.dedent(msg) - - def get_asset_group_member(self, str_r): - gid_pattern = re.compile(r'^g\d+$') - - if gid_pattern.match(str_r): - gid = int(str_r.lstrip('g')) - # 获取资产组包含的资产 - asset_group = get_object(AssetGroup, id=gid) - if asset_group and asset_group in self.perm_asset_groups: - self.search_result = list(asset_group.asset_set.all()) - else: - color_print('没有该资产组或没有权限') - return - - def search(self, str_r=''): - # 搜索结果保存 - if str_r: - try: - id_ = int(str_r) - if id_ < len(self.search_result): - self.search_result = [self.search_result[id_]] - return - else: - raise ValueError - - except (ValueError, TypeError): - # 匹配 ip, hostname, 备注 - str_r = str_r.lower() - self.search_result = [asset for asset in self.perm_assets if str_r == str(asset.ip).lower()] or \ - [asset for asset in self.perm_assets if str_r in str(asset.ip).lower() \ - or str_r in str(asset.hostname).lower() \ - or str_r in str(asset.comment).lower()] - else: - # 如果没有输入就展现所有 - self.search_result = self.perm_assets - - @staticmethod - def truncate_str(str_, length=30): - str_ = str_.decode('utf-8') - if len(str_) > length: - return str_[:14] + '..' + str_[-14:] - else: - return str_ - - @staticmethod - def get_max_asset_property_length(assets, property_='hostname'): - try: - return max([len(getattr(asset, property_)) for asset in assets]) - except ValueError: - return 30 - - def print_search_result(self): - hostname_max_length = self.get_max_asset_property_length(self.search_result) - line = '[%-3s] %-16s %-5s %-' + str(hostname_max_length) + 's %-10s %s' - color_print(line % ('ID', 'IP', 'Port', 'Hostname', 'SysUser', 'Comment'), 'title') - if hasattr(self.search_result, '__iter__'): - for index, asset in enumerate(self.search_result): - # 获取该资产信息 - asset_info = get_asset_info(asset) - # 获取该资产包含的角色 - role = [str(role.name) for role in self.user_perm.get('asset').get(asset).get('role')] - print line % (index, asset.ip, asset_info.get('port'), - self.truncate_str(asset.hostname), str(role).replace("'", ''), asset.comment) - print - - def try_connect(self): - try: - asset = self.search_result[0] - roles = list(self.user_perm.get('asset').get(asset).get('role')) - if len(roles) == 1: - role = roles[0] - elif len(roles) > 1: - print "\033[32m[ID] 系统用户\033[0m" - for index, role in enumerate(roles): - print "[%-2s] %s" % (index, role.name) - print - print "授权系统用户超过1个,请输入ID, q退出" - try: - role_index = raw_input("\033[1;32mID>:\033[0m ").strip() - if role_index == 'q': - return - else: - role = roles[int(role_index)] - except IndexError: - color_print('请输入正确ID', 'red') - return - else: - color_print('没有映射用户', 'red') - return - - print('Connecting %s ...' % asset.hostname) - ssh_tty = SshTty(login_user, asset, role) - ssh_tty.connect() - except (KeyError, ValueError): - color_print('请输入正确ID', 'red') - except ServerError, e: - color_print(e, 'red') - - def print_asset_group(self): - """ - 打印用户授权的资产组 - """ - user_asset_group_all = get_group_user_perm(self.user).get('asset_group', []) - color_print('[%-3s] %-20s %s' % ('ID', '组名', '备注'), 'title') - for asset_group in user_asset_group_all: - print '[%-3s] %-15s %s' % (asset_group.id, asset_group.name, asset_group.comment) - print - - def exec_cmd(self): - """ - 批量执行命令 - """ - while True: - roles = self.user_perm.get('role').keys() - if len(roles) > 1: # 授权角色数大于1 - color_print('[%-2s] %-15s' % ('ID', '系统用户'), 'info') - role_check = dict(zip(range(len(roles)), roles)) - - for i, r in role_check.items(): - print '[%-2s] %-15s' % (i, r.name) - print - print "请输入运行命令所关联系统用户的ID, q退出" - - try: - role_id = int(raw_input("\033[1;32mRole>:\033[0m ").strip()) - if role_id == 'q': - break - except (IndexError, ValueError): - color_print('错误输入') - else: - role = role_check[int(role_id)] - elif len(roles) == 1: # 授权角色数为1 - role = roles[0] - else: - color_print('当前用户未被授予角色,无法执行任何操作,如有疑问请联系管理员。') - return - assets = list(self.user_perm.get('role', {}).get(role).get('asset')) # 获取该用户,角色授权主机 - print "授权包含该系统用户的所有主机" - for asset in assets: - print ' %s' % asset.hostname - print - print "请输入主机名或ansible支持的pattern, 多个主机:分隔, q退出" - pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() - if pattern == 'q': - break - else: - res = gen_resource({'user': self.user, 'asset': assets, 'role': role}, perm=self.user_perm) - runner = MyRunner(res) - asset_name_str = '' - print "匹配主机:" - for inv in runner.inventory.get_hosts(pattern=pattern): - print ' %s' % inv.name - asset_name_str += '%s ' % inv.name - print - - while True: - print "请输入执行的命令, 按q退出" - command = raw_input("\033[1;32mCmds>:\033[0m ").strip() - if command == 'q': - break - elif not command: - color_print('命令不能为空...') - continue - runner.run('shell', command, pattern=pattern) - ExecLog(host=asset_name_str, user=self.user.username, cmd=command, remote_ip=remote_ip, - result=runner.results).save() - for k, v in runner.results.items(): - if k == 'ok': - for host, output in v.items(): - color_print("%s => %s" % (host, 'Ok'), 'green') - print output - print - else: - for host, output in v.items(): - color_print("%s => %s" % (host, k), 'red') - color_print(output, 'red') - print - print "~o~ Task finished ~o~" - print - - def upload(self): - while True: - try: - print "进入批量上传模式" - print "请输入主机名或ansible支持的pattern, 多个主机:分隔 q退出" - pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() - if pattern == 'q': - break - else: - assets = self.user_perm.get('asset').keys() - res = gen_resource({'user': self.user, 'asset': assets}, perm=self.user_perm) - runner = MyRunner(res) - asset_name_str = '' - print "匹配主机:" - for inv in runner.inventory.get_hosts(pattern=pattern): - print inv.name - asset_name_str += '%s ' % inv.name - - if not asset_name_str: - color_print('没有匹配主机') - continue - tmp_dir = get_tmp_dir() - logger.debug('Upload tmp dir: %s' % tmp_dir) - os.chdir(tmp_dir) - bash('rz') - filename_str = ' '.join(os.listdir(tmp_dir)) - if not filename_str: - color_print("上传文件为空") - continue - logger.debug('上传文件: %s' % filename_str) - - runner = MyRunner(res) - runner.run('copy', module_args='src=%s dest=%s directory_mode' - % (tmp_dir, '/tmp'), pattern=pattern) - ret = runner.results - FileLog(user=self.user.name, host=asset_name_str, filename=filename_str, - remote_ip=remote_ip, type='upload', result=ret).save() - logger.debug('Upload file: %s' % ret) - if ret.get('failed'): - error = '上传目录: %s \n上传失败: [ %s ] \n上传成功 [ %s ]' % (tmp_dir, - ', '.join(ret.get('failed').keys()), - ', '.join(ret.get('ok').keys())) - color_print(error) - else: - msg = '上传目录: %s \n传送成功 [ %s ]' % (tmp_dir, ', '.join(ret.get('ok').keys())) - color_print(msg, 'green') - print - - except IndexError: - pass - - def download(self): - while True: - try: - print "进入批量下载模式" - print "请输入主机名或ansible支持的pattern, 多个主机:分隔,q退出" - pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() - if pattern == 'q': - break - else: - assets = self.user_perm.get('asset').keys() - res = gen_resource({'user': self.user, 'asset': assets}, perm=self.user_perm) - runner = MyRunner(res) - asset_name_str = '' - print "匹配主机:\n" - for inv in runner.inventory.get_hosts(pattern=pattern): - asset_name_str += '%s ' % inv.name - print ' %s' % inv.name - if not asset_name_str: - color_print('没有匹配主机') - continue - print - while True: - tmp_dir = get_tmp_dir() - logger.debug('Download tmp dir: %s' % tmp_dir) - print "请输入文件路径(不支持目录)" - file_path = raw_input("\033[1;32mPath>:\033[0m ").strip() - if file_path == 'q': - break - - if not file_path: - color_print("文件路径为空") - continue - - runner.run('fetch', module_args='src=%s dest=%s' % (file_path, tmp_dir), pattern=pattern) - ret = runner.results - FileLog(user=self.user.name, host=asset_name_str, filename=file_path, type='download', - remote_ip=remote_ip, result=ret).save() - logger.debug('Download file result: %s' % ret) - os.chdir('/tmp') - tmp_dir_name = os.path.basename(tmp_dir) - if not os.listdir(tmp_dir): - color_print('下载全部失败') - continue - bash('tar czf %s.tar.gz %s && sz %s.tar.gz' % (tmp_dir, tmp_dir_name, tmp_dir)) - - if ret.get('failed'): - error = '文件名称: %s \n下载失败: [ %s ] \n下载成功 [ %s ]' % \ - ('%s.tar.gz' % tmp_dir_name, ', '.join(ret.get('failed').keys()), ', '.join(ret.get('ok').keys())) - color_print(error) - else: - msg = '文件名称: %s \n下载成功 [ %s ]' % ('%s.tar.gz' % tmp_dir_name, ', '.join(ret.get('ok').keys())) - color_print(msg, 'green') - print - except IndexError: - pass - - -def main(): - """ - he he - 主程序 - """ - if not login_user: # 判断用户是否存在 - color_print('没有该用户,或许你是以root运行的 No that user.', exits=True) - - if not login_user.is_active: - color_print('您的用户已禁用,请联系管理员.', exits=True) - - gid_pattern = re.compile(r'^g\d+$') - nav = Nav(login_user) - nav.print_nav() - - try: - while True: - try: - option = raw_input("\033[1;32mOpt or ID>:\033[0m ").strip() - except EOFError: - nav.print_nav() - continue - except KeyboardInterrupt: - sys.exit(0) - if option in ['P', 'p', '\n', '']: - nav.search() - nav.print_search_result() - continue - if option.startswith('/'): - nav.search(option.lstrip('/')) - nav.print_search_result() - elif gid_pattern.match(option): - nav.get_asset_group_member(str_r=option) - nav.print_search_result() - elif option in ['G', 'g']: - nav.print_asset_group() - continue - elif option in ['E', 'e']: - nav.exec_cmd() - continue - elif option in ['U', 'u']: - nav.upload() - elif option in ['D', 'd']: - nav.download() - elif option in ['H', 'h']: - nav.print_nav() - elif option in ['Q', 'q', 'exit']: - sys.exit() - else: - nav.search(option) - if len(nav.search_result) == 1: - print('Only match Host: %s ' % nav.search_result[0].hostname) - nav.try_connect() - else: - nav.print_search_result() - - except IndexError, e: - color_print(e) - time.sleep(5) - -if __name__ == '__main__': - main() diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 8b6fd8e84..000000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,17 +0,0 @@ -version: '2' -services: - jumpserver: - build: . - container_name: jumpserver - restart: always - ports: - - "8888:80" - - "2222:22" - # environment: - # - ENGINE=mysql - # - MYSQL_HOST=192.168.64.5 - # - MYSQL_PORT=3306 - # - MYSQL_USER=root - # - MYSQL_PASS=love1314 - # - MYSQL_NAME=jumpserver - # - MAIL_ENABLED=false diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index dcc21360e..000000000 --- a/docs/README.md +++ /dev/null @@ -1,127 +0,0 @@ -快速安装 ------- -####环境 - CentOS 6.x x86_64 - iptables stop - selinux disable - - -####开始 -**1. 安装git** - -> yum -y install git - -**2. 下载jumpserver** - -> git clone https://github.com/ibuler/jumpserver.git - -**3. 执行快速安装脚本** - -> cd jumpserver/install && python install.py - - - *根据提示输入相关信息,完成安装,完成安装后,请访问web,继续查看后续文档* - - - -名词解释 ------- - - -* **用户** 用户是授权和登陆的主体,将来为每个员工建立一个账户,用来登录跳板机, - 将资产授权给该用户,查看用户登陆记录命令历史等 - -* **用户组** 多个用户可以组合成用户组,为了方便进行授权,可以将一个部门或几个用户 - 组建成用户组,在授权中使用组授权,该组中的用户拥有所有授权的主机权限 - -* **资产** 资产通常是我们的服务器、网络设备等,将资产授权给用户,用户则会有权限登 - 录资产,执行命令等 - -* **管理账户** 添加资产时需要添加一个管理账户,该账户是该资产上已有的有管理权限的用户, - 如root,或者有 NOPASSWD: ALL sudo权限的用户,该管理账户用来向资产推送系统用户, - 为系统用户添加sudo,获取资产的一些硬件信息 - -* **资产组** 同用户组,是资产组成的集合,为了方便授权 - -* **机房** 又称IDC,不解释 - -* **Sudo** 这里的sudo其实是Linux中的sudo命令别名,一个sudo别名包含多个命令, - 系统用户关联sudo就代表该系统用户有权限sudo执行这些命令 - -* **系统用户** 系统用户是服务器上建立的一些真实存在的可以ssh登陆的用户,如 dev, - sa, dba等,系统用户可使用jumpserver推送到服务器上,也可以利用自己公司 - 的工具进行推送,授权时将用户、资产、系统用户关联起来则表明用户有权限登陆该资产的 - 这个系统用户 如:用户 **小明** 以 **dev** 系统用户登陆 **172.16.1.1**资产 - -* **授权规则** 授权规则是将 **资产** **系统用户** 和 **用户** 关联起来,用来完成授权。 - 这样用户就可以以某个系统用户账号登陆资产 - -* **日志审计** - * **在线** 查看当前在线的用户(非web在线),可以监控用户的命令执行,强制结束用户 - 登录。 - * **登录历史** 查看以往用户的登录历史,可以查看用户登陆操作的命令,可以回放用户 - 执行命令的录像 - * **命令记录** 查看用户批量执行命令的历史,包含执行命令的主机,执行的命令,执行的结果 - - * **上传下载** 查看用户上传下载文件的记录 - - -快速开始 ------- - -##### 1. 添加用户 -**用户管理 - 查看用户 - 添加用户** 填写基本信息,完成用户添加 - - 用户添加完成后,根据提示记住用户账号密码,换个浏览器登录下载key, - ssh登录jumpserver测试 - -##### 2. 添加资产 -**资产管理 - 查看资产 - 添加资产** 填写基本信息,完成资产添加 - -##### 3. 添加sudo -**授权管理 - Sudo - 添加别名** 输入别名名称和命令,完成sudo添加 - -##### 4. 添加系统用户 -**授权管理 - 系统用户 - 添加** 输入基本信息,完成系统用户添加 - -##### 5. 推送系统用户 -**授权管理 - 推送** - 选择需要推送的资产或资产组完成推送 - - 推送只支持服务器,使用密钥是指用户从跳板机跳转时使用key,反之使用密码, - 授权时会检查推送记录,如果没有推送过则无法完成系统用户在该资产上的授权。 - 如果资产时网络设备,请不要选择密码和秘钥,模拟一下推送,目的是为了生成 - 推送记录。 - -##### 6. 添加授权规则 -**授权管理 - 授权规则 - 添加规则** 选择刚才添加的用户,资产,系统用户完成授权 - -##### 7. 测试登录 -**用户下载key** 登录跳板机,会自动运行connect.py,根据提示登录服务器 - -**用户登陆web** 查看授权的主机,点击后面的链接,测试是否可以登录服务器 - -##### 8. 监控和结束会话 -**日志审计 - 在线** 查看当前登录的用户登录情况,点击监控查看用户执行的命令, -点击阻断,结束用户的会话 - -##### 9. 查看历史记录 -**日志审计 - 登录历史** 查看登录历史,点击统计查看命令历史,点击回放查看录像 - -##### 10. 执行命令 -同7 测试命令的执行,命令记录查看 批量执行命令的日志 - -##### 11. 上传下载 -同7 测试文件的上传下载,日志审计 - 上传下载 查看上传下载记录 - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/nginx-with-ssl-configuration.md b/docs/nginx-with-ssl-configuration.md deleted file mode 100644 index 7d218ebea..000000000 --- a/docs/nginx-with-ssl-configuration.md +++ /dev/null @@ -1,75 +0,0 @@ -# 使用Nginx搭建SSL配置 - -跳板机是所有服务器的入口,所以,它的安全至关重要。因此,建议把`Jumpserver`搭建在内网环境中,并且加上SSL证书,保证数据传输的安全。 - -## nginx的安装 - -不同的操作系统及版本,安装方法都不太一样。我们以`Debian`为例。 - -``` -apt-get update -apt-get install -y nginx -``` - -更多安装示例请参考 [Nginx官方安装指南](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/) - -## Nginx中的SSL的配置 - -* 编辑 `/etc/nginx/sites-enabled/default` 或者指定的`Jumpserver`的配置文件 - -* 示例如下 - -``` -server { - listen 443; - listen 80; - server_name YOUR_DOMAIN; - ssl_certificate YOUR_DOMAIN_CRT; - ssl_certificate_key YOUR_DOMAIN_KEY; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_ciphers HIGH:!aNULL:!MD5; - ssl_prefer_server_ciphers on; - ssl on ; - - if ($ssl_protocol = "") { - rewrite ^ https://$host$request_uri? permanent; - } - - location / { - proxy_set_header Connection ""; - proxy_http_version 1.1; - proxy_pass http://JUMPSERVER_HOST:WEB_PORT; - } - - location /_ws/ { - keepalive_timeout 600s; - send_timeout 600s; - proxy_connect_timeout 7d; - proxy_send_timeout 7d; - proxy_read_timeout 7d; - rewrite ^/_ws(/.*)$ $1 break; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass http://JUMPSERVER_HOST:WS_PORT; - } -} - -``` - -* 请替换如下表格的关键字 - - -关键字 | 示例 | 说明 -------------- | ------------- |------- -`YOUR_DOMAIN` | example.com | `Jumpserver`的域名 -`YOUR_DOMAIN_CRT` | /etc/nginx/certs/example.crt | SSL证书的CRT文件 -`YOUR_DOMAIN_KEY` | /etc/nginx/certs/example.key | SSL证书的KEY文件 -`JUMPSERVER_HOST` | 127.0.0.1 | `Jumpserver`服务器IP -`WEB_PORT ` | 80 | `Jumpserver`网页监听端口 -`WS_PORT ` | 3000 | websocket端口,`Jumpserver` 默认为3000 - -* 此配置会强制使用`https`, 建议加上(即if判断的那三行)。 \ No newline at end of file diff --git a/init.sh b/init.sh deleted file mode 100755 index 7169d6cce..000000000 --- a/init.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# - -trap '' SIGINT -base_dir=$(dirname $0) - -export LANG='zh_CN.UTF-8' -python $base_dir/connect.py - -exit diff --git a/install/developer_doc.txt b/install/developer_doc.txt deleted file mode 100644 index aa7b0db9f..000000000 --- a/install/developer_doc.txt +++ /dev/null @@ -1,36 +0,0 @@ -# coding: utf8 - -Jumpserver开发者文档 - -开发规范: - 1. 遵守PE8规范 1) 命名规范 2) 导入模块规范 3) 空行规范 4) 长度规范 - 2. 缩进统一4个空格 - 3. 变量命名明了易懂多个单词下划线隔开 - 4. 注释到位 - - -框架说明: - 1. 项目名称 Jumpserver - 2. APP: - juser 用户管理 - jasset 资产管理(设备管理) - jpermission 授权管理 - jlog 日志管理 - 3. connect.py 用户登录入口程序 - 4. logs 日志保存目录 - 5. jumpserver.conf 配置文件 - 6. docs 文档目录 - 7. static 静态文件目录 - 8. templates 模板目录 - - -connect.py逻辑说明: - 用户登录系统,运行该脚本,p调用get_user_host函数查看有权限的服务器ip - 输入部分IP,verify_connect匹配该部分ip,如果是匹配到多个,就显示ip - 匹配到0了就显示没有权限或者主机, - 匹配到1个则继续 - 查询该服务器是否支持ldap 如果是,获得ldap用户密码登陆 - 如果否,查询授权表,查看该服务器授权的系统用户,并返回对应账号密码,登陆 - connect函数是登陆函数,采用paramiko 使用channel登陆,posix_shell 来完成交互,并记录日志 - signal模块来完成窗口改变导致的tty大小随之改变 - PyCrypt是对称加密类 \ No newline at end of file diff --git a/install/docker/config_tmpl.conf b/install/docker/config_tmpl.conf deleted file mode 100644 index 16ac7146f..000000000 --- a/install/docker/config_tmpl.conf +++ /dev/null @@ -1,25 +0,0 @@ -[base] -url = -key = 941enj9neshd1wes -ip = 0.0.0.0 -port = 80 -log = debug - -[db] -engine = __ENGINE__ -host = __MYSQL_HOST__ -port = __MYSQL_PORT__ -user = __MYSQL_USER__ -password = __MYSQL_PASS__ -database = __DATEBASE__ - -[mail] -mail_enable = __MAIL_ENABLED__ -email_host = __MAIL_HOST__ -email_port = __MAIL_PORT__ -email_host_user = __MAIL_USER__ -email_host_password = __MAIL_PASS__ -email_use_tls = __MAIL_USE_TLS__ - -[connect] -nav_sort_by = ip diff --git a/install/docker/get-pip.py b/install/docker/get-pip.py deleted file mode 100644 index 30a6cd7f4..000000000 --- a/install/docker/get-pip.py +++ /dev/null @@ -1,17759 +0,0 @@ -#!/usr/bin/env python -# -# Hi There! -# You may be wondering what this giant blob of binary data here is, you might -# even be worried that we're up to something nefarious (good for you for being -# paranoid!). This is a base85 encoding of a zip file, this zip file contains -# an entire copy of pip. -# -# Pip is a thing that installs packages, pip itself is a package that someone -# might want to install, especially if they're looking to run this get-pip.py -# script. Pip has a lot of code to deal with the security of installing -# packages, various edge cases on various platforms, and other such sort of -# "tribal knowledge" that has been encoded in its code base. Because of this -# we basically include an entire copy of pip inside this blob. We do this -# because the alternatives are attempt to implement a "minipip" that probably -# doesn't do things correctly and has weird edge cases, or compress pip itself -# down into a single file. -# -# If you're wondering how this is created, it is using an invoke task located -# in tasks/generate.py called "installer". It can be invoked by using -# ``invoke generate.installer``. - -import os.path -import pkgutil -import shutil -import sys -import struct -import tempfile - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - -if PY3: - iterbytes = iter -else: - def iterbytes(buf): - return (ord(byte) for byte in buf) - -try: - from base64 import b85decode -except ImportError: - _b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~") - - def b85decode(b): - _b85dec = [None] * 256 - for i, c in enumerate(iterbytes(_b85alphabet)): - _b85dec[c] = i - - padding = (-len(b)) % 5 - b = b + b'~' * padding - out = [] - packI = struct.Struct('!I').pack - for i in range(0, len(b), 5): - chunk = b[i:i + 5] - acc = 0 - try: - for c in iterbytes(chunk): - acc = acc * 85 + _b85dec[c] - except TypeError: - for j, c in enumerate(iterbytes(chunk)): - if _b85dec[c] is None: - raise ValueError( - 'bad base85 character at position %d' % (i + j) - ) - raise - try: - out.append(packI(acc)) - except struct.error: - raise ValueError('base85 overflow in hunk starting at byte %d' - % i) - - result = b''.join(out) - if padding: - result = result[:-padding] - return result - - -def bootstrap(tmpdir=None): - # Import pip so we can use it to install pip and maybe setuptools too - import pip - from pip.commands.install import InstallCommand - - # Wrapper to provide default certificate with the lowest priority - class CertInstallCommand(InstallCommand): - def parse_args(self, args): - # If cert isn't specified in config or environment, we provide our - # own certificate through defaults. - # This allows user to specify custom cert anywhere one likes: - # config, environment variable or argv. - if not self.parser.get_default_values().cert: - self.parser.defaults["cert"] = cert_path # calculated below - return super(CertInstallCommand, self).parse_args(args) - - pip.commands_dict["install"] = CertInstallCommand - - # We always want to install pip - packages = ["pip"] - - # Check if the user has requested us not to install setuptools - if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"): - args = [x for x in sys.argv[1:] if x != "--no-setuptools"] - else: - args = sys.argv[1:] - - # We want to see if setuptools is available before attempting to - # install it - try: - import setuptools # noqa - except ImportError: - packages += ["setuptools"] - - # Check if the user has requested us not to install wheel - if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"): - args = [x for x in args if x != "--no-wheel"] - else: - # We want to see if wheel is available before attempting to install it. - try: - import wheel # noqa - except ImportError: - args += ["wheel"] - - delete_tmpdir = False - try: - # Create a temporary directory to act as a working directory if we were - # not given one. - if tmpdir is None: - tmpdir = tempfile.mkdtemp() - delete_tmpdir = True - - # We need to extract the SSL certificates from requests so that they - # can be passed to --cert - cert_path = os.path.join(tmpdir, "cacert.pem") - with open(cert_path, "wb") as cert: - cert.write(pkgutil.get_data("pip._vendor.requests", "cacert.pem")) - - # Execute the included pip and use it to install the latest pip and - # setuptools from PyPI - sys.exit(pip.main(["install", "--upgrade"] + packages + args)) - finally: - # Remove our temporary directory - if delete_tmpdir and tmpdir: - shutil.rmtree(tmpdir, ignore_errors=True) - - -def main(): - tmpdir = None - try: - # Create a temporary working directory - tmpdir = tempfile.mkdtemp() - - # Unpack the zipfile into the temporary directory - pip_zip = os.path.join(tmpdir, "pip.zip") - with open(pip_zip, "wb") as fp: - fp.write(b85decode(DATA.replace(b"\n", b""))) - - # Add the zipfile to sys.path so that we can import it - sys.path.insert(0, pip_zip) - - # Run the bootstrap - bootstrap(tmpdir=tmpdir) - finally: - # Clean up our temporary working directory - if tmpdir: - shutil.rmtree(tmpdir, ignore_errors=True) - - -DATA = b""" -P)h>@6aWAK2mtey7Dt5400EW_006Ei000jF003}la4%n9X>MtBUtcb8d7WBuZ`-yK|KFd2brwikWo_B -;u!rn<*pQ}JfvyeG_Vod&A;=bObCD&Dl#;mHzWcj7k|JfvSvC!;CGmK7Jl_3ycgo4LuUaL)T8i>3Uf! -{K-)yULvX<43rRlnDTFKLtiCtaEhGk1t6>Y;){XChN_eHhYh;m~eE7jfAO`S=_?el#mOCVI;OttT5C7 -)=ywWt&Ru;O(is#00muS(TqMUmmlODQWEvx{oC%gWq5U5T3R9Fw*YMK^!Ln^b5XJWq3>8Yz}7iHK>im -euCS+?>~vuSm3`xLY~iqKVm#%T+5yR>VxT%R4R=kjHG9ea7%&OvOsdBN9NTQurtUeqruxyzb{dn;XOOY|12T6iY~H_KCECyGp_mh|{!`wT`}HI6L3<7HmSMDpK -St{Rop+3GgiaFw*OD8%yHkxdIH3@+F@4yNJPdge#%1o0%AOeQBRQ%Y>g9WNWUt|VI**)9J!Ybv(nY@5 -~f9*N#>g<@;*z!l3_4crO=YisuGe#=WE4S2FUk%8apXYkt@aA)_NW#C*VOq8O5{SgW&n=Qv>v0at71& -`U(F0?blF0b@zrVNBjT!IpJ$Ox>%Kr;@T1iRXxviFs|W#B?Jm&G0=0sjo#TQn`XO=7*A4Bl~`xLY_MBV(C;pV+8Q)}jEnw2$Ew_O+6H8Z(F;zNzGXKJE(W2svM~tZgdrzPjKI52JH -(p6PUI;+$5hjl&ET-lEf>rn?L*V}?y&g>Ht5h#S5Tjlu}++`dPZOo;BX%$5ab%RN(7D_6MWs^qL%lPF -KR+VY}cY9&PtY(t3ZEdzx -gxNc>BxM>&y3-0XZP9TqOYDLRO`=8(tE8M3(fp0td~}$sFBHfK1YlZ?9jx3l@p03(#?apptr%_ra8NT;Gpe>Uj$jiH;T0$+=Y=A -b%+D -bP9#hMm;|(g*i-zR1>mQ3;Bx}M1K;T}9B0brb2Htsr&aC2D;~gS&Z47Y0c$a -tN%lw^rM3HVnK*5aOZ~P{K*RoOfqS=PQEQtErI^mr|*sEBf`3;kzy6-G+FH{s&w!U^Gj|gd@X;l{c`F -q*&0}afga7uE^_rAKtDx%fcF&oq-gdik`ta^(|@Hi^-&@$-je}ZxWxFnr~xa)cYy6G`n;}$I8M90Hy0 -J42cuHD3;TE49wA;YVdh%HDQ4aR-v8i^y^Fh5PXIdGMQw}Tc4p2Nn6@PKDt3co3CUAYOP7)g>clN&Wu -#I6ZQ`jMaLAWby;6g@qK#g6aOnnYj_v1juxEl%EjxVpN&eD^N>`SSJEV&a97K1x~DLdqcdov2y`5k$e -Y7QDj&eGq4N8RT|&U>!y?&c(G73_ci)59UDxs71?q=((B0>czl(XuXG+-9{l`fEf!!EKSp>18&+h8;XI19tvO-r(V7&{)XhR9Mm07?waf}%B5DOAw(hpG{yfNuh9zQdRIXEdeH|`vsONpTZ41gji!<_ -Nlydpv8upP5mBX%6Jnfbqhm<2Y4huhfVzX|tILQd@)_Ftai2)qfD!s>wm?ekl58K -j_1VK;6U%=!wahTPG%Q-4mvRU71IlT=3EjM>u%qr2^JOhf>D%qkfh1Ap}?*Jqpf&j`#0uwBKfYm1<}lrnp@c{LY4M8lD(EE$o<)jo?TU=h!E)V%G+?6m?G=W3zU2JGi~029`0QY2 -#I`WG`F~pMA8SA&^QRKHXqy+LyQh?{)Ix5|X})pWeTE`{tdK-L*c!?*R97i4#t9of=K!G0xov>+GhLT -0xJpV{6*r3X7y>3rF#0%XAA@nZwU1XkgDuNj04f!hUOYGSasjID$n&ca-^kF8jF!`_k}g0CrqTgJILl ->+84I=WrNLAs~QufOn4eQM|LQfMY#?E^b5XPxAvWwo5ZfoQ(lf(39JBB=m9O3%uqpE)& -iA;4Be27vWaR-bu!txHJ!{t;HoU-_y5e>a=E#%~#LWT$DUc(IO|-XN$tW5#pQpmWEhKFn70F!B%@CnN -@3JHYJ*fCapVfBUa3Qy8rN-d8l68-aJ8V>yb7o8CT%sggt -x4o~TCfWNT5FWUA*~Lt4*ub?(p&^cq}`lKvf;*f3QZ=@Po{jRLZ8{PP7!b!kwixs?9WGvuO}7(*s-Go -8=Dec<2ubP=;pgM|f`4=@AMn=_hA2^+El_k~H{cbc5a?{$A1Z!tq0^3uv^TbMLeL*11Y*+9er)`bBK2SZ=M4?u3-_$LG;@W9-o -4qJAxPkVE6}%u_qTE4|rr*Xu;+P*iNnYy))-jokL -_E<>#kOk1LOtA1C7r(LC=kGAv=D`)+6BERWm7u?l`aRevJBxVZcarjKM5jy1w=aH@VhRVRG2nVSaNQC -)ohKOSVD@$o?fBoL)DqVbP~c)7PWt1pz!-D+83TAe7W{EDhE$zy@j?2@P+p(fW8uD-)G!(RQ;Jo -xa*Q)S2yfc3lX+tL7NbPX@O5j4F#4!HT9nzQTr*?ebLnXr9oHuQDp|X_x}MtB6LPlNBO;hh9ZachS)9m2Y!fHTg19=I-g)>-5)UZy*_y -g#11e(nC2o%NFCruN3-zSHly^kvv&4T)DAYEvR0g_9P5B)m%Bk#ZkBv#&T8)v!gq=!%TaNnmBwC!^Py -mm5=^JNe<-@X_TBwIZv^)H;@Wb1=4di?Plpn;|NU2C%)Ny8rJE~ -SiK$#S29>XbnQuoOn|gWaxXKSuO9KQH000080P~d=N1nacs-_D70C_0@01^NI0B~t=FJfVHWn*t`ZDD -R?E^v9x8f$OcIP!ab1))V?Y2mutI~;HbVC=O?x@&Ce1bMW32ns^BXq#JE^pcbl-=hEhX86#PN?P1LP9 -GA9oEZ-1J*1;3dXp+fPQ`Yc78zOQsZwKtuaf1dX7FE>niot(QFOGDVoNApmAaISQo^@8AvH-CO5~+x) -P5fwx$#`A*SuK!PoeyqI#jP>r+2AT%zrbB-LRC|fTr5*F=hxSl*TBpCr}^cFId -z}!XVFIM&y{pUhi=-wrIHZq=UBdS_0fB{UPpRrddWe06}d$0( -`Tb4iv8G*~a(IH2B3*a!eY~Nu0IWUef;gWm6Vej?Hg|_il~h!^Nhguh ->NsD3!*n%xo@(DY_O|PVbBavXIZELyP{D;we!g`-EnQ)FHYM0LQqF3qH+05FtH?lK+17rQ{(n}tu4F; -mi2~#!xv1Zxo5wEfN{S}okk|x^b>PBq=spvtBs=QfU -wF(hRzIa5<~*)h?4%fJWCSHqVaF6_0=ZJnK^5N)P$FG01VWGvJK|4)7qyokLh3@)S|&_}e0j}B -jv9ynp(B6X~(B-NIt-=O=Cl&V(+{AokM((+3DF+{G+b3-@ -{gTdrsi)ySH+er}kWsc!P$Q2Iu!*!l?zcN#Sr&oJMA8yIp_*`235RBlSB;Q@ -xP&ar=DGQHX2OV3;rE;xYz`@r>MEQoS(xnzCY1AC@rx{du3!Za*=##HQUW2lsS+BWGc@bW%igq{-d#d -U62z7J~g(&M7XLpuNr{vX1Pmej36ZN#!N6a&jXKJ>N*6h!?2#)pK57e8^o2k*6s>r!?QFo;p -x?^Nj8WhG1)&UNoWNYvE5Rr4(#H$jT3noTz9J3Jj_lAF#G(kGq^Np+YyJQG=)^Ku7n-v4J!7m-9TTz`@Yo=B6$Nrrk!m)E7+#ID8u -uFC)~=5tqOmCo#zR^3M*@ne!aDF-OpY -_20|aqzi=ESTbWw&gsAlm)a13QM|8x@W`~l9f+~m?r@02b$T0+-{gMl^b#7rr+!7>uiA2tlYlz{RX>dUh5eTyh1s9_;fY?CH!9oJbKi-3NH3Fn;td4_+&4rZ5fMl+no3|O! -N>pq}eTh#CZBB?2B#=h?Q_#~#yWSx?!`vme9K7ruUZ+=lF=0L=-*3c$$2vw5?Rp2Y0n?ez-@V%5djQ+ -jDdV`D4;et1i!rPUf&n**t=?gx3@d8M^@FZSX5@5j!?3)$DAB;lbkEZy*^Bg9i&^L#pefdSW>6F+D0^ -*9tNx)e{$E$6qR>yaHd3Je1v^?N})S8)I3DmfQc#N)uXZm$_zO?6A-#75BEV$la`y!bV()3F}OsEMf_ -FO`b1z#JHXO{LPC~x0VwS`>MxF223uIT)d&gNHlx1*1EDE4X;BxUMmMWL^P&!_2~|2(_7y`is9Z)cZt -OO%Y-r!p;SVOw$M^k|IxlTH|!tw3uyfnB)+%!oOXMiN|`J{1ylo*&QvRsupxw?)F*a_IggP6Ex32|bg -gbhmv5HjKjchHT~ZNL$^IWNgf{^ZKsH5E(d&rk}+GUK9$Ei~y}z0~lrT?9xJI- -n5WzqdKDmto;6DguE5<~!YHN3T%X#Q@YfCv;F5Ta@c~bnb85fHhmYpjV8>NS)%)6pNjPVjBDo-3xVh5 -P#vl9jWj7lK+bh26xlEK>Q*uM~2J^-jSG9|5R>&VuyuDB?Nq^17*3>&+vM=W73{{EzxjuD3r+JV2;N| -e65SRk5|1qlxCfRy&>m57zOCQtV%&#|QJ`hVPP`u(v@@9NR -Sn&uf}^MRBL-Gr=TU1Tz0#vY-1v3Gfac!CMn-E6gQH3sW0Pk#`=-w%8@4B~G^wvZnGG47r!C&r~6BYl -?f>4_$G;7RW!)!k)R_pXiWaeoEtBgu(H{uf49zT7gXMQjE&2e4vSqE?%i=^!l~cfM_sXQoYC -UcXV_UjoQeinYmop8;;cqWtDC?7>uOZc2 -yZ?iY30BAybs3f=kQ>_;xxT0OI`ac`E3yG$4~XTNVl2G>s;tep#&GpV3B%JL7D#X+vp*A{`(=Hz*cb~ -V{Y5f`N*rYa(VC*Ow0_-TA;MnT^u0gWO`q|~o(F!7r~+OYk_m=~|IvM22V}0N@Eosa!#LPmyThORk-~ -5O*CY7vb2p)T$|x}O=TEA?$*sccz?( -cv!Sqf-)yg{nzrzjXU6BT`*jL7j2oH>F*5sZm}pZ5CPddo?t+zwx`eWe(NcK`ya#h@6oTgP7kRpSwEj -o9CFG;v+k=#FAyU@1BJFHlPZ1QY-O00;o{l@>?ZFvLBk3;+P(C;$Kv0001RX>c!MVRL10VRCb2axQRr -omy>g+_(|`?q5Ny5lBkc>LrJMG3rCpyxbWmF2SMc7snO25_gxiBnl+8>%F4?y)%4~NJ(ouX9Ui!G#t( -h=jEB9SF6?EsbWNQnv0fnR4OKkV!H2EtJTF;iiQ-$w%5I6ML~Ge38@L)C{g#C754kZg?p|}%6|lghS~ -6acq4~rnmy{Hq@CTS;!5|L*DA-~ek-M=78@bz3rp4UE-wzOt%S@Ke+>tGn(b(LD(sqK%WJlF42liduB8n;kbT>t1btgESsb|3J*`=LSQ{3KgRuez>LMGrH -A)Yr?YfFfwI(~J3(aK1TUr;2|IRKhE(&1CrD%&zvMqlsBqKLq&%6{(2V7IR`uCUHFU4w&4{tMAQPxx` -@|nhR`Qs>$8yCkkGaw4bv2MQu)Qe<{FnZj`*4o$W=AN<*C}c)UzhFXm|K2TN9S=u1T6) -ZBewVE2|vnJK^UPy7pT-vpZ?vVA+Azy^)tHPfcEV@&)lgK@iWWDdeI}kPN)(?tavddqd=fQ3%gLjTZH -*a!3`B-qJZO_+hrh4Q=v5W&`Pz7vwY~QW^P)yjkGGTS%!oedGNhThdF@2c`-%Cqzxm#2f#{)A|QCzu* -&ycMZAv2uUnEtH|tp{E9#z7b;1T|3`4A)-3Awj8<^|&imcBKxoj)JtQ|bB>8M)R7tGWu+wyJzw}Qex& -GEBv)y||cg*c=KA#D#kFA0VP4u3@Z?1@F>l6H9q-DpN!~YwmkBqgJiHR(rC0i&p+6xh?G%#uf3G!>cx -Ot;McanT-zasN%@=Ad!V0n{+Tw+BbRO%}}oFP6+Pb~T{$`P--BuX@ -lRH7WR7bBm>K*wOfu>S+0gHkWqu>BiPg*65BcxP| -qlCs;o3aiP0R{cg@Ld8HsMy+5bsd}5bd3iBmEGC%M!Crq830hkj$wWjrOtAXau56ATIF8`(_C$-`o2_VB -5OR#m+BGKe2c9MY=16Jf?%AaG#HsA3+?!HaoppZ=|rq67NVU>(N|y{G{1GnR>M@H0boJ^lt7w?<(!mv -!&lSJ-fH_}obsT1A=|4^=>(ch_SmV^ncuGS_pOaTK_VMi9qCW^>(va`c^9q^5Isnniv*_Bif&xgSEBL -nMzOeIn(al@BhO4IA6f_tMM^h-vFh5p+#Dc9BpY0eW(}fpB>J|t*z*jRn`X153oTFM;>W5OH1bYLMF1yatXLJ9SO(vaNro -ZgF^F;J4)FvZnS42PXgxBfo9aw`XE>cTtj0ufIed{a7qC|v|-k#DibxbLg&Kig?Amx%%X404m}*1G4w -F3=8{*CNRc~QTskt09}P}MWfd?A51eeN+K0#^Pzbv!2rlcNctB}_^P=~kfBkg(bMfi+A0Lz1!NOTZ91 -M$!9a?}Ni%=nKWiK(EqRntnMvlw^N7|muMC|IwD;9^*m@b?vp>0^m1t`R+3$eF5&j9Pk9%%FY{|G{nvukH$`lqbG5VzySwi#PqZa>^jMX -}R$eBN_!F=c$*nC-T+~Ord@A+>3LaCi8kli!#&femWKR^Q=7b)<^ja+l|A+InzNLL; -2R@wUOy6FsfkuaM*jeOViPyqVIf$^-YV2;qTZ#t71urZIo{kg&Obg%+|=1|OX!4u|DCwOh<%yZ42R6U -!<)g+Flk~|koGx`}2up{*$jhjlnh&9*bft}V+lj~qpEl-Py%#E8YH#@8vR*xOiW63%_Ej<51>W@+a=A -jB{;tjyjp%q=dgZ|6Vh_dVf{#T^x&8#tU0i36-p!)GSS2Ze!K(K`JO|j9z`x-!=VF5Q6Fe&DJl|>j6 -vki#26DB#=LOd8=xVH%lqC_uC!*622Ni77||L^|-wr}!Cvk0;(Xv#1SLD)3e)nY?ysF4HmnE0*(F7^x --Ldq<|rl{t>vjV)ybyorKa2uxX|13KbTbJZ*ehzAWN7;)deo{bx`Gn*6G|NI!-hl%*J+jByepj8%7D>_pj#dxSre*hSbnx@Q4!gsCdp(yGnD25RXs@h`!i!!{b -pdE*-`*pt#A=6;4*=~*TRjXUAn8Iq!ViFB@e41}rzXrwH`UCi=5YFfX!9w?912hOXXwf7qp!PAm -xv}52h)(fqDf(6~Oe+TUxwq9OImZxwyBXEIq+5zR+q*=?CoVggalZp<2TSf>B2@{ -;u%YF{f?PvX;26T++~DQNTtIk<*LdTtigP@7w|7=0UjjvYz%h$0f^OZU5c;1>^2wA7`oIdS$BYEKu7J -7IurQCoJ`2*=PHkb0djYG0j2>tm5)X$FDqwT@LQ@!@%@S(&`RJKLM9o-WYEJO91g~ -yDzvMg=eT0Jr)pro0FuJLP>9N}p`EJX#|d8i2!+fCn$`~yf9_bz%)PsHKrCl7xa5$6ZF7kE+nGSEsap -iIlSRA$W|;qlPOcc0<=)iyxd)s$t1FT&E$cVwYGotX-(82<#M{G#tj*0!7WwRkNoI5@NCS!4&N$sHbH -w~~i-RWK;)F?a>JB~v`SHNC6H4(7w)(TSBO{gY_ae}fLKYD6A)h$SfK59o0Jy7(GE+46xvtiDR#(_$J -pgR~3)!$eJ#fJN`I3u0122aqg9ThVU%mqI-@s|R698ZntG$e|rN=-1FL3aP!1Wx;o4Jff$v1-xW-NEM -n1j){vL^&7$gNpNfBv@MW#3=^&()}fo_MIHZq50tA$JOs12DH)*ao{))TrHb(rx->|F;m(^(tM#ib-K -Jt?=75S>bgpHq6NA;{Q-f0|XQR000O8^OY7yRWz-g0}ucJZ8-n{5dZ)HaA|NaV{K$_aCB*JZgVbhdCe -RBZyUGucl{N_1;a^&bm=w}!;E^EYr9FXG%;eQE0zWa>O@JLPj}bjogHo1|GxJ@-jOF+a^e+0SC73RTOz!`IyF3}`MIRTsGbl-M)tvdtGo+>9z|ka|X(h?^3K5*e)2rcp%$;Cb# -52Va(Do|pGPH3(v%j9wMVXcU1Mmvy-jX}WBiwpM8>^rkB7M##A-^R`hbe;+a2vMsWvEOX<)fPN5H&a< -!~@#7}n5&y2#A%c -7~vd@7ckCe4~WU4w*jm2Q9!nWySgmbVMlPZwo6*M+RNQ$pnpw??J+Yo+o@zjcJp#7-d|t7OV7{FUtXpcuij0Csk5}I!MZ+;MkBB?v5~hbWeuccmg5!6fh1H7tJ -*_W9p=l@n&Ljbf`h}lel=GzU}eM355=&WJuiwn6?G1*CMH6M#xwKcS!cct}3ucs>-4Jh$R7N9JtyF6TR(WUj<&?*IwK$BGtX>LmY3Bn;r{t -cNj4cS5bU;h8tkh0)fctD^Y=I`0uxzce+mzx*o~QFx=Zlnshoft1VeHq_H)WxEE4a``&LLJ2a)Z=Ys- -77TM3q!q2qT_9L)a5A1OAJPPe3hl<0el8#y-{>YqyUnrD&@K#tVO4Koqa`7SQa}3DdMym20p);8?bKg -CGOdnk29$y$m5wU*! -5vM;l^wBXPi|u$L!H1ccDWjcCo@Pzfa640SATAmv_+i`)JqG}mLI;6ERt#<|iKlqbWVgAxQ~Bwi(B_}@|3=R`i+L7|kJc)$Qjmx}B$yMnO^(9xYz?^M*$g -4$snxk@PGfJt9jo3Demsq@*KnZW$0P=lG(-k4?nSyO7wXWa5in?BBX7$nKoA9cN2V#^aBS*UbxX(tPQ -RDAQ65pfwxV}!K}Wo%xbCnE#10;{D#{wQsERvXm&FE7ZE+`SjZuJ;nHHTl>hXb@EcL3b>0nBDVlo{8> -$Uo&)j%I$!ov?x9^(I*K+4J@-=bxMt~JO@iheOA^qOigW~l3!|jN~sZY8gUjfCa<}eYzFcAb9kl>Geo&dqHjT0bJk(a -9@ehLs6mg&Q6sdMGN!FkA&p8xjWH*hY1FP%n}Y}S!SM|1@Ps1zxjC2_Kjo(Su~tC%jxAK|3SbdyrdGl -%`@pS5nlX)*31Pj-nzp}^5>REF8u`4h6_KxVuokndi7A*}Bx3@`ic9oPLN68o$Q>-Q)k}@kbvuGyTCE8(a_d6P=^% -(7--_Va<}KnPa(!XDHviba8AZ_qxf}Q!&;P%r+rI8Q)KIg@5N0NavxnM28<`sy^oK2ol(UH}H_c2UjL -xOhD>`DBPXQIo)|RN}QjGd5d>CL}dnrX91PdBWNYaJtX%Sj!=%(<74T)zJ4tjvp~#xsWTuRl0ji0sep -;7rgnfab5&w$l8~6HSM47` -orTdp(d1-oYhCZ>n730zX23Cn2AL6?iILZJRaN>J^xoTq*I2F7tL`HOFY{{7o&>j*uhnPhJfReC~GqI -zVXlIb6@)K?mLE&CK#8Zh|};WV*84(x!@UTnuTDiv$n|40$R^_~<|xQ1-Mq9L-(kwHO3sxAsdjulN$0s`({NBJy!SfcW -e7)1C!HVVjhb_tfEvbOg5={>(Kj9jY6`h8nKl><2j+EG91Hh3T!_=|ow@qoR-Pkrr;YbPwcOtqBrBa7 -VjMsmnTSfr1&kb&@q7BZNAqJ@lhN&jQ=4PKf+bz;(mLS?8T+wuW=ga^B9)-U5DIbh`>++Q35FAGvfL$ -CFO8#4`1b-x3jxrrC+@Rb{qE)8|((G(-&6r*3VlVW(-o}6RgK|f3~;&ZowyHzld6S_KJrO}c-8Yo#vy -l0yD24kdsTJx_x>(%3%~6pk7Kwx3 -Ei2pw(36FM`Qh_DdFi;52;E3x3jk(+Zew~tf|@=7fzbOf_hW=Fd%#Jwz&qozBKT;+;_Y%%i`V6-Qv7& -+EvO=ybdk~2*^z1lAXr?cZ0k(r* -32mS4$;?@=+rLbxlZhrxLp%aA}%gLIOk_Kmlw$VQr>}0^ZPn*#?ScVIWF9!E7hc71Hc$k*B0-MIcoK- -A1@T-zaj*-tv`wDqZl+igs2h}Ww*2KgX-H07>IyVIA^AURu3AH=mHT1bJ}gf^U2=5aLK{Ot3IUK-P{I -A--y+Z;Z1`b9rEE#{oXk7NZZGsI!u^B1nnhrJBc(5BKo^Pl}35pm~bMb7>#1pjlu` -f`%uY2l~ZjXm6ls%P5TOiT>B`#JU6oLpHeC3j0&~AD}6=7HA;QcN@G!T4HmUaw;u=YZRp0i}VYPsy@r -hzV~+6dWoB|8oI&zTgSfYULC>0IBcoqp2OpQC=rWVMFqdiuOI^>eCCpZnM#Z2cTf67e38bs>F-&~I3# -A4YVLJ}M7r$N)XtY|EC;X1<+~4y*lXM}Vq-guxnd$}*~zd+&2UouFB=)Uea|h@OLn+(6ACnkQ=6)~=p -d4yig&G38fk>B6lu1FL%C7$a@2bZ=*fr4#m9I48B?R`4gQh|PHRd_q$pJ1>>1eolDm*0^Spzjp3Wn@yKrX*82 -^TKPL|$3F_Y+?i3_j(x7W?s$Xt(PelNEsZHxct>ad#s#c`Gw%xFPi*FL64wYKhiEAji$`FCJJJ32Ta| -Hi8OY0H0^I{F#QiHKj=pJ2TWJf?G?6Y(KPN7Ft#4I0P$;oYw6e$IBE1_P#(82+O++x}}_u7WSa*3f>^ -wPE%n)VAo;MGb@ffNiDQ$<47}tsi`#>#GL{8mT<&-h-l7FsR!9*0<*PHHA&K0^VrUBlRKYV~~%d|G9p -d2h<*Rs60aXT}O$}dC+Py(8a@6aWAK2mt -ey7DocJ&cxFq006*z000jF003}la4%$UcW!KNVPr0FdF?&@bK5qSzx%JiD&ry5%8b)?Z)V-`?xktE^< -A1|;`C$3^)a*vNvtVSOOUqJH21gP`v5=yq-3W%H#@U;noc8;z{A7C!}|ujXzH~{(?!>IjZ9NftT%Pji -tI|&W!K7-e;*v^=ksM@zRGo0lu6eXr819JnOc>_mHD}p?Iu(9?JugX%=fZhE{keuey)qPY_}U}+t&8m -rp($!-K@>;Mw)MGg@fB)Tid0T>&>Dl<-tMQY)=jZd`u%%3h_u(_1`mk{O!~8^zDmtaVp+6ojj0tbGd2 -788v?1G<9vv1FSc%DB0>Fx8E=Vz~8o=<}bBnS}L1lYsOWxkSgJ$QXv$tLWf+0-;Is$5oW3Qxm^U18dM4S>oz -%U?J3vH{G#%3zA&!}Cp1dBc_UJoDD=wgDQaup|=xS!d0)Y=|Izmz%k53||L46|fLc2$*chdFFMJ<=Li -{jfMGDrsPw81}yXT?Q8vGABe79neI>FJA&Z8@U58RqdmQS27Dvc2FNk8S8NB>Hr*V>mhJQm1_Xwel`7 -ieMt)t)+dch}$+BhNn|Ijf!yfYt`J}GerY`%T;Mp^Nwv#e$NB&_4`v%sMU<`W!FI?kNo2D<|H*MWLa> -KN}TbIpdp3chx81>-bAWdyyEcIdzo2JvnpW8w)Y}xA<#Hi9 -1=|VMzG~wsi}=Z8LjS&zz)_XR1aKGb{6=no!Jr}jXjhWD3hJ789rLWsVC?r6=}Ez&S2mLq@qU5`z?TU -u-()5xH?Y-Uzrzz+&s6_T(+~Z$C!1}%;x<|dCj7*-j;Bsz;DA!D0WT6HIHo5%4FVx3zncqDWAfpEHRy -t-coB|sdBKn`#p$Vtp1mfh(TRn!tCJxB^xHi>f+EX@jSV_$>kJH?K-dGw&DK)4s1`K{fKq~>DCLbTsp -F!kveM~^pFuZ3a}?ag$>*20CkQb4JK=m3!6wNh`K2zZ*cVj;jdPit*`P- -+?|NKizk=9q4R68iS=Y1Spi>*d~!MK5v5^M8mqYKcmq2-csjLTL9@;OF>C;Wi;R!P)f}m{YjB_(Ht}} -`Q;6WsiTwD*?ZOR$PPB~thC1=r`xhwBn%kn9Ohs1ZJ>u(3<9%^_8Hy}tkY0MfIu}0$;(H8MFEe{&$nc -D({xFG>Ehwa{E8BR&O#uA+57VC2haiT)wMhF2=(>kLfCV!g0cN)t)-EMPl;b+$n}fx-5K!q>dNJ_xNc>f{WXe>s1zS_#2B|x6GOH~(^;a^ -_0p7fk=<5{V@7kWa{iz-^;onI^4q-g`cOdYS>BZ5LOLwqyJs2P%>IHo@UTs_3H!coiL+fdbOcRYjoG9 -aTaq{F+d@5o_Z8nAP`o(7_mmU$mN533KQ@|end;zHp955+X*^MM++O7(vXKx{(9f&Lp>#mm#HM_TrXn --0_MEtU@pfUb`>LK#{u5Ge;>tSG*0hG8Q5$r~TQw2aY;;z6nC<(w8$MHqyK7@fnsWX1;EwF>FI|$Il0 -P+WdHAmE}wM?x^?CR!TYoBBnJR}N~c!;oriD51Pi{o73Miu0MA}jHVnOKS22c7|J&nJ!DDNQC0edzZT -_mH<@Pumt`9QX*Uy1qs(Ucv0ZU;Ex}D@ -|c;p*VdVV2BbU195SC5BJ-*r=pMl71gE#S^B*Jbg01U5Qiezkv+b4E9+=$qW_I2ug&fh6A#~hckaXy2 -@fv_0}c(_IMT<-f?#)hv$%hgqcvZt4hGO63qn#`DKvw+DVFHHVS`G}(E>)?L0#6jqV5`;qQ}XO?rCJF -p(vU|B@<`!!9wdn{fA9~W%fu^u)Mahh99NH(7OJHnOqr{c5YWB)aqZ4TrfuuadH4}wDLw^jr-H -fZ)E>J-hZbBc&!Vg#Oqf_;G07sp==o4`(nSI~V=_-0+_#iAgM;N-isM*>cUj0t5JE?wj5%#b&h>y}*r -50sWBDdxEVoK1NpOAJ)d<9@!t#Ozu(erE}ZB#zC--7t?Q$eA5us6|Zzy{)WRe&`J_ND>|Msvy=S-~60_DKt}6#SsPXh70}@D%H8OW -@E*xk7UalUN0sJh1AR`$6-k4>0d?IX^)eJ!=1{ZUchGn-d$G)5O9EdwYr(Gh;Xz;Hi$xg^W#{eh$b!z -?f)2qOM_L*w+p$APr{Ma&fiot)zL^G^o+#ot$^%7h@n?oGnBFgsPm;7Lk=HT7K6M{xJC{v?8QVtgtqOxCZd;z(;eE&;@Pc0=w3-6g(g9sh}Ue9jlgmiN;d04DN1 -r8K$lyTPBmCl=2DfzaQ~0TjK4We6S;45>M4;`Z -PICwzwY-FAxomiIkbP3>@O$?36 -&lTz#_-Rf-%O#uYTvFhLs(|H-MF7e4xy=-gD=Xd%UMtoxX3^EZ=%TCtU-aFJ&NUqWlIyOg_Ww&CEWNf -U(IN*uDxKow8a;Blx -=5oJ&&4v8{^H4-9hJ;hQCE{?qu~$Q;E=SWkg+tF_3)O4z{~TZ|cuT1Xih}Eeg3m9-8iCCT3{R0!g|uYwTu)tsTHZ@#$|&f_kc9%|bixsrcjZ=PXHBN7ZW#w1b`N4hk=T7i5!_0W6StJsJR56~ImaDFb;8I2G -hV5eQYoB1EuU%UWc}b|~BeXbrD%>(fTZN)~l9mnAqzrx$?O<&a1@4y)D~vc$RuKMR)!D>>m`_#)d|^a ->Uk2<+U(i^YIEb(1q2ZyNNHQQ586vM~i#urY3md9Zvq3Jj7iGSq0N$H`}ZbSe#k6oN@(q?rFmwOFxv4 -{!+u3kaa-LbmWS*KuT(VE4Rsz>(IulJl(N6bb8`o2)D_`r{=ZkQ$(5jQHuHJK%Vn8R;FX?AdbxzR->Z -Ds_|ns0&qBzH8}#Ln4Eg2mhzSbd0<)!h)E%?*)(+#hthCphD?g7_TSEsf$4=vNWi39QvOG=+qCO%-K) -?vSF2PibaiXy50S(v%6I9%zlTu4IGPN5TP4j>}uN)$R4x20{LgOwA<16c8VUJoAt&Rxj5^?6AmO$D_l -{mjReq(ly$q2(|%_n4;3vZh~OvIGM+qsEWUs90$gI{K)aQ=#}p-~v6aGRsLo7oI=aC{Z>~`iz!qCpHS -HfPQYUHP0)ye4Wv>PV8#7b(6OMEZNq~4_(4$4B&L -X1iP)6&&kW=#yw!1aRP9|=V1^ca&axUlt2W^by -x;@A|gFr)Q8;kGSc}F5D%#WLB5tC4uA!)+&iZ1kVcnUIbmmNi|Gw~o-CWX+r&?%39ub*N>}^DrY%+Am -NFux*ss{Ye8Eru+O6)3koeIw@FkgGg99)_^%cEg`XEIV$M+AhdSn5X7MQ{cR~4Sj`ba;nYZ(my9g4U| -koeUvf(&OIlnQ5LyhAUYfs9TfN@+g19BYUFz!uq**<8la&p%^D{Nu>am)JGLB%cDGZXTA_-Mp`+lRPcT2cMIt6Mpa2ZMCh8RoYWEqH0LD6t-P6A#G2sYqUjOa$otbHqN9B5-1e1bZ)8Qm`cX -o>!ypRut)F}gp^FXs=;lnh-@l-5;@3P#~YwJUEuf{X7588#%Gm2(WVgfKQ0;}JUCjxUChnNnJ0enwp{ -$}#>Ec1DS2M4|6qHG~deZ2u#aTEPlj1uEFQog?-{3&iVXmU0^7}+af_s5^a7unITm(!nrv)xz?@gbU+ -a=2E#7Y!^t5<4aHS8hy(>0Q3b -*PLLc#3jAUY@+{yvmQvo#RYGU&sFN}WXq=(}WEVe43L5T4;wjQzPf}G5?@q62rj+EfSKdaaei7I}J)c -beR(BM|qpCKV2t!BX5S{GW>SxfrNV~&kiltM1F+*y~O=g723?HN;#a>LrzTYFa_!3s?U?G= -9Lj}$f4V2uMmH**1;({|hi~7ZzR$eS3;Jb3gCV+E`wav$>I8j2mZ5_d^fn;?#%8elhDTNh+nkOi54OG -DgZ@#w82>jD#^ltq!nYVaK`sS50L?`3fb!INP93LV>x98u6V^z$Js@~Q^n%QYFiDgj`lsUt(TR}iI_X -7`8CJ^~U-kI2a0g9BlrB-q>C&&gK56KptD9fdbs6uOnG+*9V-oQH`x&_bKfBmuUAQOOJO(q5+6mxkZ@`j;e1LBiNuuHiJ?QJ2hztkyuQkEM2-d@QYql6nL{=n$B_xt3LPJotX%TMhxlE -N_H0gXT4FCdyS8ThLsoWDClakkJRL01Xu-_n`$`Av0`?5%KN;{Juf-UZ`@&DwKcvh4O`n^9RKOx1|AaE5<$bE`F{nyuJ`P>ZbS8p)Z5dRUNf`88+~&@T2wg(nZbew9o -Jx#Zdb@jgEP$xBnuuzD4$yv|@rNz9HTr{|Q@NG5R6R8YS?!NyIfw0fuKURHtOs-4pzD4P# -E&*ny?IiyD=n#R6Q&5ZaqJe1UPPMIN8BX3+`YU0Q*QU{vtXcO#)U%vxhXOS_Rm^y+jyxbBq2;zm&}>| -w4o*>^mx8lUKi7pH$MC?uViTDyDE-@w4XaH`B7^oeY1HYS9q~wP%5gv_?8 -RQhfGh5V8{39@-DaVoM_R}&H9@}s$%U7%K1gH?7)>8DlP7R -B+fDF#(fl{52P&SP8~AekV3{(wgZf?)GACei4(5~uaxM_TS!^yp5zGOaIY3sjgae2yB*NwAD_wY!Aso -CTW9Ha&0-G-OfB198D;XrDV&Jquf=933|{yL&Xe-mdZPB2A=Yo;=p%7`GYFyAX4fX$LR5;Br2*9)-@6 -BdNhRow3*#;`5L)i^EAlH>0x4RHpffY$*_+_y!Dl9nwwE -*0_b|jp_JBD(S-pMGKG4VPQNZ%H+%vorMrq9!sZ9Z*Djb8U`T#sQP}y=#;cGpZ -X9}EXoym10_{w6B!j`R_ku%7FRWoY7;(@ji+tplMhHR|8*ojWXI@i9%F8JxL>W!V$9=SAah{`&k8i06A#TF4D+jqme3@#DIG30;5Zws^3^cVArXUQc&kZ?+u5=+pg!JU*Y9bK@G=%{ -AyPY}40?f>SKJhe=a0gW2ht#(XPcJb>rb*y;+j)9^CIAlmcRm>Y-sER;$_TuiZi2xb%CP79n>d^M%(8 -AT)x{bh8nb{s(ndPW82j&AXPSCOCm?vXqd&@9X?67_md%x)#G+ikSh^Nzm8f^^;-(d<5S{rwK)ZX}+; -A8EM{KBlP?0a>DWd;j$dO+!m1q{xbL6ChO}QzsJ!L4@b -8)7Mr8U<}c5%pvlY?kCo7QRdoC5fG(98_pT7z+NQar!+(wZ3&GNF)BbI$b9`=a&LwM4s@;9H)ONeYLF -5}A^^u|-kouu0%%p+uXgtt7`%Y$Cc=mS+YszcQ^ ->sQKsm}&nbw$amY#2Rp4kS|`Any$X4Nk*Qbku0exo$2-=7A*5i7zx}2VYk6LK~UR#h$S<$-R2h%wrE@ -eyOQS>cN{RGUOPuk!?Wt$K1yuuA=WTc46(oT00;24gy-Gt0+6$GZ0%KbaiskiPh`TguyT<1#xcXtIFeLi8%IyWMobr$T+0 -t$oNED`?oH7+!89bt$32pW29aJrfX3gcScq%~+%xcHyF!M7>lCcDzO9U?~=vv@Dq+sL!9;HMZpBR?Px -Bn$|lCN3ZUY49X(elxX>;I1G2o-^2&is?~hT~r1-J-meJef79-T^`S3{{_d!z=9v%tnZJw&Odb?>p1^ -UBdJ^t8QwfJuMww?yjt@6FFY -W1k5Bna+gi1y69aXiBA^hCaJy715)?q{XLrfBw-CJ~%@C+i%oMH~7YS{7qNUr8s5*G|%vDemVlDEkWu -`T-pC=3HOTK;ICZ7JxU;BZu3(|a!{ODwK?7o=BCxHuxBjDGVCQqKhfRcDR_*hLOt#TT{0ccoJ~-gJAp -jZb-6TcdgMsBf$$F+_)=8+<~U)td)-6qKha-3c#8*Okr!j{uOKA$c`sC7v*imiU9$1Yj}Sp7wN;r#&jUKQLrw^R%YBKmvP-be10 -Y0-&@=t4GFpy-3|I`k1(k3I=#Lwy#FZmssFKM2R|{%Dj=^}qIBz~MD>29vRKCvH1JQ_~-?*53k9d|aT -vBiI0sol$NFbyD^&2|Q7{`<}kNRh0OdV1IqO{ZQ%j;ZmnmN6V#PjKremTmi@lt36RoB9`xiKP*}pqCi -K^O*7`}U8fEmhuvCLXWD@yH}HpN=k&`V8`=x*2s5l7k39l~`7_l2VI(+g(jb{FT!Ss0M^x8$I_&|>O6^;UIk_^?VgTurC^b;lpN -8Xi1&c!bn$F_Q-6O+~k;BhT3wdPk9X8wb;n3@7Q@T|ZNAPFOvP-0NmN9Wrt>(4$cg*QcE=hkH6lIqH< -46m)5ByY*}023ImO5PeFU!*~RVQq6t!kgX4J>%>Mb>d3@R))W$kh0TAPZIyQ3>Bh%FX;nnu1U34<)l0 -z+k*a4yTxC8Oc?8n5dk?%LK}WG=#2c#k2vf*lpch`_jPJvhOE>oWnn`V-|DrA&Tp_{lktO9k4L5r^`o@_5S(I`?5pU6xBCsdoCIs|7qk+QFp5J3NEw)fqBmB27}v_%(Jt -h%$a#(tdK?B(O<{Vr>+#Ay(UM`ron8O%Aheuci(6GxazbZ^~y=UK?Y{Vsuhu>3?ro^{}Re!4k~^_q{! -4*T?$tMd1JfmHZKhocI|;jfl%0QheC&CDKdo;mje#`zpim6TP-PbQJOspY0S^S+3K;!& -_?zL?dliJY+ReT;@^EtDiBSVU2cQ{;*?_%*Q=J89W<~={Ei!P)h>@6aWAK2mtey7Dw4?P5ssZ008L(0 -00pH003}la4%(eV`Xr3X>V?GE^v9JludKfFc60C{uMjEv>cKjz>UxrIKX5&0~|9OYaQ<(OJ-LJOA(_D&%x83>*Dc<6i#Fktfy4^-E6)r#+7w`*gFLc1MsKX?g%d-XO3+D-3 -ORW%k>Vavn4h?m>n^jEJdNKayIPzeSefR=CBU{QW>8qiwI=M!RKoeA&Ak)S;Tz(iqp04~HO^t0pt!AA -ES_>MIQ?_)myk1W)a3#I+z`B)#=(i -TN&D(}Tf9G0qc5csBvqG|G?x$+BVg*JJBWk>5Wiw$Y`LP_A=8!Lq7G@FxoqRXXw=m>hR0phR ->WU|OI>F#rJPx&QzS0001RX>c!TZe(S6E^v9pegAvgHj?-6{wrAdvXUB!iM`vqJ>R;$Y?@sCylI*zPT -PB*tWQTvkj0Hesw5Rh`|WRk=Q9I<00_#?Cht@3T`H5n02mAg^9_T+VDP%!HF=@xq*CjwQH!K0lUMs!7 -n39}7V3kl2ZO=UvMM*pY_{AryGqSwNxs>ZRg+}bb-CU(Y9@al9qIS$^5!NlZp@$an_M8w%k^5#o4hP) -1ER<_YSHYrYh_C3jjEcmT-WABy|+J0`>V3$H~B_2`>nE{wq>1v*k;YjytvJ(g1S>5NiVkfHl4j!#iFc -IDw%G|_o_~J)q0&@n{I8hs#Zx>C-Qp6f8W1)rGD9|x^V#LH%=Gk<%T+GYUJB&v8YsCw*_ck))r5rqlB -J|VmV3X*?grIvu#yw2~+z?Qk2yuTjzgKGhlO))Y~;7@k8T&0X`-SLw%7qK_BFdm8ZK=ao|H=lNPOMi|(SMZMbsxRS4v -BWHw*^0ru)*}}B{-IL4Nn-_!`n!Z_63i=ZKi@)e)TXj<|R69>tI_#v9gCx$Eu-uB%Mkz`%&s<{IA{6m+xx7qw%hN( -;63${CpgMZBQ*De6lTx5PPFJC;XsWHVDCvS((L9flzvS_MuJ)9)N<))d(nSlCsKaWOXvSRO*Z{)NIclJ --W`DbiIFc@=LY9{69~}N0-l@{`mUY?1$GE|8?>55*=hhI!Fg@Zallo~=-~HLeU2x0t-)7)NQ>2Q=*m^{BAU3PBEK -}sn~p-)peqm5U=j1gzS7lo585O{xk9G@!1i#v`|ah1o9$pX0uVP*2Iel6DToBG!aY^3=cr4QlcLeO?6 -4?j{fC;HY9fL6V*unckGuojqu>)r(a<9PVMRA$ZdM!wKVY|jol$u#Od@9oncgpcE2JS{2`93zdrt=`u -imL>xum5l>RgRdXO%eq(>G?h>(N5n%HVy|5jPO>g^vsjw}+qdh2%L%4VgiZe^**TT?~Tk3ux1+2(qYC -B!Gnv!qV`kd!`D^;w{v2Vm7Np9Ac92=?Z)^!Dox*w2F6uLG#XXX)%0L1#^A2k;~zA!=1FoCfkGi4U}2 -*Ez_&m|N&k@^>may`xS0VnedshPHgQI0`#2ZMMX!J7Wk}vnG$lw=4;8NH%@5%IjoF->@BV!8(%SDRukt7Np -&Rq6IxWQKX&0X)vkv0fqkn!$0ozPpM-~cMslHoP&ePpSbBj_1K@GGx-do}M&9iCr9(u7wx@(|!e!_iXPZCdzNQ7c&%jeB8O@6FJ%h46QeiHd%Nr{re@&b!UmJX6f$#q_2)xLd0@>~H}^={oj -{0+hJ#0s^vRADH?{LYsKJD^zfGgwbqP9oPEQgc{r8g-C6@K?#0)FJ{$queH+237&CnR`EJL%#CLDryt?!omua0DP -1$I_<`In)ofl=)`-m3s33E2`WC!pT|Aiu9fmUz}z+23hv;`=xMT5z2h&BjU#9u82_3EanG((zRrmbQl@-A&Vt;tE#{QE3lW7d516pBUwl)7`nlFz-mzblw7e)Z0KOR>{^A?8~ -xKMPSa>5=fKrbcS)rCLX_^a$5^-)&8cl}XFz1xrCIebT2G7^0toO(MC}64$L75*}G*fRgY|SwmU4B5G -};(7#-O7d*uaUT(b0ym@g+lLp)`CYYom`T5D~mzXJ<|Lr;>sgfF|Inqjm1B;N86UwM50@4Z$S|ii8$+ -OOiGxCD9pr`W{F@sUCw@$(>IkKs<5e6jT+P`7s<{$lHgVamwIT59T@~w?wJz@h}qf*V7x&GQZhj4Y5FF%p{uKX+bw4)mlJ=w?~(kFTl8N6;Zwj{PjB7l#AUO!g}(GHV+ZQf$RgY?Al7>g}MmB -b4{|xyH+F27K;v@YV9zbn`8Rl^Nauf{@EGznz~o7%H4VadL!BNW?f!0GlXpu5=2Mqy$6LvFxq& -C*fqu=v)9mefDNtK2uka%nu9w4!^(rvS$FTV^-je)i+y&2#i6^?RMY~^B?%QXHqwsrRHY)czwii)wW0 -%S-KQ$EzcD>UG^B4^hVp`YtifXcTV=I~gT~3hY#L-noZ&h~QiDo-A1sz6;u%XcS4#(7?KkEs@k{yi5| -wpR>@`|=uC>hbpR^4$`CM!%t)-zZD|lJ-0vXv~6WTeqG_)BhSfZ)>TDSduDV{vD!t#RXg-y-%AQ{2^K -nhYlW-JZBR!ADaZ!zsyC>haHUV*kinsqW_2oqEoN1NsEzAmH{0$4j{NS|Oekx{0Sz|L{W^W1@@Q}-sG)y74HTcwhU23ULw+l8PqkpWBMK -|THxS)n_~XJ)aYXr*jAySqMBN30iM*!O5~B{MY`d)DMVzJ$SlSBKE#39j!W7b;zQG()RnYGp-7!x~*` -~=qmn0B~HxnSo@m5LxSRS4q^Bg2r3#!E%1 -^F}id7+te6b%?4vXzAPJcmarPjf?%BsXqo`ExyBF3L?lt>^Oo(u2#rxmBF>Mz25PpLx3YqDf7b{i7Wt -B}&NfVFQzC=~AXxTfjAbO`S}fhNbi=YgHBUl=(@T=G9NU6RP6i>xZUb+oB5~dG^?TBgrA@~JdY)Xoyn -OTI#fxX(&VG9K8nGMxBB5=MAfMQGydt}hXmQSX+WgwbtdffTITl>ui(nk@a4vH_inOuRwL1GJDEii=5 -VaUZScLQ=4CRPx4uc1^k>ay9fI|0CBnJ9y!Y9(?qEFf%&_G1WmgSWWk_Wo8%NQ2$j3ZMp9o_b=fw40? -#N>c>roSi@hh)YfvvZJc36tu%?my;t`lHb`pb_MAC^Pm;5BvLLC6+Z}chm^25W{FjEHCrAA18YKk$7J -;vbtcFYUuwxMZ$6sW)%2Ai@R2|a26R`{*~DA7v&scl=ig!FAKw#Z~w0+>ns$tLOX(3_m_rQv!%b32sa -cXF+C?nw=0OFU>Jyxh>q9zS%oCM`G_FRm*}Z;=h{Kr*=_ui6_n9hoxiCZ9m<_FUU*#JHOm=Ik@e_k?8 -R~Nt)h))1J?yiZ$JvAgT2alVw+V}?rv77;J{jC)nZ;Q)S@R2Xac&sRix`>HJj&1EzdC`QmM8$?+M -K0Vi4V%+7aN0#2Su~{^TE_xWVx{gC${B)&Acc#@$fp=K7otIQ_@MXk -k1E)q_?36FuH`Tsd^f>uhC9pH1w~JCRwNRLaWC8r}&P|NGQr7q>-kAs}TBcl4T)CveLd`3!t>!fSkal -Vzo)T^(6Ihw%+nN3u-!Js=Pp+b036cErL{I>P*}|?j -T#z38G$9%Cb*Yjo^l7}5mYlubh -na7C(x)!$k|)7tn69DpePnO%Pbymweo*;t9eSg&7r$%%7ZJ9&zv&yC2ys^q0kMXT*GG=Ql%j< -Jqv^hu68*;QN56>?Y#1tgUm9#nEfkiSA)zmg&yTiaI#%?%PU7MB)54j=+Z&*vmxdH^FNJk((HHoWYXt -!o!cYASxvVqix2lZNU55yzL@iUAzrxnOK#>2o0H2Y|QlPHU+3$**~^5xVUv -?qa1%p&07@Ymll>y3SP%?ELano!)@$-)O%fXf^hScOzz#It;A;v1u}+C26>Nl%LjY_8$^oU3YJfcE03 -M-oL45!zH({uH)^$)9oN;=i*o)hh#d<$RGyrw2XqU{(Dh+oNumQq_1j)8t0fa#LN9j;3}gXgr8guTOpn>?sw|6#ioyumx#z-oPfZ@0avvPGXKe6WW)Et7)1RLn_ku%wRo5|+ -oaPb298_NeBy_2{oC_jk69dBivg<~J6moZQDh8kseox$g3iS>yl*^EQrDCbTXgO+32k>2TO?q_YqO!e -ZW%?DX9c45I<{ZzCIk>*5Q>(kf=A{*|+lGJ+6~6Bq;gcTku(c&la# -nTDbG4-ENgHAKpuCvPcP2A`^mJOl<{ -*ri5AorwRL><9uh@Y@G%x6qbr2NeBr2ON)>g7_aVB!DU2kvXM)+ -Et2zdl^>E`3p&ghX=Bi}D!>&YzY&ON2q0I6WFIe2Wl}V9S(PSfThusf5F5Mc>l|TY*MTvYjM9^p -m}shXT$z6ErgO8gN!`mfhtL;koyL(XN9-0K6&=O^*-7;}`*|&k}EK@LmLy6SAT;%!Rt%-He70T77mT{ -t{7Xxoehdl}p;;&xY|0h@FMrOpOEH?MH!F{h3DXRSPu;x1V1^vvWKPEl85c%OXd7hTe6(GsP*wTV?0< -x@1ICw`ZHI0g;)rzWU855?((ET6K?wGWO1C55SM8I2_hCXOLX3YMElYbr?<;?kPT*cescgU|CD_Dy#+ -K(e@8?cpw}KA5NFU19Tn+a83gDj<#Z~ZtLxdodYK#&lZ6cT>C`UD<5=;=Sh*R_kU@RV8{t^G{QuMUuj -3KW^J?05)ktOd&4j>aXpr|=*)4;dhZi##mva=E@;^9M^Z(c=fpS3Nq6GRFJeBCJ{&-OXEei3ye11$XF -L<#(nNt`I(QpJt2s<%{rV;d&t?iJVjb?lx*7)@*OwFSMz$|bbSE=k`jCR4Y4=kKNoM3aV#gnY-xu~Y+ -oz${4NHpzP()*_cr1i{TV9xqGq{hye0wgAk0Q|8(vHw=mD66=?5(ptR4zvS$W0zbS?j}qBR%vW9HJn{ -H_m{aNM^0Y(3^=-gncdMO|`dbG>tKOo|*AUAX>aU`>-XZR}0*>+UvGqIRYguQjz4EL?V^7vZ1j*_O_{ -ysM-qOXL}v-63c{w;sq|smQ -P0H6~juC=G(S4RDj=y&UtE!Q8@rk>pyZaW4l -VWW0b-NC6;C&9yLwC|!co?>`vi$gcW99}To5cGYFO -?jiRBqC)(PQmnYq2jZul*l`_oW7;Z1lx#4*R -i@-a*$y6pGLGh^}cC0~E#?p_p-# -N=30s8jwRU7F_M0H1`E1tt*8lK^^Aa=RU4v>rWZm&6j~P##2;QDXSh|lQn{lR49ZHMFFn|Uq3IE`^(ZMAg!ae8gN$RMa^Vl`p|7+fQdc0hG%36|`B)bBhV&2?m+M4udUAFZjh7u1#NG#o%=AJPhty(sK4C$R$ -uh~;$;n4q*M6*>X#|}kV~&zg^Sju54^e$yl=kvo$#zAv*k)k7gUUS&j>7t>!!aB+K!QliuI756e%!X) -%fs|}pKZw|E9UvV%#65C52xwIpM^aPJ?J*XKdeKU$Pt1$pOOMa{H4!Joloh;sHI8Se_t`=dfTnBt -4OZKm|*egwR}PwM-s6HF~0jf@ATBwK0CPAm33pKF@Wvww?>WqudEM@DDE-9;XPC+{~_2V_{5Qe4$v6z*HVY^5sJchf({1%s7JY1`-_-{i+#f4=KO5Nqea>@Sx=4wp~l)Xjbt(u7^ -2f};1B3<{xyL`KKE#pCk65jX~P9fB?*W;WKL=v5T`Vms!F*W+$!O(>3`sNXCI*J5{)JSJxa+aBwPK;M -)ntNQww=1Mm@LKJJoSJ03Ua53jZby$hl;*mj(Z>Vv@9s+!O$lA2h$|XTe7(1YgI@G6d9MfFmp$l#Yx? -gy>yy+2oylb!1WD@FM{ca0juVXJ8|&LMTbx9bg!LV*?@e3P3HCS7-Af$LfCO*tc>^&&kZ3DW7mOL+ws -s()4(ItmG!{wdIxkzFmcX4O4BuDv#1o%XJeUz?lO}}!K7xze4O_AA1PGpkbKYu6eJK_{VJaltE^o9`@ -6Z$!W+Y6|82emyJQJwSY0C)a0U)8y_&F!>Q2Mf7GVY&wpJ8=VQ_i;5_c*J-Un<2HHz12eHJonuqqirg -zrFfX`pw(N(|^DEX8bS1&Qa?_Ih|a_Zrp=v-6mubS3UB6z~_n!9g3;CvGEi*b}&io3y1gP2=zqsZne% -gd6BWEx!AF6->CTJLZE82GQ$rJ5Sh3^BGEm?Wq`flV4?$7z^23Iou#4@$Lw;NtG=#}fl16&B9@B6(pZ3hi5-g -gio-yH-HgPO7YqZ6h&2!O7Y)!w=E4pju%Ru6?0U1}*yAUvr5L&vDOEd{be0No)qX8=(gx})gKqCHe}r -%&HqWG3YV&7OOKhnrfqRmMFh;@#^2U-DvEvS1jL^b3AyY?%-3r-J;h^VHzc=gDKKa1Mywy<^P$@+Aw@>rGjcupQD5+_WSsFrZ<8<14`>uj3N}vmkScLcBE -+Kyds~&bK0)6E!*+oY)&lIJ_o2hXIJjpDp-IeTDJ%}7F?LPImh(UuYW|FOA!!Q>ZXzO(xv))hp()NOXIyjV#lFCsX -as7-8yBw}lbo>z#c6Jbf$@aFQtv~DPplfjfX@~lBB9Hx{(`_0_R6kWBw1lRus59?zlZjeBf}R!#QE=t9L3n{kO-Dy@c8W*)s2v$-d~7EbcpDtt@8aCO=jb(^zx6k6vpm1*)M% -rIFufIxonm73hQ3!oy4X(v9%xs)-*t^iSFSBSRNKjiXp$SG+uV#2V5d;ECy}^l#NoN*2^L$`l^;Hv*M6CkLrowa_bm^xobZcln97}YVNDf+Knr5zKKl^m}vW&z1{Q7HMCiLhL*v2SaoNwu`y4f9nL!MTGLzi-ox+SeE;GVd~L0(Pn+oE -jyd93G|N7$LlwJ&BluR!SQy2^euXb{ -8i=8S7lh`#9`XQ-K^+k93k~`D(8K;ld$xxvsvJ9L&OK(zI$mR4jJ#ni!!;zZC8SmfpzzM0=B`ybQ%2Y -V3bH^DqtaDZKaazvBY);6FqQvpu^zk~s*_FFmB0p-=(U#||^LI-6IX%^fhuZ7aO2R+h!+D4z^jGQ*2G -b#<&`i`K!k&;d+Xfz;#K_s;>%Ij6a{ -+?&`I&`YKGx|`8(hS0U?&;a*DL489OV{U^})JV6iF!4H}d6q1)S`Nn|*(;8TGsCwyv-Yir$zVFL(}yp -Pl56UAS&EN{w}=gF3k%A8>$n$lqAx2oe5rF!>1$jpQj1@&P>IBpWLR_h#4~;P@%4*C*M-83sgPBVgUe -PbTM)kVZJOq&c#u*sNTX|wFStO9_J)NV4G?Wd$7JBRjfUOwM^m=zkI+RW&D~S!;S?8DvQ=1r^|v=Y4$ -k|@`G2zwe2w#)Je9a|sWsA--}+#$x`EJx`3m)#fka>cUUx%v#vn!B4t2HRl@|`VOmzp*C;8=nwi%Jl& -FX2y0O11i-MVKe*cUOQse0Ub|?gZPTNCy~}&X{RqB~4E7xT8LLqNn4;0j0Qf6~7!uZ%3YQr( -2M)cAYJtpJH%NUO)Zr;-_Z^U5dH~24rhC)Nl@1`dlsuPP48hZq0pv*zPCS3t54;?mvrzr{5Zf>mZy)V -}#&bSaipgGjhLK-`D=&3-jDB&dEG&EPzfc(w_TXChoS;lZ~O%`kkg!Jl+O&uyjAt@q}6|_rO~`|D~G7 -8J&d71{)wrX>b{_e3xR1NWhRRQ0nZ_Bdj*fXgDV?9}m`dE9b%4=8;*DV(*?La#4_Mmy_g|ovQXEVe4> -$F;VTGI^&Dm=406tN9`?vd}-9M*XHkE!=zi#cQm4nQ+$;eR$Lksv(q2*fnz@%sgdrrUWXX5Wo_uTWG3AuDNJ`ZKhmNZV9b<SmT>2Qq`4QEC<(*1I&pbs(%A#fso) -+qiZvmkV<9CmLCpk7weA5GFAVJbfGdFO~|MvHhrmawXZBTztds-UIZCyF%foUIbnAlu%* -S=QY&~htx&Hb9e+C=`0W)O#ZdHJHh?-C-3+?&X35AOpfhtXjYa>ETw1~>M0+&MCgEIDrYtk+>Yup=Gc -XAIH{Z(dF(2{_ETUUsb+jz`uJ9kqf00zY^a>b=@N(QS7XQM`_8q5S3C;}VWbLV>+Fc?0;!nCL#Bieze -!3k|~H)kCA{=m@SF;K!zt^vF}_@*!jV)#*(6m?CS({+8igQ5Tg818FcKsE9rs9=6j`pZ2$phPWUaY@9 -EO?w%ynX8}3AySbJCdy?6Uz6r`_HS)jM_4iGTVunN4Y2nE?V0wa4aq3k{M5Q{&2zRF((S}L;+m~<5qN -O}A(>;fnvzXzcS{lLL&Um)Xjprz|#}E#(Zf+naw~u45;(U=bsL>#O^avFPoelGY^bnG?^vs%6ag#UoW -2*bn(#BP=QnEk+j|N@Zh1-m{3QiYu%X|l>iI|Gs<1?~0pNVs)Pc%nlU3X@qwI%do8>b3wet8G(wZ6sv -qfw2Dy{KMQYB?CY9_=`0rFEEL_?JbP)Q_^oSi!rQX<*vxpr<{|;yz9%CNVL^g@Z6dUu23=x3N8Vsxyb!Yg^k*XCN{GP(OPz;@2d)4eogXSTou+=NH -~RSE^T5boc@uR-P|hGMT;4a7k^{>-c7n286NUB_M4tu;;Iy>4F^LN2L>+tCOUPs%{Xo*ija>SL2dH{o -0J36#<}_7xYOISs3tAux<02}S06OS&TEvh;rNaEKy$S=9YGG+Lj7)Reu5KZ`)goWh}D3}8z1~9gyoB{lXtHxK({TUygk6?bf_&>= -2@xlztEJVTI6KA -Z&){$A34F9=ymExMNXvpL9boW?Gvl{;oNp3-`E?N8=9+gvX)9mS9gA3S()`eDfM7bD;6JvJsl?at;2v -aak_3Gp4%JcDh7wRTBct`zl9+YTNxIqG2hEcx-}Q$m>>SEy;&p0gPxzc^1WiluQ$c}|Ky(GzMALhDdj -kXG5;nG!gBd;F(fgn#>oU&z@w%um0-$Gch0R@ychmDPsGGsL~qA+#eim`PawK9XNk+4^oc7E#o;-xWO -k!wU%#`&wdn*Gspm`o+=+6S6->Rso%xQ&D2VBo~)xUzW{<$z9{*Hx49M=qe1V6=S6{h58jb^F>c**3G -ZbnLqUO<<~&WA9@gT^J^gH>z=;+8i@J22QjOxUiB_Rd<<7_S9vpT>JZ2*wC&J~S+7B-ZN}6$7l3q=4| -Vbmv5SD)3Tyj~6>_Vce+E-*JBb8mj)rVYt4wAJSlQYGl$sg&{WNFz?d?=u6p3}J2g`Th!-jlx!OD>TN -w6oqVELAS`vBGGysM?tD~I#jGu}NxK<0B~+O=>W%zZCi9%zKacnFFl3D -cZF2wai{C{w2ez-T=$rMMASW|@8_ep|MQ!xFUP}vG&(>!mO?K;K4{LwzII0#kAHQ>?wJB2fs`j^gv`F -ek+n64BNFyb{zm_tp8gL1`R(udKc`>)EB^D<$?4xVi?7D#2(Dft)yl)M_{)2-VOe4?7Ic>mj=q27?kG ->=alHq6HjDA$|6koZ`KazeqlsBSb=AJ*9*cl8FTOD^dS|OW8xk=t+TSKc4s7wh`Aq8%_RNSln~h~-BB -{>#F48t$L%iOSh>b(uB|=s^!xu*RkLN^erFu`ur|r!g1r9`Tcwu9rv6=4 -r=7D~F8G6#DD~L^;GfBxQkxblT#mm81m|-KHud{r^kubYP*3+=INx@<#?4mIVTEPX2JB*Ef^47VM`EJ -IHd8$7C7##?Qp_E0PF9b2@ao5J}UUKigkB2SZub&g=;uKmezRefh&1XF>N3L# -}sd#}H>T_hKzL`yD}l%Pr;RyWF4t?gj2$#-G3c-cY^ddk*wHkt*dRE+=lI}Sb`YTD!+l -Qd(=srZmt2R+Av2x=OZdQ22dX?S~NRSr*T-(`8MQaQYHxiLiO}-lACe&7iL=z5}c#Ch0+K=2dBN$)j- -=$)%57-V#(>LV6=u=nDDsQ85O}DYb94D3CI2G@QiSCHvBu6(1&zIwxjn)`q*7u`tDLDr -R49FBPX4_7Z7di#pWi5lxeA48ipo2koUCzF6t>;%w&^22z{JNb&3&Fa{ARPms-opPU+)%b#IF7c))ejdzI_E;@;u=JMu42?=sq!->mj2L -RJNsbv75jS?w;6|Ci-3@6P$+UUVFR-Wz+Q@p>dI^=Hvb2}cE+!f)H -VdKY;;&#HxlX9~L@s^qq4zrx~*GgW?t)o5;K_nOt`-Z->ccP|Lbh~orLC;RRl*Sp5Ab(N{mqYKP94(4 -^PVUJ$S{jd7(&YiC^5}QB~UcI*_wc5lc^tiGIID?C7aW$eqPMswlW@fZq9|}B89K4D41GF5ZADm@I7M -w%PpV+Yoq>t^9IYL^Me?d3_oVX|*&XEOcW=YS=;Wcl&pgTJ0c5@QLL8SFvt+d<_??AVM!apQ}tmaz;o -c>IwML8vyQ^~`I2zhLO^Gql8b-Z|-4a)H8B@K{Nbm!)bVe*RafJ@{K6auUF6j{^QI90YtY3$$X7HIeU -S-RDV^R&Cp-|3)8jQ-MGZ|v@S@)8@KIaS}1rn%Z!cD<+B7X8GrH)1bxkEI+nms9yiM`uvFkp4;~2ACY -R=KIere7zf_Zh70LRA{^4ZZ%#F-8U(3Q|(B`=QbUMX)C$3>3%Za^>`w&OBvFIRArU}eqWb-g)oPfV?X -+TP)h>@6aWAK2mtey7Dr3@xpO=U008tE000mG003}la4&3cV_|e@Z*FrgaCyC0U2o&K6@B-wU_B4Ar; -d!p0)0pk6xoSqC)msf##zi3=|DqEbj*z`YDp@NyV(8hJ@=B5B`29}i=ugnO!8jdd+rAhIUbL%OfJ1Pl -@q&-vP$ffD2=%jYhy)js2 -j^8R@OXu33ruUWB(r?=S(bLy;;0nWIrtaz7*n -xsLU@i?osQSq+v`e^y%{5#rsdo!}P!eS=WWOuyFK3ygC=(HC0h6(IGl|b)J3q?u=3VaugiUuXq=swz^0tLjkM}unl;9sR -PM;HH)g9=R_%nT#QWt>kCc!B1|}UD@tJ~g?!DU9UU(yDu~$O&0^~OcF!DT?m7t77YG9#Nzck8uWILud -@}6W$Bo)+|wWy7AdIe!qDJM7`?xoeHag>PI&86aU9ko`*i?yx_T8!OPh4F;SN0Bza(T*&8N3+g!<`il -zo05&*VMyI8+ZiPw0_mov*^T7jj9x(5I|Ju1c42nNZ>!|?lM(niP&=e{|uGnoTk&QQn@+zkc6;O -n7+t%e?G)_U?Q-6<*DGV@}l=@CV5L+b#R*B7vJplFjMitNKYE`5h{FGbHWI7EXMN3qneK5AvjL7& -k1XeVzF7Wms(}HUjv|mvr=KqEZijGI`)0_kie&<3iQzwkf6R0Xg6%57X(46;8R@&+EF>q0GgFwt&-Et -=tI3^f7yNjt-MuTzu|=eS*Jil{G#P$R#^@zuQgyMoT3j!(x91;!faKf7a(Vv!0&+=`{9|-YAgncF -hyQgcb5#g#(yKi+BML6EjGF=>2&fvHqlHVXZv3dXG#!oJS9#2VTIP51mX*3D&y{oQrUdY@Lt+zN7PaN -b7vvJsccn&!Dv>;em^4)hInFbyw&p&nCS#}R2-c52Tz<%g-o3uOTD&`d%kIIZlc4N`1W$?x;y(2cJ^? -VO2C=g^3bL>)+e&)}3~7f+w|aUS`T|ZP`u~Xp7z%VvC|Nz&NOM2%|xp0I -!bE|XGb+90<_uN_dmt{zZjM^i6cZgYxSAbcq*K}l|&9p1&P^Ou@u@ ->}6)YecZOZzDs+1sP-BNI*WpVUpFmx0vPyP}_E_(|*PU84)a9^Z;Sr_;3FWn>8)`6@tRduQ{Q=a0hCB -|UC;?fwA4^L7O1pnEdy -4B;An$Q8KM`{jbt{-EiFxP&RF-$5L9#@bYyd2#9Nue6Y-PybFX6i9V%jpbgGrbp=cFuGxtnr0@4 -n=6m0+o5CIZ%0&wolyx#kbspczP&C@h8vs0uit)ywKeD|Ck+}lVY9q2}cf)s-qAC0&dv_G+1cdMdY$bwHCAd0@j|Q`T^6SC)HR$)pdum2KY=xw9g%SJx3*VM -(2qD@FtOLY{tcUHi|Ih%k8BPSEE15<=uG4m7kCmbvN{P1N_8vqedbVCh}RL~2hE|cLo}Ka#iIJBj)cz -Q$2-irxg+z!M88@6NBI12u%Y4q2AuT&g-+YWjm?=07|KP_yT`&uE?02xs*tugw5YX(9_ptpGj~zhdFi -O#v9{mmS9(P)e|}|d-JDg?4$MNSF~2euI+#jv6JeQqt#-<`Y0tqarH9z|=JYS0#TkHw89OQ!z8-ebyE -*+P&d--jmAajiCrTt4x|qaP(?i*H?;!)Q17SWwGenAf<2Fj%EnckpT4`Vs^Zs+>7u~y1=5YDi(%r#%K -DTGgCC->e&cp_7{fsVnGePeW;d5{rb$=Ro;>uM7(WhCa>_1qwuV-w)@VYU4x}vX^hg{&>>QzH`%#cMv -9;p5L+o+9SYs(=5xZ7Hpv6s@`63D-f9rs24Jw6pTD{}#D=TgT6+3CjjU2?3d$iVoD -HHEB~9FmH0CEtW+A6@51+y#+jvw6JcNG%ZgLm(*L8P4WOdq -)SAfYJm%u)CTjf>GqAe%%mSxKbuVIfj1Y72D+zCjF#GBfTSUsH?5lHgibvef@nnW=ev(i($}uy{|eO- -UiB!k|mGG0sbRm*N)=GL3F02g~BEM5nQRww{E6HZ$n^5Kf(TgreogDLZr){9}08(nHmr ->DkLp319i?Eo7ool@g8f@(%3>h~%nJ^e$rPeQSl=uc#ZVXg{P>R6y+!Bhyqcr<(zRzG0w*FJ-xtd-sy -;5_0WTnmCo6vIqpdC7$Js<3ZZ%yXUvT_Erb?Y_&wP|$&9lK7e{?tMWk<465{q2&`PoC5S06aVU>ttrWm -Bl+XqZlk&FQzFhwBdKMgKn0)zv!GNW3=Csc|~AH25`+evQBG7yXgG$0yIDYrwJI> -CHE%N2X5)?=20|XQR000O8^OY7y?@^De^#uR`OA!D75dZ)HaA|NaaAj~bGBtEzXLBxad97G& -Z`(Ey{;pra*$70TvgX8D+8Hy3uIRRWS%bFN3S@>#%e2ExqBN39Vif)FyQ4&zvfQ94W*~{om%HbldsRl -G(QjOG#SAA*uE~9={vr3m+>oo+SLFQc2lA>cDrUq=IQ3lTI#S+EX$(hrfd$E%ignRCbdB17rb4BpI+Fa!yr9lV?#%|6cEZ!$KGZL -9pf*UA0TWVhu-A -Ava~%%EnK%Ls$$_!E_?3Y>h7m||z(7iHue(nSBsT#JgtP3%kxX>OGqDjEsnQDh==6L{0=qD;m|}&ypy$4Dqaee(t -r*wL4JVe?>(OjBipgkpHd@AAynuehpOE)>PACxMpxlc*Co8B_TGs^vE**O7ub01ECeBRzcW>H)TrY#x -Pk**xNKu1q5VsX~TsBotaWvPUWQ18MzTpbI$6Y!)ONh`G=04859jnW&7VH)bS`0&Rx<4}}?^-Ju*jHg -?C~JTxBwTHanv}mClT-Zh(%c7|unOao4pN6&;BliNiZE;1ii)XxP~Mt7wi4 -PSx~u8d6D906G&D8W#(eXb-Z4ePcW=Ob5ZJbWv_=1oE%;cgxvlz_;CD{Or_<->on+TU5`3VePt(t%1f -z=?%A=UPt)&qK|EoC_4FI7J1Lxdk5&NKh>J`hZvW}Se1rsg4p3bLBG#kqsdFF0b&@M4uBk;kp<7b8hX ->Mrb_b2!hIFIUjvk?#IQdmuz{KgfosizpR+GPl%9?Ariga^L1dK0!@Q}0fL4-3p0LiAji@CSn-p_`(D -nM|#SE(q)?7dR3K45N-hS(>)+cr?McHfZ)$u4l_(hgmZP)i&(gG47JRU>UUL$>}t?mLb7p_JWxB*%1?#nVRKkYp1=KY*krTnnnWw-eGR@#amboP6H5MI>Z -GH#q7le_JOL(4t;%8N$0B#GvN@>V=CGv_arUWBTv+WrhKD1FlzRd+CU3P|8_liF2otz~H1T&F*O_n5i;d>e{CJn6OTSG9tnpqoo#lC=vjuPzB))gm`;Y|5ae -?<^@ep)}3hW6rV#JqP)Ms@g|jH`|!{5{=!6;~1pji3Z;zi`bmwuGK@?hkgiJVk^uQ^Twjzp~tR-WJ+) -t($*yyj+MOD+|EJm5CZ0TEq$oD+O?WJosHV2P4qR7q4`?lzqiXVS=IQW_-`#>3bSTxQo| -(-gZKv9sf`{*d7K{)WXR+$jCvhPU|X6V_9J*3-okL%b2SplapuibsrAI+%-YxJoFB-bcJ92zQ52bO=E -cG6-4Em^Ilb=yXWMZPZ1H~qB5VEqKkFOgU -e!Db{sT};0|XQR000O8^OY7y+pKr?eEt4x@6aWAK2mt -ey7DuA+%h!}7008QB000aC003}la4&agWo2wGaCyBwX>;7hvETJ8Cd;T6u$CYtA1}q2R(wziE0(1a<= -82T55_KLmk6=I1_xK`#Q**EH3yDe(aw7hRT6Q`^z`)f^mO<1^iC#|M_27;Q&x>ymX*qix=HdpD^@BgQ -Z;Y0JjI9RR;$VOR_lDC=2?+cJGDs`cgad)wRO@&k0tuwTNC7DUYB{>=$M}$J(Bl} -a=poN4Gr2i^}V^(RaKPcVc8aorY!T?ytqy3+dP|_$Glvv08jH+*6uFaB+adPthBkSZ`&rb?Lw~`d%v@ -_8@=8v0Yme=O{xN#sULAq=Si(U`^5CJt@1iq>UjRyC%Raaspdj@on$#6QPsLKMPJjCK-pxQD8AQ4T2@ -h=y*Fj9nhKh_d}XNxGH%KkkeI2qz`?r9a@PzJN{^$y -(3U_eIV8p!th~ke7?310c=n28me5_2O1z<=2<5<8Lm$y?A>Ozx?veUoYOoFD}2m`0mS>7Z!{~SZ_Xg_ -GyyMP3%oGS7DYzEE9C6*wH&waNbv;uW@B`jTvudW+$(@d==atR@w|hWgk!+Cp(ztHYvTbGrrCK+Y -)?u%uNVvwdm=&omni$>=2L}5J{1(-VD%&&`$t!w%33yb4I<}{GE5NTV+X{LxI^@y1yw?`yqAZr#Y9lQ -2h-O`^-#6-9O{48?K7I7)Zx?T_E?<2YfBov^>o4D4e)a7Id<>q>)M*Gcuv@@u=Vn$!E8Toc?}9kSQI2 -CQw#bvZRy4?8Coq6PIsb=VG~pSM45ss!KumbA%B3PCY7!AVxs9Z#Bb@hCBh^co`&p4SaU9e-U(UEbj} -?oF7&_NfWiE|KLtj@qX|zhX8LkyQvL()d7RlNHJ5z4~tEwy;L=8og)aX^{HhHGLB)a1$zmHzfx3Bq=; --0IfRC%_}8Vd+75_cI4&s-y~0II2?K^$oqX<_b>0#R&{hT#xd1XFPX!nK9r4eaMoWlPsX1;p0syRy(d -aNRBe%Y0=&9k!tRS{T7{W7O=|uw6#Q}oS3H*EMGjLMu6i`;xIHzZ7s}%^B`z+OdYXk^d}%j95fB; -Yo9Bkg#A%V`X1Y1TLEk0?$(WTcbVUNMK&1g+A-h5kpf3XDPVZ)JJWb7iv~?r!Dt#& -2Nu@a{Mywhu%Cs=q{C95?ob42~E7HGmYI9HN6ESpfYtVOT^DzL~_u;`tuYno<&bd1ad1!Dv6hRVXAPz -hAeX!a{04saOBGHTL(_P;neWE+c;%?9`&n4C|df0S7fTz3J_9Hg5tw1^@-&(-8eDp_!$8HWo}&4|+Qk -?2qJqP|U@J^O?h5QdUTo7FyDk;Q6Q9`d9TShZfXRo3iKfNWqY<0^qt3P64O*$lY6Vb}@0LXE0|uP|?* -@n!?x0+uFiE#Puca2TczBlVYZ3w&PDprzSz33Igo1ww`jRUd$x^BU;BBV!6U>>{GR04-IaDCFTpiUGf -$8x=a@o(Dp`h;`Q>45M59KFwCTZh~-xiwpQ5$g%Xp-q$4zIegqyI7f*K$(De3BnX;v1Kqp_wNm)btGg -v}y)`1IY6~P3)&l*nQxafNLocqlOO`viZ`WtfZf4TY>t|=5xQ9>9K64MBo!#7+eq9zdE&wvcQLk4<-K -DACS#m%Lr4^hg%x&WnGMs>;^#TMW^cQq5=ojNDi>%QDh(o<)kPWPQGE*NJo_#b}%Lgm)!L|3y%u1YTP -7L;!eT3wfB*}NE5Y4@;W}F@b4ogF)vSqSpK3Ku;!~VjHq$rCFECiM`=Uq)ZB4Z4{1Rauq)(`7mz#@Z* -hrHud!{r*N+2o?s)Ip!X-DX3B_k``@33Y<E)-eNtf0Kd2Y+0$A-FAhrmw@tU>D99AT#5FkV@&(@x -Lb#+lysPfdxqaz@zBQmcM&w%cti|<}teD`*y?93`d%!u&&WmyfO6k(8cCFcOQp{fJWBX4SIb&QeTmhLK>qLu)vx-SoeyPq*~mb=w@-aDM -u2soCTd`W8%0NG_@d{d87%$?z}Zn4$cMBQVoEGy;00~h6f28WRjUz{`&Oh`sq#R3n(`izD17od<%3Bs -5TX7B04>PTeVifuQUo)DglaezADeByb?}fDFkVHS7$%#^QY?b&(*V2r|yfUA7Eu*d0nia1tL3PPfDO& -s|vjh5Oiqlgj;VRvmfaTLxRtz^hgUatkQ)bIIZT>5GTgc5tXn+qbfoxFR)05-qZsg<8obgk=CA^;~m! -wI|Xi|c7yaD`*yfpUW3v4XL6oT)svyK$ysZ+kzKX%F^p181*YgCDV|QlsH&SP+XU0|X=m62u4e~9#ub -T1;%QOe2dsLn0iIi1>Rla)vJVWsEPR;bJR9VA6rofvpAesiDZUCl)=zzew_0cRuR(T2^9Y33ytxO#)V{(JApQ=tI~^xCN_(-oyM3!fP41Kx!jh2hU%Bj@^X$^o6^f1K>w5|opeV@`1y$le5BO7#q%cAy9chRaUTM&$h2e8BWxsP8@L$M6hSzQf2 -GeQ>l>W9BvTzoqXiMM*%vgLMmUpe(?SOhPb4>VUrhc%LXoE2D4*Vv5-j`ML=AIl(|;R>!N;|<~E^Q`y -GbDmiTW^xP~QMKDZ$5Brf^{Z=iIHxBJ$Doi0`d`1yaE%Zd`WB7vOdL$c2;Y@0DlVWHfT0XVHSLg~NF_ -94#zSo@)U~Rb{WAh@t&>8$UgTC=Cp!gX$3KWA$YjzZ)#Z1WB--nU96w2eTR;t&&xlS_8q*)?4hvaxPDS)4*?vvWytyTKEjA>1mzw}#n95~Qm$`OI!K%&N13JPt=-7#Cu=qi# -2&Pg&7V+9&lpL%yTQmXGBzMH7n*{eb#nD7uL2QyrIc0q7v>x*JMY+kex9P+yt?U-0plYC_-)ssX2vJEL0 -C{HX#oOZ#%y#C{?^tp)yA66a@?B_w8E>@%hr0RBd!M$Ii4hRk2C$XIGWWc$$z*q^*4kJsev8-EMfWvx -JGs?_d@uzBCE3oHf|OpBvM9{`t{VQbv!ZUD=}3Y*mz -%o(`987ZqVtLuA8%nUDN^3p3~c*=D*CBiyn&?ev1tH*Z$~_W+e{Sae$S>bfmLXnu`s8r0QdrZ&SBdAP -l9idr4b<8;thZ$lrkltx -X&tepk6=D^Z-`ski;o4pEUGp6+P6buF#jU_}PeQ81;4J)e}=j7gf>Mm*9j@^U`cZpc%z%0VikV|s?>E -J#`w^vqTC;E~S-Nf7uD=MV7GTD;jfccxjf$lFv;iEwVS9lz7ERJU`KelwY2tafjc{7%s7@j9Z$@)Q2Q -Mkk0Vb`#}8DcRLKG%53aPZf7t01u2;AqQ_ea+#>!>Q?jstuUVy24GP=LZ@#=8xyHIA{#_+p_X&dOQWW6;JK1K)8plU~%AHJ^S`qRe*{w+q}s(uq -e6y`x{l$akEV7n-Ow@91eJINxD2vz#&>k>go<`khZ`bIn)oZ*cgwoj39>M+hDn;mwUNFRismsfSXg`u&__U72-xtVX;D -L^mZ{coBsjP;GF=|39-{;EwE;-%W!p3>CPP@X748E;`xGC5fjlFiWO1#jA~5lqCHxxiM$m0|qF@xN!F -6=C0JAk|nhI99nVPf+Y_ex212p>X=`f%SLJKir1IrOT5JKT7H7=L5zfCLy9d+K^8Am{oKLbm676_Fdf -#tb^$GQc`CJPMjbOQyievDuJbx-deMlig<_*iFkO<}9&YX2%B#=2${cp>%Ez*g4j4QP<`2MUVzCvbr`XBICjKTKTVza=p!dNN?Yjn}=6xdum+!3s0DWJkfcA -89(1=`tSnS%M=gK@%7q4gV5BEN3!e6{TmW=@rEhsXL!R>5ZUl1SporKC5l?HZkyW!Y(Z{$gfF=~*fhe -5-A)sQ^fvM+;wuFsA?xpAgKz8{*y{Q)qao<0cZ1fV5-sr4ZgYkj!9N5D%mt39e6J5mer`*v>Nz-88t$ -KGM@Jur%}1DQy$GN7&wAFRslaHJ^*xOF0UMGfn}MGJ%NhwjeCo^1tbxUZ*&|%)_B9f96>k%ETD6 -L+7dg69_eqr{xZy!8BuLF|>@)A5B>B3uF{6bxIu^yx&C7I0ida2{`#fvr?cz>1QCY1ReK`cdT{!vp(- -W@)78~~D1yeAr!mz)c1LC~}!Jk?@DMEFd)mjN~*7|jAdqfIn;sq)X)rnt=_%k1Iz?RqjF6pnb^#-Kaj -$?k=o5>c`d)5Y%MPv7qaD_-P99#<4TUbfUtqJTzvV$N8H5udztg?$c+$~!CM(jU1`AyY6KCx?AjLRLP -8aH5F1T>q+9e`D23$D>;u3?e>S7$O#fO>7NCuh8PfuRix_WSOx#e~ncknwE`*6k7siqmEiP0&-*tA^* -kdgWb-U%crY_4|a8b-h>qp!fQ8jvmJ&b^Ot>;)sMZ)i%rHKj52@vtv7R0_<_Xoe%BloyURK)ey>Mcq) -cZ-H-^5<8_i1aV#GMWQ*%iEzwlqm78)L>;`TT9+Wn2j_RqV+4lC=?sLY -xosaBs_7!hk+&*k4Z=KQ^yGNS@d5R1^n8D=Nu_`N9}zaeeAv|c$z8QEF$$4g|%y-KnEU*mN_s*N>K^| -%Wbn*GZ1=8ryCU8Pt>W>gh5E~L+x#Gptd8>67`V{ApFQb7a=%OAcc<;#S4Muzpct*MLW@!U=^y(B!$> -6Ww}cBIq2vM-L+lWfq;?{Z(*4PrkWdIb-TFrhTF%0gV)*Cr&7BX8FeDuD*YBfhSm -By?%T7>bt9-euAnnG-ZM3TLc)XImlFe_=nH^hzE;bnd$8;y+-w%hNhQ;CeM?+k+M=mfxLT#hs6N@AEU -q1zyMWu##}$fmquJTONWkHnMU`vHf)MpAu;;n>{mAwf%#!)7+#_up`UDHJh_bqn~IkQl%4~uc!PkIEh -}8`!YMtV&o>t@zWn~%w_X?Cdg|C*;{g2Xi9DnCVP>4jE2DDdJ5WN;Kc`DpFO>qc_@d!8Rv(z_3@sz9?*^{3LK_$EfyCar*rZX2Vvl -qGR&cIfUa4<-1&|LjB+sni521>yi0?3(YrK!&MMwr=&W5^n?d%1x^!-!Uf)UBi^r^c_|q@aXVj7E|63 -gEgBI2uY3)Deht6z0$QdK8|L?O%r`Myr(m{inrbC1ea*z)oIDVHhD={NkNFyB8Yxp2*S(mI+2`n}!Bm -eyUWmlUJD}c0Wr&ky@!|(v99;z?Y>Dhj|_xyfl5aP9Ly$07)ZNiym8bBeMHc)_n#s$@ -RjYy3YxPR4MY3>g%O6+Gjc`z()sFRPq*y1KkWVH*ckD7qqQ49yjFw@8P~L7srDQQgTccH95!z^5k}4} -*h(G(7;*okQ*{t&g>j?g5re7`KLoa!?!rMatEMPF1P<(QTfHi`I1~(YYG<*tU9ksIatjHq~{usD%ZY?f?QCK{ -v;H7B>ned~Vrp1UN$3kO=HVL9Rkv^0_J4<(8S>tmTZf| -h7jh6zfW#Ki(zF0bd)+tEAVCPWw`t11Q?q19&x&=r1fR2aFE_zX}9=bfYIYwTzCfU`A_ntq(;iLn<$A -5FKG_c`&XOU(^gR-W?DZ(zV%yz@9bD~Akk}UAN5_-GnNP{{t5MiQr*`;${ndSy)Z7I(bQr0^M(U(~P> -kv;uv(eyi6;gj2g%?AHy5lqv?U5wGs!0_`7;O+teF;m{2yJZYKgkIy>^|Gqb5r|>dHK$a -v&RAp-^dd6QyvIYrAg{rslXGj8UeZpQ^BW{RwnO*E6rFJEPr!j7dz$CYrCW;bgCCEP0T6ql-NLfHx%(Vg=R9#^>C|=nYzDMQP0pX^j9rjh+cW>5!B;0|?KKY2=_|6lIB_eyc&Bf| -uBrnRUDX_eP{>P9xp!PqMY#|8V3wpgeB6yJuqK1CAwkXiLJbqK!TVp0(zNam!s9wL`EmMuLpp&O`AHX4 -NvHm6Q>=>)dG1ywfy%#6Zq6bh|UXbWBUDYJy?$pqvkTIPIE02XLKvxONi -PjpVFj{zRq1+W=#AYMt!nnnEo*hgD=3iVoDEgBZbcMR#^D6 -Y39J!o^&-wejf?_@XtuDzLAre{$UC;k4F=3@LV>kp2_=UCKRX8a1 -MYzXr?kng`IP3c!%!d=&<dLepb3l8(K#{z#Hj0eiLpV-io~SnK3?qSBTmF=Jg|^0$?Qvv~D`hXkfP{q(fgr@q4AV-4R9B255@ -rA-j#5C(k)C{BauR);AtUJ*VVsD_hePlNEKThSxZmtwUv$qI$4dr3VUIDJso0er775< -Z)NZDJ=Cmg7*=p>NWnf_MY$57AzWUkK!;bacK{%y{X=QkBBVzqCLjDZ&6l)CFt2r0yd)~jn6WFD<%{} -G*$9?)(XkcY!`d-^DMZ5YjfiS>LY0NUno9B|F@ei&X;p;>grP^{xkiAHdXe27amT{+qjuf3NO66%}I_ -J=%RCJkdK+DXx?T;t)L~Ny1%2`K8w=qhvT-aU%p}jE=Sb*`Jc_;4iIX*Q-9_)I -Sx$h5M0@V=@sS%Chv>&5uV}xONR|c!H9%$tqn@`T^1v?2Z7gP?_p|U+(S=KrR3y7eP7&+@^pW+(ajd4 -uX?a?*v-L&YT05s8kOmVEd4QNtvfz{T>Y_UTq3N%m_L-G#1sxCyOL7_-@U8ey(>@`#6K{UJy@nD9?$@ -=(=e379}(daZ``4(8})=1_FzOVczRoh7v8i*K?<;mE1Xj@AW`XI>JndIb6rmDoSmP3;~i}3^OTI1smQ -z|!{CPGiMpP8O_Oe%n%Xz&U56-7MnvU)anMVQA2C>gkIr3y2MyWWu>O{bmxJD}B$6%5Y=(%!!B8cjF5iu>8FGlKzy3m_flnieuFiL8mP4pLd?zEOXHlD)aO+l!`ddesS@41dB8$}&>m8maW{kj{hfcVj7EkYlxiO6HznFMsg2OjH -}dcy>^UIFq2ctqZll*KZq`C?qz|D7U!r?;p$IBiq@5Gj9mbo%BYB7 -3HEYO0`WW!XF!HHzW)zO~0a0Cxsq4M{TaXX$gcH{nX3*b2;yA0xwUhMZKiY2kY%iJ8ik%CYRVh1P_{& -cugKOG0kt5Ob)~12@G&>{-zQF5l!|!zqC7sg%>AcPQA6$t(AMJHvOu -jlCT49QRca({b6D4nw7b3P24o$9~>}5@K+&&_)TX|!rYM-;eJM_pAU*vySiQQPZ{we+KesjE?nQt{Iw -6Sk(Pg>AaX{K8s;4D>kcz3u*Ml+uW5;wmj>fQme;{F<^9XsbqXe5jj5bsf8(f54o_KgnIQ)8yPwrNaQh>+aL*}li1OLe12B$Fhf_b;n{Sd1gbeyNgnA00mVI -3&sbm1qC*=ILM{W$-Y(tOzGk+E?p3OU9_vXk59SUU8LWn_FkgKr5qyA6Cpv^S*Y5S2#pedhlxy6>k^n -*EHvUGnUf!ek_mrsn*eX#0nt)Xj^S*=6PTE7eVmnC;V0@jrr-L{{c`-0|XQR000O8^OY7ynY3ELV*~& -I%n1Mh7XSbNaA|NaUv_0~WN&gWUtei%X>?y-E^v8`R>6+jHW0n*D+uLKyLIHGKw4md92(e*E)eukw8$ -Y?2$VFkSW}`(Qr5ab{=IKV$!o{nqB^W4&TwY<=Dp#jX`1w^&+-Fxm9auOQR63msct7K>hVrpsmKXa3p -fjJL~jW`UUWniyT#=sdJEGDXIksJ0!vEHnv;u -#=1F^bvl^&{xvK3FREfI)!bbwx$(B@4O}1W=V?Ug{3^N2R~TKbHwb8^+FcT=)qGSzmsHI-)U3K@5W`l -^v(R~jxI@FiH#Y%m_VRLg;!M!-dHEbMwN|drshyd5Y -LfAI3Cw8ppE?a0CrSX7nrIIh%jH&8|(>?`HqNCeoO&}vU2b?PadLdt_wI)do}^vP!X;m_YTAGaIvUfi -P|;^TcdqTE^z+OLE*W{-Zw@+xJi#5s?FB2wUhs2pv~#zu=e^fn?eQYae1P%3BVstekwu46`E3!n_pVi -mzqk@wX0o~>}7ThtxHSt1UI#zmMeK;(u#_*Cc3czw~00KkR{CA&bMdjiiSN@Una<(dE)wtB{llog02J -~c!-s^F?~@RzD$K&JL`amlA&x7&~T=HYjsI58#zyZCo8e*?QtwzL2bfm5C@mr0-!)e7g4!nG1jZb2wpED@GKBZm63i-gxyF}obEjh0Nru563ui2NkU(* -aYx6%U_w&eLrob64*UT=>v2tWBG*F0Zb#9Rg4g2Ia>v$mYyFs1bSH_Nb}o=WPycnATu)*5>=?sEbECn -!Hm=BX*4FRFUPQO}Lfp&w713+a%kAz8usVs~a;ua#eoHvGon-WaztEAh!T?l*zibHKEe<#ALsdQ8|6{ -R(i+Fg;=H| -`&W*Cz+<3Fcq^OsTG;*@qJ((gHAx?GAMPJ5GYtB#Xq!uO(!=QA+7(DNcKW!Vrw^VT52w??Beaa(z1;4 -Xk0SL=;$^}AaJsBh1JT^aa(yRioTAIQCI$p))$<>_U)m$;{PFI%$dpN;?Ua6Of(R`9!a+V65p4)~Tg> -g%o9!Fp}5gfV!lta%p0@GnqH0|XQR000O8^OY7yhqJe*GdlnPD>nfE7ytkOaA|NaUv_0~WN&gWX>eg= -WO8M5b1ras?R|T98@aLP|N0ad={h8BiXthRmKDoc$FUQgGx5xwagyEjIy_CXDRoSCbGn;)WV83PZ&l& -_=w?%rJ)Yd*z46#2P$(1%g+ih5!vTApt#9+>;<9AJe*YQ!W0qYkV|Jd-dV2?qeVfeUw20@d%-HuozGa -(q9_K8AT4|Xl(@mM>?A1jc$E!FkdwYBP`}?ohA}Y!*TO!fxm`I<0e>FOSKgMhorOA4;jLIZSp~y6k@> -`aq?EBmDGE0HN`^%)zKNM^uTA$@{RK`c^>{EQCh{QyhMd_Ro^=LlN489Uy6lK1dm3w=W$yJ;e&;_7!##)13zc(1Q -_CR8zxAR2k)55f{wZSzV#wGrD`FUsGMN -=re;zLsWg;>uGy2Qq3WVE+zjb)?_{n1!ixeB%idTer3 -=-DF41!6Kq(vE}v$#FI>iUY+u`2O4+W4OrFW5I%v9%8P2Hvjw>HQM{3_WXdiE%myDMd+k{Sq$ll4htND -AEmFKJVl2(RzP7|ixK}&KO6%ouMZrNa1%L$iDOQ_2MR;3B3e`8$++B1t;c?tcv&e9hCnSa8GFzh{J*O -ze~lbK}kO;VHrQ>19M6W@F!Mq9vTg)It`Kq=$g0anz4(VJzPv}||mfy0qTnbL$qGiv=>JK1PJ+c16dk -|r3)qm0*Q1AB_$ckHDw7YP}4s6hX^zD!_UPe8|@wr=<~iI;PhXk}zi&WH@OKU)G>HhG_w(ek?-7XBo? -_;YfTr0s0_k9a1n@MKafv$CM25M(FD@K5n_4f;sqg;lSh&*f#zGWa8B)T=xxVExFT7`X!lL(?g$PbSL -}DB?0cnZ!R$CgS_Q#VoqYk~v>mNz^6sH^~HpY#PrZa2jAN*gT61)Rapgvy8QJ8F~qv -|(a(#MqG~HYjy*2kqvi#yGDT+-z==Vp%j#dlet6jv)MVEK0(_jwl8THe+vVQ#224)-#1^n6*E%7p@-Q -cCbOR^hs%mvpeyNEjhQkZf?&EyY<;6D9ZR`+j7W?goV8uGhGg}mOOi9~ks*I-X;WF|^rRg=++>WnxpJn9k$R{7Iz4Pz?I{Nm_yFb4F6EuH3#D9;~zhRM77V8z?1^hKyZn&e?)_)Zp -p?wN{%jj!p4!0Au(?BaFHWEGBHwd!t;&K%gpYB683|znawh=o4^~!qx`YXs~TZuqcv -A6vBbuxFyCVAL$EY#?Y7Q@$r0>Ul_AQv~kK_36jF!K;NNDB%m?bdB)x(WUXnFmF33h*}E;+)!l;KWyN -N_UMBJUw~}PR6#*6jSf(F8J|42`WVtlxOp)ibNWgY;DNV(eZhDKF7;ToN=*JJ#Wuq&vQYtA18~cGwse -h7OWL-2?MpZp-r>Lyh?Z=`sk7+*zyd<=8#9ROoBLU!l#|HPJ&Ym1F`mfqw7+P#Fs)m_6PJCa{_Efg(t -D7+gY0p>J+W7Odh7OGO;sxz4-z$2HgFg+e>EC*k(*jLXJX){gC>IJ4rBdT8J?pWSP2dmU2Ha*F;t##A -NNif$xS>@s1vcz3WI2vt8w0^pKs! -y-!cg9wps=mdHFdF!#mD{91Hc&9SwsJ#_m?3$G*!Y5g`xU`moEaC>d-e3RprVAKPrlyRcS#W*hQ(TfN -7$65`xpTA|wIi%1)-pMNg>qE^{+DL**|#ur~~Lh&ZRUo=~IPtv^loo0x-R2@{D9JSk49S$n}HD?F4B#wC6WyLB7l%CZ*kKe@*fPaaISoO&qA{f> -vWLcWub5}3#*&WYQ?N+vHs`Z$3ZC;RC>w$eS{h#fw^uZ;%PeCsDK26)KDI3i^rKFzy*RO2M@C&9&b3v -}3}|-QcUPbb%k0|KG*7?w<=hT;Wx=&;w6BzAd{?CzjK8GTjPI>Az;AO#?>3Ty@s}UUu^P%r0SjR{$<` ->jXgLwvYkx##FfwCQ!`zGWl|H;-!6hq=<9R%n(m~4X%se?$jrE9hyLBXF!Q=h(bBDcT!|mIn{qIs(Y_ -c?FK!gFqtE9x>0Sw=xeBa!c7-NIqNpUQabS}dQB4Vt(2Q7@ZPzsi`BK~O;V@Mq|uE=t12s*lfPRuA|0 -g^s=WvO3Km%-Ekv1L+_dt_7+j)AQFzcA2jIu@*iw#YFlqa;O_07qq!VD&7GDZtg390D9-}u# -4$bSO{iVo#5ay|KHoM(9WP_)y{YKkr-{zDJwYb?)ontsQDz&d=Fk#VWzH|b~d8tyPJBqjRcF> -U0%}Ua!Y$KS2_MV<6J$G^fJY!91J6>QJ7tC-1)d;m@zWJ^$ZtCV%_W`TI9Ne*fzA8%64axuw-S9}S-Z -+bsCwV0dzLJTQAzQSP{ZbUbWzK8Dnr#D8jxL{0oq*cy^?&ziuTfEd7r^(*&QlyZVeG(zRoD3kqdkN!3 -8C~dOsDY<#Z41>L>k(8i>v|l@WjfhcU8F}S9o^zvyrQLF5xY}SCD7IwZC6;CIO# -2aB1hTtwO%ngEZgT%oLG3-#BPG?$7%X%w?8vP7F>RgA5BM}R9je{AmSg2qpRF+_Vy(_zxU)`*#~PMTW -8!nCa~Y~N_G^vpT7Jrc$@?b#lxEiy77|nyk84_tfhKQs0*m4VeE3Cj1M7-*IdGey3yDP^MIwHXjs<%K(QIeX>{IemnW@-J2h6b20^m`lQ{b=kjpwXBZAy>(rT{^84O8Ter1#6dTxG@)Gc8PyW*=L0MGToio{F?;=Jol$W%#5@cCA@K0lVZi?z -3WYv$nQQgwgB=HUXXj3>~e(XTIJ^P(r?Wwp~Qi4$aL;>=K%L9(kFvm$Q4Crip`QZlgo -0K6`zvz8oz?Zz+nSTHMtR+JQRf5Vxp+QBjnrcwiM_UE;mKn^cpZ|fc1s<;!E>@{V4L_;#*qPInAz9h} -IUtv79itrr>D1Uqf3F-=x@Hmf)o~&9i7e!*xN{c*zNQKlu41$m5&TuLZFqC>kp4y{7d6cJQ`H7K!?yF{RFXJ -8u}RiqY*g(FAKbqTaMz4)f&&cOC?pG*l-=OXo6jRLk#C_))g1Q%*TmXK~cOg_c8m`ZJ)Jn@)5gI}QIN -f}L-{M-X2!?T;q>o`{DIa~?cD54BPnWxci%mxV(b)5t7TY2=&jprtvN0^jJN8s~hv50B&!%xUzy5O-D -Dw%fht74JpdDJX-BJortYp-}d2J|0qp7khr3_NpR2UNRERxxJLT*p@!3g?;sm!6)gg!IRWa-HvF#5`qqeW{I*z)E)Mw6^3yizrb7?PpMyoE_c^zK}mr#~!u;1x999b0TIwll@;z@dl)q7F -Cj#>?y8TR{w)A{t|^t53^&HwMDH|@=lHTu^OnjH()Oj(AN$sL2r!4m4=4$`W?y?pBtbg!U1#57ZyQ>^ -1zvPj}NCcn0EY2vlJ#>I)sJ6%B7ygD$ujAx%H!$L}wUn7V-%K_{0psdE}hxTM@Y1ryVWW+k9nip!-f$WzQC** -OPZRNi7)05~Sg5n5&?!BS+22{){sI;S-QzlW@lsq~Ty|Vu{O`d<+ZGjJ5nwkRVfE^y#i{$ElBrCfwx9 -vv6JUy(pv$lRHWuF&**ifW`~>q0*PD{3bFRSmSi-cz(<%7RZ!o>72#!z*lVb^`C!*+CT_OyZ#7=WVe` -w4t3#w0>8%o(a{*4T!BJWRe)`kEZn98FwG4fc$tRNq78;mR&@@+(0)~Nessi6t -m5;y1jY&@n@wNn=h9UatsFo35e|jO3I;n`;>MSOiN+nSGvcj)8T9O*;K;kJsn1qxW@H{CLI?1D6)lsw -N(H1@DgJ?uZonhTsw<15Gi20sT_Nu_pmv0|+YIq{u^F&Ut;1%m1&J^j3bsl!;pR88wb;NZKKQSr-sBH&UZ4N@)wh#Bod5Cs{f|AoBECi!y=+$vC4OjXRw -%1o&#;WQ6(h-kN~-FKh-Os|&K)=rB53z9qNBNZ5wbY<@Aod#-&v5&iN*gJa9|>-Uq^T+i>#QK5W?_cc@0Xlf|YWUZ3?m-u$=${bx7+r1#00 -Rd|m8dK+~X9Qc4tUUj$2aqBOnPfGaAz(58k!U*6%ooRg+X?-aKqzLH>^HSzR(4!@P>HwC+v~`iWQv%@8@3=rV7(x3{>RX7#bOmtR7j*UbZL|azkG?%%KdP8IT{Y4ds}g?TL#L5b*wE1dP>;`4zNiWct2p9^Kp3s -1o4RyTDkvNowdtalJteu?!IyW?I}b>07u5?|ImGAUlb<~ijF__ny7INLc^F_5Z`V~CG0@NUqr5{3Xj6 -s1;c*7qde79`VkoQ0yES{l(XrMwsiZd9%c!`lq>DecFXNlGUEd_&p2UR-wXNCB1BUln79}(8YA6qWo2 -`cSg@@0vDjLY3f&pvUOSI+pk1co~XVL63=2@6uiM9dxqepX1-APRm;b1qsiFDD4D*}glf5agnkX4l4)tHJA)2aD -+RJ6s<#8>zp_~#6i%&NBgbliyren}}x+5QLIUi}z+c&nWMFMii;OFa=(Id+Kzgw@s3PHzKYBHr?sBgI -bV3MkHsK_(0#GpX|O}8rF>Ku&84TrU}el*RWEdZl|x@54Fu06QinKDnoYZ1gAjytP?&R6T~`bjIg(+} -Y6nxC)F@omnXo5-!0bbhFIj=c==Fo96ZwCgup#4l=Fq8cyk3N`NdefN}=yTtn4r7M!N3ZYg~G0hovu| -o;A@TJx9&cp6ixBH8gR+jzUXW23h($}gShyxZaucO<7EpYTuNf5&TR(}D_UMkpE{BGR4`!q9^M7KVVq -b0@nlM-CLlsBb(5~H!*%*_ssx%0#~_y=AYqm7!ud12}fy7}-;z1sQfqA{B2z+uK}#Ykdg91l*!z~Fcx -Skm%VI@}zMf^$=qs^r}-5f#v*v&~(Y-1|W;Y5Bm39SmQL5$DYFP& -SCVW{+ld>1?Y6baM?E>OyhYZ*{dEN&59|El7ovj;puy3jaCfjHvCt3Kx#KUdw-<_PTn(itNcIzb?0Da -nZuT9y+OF9X+CIi?tZ57+vk`k(IsA>dvYDuYDRa5C^Wn9Ga_n+?+Vu;#n(xI%lh0Cweh0IWmEo6t)`w -iUbRPpL4oWtyaILo69ef0RGb&*;3ZP-6w${X(r=L}DQ`1$q1@Zk^GD$508Ur}ODr}1TUm1G-OXl8j<6 -c(nW61wWFxiA|y0g`l{TqScvkR}Yu0OUg`Nff%9%@Te%C8&`M?w2d-OL*H|(7NN1dtKIm)`U9TjlLqcIoH(g6SbSJfd_Z_5KJ}j4Eg}NWq-XD|ZW1E -h3OJRa3#KAI!NQ{>go3G{baFI&Ze8*g7Z4i=%t*8j%fJW;&NlE3TG`Xf2`yz#O)Stdew72q&&S3BtaJN= -_kKKjEn7bVY&RW}=hqfLG4s1|5tl2Z2+&7oI-h2B^)dPV$9S6C-WQxQs1-8V_mFw1oqkB2cnrOIsg}c -&NLAb~NHaV>!rTg?N!K^IXShk_&&{D@%k(ECC2GYD{lAG)XJH8QMjWKh${u(A<%FOQ!CoZQzjy8ubkE-G4-A|iKBOGxYD6~Qc$@a6z^`zq1)}NsGE0OVmfB!xHz17t3vCo_F6Le?J)iq1$B@lwD?`Oybwky_%!tsd@2P)3 -?A~aKAYFwOF-kW}k*Q)C=NE~V=q`&F$f{O@#<_PHpRJx+pP}Q>P^i`MS?BAhF$ii9uP4QiObQTJhZmn -k3(WCTow;su1fO<89co&hgDrA}MJu@nXoM*#*mU#W9qN7?XB!CK!^?;+j(>#|q>bYr-3_t95*4pwJ&) -V*D40y23?`G3@nO)N&b?SAf;o(~F)ZuWjmE6l6$PL^sH9qCq(!tP~-VPn2>Mt8q*R{nLeJ9z;LNN%06 -8X=Ev`8YjhD34jt-bNy2fq!1`9yd-TIjTliR<;zI0%%t`1nGppdtujOW}F!0|WaSGD5<8AZCOjL^z>I -QTFf`g(V?+;|e2`$JHqO%TbQG*UP7XzKVhK{A_@ir>;fR?F<9*{=I(*Nyj(u|HyEW&p3=nAY5ypg{10 -^4VN?-S(Vw9Nig*D?^Tty69h!PJsv8If84DHO5odYl7hsL?{tMH8X3_EI@9|Hf|O>P+}V`Z-KRoP`L{ -BomBQt=FOo3p!vPWT(m|5qBiB4dt!JVol2OB#Ul2xa;ndgTLu$4xGXAhoxD3CeGLMS{-7@&zxnLqZJO -R`iIcs16TWsZfLQQ?>Y!{}ardr&`;A8|?IOus*(p>9O-(+~ctrL|1c|kMz4e&aGAEe4It{+%sp5*GXC# -YrT}pWzsGt)tpPDE`cu}XbB_;v9E9qbY*#H`bG7tRJHzAuTk5VPJczRbqT4!*gXP -EEM!2~gCQG0$v_^xw#~e2R}Iq~z5``*Se@YV8x}~FGNDI!bM}dnB`x(!b-r9uOjd}Qjmu#ODlRTc8Cz -0GcxdX1IKPVdTCVEjjh(H=4@^V0gz4L5_)2boc4QFr?y2MF$2ev`ynW4v$Ip)0u=k9Z5O5?-w%(4Qd! -`72iNay0!K&wN(d7x}FE|0WeHj%|S?2PjwdDw|6?k$5K5nf*Ze=)mH+*1j2`fm=}jEu`i={UBDvc-BCFMj71ZO?1oq6)@{a2 -?5;!CR_ZO@pj4yTKVmul?AKX!9x??*^O;@aw+d5CKqB5=(nm#GuQA{LS3bBd$?lt5G5}xe~Mrm}Itgl -9g1o9d!5A*mUDG<#CkNCu|WAE2H3SRbXH>rzSbt1o5X45TdS}XC*beYT^P~hm~e_^4kJU}h68i8$6h3 -eaUavPQIBqE-Pf|CvxsAVutViv^Tt??paOlq<==uT639Y>uEIeZbekfGh(ui^OEyDG|#8mR -ItZ)wWg}Q-E66-=3qhmb=2nJDFglizZWNXHs%B3m*Ncx^kXEX0|tX6kb_Z&?uYOok;FVAA}W2!dLPC> -exScNC`j~`I`(HH`r?4S`Dp|5ZYhBNhfhIS_5W~g9}mUDwhK0BiA|=4mj%*8_V_Vy_Sez3Z{Gd!{hu_ -{rvoR54+rMiKk*5Kvfb(rhR36)<7X$&WeUduN4}uwH@>=B(j5|Uu_IO3Zbgruqk_B^o25D^6^wCMECR -R`G|W~%K%ctM$r1iBgg-_n_(vc97{Ygh=kVQN2;cQT3Z@*$(KDl?g6a3_EeB#NqDOy`GY}Z>43AiU)rA>m^wcvMxcz&+hO!J;`X!s;b?!S -+A^{&s~hvDZ%}eVtI$`TU@pMntikl+q(&M#RNM|ZgdbC7p_27`IQ=*Hz7SW;*9fCdGfkrlCLVZemal^ -KJ^bNn)L2v_kA}ER{?0>!+<{wRMI1YSo+vcuq8a)$kqZ5~O<~p>L6qtlfBwAox>(qDPrQs7dI=uIGc;WgK8y^?nqd4PTzvv{>GZ_SiQwFU}l& -=Yg*R?ohgj5ic{$qq)XM$Ovae5iedGt-~p*4;ROe_0vFiEihP?3ZlY`hOI|4_RX;2-w-96o^7N<)5{0}3&9 -iaqF+6u%LDC>fxFG~ZKugUqa2^;DmRNo&t;Jmu^KNsH14Fs{Arc%&{dRznI{+MVCx4zxZ>4!o#V^vX3 -Xx!{JpPOF3t1|3T$h@x17s9^Gg%lJ}HT?*n(aX)9|KK(m=duKDHU~! -c?j?K1uXo7)edvG0L;hC36&@>v1KlPrjzqg1Mz8+z!E$Ed9f!{06AZ>SL+~A$0D7?qi+3D8R5KRfvV7 -=G{!(Yz12~tJ&!fEON!PG-KAa|{(mgWn-1Ssr25d%7(suJlQcR5UMsAJ~U5T{s)qtl!Yz3T%9%e?{z| -pjI?QK$gbE!RTee?TPmrXmMSwTJa7pjpG{)&WK(de~KkRf0HBQ -$n*~{e53Vd3p#r6I8`h}#0I&x_%CX=S!Jq-X7Ppi>*3&IuqF!Coggmo+x901jkgd(uMN^`g!;)rJdpN -gKfgLDK}vYwnwv7rke}trlrO74ynQ|BA3tTsy{DDaoU^O85MGGLP=ODpry!b26JgWBEYX(pkRi9cUWn -R?zSW|rSS72-RXikU5fWuogxB1Qi)gP0V7{jYP(+DnVO>ROvfeE5@JPjP^+qtRdg`-HiZsw#1iF&xz4}0Z+Ozamyo~l4c)G}Y3D&Y@lHAhI-QEar*sGUf~5TIc -sLvkhfklMJngvgl?)a>azP1N89AtF1DEKkHao$4lvSm74g{Ppj8}RCu>gPG+Sd)=EEdTup~$BU2jhFt -xPel;Gg;aR5X!4j+k%7wFU)(|(#yKgh4D#)8q7ZvFyggj8}&#)67gpkJpvW{^Oe7vXXjBzRc~Z-KD{z -c7ZH^UKaVnO>u*hf0%!-H5%b0I3O0r-`DBgxu<|rECLz8MEw1U=*Vhe7e5W8@-YMj(K72n`Qj&&z9am -Mt9#T-sHsM~!VIW#ZErP!mH5!IW{*uZ^8YKZ9Hu3KbXtBz_dci~4b~UIL4SdCez0)L(^4s9;e|?r7!d -JT*@tKlM4Elsl`Gs?M!v0(HEFL#~$I9Os+4(#54nEyoRGt|bq6l1yp6a%|q5AKhR#Gn}n6+&wD$F7i7 -k7e^6Wvi)dw)R*$BJAy&G>lmY|uQ#xKg!LD-Cq(7nct5^cgwa+a;qeBpQ-2no}6o)w22O@;YP&-0|^o -|BkvLX*E!duPO^r)6!CSK74jpDF8Jhro~`vRL&(1r|J31y+Nb5Kq}m^Hn~nAx6<*^jCOk!jrp#YyyRs -grRXKts}Q)%X>S0{8i7l?p)OKZ!p^<qN%VorUISZoKf -^5JXGS4+9c+I->dQ}{N+^eUT6%B6kQVqx0M17lWfiRohtRjQ>ZP&^+Bce+)o%4l9yczNq-mFHIth$rF -VHlr}n|7I@~>ri_n`pwJ#e8i9!(s>pgQu%ByJ3RYFj-s%N?L1tDvj*u23YomEE_s5+Up)x!akQ571zb -Z{W!_GFml-31ebShj-Q`0l;u!XNM>AbvW#NqzKUgt&;x7UGrgBO`ns!68vbpW;FwS(JH1hj?Q9IHO0& -dm$lsk5|+@sv^a^B=j9;guQy^2wOFqjb+6nER6>9#eK%|Z!vp3&mQyBVkZ+*qhQOuJz?PB@VFxy8b<8 -80We3>;D-f-Gbd>`8>rgnGt@@>@18BQpU#l>$wmwiF-!TB8d_-U-JG8Otc-Vajz;FU`DyzJ(^PaK-GhR`Rw5`lr|HQ#O32^ThGL2kbRT8 -Z6ePh(!`IKHY3!Ny~h6KJlfw<|AZT`fVExX@5 -M>FHMq8yYw;)4&R+%ojG0vLFStcIr=R^A6?x3eFURkDoo<*hsSjDw2GUyhu-{+g1YXh8;x%;qpw_XfE -4!2zX!>Dw+_LeL3G|*cE;fMbxSPay_U?iKU%fqtnt(0khwJz%Exm-bC}V -y?dL&=hkOB7&^2k$9o#+gcDG(|nxQkCZVwdzI=0@)G0)Hj6nj#E(l4dErip~~2 -O#TD@lMzJH)Jpm`Ap6-PquiyS%g)43-Cx+|`k9_NM9;cP>nYS#S2F?%XDoNjOXW -9M|O;RHx=<9EBa$MasX!IW)+`G0UXJ3p-b=q^zpmL%^C&4@D_|ZQ2sEmQ^cw;>i>ps5O6SVac?NCBB9 -&Z79ngtY+ktU4kPDX{1AHC1f)#}SJe1T;AzHh&cv_2^b$Eg!&hg54@=;aNg4*dh)die@Ec-o{qT@Al& -|bj&Ca6s6L|2^>f6tICNHi^g^uQTiElQLW9`8@YOnp~h@7RgVh$a5TFp;$X8EJMeU9CAl9-%^G#6n|+ -?1c-{0YqzoGOjAHE_l5uG6K#AlCF_m-$ik2&$B*I}T@Z?{8mvJ@j77R(t$HgE8{=zW@F44z}DlN2M!rJmN7dOGN#mew{p>>nfhgX1m5Mt!XSRb}je2Y)$`ii+E;UKW$5W@am*P9 -O=xvD{L>u*#lw1ftIHdAQt|Z4Q{kxEf4idb;mzAi6?%plvYh;#(EdqEt7I&sut8J -P7sH_>_>r*qiM-q2xiTe1G~B^!)!C*8k!3!f&HRb8V}jTVAdw*=5Mh2$yu;Y8`;b59p(c^3&SR0>f;V -(|#}rjU!v{^{wyy45O>VYm}yPy%(Fi=YpX;|ExDB!Z2a>W?mmP=7L$mOt}^4JxL@OQUM-U3i!gqQ~w< -_~08521DRt-EX4&At_*+8|8B;IT%d3eFzh9k$`*HIz4Uiqa_4i71xKS;4{W?Y7YxNWid}?bW~5*<0F= -D=)4J~8uMv5g?g;`lz`gIb$$E-)Mg&vfLstdUj2e&m-r7yK(`G^`|%24YWa*!K87Qsy3tC|dfma-Ayq -{LRg_S$jx)-#Y-o`A5Z1(KD@M{SY{@Y(2bv@?xlCj-yMPSI#Fbb6VCDK&9GpzEtN3UdFEa52q}4}BY? -(D8Mz60O=~G&ZR>NVCucI-Xz9>;mf<$VR_2~>xlk5oM&p4J(7`iX%?w@-*`QkE` -T>notsb5+{|#Sx_ZSLcSx4FofPX{!ZR*>#EqTn0RH9YyXP_6Ol~l{arUVQq5DCy!d)eQDTOO^mV(igD)l061ZpxwbT -(wBslpUV*I{*q*s`(66-#{T -dLo16bUyyBwyACvKBIt24yG@We!raddbsb`*B|%0=R?k?ctzs38cvcmd{kT=na}Wcb3IZ_<(Kgc#!V* -kfA~bvzzQVRl*n3-Bpo9K517Xg?oboZyziCH(I-h;d@i#LHCxDAoo~bPEpv94FYgCvqG=g!ho+fVkud -eMe{L5lRmClvP-ApAq*>2dhoYx8TrerLo|u(6nLqDzM)`i41CHm%b8gH-kIa*^X*Aw4?iiyM;yZttkN -h))@uw`G%5zFZZ!BxJ^i9Zm<*8KsV9FC`a9##hoYRKMP}R&fCJBw7h6c>V=93`Xx#lS{p3JCniwNA? -IeN*vu})L&uvbZ@x4VC}%LWu-N|TKF0x)LgMb)I?wQu2%nr%1ak?}V?J!?hG`qvH_8I{WNEIkv@PYWZ -cip~C{-b3!N^SJ*=D+oDTFhTuWuS}g?nZA8G&BJx74qzO6w}_N2NZZ4#Z$W@fG2??dvFh5~-3w@V`)# -Pb&6r0nU;2su;?TrEupWOLZ|kRJiH*)uQpY>j7@~!>u9FS26eAxau$GoW~^|7%rj;80d^h)tpW!n`!dJ^n@6G^(Mt@xlR9~0kN1rwJ;T_R@Bj0G-q7AWlp%z_ -WC*2j?T`4H~zX{bRwkn`vS`eRt+9ebswV!ygGoCo$qexZk6ERxpucY(+Zy`3v?GM#M>_hyaLmoJ5qX? -w#a10g`6I7GI=L+nNh+BCVikcf~V1ohAcy~&CaP*Pu&2e{JXr_aaq=2JafDQ-1YRB;G7tLhSI+vKLAYC_yo4D(lcO)*^jF1Hjb? -^wX~lpfWND2Dio%s!}{2`RohBRpy@oEcPpV@Y#eyH4y(jvAI_-YH?7%DlA9yzF5N-op(WUtQ10#fZ4r -|5RiZ;gm)PwXovulE~2OuYeXzliF$K1Ec`~^^p*ozo;-W5XW3ssRgD*u<@4%+t9{~Vg3|{b+@#4*8w| -A03}iOrW{SpD6%CID&yPRDa2`J$@P}o`cN|m{V$(tW1%e~*`oQz&0!RMY?vj@GxJ&x$>)7hE%j?+MZ& -JxLzYNUd9mUW98Cr^APz|ehHJYq23qPa;M!<#uU3kH!eLr7#ksRJ(k5X6i?79}ARz+hJ$JQ=Sb;MHnr -g$OYcu3iM{Bl7BP-N;I_=oTk)D;D~rcfo{5|J6RkcQD6JXp!%)ij=C{FN7lwzfacCF`Pi+hjywt3O*N -gjodyaC=1JvDM8YGS6bZ)dt~4x!7Grk_$OrZCQ+;385osQK4=B=@E#vnf#xRh5WH%A3lx8z`|{?XpTo -6doX;oL9_0Eg-5V*2#e&V%of>ZOGJ}YbzEj6J)#Zg$$PW*peMRKW9@bD$D=@5>_z~eYbt`vu12- -59^~eqHG;=I^C;g5)gN&f01xqf2OkWz7T()~hSaNwP^3bs4TY6Z5O1`BtUpp#!Ls2U!{K7%W>qg5Os= -Lc#7dcdnQ2@VuH>nxZ`IiYvZj95fkmUcCkmSY){|ZTNllc{ryc&{R9gJ-ajQZ -44z8jG!52>7`BM4#A4hW+Q)RA)xtt|sAy#LU9r$zb~G|N^y5JRwUrfVl+z*$f5w -~^*@Vn#3G!E+(-JIh3rt{(>hLZBnq#cL%i^@ym@I_8iMbQ;EG=n9^n5IBg}K;@##e4EH2*Kjl8-U -HA{%PdPZgtkWrscgwVzI%d>N#$Wc#4Cu0LBy}4S`=~o`Ln}_Z%;--L$+IXPvf9fHBzivn`(nspA}8~D -?|t14ea|qh~3Rc#*4)LHwODwviTM4yC!ZJ3U}Gu|$AYKLKay8{_(QhA%Lp*F?aaW -Scc3Hh+l{l@WSXVDou@9Z(&23AGTG!4MA^|apLnBiOHclA@mt%$_Dx+#|Dw_<~e6_9S>#CY>wsHHmU(wIECtC#c_6-$y?hdGzRq9XJnVztF);X7pJFm^c-v0+sO9KQH -000080P~d=M_?WYjb;G=00jd802lxO0B~t=FJE?LZe(wAFLGrqc4cm4Z*nehd3933Zo)7Oz4t3Tc1Sw -WO6-WlXY7Pf6u>PWA+3^tK-$O8Nz+nkEQi!_-gBOxOP9WL0XkpM5c$Ux_SBDIYr6e}I9&soqBx;L*f6 -#3bvV^}@8egF=Oa0*FDR92$e>bXSrkWX;OcdYvRoIyt9N9BTztjc8XQ(Pw8zfX{R6fKgWCQKiQS@1cv -e^Aoq}BDY6&z}YdQyw1+r0;As<+Sj570mTv^sk_;*J(p_WW8Cm=Nwf_yBLnX_6+QF5bpm*5a5OoF_Fr -#p}b&4FzVLUdvYwhNr<_2JB2CnP^~wTA3jz7Qq23L7Fu0|!SY2dS?wn!#H^)(35jU`iEu&-BX0Og1*$ -gV>dmTcaCnSsZa4Hz_`9Y}<-#(}`KP|8!cgQA)*FDcEd4C>8Z6B?c;A8?-V`PP_J2!rKNupH=hkFhWP -zcC|~z(tO1ep68v;XkHM8K4*;4u1xXx_w8R$O9KQH000080P~d=M3eO1u0Q4pR02crN0B~t=FJE -?LZe(wAFLGsca(QWPXD)Dgy;}coyL%VrFzp3PI?DU@)f&6nHDR;`zgz$Rbr+Dj32fTq?m=m2&LWhzDBR1Yj|mlj+ -4Bxw@N@zg^s2-OUl?{nh;sH$UH#_ZPRf7uWY!mv`jmmb|^Wes^_$b#o0*-;;~$U&-IEuHVfG18V^v_E -ZYg0L0{INtS4{-7)5fkQPQHS+ba?JO -&qz`*ng2Ygmg>EfF=-+XoY=d(9}o3Ir8ti&!jPN;a0b8>u~eBRE^Cj>s -z=~VxH$Kpaz1;VFQ9;4=kclDSIjUr&is?^3^6_8ioY1PrM_19oVs3eax;|UlrSM*6Q<0;8l9%v0_WC=FZYh -s#Zm=b2zusS0TjXAnXi9}_u^PAG8{@tmtD3M9+Y`9M%2RZ%XliySt9 -E#=C5^^--Al@V2nZAum8)n>)SLGpxUbT>wY45O4kv1BiWsYlU<=a!)DD1F+y7>bQxm~CL52$EhX8^oD -yANB%5iH2FM9a*%gGR3h>3mep-7#C0HZB*ou**>AN9HfN30XU9|htc1GeNQ3e$9#k3aKBp)5q#nh38G -cd&La%9Fd7LNDCA#bT^gH)?G^EK!j2J*anjMIcZ!9>!i@Wo^;{3I3rqv1(X2rSsT=p9bioTy9ga0T1n -VaEA=0P5aMsK?XuUJ^K!<7Ki0hdiau^aFg(W(^NvyU8wfkI4PayBk6iXcE@YqU(0VWD;31=+Jl}q($vabb>V{MuIdSKDOig(;g2ND5ATa -c32_qg?XZPvQQ7x6cwnEtR2*w`+pQ(19-r3(H`6e1uW2#cOWdQVH&@Tug>UZl~7V^3GIRw=o}ikU62O -7;h8=gqaCX(K-0Z?ZC%ep%4o;|T3x~HW%Gy_W>S-GHs2F*umu8A)Te_1#(4I8+$nVD)4i0LCK -8o>lXK1lttajwG#ZbGFNuLEwpSw@}n&LUS*QB-LIeUbf{-t`i7`>5x&+E3}7@W>PcPtxjUv*fNfjwPP2h9a)u;(w+o-a!$ -4ZG}&IsaI*uz^Cgz&K`x$(V^8dFHALiIsM)hcrT_wK@mc;3^r6KL99(EpB9TwBy0P7L8}{i3^<{iqJl -jM?{LxlE2g%LK@p?z+DPdWv470!B(^usmlxTfkICHc3Gk|{*9drYF_U`7=ebGa!P#%_Kfuj8y@z}B%W -23!{tQ~=F{r)98)@#25!YjYZ}%KwM=UeG;AIVL@87j;4T)u} -da1qu>sC4~&w-`)qOw-Xbx~!ByRtcS+Dma7bTE7^t!vtFO=Z^$^bMdF|7SVcaW%bY_(-#geK`HtMeeY -D8HFFUdvSQKfm%7j;hh38=m0-t-%r4>_n62Kr9I0VakDlNQ138B(a#kSVIvyYc6#KI@p{xD -#;0Q0uv?@g^KF0$(561=z~;^+OXg%%Df69ts-$_rujAzJTG4zD+j;<7t*ewiD5 -UhrNq`Xx8>ct+|PqGF>%$BW_xX;sjFU+H7`VqRkpCDajG@3VTvi4N0n(F^%rjd_Jdrg?eRP% -r$VJ}F6PCxcgzBl^8B<*oF-RzZbO0~+-Z0~@92iC_&}yW-5F6;W>Xg-m*E*{-Yw`C9xphQN7+#y`t2X -FQ*LD9@#Bn9?2M$Rka1J5Z6N@Wc6SfMp_1k?3XqXR+l9Nn!QAh6?ftO~jJ2fca`(D;KOn}yT?j&wX+1 -&e9YoxusHMT`-IA+$rFX64H>$m^0zR;?()v|fm;$5XZ?s(sz1lrEUlg*1-gyxCnNNus|WNuDxD~4V(w -I%eb(xl#=0>}H(dG?2XF+t2{RTBOb3Z|C_o%=s5KF+OZfF8toJUh^mbSFO(L{@kTR*E`2E#E%F2sP@o -c7;4Azb$^B6Rqv}zw+Nsf1idaW?sEB_G5lJ4L=n;589us)YOq$1+HqdXDHVf;}={E-w#RAahkdB^o`d -pdr8?ACp)y9@`Nb>C~6q;=9gl196sU$mHFgKyY*ob1wIy~&v6jo9g{*RQ^V|9)Wa -c=U(64FHR0JQZ;?_y(YFdAbdR2!Ko=*oLQkxnt|pjWX_!*(&9n#Vh7*+;q*yEQ_J59ZLwG#mmeMB4o` -4=8_$d1K4Z>ghaf`9^I4^XRZ*j7q~!?`LUO8d6c;s_P7c{7^9VKI2$e$#&AU4_}mSF9m4D5S_#!fE*Cc1&jl^9kXrh2P^#LG`J*RhJo0OnI9nWWu8H$z)Futhy -`Q$PnZwELu3tT;0)1-OAZMN`$qApLARW+{1`+>z5c=l)g(4<7_uc-l7p^6&TeH?De@pP(1XAYSrVtzX??V|Wa7h= -EpFc5eVWXtY_?#x^P6917t;$ioGhR`9J5ceyAL-X?-)SLC)ansvzzy9a{W8|`|SE+%%;EH&Zmn7yO{& -A+12gkYznor>+{Qx7qjbM*gL?yzPV$Uv#Z%1kiEO1E)}uabb;iqrt|X;P@KG*UC!=)9|NiPv%71g`~G -ImChT@Hznh(ZyqwJ0?Z^4;&0-2HTma$g+4cK5^fSGhUf=c^cbT_{NQLGq%yd5z3LpKtw9U2)TW$Bpe1MseEo)!&ImJMDAzO -tysUs<2=r;Ms46{=eXk(=&x?Q)l)^swP-^4ntee^bTf)_oGeKly-%g12(DbOo1H?aW!o9Sh@VJ!;|6A -|~bJ+2`1F2bZG;*Lf7+`qjcYjz@O9B8HRD&0w;&Hh7;j6X?>d;UDgUI~+;=@$Vboxo7C-&y`h<(RiOAbq+NTRds1pH+T&T<)Y^u8MxTr0{iURfjp_8(`ue7kc5UOL& -R?2@FzezRh7;0DL|=kpah6cD_AV1X&R -?hly5*l-+_QCm3u|h6qBU&8yF_Z!u5RzLIMjN#~6bHB@qZ^CVo9yz~Do=7_?K2b` -TURYzL{3<-@NgF8zuFt9%}ED{{BIq&|~AN4AZX)Nz5u)lJqicLgqoDqv1Cpqv$*I-0m6=?;vkBcme<; -xjgW0e+-bIG64}cNbiEX{jEAQZFEs%9LV^nZYjpVWo|AFhu+@@z%UV1G-?0iGc}`QXXb#XGp?_T@MNyRy5r5(5&5IN+a)rpWSj2=Ns}Qm_&*_aP2^fx)YiG=i-mf&}M -PqmuG%{7?Y-D6$}dWy7wSQ>Zxy4Um4xF~-m^j!CBCx)$q50NW56O{Ek;F@IMOXZcrBoyxh~Gl?)KAw< -#}U6qspA-uozkfQOWwqE~r!oVXiDj9Z*JrBk`s?!A7MqW;KZjloZ?eV~?F1fG`YWpjwY=ZcGWTW_ -y~-sHV0!dxfyDU{F%HJ&OC_hB>w?LYAYgnJ6{%yX<8wQAc&IskUmZYPRL_CJVH_9d5WZ$p)=GlPm{Yx -HDB$x~&_`&ix>5t|mB2T%A7;6$ZrMaEV>P^_LplUjY!Wq=Ugg2}`&qklk-lMIBcgkN8p-9FdVsLHL+2 -iCu6Q0yblz&j3A51KPX>(#9Gjk=HL(Lo1B+nYM;%K=vjtum<}f>y!0GvE3Mpj*qrS?77z_9c6p{c8O4 -J)aC4Skq00>=58R(2SK$kf`3hK(1NMEY7Rq_R$C+hE!Id{m|C1b6f -hN!lx{Prz-%vb+e5OL3mmX6?KF$VOxNMRVmx3T^Gh8vEG4+;K@cC612^Spcl96D(bN1*k~n|-2zg`F_ -6M_`F48y=G7@%1(6RV5j~7uxP+Z=rY&}f=LuWr9OGc3hGBSd-emtE&vn8OR@Ok!>6F?H(Gh`!ds7)ui -^;+ulu(_XaHj@Ug}IO7$4E7!6ZzM_jfutR(wH>5n_)9Ll~)57}B8474&&Mm3`o}w)Zh6WvcrAt}>0?6*smt)niDyaK -A-?fBusT;s1U)mToTSGDksp}BTgStd<#;_A@>ZVAIPz6z*KN32-^k8p|2I0cMkWA}Xjs3zi2U&?(r2| -y~gCYEKM8=#4B8c#G&*K&ug%O3;Hl>m*{NEOWHGMe&I#S9-1XJ2<+gO#E)WlM;oIp5<>)pHSo*B@N2L -I-gMwaHF_JKUJL~vhEHSJIoN#!r`?-PJ=uFg%t0dHbDl?7>nKTK0Rk`)Q}m~`2Kykdc@yyF}Ddj?!`b -hO|9VC;NN2Gt-pt|(&Dj#;C?4J{V}H$y2A6c1E-oiNR=)k|O*sfjpGJr%;!Xpo#hSLBMKZZL3)1@NqW1=W$QvCxu2&oaIhX7F7uvRFr!jcXTJCoNdP-pk{{ONg>34;Hr2GIvK<&71y3&mk -7m}q_Tn()badCrDuQ1^IH^(f^?|68KaE_L4nTkUiu3)?V2}1G0Q~7D;oxaAm*ej-&l;pz1llEWb&gSC -#2l*0h=%pzXcepzyjwyp<($g5vfPf4>{6~|p6ndFZiDleTW1~R2)Bl7{DmJItJ=UFKi_V5PPR!o7zhH -_%2j|i5}PbbU@?jB1OA7bN(QkI21_hpvt2gtp&+C%@Un(1I#9QvgEyEmg^Lwb-oZ*<)Yt_`Cy{b4KHO -bh-WDZ7Pr4^YG9L!egXXw0a@o>`$+vD0I@Es<*FZSJSIzHGv -_<s;sqLldHh>5+uDSxs!U*D-P^ZS5L_!jNltA4!gT>Ryr>LX(u`Zjyb(dfR%qOygyomBC7_s -2DSA+h{#)!!+@Xutip=1wt13LKlTEYRlYjSC{kK^Kzk6gnE{`#~@Nst)ngh>dU~qPu4gEP*2+EJCo&U -guDZ(Zn2j)Dyv6w@+M{bnOt!gVw>mN5@RSQ2+uK#UPc3a;zHi?F!*TR)x*P;dfi|kZ!(-!4^$dDF&qu -r`Jz_M*l=Xr;iCh6dA1Ktj%g4_oY>IWwZ11(wJv-rc2J>z_?Zob*mHUcKxyuNi#2!85N2n`qf2K06fe -OIk3j|)*qNm6`bgwI;vhN_)r5a8u0U}giJM0+={b*%?z=ddDO~R1XigI5;`z9FbY!Or@z`!t*!ALx?( -#2ai>NPeTjZs>SQsN`(X>o`tb@G&(@I+oQY(p_}r4K6Z)^X9W*?EvmMV_ -WJ4Ss@l7Tw5+q`I@pWZzB2amHRxFV_N;Py!opEA1XY1(dkksTYWeP6a49_eS_`g>H7g4)RUN+Iew<%U -s{!n3Z!Bw|;`zm~xaY9<07JctUtTBFYqRLwt49wzX~CmuCGE#k -MAPDTZ&&}fM16ajqvL+^-}!BO9WlDS#{aqNZTJgme2nN>y_brS{N~F%6+opNO8nud6$qfbkh@Wy -9D@zPYkl>7#x%N-w|fx^uAD5gV%% -Eg3JNotVrVM>z#aRdi8)-)*c?wf;9C_?-p%ReRQZJ;Cf*!_yz)yV+r7^wJ*W#4rEL8E>q}`)uFZ^(T_ -9+iM+=eIv9MuIcVMMv4^U(_Zx(QZ(4*VwBIDk+e2T?DvUc$Rl_J74!4atBH`j)K8JJAjjj%T>tW$Ql` -AP6r*$QMzvA_9`fS}ZC%Iewns*BKYG8FHy2fpzX5r`Ns-%3J38xLl;9Sy2i-7&a25Ko`NAf8&p4#X^%Jc%pK{b1z6I}mm`Plpny&MXq?c}Y?| -k^cFFFiytogvN~*Y8diTGDX)V{gW@x)b(!tK2WDgS8+J9uLpT^wfe%m8)3?gExxl*Dy3Gh*1ORNq8tU -0Q+?12*m7;Dy*WRp7TFD@2WfUxc^5{%q+RK?d>>`co7s)mYS53#-f&jE%yB+H`>mjAXVx$RY31IA=#J -U9>5zTPXw>5o%ENrm)4`WQ9DL{+vy3=&+IQ3Zr3-_)rNA=uJo+X$cuFS`a{mfJ>96uO2`spuGkS;iH+&k4R%FvspP -uW0C|252>G5^wRsu)&~HJw3_*+|A34e$qu*0D?;JU0y8CA}l6FMImeAo#v#vtu{fSvcu<2J8$mGPuWO -snBwIL-Ag|%^6X;6`}*}+ccJMzLO8qtj+ss-nq&YLJud(bDEfT=gE*nM(3?14^ -5ejAa2_>n}W$$-q=A!$fEFZlOw8v(v&WKmZFBgVsxuL_r!SOQm9>SCj#SUZg5~!^p%^9-$jUjuJ6+2Z -pC;MKire9aB1x9y9=`;TV3U8&3n(a7%a7jjCYU%nUulJ>Lln-!1;j{bQR`0Xn`-Km=jLCfG)KC-&nju -r>+-J(snQfP`wp4+D|y$Cpqh{zJeYaagA8q|Ts*1JV#%hX%A9L^r%_H!+CoZUkxu_^Q)6cv1?$7fg%+ -`l886Uphf0`i^P`*YY<%+2q$63{LrIN -oA1&h4bi#c!EnrV4mVr%LknX2XQ}sOhpC#*Gdb((OsHG*EDkE(9FqSpM=X9d)UaMUfBIK}I%BWRO~49sf}LWPIxA>jJt>2oWd-9=dv3NOv(yq7zSAeRa)nIL<;pCd#oNm=U6 -@RZNiSrd{EOv;M;h4P!Jz559B^j(e1$+|~RYWZmuhf&gk{+YWW#?SS-p$R&tx3%Yd&7VqGqp}KI1Csz%uiLI@137=6 -;`H84Wqg9^MKd?@-7t89`chg-IosAUUyWJNft9a52MW!c{^IRjd|nGPty;zFoi@IuJVxx1sUQ_yFw~ -?}3td@Nn;z|;J^AysBiXAS$(5UV8?dC(?JdU`$|AEYBp(-2j9Rqk)Q)c~Rod0TM{Niy_rYJ>bS>n{h* -xR`YDsw{XhRAktBzgi%NXv_of$Ot_4cxUI(snJ1OCK4$4Htc&rE -oo$AI=0pXO*&IsmRO?(3hb5e83T@908`A$ye!$W?c_!xVAhQi$I6yQDy9-_P;*W+a!VeofY30a7mmsb -=7h1Q3e^l6Q$WfyE^}{VlH~H#);3dQ1S?IkT>`6AB{PDh63;KGY#GTx$dnX?GYM|5^tPh{gA2g=sLe(s;e;3k%v -q`6+;5mx%F4Z*~mU$BIIg0RS-OxoCQHBRroA)Y;T~On_4~3SQSasA&ujJpfNkfi<+qm<9kXXQ3&88b5 -bwUQKyO4yUG+L{e0etm;2$@pw+EZiyhL+gxOr2@qMu4+6LL$&Vuv%2K2``mgF;K2EFcHC6 -&jpWQR$;485*N+&A!t!#ax=h8RW7m`s2I+Ns(_7AXT0+hg%NL5$BtY!&(wl@`1)%up5U^37td9gi%os -4#X5i||5$=bewteoLqL)mF6gTs9|_)>04?+QP{og9d3Rb`ATF15Cr+h`AGL>yuS(f{KPuyt$J9-Ph5s -j*ClB^l!8+ppS-D;RG@snwPUp^Kv6%gGjUNtK)NkVFiI1PWX+ipUdoj72E)2QrPB8~@{pQlDa!$~}+E -{lt0{kjE?5`9!Jz1iz+fLvbDLoZSMifciHyM(Je -yL1ZsI$t)xS2~rH=={Sw-hKX@o{$+_}oS90pGfH@39w34W(!m^vQV9w}<=zwn6xTBXwt0eep(pIf$O! -p`#{&Id<_bSdsDZ8|v2eF!Q0oIkib@RY}xl8*dOkI*#RqLg%i=q?43m2x|OMTR2K2<&z1l05lH<@D8M -{Nf-T(*-6In_z1tcK{Y31W{t+|U;nN=Q&QoVu8e7;A^F^k<+(IUkZ#GU&p-9gqp9C8VqQa94bw`~6H8U#g~s$C%VTFhoxrVxdW+N_L_;I*~DI{V|WWX!2Lwh^uh&=bl+ -$o*N-i2waiRfcvbuC#w7nf%R_%Ab4&rxRz>kqUTCW#TwZ|_H92cJr13TwO(J&`B_m%#2b)uBF!y|z#-&`%`C%>$2--sChv#bPH!3JWk)r`>+gSfO&EksNW}w$m?T%`7iMpM{E_`U= -ajw1pHMJ>Bg0@vogIRpD3SxYCLEtt8#Vo+ZnKLd@{Ztc>TT%YP=5JMGp%@IKch*alK8*6X+RINe8bek -fnb$jts;18Nn($lHi+oaSiWOY@sczK{H?InOt=xy+Mx4^$eRNpiUQ;#-twu#GLy9W(jAXfl5OtW%vyj -VBov{LPUE-#kTkjMc*_CQ6)^clM2(En{78wY=)OoiTnX_j@Rg5Jec&lS5k(Intn8Q_p9}GpO(H3lpZ-8@4XK`+1{xUWYtdazeA-*QPCp{{xx?%m@^40=U(jd?Mq#h5=$5j -@6aWAK2mtey7Dsmm -g2n;?001-s001HY003}la4%nWWo~3|axY(PVRCC_a%^d0FJE72ZfSI1UoLQYjZiyo!!Qipa|!|->;Qo -dP#|N6E}gmyicPmdB~hSgCqdD>SGEbg_;7SGF17phYc4i6;nHQHzr -^mqC?f~>{;3PaNV}TeKONBvT>S_+4i`!o4vW7pg|wy3b#`jMtJ8D8~DVLZ4%qTnL;BuR -1)JH;6>PE(U{a7RdF0h3Ykj6Hn#hUswS1zJ#|{cvCJN0S7c3JuV3;X;Qv7j>B9lDv0qS20|XQR000O8 -^OY7yE)(3O#svTXiw^(*ApigXaA|NaUv_0~WN&gWUu|J>Yh`k5X<{#JVRCC_a&ssU13evtqA4;+3F72vZQE=wm_B%j6^wHWKtt(JI2!gzB`hVB}YZSOh8~tyf@xG_waH6&z?MkLX| -=;j$vi1XRqi>G?`3JrRBQO+``-WTX^x^OW<-Xw316MEi9S7d_4`8a0an#YEHRlcF)78K(NA~(wu{_8Y?`7THJAnkFxLMDJTu`M#vXOF_k-t@|g};RN~P7Zvj( -m8v9m|~zTl08QztXmT4`@WRJ#JtVDdLxvx(oK=Ky|l*5D|63AfD9d0?r^Rn4bxv$8z?WXygB{!#~d1lB62b86k%M-G_PG?K8e<`fZGB^FMVShwk1wj;E8y)$gmPW -WJgb@ND?I}Ix0d{%qTWW2^(Q=`w>1qQor*<0*0L*1ETpk^?yGh0VSvrR)cKqwKhsU?)FiI(BXZBuIWb -=Mqxwh<8bQR;P+ND6g^kSGML$0&TGJrTn;kzIf~E|fd^?D`N7!4!6&=pTa%<|*En$&lLQLx;OHc;@Kd -Ha#$50OrH~x*IK4*vb=yc0)C41}(zXCH&^wR*LN)F}2*UpMdG!(&wYp(7)?T>wVtShqZT0$wc6{(@6c -sfy22L*Df4mizyK`YXXXmQq?=_Q#(#v)5PQm2}Z(;L1F}$wuO2M4E)b@ImcCv1RE`n}-0F*^eR0B(H3 -|n9yI>nQ-vx|@O*C_1*_yu{5Y3v1h`B|y@qVek!i~WoZ61L6>bZ&K~Sm{@nR(n=I0MZ22aP2B@2A-Y< -S0^&)U36;RyD&&{Us0a_<8^(N_{*; -G?{*WUF)<&LWh@0tG<&l%%i91|Ys5)0wg%qE{Q;7eH({y(kc-W7?I(wAey~O7o+P+wVH^@Oq7C`h-^E -HwOHYID-fE5M8e2{y|H#ylssJ94CChj7c(B$UMvu5>*XQK2TGqRV4bz$#E&qjoh*Q)Rw*E;FW+aF8CbMlhExxa4@@=03F~nfA%2Rrdjf>7@wc?CiZ>QI_%o?-@Eu`~*>VdD@xcW~*3x_%~Hh*#dKpT@%+_dDPAhB$f}B=`1WqJH;E8I43uf2yM6_`ST6NiUokU5h -va<9)3KB7t7_cwyq6u>p;8Ix?KKi3zpa4Y30l?7=kszhZ5-Vbzq#G^U^Y{d3S9+=}BkMFx)_A*qwVLG -tsydcU$?w9prtjo<#!7vwX4ilhx99jgPiK(d$hY2S+1>XMq}d8rEbFOL7_wuiXu_E3J%r$cnQM(O?sN -=AJ5%cKXL)0RFNMEW04O9KQH000080P~d=N1Xbo@2&s<04@Ol03-ka0B~t=FJE?LZe(wAFJob2Xk}w> -Zgg^QY%gD5X>MtBUtcb8d2NqD4uUWcMfW|$q#JgPE?k;uhzk=v1DVtT8lclmi^SVo1QHi)|9gM(M{8Z -8ZK-6RgnMv9U`cTIiKIqLMyV%u1TFz#{6OMOsf7oybJwoj$)%RZ1U>r(JPs5?z7UPlTC1wUF=MGJI74 -w0XW@Yo*%uknfUaK%WpZ)sg>7e8ni;=IVvZK!V2(#~DwO&SFq2>iB-^V0XI2AW7}CCRUC=77fAsrqj@ -1`XO9KQH000080P~d=NAZw!T=@h50AvsV03!eZ0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gJCVQ_S1a -xQRromWw7pLUavTVx<)DYseXFiQ) -zHc-Z=SFGEj%{69rKDM{j#`~rBbvN;g}PEY*YI}>#+sa0ys@AS6W-~U{r>Au{#oaim#Vf}NeQ|)dgSE -^9>e3_j-K`=pG0Y$S@-fNBwRFanixgO1211bNEF}y_m%B85d74>s*276 -MKVLN8PW`C}~e%r6NZ2jr!x2OHn`mfE(xm0juMImZoiy|{1k6Y&A-u

*gBKZLf+9z?4Mea0brp5|G&_HNytRDT`|t-ESw(p(?}eU=q>BpmaLQbn=;1;=_jz -;rK_8p8c}_v2g)H|#sGbBh@|@mHV?TU>-a?fLW2N?d+Q)nb~@!0QBvJ#mXIVT}+6fZE513E@&B-L91 -W&V(5}j-$*C7%l)@n^cjrU-3p@u{7qE$bg;~j=^ESv6>Q5B_O;WqW*=MaO-0H{vl>$=J$T<@wmmraIQ -PLW<;J@O*%qXv1t?-GSOwZkI@y8X~(GB%%NR{xdv9@8ILTtCzlF5d|olRgW9N2j3?Y1WsEq;sQn)lmN -Y9B7E(}6JeHSG0>E#>H3AwlQ2&kycx2F<1F-wMyC1O8XxJ>&Rf7cHoo85<8cIihn&uoK@Nt8a=e)E*2 -DH1Zf>KpjMl3AyylX0N`M6cdzRnUwiwH9*-c-C)0eRt96CI`>@9qP_SiT^a1bjbdLGqMLoM`=%&19(* -vu@a9IHRcJ3~k1%=`5a4wijD>o+LmHfB-;pb&Xf`eRpapj+03*&Go51gL&?HV>awCr2!oH$1@ClA$U1 -()_*DZ9z_R1s8a$f3gvPFKQ0-I3_D{FGrj?0MNE5!>J3U3M><~Z=1QY-O00;o{l@>=5s>bjv0RR9N0{{Ra0001RX>c!Jc4cm4Z*nhVVPj}zV{dMB -a&K%eV_{=xWiD`eol(7RgD?=@{S+rABBeY)qzwI8B1KV$?#Q)|;Kta@0zaAc5+DQi~`n1mhkWYrIK{2uQ` -!#y0M}@d@L$Tx`Zypbpq6vq^S*FJL*9GxY2>mr&QMw2)ccRr>h|E>G(#E}mWzaK-zS@xjkF}mqdOk>W --r$T)gpDljT}W<>|5*&EbjQrP(7L)|IZ8-UCS@bFHEr+D6Y%y;Wv6yrDcvj3e6Yh9$Md~fGhD0P)h>@ -6aWAK2mtey7DvLpK6;V>001`u001HY003}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PZ*6d4bS`jtl}^1 -5fSaW=wc^&)Jt{am -?61Ib))@W{_2_R3Wlq0}oJ30|XQR000O8^OY7y%Rm<*LJR-^j3)p9CIA2caA|NaUv_0~WN&gWV_{=xW -n*t{baHQOFJo_RbaHQOY-MsTaCy}kYi}F5@wi&d?pS(ln^YGp*umbGGy7VHjInG(M -@LK~e9hJYzcgn>o>l<`7TIamJO$WjcJsxFx*xh&Gg$U-ysal@4sIX7Z%{uo%OjohU3TOd)ZG;F1fYBJ -L(5il>f7MGP4m6k@{idQl-jzF66436XA@WTZzxQ|*W$qV^M0Qle+)L=09_5CHA!C}&@E;q6ei5h-NlB --YWhc6DUpN-GQFOtJUc*oa2kKyg=6FnvWz(==skfiu`I0k~bSlUC*8zmF?H$ERQ_<`tt!DY=j!%Z74s -}(cAw-PIH&sK1ziph$-+-yJ=@}B+3>Lq*s=7OF6_4~7QKveLTXgFLcCX6>`je2{Sz>a1;VIVsNFH6N& -rKrppPS$0`b3%Vts%|zKV1S*pP)nW(W@@GdsB7shkLh*Y6geY3=L~GKs!iHC42pd|mz6a0d7?$JoLK1D&vh -l-^IRCd(zB1Mft6quia;DI_(N=GQZtK)I|j3Ig6Tq9(jMNvb-~*G04jO`(yc)PZNmB+Nv#y1-@H9uql -&6lWs((o!dlC6V)z+8SvyCg`t|)=lw+m@_!^j;=1akD!~=OY0uZBKdjAcx!XKy%G{Y<B-)%Pv_Km -k?lH-)CZDWL+i0cUAGg_(Io3WAFf%;3^7uFN*q3`mM)+5}0Gxv}pf{OGMH~^6F9H9E# -UdDyIgHhe8jw+PGv30iqWXK1LjfjV=o0as`&2f-wmAml5_ -^dXkaLAliTas})+7&F$u}J|d>3j;T>>fg=hsQx_{om=PS$U7PHX> -*91Qx`o?E2}Eo#bh(dL0pmK=P#>6NG#QPzG3F?%Iad_+t~%fGXPOOU)2n;TVz=JUY*KLu8$C{uqn-R9aG#&qjFz9oPcRQOyreJ -8XI*~BeP^-QgRX<+bLXheIo#VG=Xh@^ai373%G%UWTH#rwVd7qDJXqEG&xF3kIRZY->+zWOUa0Gjhjw_b@e# -%z?3L|WmU4`Xq)cR4^nR>g$JpKs9FsmD5^NeMH-Ej>kHr*U#Nu2kMCP+J`dI|LUy3#c(gwei=k_57`Fh$8eQ=zh&aRX3}3q*=Z3nrKTE@C%-6uZBsa(R3wD5_CK6Xy#%qvYV)+yMw-i--_1wY$@1J!pOoC -1+atW>Cy4TBjD-FQsfe>qIgKzZxG4rYGh*T5r6|M8mu+zMzs!s?oO5;635~&vjUCqp>$Oe`V#1bpoAF -`6MRvKAp`AN>Hi|2ET|xPq!AwE`t#_OQAegB3!A!zlqiK+rnOofu1#4Ss%7?$7!rY6k&?4*l -2VU(8x}8B3P?UPk*+n+e?UK@cy2`cvMi>2>Z(st?tWt2kbXI9ReZ-*6WkjgQAFtLaf9s7{EecN1XS_U -`%k`2>|2*{0?f>4iH8X+~9GJ@E3WMr4%{U6MUhn??7_cey8|fQ~=XCXQ5N4&#N-&XUWi+C%zW2qKxu# -6s#MC#n2ogA&`ccm>f-rg(+><2?8JAy?S@fK7t?P@zEmXh-A)!McP6M}`iLcalY~Fy5Q~{0 -Y$B-E))(Q>meUfkJNFHR_#ALbOb_NsN0j-8f@`NDXn_fk7irhr+N7MkMYx5+_7G-bFz!XFu+*pgs0%k -Lh~?y{Z&wdrUAoG&r0eY&)|Bn!7{yUC)siJ8#*pGj~bOIax$`kGa@9i`_HS7G%JI9xG%ijkf`a`j1pR --9tex**@i74fmAWl??X$?C+R}UMp3rCz3rHba|E4l;EDuEuhS8CXAR2WWJuwnBGx8GvuEeS5CN4$F -`!)mX(|Q(nyq!4=j)Q2cf@_~oqlXhw{6RO1ByseGmse-Gtx>Ea^GHOq$@>rP?adS1gTuw3mO@G1xGPXovjxc)t5hz`6?@(}Ure&SWr4;$sZ -S|AGnts6K-repklJx-bzE1HGtzP#$_o=+A`AJCe6Sk=HhyI{AZgpS!D-_C2z7=h6P68m6DpdW@Re*

&Te{plpUXi=mOn!27HqxQ$!DxWreA~BGzO>dtegc6BYDC4WRp(02-W5Lv9j8D-^DkQ|?YC{IS%%Y&uNoD!sE?y{S&R34qU%RuenkNb;~rf^wI!GDg7K -mUyEBTG0H#f?uo1<|CmvtWI@S;w1qhs8(9(zoyH*b7rNxCs>TQ?}kVjF_`3fapelsU;(@CY1Fc6VA)NY0@di9&ME@A1EJmqme!SqC_P_dlbt2c$9*X#rCUi -Y)wXVN1Zr?GY}>S*HCoj3!J7=H4LvkSz0;tdICEb_@ZGQxFg)*)+ThVp^y5ZSM1T4-HivWBl^mByq(f -;Ah%T?Bgt*hrzrIa%I%Q)7NhsSUe)0HwQyaVh2Cs}ajg`*(x}4t8W%qFh`5#np=pNEEylNcy2n-MB;5 -y!y1M^6abvmCY^Y5QGyliSmTs-`4k!MnN6%3cG-Clvg%v1^uuH^iM(?6DkwGZXL|i)9-EB)_=VW%6h? -ByJEo#s&{Wun?rGDY#ETG1#UO!dCsVR`Uvwn`bL{qZ_?E@5$=vINosy0UWV{qLGFyD3s(M4!QySIGr) -i_r2`@(TI(?-Lz{uHyfdp|5;gC+B}!|IPK_cd1MO3wH?=kndCj2CF?5rO`KAqu`W6p#161 -pnWyZ>#-wS=s7=QS0!L>A3$)`$-E=O`}H~D;6a;GGloox`nrS*x(&OH2j -Ry{C!q5IViuai@O(8R%ShHt?hcR`T7btwaV^VEnPn*HxqViZ)Nc*j;sM$8d2(G`!W=*_9 -k5Hx{jcKj-BRy5W)+G=HZBLReacR$7HvXx4PSVKwl3bnV5b*R)tTGMfg2Y{R@%2$5Ir<$6HNk4|ecxP -)h>@6aWAK2mtey7Dqt>BlV#J004Lh001Wd003}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7SX>4V8a$#_A -WpXZXd7W0lZsRr(z56Q$$ssn7%0-U>a!9vbpqHk=7T7~k2oyE4xTZ*fq+B)fZB>l)Nm*Mdef(@Je+{bdIc$CPjdj|+YzVK1hll+6r9&j0#t>4$53V -LfO;2Muom!(?IvGSIX5tSHm(&_}punmome~x=_ -^(Io?4vY45qzH>{2A(j5s5DvB^*0fS^(erUFI;ZKgi>vq1vT0S2KA4)!8EGlQ|3>+wI^Oh|+pBF=Z*R -UG2TKvC_7%3dL&_5k0O<&G@s6}&!hW6l&&cg%3kCrPWcHZ?e-o(siR)&2x6W}d|)eEw2%LuF~4NoBc> -Y@27O{yfQX?UTIZVNsS)fL?E%-tN|q(Xv+{tbd;5eVw3}`460g;6%Zxju)vPp%v4IIt(fp&fPeuP^kl ->L)Jo4;~n%1VBT(lzlPw$XjRy<_8i?)f-_A7!|aimynven%4;xj3l!rT=^dlj0agw0)3) -h+umAPpZSrUb1IkQx)%9$$$6Om^QT7*mGZAyK7+3#zwW6@&{y(@e;?0?$BlR$Tx_k4yyV?@?SQHaDAG67dQ>U-Adhxd9!=&>>Y8Y9A`f}Y~igGF7qD?z)6=PyNG`G -ZkCPDn)|fs;XO=`x!(MTEF-)BpW%_dGJPAOSV-Eal}5|qD0JQx%Tap&<^6@;>KePFWBB)Q5Yvb)ilSK -S`dQh?vzD@LuQRH;^eUn(w5(N9b2Cv?4oBd3YXV!OI0YDYD`$3d8K${~+%;`?U-}$%+a~wV7nyDW+eK -!WB~Ryex5zw+2w5>|GH`i_q{ghyGe$!ztZMSmG@Oh~lT1~1U%rD@U?^Xe6iP57MT$ -j-*3XLOq|?a+&k@NnWnrZ#lgNI}xX7_eu_7Z>Vj;=VZLGdoW&NaWIZgLGG9FUG6z+6ZZ_i)HZ_Za}iM -l;JLcJ9A)~NR{>YXim=ZoGa^w;^S+v#*tk|A>^tFD@pwycs=X*{*J?G(4;*fxR@vkrYVK53G7=0112CE}EG7B_OL9gkL8YQez}H_% -qOI29g4-Py1uZs#BrF?&BU$o7y7lN^x7+piAL}?Uy2gyAXnJ$w^idtM{!kGxEE7T3`n}o`NOH0z-Uv> -=R#N4pP%`ZJw=0ly-Vv3k6#SZ|Bt?pIgc;*I=Sm_*uLzn>XI^=$RJn*E5M?r?L}eitn`owME53AP;09Z$G_Tl2)E5LJy_s~^E!m5-Y$ -)Qm`w-c$j*ROw)ZVH<1Ap)%0VeGK1Q=FppzD_u!klqn0xH_@|0^l0)%*gp9`=B2{^!twnI9!%&e?MNf -QY^4>U6f0t&?QV_Mi5=IX~$1ZDz -m_9K)*m}rfYE5r+9eC(_nE0uH`fvxj{^d`-Gd;)dP!;|pDC;?FeG)cvD>tk3jmb}1gM(X{C<-Ru%Y{q -XOPRUWqA#hD}YOA9$TL`5o5h~aRA|aBLTocCOZJ6_Klrd}qBE|UPQcxW%+FO+Y963qA-D5lX?TgXiinV5 -!*9wDkT-`b#rPf5wf8yGGJ6m1(vI5&x<94PQB -%E_7)BKGV&W+vYl!c+|9I%Hy-c;qfUr=FDbvYTvQ*-6CAC(+=;lwKp=(p-S~WNUx=B&VG1w32>6KjA5 -b=8W%|=1Z+BEywPjS@l7xp8S$}k-3U6`F#(Nlq0x$~(aIp(+k!|LGn&;$OYbG8MSUVf5z>7DhlC-TJ) -cb4yTdz7{JuPl`_a`mL}w3>w@uz+x&v}Eut_B{1D!kl)<@!Slbg4W?FJ9B*Fhg!KRSDz{{c`-0|XQR0 -00O8^OY7y3?_n=#|HoaEf@d*B>(^baA|NaUv_0~WN&gWV_{=xWn*t{baHQOFLPybX<=+>dSxzfd7W5o -Z`?K#{_bBfC*!bMpH7#TqPQB^4{e&><$xx|#b`em#+s5wUdCEc6{+=Yi~RS_kkpELv7PH8i1k7~oEgq -M^H6f%sMbIxG=BZnnRItj^;e&?s{8BTDw&;~m95%CBb#)4z`9Uv+TyPrYNJza+AcR;iyHilH-!4G)>v -z4Baw1$t^N ->Rz*u#Hvr33EeG7K_&@x_v{Fu__brJH{7%$TL+OH}6%AetBntd%NACD6rMAS=!LJAC~%I>$4MrEG;ld -4U9cN^UuE7oK~Sc5=HD?%~fr%Hk%(rr7-~H-#NVhaP{^QzWL^_peftH>pPHUg5iEUr1{xDa(D-Ys#gYf;(#E40&U=k28@EHRR>(0ElmpF2`zI`RY!^;mWtpyO$#oLzs*IyL-w -szRa(jlA6n5g*rsm?Artxi5A^I8_v|)V#IVlpDbOHlz_R4(AtNb@Z0!z#VabiUs3;CsyJgF7mlg!QW3 -*hhc_)o_OL06QJ1(Nol7@rJ%i7%(+FtwJ13SIe-5!gCUo3)<eRap=44nklS=L?39|@vY||sD*cX2@ZE=)jSSMV5Ju2|-$%2fetL8{ -d1K!)1ie|HH^xrp6MT8moPx`4Hh_Qel;ZB!$&B_6L_SNCDVN|rfdj{ETGXjDxYzM~;*zD>2-C5lClvQ -&Vd#OdrK-cR{?Wor+yx8KM$F44sU3tZH%D077n64f{* -DaeXb*Z72R+eeGUoKJrDP!=i@P*(lCidz}3^?*DFR^-K4syq={F_YP_4g{cb2PHio;LMahrc_zN4&W+ -6X9->%)*8*7|xL8tV(Lle8}#I}lc7{a%9r)~Ux4&ukWN1e#E06bFpQ{zQqC12A8^U;4ket7>_pyze;h -4sVxa$stzm9gdmQlEmuJfM9&g)7f$DR8#e4^a}OpOmcQ>v7MF@_h3u8fPBsGOMR($Mu{SSi+^Q{V$e1 -o0d@28qo@)TD^&B@dTpFhn6sHRM?U^&r -jebZgq -<~$wEa=D>=971(h8s&AKU<=%I8;BVvYdeX0dd2Q1hU -U&P9#;VTrn?zHFGIux!W+flrjg9a1-(TL$j|M>=NKI#we8CJH@>BXkl@g6CV+$41#Q0@m8)CLCr@|^fMJzd7QOMQoOt`yn24>r-G -npd%CtF0(^Z!3D1(?4nk?TL`X3W=2XLEiMBliRu?PRVh&t->^FJ8M^S4ICN&tQl)jPzpyI?J(&wY~?b -L&LUo_E}$Vi;K9HJ+E6CAbs3)}16eA^aX*GNbfte+#YxAjo`Y{jTs_NhBH&4rdC9sqgEPEQ7HkoeF%Y -GdEs#j?cKSLf?^$j7^XEj>GwQ7Hu8z$UHOIPR$497| --3-rop%x)dIlKf{?GU?99P0_3JvzcqN1~b6*DV=JNqx(4aMSnyO;C)71`()y@P?^wVGSEQq^ -WS|Q~j5^8snw%#J;qVqK%GCJ>)xf8Hb$jY|2NemVaRztX8MQg2yh0tjw-8J@mk3BJVWofl0l};&g{KC -!Y1;>g7$7(&-PGSAWGtdqHH&!XcQ_PIxj}GG@7Z>w1o60x)HODjii)YmhoyURuR`AjDbjk{zO}|ovr>Q5GTsU4mWvc(EFpUb -E@N7)_xyci2J$u@GHV*&)X>+{x7o0c0u#ElyP)h>@6aWAK2mtey7DtPF#X`IQ008m<001KZ003}la4% -nWWo~3|axY_HV`yb#Z*FvQZ)`7ja$#_AWpXZXd3BIK4}%~O#dkgho0u5gO&A(Gck12{JS&NcIgX{Dz7 -hYRMp-!We)sNi4ceaPs#YTba?_6%iC0RuP}zadc8^(NO#ti1$B6Z*5`b4k3bBe2UG%P7aNTQ!Sw -sA-9LZ~Z_bX^FZ=1QY-O00;o{l@>>y9aj9y0001S0RR9i0001RX>c! -Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{=xWpgiIUukY>bYEXCaCv=@F>eAf42Adninm=^_yI_rDk`xQ39) -plqQobx-X)Raqww#W#J(r^FTk&x)UwJ&q6*bFm -!R06uZW^B2nha5S1O_{pR`BbzS3M`{Q6W2IloU-C%&(x-d=zePoaL8(hf&3cZM -dfT*5Lj_$i^OS8fLh+Wi$iObFsoK1;gW66x-t)o-}V&poF6XH{?Dg4RP_25$>wbS0Z>Z=1QY-O00;o{ -l@>?Arw0F91pold4FCWw0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{=xWpgiPX>4U*V_{=xWiD` -eomXvd+cpsX?q9*VA1Y^t5_DS!7znT=O@IPv45Znzq9_DfIz@~nQXuI#9{S^VM^X}HC)+T6u_)gA^W2 -dZO{=tJ6*pBaRukcu%1kDuRt;-Kn`TcS3#HRqqqY9WUCJdi9>>iks^^R@1w9G2zr -0K<0!Z6aBGou(;V!|>ZgM?EeOU_PN^9RFDv0~{myT4uDTz{Da2kz6w?d91W`|cN)e_mX(t*C2Oa#1r; -qAzf+7_T+(V#nZF7;Bv8t@jnIc|8}+k%aA$Q#0w1jA`dx-*n!|pnEHXCCdtS*9%tQ|{pF4-eVn6+pbuW*k7r<5?*-X0OHFY`EEVj9sE -N%v1(6H^#V&x0||a|}YsLRg_BBGRID>H)h2bVJ7bGB_$ZIFW76Guq-ZSOO}6_q77FD-0AVqSQCj#)?| -}g;rQU)toU?sZCwP{pzEjFgw1Z7%~N#)@XmaIRsj6cYh*^?^nm_qeOoBjh$FQ(h~BTq;%Mt^1IcIndpn0W{Nz?~Vpii%OZ769pLkXXrsFU|6C-dH0|DbLs@GA-seKP!(5iX}Uim;{E%!TDXU ->v;}ge6uWY>3_@<`^=l##@U~7%p-42d_8aS|^!aa7m)Xm67#5i&i}VwJSpOT0mn@k?!gK@fjHy2Yndu -$jqSy!X)h>L6QD_EE1qXf$+As9iXHA@Ot1P?1#7U_9)6>G4X-^W-PZNZ?J%>=y?S)M?1;$?4U2g#U?c -sfA{X^9JV9P1iU -_^ksbeh23WAl+SV+Nj~|4sHY>d4G{-o>G$wuQ4!3aaITprjz#PB-sW(G;0SydSvyjv<-sx$%wyuUavJ -)@=b@9u$8T*la^~-NBOp%t`Dt%PKmm!T>^vD^EYK1HgwOYe2Diwv%MMm|c-I%9Tug;Ud?<9N0jzS_D4 -;Sgt!c3Gu#RK*CJIO;ijqW=B2;3M=t@ipGH{4oSWi-e0?FF2af^kBkx*8x;8 -NtZk>$equAKI)F4VE^Hy_GovfYhS0mcJgkhScek^Z;<|Sizfij?S|K`c}FtN<_i~WvgY!cj|aeuxX^> -3cuimX0UCeR`QMz1r_(|4!!5|Si2t*&(RF53M)778e}W(U(UV8#)^s|(^;B?NDr|+Poa=Gg{Qd -Si_1U;7Q7G_dM}Kb#`kpI4bmrYJCWQIz{j2f+iZYCgV)F@i%Zgg^QY%gPBV`yb_FLGsMX>(s=VPj}zE^v8uQ%!H%F -buu>S8%!1PE#-Ih8zm?w98J#FkojvvFKW@ECmwNHvfL4qxfT6bg*dhy~hvJZ45mq)gI{>Q7N$fAw&XW --)yqM7ey-oqY26OIEM3kQ4|JSpg`KGgiY`!m1L@i0{E;}tDh(8f`|Kh2TkY?n)Kc}OD7Hu5ZgkhlO~E -x+rZ62=_c#QiO2UQ;md -Zt-c|7VY;ebo(<#9(G&X(LO^0RJzhFaL?4Th7QObHtN|gy+yW!TopYMRj#LC&^;fh(ece$;m?8&&9eMcck{=y{xXMz>jm1< -#)|G)tG#2)SzS1f5$ZGX3%m(jYAy=;*7(a_ygSmBeWr&A=W>Gb`GdRNsz#L(9)0I>x4D@P6+Rox>2Li -N8+F5(`BpWh#HfHJC!ABWp!=dSBmC+{=4WI$0oUX|9HlK08mQ<1QY-O00;o{l@>=YN2j8v0002t0000 -W0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAUtei%X>?y-E^v8Gj6Dm&KoCUx`xOfoY2p#R+CpPQMQkEihC? -@I@p2pXP9^`|_ytzOJl@O*a_)MeOA}$s-p0mySX+q>dzfYuqhV1l!HjcfZvny434Op60wU}-d9g1GsL -7#LwQviXJVmmO2AA57CBloOaK=x{JHN8^fqvSGWw>3~(=~-M_HHQoO#;iG8~H)rOn;O4fDU|oA*HJ7j -uMD{Rly9BOdD+yrJhhr0|XQR000O8^OY7ym!pF1Gy?zt00{s98~^|SaA|NaUv_0~WN&gWV{dG4a$#*@ -FJW$TX)bViwUyCw+Bg)3@BI{K$c14_i4ATu%?=mFxCtqN4v@)qb~_%`96+s+8A)uy+pi=$7>7}3bFsb -vOP~IuqvK!F1w{Go!0CD;;Vx%HZU}>0!exdB=z4yy1B3Yxdher*>;*zbQ)B|$AP`|ZisH#Uh84}QDgf%kcM52IjG9N*@A)KTVIi&egb;=xeoH9w-TJ>Z(H(iQvDI=NaICI2n*hsm%zPv=%d7 -{7Q4wsa4a=yOQtxFv@L6MRjCOW7|!HLvleQ^KwdcD6~XF88wTHjq~5RZ$Nccn%;OI(?35}7ADKhe~!* -0lrb;VAc(~JnUG$v@I*VD{@{KQn2S{*n^D5Ek-ngX*`yI6IJ^|Q)3FtSCU43@Nr -e#-SjSHN;7I+6pD*> -{>r0@%f0Ef*1(_~iBWxUn!|CJXEz&_H{XCsLhO^;Y)KR4#gwdC`NQag5>vUc!pZk6r4!@TljQo#A*?c -z5+eYC%^%W9H)n03w-@5U%bJf_c(HgG)m4Qp!W=MDPc!*zx3JkapZ{o=!JOv*Nh`xoBSBj4YJ -l>8LaUEQh>CWRt9ei>Oxq!t6)yYRV!irFy9pDMG48(r7%elm58-DDi*{3_TLm^**+@LBSVN1f79TQ|c -y18ALS|#zHCj2L_0;*O;w*h_yOs$TJZUu^38KOY%bdHC(jHN(OfwESbDe$2Jx>l9qV+BmDj+0;23@{+ -+FPi}Zn*jow0Ro!=0-FH>n*jow0Ro!=0-FJX|JMM%XLEq>*(~6DHV^oo%>=$@bAj*KY~Xt~ANXF~2y= -PJUXFs99$f}7J;Txcv6@BVlj-a}9G5-as_;oT))%wqIQnQ&Z`HkeJaC}pXxp7b)7x@PD(AH5ZaKx>^} ->sbtmXU*P)h>@6aWAK2mtey7DxVZxGdud001r|001KZ003}la4%nWWo~3|axY_VY;SU5ZDB8AZgXjLZ -+B^KGcqo4d97M)Z`(K${+?gK+kB9mQ;fWPI3PWva2#)&ZJGi}id-)Z1VyG}ZDmqRQcZn(``>Sdq$G-x -72n<&D595{hcm-xhC{0RWX6k)$eve<{K8qHRtY2T6QOdtAty)2r(<${dqGYQXL(XeO7bkFOwx!*O3Bs -bY<_(^C(A6SXOU7y`|u5GESJxhz}y*G`u=b(r@PKR&8>4sQ*~Cmy9VY)|K -Xc#_r%Y!iyQtxzJah!s$sR4mXQD-`m@(U?$|6Gca^%Uy)1_#+810wnyOCNZPT&5$G@I5=7%9R%#PUC1 -|o98F@ifDHvHLGEqv{cM%CPyx#;PlCT9aPsiq&22ArrO7Ik)-;1Ous0jJfuQXK_HwXg#7hg(}SO^lzG -F_2G!u^7mY7~(qRT+E6M+s2^!dxVRGDQl(e{9H-3z9$x5DE>$6eqkC8f(VccPb!KBx6z~ECnLCW@EtOIAfWL<51Fk34q$oMMTm{*Sd>w1RHfn|5!N`Sxd+-Y*x1tgzO05V>)^N#}4o>YQJZD6$Xf<#ZLKEh3t%BB#;|j9@a`XaAqP5kfJ}71LWH?HnLi(rWWSY9lytH=qJ|Yy2$AoB8 -tSR=e;6=p8W_T2oMYYB4PeA$QOuVR*>oS?IlT9i2(9ZLkLNKD=E-G8a`p%(V$54AMy>zT9iuJ$posZj -fJ#+pbF$UQ@qMU$m3AHwkM+1JIt-;54M;X`ux -uj%1GA4iaoh9*E@C3sG5t=;4j?-yli{n6;3Zf9H29}#_w;BQCa*B?iJtB?))C&=eSJA1p43jCV!^%^3 -vw`+1tup&h!-1a&tVXmp9YVvcEOWI1FyDrT`#>E<q)V$^0-Hvyahp0aJl1MAv1GmCu!KRFT=i-TdZb0JKFI%D!iUv;Md_nd9Y36EemqKml$Rr`l)zs -$&eUWIa}QLZx-}-z}z^t12-)n=wUgdg`of8C~i0nq9r@HQdhCIL)~P77qAhN=mgFTRo3z%~1Br^>mS? -0K6o+CrSB&Y9hBQju{0ONT3Gr+6$tVjkWt2N_+%$J$4?4BX>ktk}CmBcI#Z~>LO)YXAex`42g%OzQ2U5POL%))6%*%)b(Oc!mOnkQ%^mP= -S!^zsFzMZa;FffAXNrOrTJj4O=*Ho4#t28pczzR-&0Do_S;J$o;6djayzxn4Ypn6TO7oq+hksK= -M_MlP@h8Hq+(5Qagm_5U2W%?HRAWyL;TfE_V{LgJHLykS662wv>0P;O$;MPWE2hPp5I))dw=IBO4GMj -owyYk#JITpH~?_{>E`3~Y7oGP{8hqrn3(Y!cuQZs-1;-J*0m#zu2w~FNbvB-OT6L+qL!UA^k7 -&tE*4<+X2k`VedcBhn)XBAJYCfeK)_pn{EfN0z(+HFVle#;M*bX`}dc30}en0zYI?vBtS=fNaG4gtw| -Bj|M3cKB3*S~MFWxyV!`_zku+fjv9!dFXofw5a7JWDJY>@=LHj)45z7*55YEc%h=@!ZghPQHu{0}Rn} -;uhV0a$VsZCG%kYuOYr1jgi$_8I+NAY6waEh*tWDPYR&DAyzqK}L?QU)I0ETOm#_(#B2 -QW~Zw69mqa@v_0*<5O6`c&SDShXwj*A*HucbLN37o3)K9)0 -5xcdihl)F5_0*;wV)lal;WxOrg$j2&uBzJBcKd6aSZ`lzc0B+ULvvf5aM_csN{B+!->YW!kM3dER-t8 -H%9Yc?S2os7dCvfKd#n#|E61Cs!`*rhAU64?-w%Uz5RvdG8o6!)0`7}ihC93C<~-UF7`+-9um5*_=|; -YHLf!q&J*w!<;&b*Lw~Zib&xySQDSMcuH+~7*=u-t}|2uGcSnc0n^JneSr-;>Yq1kcPP|iuAZ){o$sg -G}u>POn%No%HJE>n*`c#6JG6rP9My`6LTI9|fe6QUqOFHYJql?ZTyGCWt)5Mx;+EbQebMjy7X8H*7qG -!ZaHM+T`!t+E;qGr|Ki#IxXKA;VEyymlX~@sIunht4T8zIDms=rml39JjrUz~|)e_+qCNe$WbMApW>R -HaEt#f?^EQM>$AA_Kc^j`Z#vibTzsaPrxob_>Rrf&|L(K(i2 -JVSK%-6*?B0OXGX8OCzdv{~7whA-Nk`*BV?A!w1C?6+;izBELN{{9XZ?cqkZ)odoccs|(mtT=PF`h9c -!2s5IXEy#-g@5Ri5J?cC!->fG?uBLH7mg_{1*3`F`Xek3=WZJjQ)=UV6D+__N&#U;4;%+><&rtBzayc -+G_%KO-3cIRIDw3$`F$)TMQ92PZYE#EkjscbbQk6lPM^bMMTcw?}ERuh|J&$xDRs*Npk@=*g3bfeney -gkiQ30umcjD9I{bFf^&PPZ)SJ{Xh(R1_J)W0?vDrS%VTe>Y@CwCuccHW4m1>_?kb24O>ZZ+rLQrcJ^v -4VjqR@VN`9tQ9-+ePTkHTHdn$W-fv&-;j>fOtE(h>4tfeDPBHn`j`TXj&RmWW}etPp$H@o*?fjq@65W!Dm%tiAsLP)h>@6aWAK2mtey7Dw)4%f<=<002D(001HY003}la4%nWWo~3|axY_VY;SU5ZDB8I -ZfSIBVQgu0WiD`ejZ{r<+b|5h`&SUyp*D~jTXP%W!(hM|`h+hH97wWebMieymovi$o|@|Wy%O$`L -G`0@BiKI;u^OmiZ+uN{0dTDV$h_#((DJi*P|ck3KJ-hG1g^+t)-A}INU+Tsc? -ML4ur$M(hVnjvPn{rIY2J7mChWcUf)3P{lKPs^V6G>Br!~5XI*Jp2ZhhfyTj-}qRGLBBsr338Z4j9ih -SpZ9m`#5G_vQjP!^d%i4_o9bUUF`n!QhepNM1{QOxovvd@)Tx>U5z1XmGYSMX%?A0$`Yaxos9BiZ!to -?>xNEpn+)OIDzb3w98?UPFt4Mw(0|7+-fs7Id9kxjmg4i3;>)H7ok?oAOXh`&Ww~N}n-)JdPP -wg3tIC}}rqLY|`VK|Mo;fxcLJXm6N%tW0|XQR000O8^OY7yv#FkMF9iSq0TciL9RL6TaA|NaU -v_0~WN&gWV{dG4a$#*@FL!BfGcqo4dCgaCZ=*&K{_bC~N^~_`3Chd2sQKVHPUFgFN5-e*bUGmnL!ia1 -wY$XeRsHXsWic!^kh4yeiXtn_JoC!T?CdES()E_bFOeXB(9{!=my!pMi3GOf^8Dh;Cb!NVxjGvrUdDk -Wu@5N+i*Nuk84pKOXGFp{0lU{bB_X3LvWe5B$H9(z&f;$Nc|mT-*~Nu?8O`VU%Vn=8*!H?d@QGJz$^` -Mnb`3nIae6nIm~HA%Seb)2AJ&2x10h(v%mj=Wqs$`X9G -AbC*L8bSnnF%-Kn!WhX#xv)6Qu@(B;INnc;usdtMaD3*zUxOGI`KFgPZy(kF -P9w7X7fALy>s1mbBbd6iN`rYrp|0Ka-HFPG@81%pYQKSb9X$wpBbh0A{zOeoSg8SOyX3k^=WEHHd0H3 -8^(|X+(olrOQL*?lVIb--{Hhkewo$*dzdj!*(2q#h-umi+?09ah$(}6YQl1cpEaNx9q4=-OeXGpG+Z? -J@X33NSJ_HQwfOt3{4aozxGtu|bqx+lsHI9i3^0Ew=^GyctMkw7lMlqG$;wBnv{l;dFIMgK`2bw<>uJ -;k_ZY1zv;?<7c6qfIbiGfSKq&TUw^Rta+NaLt2x$-G;9F?19P;Ynn5xR%-$6Jcc<`_jLA3(5r2QAL6q -2h;TW22%*dBXPji*<0Sx9%XimJFxpW -Nea1HCf1o4;<@Ab0@$D-whr{W>W+-CH~~AmbT1Qnx!2+K67O>I$ZU0$c{}($Wj|l+|8>TW@0&%8>*Q1 -SG?0)%v*0@^nLG}i#k{4@m4Z%3qkP0m<$ssT)#iF#KLrd$)wTz<(>B16TEPBMM&x$UK3)x6JHT7Had1 -=EsFsgtcit6#el4-p?&9-hjEIg6&@8b$^L^kl+>Uu)-(QqvOYN$LG-g)%ip5A$t591eZ55|QJS6fX<1 -B2o4RT}WsM6i!PJKY?{;UfcN(X;tT-+>Jrtiz^YV7A-WPIFFs$86saY#f26*%UEW`fX=FfV;U*8)mXD -xx@ju}iTyECuW@&I}}2Mn!ubU@LF<%U}mK8OSz|MdoS$|d?8Z5&k`UVXc&mK;NJ{>SyPYr&3$Hr7TN -@DCM8(@86L9Ye@p?b|jSnfXps0DJ!eP)h>@6aWAK2mtey7Dtq_Cm|~Z003kb0018V003}la4%nWWo~3 -|axY_VY;SU5ZDB8WX>N37a&0bfdF@wQkJ>mCe&<&l326sfCW4u6w_1rx3`3{Wox%zjweu8(#6VhOBgZ -Mjsy}{xOJaw>K)18nhvfwy`}o}aozG4k`gFZz@nXs010?}p1_a&*jAOKgi+1PIgR99kT%PxFkR}Ll93 -qmS79^*4x --wp&i;aiN{K!>C8$KD+{KN0j}yA5@S;uUc8$XjYO3&O7pMpF{$l*YF=@23?z--w+veGX4-_OC>hZpNe -g;kDWP#&v7VSeuJvriiVIT$I%a&B6C$5_8{gBnZzZ7!X7=Da;_(ZJ$i{e(p*tVMJ*OiY* -sNC;wd9m6!6k=1uvlUI-e=obn|V&w*aSTr_Lr#wFtimP`b+|yM|tW`xag`E3~rQGAoS?!k)q2cPPzRf -NB;YGo*sX*n~`pFdZSrxD8=d|^pZ)UV6CF(#9bb#;B8j6jpv?S!@K(i<8i -KGCi6RBDlVOz=No#jNwDd%>Y64ok0~)V(5hCt+4?aTjoIu)n|{g?%KkKab7OV5LZN!I2slP`lR!u*i( ->J{K?ww+x!dQnAVE>f+9HhZFDaT|7DE2XPARD3(>-GwA5fKxu;U}tRO$}ExLf!VED%PP -5$&#ixf)JyC>G!w7)8rsqNk5ys-0Az85`C%{ZuD?Cdb@u6T2Rs8B%Yp%&RHqx=iTWy;e5-xIY9J!m0tPS3cVZB0&mW@kv#BG71#=>h>rc?zwe}KsohQ8^|rC!kt&;Q -WZz%KpYwX{n2QA-4K1%ZXOduwMT?4pBF#dXP&nOh7cwyDy*ebL_aF_Mbo_z -Q!BWs^?$9-k33^VlmiB)FRhP}|Cu&#ozs1JSNHz{3o}WT{C(z9vnth58o`~f~iRd3iqbv14IaLJZe3I -~(=bx`?Y|+8aH=)wiTD89cP)h>@6aWAK2mtey7Ds~_d-q)d002b-0018V003}la4%nWWo~3|axY|Qb9 -8KJVlQ7`X>MtBUtcb8d4*BIZo)7Oz2_?|aiE<>1!#w<5|?#MLqaf7wrdqyx6Rfjm1{Qm`?;k|+?GRPz -dS!bCnK2LO(1odu|)_+&L@u@qDE>2k!#Lmiju*Le3(yX^NDN^@L{YzL##hd69{c>QnW2*zz(=Xcsq0H -EW|G7A591^?r1a3MlcDGKubT%WDZAmk`;tlqvcL3Muhb$T5jTHz$XT6Gl;gE{ciR2zTfWR4iug;b>oP -kaz!D=l}eItq*hua2`ped4d%gYtW;X*wuNWYa%B$7Q;JPz!~2W;P=TyQSV}RSFKJG$zDmQ;X>+WqS8- -DzDeTK()!!_M9EC7~hICQu5Ui8!@CF>q7t4Z6XQ4-UGOVGd=FdM#G@JrJgjGC#cdyQN`m_+L^=s2 -SHT{pzVg>5iZhK;CHMEGpHxksn!H#|;YPb&q*TVs(v4;t!-iXW4a#+kt#v{Q^)+0|XQR000O8^OY7yx -xzwfPbvTa)SdtU9RL6TaA|NaUv_0~WN&gWWNCABY-wUIV{dJ6VRSBVdF_2$d)qj&;Cp@rjyyS{9GQuo -nZ9^Oy_0sFY44=toY?8^J&s3BiMU6)C+Nb(wCoh6BQd2)38>g+hI-`66_V{vr)>i -o^gw{Oo+-<;u((C)#!EEZxqoi}w;Cex`%7t5lA=2umbHFYxO?++fx--}9pDiigoT2=6Tj{k>uNm&7Y( -=?wK7f&w5pT*NdA$G*FjII~ap~wqB85%th@JC~x0si^*$*CGyeWw-`eVNv)Wm1WWxQeQTe;U){I(c8y -LwMHYDG)zt0dpq_^+lQ`=h!f+#2h|TFKR0rOs7{(n$>9zG=MhpOJz1WD)M=H{W>ZuBz=Xnhwn@J-VPg -1ucFy4bx`!VY3ej>QFT4rf2AJbVgnd9+BFl)gXJ;sBbDar!j~*LhK#-N0DKWm%MCLFgbcM-K>2oXmOLpc)-&$RHhQ1>~%wd< -IX(id#k#VmI)y3X>ck1w&dx!;x+Q6Kl#`P6og~Fqy-2IB*Gbpegev`LzMzp}7~!1PJ@~%}Y6n@6OL(^ -T%FVP@8X~DxE!R>YMLiIc16L`8ukq`=X4$zuwgU%<5--d6UFxnapbSV?Q7i&3KAaNXn5(f}6SqW?Y#+ -yAuNEzM3l3zA8Fi?MPA*Xdx){RvmyR_akxY-#+QG=rtl3$z8s -Fk-rhIDZZI5+q1h$`U>fjsR$N6{i;=kiS~Sy&@U&&WRjcN&=G@98oE3{DXs=-S_aNLI{RRK|!%!{+{9 -8oz>;{_ZZXx}`^EZ*9pAXfNqHp1KSv1RFe=H6~!|pwrW08*L6>yJ{SM^ualYCMTyqm -eF#l#ipyoeOkMtrTeuqtdr2v%)tiLtc6JG+BK_|{!IPb(dm{hbfW#cKJ(^k*AP@Gv_bjvC|ieB(8x4OmPR%Jc~!KdnNj1iWNx9FL(dB#q?us-9j^!y#MHFDWlkyJ2A#t?=H0Mo)^j{Q?b=-k4Dar*HCq1q}`!Gi --!azufXQFCK5Tq3Xg=HCCWodPj#15Qgk)^Yhh!zEmb9VL;#W;@Nsr45f^oqRFwlxi>~!MDufVypF9q -R7k>{g9~rAI$qXz*5OG+)_i23-4BzK_d*H-^<%PT5lEaYu97$g2sj -0h0AS#=J;_rS)?4*pj?GdSxXfueM_Kw001+3c|7bDwlN-G5q?$#`Bv2$CnWV20mwu-xTK6eBiYOME^| -@xbbcDwu39mzOe}BLGDWijfvCJX}qs!sDU5rLh9zY9Q>oAIAA|k7JRGvz(AoxzNbI_#1(lWa5ykPx_% -S#)G!z~cRP9_r2$_`op-)BQqS;KeXFhmbJKu9D0=|6{PkiwI{zB+w#eDv(>xD$jxVZ7!#fG~gfZ4_g<{e_B002Ypi3f(Cu2#A~7>BcBcAM1Uby9<#EfGL48fiu&*>}~ -zyI_KFK^=Ux{}tun)aq&{*JLOiz>j&6p+=3z;LCzz^ctB63#O8fQB8v{0!|a-Xb#d+-8C_|X2|%&U?# -;pO0x#2EKYM+&H$_eaX^IUO-^gwp?QU)q8AjJ^mB~|QoykrWbRrAEf}!Q1ANf4YjGSqd=oiXF4U6)3t -s1MfHt}!J|Iy1hN)195=k+LBqasE3Chv&oAc@E>+_S-SI=G|Ao}6W@qfHMd2{@H(2AgRBOR}-0<|)s> -7XzKL(q`FfX;lD)vus22y|fR3S`-BvKos!BnvJt=E6W~CN0 -0UNpORjph_hiYHW7^SSpvlZy-1b7mo8YjyNa+{(MiTKqS(nNp;Dpw95B!xve>p9X59xFGwHkqAzwcY^9p`qS7xhEmN*u&RQsqPG9H|uxw)$b!ZTwIKZQO=NkL|}IS_bF=kM$%*qfy5*GL -Z+O{~p*sEH~h+Fn|zit^d%64J;vGPg#H;i$OpuH>kBd=-CSj;`Jm0y?URJooVuTfVR_)-mMLjGYWvPZ -?yzx1Fa!uNWdLP{IUCn;9d0%3c|}a$olg$agF&KSZ6cUfz~pqlSPx&DImp*x*}5{qcLTuy+A1sFa^&P@;0xQg+f>T -tfjmc|*i@?ySpsh*(HbzlIBv56Tx*t4^78WLM4S(flgz_`aGXnO~2%Y(b;%7w4ZpGeh1z$BR&>aPCAK -j&8k&~SmAYOwJVKxI}4WfedFH;C1a`qH}I-szTpGj02c;bi#o~A(Uh$A#}>_A468aOXCMns;K3{nVFu -r8R*B$}BK@Uu8hIU-TUlcD~M;C^QM;TW6@ElMzH5t>@@BlzXTePw`BO)&F^Suh$G=)uS^@X%fq{Afy# -f_cvJG4iGW0)Rv$N#3VbT|w&+$&ntQ?e8@-*cPXvz@!!6i%_hvD*OlRv(a&HhT1V<*tEXyow;zSY(+m=ZN3-d0K(q;giHNZ`Xb`7pjC>K7iW@W -l;B{H4s2}4^BOcwE|27uZZZqHv>FPos -*D~5LL1qStw%J00gu(Y8W)ngZngpdNA;Ln;p7~I=V%1hp!2&=viVcjnE~s6h8n0{n01v&O~7zrg?>7- -IHK-%S426DEO~9nd*i%(b96(q&3@N9&WHCO9lEM8MvTe8AD_AkQkvc2M0B7i;#Mw?ZiS -QN?^^4n@BFSPIN%cy4-{r;zChLNFZg*X)Tzc`f)_g15#UZ8$SA?g*4;H4&Yr{PrLq^+g>~(_}y_@K;9 -%#E>n<7@++|_8Xy_EluQc@yDO2Uw~3ZCq)!42f~K9cSyZzGRLy*zzLz-zV9u<;oHvlWD#R}snviWMNQ -Hnc*-IVL+Qeu>-6X+Sw*o=6L)zZ8l*6p>;Y6!I`~_3d0j(y7pSU_z7mU|nye{SO*D#9XK(_4K8bk>QO -QcA7QB?luhIiWb9(vJ|L}(!C!O@^KmF=lFduAf6)mlRB%gQp@ETDZ}f(2w#74C)7M7_Lk>x{+>lSZDN?@K1W -xU}!cW=R#`$@H1a=_zhVhGJyr#BKR^-yQm7+F`&`H$}U$0)ThNN8EN=>gka7)LFWqmmj!(XDiXz1_vz -X%Vjr!khb`E&w)52NjFK`CHH3s-3lkJN*fLv1xGm;8JRANndcHLP}+8F)vu%{$Q_)kv5vQ9=LOk!D4f -@!p!ww;U;0S}qiH%$OJyk`yq?DdG88_qX#D71vU-nN#27Bi`;%kNBIK$+McPijxgFjH!f)ayTJYgC|Q -icU9FWiTq3|2eh4L2au)3)vPjP2_NH#=zt7S)@L>I-u9vFW}rq2R2#exHEb!UCLAC}PM*}RNL3BMrmV -nA^$VnGWTzLsP;^DxdPu6&)u76_o!sU$Ayzc2{T1@^8GX!lU~wIJ3JNRU<57>CztQ4-QZ&H-Fkil*kB$+U!^W&fZp126&>7#9_oMB(Ca|KL&wgle07FvW;^Z(t=dsN+NosK$JNe1>04`@~P -6msjp&KNliQE*N0aDBs)1LDQ<(`|7JdecgUj52+~QoeA0*U&Gn60qr@E0K*;>jlo^xp$OKp)e*s|!!&H{n530GCMy<9-&2hZX2JlzJco1z&+vdy -uG?#PtO;;rxy6aaIS|e#%e^NDUpz&E&!ImhU=a*YK=mrscy&v43{m5>qSHt~BXPC@fAl>UBM@P6zlJI -j7`QbJ2^eGG+~DI~l%-qsQ -Fo;8Dcsu%4t;>%fL}Xof+bvTrFybPS7Z4b_UQ+YFw9{_{4y5H5}S;;ylgcDa%jbsIFdocEoe3Y$^dZb -MLEA9H+80FrlT%qS(?0lv5TlYTcUj9bJ>iC6}pEb0`qY23E_nv!jy}+K$4iKv^k3BYS{hDXU_DLZDkw -fLKmtTsWa`${XsOpfZU3mJeX@^gSYke~Sts4%G4kq!(#LmAF1~bT^^Xc`J!>C#$;;VGlO^@R3q@AO5Z -UI1ITGD}YC14XK-!V{KsQ0_@;q>s4NS(z-q&3JmD@z#yPED=GW-N}{!3h{Ww;>bOf17?uHS7Ef~Qkg4 -Rz1q!a0p)aXT4<}`I|0=nO?ou$Pz{o{9tE}7sW{E(V*G@^MB!tPxO-vj#`E6d@x2uLrl{>aa&%m2yUj -t8z$f5Y~aiGLRM+|G7bUzXCZyPyE=dBX;mS+*mI9Kv-T50xG9{nb!$N{%wOiRq6CgQRzuCiny4=WG7{ -rXw62BN_p2JLdlpIYyse+MNs+9Md6Ot{be)xxG9av(8rjF#!bQw!4xSD}=fXf({|dD%GSYH}F*|KjPP -y`kjVQyYJ&aHy-l5TCn`u?W#;yGbi -os2B}*#0xAFDe^n4z5lL}~tgwET?pLkHIPyy*zgmU<0Z7LGb%<(_ePy-a2e5aJGv^O -6pEPVJvK6WBvyxw_mwsBy0JkdH0gVw6GH=-9T+JTX{Oc2SGG1rB4#&Umgup -nw;BsQh}Wh6(Ugss84z16h{SvdMFqdZm5YPAe)O<3qE)?H~0=)u -tj06?UT_v*!9~bCr6g7CJ(GskC)g)C1oMbM9ii;v{GQ7cKg6yMRUW)>>&#M{@ySTTI;$pS|47FGbgEO -CNfpC+xP@){{3Ln7R0L*GR9D`fv@$Z;361>eCZ5%o)(cEoSDl)M3o3W~3eT!$houDK2Ra?1=ThNsVKx -1(A$ASS=BTzRmIkR*P3yHwq;sqW8V=mmO=lyKjeY#7Ndm~+e2|2nGCZjz;1(z~3V698e>Tu>M#O6`WS -t#%tm(5j{&M31pGqNtah!L>mfn&kvFzJK~3{makAurBC5YV>dlc!f<4%onwW0XpkS`r)|((+^qDAQ~O -4Y0~KVud3UIc*SplJgZf5nA&5GOd$Jk*VSYU7TbI+a{_(Dwdd7&~>Zi188Ux0|Vosn`LkdiIEIln{on -eQaWV@m}_acTA`jM*FuuduBVmrw?lkRL|F_4H~S9Mb3E3fA>@(5ltdQm&}0fWe9$pJ=6Bk^M^q?tP}K -oV2RVN6;p1i7ZbwAfeYAq%L2Qz!q6#iV$|a6W5NP_Kn)GeB{4H6ri%)vg0Rk%l4;rokf;Lx@go}mbG` -dQ>*H-AOF9^y7jB#l_-@(No74=YBJK1>16{*sbM51?t6!ucoH2o;hS#=LivWTUnB@)2Kt!kFML)~1FY -NB&z5$1;Hn6xrF+r-5}Lrv7Nnu1$8?%=}2X^lSqMv&I(t6B?~oZc*N$4xgCx?qFekzHu=2tu_^m}Ol?z6z9xuxwgV*?|mZJzI+>0`ztNi|gHv9LVI -Wtb;uK@B~DQWM(?mhWcahVgKVu$LSqu<@x*0-5B&U@uUG3V9|=$!Vvv_pi~viGCYWiSzanm-1XG+43C -uk(;8G(f=i``D^D89xZMCzKtpd{0LBflU#Ky0k#M**E0!xCJ%_K7`xY@iqsCr>L^6lx*ctseBoJPQ#y -dvyild7qU9;dtQ>p;Tr&bmKNJtogm)^=Qf-%rW(Os^{W5N&id;qQK>?X~mvw!HaTK(;C>FM)dqWroT@ -(CU+tz9?tMG}*4DMThDOkFz7Wmj2wtS0^Wvyv;zRIRk%Ut?y9+-%JXiC>*Jx*Sn_F}_UyzkT -(0cl2+?-wOru^udmtb=f?053>clSshYHAeVFF6qFiD=15bm1<)uCCh+4@IIqb>I);C;v!lc -saK+4JLZyVFG1S)P8i`8^HfIZkuqbp>f>J3Z2`XNp3$9%zr{CooHmp*Pp%eW$psc&)wT^2K+^SlkInM -uh4ub?UMz#uLlDrLw1tw8RGXSj2BlVCa`W+#YZY*Ovu`EelQUWDZIkU@TB#=~P3TaB&ogcBXm$_3fp{ -=%*}rw<6-y$G)qHamQqUhka>l~S%#yzPQ=+dz4lSjls4X2|Atewxn)k(6%zG_L{Y2iEvR~A-3(zoJl62K2 -?+`6r>;2vv&c+)n@t_$Gc&0=JNJO=elXi*Un$Fo!urmDbzqt|pyxJ>Y3&5PG>j(-@7SI0k{kHz1P|Mz -9MJ_FUBYlt^wqNJos31iZSLY$@7d4$(LBZ3Zh9p|>oX+Dw!tiy{Ru^6wRONR7~HJ}iS1^g5{SFWifH; -hLIzO1!GMK|SDT9=67`V^MD;elLU-k`*>v1AJeC#?h)2Tc~WeeK&G0d3cMKzdE -@NKkrMYf2|r$IUvtC9HgWb%zD;*0chva;Ea2Vps-${{DY{+tu24$I} -+*iHO5fsI;r>8wrQ=VU(y`yX+HNCOPa{-_Y9o#jUa@ar;Y5}tJ^I&jA3U2Y)WW^1GgqIbA1ErIeRh_7 -IG`y=siT;%B2|u?(K1Ajy40#h%_$vlEGw24p}a}Efp?;Y|bb)+1s-h746;hC^mXVD@esy6kEaqC}MBE -p7y>yD_1J6o?(<)GY3+el)Xb;v^%QumO`a49o0<=xNm5FXpP)a2y3z6)*6@5W@O5B6xYuQB~HO}9UW% -Qh^HG^Ah%{aEHLcHnz1F>`^N6)3QfD;6KBiIWb%+?6OXt-FIpDMxasGjh^9iK=@8HxzWGd#Y-#~KMz|JCA1f69h*=;CEIbZMYcn-b -tLb~QaO(UtfG*2&k29=zlBJf+6f-UT(LC5BuSw089R9rI?+wn*TK`zLX=C5+U$%7o~V)Sp{OEdLIb(R -eMfwcWxV(@oKhE+-6!xHmKayfV#(VAeByXOg=_XvCaz_hh@f*isAa`u;^T$tNq9MS-9GJ3EjeE9zs{D -F12**g(XC;ba5K;LZDw2oB*({b$YL7}eGYs?!A^lYQ6tQXc1^9R -fbC04SF%7OJiwF|PHq1Abu) -W{bhp*Kb|ecrFPBCbkm`TLf|cgR+wQ_EfW9ZUFb$1#M35TF$Zn~leW7;>vJi>?>3na*~-Uq`>Hm7-?2 -?c}YZw6U0)<@9}X*L`&IW$8&XN%LYsJhZ=dliGMBW9lAwnD(7`Nat+_Al-ERc?VTvhX+lphgQD}1re# -azd5n8Hpn)IeF$2POtM{mq^tbKy*2UJ^Vm8I@^;*_Q%{z<%rLb9$`9EtZ+I9YAG{>y{i+UOUCQUlTFR@tKcx!SLvNKGqk0WIw?dcWq(*Vjmz|6l9tr -Bp(F`zMrJk#moYZ?%0n4tatT^GVRBVgMI9T0Wm@)9pNmb%_Q)lpdf8IvnW2VrsK4AkU+}w*xTMN{OO> -eSBA!8)fK7l&a%ZrjONm3ZuMQK@aeT@~Je8r%?zALH{e$#YA*&@>gUnc+M1W4sS&_=>Kz=Zi(uWe575V29#i -iN1&dSCW*D+cTD2taGG~YvXHNRA`3FMxOJ-FH{?f$|T13iOJ#g8z!o;geUj5hx{X>M2B(Xfu&|D -g-sxl_2T~FY-Xot#NZbz(bt@1RUr$O00LPTG<-(-8S>k=md=M-xCDyTogBM-Fa9o%|uSSd1+ruikiLK -tPW(=ubU{xk+bPdpWhe)>KfNw`WqBG<9ta-9#P9cj&S_wnzTNO_9ZFcRZTaU@zP0x9wqSbl6p&t* -5I%tz(s%hrSZL!C>&rJe6<4KIbUWz3-vIQA0kV -AxXKeA;)R(uTQ@zXuOC(|;@4_tM=%b60sIq5)d -AHOiYdD^0bn8h)zQrdr_t*4qEts}}$4m7B)zCwu$rcy6`*XYhJkHvJdp!4?aY;0Lucin~PV`9Eci5~S -a6k^XUZ~#M)1F}2mJiBfB1Kyz -t735=f^+w_qs58y}NXVJNfI$ngQcS)_h1vr^=MjrS%`|>=&4ip*W=fRlA`rgTvYUnwr4>o+cm7WYUj` -SftlCU}vMeR^eCF8ZLhO61}jDa}HU0)%q{=3++&1wmqG3CMuXt`HANRD%NonmM-sWLO9Jaal<{?qpyR -d4%GUwFn~o-WOs=~z^!dD#UKCPaBCe!;|m9A$yD-o8=WVR2^qTaSjD_HmULBNxOO;s4R0mi=QRwS$_2 -{nP52$;Xxg4^an?lLJ;)hN$uPVWDei9Yn6LB3LHtUJu)zBiLwrFuw)Zw$d-0aSN?p<m%xPk$j=!$Rk# -BW|1VqZT -n9JGXFL-@e_m4=ry&;)Aiv`VsMuDFbcS54N5z>Tj*`HvjNFe;^`+BOZz>>CFjwgU6ob)d~TX5aRYo)^ -iP_e=7OFT<`?Qq^esr3xrZk-WwYbo8`<>;z_&6Sq=Z}fw6lc;~qdg6L?;^b_#PJ!` -3sG0bzJ*?lfs-P?eG*+9IKrTJV7WmF{%L#V#Lv<~^kCGl$>P>P#Z-&rZN-5&Y0D -vh9{N>X>t;zb-7uCmO&El)rpZ89_gUlItD9W_E&kktmW!J5@OAXbPx_6Lk^tQ_;PJdAAfC&$lrR7(=) -Ljl;$F}pDmRlDBZJlOmy=t!*mv4|!g#&Cyu|j~%Xh%Z4%4dTPulux -~CHVgrP)h>@6aWAK2mtey7DvvPfCGLm004Br0018V003}la4%nWWo~3|axY|Qb98KJVlQN2bYWs)b7d -}YdF_4ubK|&?=uqGCE4>)^2KMLe{l@|`6_vTB -a*kGzkB(oAKt%tcY!aV+`*G4 -Pu`xtO}_l6Z<1oQF2zbz9RqxnR;`Rw>Q?$vcA3sB&eUYuDPz;;$fY4H|j;Z)!+VFtobk5*@^1oi=xH0&L8GtjRP7djcD -slGZ(EaIj>g$RF%Kz8fg6G8~O20G%eIpU#~?sZRaqT~h8NRyQ?EtSZN~|hsq&SW!n{spS -H}lQ_%tG4OvMAjZpX=e0~2O`KEL?$JNPad`tvXNu^Am4989NqS;B0eCYLFqu_U{`3}RJ^cWELgEk&bV*Xl1ZL!WdY4TZ6;tT?`HyekynBD4F%0F?^>zU -OkL9Q*Key1}!Sgq-UY)&u5iJRHu>!oRq6aTtUc9Gr7f>imU%tM0fA;}f=jGTx;j}{GtfHV7Geqfps0#&I?Y;9E@g9e8GK$si -6SqHRzM?3fy7YF#RNGQ@T#Iss=8SLeQcAu63Mb|5&`{7{HdQrfn&Q9904HYZ~y7O#xX=*UyBMj6|7kJ -_APKMaiE7YFGb!AjpaEONV*$|!!bbYIz(d8A+n0DO$r`v0>kXYj!sXw!BN=n_?LmM=Zgh(d`vUe)BUr ->BFUX8#a`>-nBJZMU&&Wg@`Sb+zYa7PA6v1cvW)zy2A*1(QJpxnuU}v48XsU__#-Sw=mKoRSo2NUWmM -%>01LeQFq!}r)dg&59lPvNtAW$enBg?w&x|kEy!VW}zA5Dgr$C -zrKz6L5E1I&53fo)SgwTOIO8d+rqi(bA>KfkZL -5h((;D8Kh>WB@fYC7RHbx#$a7blr@0cx+z3ENnS2#>f5!L7t2B{qWe*zF^5b5ATEN2Ei9cN(D%&- -+U;(N)}Z6QC`;H0>RVzR$i^BNV^c{i#9Nk+JI^qldjY`UUy!GOU7-j=lP=|=UW!+Pz`1p4T=F0_(kO! -pKTOrYv4cxvi -YMNXr(KHVS2&+~wuQUP11HZa@ -n*sz35J_OA*H|)H7NtO*LK7pZyP~Npl(;7rwxQ#v$Um(qK#s#}zju>c7S)1;RXyGbznVhjDVEP@^KdE -wx@5g5Qz6O)6$+3doDbLzSENR=G!5V)Uv3iUH~ldw+9^WH3lJ>!Z3H(-zyxVMSu@cCbK4?8uId`xn5a -$&-tR6I9|gtiUN;kiZ&8IHdwVSbMc6BD8PxIwM2PmjfElqR?NPiDrQ1yv6IY7qntV1M -e?)-O^7EtUJ0juf&%YQA>w_&hVE&Wrz8@}3S&LyQ}xIG!$S6ON=!7UBFccmaAS=SSe7DBW!>!&O$QHw -Nk=_2`dcHnmYa)*Tt<$)=d;$bdw0B;=gfj>Q6UHMBs3Vnx?XQel!>+4k|0Vo3>MwGo4iBz4?tkl@qG& -Vr35UJR;|5OD_TxrmXhKV>_MO%IfMfAp<9K~NuVbI#=Q;BZlktqk@MXTgu68^_Y)b`RtE;a&?09c -#yO9@a`cGjoi8yNm3q;L?ziB5tqb6QXW?8Q0~0HPZIMpO$7;HF+^V#QwJs)X(}sB&iWvK^C&1f)wguJ -zC^sz*my@QCQ)NR~cINR<&F>$OCXz>MJ&b_N7MQof7E2o%6~5yr7-=lL4S05PmUTbzgqK;0%+SLtzjb -p=ut0G(@?jaZlY+@dpF5m!V@YUFlpcHmmezt@j>^vDb@DtftNd3fL$}C!KRx{u- -W|B|zh^fX23NdEXXgomUNVUkDg=<$J__M7X4%&ZXWJV7nquBsUsBsIdjzOAR!vHrc(G+tVJ%kBp5TKQ -zM4%suSW5#11z*Viw`32FjZflWaEJ;|3}upBtaCIx_jUyy5QI^ET<6%+cVZdkeMLsH^C -g~2J-espfMPcq|mtnovm08AqyU^iDO=fs?}pAEYn9HlNwV#GFjnkPqYPLOIWuGV0~53UUAawN0uSE0y -3DzaROv-_?A>C;R8!%m(F7TFiL)(*y5hqw@?GzTXlNd)OW>#?5GKygup;}6GGEO+q0L+v750HOFFrVa -&1`1O;9poLch|sk=9sKanZxv0tv0`l`3(odkjT(^Z~jZ5XOF;=`)@LJ16VbpJ-ELNyV`#hC3KT^yCz8 -+X{QYyA;X%WK!7GzQ2D3f<#!mr%~F~b~GGoJVw^ibb_m*hqk}h6r58rk89UPWV1-?JsRnjn`$o0lv_p -ZRC-x7Fe*?Tf!VN(M)t(2PF8gzc(by1A{r-hS@Ez2E+H1m$aq86_g2BUxeto_^7#lyDczQeW5@>|P|qHhiAorw+#`i|6yUju)yp)d&t?%o2MF`5vhq09XyJ -0N9MvrWTt$}Oq2&?RA26&;(|XM*hX48QCIABFJ{+h4c%L3Ef4XZ>qvxOXw1BVpI!03Dr8DZzmb6E#TH -q*|PD5mgH&xslZ5xrN-p0h7g?&~1smgVK>avxh!_fP^AENzi=KhCc}?^y}^U+v6|4`WpDgUUKK4AZ61 -BG%&v*tE0nmBwNw`3^Chc*K9-5H}Gt8|3tpd(x+{bJ#9y6@-)d@UCGrSr40IKoJ?|*h^(?44~l({jVv -uHAb~=z+1i@6r_C7t4^8iBMhQCTSaTh28cKj3D^)8*^2do<+@a*KMxd&AIO_G3d$mRn4muKwxpidgsB -u)yPOq(4mg7c-`8_@nk;#8trmvoU(?HNV@n6|-rlX9;-Xq97s#}hzgBmrP*=-)%h!WJ=JO0wcWZy9Z@ -2q3bTwC!;Q;(aKq)91CK}3AcKFk(yD12?!v{p9L-yj>IZ4R#Oawb$)KV{$Jp2&&nOzjA*Ab(Fa78t;aN$z1dzcrm#WZ*7!zPwhWEcgE}( ->-2p3Y1Txl%RJYtn2UhW9?4!y)Qau@a1=<{E~1NnrD2MYBVq#Z#f63btsVRIFpsyrytI4`KweZD2ZX0 ->V2{SeP4(Ilb|1mGtTMcNV(%Rlj0Q`*_E2e7?E7dCVDwN#y@KW3W(B=N2Q7QPVZog%9FR{QPPvf*Mow^e;ljy5yF#F{g}V+5F305h}=5*VC$?p~5FJA()E;T(CrLkUH+wkMJN3`nl)Qjo3Ck$n_) -aVcM2X@53Qwe$fJ@>KsctmkA%@+43CwkWPe8|cCGNj!87OecTh_lM|XR< -L(dvJ^SG9k+&V-TKm@*amQDpW}n5(cA*jp}y3Rgy!}P7F${8i|M8*+u)Sn>U_)og!Jj(l(UE?Ik~w4k -RekcQjQcNaPLC2tM-#0-hEFKLoQCc3B`7n(eq+@As2%+I6Ajip9x8Sf+cv5W@>hU26`z%lnG$YZh(RGc$g@guB~@yG9Nn>JL(&XlGTTY5OD~!9A;%3MpZ` -MH86M5*nMIEKcVqws+htWtqqpH6q{QDs_EdC7>i*Zb}fo%63F5s)icKFYt{;7po9TnFPq@Q)FtQ(!h{H -{$*rU)rT?Z1uRSUxdpzn8ePG7r01DjQ^_%#J+MC|`*75)?Y~FM{hsCUH3(a5i0p0@9!x)t3B^V+BG>T -9h{vk8kJ3w1Be0BFRx#HehCXq+Spz^?zj|VZT-b-nk3aq>_vGVMy%4M=R^$jL@gmijxp?sXiWogP^0PMYG4>V -l6pw6QOy+!np9?4vAg#(wp?KI>W3>o96f)xD3|zk<@CsqHazL_>zP;r1b1IjO6d9$Fx!zNuh4TQyiu`LXV6px;^e;ksK#uB3K -&Ncl3+ZupRoYBbet*Ek_uy%{xa-<>|4OF&*q41m)U46DJA3B(QtQqO7+F?bKDl^-Xc ->el#X-Dg16w4_#jZLM^TP`v? -T$-vc2;Eherg!ShB|OwIc2uG*wsl -k27QXW!7oBZ8%g7<2@K_iQOS0(4z#P!YVt`w@6qnFSBNGnvioBLn&m=j2$PpH~NAfYW<&SW6m9{te=j -qi|FEB3h#TQ>;A^GdeKkzU34}Sal8})6q_*(ko4ukvp^Doe2mHnU;I|I73j=6Zz@u&Xvg=P?n16AvEh -YO%u41MraG^g^c!VP;Bj0ggCi1D1Q!S$Et7*H-cFL(gne9OcW}ju2T)w* -MTb$mL$Rvt<-$jT3|6_rfB+2QA-t7`h{6Dp4Mo5$>k>`zM2G2V>g(OE&h5!W2ASb0pWf1lCwR^8TURc -O36Pud(72RMShrFlCqiiq3r)Angg8UpuqEZZ^COI9FMIS2{pYc)oO2&=Fq&QG=%fbdEuI8pm!24$9;l -J;qY#~V?zJ#IEt!gh=n)(x&-T+_WmSt@yAuVCiIadA|AL^>mi(m|Myj>g;(iK(*EEN1_V|G@+W)2_)8 -5e^LKm<$8E^W%{zrb)&$n$M9)QtLp_D|bn$6G9U@xjvdCG*KrLFX(Vbz~W)@Uf_^(Ai-mrWSMI~?ybJ -jWWXsYh*echhcT-|P{>KfIFyl(%u^|gAxh=y4YRWh*}4WFA`rKaw0ccaqshFiQA)}hJ92V_8yNqHc-R -dDVRD^u7*OenmyZ)IEse&4G)Sv%w=E)6$ww?ef#oZhZ<7)yFp-`qi6mmt+H1+ts<(X{8rwH!x7kbEjG -{P2>nYG!-oYPiK5~svy|yGJ!#n0AfZN-FC(z8(_Q~$^P3zokj(!$HW&$PLtJEDvpXM<5n2r_NbItbH%D2m?loSe(&p~txq0u_48{VVX;TZJRj8*A^ -5`7dpsmG|#076d9nE1-_>Gu8lC{$4GC7H_iWa#kMF$SuwGjnBJM6v^_#FIU3=zGXi4$1VAkWYp*Jo3> -x3KBS9R;q_Z5lX6uC`wIr_0y#0EG82b9BC2s-gWa?OZ%+zJ*qW)oOS}3j@qNw^Daf5}g)?YUt3lXXzNhv? -Ai>>(^AxQAnGEO6Kcv2+C7mp5$k-QIC2|k*$iFbyLu3?jt=L_c%b{n) --8{9MzdVObX-MqsutqKGP|8qt#gdkx1;DBPcA_|aUgte@-hS_+m-x^gEw!*mIp^pSOeU~O;)yp+4!mA -9C@?pF?!2=(If)Qb{d|Y(u0$mFVs}9MMqi>mCJ2QU#O0dgy_2NXkVQ%qq`Zlrl77NLwyf_*nYrmGVvIvPY3gFFZp&`%%j>N*aif0kR+>0KN;m8Q? -#?PiexJ9;G-_rO~wXJpA2Q0OfwNJ1pY$oA>7@Y*;^g`;z@QZg7{?!WLzSwU)TW_F-?VOSClhL{u0%$T -f7M(jC&UyeL!c)?)SBWU4a*!lsO{Ggjsm)%FfukYwaeG|p+6Ip7S&r49*919Xx_7SDl0g5A=kN)-Bc6 -fmWkq*wYPIZa}DjEe<&Ev3zBkLvg!vs3eQdg@JP@6@Q+7Sp0ZBpC(%Lu`#nAVOujO`0=M>C(Qo(!z2( -M}4m^at2w-RF|aHJh*4Nah%Gt9(4#%epGmhl_&sxFE(~+hO4X0=v-2MlX??{{g*{0!p*jIBmP4W(a!Q -r(;iZ|K5wjXdh#yEcf|LR7>ZbK1xBR}t<84YY^uTZn6$~XKIRapI;b*7l`Tev4;EPd6mNS4mg5{{_n3{?iA8!pF0;fuG#3Y@S4#o9QPb -!Nk(M4$9JjHXwXSelw>+`Lir0M)GMC9!dtO^Gc;lnGtPN|=gPhsSJ|&&f=|mPCE5+-gH(tAsk8%hTfFb|O&rgp$?{Yfw5yO%+WYd_t8ulmRxMX~U3foYi~Dx-PpSDg(-acXOXy@yL -PQM!i~j1+F_h-Z(s*lXdC&Cpg-5p#C7#43PwU>bjq#Rvj3N4_88EYviM*HQl#q*Y^}u%x%e8CM)@b2l --A7KZ%8wyKhbKM(uzna#t;()THZmF`=D+>rCQe&aeti^E3~c9R+3w`u%(qfF0it*p}Na&Y3D?{4D2wQ -s-rxMBnu;*(54{wO$`e}wG)aIH__$^MX7U|?z;lrPUsqyV^l{0XV)7FkQz;rmz4txBRso<%wbD8ivIB;+f&bf+cJXBQ2vf?@7d@fLp97|hIDem&BbIvvjJMt -o5nCzK+t&8JP>z>B3qtE`fW=Z0)?MUyh_H{DWI`&w-1!)wq7x7h26Jk16QRF=-x)bpIRi`Q4U)9TukQ -7ilPz;CpCB4mDrbAvP1t%?~?;$Xv52ag>&BNiovCT(jKC`H7C;^&%^N4@x2wytz2(^nrUILsC`ZfadZ -NU5<}fHGax+HS);NX$<_KH8R}o3l;3wgWpG54kvCs>j#+BNyU;HN;+#A7u?utId+daarLafa%HfzLlh -MgR*udYp#XpGz%HSZ|*6J<&^5ru0}98)2G>tkm^tRt> -gBSK5f`7id|-Nl@5O5&)sf6%!pFB!x^)0a6gdu8ge#3C>=Wz3>+rUd{qCWX|WyFJX?RLjz%XY^nYm89 -a6;UfM1aXYtY@-vPl>=Ly00x45l)6M^DHo(;**@54<1bDE-tN~Y^~@`+y4t2a>iw;p#$4%n9`19%% -FF`!gJk4&BZD+h)hrbYp*X3(r*+dlgD_(bLGuBzEAb2l*Gp2(tV>R)NZ&0d(bFI+j#5QoTQttMCEs-2 -`sCR&&{$yDbhq-PZmyq!j4T?orawbD7=u~LLrzpUQPJ51MEyX#d7o9#P$aMTJ|RQ9qlHW~t-CMN`cOe -b1WsN2`N*Iltp@Q~)K~>s7fZ`+hwyttg0}K|$xVO8E_lk+Zka|195r!u_4Yr$JI0$CU^q%jqQed)7e( -_KQpN$AOuEsLgPuVl#9(;96sA@LzJVvKu;7HuD@ag$71YZ1)*FHpi8&&RBP`r7TiQ6O#>t(x7+RIeuk -v1V{=Uk}+xLjHeGJ0n?Yr|XhO{<%_k$lxY%T9chcW4k3ib$P(q;R?nYf2Bv^t^saufIS6k0(hfn~<(k -72v&r7ifY=P-FKbPy|AerIBddCPGizNh%F>9WsX_l?b=VY-+#F*>?q6g3oKMURLX(s3smTTv}YWx)#0 -GAI+DovEpv5)?00CqA10*|*NB?4Kw|NPlAmh%US5G|dj2BZPf)qPSm2spKeX++2=(46JgonTtgXn%61 -M`0|TqXTe9AUpTMSuP}7dXJz7~DAuTPQ-0UmaC+%mZ8ShHUDOYiI{YOdCkc!`$h?=d^PDoT?{{|{0*a -p_#nXt#vv>T3=>YfZ36*uT8Ir%GMQnJsw4ba`cZI0r29 -b*v6_O^r*~4Dm^>h=-R~g7S9nND6+jHJB$?b_GMIAjo=Y5ODX!oKoOyw8b3TX0JHj+^y1n*>58_s`e2 -f2&%a``28yz$96jDjz@4DE}2LDt7{m_1lbG}BmM#Z(=Whc%Anvd4EzHWy>kJ$_poV}vh&bfM<7=ZPd5Mkl?^w`8q$r^?vXWw9x(MM^!;ggNMliZ>S8UpdLsHx7Aep<<6J5WD$+s_ -me02`Oap!Fs*N>qnYx(aU^A}xe_(;%w9o;dR`1DVxmWu2_9!E#HYyEi*IR{1L91~f0d`;v>F1 -{TE|633_J_AkmEb-puy<=rZ(#-YP_oz=~JQS7G<28B{dDZ%O&u#y@Rt7##Lm{6~#!+0)L1iGwZcODv7 -aOI8Sz7RpnE8lC@edj?|Gz${|MPrMhbKE@ -h+))qoAQ6-5reHbF+L|=Z0CzEGS_~u5we1{Ai^6HbB=GqAnRdX2k`!T`A&9;sjCt#WmR -n;)jFq#obgi*Ij>wLHVq?>-UR-odgTVOuB9;mNZemti>sHxs%2>=M%uKu-YTC)z5AYwmeYZ`IMXGRRfs!G3 -R<;h+}-0sH@}T>~P@=s%=mKqc;p5l`7c;56>ja8S$Jy>+q3_{^1x`fj}MntXi|zg6*_av*eX(@U@KIX%x9uRxm_lmW -Ah{wpzkuranVY*DQ$jGYNJ?OlO9T7lq1E}75xODbeUpswTiwDdQ4Gk8{qhuJXm>Cj3&uh+16v?FLZmg -ST2isL09WEIYP?IvEJtdyx6+EySjS7y~KXxqA>^yRl`&nvh$S62;!z>Hr|`tsoe=72t{cxbc -bBn0UtP(HI7E|zPxeQL3}{*yq66 -o=jB4ED^aIZ%aP}>1*kitT(j#3(`xaxdygK~Mu`bPe5jUJn%S=Y(vq?;6JCdOJEpq?6{mPZN&SWt7kz -M3S`S8$EwS^c?nr;<6(H^e&7VqV2znCDiqWll>Jl}&H8c2NzVuUMQ+2a{P@}=GJ53aHopnRzCp*;h!g -3f&4`jPYSFiy6T)kKoy<6Pvu>+R@)rp0}?J@OJ8X?RD}%26nBLkpK0GK_-;g%9p2KsjgzAxf#SoI -CB-;pQ7~5>HFNPIqRA6tmgT*$Gy%W;Sw&LZ=vXP(m5n`4ofx3{No#WQAvf1|*O-&{=u^5V^VHTRl9kOm-S3@uxc@#Sb~vkJ721dWlQq~)v4jlG19dC-#PNM#x -l$#gl3bXv&l5|ZF!@*K;W(Dd59VTPE)@&rxX*uHd*f_`A{uda^E;#Qy;zRBJ8xneLD0vH*QA@ -JGM+E>rSrm*;M{@q#Pt_AQ8i2_bmQdTXo+bco6-!uxIgYX32=&*`NaInq1a~a4<)goxOjh*xf9@!rMF`<7iS@OcaKm3FtI)j^t%^=M!ZsGQ>o_^~?v^PIhJ{LBPjGP0(D7I-Ha -BA$AqvVf%w3cpL@nn~%{uZzcU4hYjnml=7Rd~{0es(>t%bH^^7gQ{mX5yzsl?;=OgDymp#!DPZcpS;%=k6T0UuZub6cY!56bbk0&G-zqXlR#4|!CLB&TPjYff|ZMy%nM_AIFA`11YaeEHH{K$1I9a -q$N@8?E$vHa^SrS(O0)v7yok53Coq-kqvBXN*%SC{o^RNO%y++q;O0fcmw34BYYFq -D0UgfvwW6<7^_?*n^^;V%=b2B$@a~|r?6res%?jFSm3C`s$C04k!;uQg-ux;Tk -@A>3A8o?`&ZuoeKDVh%+`!}9T$1i!I1axyLCiTZ{K6->F9=A^{iTYnal?};SZWN~uPA|0#Eh*ek(J(8Airl2vGl5Eh8?uaUKqS -4NML!*LR`XS+Rk__AVigPx9~n^!-=x7Inu4$wT`a{1#GjZu>oGPJvEs*~x|NilYwR?<;FN5Xz(=iyP;m -e<(9|r8HFlLtgb@*}@ac8b*Ily)ME_<%u&Dh!mS+5>7zfc}cu^mg>IY)j7@bt`#;hQub=@m+p<++^L-0&?z!PnRbXLw`ym%jG-jD%r}7EI{~WIwW!F|sBcr|9iEKY?U6PkN -dd_+BT+Y>_&$}q?|RA`Rs -&dwNuRLX)l>WKQTc6(p`(qbq2qOf(B5}9i(huG`tMU7$w5le7-N7WVTQ9z`i{q}}p3=^p`RVhbV0!2>>ZY5 -2_H;P)L$5w1I@=;x6x_qjoAut{r>?_O9KQH000080P~d=N8$#~TnQBb0Ps-&02}}S0B~t=FJE?LZe(w -AFJx(RbZlv2FKKRMWq2-ddF?#?bK5qSzx%JiC6^)9%1oTzcJ{RAo5{NF)-!49vEAL<$z~*qge24y$pb -*k+ME5~_q_*z1ixf8$=q~1^NoSlAg%90`#`Fh4Gy*m9pJ~?@Q@|;~1n -AyCUayO8&I)x`MVM&V=HiBrp-B<2>QfN!?%u+>W;hW(IWN?8lq8tXR>s2#JVYtyo@wI+Q#SE5TDUXKc -3uy+kT7p$3Ji0(FlD(L&rK7!yc={{x&B%iHZxBj#WWR$^UAvJl~K>&WdCTJkuNeA10-y3` -AdoEUsj{HbaqYhi>==j9A$|hzs??8|nvt%^*Yuk+YD*F_>Dh3_Q}~C1a#^S7pOM)@TzTU_mT-9(HP?hc#+)ClQ_%5_rPM%B$&Sf5(gj9Or=Go&k>O -k12=v_UoIu}oecH`Awgu$*{fkp2}ncpVWq%p2_k*pdu#p054WDL=w2ujo-F|DIY(nB6Ht)t7UYCvd&C -(0iEGkbv@&SB6|$Tp2g52_NegBP3z%C?j4UK?6J -d~P{C{8LJXAE@yJ~B?JEXpd2HCJr00Bb7ILoOCm_~ncP{Hnn%7BHD?yI4>_1U+Pi_u9|}fY@+_w=o`O -+jGR$6O{%{#IJ5f%84>RB#R9jlBh9zt_PskykDWlB+;DMVZekPd*}#&4ObL7gn@e&jMz@Ut$WsOOGNV -<(gQSA6i0NiAg|@Mb<=_ljUlhaOT`cTc=5W0)`!I_Vt*|vwyhL~wa{1rlYH4=zFzoZ;>*F3uTTrohN8 -A>6tyjfASU%9gE#9~2t7pRocCe9#Mc@Qb+iUZk?xZRr>d&6dwe9RW#+h>b9Qb#l)-UqNCZyAq)H!(wMj0ZQ!O&bx -hyxJ}SVRY}#@z-dBsx1$IakTM6_}b}Xrhw#yR;q-!fWu9~#RJTkd<>bd3f^GgwiSwyF=<6_L}?P#k2D -}Pfho8KSLwY&>tDauMJf{QzkMIfFxKNcqz`+2kNe*H!aK`|%f -F}TT#bsY1aCjqGS+N%2o9Ky4Mh#jlBoBlG+5!S-U$&n_U0|lU0cX3y;Dj_HX2YwU$TFtESD+`{W5zGa -QI!BUobyCC6)d1oS!o9z@bqWf!^qInP7pK;p~NL*QYM}x)C}=-F{}%_jmS8=lU2vQE0hmHf>LD!61Ec -{iPSMXq2pXhzC~Dv%u*w%qB8i5h?0_{>ip(rR)qZIzJpgD~t;67ja>;IJ#cbjkaD#l36$&x0#S? -wK66?H`+dwuCWUxTsB^9Tzk@Elt^1ge%r}*Gd#pK4Q5Assz7^^*gl7u6XH6|?jLhNuee8yq~39*$Jd~ -58kK|SruEzQXE7G&-yv3E*9Z{070!2p1o6b=ie%8iV{Dmh1B00rY2s<}!j9>Am`-B_)7mIS?#9dVnfl -Zb=U0pCDzKL~KLp{g!KmWmL;PUA?>m?CGUz>(Mhc(5Qf4#c_A0Fx+J_3-22IwWOSj~E?0hGW9|?RmQ -zGz6jD6L5<7qehK?4?|-o;4t9fnty0j)mrk1xFGBL_;jEyW1Vcw+#2b%bAAib(d$0tksGp%z+X?%U1yQULFZAu8mO?<0Y))}r2EkZv3u$g4XpOT|3|NC^c{6L{9?<%MJQT(47S#p ->DKfHticLin{AYkr`&rq6L8WX`hA+ -M_qxrRozd*_avAIU~Kw?_u=!GCiVH?PdKyH#4U+p;C#(PLx$;x+%8%f5&f0>eMug2dUbbJBzi_EPne|r`|pTWCW`gxCjeKdIFrv(qUQ%g}F{Ocb0BUwv8MIP-WBr##rV -=~yP6&jisyI8blb!H4=3%AY_YaYwU+!)>TNC$KC3U}zZ&@LYtbsiO5-a?n(V#oj2*wGC+vX0qAhvT3= -DQt|Fs>rZ;%}|d8FfFtrj;s*bQNY$mg{U*Kz+&9JSd+BY0bMtD`uMDA@NyjUv@7WiUIaCW -zTLh^y)0W|p3H!I+>fBiQ6TvpQT@2(&jZNmb{KkS~unZ6vo7l>vUxTqsX{-vw4Mm*#cEuH_`WA)^Nrz -45*&u4z9k*wk2MX(aXt?*b4hWBmN`jCdXQh55BtiWo$C6`XdzxJVzld_CXA%uv2aMu~QT2832?+nfX4 -Q#=85HkY6JK)VL_Kj+6BFuSI^AD8HkKJ8sB!9(D@RzYxV9TH``-cQgY1QQZ$GHuJu)>{OuAo`>ue*QznuO=YTib4IA%%B#g}Az -|t>E;_yS9h`i4C$Jk*~{Gps;I{y7&QHA62hT4KNBWgLWLwGsXMRyD>)-GJnQkqaSEAdytx80=YC>kXD -`jN6^A#BInHPB=gsf(%;Qfu{J9#c9UoX55v0GB--#t)5Pb}CVu_9ulrri^QU^JQB{&qbkc0M5;S80K` -?f?Q%DMcZ8|Av&zG{T&$?}#*@u_zwhLw7^snzbZ5rx8qvl69>-TAa$-n>GOZ}VqBT86hcpnC6$v{nmL -lwDc!^6pkjzW;IwHe+BhkHLR9K=g#H6|Z5wr+`oHnGj?NPP%zH|peojJq)>?V-%}<4A6`h$6Hn8}CE4;<6zK5g97KmS9FxkWJ(Bk-LuxLp!9Bm$QWfM8OFeLFCQ)LL-ow15=Y#rmv4;|CMNje2IE0T -`t)a6YKU*)#BiUc$`7q3g9iYzYm*pJE2Fnqu~cbk0NwEVw)jGH{}JlSc->Zjw`Nvz1#aS{6&t -gTmB@6>|LL*z|mckaOcKeP1)IzF`${%$1hJju`pqeF*T+sEp~Z#WulT9&<+A2lSP}9-Y!buu?ML)MR9 -+~^0QO{jO~o=aj<5d -s3}dVft#>+N~LiASem`Blnfkqe$-oB@rDQ?`hXlWJ&vNkLQkHzEJ?_f-Y-spL`RVzE#n%33q%JG -9I+QEo_;~2_9CT?$EqKYzhEKaVTs}!V>1IXLNRj=2n;Jl5EOPr{@jK|!5+RnZ{%QTwXp>PcSo6SeRhm -xA}{J-b1M|#Mv(y?=&1vXqtZDd>kB*u4@9(QfoiAfjQ+8Jx|buOncd_FpXt(ITgGu7v(AWGHs2&f@M~ -;eC#S91-N2_VwppLCK%Zldc9W1&E+%wSPjJgB{Qw)rHsP5obps?s@u)?bW^E=MKoZ;D*rt==Sj`@)Rq -f5x?p$*B>}^}PT;KYf*ie^A52*iPlOq87%^P6m>qYp%9q(gC;TH}IUIoF2fclg)AzeJyEdb1?Qd%(bwr1b9_oFh^#w!>$B9oqhDrDH3*WoQxka%u|&W -TE8b7IWdEdeQ@GU8kgEFC7O>f0d=Of3Ws?I@(62KvDeZAfZyYpy?luTk8ok?fn%wfxkwsGt0cx{=Z7C39O{5>-dT1TNepWGTOhx9(n<$YG -qo1qq4jvv7KDta}%&|QOw?4&!>#of38c&T7=@=s7p0|XQR000O8^OY7ypI>kZFERiCtHb~R9{>OVaA| -NaUv_0~WN&gWWNCABY-wUIY;R*>bZ>HVE^vA6eQTH7Hj?P~{uNC3cu6H{+U`7dMw52d<2W1NlZV%KW^ -+%wqozbk&1s2LNXl(xod1671rPv1O6_Fs=ALtT61PMFg#u8h7Yc=w;Pk`OU|yzqv77|kW^wvwd~MRYKGH9-|;Q6k(E{ou0xoB>aDhs|U -w?&#XIlO}pSrsJEUeQ$fY}=IZZCPd6Ix8B4^)kzXZ=OAQ`rXT?ar3qbk|GVBeE;367tj9o!>jLKyu_D -K?&v6AZ_26(mcQhiqeWG&gS-sn-QRXiRzLe*75PV97V7h=TrQ!b>T6l6Pn)vN-)@rTTD_>Uqo&$Tjsk -e(RdZcs369fI_I93an&26|e_B;#Wfe@f>-BD`iw8+<)Ri*7tn%3rV;-w|U*>fKub&ch7%usFUakQ%RV -dn4tACVvF%ICvCaLO-K5dKk^BH!eNY?O8eL92JW5TiX{JhP!Q1a((*bdjP!10GGNM6C@heaqz>7Z|KuV1_KBwnE^y| -%!ra;yvEkI=g{?Wuug8WX$r5U{yJ+CgrVwxE8pd3sJYT3Jx}J>SvuWR(Cw<(;b_7TPv=#Z0=eeN3dRK -}e_LhKdX?1I-fq>KRo+Y&`6}ZXS!NAF{0EH26dP7hE9g9o5iSHT94>`0rZ9-pH(6CvmtSTTe12Y)Z+B -{pksGG*zX2Do -x}f8{NV`x{3#q`$!DXZuU~!p%@i5L)9+qQU;XdrPo3tP>}_-Zx>>K@B^#KCIkBPpZ=>sG^u>AwO@I0H -tH(cl^J@C+yDy*q2$jR@rrAvH-`@}ui_2;WA2)e;bd+Wb8p>p~B7#zMM!l|aS)PAa7TJhd!SV6&5z}< -Dt%?9D1!kpyDg`%1d0Pat9q_pz2j2KLrb-i->|~8gc@n$=jtYw)C>O+B%~BP?o&=AB6@bPP*bKw$HWp -iWGTjinA16dtXR4|)#Sh8+JN?bsN%TB2oi2WP=7Qjli&bn(Cj=2UEjp+tSe)kh{oR -V)^wIR_>d+JH5#qB}$|m&mxMi!CrSco~hxfeTu|Unh0aG*u+sgz>7f%_^B^Q-0$P9X?Vvwo67ZLjGp5 -Rh{)hp@9Y5xuPy5wB+F%@uB4F*Fpv#Mes*d*J|h?(t`QoWB0|syD!cZH>8D7R#7=ay`aPRh&ORbq~aB -qu7gup)*yqCXCw{3&MeOFu)ez7RxlkP6G3gkp8=sLjGLs2m%rdrppUa(&eUi63o15$S7m0uggk#UFa) -Yy2VS;ZQo-zPMt^UwS5g5K=hZd^oyx7UNf+T*M)kxHXiWmW1DQvX8&v7r>wJD4ke*TpyK)=cCLonSB& -?HWejSsv1P+z}hY?tBk`-_`0EO#~ivb@=mPuaJ4Y5UPqt$VO+q}7EUb-y`RM{C2b4+6MorZ%F%2(VLE -D=yx7{@8W1_qa?NmC3R8c&LOh7gjrw_D(fz%(~IV4mY3ndR_LHNPH7zq=hKa7I(Y^O%!^9Bk8l!jp423u7?@7;0(94@tRUtu=b?6z -tugeCpfqoUhQjkp@Boy{FbXlW3OL%sr`b^F6Te2Bu?Oj}2J28TB0KC_rtK?ZTi+Xc+)EDuRD(VfMB)_6^uJ7Km*`r -Ovr!T1Kv3I2swPK3kaPQ#3*`ItN7v#*_>g=71>75OH4Xl_o(05Kcd=QL3c0CNaLi(5l6mp}?`mq*SFp -BXOETalJz}jF^BbPvZh&Rgt07X@!%uPGPCdK~t@GPHD9nYs;AKn2JT_5^aq;x1I<{t}evT)~oG$W9D6 -*W;Hd@&s<->Q-*OgHBC$dw2P>kIBpTGk{%xN75asOW&Q?~U8zKtGrR;*fNKQg4ovW7L;jUFphzQ^(`* -7q-}D8v`jXHB2uA&mxdE%uGjc4fh!TJZaEWYZBzdhWK!_&YC7M)}{yny*`!)x|Y?cwxA;;H%Q~{-;n} -mpL0z^{10IiAS%WckPf`W!5St(78qS%=)O85WY}hb&5ooW;O -RmDaR$TvI-itpluN;gh(SUza7&$i^8%czO*dt2JjY|n -#N)wY#`c|B#1-?;`EgL+e=0vwrYyU>p+Z%>#7-|`kl)AL12)%EA -3H#`9%!L%oijM0N?%1+p3OWXESJ4aaPhZY7SkDmD1|DsOf{1oYF2Jt{FGp4Om43kN`2B(~Bc4-{*_8FE} -84{f5XA1V&gE_5vAu#Yousk4p~1i(Fl(p?{giPA&2mi+huBiyabzVtZFKpl@lkaGb$Opu}9tJn^`hc> -uDmk0PwY_Km52ieCetsM+mD(!}b+RPXbs*jr{TW?sSL0~}Ksy;4d#SR&sS_4QN;-!>VeN@4Eu8n06eu -lvJP;?qO&z;u`C=w*uH|U-LZ-8bkwkeUqidb?LuI9bMo-cvJB1FD -%ogdvj}k41MHM#HnMe67}*@wpQWk*K0HEDpQisN+ttA_cIS8;9Lvxiw>;%o4c#$K!7+@&@n2g7bj*$v -1FU~qh;nd0$duj>S@$|~e1_&v=;_0+@v6K<`%hl0ukIS7vgq@qQUeRrl6?617tcw{b~9Oyz@)>|5O-< -9Y3R}`dV5M3cn=^{51I^=I2I3i2Cqw>WB3b_zEYMfnNM>d#`QUzIQvvo)VyshDhqUGv!UFZrqV}|@Th*hB=cd>8vs>i>Iy8tX! -M3}}t@z8^|!0B&Ducd$XQztwjwh~SP1A*c4vJ!L^we3G#OR*GPO-sY!da#V4N*hfQMJ_i`lzZpB6NiC ->;b^o68P@kt+Yz9>1lqpZ+xSHoOHp*KM{h39CYPfTN!~ZeP>}5t~wY`36W%YRSM_#6&H7l=m*j?9bSTx#_?`f>t(GIRqxM$_t{0i`+vf -b@ce6;QFXmlco4q2`RsM1aUVs-Uy*~7ts5b*bf>b$dLKEv$CQfL7T(i`-yt1LLUTU-)D5lrS~3pqzE^ -*smjCVUis+RrPfbh|bW;!9M=;7x~dC93r=T|S-mzDG;@v9q#4Cvp -uHArsPhOHRcp~BrM4JAYj6~cyj^g=>#lHlx=_F03-RMbYKwqiulm=-lV*MleQL0Pq1j)(*9k%4W74CC -e3kIz2+Y|L(qZ@>I>kLRKjk%BmINJ@R303;N0>-1AsW5Z|^&;vVD;hIAdwSuEOU<*mlu@psDba|UiDS -flM-Jp%DVi75vQAb-~(ZT8dfhxm%2wKKelTEzHi)5vKByupF!6P>t$%ad3sa=Fztqw0 -Q;CBzlLR&A5B@zO`ePF?xIQW|-1v|riZ2iug30_tTKLAE?oi!3f5w$~@HPL7kCuwS1(=4RxEd@yPpPc2c -@AbgXm%WU=-pK++@{tvgwW6pognGIuD@MIQTp`!#^M3*N;b`i-s{86ZE59U7@{sbv4F4xbhZ%Ka~P{q -i?YFro@dQ9{w~AzHgmpcLs$U3I(}_U2mHa|2v^g&&id!^LVAV98o!fKB4Tnx?&wOsJHX$ZoAgZ&ee{% ->c<^KTSeNw6W1OYpDk`y^=wDd{;zu~f<5I)z*dz-LH8<@i{4gr(1H^%(P39km`3|aqG#nrRK?zQY}-N -#qZtuI_v%qNRshE+hq6e%jp8 -Oo~cI^9m!H#rADnCvVZ1YkW%sljytjGm0_8$D{V-?(@EFMfnw_Y1|^GGy8WtBp;teY1q2V7Mj*Mp0HC -6~Sfqu#1&iCN&+q;i6+)hv&jl;A3~k5lijc+hd3nJ}RCH#-mfM)hnsMh3PU@k7nd*HFotzZ83JD<*PV -*+f<2X1#<=Y8FfuE|{tHlI)pXLDn{B=a%9nHzsSM9(^nuW9jP_Yt%+2KqSreAnb^YSSvU#E -V$OqCv5^Cxfrg-3%P*C&r`DQnwh5=@Sp^e>)2Q8DH6*9j_rWkg?L1WO(K`0Y2RP^}GobRx-vXA~|CN^ -e;)3iG5uzNA86XkFD5YY?n+Ty`~Da$u~Jwal-`mLe{VV$%*!_rx5NI{o2?H?W+oZG}Suj$JL!I!?u*z -%wr*>Fa!0I2O4?-1GJs@2Cz}t$es`0EJ1-U9o4HX}FM$|dTf97C?9~f{@nsd!P -K3+=;{9iA>|L(5R5bK3?fK_2snygwRAX7jF!b?~bJ5ajTx -rB%>wgvkhG186T(FVRcy@)ars2hYM9fx>tnb%4aqeJf@PRt|gJnDZKLD3)ZO*X%dww8k%ExhnwCq3+w -lh$C4(IbB!6HK7rfifs?ka9ct9kUbK-lzq{XI|(}m;8mD@(0`dfuZ+ATB0mqjZ`71Q(R`WNl!csaMpwKbeB>po -QQnAS@_w>5-Rt<9CgIDJ2tZ#%l5-S@Kk1F$#&#&JtWH8>zysdb%U)z~16S_W8^2Hb(IuR$O68hM(a&k -gb(_Czsm$qLu-E=W!LO+Dq^7N%5D3s63Ji?j<+K6Oj^2)=YFUY9&n9cf9s+^dz)Jp2~5q`V7}8x`J*( -v4oe&wh>%%%S9d(l>&v*PXcV-EAv#96N;%(op@i9Gd79IsjFC4nT5v@P}BtyI-SA?5jmZh};zn(?V<`QhmJT_|tP;7tf`!guoGV|elCb -^W@4m!sG9N24!}umuMep6ak+;Rz257QC=v9Yp}mi`6F`tUh(I`pkp`C_xuFGgI&m|GeZsKQe(&DUF4l -;|VH!j;{d+qdOPj@#Pm0v~~RG@}rRpv_C@u=hNyx%IEhKwh148C~{P=X~nceE~k{(ZD?j6n4|nfQ)J+ -rzEYyikO$Wwqwif;-&*q_EDL-N<4qzBbtr7zZ9(GJqlYqfQ#?psOe=Rf!i%4h(_bE({^d{q_R;wMZcU%rZH%K43$^jqo)X4I9xpJV3rvea%TBnF+CFBo#n7%O ->>O%A!j4#Ve;8gO-{vo8=9iD@i?4tD`zL1MPt7l%g^n4?ONouKwn1dD=9iBh9d*!s(3v+WElC)=^J*{ -*y@tWKokgo;Jxded13`H2-o3N8=#T(&I8rPB!D!SQmqbbu?;k+Ft&AK0ozb?X&*lFgD?YGMbWyYE7C@%Tq#3(h3D+PG=L!+8X~S{PPt`9o!KF?e<*qwniza?dUVcvu`0{P-CXR738^KRaZUL$W=08`M~az_D2R;mR`QHVZjrisQcy -iae_{<0$?2%C2y|L$MQ1)rM;)w;5n{~X#SAk`ECPP5>DkOh1%wSmJuF2!s6Bje=N;FfT~_a^|6RP}R! -KF6=V~PYdp>Cib?*dDW_~3p0lzM{}=w-DK<;e>2=9L0v<3Jm_vtlD&PoMhJrioGR7Q30 -ppv~6mY#8?59dy9KV23y@^cmVB|&m$u-w#`(_|8Bf~6oy -4C2KWm_0Bflu2OQg$=E-7F7cnFituOO)GF-f*i~X&L4*ft7tn1W6KpOpAv4Q>djFpbP>aFDGXA-@v5D3=5y#32+kj%K15o&SpS!?3CgI0Xo -bYE<*rEEDu(65aqGK?}$E0kFOzIt7Llzl$gg-F**QsWVXQ*E8gu?`6JQ{ROdg*2RtAkB{Po-f(QF6p6`UFzKLKTeGRq0La2_=*Y -*RU1*1~A((m&?t{%$hP1leYqyG7-t+^~}aR1N%v7f+q+SdlQ*G(wm2OQ9n@OHd^e1g$A-j|-|X@fe_* -r^TCX6H#(xZs)x~HhiG7!#7PTYp3h?-2>#%CS$RCdaD6C35aw7>r@|~+&|n>z>UVWx;Z)B0@x{^FVTmNUIM_1u7#+skne=f;Ifnx9p<_ZT4^CXwTDHzE9xOUz=K8D(e5G-4ivM(@_iysY1ze(^f}X! -Lq!dtivnF&4Ok+uoE`Ut%g{_C5r3h=tRTDoCgL=#;W}zVL!EGYodIP!20Q!T=ZL9LxiqaAhyDD!WS2r -dO%Ac|&mkI4=05)*>w^X)3>ctwpwmxN&2W2IW^oYy5e<^N1KBqC}}nJ1TlFZVFZx= -u3bkNTM=)$nAK9(96kSSH(M5an6$*-JQ-7_NmKG4s|~!uSqt@WCyf_1^;?Iz164ort+E*BKH3or;lV< -Q|I|8~{EN)xv8UO7yMM?k(W^T?e#>`w(Ru2+HL^XzrrEMAXMwA);^s2tFLSv6+~!zN8IlN-826}R~E23=)w -*lnD%LTHYoDSvMYU6Y|m@&sT*V@yy~=NKccG8^W_={j4Npn= -Ittw5nEgrn4aP6e7w`+8UfEKR7QLr-Z&EJ-&g(J%Y`3y`%vYX;&^ny;paxzx!xl};|NYxrzks(=&8?D -+JDIwV5J(cP`{<0I5cXb2f8#mdCZW`DYd9yz$z+His)}f0HueKN&AwB{;gT+N;0MwenIOyv1Y3Te{H#>N2#p8~F8*OtDq=GoUBe?y&(U7u=lx -GkiS9$hFfXHM{WFE^p{PUu}2bt4trn?eh)E*mK!F35PQ-IK4wF;R<)$P9KKi^Iw3-nkB|Io%?8ZN#U*>%BP9DAJ>i)& -~-eQ0XQAh_l)+Wa>NJeH>Rk-56**69(=MlFN6{C`;`;yYl@ow1PAKM(*dM@b5r=Z-m^VJtYs8w{#_Ac -^k83#%-^L8y?S+vvZEVldI-q=!kZX!xfd+LWMn&$DP)iSwN~C2s(ym-6 -7)a)FP1@p^kwn?uOCl1C;pyAq<1Gmz&*F^2?`yC(@XSWyy;5P|R+TS;$8~T^ff$^Uu0_ON6>^UcsBU; -2q?yJa2w_u|ZvcZ7E0x>jHG5QQK80dl4rpJmGMEEHC;LAv!SlZ?paI7a83m?4#YrQl4K -P0;H%qC5{d(k`_EGm_qxWTZRZss;rhgMtfNCeLW@6nY4$2Dq$5eFwKf&|!MH*`NfJIc8Te -t!yQP3V2HiBP0SvI>Z`V{n4b=0lq!ZDI?#_?555%6YF%Zl}-bsFXf8&;)9Cb-qIk%hgtew4^NHCGV)d -S@(#$L`f@k?&9`LgM^A|sJT8vsSigrQ7(aHZbYxpCk7ZKN -q0klm5WodZ$w#$}ujtHIBf>;!1!SFIFULzYyT7OCR>~Y@uK%ikx`8J(A{Z1hpp6zpddbcL&@K8#-D|L -gErE+i>Hz?_4z!BS+U%HzO_oUsdndRs-kmM&oXGOMvYU!4OVcPZJ0nx6I&X1ks)@DW%$&%h?E;)cdN= -MJTsYc%Ca)R(VUhRar%BANzZ^t9vqx$i3S!GK)jv+`~?M;b=P5&luiR<50B -;w0(|~?g=Dkhz~IC(b-aARHAAqYCGy;;~3(qpb(R7jPDmw!t*Rpu`8ZEG6<^;Umbji%p17%w|hs8N&F -M~*5!M;O}j9z6kdBR_qrVY>Zxzw=>dV=g?d)CU;EaZEVwS2@AoZIws}5UNB0RQbh5_tS -csIt?`1gS|tJ)@g8@!zJ9KWw?;b@^rOP%e^=I`~4;~SCOF`b5TylXyU$<4>WR4 -Ox*57r8C@(~5pPg=zCwCg5yYO|d*Xh9nLRU8|2Esq^4uvtND5e_y>FXT$bg#k?=oasbo6F!GQ0rjP{d -Wko!1`dNY0qT#j*_AQ8mFGr>kL`X4%hH(UiWsuI_UiH&&1?W5TL5S9GgN>_#{RK=7hSbtOpudaq9383 -q26^4PKp|@y3-pT7|c9P`FgyO|{3c618tyGZJy|m2p!%-%IW8JN1B)Bf^~VOJBJo!PQp3f<-S7b??p@ -RK@;;Alx&#d#cg?{hHyD+MN5Fdk5p(6+octLgG#8 -fJ1oqy)%T)c|x9_Uz-NO}jDY*q^VD);iKj5O4gS%lqwg=cjfFSMjLe4a4C7pW8w?OkMCsr3ut`wk -F}}rW3i!`o70&+ihZF-Z12vW#o^ -B2G?=I2kJ2cMjM7To7gpFD_*W0GO*s7e9@#`sh!HmH5Q8!vTjGwRr>63={IE}x|0Du=CtwViDS -I;$C2cHx3=`#g)J4TPn0gtnkBnN?;UEkU1QiKNt)UorPiI-GX{^-)Cum;$-`)lV)mC%iV9Zf+I%kk2? -B4gOBK$63pQywzKN9XP?j^d`J8GmA`0Yf;eK~~gsN`>x^Lw!Ak{G|7Po#tfjXtLg -$@RS!^0dP7_Wn!L=F7276RD?lSEzyJLv|;Ic>Rw5v*ed(Ek7D^0uNpa}%X3hib=j&zYzR^!MB7qrAv( -muWq^*__w6O4Zj+IjL$~zUr)pzG#UluS_*({W)#J77XphDnoUIsYFXF_Z(&hEhg?hW$P+rNubE_Ve@q -`W)qOOrNr)v!HhdGo>%_tEPasXf6d|67^vK#^H9R3={+4h@>rYb+SWP!|QDl}8o`zb?T)@$$7NswcL7 -uBp5$io~$IfzmWlkxyssWZ}{JvRlLcr<-Yn7wjF(p)R{)T`?d#6HBU&~c9ENsVVDYmBLE@;Bz~dH#@i -S)?vwXgU3Yo8mYI<~r8gTbE3z`7?|2`tLG|-qSqn;yHINDOH@e>&d#qB5<2vW8LS$r4s(iMhKSbuis; -LkogP4fKg&qw!z2;6)Z1s$Lv+17c;O2`*yP)H%+$QG%QRB5N7ymr-L)56a*~R`3Ks|;jR3Hlz5LqNZw -eHCS(hs_|fTJd84tG9ESQz>((rd{uc19)XK5;M3>ROJscT}@+%7YP`gyBGklHr)s^bc)fM1SV?+&#hw -j>{jlSSAyt<;ELp529b(aq)*vt#sk>fnFFiWzzuf`XLv?F$?nGS@|2cUbXL8f@3NZ -c?-Q%|itb9g=UzkzfvIO9c|xy&57Py16KDfW!2Pk+2TSA#YQyq`tuymqvcUjSKxB^<Vo%#KgOFR}cYetIMpYHF>1rk3iM;v -1)Y-?5~iHtzLiSN)JK=UAo46p*z$fmkXM7#)>fWlrJK(dopWv{UXS#|jr8HRoK*Snc0}Rmt2cMcd<< -tM^mHn7~(}iZzzFqJLZ^SZgM5Wm0p<{=dy-Vk@N5)=Oh@o@zrv9<#D;XG6)n(Z*;KG)fFwX5zQdW$9_ -bJa;E69p0;tpLs%Je(K-(?KXO?&rxFCo-W^N(6Z!98?ToJ0JKFJ7`U4$vt2s9{gJKmz*T1?7w?z#t*X -Z{R0aK+LmtThNb?25_$=pXYc(mK^O#`+(#A7R3yP%*617 -jIc5Km}YM#7_4hzZ^VCE(!*TX?hPrdPpQlMd>$QqoSd7ylE$h$se*MUjiFv2g --u1>UQ*0Ow&T2?$fuAuQKOVhG<)Ob{nV{va-7M%dV=f6+(mHk$Of6Qr$6s#R}sat40U*~)&n4o*}cW? -sj-lef2W4=oq+Aw737A~H9Zjo%G;`_%JIQ^+*&FvhAMMN7Od||qa_YcLF|AnfdS$7oN4Dt5Az)##zWO -}f*NtrqM_r*B!~?tDV2zZx?}IPK#X?Ax-4H;P^c4to&hskrTi-@@vf<}_ma%rhN61~!~i0Dv-`*dKH* -&gRe=JQ4!yivSTysL+}Xw&5*=56|}ZvG2cELjcf;|B4iH%8v@@kS4A68Q)!W*Pw@Mp ->`N(mPZBRvOVaA|NaUv_0~WN&gWWNCABY-wUIZDDR{W@U49E^v9x8{2Z*Huha#fyA33=}JtKzU; -VhGG52o^)$9Kw!7_2>{TEVl2}s&OOTc|(~sYC4geCo$Z_H}Q$55IE(hm+1G2*=yAu}4ILQ`!tSaY|f8 -xk!XSBl(Wxgqr#j<4nVZdH~|KjBY{`rA@*py3|u?smb*SrwyovgB$mx;_m*mWTUdw+a*bb4_VmUkuNS -aw%AvsFKM!n -{@)piWliAT-ByvQ_OhJ``jeBR)61i`)Az@xN1fF>;qDv%&Hhyu{Bf1RmwyCiBl`pYTmVv|h-7Q2@ -#X9{5tYH-h`|SBaL|$RtV+@naR<#3cX=ucs|_^2QKeXsF2T=I6htS%;(4BKaP2KG5?Lt*JcR|BLd{q& -K^$v@0XqR0AZHO6(U(}v*>sv@NjaVRN~Ckp9InLvsmz2y)~>hTk704b0eb=XfOe{qXA!`y7wqM{;46Z -&$1Z^a{02%|00U&PLA*4Df`Q?PA{;yhkqK$%KB!`dniBGv!oR-#oylTF1GG*SxDZq%TE~761Z_}YV_* -*etO5KTu2&*&F9cQ8BH3rih4!SKQKIw%P4bTZmwl*aX%ex6565P>W-xLepb~%EOnrxPfhnT|#10ZV;f -LaegV?7}7N<|2kbAfQSRvD@Y|ukKph>7kr{?IGhPg{736iUg^LfRc+WZcte-;b1-2@Y6XR0Qo^{LbHZc2@Mal(Z{vH -sI_ViI)p3H>C%oibXroSDJ^N#@;8}e1Z_;4Ixw|%9Nfwz2E7NDq%`9r;GbfX3Hz-=N014&PCyf4IR*j -q?1pV*^`r-hw$jn~&9~SDy@f0AyqbR{ES=)d-kM}?=n7)**Rz}m{nIN`pJLNMA#S@Xd?a7+k;i2@mAY$m{`rx4$7Yk;WN!* -&H!BaH|b1yq!3oq&IGJWz*ZT-jBn+I9?`11=~;R`lE;t#0#c3dC<5rm1_m){aRJVxMaBPdN;Pq~^;xh -$cu(0Ta~lTl~^a2#D95sYzAf#Dvw3HP6t()&4u4s%>%XT$ELjnT<`Z)x;@TfH!V!t$$eNq8q`3#w_m0 -6-NorxNRIdr3qs(s}{azU?42O;hFLfP+LFdEM`v}f7-VgkOd@yV>Wg4Nabl#cF)ESBqfk|nLS!pGv<4 -6u=m^>Sl%L1?{fSb#Dq>ws%Y+2$iew~(8o`M5IJeuEtP~SOgC2R`;zc!m2I)dv)d!tnFVjw>_#BoXxB1msRFR -iAAy;P~4nY5(M;A#ws#+$39tkM|W5!F;65~zO$0}#`dOae6%LkHfJSb)jN!Rhh4ql?Qh -$$%8XYp);j>9Z`$eDC@5SVo`{R5pgPSUj(xJy)_SB7widWw}as;9PLGu^MDNxb30<+P6+9*ZggUQ)XkO|5)R$e#wx5P56Ap#i*)jQ;ah$Ado@>>#`1 -7c8omKVrS@+bt@0EJ9aLB;0+!Qe|K0PG|+UO}a|;wckFA&W`06wwWq)vj|k(DwJ4mt;{|#lqX`xns)~ -up`U1zFRiAkY=2LH8sn9^B1)*TFPSovZ%IYgC=CId65CKzL!b2zG2kEzykPL;nh-f#6hX3LlxxUkD*E -*YW2YYyPvFnIbc{ru=+>rY@r$w$XhJ&)6K-N)8;MSFpSQ}`#Od#QaR)45>KAJkMNuEE+c^&l2~8} -)4S=x?l_LwtP@tcUY{QSf=$;rG3ohP}p`g-)WImd0MC@-q4t3fS_x_a>_iiV`#r -}DFAEcjx@_kbkG|8Je#lF_tVLu3NxA#cNu82Dv{Ie1fEM7+Z6ty3ZHFq1x(VwI=7 -6jRLO+O;XiwtDw=#qUuGshLS2wS0g$_RRd~wxx^Y7S0;#OZT$bht+@o#gh@FQvfz8=p$}QoIp5C~hh;pB4tF-Y;}6j=w*Cf88`jY;YMjiQ{L@srTuoP+t$>5jg -Y%=A(c-h8yG?$JV8E9KsITpV8|DoCGS63M?)wQ~HAHa_r#LvT1GCRcn%Ao6G-x+^lk3oAqk7yz80z@@ -(H|o7N($ZuU-SpkVq^ZRzPmPsZI&aZ6=iv6p>6`cU^l=R-6UcRARHVy_H&FJ9MQU%qBx81}r%0G~d(m -$`(V?sicJ0Jx%g{9^C=dN{Ta;|7#-NZCHak{|v=mVne>e+6S|t?6+EcyJv&j)^btXX5>K)n?X{{XbKI -I8zW~!Ee8EjOF!KCbcbU3#Zxv`XONw@?~tdWcNfx+O2zC4~j2Nu=B{B_bp8PInBn5bzX7UFK -`n&LuWyO&{6lr0qV@rg*a;)Jdoc)|7cN0}^sIi&G5eNP9(eV -V96sN=b!73>BMyy0u>X#Qd<(YRSjbC2LxJn@t@OC{4v)&ueBA3Z*qCklfp0 -a2OsY3)Of-H3X_|!}}7i@}Q?u5PDiS7`>*?UZ-TrIIZhV=c2-EtHyjp_#Hj7K+iQ4Q?v*~Rl;k}Q^M^ -&_pKeF)}+N9^pvVa4$r8wDt0>VuXbX68H5C?NIG?K!L3nnGB;l7)K@jv^(jpYDeF=Bd8-)r+6brKB-@ -zk?jdf#)+`;9!Vo)NovM=BPkpHj|}ouqxqz?a-mMlQya31EI%nx^+2m -^QcX+*nK*lD-J{<;+mw`!CwMJbu7zl%0T`^tF4k=tlSL-+-AjT@rn^}sI)qt+szo$zAduc!%2A&UJW` -K_sTN;qb}KMBI1y6Ty5Eehjs%EqtK8 -d*H&^zTj~Va-WK{!1SVSLu04}FQTPS&l>vCw{yKe{I0|D5rx+cX*B1AtZqgA*M_Wfy1RQ=$a12UHuk; -+I{JD>mPdu9!0P8_HhSv?y_$Uwb(=ARf?d!@`%p?yTC-X#m7l<#B2)7zZTcaH;sXqW^HpM9Y7!2 -P+;Il*~!bQkP914vebn@cx1ibG|-&xZ%guKi#jOd2rn@6Uv2wR=$;i~tqwXo(Ca~qF*bnpBhp!f6pm0 -n-|!m39peV@9=tNs0oe`!y|;II^FI!TioC%>}!0BS?++|lP(DQ}ugkV}KXDE+|K4xTsnvhGH47j`2ag -*!KvX6<06dm&(pH5@`mM;;%x-}vIaZ^yz+_o`@`8qf%yUmSu!Pd7?7Tun%B+5P{ZFCVZ8PFFa -b>}&5ucJrY>=g~p=2miVFfe27Jp;yrx$?A>Fw{S|e`pJU=QSsqm#sjCP!Z3CzwHH>=LM~{m3hYsBEa; -pAFm()CYVV=7KU!d>Rz2&x4E>+%Z*ct^+@zOZ-Vsc+xVd$xP9E4V4>N99bC7-D3O~-jLz#@L!cg|mh; -t>H{>vIZ-JBdu=;-<`;M7czOX~H)vwY2imp|-iy)g*f_@A6z7MsvjPM{E1XIV-**GIMPx+$D2t76Q-f -J77%}lS_?b{2I;J8gkjxB%rAXkT*+iuQyw|l+XP%2$#!{FfFCi6K)drTRc{J>O~VeRK3(CeZAatW+3V -=1(8n3AerUN%0-*AJI4pQy`9T0c*sEpDvE{ysAOi%Z2@4v@D*zmtB4jvZyEV?&|A@v8?n|;R5J3D=$eXZ4tua*l2G8+XvrTsE#Pe<8QZ -f)Bdr_8$S>FLuRh#d75Z5d+EnEI#}Bu^UjO*p?Z;nla1-EWCnqPLs8m2~4J42&YaY224H6=IDtAmOvg -a!)&THCiI=W$`Vr$-joV+2Qu0D}(zWuHMI*;Zz&n6O-&0EeYeFR@F%lc3{$foF4i!(VD$y -ZqWM2rY(#I2!gV(~p2HadsJwhyl>i{l0Q^lFe$eF=#`z3GI;%<3yKVY7c7P12ZFQQDiGLlMGbNW!T1% -V92LmC05Ppl`dx1nScP1YR*`Jhe!TBx?>I?qV9A -aCb)Zvtg9p~{Bt(Zxa)xC%|=bSqsZAyqAN_m<}l!5I@3EFdAmbqf}dSR+7d)Aj9M8jO2z{l4Le69hW)0!&=zJ$v|%zA(&1Q6YOQcH5 -ZCaPsCzUHi25OjhfSlnwNcHsH0#rW4-2!=gvTZp_O$rlAI98t&!zk*8j*OwSbiB7HKFQYsK^tMSo@{!Z9C!&DyLT>8CAUZ83aTv@^LvNh<~9#Xc>&XIs{+0lD7383cyc>`Y=_=7I2cR< -fo2A+I9}_wyc|uSpUFsvP_eDF#YfzOR9CQ50Ff4PB#?4N+UFW8I{htoIM-u>j=& -8?w9kVe{8P7L5pwf20oN|d&G^%5+Md*_3+u6?mU)CE~{umgnLOA+lFB*e4#uWh{;Tb7D-^5@T<+UL&@ -0&FN!6^9x`4+zAhgqE0A4ZOvb&zRhj4!iu=M^P{%c=UM(Bhtn+hinhuu*RbavM&)7@bps0)CUrGnTN> -kft-JdptU?q(TyiBar!B+X?T@hy|Q%Y5dwQ&u~w6t0~Dj@E3^_Il7vvGl2JWMSXQ`Xoxn?qwJ4yQLyy -E4>kHz#-hkMLkh5x0mS$2aOIV@iu)zK+^8v?)bRe3~j3FmNM|%V)5*T{Ru~S0lCSklOvfM#o|D}(V*V -usPS!~=|eYGWx$}3TqDT7Xpc~U_`(PY<%C$fb_6A_lbAsChz8gxm43Iab6FTKMmv_J^%8P_ -RBkD|bwf1T{kUK!Tf59*@Qmj#o>)dV;BF8=mQHwV1)tG+YX$IFSm^%YKRVk#eE}|U@45m89z(*Ov;!O -Mk@Vlm(#y>I;(qV@N&K*JgvtrK?Ft;eUYX^DrCAK2=YaHoFsMp)&{j{w!hupj;=iqL~Yq@tpW#Oh=%i1?FLmIX>|?^8<#vqA)Py&cmM -^-|kb)ER4B`9B*xcSKFMu~&b(jNX;-bZ$6t6uRoJTF9Yn_Gz^){+l%bLm@Q=9M#+ug*tTNq1VNp9g7? -ufwv-%DoCsY`Ph@}Qt&NMRzgCFY084zKUc-~hpC?sU2~q?$l?*F2HZPP^f*dV)6}(!)wx;L*9w;c)Rc -P)h>@6aWAK2mtey7DxD)XW1vz`5@*Hz>ZZL8Kuvy#S+yUqW80QfCZnsKsy?e(2syRj -t_1VIo4KmgiilP424ud=+n+GDHsa`IpJWNUkCn?0|V_jP`C-Lm-ki0wYz*=48KoV~qoud9-sRF~~tT6 -6ZYT9sMa=2ba`PA8nRSBKAMM<=ss`=MoNnX%_@j!usczkGN4=J*63Lc6U;j~*Q^mIYt%vZcqkv5H9{nvTZK-*beS9RQ_%4lzk!4E9p0TA)WR -bKPVutDCih3Jhd+y(r+DldzC-mZn*wtTT{SzEynX~uvV?`mKNi`{ZwWDW2vEC%j_xrDq*i)m=&cV*4z -)m54Qjc4Bo3a&%qU3pVhccmFqQNCO)E_fXr=CHg?i#%ITIRi8;RvgKei>?H9n=MxtFdcUA_E2n1q-&L -}fVGnZ_8sh&eRdY9VWTmN-hTa6a(MLeO)@)r{^rHu(O1sHx5u-Wv*Y903&kDLISw-`h4f*o238R_JxT -%SHNjpC_foUvL58s-l2#F+TJuX@BNs>lP1&ESCBIx1#XY;rK}cM{`dp{w70;kKtSJZvR+V#(49kA~>^ -C_5Mo1Na!U4?v-8F|D+K)b>073>3NM0Qt&8WfQcks04v_}E)IQpSv;^&9IN29G|_t{SJ@^JR*#R;^FH -Ss2rACO*0up{ta>(SdHZBe*I<1Oa?L?^2S?Cg7N^@2C^I;Uk0H2j+1-&J+iV9P&M3qDzbxWYdURv=<) -^V@{vS^&bUe9p^;!!)*%U++Box#uBiKQWE|DYJu?&v8HHu)V3@3)p}~m1dK7$FK13Hy2G+@Rm0LAaCp -HHqSVraV!K=qv`ef;P`9c93q$nq^DO0kM2+%yl9MPzxg*?lh-L6Q}BPW5aut{!CE!1?}m#wK?xaN$-n -Y>tJw@eGYYBp!A8z}(V=Z)_4LW7T8`uadZ^tQ=@*gxC-kN@Yn|5H3ifb --k5eU!oO(U)wFC~oH@gLpntgYAd;kivt1#426p^m|L-S;RAN~_RiqHP?==_V(qrXS+TLiyFBWQ#w -bH*>3G7ol19W7w`v3w$Rz5G&Zjr*jrJdO4=8NmQp)g`lLPOo_3_1X#aGW6){wHxZCsTA(D8^qAij$YM -i-thIRwIYQg)&*}`MX^{Y@J1zm0cb3z+b0LA`GnlN=(>Lu8#U|8Z4?2AhJ`IZ`)>^Z6LmvSCcuxb`fY~hFtqT -0k~=dhjL9esWD=G!CKSw~gLM=nBO__TRxVS?jM(7X?@JC)9`^$AZDef@8*l1;_pY*~qYORK~n>=Ov16xpDhpXzrm|cspLWbL=*|p*Fjb-~jam85)($)6?T!5_iDmKT(TF?PrB>w8sKQl4y&rP<$^8Ch^ -Sb)@i*|=Fy&KPet01mDsI9rj=?h%&R@i(h_en%i7ut8DG(jvbgqa>r1@51`8}93vACZ$Hd!Im}Gm#IJ -2K8!rs~o8f?+RSZR9!JJxz{;P|$jXj@2oZm(t}tYiL(R?^#TT7_)Fs6m@3@!AGWr4HPsFdg^$+zh5AR~F@7(9CpO+l{(2wkPXR%^{f86AfiWcE@g3 -Ey%RAw_Vuk)gxue#l1b4WpAQECXLBG-{>_fM|PXDbkd65`Uv6ygwcz`=Le@V+hO9_t-j~Rw1$EI$s4o`KU*dCJ}=TR@)2NBYq2it`})H;3l_SM -WLnLRqX8D_6$uV+W6C+ZN0Es2Ql-yI!3fAhiyVcb%#->Jvpg+N{(o}7pakm>@5kMZHl!&kGDgO?p=LU -i_*gUO%M$={w%emgz?!uSmE#*S{@;NaHgFg_S7jd_gb5?y5C<9#wJjir1nPCit8P`K1Ns2X%F1#N}yq -V8eDNqKnbfFlhCOxLkGLQ|$*O<=a^Qd|Trv~iug{cQ!~B`8@J6^uxLQ4vw*0BRcb3e?I9RhM#-7R&3j -TrGGFng{fXrjZ3_ex2f_Cti`_WnRtU=$r!{LK9N8+9b{RK^G)%335K!2G)w4(H)*!{DX(V -P1&5X4&cKBAKGO?0ZB`dCj54M-#9LnF=U)+G#WX2%HwA8xQWJgBF}aK=}YjQlM;8%-H1-}6+creMLfY1!r=tc7Y#xY -0To%O3Rjw7y#5Wq!kASk2P-B_`|%sPETL#?&2uC4Jexxh=SAiNC`{pRlVORC)1kQsg&WZZ9#g?h5KOn -wc=H0bdyBsJqH8oY-hy265ST(RTmX`r1HBF=w4pi-r?i;P4(ABZ=f0?erp~uU4PVW&@w}o7oeMtd(*2G -TI;e;LC*+~S_EXH;QWpWd!Ij-+bsK>H>2a2N3Fcj%>mW@Y#1JDtZu5}WR3=0L{V^50-?1ebhES7W>helU -}+SGyZ&n){H-gmm1`QwPt(Of*L;&R`{FF$AZk-L_9Zhv1Xh%j+E}KDGY2~OqnGnod+Y!j2;E*ijC%`a -?aYSoh|L)xPbkY4`KSL5cMYRxO0kNhS2!zoxda47yy+C!vy2sRkU?l8 -av3+bFXP|_4uh^#(>jS2{eL#Q0M1@}LOm)#*!Cbu%TB!hq6~7*R13;Z=uj@p -)f6mQ@+GgKg^OB|m#G~L=;b=Gay6Cf(wg^!J#IC$&95_Tszr#lI@(U30uWh}XQm3cOV1DmyiJ7={ARb -==K~Z!!USmmlq6i*F7_upDyhmPJ4+GoNK_;~T)~j-QgPyf3KrN=fr_B;Hoj4kUJxavXcgv#rxd%$?PK -1>_TpAZ|4&pULB59~2QNlElOhTajq0QB|nX4fI`^COFM8hNq;@)B5b-K6EYF&{6^7$rTCM$7K7&>0Qr -SN2D`>7D+N`u*0#N2&?h*4@h$ru;mPmnkkG{+_Y>G2R^m`Gwu4`4(X@(1*ZqqS>97&}tI55f_rsV}2C -u@id7XtN`*M}aBr`8rz?G;Aw61A{fr^xxgV@MpaU8qh2?bsUS$UKh#ru-T`7t@1LKTi2I4!+59&f+2C -J8)MLr?Im3!o5U|ht0(={1Zw|1@{u)iO^K{w32wtFTLlf!JvkY@Ay9h@L -#Txl8M-#@$~hybYi7xaH85Rx-++!8`Q#1nxbtt$<}IxLCEk6 -{7t-{bJtRc72)(CD6gMnzSjE(~T(O=G@)Pn!|CokKU&Mw=$TDmlI((DKz(gPMUn8LPLlk2RqRaC#q`S -gH{=kuUAJeU0%~lpm5+cmWRLXMXKEB9Ut-69DvJpn^J2YS{O>9c4#w;s -DqA7Xde6N=-o^Fg~MP!8*hw-IudGbs@uBE0)^sT+=2jHl(8k-j(@`7G=Au=CskbW=*++3gftE@LTIwZ -ydaQCI&9tCSkvxyz7o$V1be^FLwM_{#(5Wv{Zx)|=+dtVD5^y{zh3CGLHDaC~%l^i^kgbsKN-l5#4zh -nM!Mn}osGa<_Xrk0!8pb#4^$L6gK?_pn-kH-CJ7BP1~0*@?pp4-)cO1bazAClCi>CDb$_0nh9BR`J;H -qS4vYkQ%0bB)LHrltAIQw;ldOkLx}5xK?u(9u=W4!sAgOI^O=VmkA_C_kvN-;^pCYuV*6HujbgiQ5Q{ -Paz7!FC?)t09S*aXs~e!O;cE5J6r>XHKHiQeBDy_rwDnN4LonrpQrB-AlP*j_u`hip28r?W&_dZE|B^ -Hax^|tA2T#oDV`Er-SE5QBQvr{4R}XOLv~wklKhmrkI4U~Jw%*E8Q^yT`yUVF&zsSHZ9vJ8k_Q+{bSe8o`7LGAY&6>$VQgNz2u9_&! -sX5W4H9c!*JT3YKQ+yv3Y5^eHY-C$6klQo_k@r%rg#t07M-hS=PoF5GZ3j3Ua<$f_Qy+qigzMcifr0pd?)bVsVxB`jQZ#k${ -_W1_0J`S)If25nk6Yn3i+YrTsUwAN64ZkPo49m&(%oYYBvXuh#_{9$1c|KxlU1cybi$io~qUaRg`u5_ -|KwMJ85u%7nC#SyK$Q_xgx-HE=1y89D8=hI6T+UMw(OH)r&XkwN4#=;Mkuvw2BuDtg3c@hBO)caZZmb -b3H;)Vj)Hd-@@P@W|;={V8zyI*G1pf6>Kp97jY)VSj0m*K2eLkhqnqce_NruQXM?#q?e5c0s!Q#Ose7 -qEsx<#;r#}=+?cv0LYV}q2V!8=h+BAFVtY9@@6slZv$*%90aE475`3HbPP2+ -sZr%Wek*p0Q+8-+cM8=Yn{@GRM(oG;g|js3KkaUdi|t5y-#UK^9N;?xlE+N -GU}0(~tKT{yr=Wbs-TrT~eqw9;*3r{i=(!@F&7tWpR%4BczBv;yUg@2=Zw?j!_Q=>a~5c1ldQ2!hqxK -11-pbHX@vrm__TN6FHfr+iBi&kbw)F(s6A?|w^5Awkyw%7bOc%WZVn`U&s&V{qQ}_JN?7o2KJsLIebS -?4|1js)7vn<5oF{KwXkhUpGO?PfQ8*=_Eh-i6MO>>GYm%&5=<1MNi3&b*;_L^isn*J>3&(Eqm_vt2Up -(q7n?=;hdMp)4P9mdiKxKN;}diNQ2z(R%aUITQ~ -pd^SEN?AI24%2`}aNfyPFENwZ8P3Q{hG)MV^OZqVif*H6VPMe=$Rvp}?!^8{47Cyes5D9>39+jxZ4`e -mndRxtl8pb*+O^kExK5Tvl^=VlF@b>#9n`(ocAlgbKzZ4x!)6H4ZwENCP*-4s6oU9(1igQZH+b!8{QU -alEAz8?}~;zZ)&fHDlXQ;0;~2NQ>dZcFcpW=?8}xE|@j^Gsi~_kg!NHsa#52adSK*3d@l!6m@P%fK{M -==1L%H;n%G-=y)2O_h*hlO$7Bh*FF>C6Dkr8;M$4IaIG_rw1<%P7f$S>*(M$CgVlRdp!B3SOqllN;P^ -JR`l-sbCQ_l*k|d&&iu3A(M1>s$rQqmLe$iA>7U=7P)8~Jh9d|Mn|MEljMf}4Q{yTc|OI2b4iP+cv?CIpU2a -`Xa$MTnCIyrx$9*+L-%Ls+o^iV?b2M-h~#fB&EUcWv#{=R3_=}$Z3-KWp~^P|GBJ3Ce1LcINIb~HOaI -DLa)qD++HWbxx>ge+(mb``J=j$UBn?~|`*-=F9j0{Ek91H{$|WYq?69-Cx-uqkLsqp^JdQD$Qvy_kKc -1`%eJz7LXC2$N8lWpOZJ&#)-4F&tZmDbs@~>%uZLjVaNDAvqR=B=d{e+ZiBz^!$5+wx~#p8J;@Rowb; -3r2o2Dp-w|brw899-yFO;q?PV0a-dj5+_! -zku;})xD+aN*%-H6D9?tQ>hPzl?)!8DUE|Srbq$w((MM4Xfs8%dWRK-}~Vv5}3>fb(fQ6|xbG7l4J4R -4;4xGk$NFSCo^;eW_Ag9V&U!*#sx-2HLOqj6a&co(LhXrWVEpJ0(;7&$UuL*OqN$&;mgu( -b_m-p2SPL|>AkEl#kye=^gCW){h*Bd(J;s7pjF*JnR}m!3Se{cw5i_>feQOlYN7FTF-XEpKV}@mhY -|Ij4Z1-Nsk^Vc?s$!Xp|HPYzAdVg%Xtf>yHO_!=^-- -Mdgd`=f|DBHo1rDP!{mjYEHj_}9$>Mkw&poq}2iqZ_zD_FyUW$u$}>hM$L{sq5mc8}8;XILO=R4k!Lj -ev*?P*!D4NsL4_9(l|6Zn?2-546%Blx2$L8t4KGRReLN({+}4i8mwWCH^J5;syXUOd?|GPqr#Z>TkEE -Oy|NZaur1C5-um(?Px2E&`nRqYT~G(J#8Efv!{(va|t)EL`@ehQJ%jK65T3Md6M3tNOe_jk>u7}Tz}X -Gy|0a4Pslnogt~|})vBIzS-&anR!S!It3#%)UK}blZT0)86w1Pyslhvtr%ZXoTJ6N}b|WhV>+6a;)1F -R|wMDEWLGbJP-WFf`B{iidk!P+1FK$qIy`j%*i1*|#>7MFid|%FW++04cXcQN^^N> -s=W)HhasS{pPnlA|BJPV0&0)q}E_5I)pVNe;TG}S`$!@@CS9${+kB5K)2?`{if92J$FvF6d8KPo$xM% -RxiKWW|M3EgmrdG&+4MfagRSq%!l)}H_9tM)O+@eRuI&pu_myse76OUo&wBU;*pz(Q&~egRZBu;^y2FLip1aL_e=?u -}-rv(nMVdhcN6Zov^V6(K+vd8>OGsIrhiwr;ojw*9HfBcIKVo;R!ip-|X-fC!mdZ=j;w6FVO0xY(I4e -$23gwz%e&D^z^PAkQoE#ltooj>N&Ki503iBAEm*|(0`Gy*{3B8Wbp-HQK)bj*06#UNcfZp42v2^Iy`X -m^=(^f_(yfD=mQ{F$th5)tGDWtxZ!rLu*Vb`J?a}$U5j;xdboCU)`=WDAK<=_mgH<86Z~^#<#D5;5

2dnY{HeA&%=Pzrq_@jm`EcQEij`*b$DBB>UF4Vq^IXP&|{><)-41A2*kYZHFrsI$DG -iG*bIB6JL|D2w`6Jc}G?yFp8?$96n%5Fh?>J{LWXE`e`wMVE^GlS1p2E6T?&!V5{QZURv|A-$OEt@G# -OYfK0n=@KbHVICC~*XTGxM`e{L`B>&NSu^g1B^lgcX{~#|yF!0NYuI05XrRA{9E*M=-- -7Dv;Oyl=L27Uog9@wt`{zF2OUow~HxXzFWc(KY!P|q7dXI=kdyktvJk>BRFMu95>la2*yi*@l>ha2KG -yJyld{tuv1DFIwF{Tg7Iklah4&IDo$C7ss#tbzES63bt^De=hKju?SSRAckXUO%hmI1$%Kg~ -5d#jDVcS66EerluIRkOTlJW$p8l-XD;Dl2Jq3v7jN@OA8wzQlKslrII_d-q@?Oauri~DlAE;c3ZtP;XsF7=`%9#bvdsP>Iy`RuR*7@L|O+xWHm{%+_fvr?bmF#g!mN%^9ynKKeLY;5CS7I5@O7d0%erGp -EqTk$!XX1FVzMX9=Q&h?h@jr{APIU(A@06LRv5cb-$Go{SeFKPX6Vdq0IoZ+kxzNN?AEDv(;aVM6{l^*&m%tgU(^ne?U2d4qBGZH;=K{CCuqv&w?#` -ht-=gry`p25c=9%_yQBUZ%#FENo(R)c_1)R()5!y(oOS~vp%+zpl|`kho -d<62|USI6nc)~ed#obTdeRnF-y_L6_TcOp&AQ02nC=W`@$i3L<|v;pACqFw_)$l@||OiH;~k&uNJC~g -h1nEl(`@-(oM|MP`F#)+%6?BLx#Ae~Gh3C51{^a}1wLmn0-`#X`EbOO+a3FDv}RCViSnCf2jj^8*Gsc -LuGHC;ps>YgmYE6a~GE38En7j?@;xw4AfV!}z4Q~$6Hi@r8iwVB-_;y=p7|9{G0`C8hp+-43J4eB --vBG8n!iev+5mL$3VE1_h5}&+RzJ2q0!ohBn=nHe0NHA>j58|>4D_8<&6Bj5=Q*+K7=#tN;P-cjj8xo -k6xFit8_r>@DZR%2?t=Br1(i`UkSOG0|H*iVaM!#2lj;Jjzqy=xa2<$47PBqqd+&oCGs1TYr^Q`*?|t -$Qe@GpKBZ2(!Hk6(VsleTn=q|3Noa-QZ5nf7-5VZ+5xu|)1)8%a0uQ#qq!~Mzm2D44>96fg|;m^IoBWT@AM|T;x6WPKkH0`?oJq7IOX3i#ahY|jZs`yqE4;RU(GjF?U(>+4ULth) -IAqXB>@UA7%nHURyo8Ut+Uu}6@6aWAK2mtey7DsQxo_Tr;004I>001BW003}la4%nW -Wo~3|axY|Qb98KJVlQ%Kb8mHWV`XzLaCxm-dym_=5&z$xg3aP!`RY|ScP&sDU9?G>92Q8ELmmZM!%%3 -8wwaYBL8N!rIox;e%|L)U=o0p$Iz5nnL9|GNI-Bdf4W$V4(HzLcJ+|^a1LB51ph -^&xWG`vuwk$th0O02ZIla;$Fs?7!_?QSdOuIk&(UdzJWs%><4@O1i63xD%X*5+zt6il67|CCA>a{2mU -C2BN;eT_05$%?PGBG2lkszsv@Q??O0qlej&D=}p?*V{~2_E|2QDSL&NqY+L5%zEu+lLG5odX{8a$#-C -&$!IhpMxc6Em4dN%VgnYSJgXv`{b(SSc6zeHN4X; -tICBdIu(_W7pL(TwiIYX6Gds48C5cjc*UwU4e3NOS+;5gyp4eD -DuJ)r3v_3zI{1{dPX}jtVFDAx-tj`()CU&Mw!Fz1g!r-$J2ty)?Qe#nky;Cb7dys1V%DDoRElsqwi1! -D(-WqAF0IMcPnvY56(E6a72_&J9eWkd|;6fo=y4T4d=eGae8v@C1!9fN;}Ib8 -{aR-6UG%=_eaIwI;D}l-YE^=OFkp6*8pB(1+A7}p?@B4049W|tm8(qn|TLTG#Bwp8#?%>H*ylHV5Pcz -dch2BBOo*tpa-me9Lh|2S@YE`--w_htNm(=_TdbQ5eGe>azQdf7D+|YFoepg+3}({*aDy>wZ`Rv?GxIs5@SQE-G?#8qEa43gHl!B^l`rz!uTQ%uARIpr~Ad20I8hxs( -8I4sDU-7?se+cjSo^1u_aXGKS$x+xlotLgwJiK@p5gOhP6h&z5(x+T(P%#(NVwD6ACsR$yCtAds1syC -db$hFuUNR06}<7}fsK!A5@W=*SFnusionQ7w64GAS&dzI*knr$a|E?&&3oDetZ`J*FTfT35Lv^A2bqk -*ef3ai-9gv=8iD&<&+oCnyO4oDq;mRd#`Qt}#0FJ>^Z3#bwFGmZP!th7cA;3c_|R+V-#7JRI5h0E)CO -xCWM83RR%d3d?OW{>tz8I4o?pvaVsG;z7gO2gQtMYx -(tF-1R$T1i3%cA0@41;~S1~_bpV5}@N@3IU=CKMlYb`Z8}?*nouAyLX0!F8)V&%f@KZd0`fl5H5cA)o ->jL~I&tD+udQD8~6R>olGVfZDK#U>AS6n$gMzix_o^1{NH+Xv6Mnz;NkS7qHq01QZfVo>M5JWD<2)Or -&y9F^SZenzWzHj2yMC_C*fEKx^4@@OjBPV;Mu&VB+QYPvaBF%@Bn&HHK(_B}su))sT{4p?VS%rl2sSW -pXub9UE4-Azb)9arWvU@kf4jXs>k^=HFTFwy3S+><%72x)QL$FmT)VB)F9osB$c1EGjn>YvU{?5B-l_ -(omE1&J-hyqHZVrij{{1LD_}uf|6D>harKH(0(Bwn&25Iwqsa -l&2rp{jkaM93X5=ZPt*Whwxh4H`s7JxFyBZ|DsJN$7>GU^xFay`aD!3_-W5f4FY;vF3oRNkS+hS}W95 -amL8+3BY0nH|^T<*_l)33?6mk77G#N;Boy^y!jp8a7W?4YK;=(PSAjWa4?;_qSSsjVeBUm6#g&{*m6q -vZsjpS-4pp@rHw7v`#!F@qsc%&A1oP6CPlM|Jo-2*V#xsNV&l~*8a?kE@0TUaU-f@lVl)2V_4XFBksKpluScs3@;eng5I;x@@z1kASj4fwtH8p5A9*;Rv$DJ4Ro9ef3U8|!bRdSy5Z7xL=v=6 -)7|Ec>Dc)HqHk6ATY-b}C>Wfu<2<v~aIi7Suoq-TIT0AH7@FX4#S-pyB2A -6GZG$3kj=e>wcgf@S`adBz}B3X&Q1;59j>jVG{fWy4ws@Wp6BoWFooazyb6>aGaVl0w{zN29;pD(a?L -Z<+r+)t%ILkJv06$?bXPRB~A`IEE;9oiYx&EW*}YI)~!5iULZf&`r+u^S|Q-89ueQSoAFH>nF+&D)sE -oFS#TSnfB;m^{bU9L$~1*mn*58=E;zqX@Oz!Y9l=B=^2*Zl5Oi1g1P^g>aD;idzAU0j -Z2YdQYf~O(au^J&4Zcv`Yjb~zLS*0&gft&XxEL)8{&yx`DpmmOCZUp5hYv;(ZnE$wVG7Ns=&`(Kplik -~AE#rJMB1m0w>TEerj`UqW!)#yz52T;_FbuXbK3&!Jq~-2-EiDS -JMdUo9pK+azsa$lXrlxHoQ~MI+)93W?@?{#fG1=>GrEA%2ImpW?h;4S#C=ex!CEsoNbZW(JNy?rdNkM -vI?ch!*#?5_1gS*(sgU`xYStaAwv=g`;0bBR^I9eL}Wws&Asq%xxi;W)ap=W!@u8KU%?scuQq&5o|QP -X-|aCkc2V}$AAoL+2n@E$+lDWLYvP_1l`-{ssRZDA~xI7I2ep-22UJRv%26ekmKs25bAHeR^gNr^AEknAja*_fNdtd6nDD^j{=I0{m&!+C4{97R_ -?jFO$*xxn(rj8$*RaES5b4dGDgJwB%^#T`I5Fe%=vZ{-+%?#c -dX}AA57t>y;b3Gq#4+NMbk)%&$+XFzuO%$A2jqWSNboy{e*L;kA^Z!meG+$ki!`$owcVFPt0V5yyl45 -9uWAGZ2Ns2?HAa?*}>0veotmQZl`X4r}_edw#E7(PwFjx!z$uwP}x8?N@VzHXTjS0ez& ->IUDAhBg)!y)t20UIB;fk`pBI13qs`U&g;}2Ty@Vr?0)gMTVT>QvFNKi9)8x)iPtDn;|Tm8P)h>@6aW -AK2mtey7Dtv^Z6!Pr003t<0015U003}la4%nWWo~3|axY|Qb98KJVlQ)Ja%pgMb1rastvhRT+c=Wn^( -zqjTqGwFoyYFfoNJUhPsXm&mM3w=&TRIQ91Ef#3o%7<0noOl_Q!8G0FnS7vS)9YR3Z_LMx)=|fDXy*y -BSG~70+)@NTt@ZAMnlOaB@iA7UfRxn~fsj+lah+@$&Ty{`o8UjpuYnuIM*j#sGG~QD`*1taH0m9MDc@D4sOK`5-3E5VnQD&X6VU~J2Bg}AO5BNvOeXYa1gV)dX1%~#~@`*+tL7C(Q -ye*fVLUjp1@Es8DS1>xJW5Q_Y~Q%o-2PwdyMxVeG-)L#o(e-ffFd+zn$ -&WuhY%>CDOAyxl;AQ;cfYke)AAGz%pZ#zEoCBfItjO8?V8`UaPj4naQYqPXne7P7&*l7}68VWtH*8Dg -Y|B$oNKl3uu=a$?ZG89gfNW{b*G#J4+{NBZNP}vz0&Z}%^T@$J2NP0?0vIg|aVpXcN3m1_sQL86_b`a -NoF5!X_^5Uze7xuR>sJTIZzh2K*=$A(=Jif1D=o{6r$##^a8%%ug8j4NLMx?=$!vynfxbw!$k)Xa_xM -`xrbdaM5i9JNtu6(>0~NSo(tCZTB?^RGusfEK4F8=UP`SwOid!ZQNX1W6-1q!oO*6@GOXSDn5wyqd(# -H+;Agtq>#cx37F&F|bLr{uC0-H&1318P1%q2-_mVsr%7i89&3klZ6b4KpD+Q2&i0o?`NM-ffV7ay*!l -Z(Z>v*g1W=#*gEoPels8T{Yjv-rDGW4{0C^NZPk$6vn-Ka(%&Yy4gG(|-lgS&`z^E7H*4Gg|@S<@-#YWtSm{)%p|c8Q8NVJfh52 -fn-Tfh{QtFqD5+2qU=U|4L9tXA#6gPz)~+%I0AQ6=DS=B&&8)aA%J4O83qlyVoB+z3*C3&G?*+a@oMb7kpXrVB|P6*5?a&R`XDp6FR7`4W}nUh!X_ -ud|*0xvA$doTqg?MQz4k_Y7Ih_DVlFDLaB_5gwtX*5BfIGLmw7!0}6Z26UfC5FZF8~7ZnH3tU=`u|g6 -03iyd5I70QFBOa`Mhr(K(V@UZiRK+bfsLUbH|v)yK^ -C+^{9hZ=_=l3C}s|x@6gUYH3SW9Kw8KTMahtjNAE_KxO2M@_Y8BN=Q*d+i%nuGF{OrbYmWX -Vy4Ik|j)wfGcwb_oP)pg9Q(8KbMxj;bsqe+VL!y!ZYay`uppJVOzG{{v`}E`FbwJ1RKMwQ~Zx!Vs-F_ -!R#mh&q6YksI2l`2b|P`ATTT963saqM;esZw^}NBqmm?+)Sm=b}Su@06%VDVy+SfHx&okv>+m#{<%EL -Rp5KVRSue#1GNB!>5}!j?UIoPu0hv1Bx_(nDfj~ukB}KQG6ntw&z9;nz7;$V&B{H0+fFbHg6*M8L4yS -i+=4qocaG6BG!l=rKPv^j+0qk|qw|1_r$MV3%w+<$n`J$QMm{%cM^Qh&fIAgi4A(#g25{?Lz{ffpgBV -V&Z}Db_n59EZ#o@zeI_yV#m-FIF{pduYC|T|b1s(ai>;pTDT$dmvx(Z)KTJnd_f{tKxXb9h5oe6OjWdV8371cTi82tN2;K;8}>8-QGvz~8?^)m7ZfF(HmnWk-YKN{Ztp&yS& -+Ld76QJ%esMo{grpw41UJ{I5z(Ix}CQpSA9-8wy$e&#KT-90RKB54Co*>z<5zqz6pKApMIkO9x0N?dRG@l}3ay!&PGVSwa@N<(Kjj^eko4_Ax#?;hLsUNX#PB -UkIJnm(p&=P(avjG$eZ*jh<&NGra|17+jv -4)PZ-`{9r_(jA&y&ajZDVh3T!K?P|)AVI<$LXZY&;;1Ysc9=pmOUQDI?bh>po;+*&#~dnvKis8dkCX% -Kopd~(vsv&Tj2!;;7CR&=`3kB0 -^0#1FG@7-;ao6${Uen2R-8h$1%?BDm)aBp~V9FoxwC!_H2p;i*=;ZmVHfh&vec)>>8TrLh)OtPu?8n$1N&<{Za=(NH=W?R0G@x}M)?R+-U$*a%#Pg-0T)lRTe -vV;ee}8Q1}DWMzl_Ic*_2-=!q2qyhwWwn9QQU+PTnGd-IAQGPn>Hw&qvh<)#52cCgRnf>_O8Z0I{lBk -h%Yqlqe<7py!qF93AiCS7i>_99g%p0_A0vYv6N(<6WKkH`DgKAPx;F;q?>gl=}(PYKJheoTk@Qrz3tpYM^`3%tnVNS!s4=zl;Vmn~1wBc080rGSXso^?9?* -a}Q)slB=sTWg1DlfeNp?W37wz%P>&g{z-3vCm`uIVWfh91i`mH<_rB{of+A~xX{2(2_nHR!|&_<^1rW -5I~ZWY=G-8L?fSC!SNWZn$%-n9H0w1mr@lka(IKZJi)OFS2gOpOZM*4^{ArDW+(7G{Pk&J6?~S)(!I9L3KiI8(*#jPo3!3jv`_jlafl3}yZ2 -hj@#Xb?^(>-z+Uh9z9CK9fL{@hFS$xLVZ`s9461qqDrH)QY`?@j3)_();vCX|kZo6ZwpY==;pF>w0~m -*Q#A-!VR`wIhIf#y%uS)3pYOoG(G0smdiQJK0|6}^URk5jQJ|4( -gYOVrr5K<3=V%E&R&*=2tUz$5C?cIY>&~((IFmm=L1e+xgf(gb4QpHu4?;do%ke4kNQ)p_rNVZRQD)T -e8{jkS6Vs+AxO}55ZYb2@5yP70xzhrSO&y~i^(CmTwqMdn4(E+5@9Jvp)fzI~qoCn+yT*ET%gYjFt5M -Yw^>i!M -Yh0R`?%#%(@twpnR>#*G3-;nN>Q5i~7P -tNS|{+dDyc521rS{>OiSe>S?n$?LC!T~d?VkDXg~yK5*YNT=^xT^{N#TPUZuqh;$?EG_Z9iltYpI0lI -~5`2T~&2gxvt8bMq-a3cnwbJ!dPxt14dwtCk?C|iZ32d+6>tU*oC)(3}&z0A%EoXSbRByL-RzCCnSdJ -)=Vd&A1Bnhi>rivM4=`3nW1m6*u+OutTAClATp6;YMVKi5#u&uSMR2?`m!>I&b7tHbM#7tDVxl=Hkd9 -4(x2w<9$dlo?W1@;h{rj@`Ve$CiwNzIk5d)*u}ojbq5X6W71-dbzt$?}FrfmrstTlRdlS1mUDwig3Nn -k>B)(e3Xuhvqy@*Ge#+|9MsWiqtb{oFvMlAt;Rks=Eq@5b}Vgl}`1%CWA`AD9ilHega)BxL3 -?MxOBN}C;k&ODa-Y5tibn(Y>pSYPG{qbV6wHqFzH!r`-}D&3&by0`FR{WffO)ZBeo24BP%y!xQK!cmV -Adg4HItbK!bYFR&iG}I{K8&Onc_)_0^!Fb*^V1u!zSObN-&d+48;C8KDJ35^#buGS&|B)2w&rgqPh`z -F0o#Oer2!q=5pffY9v3_Xw#-x^ZW1~vdaixPA?(J^Wa`z=Hg9qM&x#+UFTZ6uCpKWRG3`EOu&h=*XC% -LzSnqV@To)5&_&-qs;)*9b|#@UUwoo(;cUp@3crM+I!#Az!D9Sui1xgDWdO!gZpsr0lR1$qQV|vY?LbH$?@@$t7VnmG8Gr%=J*bOR}f45UBR*B+cImr -RmYu+H(tZg?CzH5tAU#~`ksHB(kzwycgTe=%@vj(PBd-b|78X=^aQ2v^}&X}|4ZlA(Vzm>(63+l&~1_ -0wzWbebE>EK8dD#wzHUxdH&m=Jf5*T=m$Jwzg@?iEExlpHq^gilbdaptD_{6?hm0zI$Le2ZK;9rA>93 -J^Q&&*JW_+2{3(TAA)v;)iz+-R593ZguLUq=IgJgeT_s(qH3#!y(4vsTx-s{ZkgO7LM2Hyo2N6N7q|EM -iPQ(wk}o1KN~?asM5w24WL`@9z$j0jaj$8pPUtjz$orAsjk7vsXjx3&v=cYXiFpg;~o$jBDF-^ -upFL_0|+Cpkiq&HaH_Q-f+q*wIUHzR9M-zbtTSP(C>LF*Xrx44YFHkwn5!^fZ#60KX_eReQ|?R2jpNms --}_uKzdZJ7QMZO|9sJ=4QBflud1A_vhO6FGabi0)_5@$^q_TS@&JP)h>@6aWAK2mtey7DwX#G~lPI00 -0170RS5S003}la4%nWWo~3|axY|Qb98KJVlQ+vGA?C!W$e9wU=-E0I6nI$$t2li7DzDs4j3#F)aU{wT ->=}(hA0FVVs=R}0iPJRE43JA09yiyvuiUM)*r3DSKrfCiuR#x-@_jWR>55sv!GV_VKEBTXj8q*L=6&? -1w!U~&Yjs!g3|il_w)Jw^+hvt=iYOFoqO)N=iGbF-O3+6#F!X{F~gs#GR$5^`{!W(`9A`G*^~a1&Agc -Y=gE5wOa46h7VnSN=dWw{$(;?i{W$;j+wQ*mCw%_D+>zfP+@1fUyYtI#uFC)MPuARVZB|xBfnJ71{y4 -AV^n;5Ne1V)2deuG(0z*iGLf7B8ajsf*{pyYv_17gti)2Nqjt{A3+ISAUPB@8v(b-HYWV+UjyL%o -0Ni^UDuMR43v(7^5N6kijs2f{$NoaYv@Y!-@eN3m7&sObTP5>4`VJ?N141molzpWN{|V5eV_)UdAXn-O -dU|IUcMq$WFE}94ss9SKg7Mt7@?Xv1^9M>wqeQ&VHNfT|ExUkQ)1?#%}T!)M7hqk8+QMVdguSWh7r!R -iDwL3jJhY1h6-Fr@{L%$w^ZB2UJx&SRhq*NzS-E+Gvs*<5g~ejU(7Q8u%+_AjB%@jKGptvM`F3yNON3 -toimRKSA#HrPKr)-#z=Z+{hM2P0sjZayOJ21Ac(B$7*(y@i40;XO9e(GEDb{n!)-KwcV!G=EjP8$Z}d -y4^;F9v{CN1h3tLYqap7a=#wOLxyX$e?d&Ra_V`ku#u@;AOlt#HO>O`@Kx@Q|^rB|uB(;ym(wTPPwtm}jn -C{!`pLf${nt{R}L&D#oEa2gabOic~V$!j@T$mxBH!oA-QWK>q?hQyg37diiZO8*jHFioB{6Tp1E>IoM -lt|2`zGEs9u7tQut$OdJ8ttEQNds-r^U}8W^?9md}l0RvQ1vJsCB^tbqBOOe%tl(DUvuf^Ks0)DeFvk -p+$K!!P^r$>EO3k%E8U%B^4qC!hP=X9lFtH#uZwI0mIyGK{0(_NWyHzcmqm>KOoqpzH&)3jmKDvMnfo -Q8Xo!^21Sq6BQOXeJPFt4-#P!$ZaGBsGv0^{KJF!g}#Nn(5oKi0>($gWI8Yak?80IXkqkCMT0TPV0OZJ~N`-V|>;By*31T%-mdY@wQZDOGGU)`(G~4v^mk0FMH|9NJ7}1Xfw1 -SIK7rFt;Za8YFxsJ1tTXu#mcylvbO&3QR*89?tt*GxV=soHK@|eE$nXio_^CiXXPa^^#>lFwhNQSDV -Hs34>^g1L{=hGEmCeE=1nE^U(9)&#@+3Z;kwpJ-$A-bwtzoEZ)*|K7&sywI6EuQZdSB5;*tMY-yOSrY -acdxrkMyGKGC^kB{}nE+U=HpcB>>vYoV_#XP%cp5y0m6zV0vfSGD)g1hluU;G5V_%YCT#K-=09Um;^wE^hQQ|hPQnE2aFp(j{)Q9-9M+8E%O!itn*R!mkSv2_CZ-Ea6x)4=v=?Q!j4>U*$ -bRs50#ZTbd>-bzJm8^4GECPDhCSv>IfLxkGJeU`(Fap;zMeFUyh2FyO(YV|#(+a+kAO%k0JfkD{&0L3 -MN-#keB;-Lt;3Om*I2tz{G6gZ8C&*vVy2(BmyX3%ncYcnzz7yJ`QX*0*nW($F=#%#46o9zh9`c$Q`B0 -IEoPg1MD^>u#wr3$t3&yjN*Z`~|K8yFr7qB|#aw>;m`K>Ru3;CobS)6Ym=BCL{h%FjE=OOQW;OYI?$w`(G@N|zOZ1)edA^pApKN7qS3PE*8fXH{*I9WZOJOo -p&=o|;bCaK9iQU>7<|5PKt42yqRIp6Eqn~kuP=YcO_Q8AwLZe{QE94bB`}t9%7_uPYk|HdrvR`6h5j? -EruY!RQFLZ4DiQ6NVV9kt>M~t8d_$HDiV?p*(ag=Vof)f8p-YiEH6Rc*g!G$P*)R>_8v@Dp*+?0cD|-iEIyDi@YnR4)Uk%MJ-54w -YN2<$!$9@#b*ZIJP}*8nbL$|(=C@bbLUj?+nhzRONg3j -gPa$q-gE|ZAA`^hphL9BPpS`2r- -HAoW{{&$m$~hF&T;1(p;gz1BlZihVornmcbmf=k{>Jq!LZ#R!_ZM$(7pLIyO#HsA$coVEb -?4V<0w53ZRAbg1b++v!K!bm0xDZB-%`NZPPX1!VCg%63O+x&HA6gLxZzE{K_mwL1}#=NEfRCXNRNCW{ -5RJ05x%UZkCbt%VEN;-6FD4^L-=ZC1Y!R!XV~6+O&u86Vmc?DQEl(w2!6~M49$Fpd{aL_UwMPVj|s=D -5VSzhs2o}qT%fLu1Q!gf!skW$?1v}qV9=R|WGv)pa~UU3(NyFSd5KxsWd$U_46%UZ(P)(_<5F#ZK;_4 -ZjX4aT1Jn2l@>ed&%9=PNV!GDLLSCR3q`yO|?O0!5u`_4GWbuN^TdI7Z9o%rOrg-%7;X#0nySe{v%;_ -t)Sb!~qRv~}HvvPSJ$nQ#8)Y*gDDKKjP2T+j?#FxqCK#zP0*YXuIvJ3Y122fw@js4uuUx5gZIvZslAx -`FB!!TEGF&pL?8smi@0S~;ov0rZNjs*b9Ufa`ftJv7X@RME!UbfYC%>Mp{bUEAyia=ONlOq_26dq7A_ -hPcWeWOv1*q!|wR|3O{!zu#mdX0;O3KPoI&v34+F*xIe?N>Ydl>#?;vj9LacDdNt&+t>^%DC!`w-}&% -i&fx8&Yr+YE^w8K%0*7>Rn(6fL3+e7!Qo+v;Tl>vxhETOJq21Fdk~?PTJq&+AL;^-=nENtNLP)V+6Xk&`Xw~=ORVvvRErB`BWu5aOJ4+v*qW7W)D#E;xx`+ltg -^V)LSgt*QX}gjkE0+8#M!&Z;t+n~A>S+1Q9e$L5AdVqBjNKY@*(l#N#T!EO_oQIyD2FzGv-pJx3plZa -5aLCLC_qTa-)t(;f_?3Ij8~drGSotCO(IJZb`Q2Aqa|xM;lqh}Y^j0?3|z^60gyU#)5d|#^V={;cL=gKD#={XeH;-{0spQiSf-C%Bl(Ku>9vfe6pH~ -k<(Ff3ePKhf|tgO$WjkQ -lO^b_$RPV5Se5Xt+fbhy%%(22ARQsQ7zH}Q&`BC7qP(LOox>8ra2jcNp-RgSSil-EwbR&oZ`S7l!M&+ -eSLc0n*!)k=Fl}6MrET_zS+_nW_h+RjGHvPNnVskE5=&QJQfLS5HJGS*<*6{*R2BP2t;3mM1MYmQnHf -;N`|4!B@bsL2WDml9T;UA(#L*~N^4Ng!H?;kHAv -+aA=^#<0yEhFi`^Yorp8TdC_mw|P^6yOUyF@*lXrR(-6eC?;e(C*Re2Y -Rb(8Uf9TZEtKvgw@;B_P2&|=9ixP;{TTMLSV(6}7$L)f?gi;F_>tS3P@6EfXyp8ds;jKN)e;q=RylpD3=L5y%p+{?o|d&67X{6L3d$p(ZXr@ya9q?0=^!e=0Jv -6~>ErU4OR)b<%5itZ?ahfAGRfO7h*e0Y+jU+I+7Q7m){sV?#XFkxbVEXuXAvrA^>bgA-`YZ;k48}SyA -?;x`C6o8A3oeaW<5WWMKC2dG#X9wAk2IEFfK`&#E;ufJww>qYQn71R&0VB%l!DntaJ|}eHa~8p8Nhdt -(x8+)`_{uWV*MtrlnR1H0rnb}9HSfaf@dr~_0Fj-{j(!f`<{b=t!wRs&g7H-AjiyvUngRaXj)^<^0fW -($Zg{4fnNT#PC%cp$q|i+mDbNmCwztqAs>W*WIvfB86ah$mdOji-RGhWAGxhjU2L!#ikywHN!21EF8D -YFwwzdliLh%}SC08En_W0OR#&)ax2g)K8R0VtU9sTNSFx1W-%&%NeW2dH9_a|Z|>3K#pzlq9`!tJH03l0;%g!Wi#uGSD?C=)`?b)Za>|t^lu7CK4bb@vy6sTgj{wv -Y$;&PLFX>_^rupEa5D7X9Okjco{|wY8oj|xL0V<8U*JbK-$~VJko=@otTahlHD0{gswS47Or+>2xgVxtM5bt&J0iJb1ai)f9N@9K@~APuA -$z@YEv&+z1g2GyC3Y0gpGJPg_?86e2A~gC+dPoEf|QMEoGBP6x~TDM%AKS@2ktNiPvP^?c6>hZE-Y=`aUKR*Ox!H+5x&t21SCRp*gcy7eTY+ -u$27%=mnA2H&{rIg{xU3QKA(74c*VKKzkMo4rPUAMI)LD24B$pLfrL_gtAp8|}RJlErY_50q+g^7`cMy=kfsg7$C^_RnXZM;N -m@gt%cCV4LFj%t+Ca?VW+GUA)^z|o?ZePgjS=%fu(<7(0IaNkyl);}_QR&N)mzquQ*er9%%+t{Rr53r -I)xHbx+sXDi%=H>GhVc(p6RE0SUJ0uikt(~y3j_SB;ElinR?186&k2^@ZQ%z+uoQ-y>KRRB8 -x>HaWH~lAUq69cmTcZfaB+zCcbL-h}63S`*x~2|pm)@!Q#>^)7;2A$0Q>u-sgH`}!Yufbv@MtBJVpmh -Z(kxqSihJlq-KXrg440VpYq#&<)xog=nZ_{;28b};7mKCsTq^UYp6v-=C -fSzF+Bd@cF0|UGr%9tshAK=aQuQps8oVg)*>kC#n6Iv|(%*+UHc@5Z$g)F&YA;Y|kV~ihV@S*Hl^B{` -PxW5I+j6kvGzEX24#Oy^l-Ujut&>`C)at%>|dc1k+I*Yo_s;xQX(U$%JYZ(3-JUA>G#=;Jj@f!`s(N%KstNLG`HUO}-ud7H6l@^%Fr=&Mr??yK_V}3P-m8l66n -);W7zSF3r?G1b*yYRcn33!r(936m?RarnM*+=`2e*e|ad|Yn19zq6aB>e5h;W>*!**;%-x<5pvYsP_C -?)DU&b1Nlzbj#SoB`d)P;Lu}105Sjxqa-=y=|E2H;5&;t;$!lPfZl1WWn5k%2J~S -j7aR+db_CDxJ~0*x!zMpDQj!dzEgm4sYhxPn?x)*gj@q7wPQ~Z`Cq_u#RvqBW@t-|n+#ls+Z1l{h#3{ -Nt)TC^$$^C!{v&<9!nI->;C_v577IGA)EP)~7{J34RqXL4hPU~-R172*jFkAqoI -dxVGuJ5yO(NIsw?NaTLz)9Y#&hn%1aRMcacct1>Qe(ULr5VEZ3k{3O_G>}(P2)d@k9q3%F&lXRqNFtS -xKV2C66Uy(R9 -Mc5J~&SPlzBt)jw$-5;JJ}^$obe -)7|785Pi_>v>@j>RQR^fbo88e8x&CZewB-G2^n12=k-J6er%T8L+)Fc5b~c^cVm|!?(SsV!(MB?f$`3 -P3?8DCYDbxMRroJ?f&r|+6%1gStEK -h=$tuMiD?I{4u7@FlXSETqrHf6GIap$v@kRd_vVI(!<+Jw;; -=dkKav6*M;RZ^`4nn!Gk6l(wZt8Cz6dPxag;0_zWh2jS&QegH6X)<1s1n!Irt7f!~mi1pgWzjczD_mt -e-80QpAc2YJJq9G8s~Z2?CRtj5fz)_^`E9Tqn<>yRjih&~>4?4GXZJX!vuLr@pxIQ_i1FB>-X%bAA&B -^Td!DDAW|$&rnmUxc$S;M)||y30Pg@U9b7!g)Jm+8Fbr#Wnv1Z9C{q=gA#MLIIY4xNgakY) -n+6T}43~1bSjLbokOm9P@>_;1p0hiRO*!){1Ri+`E8aTP70YxVUx9V?2;lu;O)tcTLHt?0bVOGcll>J -IWZi(C{emY5xhT|#WPg6}ZwbM+@ETw`V*~+w(o2lv)EVm?8CeDvqy;{zS&bWDz>g=~)*!+O)qs_H_1Q)7(?c+jX=xdiwnsHH8`2_)$pXW)o%{CP&MVcqZjRKb9P -}0S?Niai@{YIPk8PFaj1Hq!H$O#vU7fjqXFN9P&=CD#wldV-N>kdb7N3mC1>^!z!WK&~5MxIgwO33$$ -Q<{MOHcSFie+m_q`w7fKyB2AJoN_mGPIyDx$xIf4jFT!C|J8>j;ne)jWkoJ2OE0Ol6wNMbuu(ILofiH -(mKN6cSgqb}ToCu4RaJUm1aj2FCQUW>nN~@S9rhB`%^Po#`>1wXJboANOeofzi+E1s<|>S%Np*ILYR= -|q!}aGU6KXN)&Z|EfqB}2AwqLs2+z73Jg@Vi;w412X_uS<}O&^Z$2#uNfCYQ@lF5C2Z{mTsC|KxWsJ^sqqwaW&w6aY8<}PAr9T?n8Vk} -3`M9Lx^Y_vGCkX|1yXf?0+(`yr8g|{*A-W@!Uz|+N!5`)5sTwU5`BxAWu42%fu6 -bZ}3UIGe6mpe}wlV1lDVSX9@xk;@>sBV03U%h|2%NAe@L9ZbaA@A^#-Uk+7DOkDC!kC&MKoG&1w86y_d9xf0<*}X -grP)F?K_JQ6j$M#7Iy0bepCe2HNxL7s>Xl(%MrSsgi50RP2Mr!wR$5S}a(Ek+x9mSpW<4@@aA-GFmIyn#@d(K -*>+w8(Obz{n#&Tm@dy*SmpN4_XDl$qmpVKZY?Y#9RpG}ut_Kk&oU1gAq)^e&d;EAh%k -ff`T&{`%C~p(7V;DgJM7&;7MiU+yId3H(%i(2L1321qdlA-x95T1%JYI11}R%!npYUVQCe!YU)VCigC -=H#UywKqS1QFr`A{p8*u8S4MLdW02ItV;AS`xFl8=VZr%*G3M~9ganDhA@pRuZH89C!(m@5we!67wGg -<4xH*%nqA4Kv<@=lWP(O0v4*#(rQU8lDt9Ri=^zUHOxfO+M2GY#%yyJCOi)5_F_uEp(&83w@BY?OD^Z -OBsHooYj$8$^oeSCTWKTG1x(tHUPnc$mO>L>>gYRtI~89F~(7E -h}xx4`9at58ts9nfodS9X(5@Lk>!l@I28K@eEA?F8BV$g}={^yr`vkOs&ekTp@ -pN*+KOMVd!t3HkF8OOL+2bY%#?I6EW7#Qk{x2Dv%Us|yd>cVy%rfT$$re2&M@q)Gm{`>Hdt=w{-unct6G~L*z$W5-*!UKE(sMM3;19Sj)a4yvV$O!m -`iCKe_GOcEnJ|kNl=7Rg?-Y2A?>0v(T(Oal#gOH2e7;fmOrweYiA%Zdt&p -(F7Y=K!}qRN*t%@M9{3Z23Un5#+z(Cj(NoRj##2wcW~3wOC;c`QkHL)4QJ~31K4ymD%!vqeQB-+QSVd -$!SFbUk&22+zt{)H%x_zuq9IVIQ&WT4Ediv06m^+s9|2KTh&EhRBriG<|GX;LQfl~FtZ-u7ymb^*-jKbRdnwb=^fJoP3{P4|aWB2W?U(Q~a9G -G9i~f%EgdUa3PfP8G1hc7KamZY6+4az+sS8_fxjqFH@XhJ1qhzk-mh7nuQ3p?aUA3^VT^ZTe{+Q3O99 -^l%L8_ryLC7tv?LJCyU9M7vZXYwmZv(A3L&D62m3mhvsx_5ect~OgEjP_YMjb^_+}Q=(i3`YdtEDFYN#o^}9^_pstQAdB~L0-ej^N7PH1V#Fwhj4<-C-IQ{A#PEPU -ynZ73ONhl8LKfZJvHCJ%58$#2MC8ZZPODL;5@XOAzbuukq*PL!ppt3zVq-jmf8Lk1qFyo~rNog^FmMh -6Q{}X_vec_Gl<7!0X&P{VlFk4k_;zYwVAbN&wL+l%2?8361T+TbG@otmO+^CAHY(}$GNXaPpa4sY{Q| -WS+CE=OoxKfKxYEBRIp>Xk!&AtZ50}mOkGa4PF>ps06T21HM{WPaXZ5Z?rR!e+mU;yY0K2ySO=H(ze= -?L^zl4-}auaK(yHgEgN$e91?Cm5Nxd(#EF*yQkI>DmPYIcxv8n?f!$Sigk_%_X|*l8UXa-d0^Ud+!wN -ib7oPZjC9UElUcbQgifsms|_hH%OiWcgs-Kh(-WE3|}~X3^EO!=K>3cr9B+X091}c28~8xMaQL -`Hyw^MRr&R7yTSq^wE^!HtIe&ihKxAns>;3xYyLCR8WpN8f2V?5pLQ{mOOliwtX8-S~Oor&*3Z-_7#9 -#pG_XYlBU#1tb9g!-Zy&1r6@lvkM&Ke`E`_mKCu6kTAOWJPPa$*<#7s3Dox>7Vv@`FP{_7n;W -k0dtdz6#9IoFwxo$sgBUXiz4D=O2WtxB%L=bI#7|7&n2}FC`+F!jLxVewa8SXj2t3V$0*{-#gS*9KZM -nYPxtT0^Th}otRyZ>E?S!7O8km-5Y@*w%3rnj!KnU$)KpCFTyn@1nkY7a>ccF=28lZnvupATv35B2)Q -h6STJW7^4U)sV-^Q5{w&}~3KF^-@%_KubM9?qcm%=b`;#!Vk9o?yAj-Jn1<*IQIn>gw~*J5;P^nHtE` -TWWFesp7qmsX)EayeU&2(PC5$+)E+F0_*-V7peG4mwN?MdTK;XO`Kdb885NuuxQ6>9=Q=oG8lYnh&4t -h^#*&9KD+7j5PcH*e2YF`rBAfYAag)CAP;_o-;cmI&{-jA`Y1_`S3EVzm8z&V -MI_T1V+dC_!q365I>VmPfyYr~eq|e;|Wl7TS8HC(ziWcsBxa+wO(P;DV01D>ic6{sY|prtXst5Jov1M -{d7AY&`{hD=i#1*GPeF=usBtex46`)PlgHD*!TxXan4~Pz+PN?WXwLO)SUCo2eIj)$n48UTiKcmf|3mP75TL6i7??0xx -nneE4W0$qo6h@}XzhVz%>`$wFA9=?CV`Df!>;QZI(dlTos3g0U@|3o}R* -^TrtnT~BRfHTa+y>!4uuDY4-VYCL2?rQicauDZTkkT8;>jx?|E!3*@gG{vxjhBW(^j?7W>`&83CBBAx -@Fld8^sg|YhE>Hqh}Tu{OGHx2TY+>6;E%1S-~zt~t)b~ael*ZREu|Pnqx+Z}^7YYqUIcCC0(h&(5R5; -_3{4g?29snus^U3SNTCimF#Z~#75hF&326Go`3KDC2P9-}Uz3V9s~9QMXOwagYJm9``ezcr-V~6!q1{ -^x!<-*`hwWD&QKqGSOGSJUw`Wnm%ZvJ-?xPzF;1qX}$~C$nI6o;$*%mdl9M!t0za^lVj+%^-9zmt1l4^^3e#BUbkck|bZ@t=S~4tVLM)i-IV&>D~G7r#~?8T2_^Ee0^vEYp{~uAi)3tV!tq -0;;4|LOyS)mjg&q^-`+BYC$P=5J$0jDM^geq8(ao87Pm?h`un+AJ!`)b)+^%G31!Hz-F14>sN3VARgh5+mu1h8KtjL^pudbd!+TU9Jfhn(m`E(LLoR -;G(&J?Fn0*aS=y{|c0kakY5GkQj$3UCY16Bxy$*M=LctxB=i>DS&xdTL6tRi&_GIp}BBA*DAALJ9ZUqJG7UlkhQR6yOpgO^?AEd2A49Y~a||(VNYI(0XfM`=}Fr9}Mb&71=?R -TAKbJ%o}=qug^C3a= -SFB>`Pv9lQ#!h87t(?YbqVfCTB1dmD#w)xLl>A``8Shapp(o#{8D*yK;8P0N>MBCLkUlQf&$Y@fX&iH ->EMh6b+I)y{Iy!p42AE*dXzC*(ej(Sif$&eE-CzP;yz@Qj5a>J5D0C#N8YWW;#W8c_oS*p47hx$L1zz -C`4E1HZAP-LPG|1I>|z?rU#sqZ=+c(bJhYh;(4lW1mIZo%@H^#7k&1(=GFHm~6TE}=jY5A}NKcGtQ<= ->-=$+!P);skLtlipk3D(4Y$cY$!l)4)OdM)-t1sT!CwvhNsu-~75d^9ZP!(>lJ}1f(T$Z#55!T!0hgNlhlCvjn -$V$cj`A*^v%1LPEb4#$KOK5iH_r7B@pCBE_YEamQ!hZEm8zDixmFB9MBF|RBw2`0Yr7)F^_@?hc{H*1 -w^OMa2~ZpH73CA*FKcM!j`OJ2n9H2B7?M|Hy*AFCd#k+!T+(y)We@S|?^N_yZ_8xc#kp|vdF+Bz2ETfi#(+0B(;I6kxI}d5Gejlt%NGY<|b*7p=n-8O ->l*QpW-uA5#veR`M~WMe!jcPMb@uK7$hzNam94DX&xgSQfUEX!7D)PQ!&Vh-(#XFO%pZCR3NOCtLh@^ -EUb`>r%)KA+_5uZM#;RLup3<_S6ZuVA-9w!e&ORq=mPSd={-$|T1U!Ir_P;QNdn8n -j2helXw7@Z*ZB1=4E|97%trNMIBCc|>ZiQw}JW5SNV_;zWm6q02)oE!lltTqjo&O|%19iB5rs+aHpVD -+8UHA=@WNuraGB^dHo18xe&1g-Xo6no)rVFX%%GssL-)I8v)6+etbi9!R8)#Jxwv!9dxvadjY2K~;Ic -)7!coH><-g#gNmK&PpOcBg-w~~c6@6ZkC1oYu(43wdfH`2+p08cE{wE2!lyys=Hv+`N$8iW`*AD1sw&vnLo(< -ca%f3cf=AfvZ^E7VbL#p9ay-9ODD^$OpbIaho3&TFBce*peG%&f>P*+ei9115_ukMK4rV_-Jl|>{ -|E|gR%h|3`s5x=+TM&x1#OVmK?T+{N;m$YySqXntKEaNUUu0kcV5yiwGb!_Tx=zs>O -5XEb_$rXp05KJo0|R98QxC)LGa=5F`#_)*}>MOTBm$=`)avf1$)z6X@lC;MO43S=~eM1H+N$18q4@?V -Z)!cErt6GwA(Fx|>XY31V%%P}92*zX~ypUK?9+mSH{U2mZ$+co+sLfW{6)Gc=4Va=)x&Y -sN$Mc95Fu4Ll*BIV*KXOMk)J!EsknQTh>C}D?KC|UC8Yv)Z`|oS#@Q>+ak_q1SmwFJ!Ie}GPw0{_C>U -}n+|wDa;C%g;d^w{AZ#JWw6N+KN^E%TR63b?k)B~iU~NRd8t*Lt;89O_EAYL8;J}^m&ZQq++Q&@#L5K -8&Sb`9YJPW7A4x9%3Xt4wV84yxRx@iC}ek$0GGm93n9cM!{1v8f42C4z2jvd+*!U?%UpE;aAj4M2yhA -#C4ZXNAHDxLinS}%;o^~TaV$kY>bW9D|b1nJS6b~_R@&HA2tWJh9FmnG==n -&U}&E*ehH?@?MFhqOGS|594UODogJdsI}cTQ%s=jt3y(9dWu)R(W1q`l;iUSMUyJkjAqD5k9@|$PV{vXx2@aWC#3Da8A?{HfwO`|Zp#|6h+)DV*352 -+Ix_a1kY-^m)C5VKx(-jj5>1>5i&n4G+T@nIrP@<1wF6RZJnDQ)GvYkLr%Sc(wmDU+k`Z;jOSf=qLAg -Bz^GUOc;{qS1;(gRjAlo~w!pJ_Sm2spo=;(8bH#b$PO|sJ}c9;qyFGJ=KZWK513oH0(6?{JFcpa@l#B -7yBUQZki-uXHn4aPpC=gd9IIA|LPH&`qK#dc{vjSj^mRrkow9G|tOFwB1+{-(p<1o*Rx#34LgT-`%Oh -Aw4d)Y*l07)mY#aBE4iK!9%Un50^e;;nyzf|)B1yo{zhp4U(+vxm3Z_-U{(7r-!GQG$Ch{4FJT1GjKZ -)JbS5w?F`IXjT?OfL5@egh>IwnI#Nh1hO9BuOp -(6+PodD2hwO)hLKrdwKehRe9^9g**&!F?{bt7R%d;=1&krQ5Bi@c6tNU#PTLv;ltlo?b=}0(92xb4Y4 -0Qi%iBMm`4qfx@75+$Wj$pshAy|1*^RTE?lO7h8DvQvw$&7_CEUEGlJnl5hvPEtRUUwKv?v`F8^K0D_GCI-ju$%0Kai?kr)yAdDez9{`ne4r*Gw3lfdpsv1+ -N`9V8_ra0{wd-#32r2u^&TQ4@Yj}=DA(Z`l!$}3AW_kak0fLcV&CL6z?un@DW*QrAN)1dy>aEiW6Z@g -%<3Y_dbb!AjYNw2gjrgWzji15m&J3wz9%me&e9vU%bs%}zik8u76 -0Lwm8(AkN2yt7@$8t30Ytw4;t59opmpvypWW9OHzyv7JCu-7r|o@3g;Khx6_BX|Fg(62Xc=6>$c?zYC -t{!pOT&iT>9L2JRkX^~eRfSLlR-^S9Y$lo~?Z}ut~fQK*^;Ld-JbKut@orOq3JhlotR)U=r#(8{3fC+ -Xb+k61`g%SPpXf5lt6y@ImE!c9OX{8(~jJkqlCA7D1=V}HPxCH+kvYO)dkGB35SOw5E-f$*c=mEEO(O -Iy}P|(WWP&v@_@zx^tau8^IW(~)zp^wv=KG~Y_MpNTOriB$IQ*J&Eb7{xtdPXgmxrxmm#!0qNPO>REZ -4l%!GBzrCiam#qgl!)$UKU3O#J@yg!W^4mjtK{<$I&IZjXR()PosUsoT -ydQLMUyheO0}|+6ujy_ucyCjleif@Qid@*A;PSuOPfc8EfcJwU-pJ~gwH7yy=V8L-Ox=nH9PQ&m4*m_ -0*oT_KBMr)JdWu_Gnz8Z~q-bBV -r^jE_d#cCqAB(GhNs;Tt^)(;h*)j$ylw@DbXs1BGE_l#dy7gAnOfv31Z=$I75 -04xhLW!(th^P(0q=omFo)3M>>X9xy7OLL|2*qcB`M>^=*~qTkbH;I(2(=bFOJbLjP4U)ql87j#wRagQ -934-B)QN^Wpg%r!wvOLMB++@5<{|MqaaKs^ -}$+fNZhzJ_zBB{2U%PFg8rM|sukLYBv$VI|3{#sZ^wRqwZlG6J -RP@^pk*wd*`ys5dYua+zRj{1o;4*QL{l@hWcpK0+46$4q`-pLTx@;;R_80UdoIdeV9AY)9$1A^&mL^H-dp{m3tMQ7Ouw7&HDenDtGv -u2FSisgV}%sjwMf;nSDHX6QZn^`jCCz$rG;kcE=%?uRv~D@+aV4Q$d!I9h+dBM$ -4U7H>KpnDB^Ni#5EcbM_P;=?kobjbC+a#jxLs_tT!8F=iOyLv4qm -?I&Jy{)0^uEQ2nC0l0?uTQ~bdYiO53(L^ts|y-6a -{KX!CGK9r38*wyX$fK?m^!lgAF)(2ZiZ0s;_{u6X7xI;+unTQh>hhk?ZZdm;K5N@&H{;7C@-_0y?G2Q*xFC0w(%dTzRT-j9hsN5Gs3amC8o2s` -HfcSMsl2)Rbe$QiWwqQa7%tQmZ>^lrexzxv?Fu#^YHZL#~VB76nZk-mDR_Gts70*?B}-w8j=9j=hNs8 -tBbY!$y5a-r(o5Dz|22;Yr*-q1`@#_gVC-C-4FQ?mo)p2MR9)7nwmyYY?hP4zNVI9lmSq?dvP{QeXG> -^+q{jir6C!oC`NCS4Z^gJ4Oc=g2dP`kH+4l$MV;ORii67bFWUdv~mGdD7s_u9{wtV*{!~}gEq#=YR6~ -VMyJp0%O@`#pl+Gn?jiXpFswx>zPuH65%DSpZ_oBwye&wlv6s-D63+|tyFU9bbJu6e9zY!-e@Y+_VIh -hNAARjL6}6hvVl9Q?NU(Gu8M>GZ_3I&BS}7PbH -N{^YfmtCtEp89sgY?HV^KG$YJg)YVlL(F8gLGf4hwgX>PI7)Lvd9v;BewVN_=6em;r5=%(klk#INqEB0@aM -bNq!nOh948GJhjYc0pV(y&)`yz<9#~4&bUDUZQqJN52e_)V_WP_!e34I&-f|o5y{zwdAAqnDV&zVqAH -Gw>MYtHjI&Znq!XoWOhgh*9{E@NM!SM6aS%P|ik3^#UQEcmzkfm7*#MHl>wWMz5)HlnDxatqf57mmAg -tUh^gypZD?EyVjAYIL5eDTM)6K#c`0EP70mwjhzc6Ut{j4_4tMO{_9Jl5dcTBJrS5v<@Drw*ujnjgzOexn^iwJ|U_n+84SlY9sqChK6|prc+PE2s@_e!Ya{d}WoaMehUb -&((qEoS822aa$AwH(7-GK$hEp3sQ*vNZS;$vz{WV=`luD0ML~n_55Br&hcw!qm@zVzmH_3cOyNFn2%g1_R(gj1U#WP~E=(fxo6}6M9uQ&QQ9SLOKst751`x0BN*3>hU~B@E-CH)toX>N3#S`v0|2T&#I&Lz4w0<+ ->V`%hf>Mct%H*x-L@IfMI_!tI`=6$pHo-vI-_hie+&pD)f8rNrh -FPf6hA88FhAIunMGA+&pi3a0ocmIOl|8^LgF%E@=2CZKxAfd+>yD=lTt=EK>Uf6$z^W$bvvP|5%8!WWV*^@P_;OA&Ygfwv5cEN`l!17g -EdJK01=Yk41*Clz^R=6 -aZPHq|oJf5~=4s8dv2DnZ!t&h9!+(l>>i*Ab9t)n!UmRq=)a<){)&53=%@4twY{HCq9kP<>LPytVSrFH#Pt)mu}N>AXRHJ#4@rbFA&#$-9lTda=q<^gpS!!-Ow? -$)vtb|b#0X=6xZzI_-MVs#YGK$~uFcJtf*sw+)}r&k)MV3*T;R{c8(o3M(@!HlpzT`Akz}#j -I&AzxZqF#who-l+_KVQ|v4-8)eqYwgdMQt)(WW-TZY)B3)=O4XTk}2)4q(sr{!e@MBf~d)cAMdno-M+ -jEvAs#T%VEXl0eNq@l)^EkZzsRyJeRjrNq8xq=8bs>22&+JZUJMOWR85bDf1$zpRgoQhAEQ6i>!hnFwXHG~n?iu))Ge~mAtu9!|iA%}eWY|_5%i)YcbP -?@h!&#&OKM!7!G7i8uRP+e&oo92wAW*7zJcQil#-YEI6XEm$AL(l-3Hl&bFij~@3v32A(kJ8)7tlpid -BpiHph*e&LmX~;*{fAbNi*>M~!B!uC=DS(ttt-5o73AIVAy$wlo=KMc;WL-Df~H%j&>6FMM<+ -vd+A(A#HmtH!V#(J#|B?A2|4gD|A5Bm0$1dw#XmPmZZW(QX_$={fAZ4Y2sA5P}=84~<_cU%P0>QDBQ7 -bL-n`8}Me(7Yzd8&{t&Yv!D@|(Nnlck5~@4+xz|AM9iDYCO)N=sb%@f|$!{&4Y9kG!21|B*)?_2APy@ -_q+m9J%XHXxApVUuUP`MO;;C2l5L!DWeD$a -wUjn0thTyn6iR0L3gT8td=&Lugu#Ng!Mc~?CwH)n{e9(# -FLz0WV>s`r=Su6k{kch&p-5Ldn53~|-_<#%w^`^i6b)vMH9^_;q^UWx9iH%oWbyGD1_o2t9&O~4jBO} -#C|r>P@CkQ&=-&U*J=@eiE!?mBphv)-eZI_upC5V2Q=IP2}9&U)4V#941=!dY+I#bM5RRsY{O>s|N`& -U%Lv&U)jAIP1NjJL{4ErL*3XGln?pJ$3QBI_us04QIW%nzP=l@8qmE6T6}feQesL-g-}Z(VJ`$w*N34nj@s&|m~hPE -e&3%Bm3$Lnr-D-&*d`-iycA>3u$^kz{vJp{PCo8E{aZhBYz@7?sq1&(dKg1YIA=xY~`G5^?4PsiT>&` -~e&ogMX-j?^9XG{Q(a>LDurxuf3ggN}MDzTv3nxUpWG!z4WQzWU#L>ft>6zv!v=tBe1@Q;+PsjHez-e -&6P)H}>lUU%Av%59=B3sV84j_&@U0L$5pPsYjjj5}tbKL`yyO+O8VnsfV%Xsn>F8O9wsm)>B_PEbE(| -dXHbc)Kkw%FVg%rPd(bHZ(!~DSHIz@hm44N>S2IPl2FH_ao_aRuo&}Tl00&R}(Y^8c5>;!Jcm -wu`lu6+xm0V4}&){Cx7l>+5-+I<9-KI4}Z_Y-+uTrL;UO(-Ft7@GJUsHa>iw+)#C=eflQtNXnjYmu}6 -gwB;)afsv}3`_mrEc`A7dUYV}VY`p_*PDvU~82E?bkNdJGJ*89%oJ^7%rYH06aymgkK&WAbBbP?~3@1 -VczIv|WE+y6t;RPXl-kM!=Tc=s?$)(I5bl>;Zx%lWjn+keJ -^m7ncKq-kwbU#&B{`l>Hz>&L>4Z;KOAy^qnT!U>r`xs#3!*AM3fnIC -?z1UG3x#lSlEchuRG4of5B#XCH@FrU*veyhUN@VXy`ZTlnM5%?ID9YW`?!cx7%g1|MahpcjRkeu{(^e+mwT!yawuX$^b2+for>N?Oa~G=P15O -;VbFz5Zuh1UnS9n3s+h`fFo!$((XdMVVTh}uD74k+eb?L|_AN-oSbP(^a@E+hSa{fOP&J-KHlF(_NMX -wi~9q8r9x`+5x3}}88ZgN({%eE0nTI7`}G-PuR_llvW)ep!*CsYvn-QX`Ec3G=nWY9{j8@J;o6pcei+ -5ur=GzEjy(mB@(v@@r+pLgm;W6E4{;G!^cD2N3>l#}8>zc3Pi-o{}bOjHhH-Zb>RLLS^U=xLSz%^esI -S)=`)L$B1x+6RPeIYR!_kJBZFzbywHvxSQHc4y!(c%TC#UPc}&DnYC6hR>Q+auKC99w3|57!7+-;oB1 -h4xDpT+ZlF43|`dc(Iy2(eIKIe3=J+E?{<;HFG7XK7T_k`&&<+#OK~;f?#DUP)c6Gyc^vg0;mg)+|6$ -JGhVtP{@NHO=lNH@Wtn7a-aNkT{PIVO{ijZ)ZJj%ET^b1%)q+oJ$w9j#4W&?&aeJ^@NIEV -9QpoR%9|Sh~@3@(2u^>g*8PSh2Cg3?($gyP%@#}3T*}J&nz^*8 -pypEUmYG_qsa?d<(gc&7|M|@GJeLciS#R(A{(k@8_knX~o>|YCIWu!+&O9^5U(DCU2N{(ci5rSz9UgY -nX)6kDAo)VbP8vvo;g5WD8$_y9x@hA~bGW0W6-A*`OA}O84yE}jxzCcis%OzvRlOPLi+Xk`8G2jj0?Zh1ii0MUEfg3O -#BP=3Cd+n7T6DQ)j`zK4L^^T4{pej;nOogAlG-6(P(Ps|Iw$XM?50cr{MbUDM35;jU?=Eh2r$SyyEdJ|SR& -=?~0{b?Y>D?im$4DkTrJi0RZ}xuJ)dJJ-?_eiylDwN|uSi`HyK{6T^E!*EOBUn?zIe0iZEWPe$S=3Lb -cX9}oi+>&A?SWXu~d0gv-MKxj -+L~nL`H%)J}`7P5(=1jTvd)lRVn?>VnxgliB-Jl6I#dCu9J=T}wC525RImCeY3JlzH}t(px)vYaMUV7 -E(2CMl8!5TmwA9JbPok03GTA{Lvi&_-64Dn0=jl^>ndSYIeC4F@hrM%(HjVTQ4-_c*}7LV4jU#%iA&C -_Sh3|*(sb3%Ws>eBQeCcyggk=aOT+{G{k~p=@|GjZ~`_CU8%R-3@^(Jk!x9@wGfM>LTqJrCM22@62!H -m5GXLY*6^UYzhj+qB%DoqM49eMwD{q*UL9lWv{sy}Xz)oiYqZsdo=K$vmI-L;*ln9=`5EGTUp4}Rp!h -hD2Elx=uzAlIv6)QV126#n&Y^|WQnu{Iz6famj>;v;t&j%bPL>sL&droZ;h`@{qwu+f7=>F{3@elmOn -vboqG@+#qGbe^x|{R$+Tb<{owXdXjpyrs>}I{Es09}FlUz#t!~)EYcPa2E%F2H4M9cf{in|yYa-Xga; -F938&5zjpf7X@}FWMNn;ua=bm|0dq_27b>+gHLo -TQy&pKdjqwpFP!pHUEh&_(RD(|*zYsg|H# -dp5p#6!BkkcUx&Bcc@rki$!-2&rWr>VV<298#_ys%>kmDk|J2~ByfqjVB(NjZha)+tx5h?1uc7-MJXX -fDPJW#%#~P3+lef>c0 -D2anBFd>Lknd7dSOYvE@%NED5ZdlpGHwD&D3ij=^rl=CPbKx58y8V)g*bd&j+}P6`D{eJx;eE9F7xM} -104MXRd1rMhx$iaahUsvmsz2FBkqeG7r7%Y-kDNMk>Bx!Z`;6DCubHn>s5TTL!ris{qQjBAmRbroS(W -FarLYA}2YQf4$D!_Ryibu$MYa~zC#z4GPBQc7=40k>kk6PMuF?$uhEAOCIYq?`9mM&?eZ;4&AAx<-v= -v4tQ%gR2CvP(PPt}y+iki}wIL2iQ^px==$i9f}`H?DnQ(sP<7gUw56GF+oP~7DLUFG4%bd^&a8|W(A$ -ht~ww42_dtZXC1v`t^)ciDOTmaG%MHRAV#_`NQEPmAC6;`cE9T7IX=hh?x?=qhi?y2^fLtFH3GJS?P? --;x(nKD||^tNaPq(%;bDHXL%<(ynxqMc{B*{O%IJYw`QS8Tw7r9(S3wx*0Yyjc~YGx^=}ZasJ#bXcDJ -Ln#43y4RncH8tM{7T9PhNW2;MqGjxfA#OGzsE^{7`G>PVQk|q)4V(rd`-V-(@P-88D$}`X;ZfT%N^r( -l$aj+O6N?RJ&Rg(eYpp-Ehb7~-|Egsf?%-yb)6m>o53Alv==E}Z;&G1D}Pi;gx5qH2AgWq4LVazroqirG -ufqNze*uV=(V=0kY8w~v6aJ3+1Ztx-%u&|yH>tpwW})^h=iR@HGanSX{I83ALE0jJ&tljDx=CQ1g`Ox -e7z*!HSmQRv2u{`l@I$g)yOJDsB~ue2#e8WmWQxRahcUcScbdIYA@7?U<;xbO<_ox;IKWSmc=Zo9h!6 -HRcD#(RF~&Gg*Iusq7B4-=eXlM%-~84@Ram@gGs3)5XbU -C#TuK+%W2pgQAuCmWCv=F2B2PdLxfUGRc{_yTe=LHy3D!>)! -`}Y`Z*j;Yc7jY*@PDopck}q!ud4NmpVIP0}{FqnuZRJw>1A<-obAd6~zSsfm`uA?QrF3Mc?>6;SXKo3 -&7jr>@w^6ZERd}Df!qD1q+7sz7eJ1x9PA=ueACW?sc16viBBNj*)G=Ss1%Z_5nq{ew|P)!au&O1SJ}8 -=`Xg+kRUPDrF0Woa+Pyhsqm9RNJL6qPo*C;k#%iCY^fBQNN=fFt(r*0F+8}$V@Dl-RQ>{G;+n&viQ%Y -En=*{Iw8g<2m4_W&(UM?PRD>mj!(ddMFko7Q9)vZ04`7kbE*LJukWhtf@89K%?-EkFaAXhoK4(Gp -QDn((YCLi;F+P-q{)$!Vny&_0Te)?tt6)CAhqjtT?m_LLy~W>zkew2n)#nDw1GyvCeRTltk8CVkXV@P^LY027KipH?6+|4!67$UOJ7&^!r!=04kLU@PQm -X<88t8~5zElFq$uUpxJTrZ0th>>KgF!h0D#HssH03xWVd@#K -qyd|z;2e&3cV_2f}r!FOUuWQ?ePLf3@l@GLs;X->DUc02Ko$Nl5v? -52!6dq5MT-b`Xb}a6$XY}YQMT!p(9wzErc4@w>J*765J{2fbc1MvB60q$dWu98jHE~`K|(^8s5B0#4= -oiPmtl<1CGIW`&=?Z9XuoE`fl@!Un`x?oMaP$FZM2eqT?4ObI!I_7n>bXIa2yQ^?;|x*E~c$$P*e$P# -dc7juvTaAcuOb|9VhgvYPr^qOpmH2YwZnfCa6cGm6q)n$)A>!H*dv2?IAi$kF7$^5UjYih0(q05ou7G -pq56ZL6&(!aRoacA#`Bh@lA+h-U>O)yzEQS7WPX$A%a=v{H9bdG>3g8tD~{IS>#gHVS+|V+q`p-<%x! -=pEGS09h-5Yd6^iPP8Ft@1>@K2h?O3AwP=G+T0Z|(QtFh<7ZqFR&NrqciQPvxFS*>GTR_fSLf`1d-B5+=%V{rr#t -7W|*t`|!xDW5Vz(l+G}mQD${DsCW>)NL*m7n_)ZTXLhXd_yi)!;O!aEX?4F9ZAO42@|eYsS+mqR^^Z| -;RbK(c7zglF74FByL@ETLzYEFR`u1AB4tyo^$t;UoJt(Vru|~tNbLgxhXiv4^o_qXxCKd4>-m|2HQb< -4F6({R;|qgpv_Tbp7c5LIn$S$Ms;#AY9Tu&N#8EG{7hlP0I5$gmp`?L4U1+miwVpn%gXNeU=0j^3%Sf -_TeRbyv3pXNEg!2Kjqe`s$q+`|R8wzWlt`Zm7iYsmFZnKp?81+6CI7VgkozToOe*s3d(Y1JQf5%0#Mu -*bT=XsP$S@6*?T={g~@UTc*`ou+6+m=NHAYQyUjOe`Ol|r0IaEj2NOa_+OUhUZEK@5m1-C?Z-7}DIbzf3yk4408}olBV(-Ivc+B#h5FaG*%3@r>C~xHyTgIj_2y -Uc{&sM%i=_&_Y^{cOCmY%4(>8F{oUD=ox2@>T<)6g+NBE_^ -@S7kC!KVdeWq4Z^AU&L+S>&xZH>#!6;M3ggp`ukNx502byA|~M;FsY7wzpa$ -wsHj2injGyhnT<+NPq?-gM5vbW@f0*tIp>{e`RV6Z7o(7@np|$GjG%GY$@WX;$kC3ZN03U;^~k&?bDif!+0E^5H!sSblAYV%-n84nv_~Yq-{x+N?}a95e65 -#knddEG=3!GOM?9by9hod*hsLBU^QrnSa7~H;<@u=TFA7Jd6~@1WL_onDw)^GyiR5fnKfkAl382kh=W -dbt9G0Qu{5)P;DjUk|o!_3AFon;?@A4t$W5g-sXBQS@{Jo+IaVRCnCyg~vRS -rXc)r`08M1$fgw0uR2R=3`qWS;J-y=H8sy;bmlw32LJ>PAE7v(k$Lbzb6r&Z2_WmTi-jZ(YYu7T@kBa --$m-VWZ8;aIy*9;Qc{tH&RDOPvw -t;uT30OZ;Qxn3^d9N|jjHRVct+&j04yZ|m8fhN|ZgSm99D#8dYa$JkS2}y|)?8@TW3{EH=-9oH5e<)5 -QGPDUC-NL0reEb`y(tcssT54DIk+dDkRP&5W3C=IkUUQk15A&AG?1?xXibx4~L6A~8Qu%DS!KJy+ixu -lOil{LR5|_<~(31+3!fab03e#KqY}j$GebqVhuO3(Dspht5qMIc?7`{ePTJ5%H7HvV@=fbaETCbS&F@k3VpQK|w0lBobgMyo0#AWq6MTG% -1za_|hN|T~vB{z(R%*LzSSc4!(gp!29<4jr^g#kF#@szl_&~nItYgV0%%`F=Y%HedTgS^yuy=trWR?( -zslx_aRggPcjJi)ngE3nI~2(%<}Eh3Q~-z%vp2kDrH0ZU3FuXf#0I_x?$=8stttjSwO8tT5FE^R`%b~ -Ro%-KNxVa(#k0vd@A3)>KkztUL_1kA1v=>5u5tT+DP(sGg%BhI4{iIzC6ig^HfKdZROG?=p!{VZ -izeR_RR1IOh;x6DUNn5Ha9Da^>m-ts`%WD;?M2owyNq;-*sm3=k`^W;uOcCst4+P -iXSa5fjDk-76(+0-igBK#>yE9g*s+)gowD$E;Qe&0yvk4#xtA(JTR&wiC!vke3JO09EuUs4Zd~D!Oc0H5;eWUN#SG<9$l|g|RKATQ*>On(1cy$&P8#Nl;Z!eu!RVf*qpgKZ0WQN)wV86ni5KPnZ -`#ZSAtz(XL8eHmr6Cbt%JCL*fTp4mKBO^hf~>j`Uj_FuDe9>N?sKIMwpRM`D#qHQ^ykZ?cZK;pEdYjM -*DnO|VOE%b0G0gJnUk;8C)=R;dlHnZmpZjd|XM@Xd*vDSt -8OfsnD%k=4v&f -f+8xvFNOE>79bFSR+TGY(ob8Y6sw3UazE6l_sRKv%L~rBf@i6SXYd%^`El&+xvIS-P7WAC&V} -I<&UhakUR`afvCs1_iwISP;B3*!tu3iki{@Q4D0JGx_V345&Unkp(NtRG)N~I+>6^+`rIFWhHtF@i(b -o;@lEjIbIHwIqwz*5^;+}z|?yI5FN=T3bhz{X6Hrwu$&e0XenU=)48Xhx8s^N%5j=;zom*-YVhijv7)5YFCtEJ)RL2Esa6ucv1+H~m&IXK5=^-&IKrNwB$k?U!bz23$umgX<@orh6}TeC0>|rmH{yREMekRZ3z^nyTwzOJ -uQz3^9jqN!qiyW3)9EaN|>E2O@$d?u@h#n<>m-rsN)4X%g@-GQV?OeD9izt?}Qm^IWEk2%Ryldwd@w= -aLYDfj&&zpz4XwFC<*KDoAd3hT?Tb{E#Auyz#I6|lMr>uOk?gcYYISbiUF-3N7LxOErPd11vC49hpd3Ng -%bP+0ei9(%ZqGPXcjHVKap#r`K@#UZAa<-&Rz*2Th#UdB=?thhtOQYft0fn&)R*2{u^VHJC%MhojzLB -FtG7xW8jji6sxYX$wniqX*0U088bf~BLdVuPo}RY4i|p<3*P2Tp0SRO3|D&23=4EUa#@o)uPTGcCu3R -SoMG!s-rdxv=(xb(63@0qfhss)2R6u=>EdSXcvKEfv;aSPO+!2W!5tM!=dbtOH;jog||ii?>0-BOcZW -Va4fimOx=04r^~=9R+JwVSO4_H<5_jn9;V)&M?BG@v_Si$wi} -enj*Vw7cK=pTHk3cr43~7!liyjF0-&V)Ew19>oio3H%CgzRqHfdb}>pWZM06KWS4Q0i<{QzY1w74$ -FgIsSqv&v0C57GWGu+W<&j8Oji>v9p_-0(Sqn7v391hy~QKLx?nr7g<1$Ll_7TG5bg&oErn+nXj#s#w -KKFcr8%;-t}e5%W?&wuGM%|y+OjkXiNQyl06)Rrbmq#)<~zyxEpgB96BfTj`Bq><3(Mn)%8kGe;Dja3 -L1~qakUf2XtkqF1&@_^y{h(Cc=DuYE>`Pmk2fBIGczjVh(6NLUKAeODaVQ?nI4)m!-cII -2cX>_e+hBe>7>9vOD)?%x2Ht!Ut8jI_*lgzutQin?kWEJxf)7hemOU?#;Rg?D{_r7UNN0@F}Ry6aNY9*=7&n#l@&Oa6*)#5ui-cX2SZb=v_LX-d1x&S|PW2&|Kxaf#@+0Yk~D -9`)1{arluWsF7G(HSN%e*nWS5CH&xipYa+aM+qtZAbkF~ps(qJwjIDfa9_sFBj&)a6?-1*Q!Djm)J7a -H()IBK0&e*NldBejM7T2IKdt-ZYY!#H^V01NAIGT1iHal-TYNnas&V?PzkDM`;+wH900h!3)HqV}Lp= -5p}1Srz!>K)iQYFM3S#-X+3agbbhBmK`P{jH`7`>MHrjXpCMgtbrz`=u<3OO#>0pz@%KaB-;UxUYG|h -{}(z;lLT$)md>}eGRkN`1lD9^q)@X>C#;<;b1_VCcO%im7U6zg|ex+O&y7J61CK6;MCw21rM6zRB5I_ -W@xG-BD9e$@_uPhUDEn_f;rB$`94D&FrVIHOV|fbZB~P>?#<56b2juKO1csyrag8+Kjt+F`eCxY{l%a -?WZOx$-9cxJ&2cCB5$}CLXADiT#gOOOSAS!!7>V`6hUYWlXxUhI*XDb1I;*iMt|qTOyTg?wRG*c%9j3 -asagc0h9gdA8FW#+~2>Z|Tf8z552~t4>u>@%ZQwZi0tR&b*aFXCEL6hGY>p~Df5KAzMAd_Gg!HWc+6C -5WvNANqrgEts+C-5VPC3u=(8o?_B?-3j)xJYn=z`mL>SAs4Cegypph7yb=Fc8cqSWK{jU<1Kkf^!5l1 -P_w*_Xxog1VIE51fvKt31$+!La>ow7r{w_>jd^UDIS5EKts@vAdz4!K_lzXJi+yw -Qn_vT?as37)IrBi8g;Dy5*>SWqmCUJsk8b$yGO?kbkN-yiJs@bYc&ieda*GC1AZnTY56Mk4+C7n*f{# -jC--4&D2rmfSb&Y)llie&7Aevh#s;!z7S0B-2;mZ*lNUK9!w{dBGftmR31m?!<5&*MV|x1Q%~Dw={V{ -qsvTSBx85Ba#)C76-hj40T>8tj#*k9%O+L|rN-5PW -a?Ka-2sx3`m2d}Lz%EbZWF%LF$sx+sBE3uzUZN~TCy$@-9MCZ+b6C_Qk&I4e% -J<(blGNo5Nh!9C+d?c@nu^6JHm5IDtA+zdgdQs+v2ds*u{n_?IQe`Jf&8c(#UDTiE&J5H`&DfLV;C2E -zLl69HBpGUEbB8|pcj?xzEQdH9O` -5X8ri&XV&iom>&%u&)CYEG%eJMs5qf%mNM9Lh~EV=T4j9N8beV1eMq#?!6ON5BRtjT4xq+VIT1`+H9t -{%Jg&EV-A<5G^iGq?&5&11A1y`hSOC>gSXy$~#3)T}ijD9imKg1V8i?{b;%vbI{WD*0Pnj;m-D`v8kW -?#}6SS9z>mGiFZRi{4_T8bN}h4(C>H(p`@692mfkp`s*}N2U6>iMx0!F&k!-yVsy$CE_vcz!9t3YTCX -e=*{A189d;kF!{6w{!pIad5kf;Iroksp=vXVblldUr$!rbxuXW;*v2-%qlj%lg2Qt?l*RhUd29PPvxc -o}TaLM6XGCPxb=1ZNBaHf#?D4BDQ>WKdsOC@tEB& -)Pe-fJt>A!aOGnnjh@-Y%uKR2!M`2Jn;M(Vw%5{pZ1>zT>Z__3uu -Dk-!A_D1D-qUH2r^?1MKSl?)Rz30d{qN_V@W$#{vJD>2JUL{><5PKb*gC@kdMLrK-z6 -{e0!>FTY;9{@ab}nw!7hs{P|OXLj}uj!sRSRZW{UZ}C7&7uQw~wr}TVJ9O;y@FShok9O(m-mQC -&o{v55@kFoQeKek4-afv5{sDnO+Tf7Bp}Lf@<5Kl$@%Ij}Q8QG~hlM@UnhK!tSxDU(M=M5S=K|jtAot>7GmnA%sq&TrD -`G&A@hKvGzd`_-0SGY;@5 -F1!Laru{i&@kQ{_J<-1`XkKC%lV`7%zJVX_$^W`fe%9cFoW29hLO(7yw(=XR62~o~k{JAVNP*pEXu5DtBN`fz>`}oFNC+1bwbSaSSt -#H|86le9aVT#2B+hMTX_(Wr#XV$r~r?Pd_%#n35-jNy!#g$_MEqU8IS$kPgzIcvF!E;v+8Nu!IzYF)u -Ymq!E>uA#6j_jd}U9TarFCTQ9#1HA=R)oNVEcV3f@i1L7hc!Xq5Qz+aT}fA_HPC&RMP9teV@ -EN@&devGyhPL6K8(X;6@2NF_$$v$9giMx};iiHsh-sf>HTmY=R4n?jD68QJ>YO21#1hCVMVBRfSD1d& -L{_L^kOAw;R1Y^v#Q2@SQ0F2$RiVMs?&)?RLTC0(5v7q@tkcs^}?p=MKRj?%f&uyXj -HF&JJapawTC)I#vG+zFXcw?=<#R|qKk&|$)Ya1-cj6*#JPJJG*Yj5fyW4xZ6#vNY;Oso&oIdKiJ#4{%4(#orWYtBz(4+9sRn= ->9~KzTx`T9}evC#>_D^~XDotrw -=CeNpP(cGyIV=E>#juSpNg!!dxD(?&3boccC?vZ=@JFD;QKdj5W{YQ4ax4+iCzW;t3|9^GUu{XNa_dn -bqe);3|{mUEp$9vy9{=UGw=MOVMtFxAIXR_aoj^n}i&S!eez5TC^xVL}8$ol>#8u*VITZh|38+*fWkE -GW5J#J%fNOyF)kt=jqs~ynENnE<=6)hUFPnaPRWCIrHBBM@{wp8`5`T(Y^Bze&OEnT -Q0eG{C_RIxBt5L>ih3);Ge%<^2hVgjXk-><)j)j^-&~^3{1%)#Mv -5$!H^{z#eKX(oH5go(Qm3jKQt#PBUK-sPIH16WQwfe!f1Yjv=a=e1E@qGx!T*yGxjDthZP1)J&SvMA{`7^5{RB@J<*In-mrwEj$j{574LNiiHXGg|JJD5 -I?iXY!ax#^D+#SMP>rwiUkN3=n$(Xs_30k#_QP}l$K5J;YcB5YI5?T^jLe)EA1cwVI#9s2c= -0|5@TPt&Is&joRwNAwG$efByN?lPGY?rV#DLeQ&f3U<74H2p8q$VavWPOo04Wqeq8Sii#-~4cRJVexB -mxm`_J?L{|Edu@S^UM_uFreP~Pz+xWY>gvI(6K_W0oD4ID0j!#|;~!LfqS*QjK(scbfr{hHhOJtW74= -_04=D!XA{(StI;{ZZN7SAGwZ-^1nicsb4x**!rvljQVA$a!bV?pch9-4DPFAEcaU-%llp@_>IeRdpv5V=iA%n_s++<`-1ECfXYZ)OZF5i0oH|ohDY7@dm(17KNal>?XRy_m=?aU5xt79LtU -9?$eV24++?Gt8Y;L;G@L{sKnZh4hd46RFc44Ju<;c6IU--JP4JH9-@X0YJ)hzksgp*!(hCg=VyE8W#^ -DLBNVjUGS%iKyGn?+DeFpXdefq@{GAf4c8g5dA9d_ -J!C``Of^`I|36>HpCYVn!i(ndofgqD0m0%RXP=Z*3V1k|mod{gz@QwsE7l|H%F9~)LtS4AXu$W*z!4! -gcf?xtX|6Q^NZUp)#-|g6)xZ)59<-vGebC&4)f#|2WxETnKfyQv#IbLrWbQE`J$3KT6`H7(L!#my`fQ -y}+wk@8wZDa@WJn7Wr&eHnN^H(2f&z*yqZ}p_D#e&{&6TDnHsPE_ova{t@WO{=BHm##;cp=m^ -E3)njLLB%6LT?*UBh(j#EypnjkqKIryFs{GsT7>Y~APH#r@^GxUap7`-gXN-+LGL6L)d9G~$lFt%lrH -UUm!@UY(aWJ6`p%V>m%Zd3W=(V{27)@8x~%Sh`c)d(Q~+?^gGIID_6@>)xk4L*X6k-p>@;iG6I!`+y= -l_LNP2IDS}7pc7asJ1`r6diUeD7VngPE&1c2F -hx@O(tBpL2)}>-q1}>0wMhSaouC6b?R8{ZZo8Dt7-N3NatWrK)}F70&=EfOxMtaAJzByXmgD?g -GqtLW6r-!u&A -eY61S7jgbmb@h5CxcFJd3Oje^uFjn~bC7}E1C%h%GPp?Pgfh~Ja=Q1|Tiv>KV;&wJOrz1TkdP1-78b^ -$qoYOH4IVt0B_<}a5hF&h(W6JR!qg}>e*AbgVZsEKm6gTv^72IgF@5@U_PQ~Yz4J^6`=C(EOyeWj{E6 -XgaZVU}HBZMrnGwX^Eskcd%oxkIyqwE+Klda%ylNurxs9_Yc5vpoo3qeeocVsvS@1#5MjhZR{7cTBJj -vPM?>WmS7({Smn>K9{e -c7j?#ugV|I*iM`Ahu}%Da_9Z` -}^rx&1#qUD#H55OD;>S|_5fpzs#h=1kv3V4KDaC(};+IqWqZI$VP5kZ@Uq|tuqWA`izkuSuMe%n~{38 -_q1jYZ3;{QPLD=GdJihsinFlpnKX!;X|0;`Sywy{Td*(7ecsApcmNLF*1LN=S -W&FtZHu2RI-;d(QQv9(Le+tE4K=D^o{0}JpHj2N8;!~cBPE-5~6#uF<{u7kKlaxXRr7(w5SVJl7q7=? -j3Rhck_Nymn*9UWUV-jc8i#WUaK4-U%aBKXI6u%e652g4+DE>H#UqJEaQv4+p{|$=2k>c;5_=hO|X^L -NE6JI5lKwFC6k>Wo}@w-#}Cn$bjia(s=rLX%oNxlPo>9PT}GG!uo}Y^?ermc+YO`UA -lDdZ}ko97ZV*F5fKv}8X6Xn+^c7g9^Ksg_wTBt5D`t@^dC)@h=^p5#}J@@f3@r%6BiyC6H3WPhKGgr3 -rl_i0lIbT@~G?|9j6P62@8)1r})6D_Y)o-eUs~ujERd;o~Vv)?UH-6D=7Ci7Ut#P;-m>pj!TY6c*vGYL6Fa+B0|-N)7#9;tj8x|z=I^WVZt9?VFq%BW`w=hu -_=Jbo`6nm$3mc?u>Fnf3*6?Jc9vxAae{wj24AMSe@2rD=cqp-J46E};`4EHYnzw2>C^amGTu~#?s4Q2^LL10)_m)!>d2Yy%AwnK0)c3c_9&b+R%jRZ8vX}G1*~XcXZ2c>R%zrP*6x7cR_? -olCbCS$3h0GUUe38BS>Z@$ovSsY`*I#F=SFaYb!UrFGAmqW1KmJ(A3SX7K$zCOSV?D_VyLRnj2M-<;v -cdUt-?MY)&aw07&$FtkDt7tuW%lbYSA=Zv+i$3-5abG-^e`qHa3{=Ws~?Zwuql*@AC^ZeqXhTPXl5+&FFJ!uwD2B#rLE5I*K1d@kdhpNfdt$#a~A -8H&Fb26u)kq`;VORA35d!Ryn1E+y`{%&_OKyw-;K+4sPB0^y!1kJUXa5ba3nN=;NJTTef_J_^f@Gp54 -0j=+>u|tIJ~#(0hkRyY}coVOzO&?&HzNgLUfic+Wl$H|x`i0jTYGTd#U -+Ri2n!egUEXK8&1*L6KDf~fD=&)&zQZ0TrX15R?T{}a#OS*8cR*h0~^bLY+|Q~*Aa>)y0!Q|ej7alKS -h;>a25Da1AmrNsZK$3afF#eIfHxng((`>U5PU!Fwc&L>x{T)Fu3&p-c2W6!yte){PGncrW(e*Fr~OV6 -J^efs@9d-j;^?Cd;(gM<6XG`Y#?U`qKX&{gWbD#?@A`hs^xvgbsITyWT+oKWbgR(*Iz$J^J -u<(`*!~0k3Vu6Px{p0EX{9h0`m0 -2kD2GZ|o4wgh48&BF+rm6hdPQ&aOhLpON;__wF>K16NM2Wj~G`*#O^gqOho^Upu$AAR%@C;a$_AATtC -zHs3Jzj*N?KYaKwKXT-V2!}W%Bf$MU#aaIT`|nTRvSrJ364@e6CextY+}wx-3l_waTn*f?J;Ci@J90>Puy~;L@c_yu7^JTF!?K9pc}7^Nqlh>PO%X`#x_o`s%BXe)!>s?^f>0>EFPL$NE+kQN09XDd*hTfx>H@OSXvxpU`ys>d$G6SF|WjvYG${@{<3Cr^qxID7W2c -n6MX6V!%n9x;)^c?{-{H0{~Yyj`}S>a`_TI>a<7FywPCNng8z*hH#iMLg8u^o -0=k2b0l@#jfdl-LPd?#P=bU6_(S}j}sE>X7_6Y#)d-v`YZRNy?6T%J}&H@gKj=K -NuyYB?RjxtAi17Gj~XaU|Rf7J2H%bZ6X=UjJ`bL}C{{r7Y3y_aa%#rfkzL-(zmclns}1*bW$t*u@9SM -aC4-U`590i`Y!_&exn%uz?+8}L8+U7E8Aga#4*Po9!!==UY(eF@hfqQRH=CijGdf5tJ+ --9N3rf9=okr!j*o{Xh7h#v=}BSSJdfqg+uJ;4AQkLI>J7_zZlHcA=PP7kCoRaz2n~h#~%u`dXqPFLMD2gCNakQ;_)~u`_@CO^0?0#Xa|#^_EuaD8!QFTZ_@kfPG$V|^_pFw`O*E__8eT -U@_~&2Y{OKy9!NPgc1*tuwPl`EJ*PcOx(w;$s(w@;L_54I6Q{51Mv@?t^BxhLxG$_!Jj>g)ELJOWPMS -*<7v>^W8Gg|)E6r!OZg#UK+694*liH2mNVdRfQgH3ymk=t|FF{w`qI3SJBN}tq&Xz2P$qy3V=pXB@bz -P`R)NJg0j{LwGM1kZp5$UF)yaKl)u$Yt=ucng^U&&S1qd~;zSf1hZ0muOf^G<>=whhM)^d0(APCDEBh -brPVoXIaMRv8{3Z(O)S19~2bS9d)4q+AHt|Zoplk1${sId(3OlZ(^*%*oJ4@%mDro(Xgp7h_9cfXQ~_h4J|l`|-IM;oLMnoEN1=aI^6#{@vGy1r4?`MsHchxEub|-wXaHd=>z2-~|&n0dKSi;H} -gN`gmLU7~?N!1pn`x+m~-88a^Z%HclrRs4bv9gNBtd4NGJi7J`Ne{rH@8q9HAU7p6uE8t|Y`3bK(gd_ -QZP|Iue)41*j2Si5#Df9IWdIOHM)Z0qD+?c|R?{@{mSOW_qJfBxwVqJi4N2Smfa<@Ss|>2+gYzAUdVe ->pdlFV5ES=Q6{%nP`|zG|VI#rV|Z#8p;@Bjy2x@0Ds~I!T-e9vp~!2*|Yh&b?XE@_d|z53*uUie86|i -^5^A5!zV<8XwO6g`Xr@2ub@6@X1WQ-508t?yszrz1ot+qR -G0Dg1l&b89ekdAxN^2Z;w{A|T5{ImJte7h-te1SZ;4!#P%C&)2)&v&tA~&t-CZZt&bw{s -I1|`vC(6pdR>JZ@ndCFUT^brKP-}pukGQz38}Co!~*Aw6X9$+B4D6NI!G8r#;GP;lhO#)OYe8J$mru< -Yc~P%^HqzIX^$28w>_MfBt;YuD|{EThZ@87HW(Z;Ek~XeHCOO$fKAK;6Zyn^oEhw{!a6aRRz}etjHKk -v>X=&N1si{@ekBWL&xpE~RG-wb{NJ!viWo7)u7hmLy7cUn0V15s -LK?BADj1vkSn8Sbu^rzrMjD^T!mpOtTeG~ZK;GeH9sFN`YBpCzk8GX_#Q{sUBpU%I6gM&-s;^Jn2e~8 -x?(Y)Vx)22=9s10-S<5Q+g;nXHL-k*H(Ng*SA_St8GAAmb>MI9-8rPK%L1Mgv;1Gx@$f%bqlE!s2HgK -c|$t3i9-zhyb(z*p~wc>)6i7cW_|M681#Z@De=;^JbSn3%}BcJ0a^d+aezvbDekc%W_A0%%a6AuRy#l -#(|3)&tAN@=r^2G(Jl*2FB-irib$_&yVM)zSzuf{Px>1s_*+=e|Y)jm-(z&v#u>#w204~IrF!to_dOB -W@d_Vr+KB|CD4F&0Xl&j=x9g_)*vtrgYPj$qpe^)0`o|?K}JH|ftE%dBLC)hD5Jl+{)5QWc30%)=6?U -|v(MfJo=Hhb0??)v8XkZAaXxwSWKjwF9iNX_k2G;zb;gUv(TQmZrv(qK>1+ZklKf!Atfb+$HvAA-deqSwZI=`jWUNFc%vPl -|A9MXQ}7RDZL|Zl0kjFEi$0iezfI}Pa&vRjQN6F+wQCoyD22|)`F`<7zP9p@Qmz2Z7l9AeEhpImyNX4 -7p!(*-Z-NIfMxl(AILdk=`cafA`u`0ZHt_e}drypk|Ni&CMLd)>m6L_~w$U_3P9xlRkQ=TQhu-6U^*2 -I(gZzX3pW5RByraFr1TLs=v{~X)AxmUsWr@C(+PWCu(AR*!6+T2eK)XbpfKN~d=#y>bA=r^F>In6L@t -o+z7h32yo$eENEB>~;YRkj6ybaty7kCJ5Va}X6ocb&=PTM}fO##F~KZCvq5BLXjA^>m)UCWm*#~R}bd -wcu8in|qmMgFJqo&_3|ez7q+P~PZ+XzUjA1n?Bb+D6v&1^%cTMTUT02Ye4+LYboty^PKLf4$u6;cv_T -=p!1Au?=Z~i8c07qek(UUV2IJw{5vAfNv4kNyL -F9mXSDI#9NoH*e;zyz+|RXQd4TK)13s54j2N;2A}KKz-($4h|0g72K`(+m4I2GK{TkbFVr9tXQ!^#0O -mn588k)cnf_eXi;z{`Sgvy$?tdI4_v5y3I3-eivnc_6mLn{%8lpkE{Pd+y(x&>z~w5Sl53*1IA9sF -X;ck2N;hqcA|_i=S10~9+dT6)C1np=cBJhKSpy3q1Paq|7qL>{@~qv@%i2O-L@}+zp`$Dat4jyb>gGj -BqLa;t}w24_=j=FgX2gZ`fmp0fqf7E$k9E#my9Vj -ocdeg$jdSd0DY -I_HOfy)RvFXY|uEXU)Lker)nyAK2P4;dJ^VEp-HNt -Rdx!+J2*$zA*w9Oy7SLlzE8t|h|*3m%M2OSgm(POLBKPdS_{;}1SHq^fZ7d-1_{luyQX+8G(l}miaFZFQ% -KPEQd$52^k>MiqQ13jI{pXNy^OO`B2w8aB?gU?~&fxZoEs?aZBO?dN5xqqrNy!1Qgd4x;I5lPpEHUWL -7ZT^rercRxjT~t&w!B+PQ9I$SJvcQA&b?BPjmGynlGhsax{0JQrbQ>mFzcg)}1TW6a5I6{aJY1*yZkT -^VU2sDkFzUZzPN>j#L05z|O{|S8{D^gN=vSbd5IQb7|LLhwBCq~7{1~#oe*HrxD=jTeS-Ny-BHAM6`; -gB;H*i52z&yGtL+A~mufn?OJM!B0a#_ECHUa$zbcMzG2x}SOvF)RwyS3$iw5?~Jc_y3s{|SnI0P_OO? -NBD@dr%hFE#L6ZpN|)M0<2H3m)F-<+q4Pjnar}DtVqTIkKjkjcND?t>iX?pnV+E@Lgu&Cv)JnHP)>iQ -Gdi~8-$KU%UEM6gp-|Q}+B|pkf5_i#HmAJy+G~l>4M83U9?HC0**6G0P!{Nq;D-nL+xMQSYZHy}qYbY -$+W$kwo;Gb-_MAC$vQQ4sJ@=gG_t5WR>_h(#UO;((7m>HE>iKU-F;M9j7+YfFCo%th%y$<&QB1>l| -3qMHyp$MQzc#mflborqm7U;nX -M~)mR=)T)pbHln(#&KnDB_)r2&-ebopUNM3ll*ZBxV5 -HW@cuNCtl7c83`YDW6u9)bE?iLD=Pbi>FMdaq2s|C{jg!fIO+oWH5!+#`T~@@!iUNp5yhmj>US#7XDO -}aG(Z1|NuO-|+0$8B<3}2h?NHuW%LNZ&EggCdv=3W70_p($0^$J|lm+^2^qIhO`}Xb6vHR0ei1t5!{` -{2JUw=JOnRBC_fy4OmK$xA9;)Xktg~elgTsz>0wPCV -?O#E=oUtg9xZgtXcq{J2W6nF@j_mPP6cv1(XjL{oqYZdZL*JZU`ad^bPh$MEILmv3CTa^(%`qkdkqX3f9ec;k(F{m!~|>#k55Id8xHws -5B~j;mI!ie9l|#kP0feOJ_{GKQg^sZAfZjSqcVMMVYHS#MDqXNdo6nj~T{biiYM&O9(IMS}`XF?%;pq`&MDJka4cj9PHKWQW}_xWA25yALf0 -ScLvbB6EX~BD&UQN3lHWnkQYCAVUkG0_Nlrht?6JL0dqE#ALk=!X}Z3@$Rpu<&eu}8y!z^^LLS5(5$M%Wm* -AI%viRYO^+N8SKF%t0gV;?dKN=TAzXhEf_75myDW3NW`|?X?j*0Tb9I7Nky=&L5dU5d-Im6i&7R?$R-7Dw)7BgqPIbi_&RTP18jaLD;iNSuIiy;gv(`iosTQZKIkVuD{Cs -`Z*vzTwDOs7>`5|45dD%hvRsU3MV*zBosp)`Hzexw@-uR>L% -MkO)^zFnKr^*E*pO$;7k8`NXKLP3Jc^mGA7{+VFie%-$t6!e$w;~AQ{(e83NkYFy_;_$7`|I+g^LTzVrI -c%gy^??@;fd-jlo+crWvQ$9s?WVegCHKY3SsJNP{4)6VBHAAg@{Vw{|`aS2r!T*r|_x_^-Is~c%y#f~p?hM=)cp|V}(8EFgK~X^oLCHZmK?Ol2L5 -qT33)&I%Wze~x>L5F95A9Rh3~iqFMeS$W(S22+(?U(5YeLtBLX5z|j=yG*rcyK7^AFFx-)_FizNx+w3Ac;BmwkWrt?|9>>*&|q??J!zermrSe!cyC{X+aA{o?#a -_>J`&@0aB_*{|5o?Dvx2QonV6@B3}>+v<1B@1$R)-x~oZ0;&TZ3Y;3aG;kYHzyn=^0)t|Ll7hwrWd{` -#{$B)wMEjk#Q*hT{O|V~Ze(-a_8-hOzwhMVABrhbk@6f)PedqN3uCG&Qt59e>FaUJY#A!xomTT -5%{;jcSe%4fLZfn$@FL*BVT<`gbXSwH5&(oe~iAra$hrN1w^`qJv=B4+V=rzr2lh<~y3tpGKns`6p9p -HVE>W6zr`Hb;N_c8gHeHQsF_c`Ws#^*Pm?!Mu^&-rfkJ@5OAZ?*5Ee*KBs$$p>u?esh0*V+Fu|Dpbw{ -`36b^Z(BOs{bPaVFCRECIvhbFgsvt!0v#f0nG#3P`w2PJ{34Fa9-d`ME%==B|&S0J_tG<)J>bI&DT!X -KBs*{yHWeG_FL_F?H}4!!R><8!QR11!7l|@1ve+UjeReNUJGSHVTD_(3p9nA=QXcs0>OFSCEguFBBU4D%e|In?th&os|WPow9vp0hj`d -cNrSn&)b&x6PhAJr8&u^ZeG6d$#ck@_NRrnA+BQugzZjz0P|z^Pc7XruX~amEOO22l?oH5`9McjPuFx -$@MAlnJ((?Up_BU?XC6M=<|`!Hsa;IJ_o5Tzw!Cb=O-Tr-=@B;d>`_C#J8)j2emwZ-zeWFeFytK<@=0 -pvG2>iANzjmd&&0(@p%*Ca;;yu-$1__|0w}K1l$N{8`vW-C@?l~e&D*m8NsW9PX{}MbPeeh5)qOSGCw -4+?+DPG%UC%Xdo>3%-)sKRwDN4{Ip6aa;y|OZF{ -b&2n_kYoUss9`P>-;zSZ}L+=lp;2?-|f9U{t`EAbrrppo*Y9LC1ocX}f5{wJWue!TR7~A%!7d -heQJZVo5LBS#yQjk)P*esugc)F=bxP-k#orz2|r@@_y3iXP*|nUcN8-zUTX;@8y6W0u9F4m}WXJm7S|g@8)|Hv`mx(bUee13 -wOI8ZKhJPS4d}dRBO(8{_gpRR}bHbesB0!`nL`64 -^Ri0srPxF+Tg3f%c-v44E`keVDR_Bjv=8TLqaBm%nSK8#HsHieS`Xr@4L9~^1cW9p6YwCZ}-rEP($dF -&^JO4BK`Fu3&u1mO_b(s&1ubbDgg&im1hf2SIkDq3eQWPS3R$L)_B%>j`hm -&noB(M|Fw7iEKUSr7~g}4DN%`^bK=4W8m@p5a-pbC -Z|_{+c&=i??})9}u}eb4^eXeW-uXAuaKSaSnE;mci_Tryz1I_v9fgWY11- -D58($KJAcRP77rVj&`K%#FKAH|=I!)1?6>t2-`KUImm@8L!~gyoT5F`raom@U+=#o>4ucn|ev -#(p&maKc)S=)FZ?a7C -5R2;8YVbLYg%g{vWgC}LPg90??e$!YRZmXgVY10at(D4>WE9-xd0d{j}xCbsY#+t@)JduX7E7P{!6j{ -$}l;Sfg{V6M8Bt_{3j~;AhB+>=fF>g{Dr0h8#$`e#WlE-HMrNfhP3cI;JQ1fL`|^;udnN-JQ -wfz+DV0_krK^G}suE>oSyhy;s;Wk*xvh3oUG1rcYN{6bwWI#OLxc(yDpaUYq5johP)h>@6aWAK2mtey -7DsGqy$n^j0001f0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ+yG%jU$W#qjJcvRIDFnT7FNhUAOAPfW -$i7;q1KBB>zI7H{bjGU1fi4`brAGS+n^|GHnF*)<2gAG!1Xu7~OSzAig`-_kW7zUM!7bJuJtyS}TO((f_L-)4UQh`xXL8Kg$rF_;m1$WLlRnR>(=q7KAPE@-j~=ErbsT2Z=>6pVI`vh95%zx3I@TKz!l$G=Qh4E?Fu0b?W; -GkHW-Ui!c!%7FdM8R>1dci(t4A7IA?S&y0K -`vP*N9tY0kP=`URwG>f(aHJV=p;jq23*B*#Oo^1zP~~cwAndOChCQ>s61PaI$t{oiGKp5T7~OiIG1k~ -giXzxHp!8hF1s92T#lP%^VMkiwB~%A{Zo$b?@ -cSbTnA(E7==}+*PdYwF`p8Hia7@&jCfmCu3SipJB)h%D^1cO15hSLlH{BVl8I~e+X1{Nzr$YL9wtQiS -jXDNhAA6>m7n~z-o(K7Kwc%txN}a_}ONyN~CX@b!Zy3-H8(&1LN3(eGJ8nhhKrVs|H@z2=#{Cg=DOPIK`ff+h4e=!D*Cp||U!GmDI%`;(f -H;tE?1WLHaNRwX-Fv>Or^exqB1>-_B2Qa@V=j}Oa!_Jwr2bel9wnmOwf-15k5r_6 -c{=M|fwV|AR+3fPI%@Lj~n0E3aV1=vQJeFQZM)j6&LK+_*XS=JeD4CNZmAUvyy4AJ{3B3LEIuL{5~58 -{`4un_joSuF3LfIZ=M#a^=AaP9<3x)Pg*QiaVX4lZ`(&yb_@UA3^eYAv+6u5*~1%eMfAShBsO-EeN%g -p>5`kyb6o1^^!b4JuY=(aT2KYKHR}C_u{Z>=N&VQx?q=3Jg~WBGlp~c -Cc^nPD9YNj-lK+5vK=?`0@&4awP%3Duj)1o1Aw()F74c_slp5dm-bu4)Tr|%UiodPyy|->Y&b{oLTy+ -m#0x#o3;hNQeMg19+en2vuuugr^k-hE<|w}9y#R@;aXziSmjw%UzHK94`N{ymQbvd@@WE687#CY=NSMSd;}^vkm9H=3}M00S -0YsFyG|pbXSGp%;aqr^MS8AVi=GK>90b$O@M<8R<#naa4xL;0w6w%3OMP3#b02h#SacjQP$a39Oh!Ex -^^s#xVo%Vu|=o#>6zk+t+LvfF0R;yza|tyD -`PKDllDNVrR72S>0?{jMmso^%a7&i7``L$Hw%%}Fw*fmV*DtmRtRs{Ig+7NzSv`;@M;~`pq~TVKOt`7 -VwtTcjsL)=;S#E(@-x43Vhu`kSRa4Umr~42|-JJ`E*OuieVr^Nrk}VrC+1*z2m2L$jhx%b$@k^lzth^ -K|dm669CG`{?4X|dI#;W*nLGZGzk@>Dd6X9QL2RLsbQam0zuS#I$Nl>{uqAd2{zVcL;DK3u!L?j5L=6 -&r)IRuDo830jT77{}Hs?{aJIGVuVI49>8Xh0WD$QAMmc~~I{xV>2CT&k02*4dmGQ0Kes)6{{&p8W`n& -9Kh^Pu7ejO0x$k`{mVT3+&28)n%1-P5W1GkJagYUI -0Dg6yy}E3c5E=)>@@y9k(6yfr@FK{^b#p6InQivv}8+WhW749U@Gws~QN}URDJ_08pYd0ED_Y5Y3yZAyk1JzbCV;fyf+0miZuv6wZ -Wo_wghd>#?aT+-B@9F8-VKi>jd4&01S+$g$|xVhOSQM`LjJZz>l(^wJz#qUZtgto*VINnQuVb^@{-V4 -O-(fm@W~Z8L4x^?5QOE+OB(etASU^M@Ni!L&R{H%K#n>?!EpJ)5i80R;HrdZMt`z&rHDTThM|=)H%;O^?=`&j -ARPN0mW>;?$-OCk#?@wCiwa0hcFYNAWP(#z`_LPF?NY^WfsO#JR)mvgqrDp -R>faKRG#}YR6voU^_-Xza!uMDuE7QcGLP;%h2Pq78V+d~|dZ6j?~LioXfsqlpW+e9^pO9IAUq&D8*;e`nxx=Yy9cg;@F0Kj`0ua?v)q=YSkL0^DeW9 -E)EQ4GeZ@>&^p`wt8N^Xm%Z)N*ctivN3*1Gthu!A3N3Fp-YCSF^BfclWSa;sxh^h%K#wPq~Q=Y)La3> -8BfD$d+-8r^-rKy(S`wI>WQB;pm@o6lpbTn&|Eq+hu!9ht84N_=sP|PGqFQs{Qf5DD+rjCTRK>QwTbz -Sw$OL}o=$mGqdYFwya{wW(&^NLrJ%MI`XiIO{A!gZXlpJa3ANOenG0szbaP5SqMaEJu)}gBfO67?AnO -ex!TUyzOm{87{ze926FY<9?$G&~HY7#yLPL^hy9fc2l+16xZ5EK~w_QX+!iF*keo+-`Vfd_3vx;j^T@dwb{1rORK))IjIH&-swWJ@OI -E%2g<7_fH9MQ!mvQ#Hu#$+gd)fE?o-S|EH+nWcx)1ooDc?Z -zvOD(R{m8QNpi7_G9SCVa_jXUfeJ$1_t5Oq&G7olDkrsczKwWXGCSSypD`{9rRnM0i2q3bt*>AJ}lO> -2C&zy@(31tq&cO&gafaj$E{z4%v-Pp5m6;WD=UjaqbY54_m(I)_ZP#}B0ix=`Vhkn4%TH_<(tzXVv03 -32rejqZtfOAMcI~-&h@W%lA43T9vBFn9a6}UQ~u`<$u>;P*5CAtXvetvKYgG%60zm#MF;M&UxHv=Gi0 -RKd7a+7vF>ZqKx{pJ`xwu0tEDCa>+Da#D>q5zu%+>RI>>1iN00JjXHw$~(sOs{zmh8+F*JSt!gvON&- -z&zxF8*w)v4MNqd8=6n@_k8V$BQ@5?;1RGhzMB*46n_sy=eTBTcYva?yn9N%M-2Z=;8Mwj6Zncz^_oULLq4C(tNNmLkgdP~HNo| -qR`mMQ*-BM|-GDN$+f2_Meno+kHuwgI6kyK1TB{#@6k;X)d&{nMkFc6p*`v_oby#fRaOuQVX0aywY7x -ytT&uW0BooM1pG#QI4c2>LFLMRCMR-(!VZwnp3B3=ZdC$4B0SES4Od8DHTK(zIs5>@PFF~fQ3yQq)=# -BAaU$Pib=#1$LI#ga_=%zBhb@_{kuYxjt$Ira?V>v0S8rM-JOygY0d0#$pKq^nhS5HTdS2{c@b_6rZr -Gu*gnJG(KzrwPrIq3oiCcGeOf1JBG2ptg0WN8R&v$)O08Q4^L>mi7;z9qc%eZfHJj6zZ9`=KJb*J(Mk}UmWvBZq3(6O5M#CWhi{wl|hoY`itz -E%+|>+1Qk~LaWPhECF<|NDC?s>!xYu#qZLv?%Y-Sf4X{Bb0V1(Z9B}UmP@??N^ef9er>muuPRq*T_ -nzKWC?A{HGH~1y_DqdqgNx=JY<7r^dT~vT8O+RTbuA5($K0xL9NOc_(~O@H17d80F?(!c&PS9PHG(2z -$1|H^I#kvB}2UvE3#{Twx?J;sr?3KOBG&W?I5GlF#NK{ ->Pqq0C-lXt9JFqf$@!tql3nUbWUqrB$SQjp546OmnxRRLHk?c;p|NWDYam6Wf&A$M*=E(*L`xk>4FK) -aTA@E#G;9_fiAC`=MSCq(v>O`K)_j{zU)GnqIm`QF;-X%6|`T#hd -!Jo)Wx7$h3t_06V!pV$KZ20Utk%Ts%iVw{v~rOXZ!&a2R6}i%XJ4ENJ-5*Hy4d+Y$X}Ia`RA)@VY8VW -0($t0NT?u{WU@0dN1@@At;jE>UEWpVh);}j9JBG9>S+WAWEBZcsn2y1dz>pk#j+FCGFZX(3U<{X7w%_ -K*aWRF52|XSG5sHhiyD2G20{f6|sGtjc@g?<-B|swB2fJfyAtIp|RE02v4LAGTR@H@Nt4LYQwn$|gm8q2KyZfUU=a5pMsh -061wX6bF%3ZFb;HRv;rSGtdMThh-OnOe!cjb -ST2lu>VN}=i&LL(3t7e%kNyl#u7` -XPu?24Zc2Zg(&+t1>@=p)<~wG%WpP-cAWLm&IJ+FN#2C>wfAgD1DrEv~R~*sF;(X@*n~dF#JJs=1;~?Y(j7L&`l;(N?j3 -8+H}XQKlH}%GGK-UpZfmXDcJr-t^GpKByCZK|o!nL*43#{|&3J{yH;`*yrhP1#uZMOx@~naB=0ZtP7sb{4a~Ikq_Mx5*3As3ZbME1EXx4{{=DTPqN$-a=?13F`g3 -`ItO1S@?cKvUz8NpqS%?p?J$m#PC5n{|lfxy9vY`*r|Asf(KSwbAUIn1Bw{7unjgeki$qQ -KjJ&v8wr8t6oQV{!H)I -*#t5|gOzaYrY8j-`Zcn}%n$hFQ7iwX}0?{eQ)r8|gM|7G)%N@$q=GSQM&WErf8~P3EGG7@+fQ`O;1X` -%lzr{9`T$y!1)^8w7x5&T@?cVZEC_E8k0KtEPS*HzK1P-y}A%0VZWT+o_&w!t}wg -N~e=2dKR!UykHG1lzT_U+$cNnr!rCmjln&>JE01f!wy~TY(=yh4-YRbs9uy5Yc)K5MG{;1UyVzARs0v -pl_^v5_^0!pOdWxa@6OLqd^Bhjzi{cIREw<&g5^XNg;O!l7@<Zg}u@|r~~Tg!B%IZs8Ebgm3X= -jFNN4*5EVYq(}9_90=}f5Ewiv4#~TUrmXmKU(#p~sOmP7qj3P&TwT9F78Zuy(Fr44MD$oRE!@1{GS{+ -B&2<56r4G@qvYA<`Rg(yy5F4?4gzaJJW`g<2b2gow;p@qdrl4st|?FWUNe6Ai2+**pt7VYd$x<%_O! -{(dKT`z7kNcK_>mdbR1?JH>q(BpZs_F%t}BM{9yd>9G5pKbF-J$84tQe-sxtsQFO;+k)w(jhf5_`!^o -c_@9<#k^2)B`Hz8pafmp*epLSF>fs0l>2U-NXr_^0)fo>Ehm7D4u0N^`R)Pv`@b>shf=<2x89)*A5f+ -_RVI?J^|=wxoG*RDQ71hRt#H7CxnW3BBrRpYKht?m-N8;+(_l$s5YLDKAOVysw1($Ny23oOHdG-o8)a -62biNnLIsC1$0^6@f=ytQr^8UiS{but_2|&CWO^$TbOfCh6v-1@aBP|(ZMprH{obN))#EgX_VcB({nB -*KItwPr%JS=$nm4TiD1NAjODt1SZ%8bU7`AK`^p2M=cb)l#&2E0q24(PLF@zq}5LfDW+Zvw67#-0cBp -}&Wrzi5RW@XBz$`Z9<0#cKIc6hoB}s5ZtjXj^PVlJiEZ72DMRfiD^SMEKGk0pLJax4`>HSHk;OIJfBNFA${B^1 -bk-4?5ih)bgd+9l8zWJ%DZhh<7F;6=;{D6={a^Hb_sNCJmS?@n6LI{1bEwkSEzrFYDzh=kq`lmaFBDT -0t2S>n+e#tL;83*NnUkNpP@29E6Kcqz(%woyj~z``^mpK{qF$UKZuUp9BN`%&EXOx@1O~R?$u~d;=q1=+xCztn}K> -xu{a?A4w{J*=A_z>4)>!3d+*TeY#*qq+eo6EYJ9b15}XEx#6;fQ*@tQD+=O`M-W8@%M`_2K%wxXg+I)CZt=fk&~Zm1R1y;(n1TsA12l+l0cz4JlIEiU-`g^a`HR-e+Y)jS@b8bby;D!$Zd(tu3)NrzHwqN*!!) -$ZsAxzEphq61jNvIG0mmj_H!B?lC?0MmdPa)T$<6)*n>{&k=Dehkwu$88JoO!f-f^4?fm7ns>TFw_4r&SJ(tVa1idQTgy$2nG93PAA=WTSRGW0;p -l%>H9EA=v~pU~Z1&{S)8Z9SeQ1xw2&Sx*nstb&?@udm}Ygc)C=`Zkco$zD@Bq)J#UZ5>`-~D&^>PJ-i -w8mRb+=3^G6`Q(Sk7^%Ll<6OB)}zs|!AP*t!-u;Zf4O%GbXEXx-I`Ra+?Q*#`i=GIALTx}xZcP1`Prv3E5DM)H_>gNQ_4hlpORf0aNBF+VIq= -Vm(k*N+v|EdSEASBsCG5>J&<(K3j&SrIUI>b+a`!mlu6DR#>eay--3N`ky}lqg)*^8kDje2tRWjd+X0 -o_4pTvV>N!5lCe)t2?p!^Oip#C(?miOIn=2(_om_Vm^&IhW83m=h*>=R|zdVOz8~4<5GM?QE(&0SVR} -Yhdk~(ua-B}s2hVne%OC=!a9G28g=*X)HpCo;aLxo{OaiN87CiKF}KL@Jnjs8IcboaV;K$;iGgkdERLPiStBYr+Tia~L%6WaHV?XeU@S7p5B>r@NB_hJF#1L$^6V%K;+W(< -7Ha%2gE;dTx=Eaia{zpV16VgDYn3~$@zMwIyJvQ-2$MV>OdO?YvC?Tk(?7{=6>28Zb#!43 -hx+RqTNlRuwuhQumU`n1gQqkSvP9&p>!ZMa+)CYbdGB5C+hw4=%?ufeJ_ibbi)!{Z_z$ZL-W!uN!@Dj -RaiP4O-$&N5~%tDfIAIT^Xt@!djw_fb!_OK?n$r`w?VH*chOOl?NZEVxqE1dN+k8TC3Ked15`}it;#r -~1-f_XqkQ2*p-oo9do-| -A40x)!%{y|Ui{4F=&caa^uyMtM*Sd%mjSj##SdYw#l7Tf}M-(GV^sbHR-HXA5=E0b5g_1^9=D1&C$ty -XsxW^40B!y47ZE*Xn_vm5j|3=5$NO--a!i-|B?(ZP^6t6wu|+R$f4aG4+OR -M5274=tp!AyC`h#|p9Hu7KhrAY<~!g-WWj4d*Q!KcXukGGsHK*U6~idVY0Kd)lCM9aJ$8^zvAt8#$hz -6f3e3iuPtzF66D{5`hJY=OL`SbszIH8dH&micgePyLK))c|_)uX>CY2hkop%t|41K@!9BstG)B--Q(* -mBshf$fzN>$nh*R4^3*+Ft8Hn(k^YW;fT2sZweRD& -8jEFjr!q);oxjb7w@?mHXfdV@sKoDAH^fmBIJ5S^8oE8S)da(*=4jvCfmb@9vR_f>!JG -dQ_y)vzgcZBfDy#60R%@cyK!n?pK=bxT><5Fz6?|s{j^A~Z3nqFw@J^0wO#iK%u})#D8oy(vn}M`^Ui -dnP6SmdW`RJyUd~eJd`t4D`)D_1^&dF6iHC!d`Qu_||s+DvSBgFTT1Bl07x&$UQsM -&oY&aKv7JNIAm*EkhS^MJ=geS@r+Ozf60Uwt1`H{x_bF?If8!bcJw{|4qX+q8wQ(RwB60(7>|I3;J?4 -F7sGBB7GwFy4L~<;a6ml|e0Rd%9;gpr8vJ#^Un110KWW;R#pc2A2Q}b>SAmC4{Gdwkt>H%(ek4L2UA4 -I`AwKw}_zOhNOmh6`Nfg&#cMN*I=7FqMUndf1J#%t2-34?wNw$$n1F -1=o<(WX1{YaLFaI%b_Xhn(mI`p9?g~s?Yq|oPLCYDVfK)ydVGm(6YK)$OdMP^p_{SWl}B$*=_oZ%}ub -P5GOd@2S1lvD5nNeaFtNx|2f6ud$^Yk!J@@2*Nx@I?bD_<|JC{h>+07ib^vGb#Av2=p!ckb=ii!ql4f -5fT4Y)j%S?Xdn^qZx7w#tG$u=xAzUC;tM@(i>RAA*)`DgQ-PtViPbqDKs)(euSL5Y*ZVB2s=Fp{=%A;E|KvOs%s529zl?3D( -MjClBMY@XTw9OJ+AaK$=fv3PNOxJ!vNOo42#!-UrrE`}EEvre5%r;{d#HOHYNI1-O1^rxT`-}0QmjT~y32v*OEYd9;9O4|xKgf)NvyNg -w+Ge#$gI7%fFrbb_Zmit5h>N4+M8sA@%0&issl(j31A(<4y&0~~z@-$!Kggi%pltIln}1 -oUv=UFOd})WIj^mQ}?q+Ypy|ayWWhl_h9M;^^@uEd}QT?JXz`oIEo9|C=(#Vb12hT@fvJ+>*vsV0-M1}*NXL5;L&~U@ieji@ig?sQSzkPtFzG*Rcue!ZMAcX?MMAp>-_A~Ap6 -R1Z2_{Zk)zirR5ahl!(KF|O&lrKBPEosTBqbSSY@NxZ>*1RB5v!`WTP$M))o%;M|~FbFV4W=QvHzt)8 -e>WVP=Ws%z&m>;?zt(FJrwq$IK_Ve~RHe{tJ4lE?e@katF+7$*YDja8j}|vUW*jwlc=sFfQ5hGGAqb_ -p&VA?RS3~%E9cAt;L$H7XiXZ=K1LcL+idy5HJ&3Js(5Y;S -Bto3@$zxG!AzIH0Ew*v-W_Z9ec$vt}_Sg5ua-HS@%X37t8VI$uDd*ZcZhyS}Gg%9}#jkA>>{C2uYE&Y -65Wb5lT&fClj9~H)?-U1a^CZE -Ldijfb9R)wIQ<$50D^MCA8@Gi<&%-rO|z>mo6)Iwfc=hJ=Ic!Mg{ZpBw`0I-S+Z`!^x~`Z0AjHtRX=2 -_jttSSgr$;On~)a(0kmot%79zhy!Tt6cj{@Fo|{a&_GOX}#vxDuuV;&oqTsKOJuP16a*%Qma@2+eL^K -GxzgO&j&|U6nf#p5gCyCyVS+o8l!#U$|-mIuOvfjws#AZ=pbM5fgxxTvbO_rRj+CwZ~O~1QL-zNuRWA%HjdtRCA*L}{ -sErc<(C{r-uMKe!2SU1!61r2wEW7$Xjj_{vcTTTsVuz*He{f{u6|}we$1Msx&*RD@z>lf-Hl_<*M@$Q -cB0R7BF5mH{%lKaze7MT>knI=O)K*oc+(c -x18*G*5kmpXDCI5Dtumnrz1}P;8-8PTkb}w85qePBMn97>ygH{kHsYyK*_H%srFxsVdv4oGr5rS~I9t -byfMsSFjvauB3~eBN+o7-u_77baqkD(O_}dPS3J9clq)x+iYyq&Mkxeb`7XO;ayAjpCOdwOgc}2)a}X -lki#Xk?q%crOk>}Ga;W6`)kO{=WRom|^{ZikFsKRAvYIWfZvuB8`qeS=^YDPkgO>b4)Go#asv4o-$IkizIu>Qnn@>^wNhGx8jas*MA*#@cZ&^w&)^50dnQ&sc$Qy$cO6i`$L+OWp)E?(trF -XSG6R~=hqgi1liANgR_sVR^e~%kK)v_|7>EIi@=xvjd#w5WnVG)H{9a~$D;e}19)~?chiYPu_=|;PPP -;D+d5a|0my+prvRMBCX?;F^wyh?ni1nlC;YLMK6P059hxB%fGF(mEA=c;7Ta{RkSG2{8@IopELTL+Lj -DkvGr5&Bv&J)){$E&~0S$Nhnt$;qb$%~q{CF0$9ss|IB9zRGoBaDu3=2-CAdC=SkkS6u4FNW#Cz7ba+ -%JH*vB)7p@$zl!qAoc_$9Cn-wdd5R<$qr=EJNhrYx%lV8DJ}KaRL=K_E3Qw_ojT~G8f48{WG<~W`qV* -tGr4FfExR@WZ!*3$_@MBt#&{`=5z-c6np6uLQQhpp42gXkHpIv|X_W2FK=8~YVBaM^ZnfgW-H&Wn6F= -tSzM8m?`$(&a`#EJ+6AP3oHL*~v&qV8GBE;<>YGRQXZia?do{wXyFxslUWf*R*#?pZBcF9E> -jr(AL>^U`=kev}pa-z45tLfudJ|xP3g~6ky}m#Jaq3DvEplZNf^ocX2LU9}X$+h03amumYHwHzWg>p$ -F3bvY^wBS&1;SQ_!ly^c42o;7P3Xg6so={&X&J#Pcux1RYZLUI2fOkiyT7Lsr(?%fv#He@tB*B?jfXP -nLJ2)bQornx+(#vG+EJjNbMStI=pQgo?&%!WK5hfRCcw5DTf^;3ZMf0LpgFJ64_mV5aDX*NCl#xSvPa -UaEvTSu)ZZt@5DjAsz;L}q%^>?@#ECDgi}k}Tbefk{>n;}Svn`~z7?9awEsh_>vo42Jd+hGeWW*90UY -R*GY^u&cweFGg>RM-E&8n^1v%B%O58rFJzcOXk$$E4g9#^<PruRn@L> -R_#xZ6$Ya7C>`X3p#tlqgQ6{p|3ZTSZQ=f?0DUNG?OXklr)w>+o565Z0iO*^!hQiGozOLd1&Ax!v^L5 -iSqpe^K0D~hwQW#7`y|!I%gcLIsgk0g(7mwrn_c}VT=%_^}7sL%f2uZQSM?`rtb9?#epwHv~U2BfIb* -f(-bOFplcu>1iTbp4$Us`7R`Z1i}pj2+|XGR-wbn<*!!;+Xo(&)+xwn1qn;^VttDyVyEH)#o9X<(z)0r6ELPLcZZEfs$}-9S6nejjy}~$&T_#QrIonHjjgiUlBQiZ$J`B}OWBMU!`qcY>KpBf<^ -ZBpk9vQ-huA2<@nyYGVm)4%s0V}R%+d0Jnpci#Dld&-40kU&7YD42>Tj9PHXDb`0S(O%vWR$b)u7c>8 -Mze9$V;pY-P<{r0{;2XpP<090%T#~DZQWpmChhW7+kLYnHVAZ4@6OLKnJs_D-o!_cNJL4p&JE^fwxQm -e)yGA_?)X;0H5>GBy#M*(4U9^>rYFyrSn7Cz#8#AS8o8y;Lsn1&jJehkd|?>H1P)^r&PPhG9fg`uQsM -pTD%epOf2CUm!~qm7wM>H;vBL5O8f@mdMSPbNj)FGfrgI3??tdJ@f+Bgh-x0PR>WFKd}|Z2BP})+kA4 -AcMHnZsfL!#XWt%kHr2<7x%=IoCD;rHDGZDWZZs8gIMR#73LiYHt@Q%OQV;6=%U?6&ln;ZGVa=QG_z$ -N#_Rd|W!u0<9dT`YG{+Wl1E2#(4dzcbm)D2bCvl+J+UM*NteZcgv%)I|)#jONx-D_&>?UgH<=iUo=Up -W|So)gCKS#=_^t$`JT07Q>mm1$(^jIBzQcJ%6yoF%Su%o*Dm~C#A(P@Cb*r2tQ`xMN^lV<+0Vt9J0%myOyRmHfCZxQh<_hiem88&)(gvHuiEmC7d|>kcjW%^9!0op+pWvI&3$1u>=FnDt1nR+WJ`;phs -IsYsC6wi0S9j5?iUdmW_u%jO9cWC$hn-tj|yalomk90wW#uHo9SC;NTvD -B4Puy2vNC_gdide5VNUZUu-$iMJQeJI^7hS5K0busm>(je3(M<5bNOUQLcu-nD^>&kvE2#st -Fiqj#nRVA@nFrB#T%9cZBG8qvh{&Pxx0+VxjG9GX1KdmeK)qphgPt~jI%Ay0(@CI1@hjnGY7?6hN9Qx -IDWxpJdhOx8yg>_|bruCMTQ_dR<1EzOMOXRArlHuptY^)l|#5xPf%=H1vC70Yv1Y;^XF3VLd -vb7T$3ax-fU)#VH!s)N0RcidR8)(VT7g}uxJ{2g$BX!@!MAFdHx#Uo-du(VhFrh=9x5kQ3HiF>GG!W?xAKkT;xy; -%CI#{dtRte^8(VR4KV8SOAfLu>~w=ybxDD;Y_wy!|RfX}SZpRr6<%M?S`r5lI*gZd4j(cx|dB-+WA+S0KhioVT3(1p8U9;|CyT -pw(-WB(Z~nKNOCIOK49NJsQgriHsh_K5|`l!;l&WB|yO;=65H=`G}k2D4~X1}($G9GV+eG^eTOkQ!q& -V;aH0XpaBLAeRa3M=*=Whe8^8O88Zm3rc4Ew~KFxPw?C<3quWSwYhFQH!nVBNX4 -Ai4g6K_K%V5l&5VWlLA6k2w8!l(@hv8X!8J%q*VS6218Wg?nBcA{u?8^4=W^xWSDMo -EaW4D-yLp)v+2~%UIGr;4<0YDYWf#&=G#&D`?#NPDao3hp|c4qUX@ty-ISE4|JG-1)ocCTQi#n$TQK= -w?9eiTlwUfV)RawB~taSYcM?5Q1T4ten?mIJdi-qG4XltQ_R;X;g3< -<=m_Fi9WpWX4u{Yx(UtqHb*N|IQ%ju!Uz1zvdhiP>1lCXm6v*)2CPDkn2jq~dVoH}`CO!%suA(#jMU) -*`L);kDOPH2z?mBEkr6k7iON(6z!Va%-ExO^IA(ql`Zu$wZro8IaD0CanuWC|W`*Kvatj050t!``T>h -uzp=U$CPIt=FqD!UOM{ZA@8@bY*w2K6UK%DdMdl^t5N4c|>yH -IgtcuyCi@{(D53zZ4ypZQ9V6$Zb#NZyEfplD{SXL2q;U+X4QzfWLjr-xl$=E%e4}380wp4o@IKBx;-b -7>PZ2KPIHF#pM98_wakPN{qYlVdNH6J-f@u3Jr%k58_=z3{#}%EA((`d4+qb{?tg_y=Fzq@rWOb;LT*(LCG8&3`t^hO|6a{sgbnd1x -hf_K|6Mxo7+zHmBD3GM0DqN^_0(Eg)8Q4pBud7lUh@2NtB(n4j!qY8#J{%rfxq*QB&*Ykos8FA$g4Uj -CQe7e7;kvuagx;H6Z} -rJ87DeN)g44sFEOMyYbADAW;V57m_L2BxlRj8t+w@$CeV}K8Zmy@Xk66np0iES$tQ!}T=&nWOTFKq0l$E0`O}Vfff6GTXryTv -)l#9yotX?TB7c$^$kUOS~j=L~Qj(w>Qk>0j(yY$=W+l8b1Y!yx>65J$(yOd$eY?IatLU+el-`p2#qf( -vdZG$YBnMWBWu8xnC#MNIp)D7t{6iCNeiL3YJF3gZ}%yJ+;Lb*|THat6&On5#UGPLC~UgeDDlXJC>ca -kuE{vA|bah0{-!6OsmPm{~D&*NpjbutT9v=Vz_zD;<(T#QaDfoM>Z*oR&&5xDL}Lg(8<4%1H-hy_WKErv=Jo1(q4s+19 -zYP;9jsGs)G*Em#&(t@lnZN$0WWmbd8_NA?)bkMBX3w$R_Thu=m}A(_{IFS*x;GNjtA9z6@ -g4%6Y$F0&bXSdP|!zQ@$lRjHm#S0L!mmz}`wuv>4#Vms(RIj0>=X|1%Z)g?FhI>a!lv%Y#mjQkBvuJz -w5A(rD~>(TY<1q@X1wIP&7Xh+rsN*mM+bJ6BS&Yv&&N<5S@OR2$%hn=GQ3({^8Uz>L# -~?92IblHocgbW)=}Kmt~(h$bN5LV-kUWK7y;cr5D%-1=tDU_abSWnC8f<HlS>*SOWMTn -pD=;75~hudl_Q4nTOCJWp#G5oN_^dGCi2ltl`I3)F0`U4lkr%epw5sUb4u+q!+e{gf*B3AlJ@XouYf}X#9Pg6^!7Y2oo;LM6|K{XhM8W&k -E8Np-Q#l~T)Io1Tyy#etI_GTUaWoi1!_u3Ga57QLn#4VSYw-M9G~)LdM#>WEA -zf8HSSqm?-Qn$H9RUz80Ol4`Oonm5nr-)kFln3|!*m+`7BpKw-E)n>)odLZ88>h_Jv36=_Ezc$;x>3h -*>7q5CDVHI8C^8sXWO)UHldgEOjm)gtZHcJ8o8)PTygf*)#_2HCL2C)c`&_NZ7vX3WLB#QN=i^tV}Y! -;rpd-;#ZwJ(oV(iHskG=5=zwrKtl+MxxT{5a5m$6-8}T|BwIwZCD;sOsu+}DVMVq*yxhUo>1=ShvLxU -wSkKX=+2Fzu_l13CQ*^V;XFI#~)Jcwu4KQ-t7X8-)(H0RIlzBvCt(ay=@irgX9YA?;Imu3|!02%eHYV -`=E9ig9dn<~Q1K%3N>x$Fx9+tW1B8$UtO0hW!li -Ukqv!X6{4$c`T7BEMDil|8p&J6zZm~|e7$*R70Y`FQ;hK=tI&vW((jt2u9n1Ny118JuJ$AL -8EPW%YsN2Pkes@$j^NLMaV4`e9Aj19^a+L!-It#u7N>YhM!yoG)XBku@k|8XRHkkq%1l6v4vUkva2`1 -@{rpRc8NCCxb89A9&S**{QaD|$!}%6^ot3_-g;{lvtcblKX3CjiD{v}y|gZ8w1iYzGAUJt(cq)uVQ0uzEB{$yJZ0E13b< -5rz6i0roCh#{(4Ptv-*>0+b95@v^tjlHU3={6r||HZSfZ%q(Mh!9_sIw;|oJFV6G|Kq#K29#@l5fMwmo@@A1)EU^HNW}ZAq#!A5vm@_tX0gv&k6bcdrv4{T<;*!e4YO5WU|HY -iSoB#TZ)r!GJhj_0Z*auU|NW?rf9YO|m$tL$-FvpzjXGGO>5i6oi;J5)TgL=uHK(`@E;+tpV=!~42`WJ{X|3B>EkEmo*nYv(eFwTtCufx$VOxRcIEaLGeh6{R~miv?-BnRfk# -%>$;=VN%MBat0qX|2XS=^-n}6JU3UIxO1k}5szFV0h#|}8)xeT5!HJ{Ig=i&S@yS_WLN{)IhMl*i)(d -TjcJVu{K>GKGE_R?npaBIeZlW<@`wvl+(1^SSB(d$tQkc+Ff_W&(i+34m*!T>S+0old!7KRW!qA?z+(vb00Cx5)s^X=(d7rGM`5Mj -%v&>%|>ju2V8#s**@#{j8uOzb3q1Q+$Nj*~ZhVP*j$#@@+M!LN&k0k`!`yrTRns!Ek;$Q!u -YK>`47sCCjTc3k)%w@0bPb6W5@*-Pj -r<*C_H2#haX+-jSSZ2ztS&)CSE4%3=tOcP|PBxZ)^x1#z^OkYF}iqzS&>Y1~P_FJt>lIK_4Cz5o}l}j -)fdpNE`M_($)RNl1BZNRNOR%-FBc`{UDitY!4McflF~@!*OJ1VWzD*GD6pIjAz4>*8Xz;5N8Y+B1laE -*5p@vjnLV_qMb0PwCc%`^dTti;Gix=Q6;Vy28yk}+|GL#Fv}4}B*W#qdruqpd$i{LC;Le#WOLI@n3k5)3A?dIcO|1K@x7{=Nk{dgEHSx90};GqWEO9;k@}rys;%1^| -(vP^3->W^$ReP&N%_H00N-jeu9AmzA)qj)6n$SEr#o1y_e;bG}iWJg9eJh1<=7r8p_Z;lDc?!g`gBj% -e=z_4FT63JW{N|>zXa8b0CX;wm|ob@3w2Vx#-+sf}gd>Ma_QedKqsz{P`;uZv6M~s(AhP-f^aB;tg`c -ZPw2=EfVZKDycOm3p`=r2NB8NGXn;3Tr-C~oz~su -`#+2MPJm#feFP)7*^s#k@bJEQmh-1;dbW|!jZbc8evN^6w@o^iv*e`Yk1pFPP3a$mD+KjIegccZA9%0 -7`4fDAf&V4uWwp#>hr_v%m{sv}vU0$PA|0&`OVNP1;9C3ve)M(IZv#aqJT_y3!brh!tSQkK98NLP-zl -we+NW1N7{FNan9=aRUSu`-6Yeo;UP1RV{qq$Q>piAtSrox(~qV*b`9m;7KCZRJ%3kI7Tv4#wMtm`#kAJuG;&z*@b)8PV&*>3R`HR8n -q6(H~2NavopF>-`Nt%Mc?mq(VPPhok`8)xukK?hYUUR}l;l8d_JD*Uw#cZ>LVE?Rfly43_t8l3p(wNO -6(Ex-fUKn!;#Cncj977LzfT9*SqNT;77#RU$D)sbNm+8@Xc5u?BANCv&u_4eTmo6kJMpRD@tGrX4{{? -rHi&OE~lEvL>9Z;h?|L{T3^G(JFB+HK(`Zs>nct3up*FlJyMddq3nW^RHv3XZtSwufP`$LSyko_#?vRDl_~U6qX(%&fr -mUq}nCINU{EMD55Q;p6Mreo_vlRALHeaUIh4nKDAL~gD6Lyzl{5cH;ke~I%JzC{1V|Ad~E{*d~GN2_O -;ySPUCCa`qnAFw(q}nW?$P)7oFm3>nC5^Aqmsh_W8f0K)U8H1AJ|-y4du!{Tol!mh>0Q{>y*zwLQsSm -1gD8u1-~t|AA&BHlUB8yZrk%VMa^P*@*R+zN%^cGctWu`HV0e_DE66R~2Ve1W5~vOy#BNhNL5|qax{u -3&`WtKKnBTz^?vt%9oYqc+*8R$06FEQyJPNfBp|XtdsIRe%7hv%IZ%kxX}>w@y2!bMR_tyYXCJkO?)e -++mTH#eUpwLLg`snJr+b85WeTaVi-5(DEEV{$aN(O=alTidP`->T1A0J&03OUFe3i7jCl>yd9stj&jXr -^*aWeB2CNoM3)`Yo>o{e*fP5t~Uc1UH{(%FlPGE4fX$C0At}(94!j)sP%LKjAMYL4-8;z{f_~RpFJs@ -F@Ul4gaF2ACk8OKU3%I8#wq`Q3t;U0mGJ*|0OK_XO6|&FsQ|{`{XYv}B=o@m#@3Sq7^m<6#wh~=7^hG -Gw9qiu;C&OJ!z7X7v!3RElWo{hxF1eTD%+?fu^6`~JTMAJ4hlx#!&V+&%7bJO{A1=> -f(%1Nk2wU~Ka^Dy8cgot6$Te!UXiOPt+rIKUYHljB_7fBFF9ux&Rvz?i-5W(OFrZvE2-7)!(c!~w>-t -xXOv*6T{GH#xw#W9w}kU^HxP`2b@=L6ZZF{3sr(*p3s78`CI-j*gvR9Ez*yI70_rkO#Cn4YxYb_|TGD -A7~uK4m1vQI?!0o4>XqMkI1yOg|3sGXRMjeHdq`|*JN`TnTvd=(J%iYJky8+6@I31EI-qT_Cp- -@7gaR_#gWF|;z(mRaip=MIMUco9BFJLjx^$ajuwtI{?fkXBaK7wB;M^EY4oUf>EmZQ46*fZiQ#XT+S*7%%y?F>lbC`{s!*tVh8o*Bowu_*N30 -mh3u-T*`KkB6YO`yGcGYw=0177jJy_$}(jecZPiXH`DM2R7@Ta*RwK=i{t-(W8Nu89Fi4jSw8QZ}j>CTbF2Yti{J9)ZO|thW~A!OIC#$bMiiYH|rYR5p542*7TTn|aon_b -o6pS+$l+e3&sqS~rcDhsP)YTHW_9l@p3Plzqhp*wH5M~1H~-W8;`*KAd=3V2Y5Ps2-(y}>knec2+lwr -qSGt!m>=UFp3(#?pJ;(tdwaUp8u>9p_fAEpzM6?oGq{yMKpf8kOHIxM6dd+wc;0X(BxU4lSM;lkW%S` -)a1?%hu=dhwAeALv_81<)N6F?WFwGZg9i-#zg9$981W@M8W43M)H9g&exPEXaz(Xz0-1WnJ#!bbbDry -Z(;EC+P(iuo;azk{H~+`6RXx^PXT|{mTt%8Bv -7qv`)WtyJ7W{NLOQ&lEsN0V! -Jexz*dGox*uN8VFRa8#&m3mwk>neL+phrSse`_76HfdStEb++3ipcDX7VE@-Ct&V0bbxI8Zd>TyMD7A -JdVM^QkOdF4H{LM`|1+Xc(lP?TDbt@aNn>T13k*Z+TGVL=UPN~9p&5kc?|z}k+O4%%ChkqY2DL~<$A{ -%ZC2M~@Ei@kQFu&x7u3qakO%SQc03Love$j~OZ*rO^*<3qNd7`7Jk}}B`>AT<3jerfYroe$%Hi`R@L7 -AJ@QPn?Z?84jcWXbv2!}`U5v~5(kpwcxQE4nK1y`~z5Un01@>aVCO0>1gg3QE;Iqk1iQ92D`GTo*tdFiVOv}?~RG -@8wYh`rRymL4*jS93KF%(uP6I@Rl!p_+~hIA`9zm5(5)0Ea;h3DO@oeIylwR+Pdw$2}O(LUy)eauDs7 -)3LNeFn)5%&NziE$nw;OBVuMtWP)Z*`~TrJIKI>W9QSs$%*+7D@lb~`V? -SemTimoM8dgIYtSiUVvPm!!sPwd~Jht%DwR>s35hSREbf#-9Y+tid%u-7~Cf#uLF%US_l2=V@L~_h~m -VFAF+D{zSuQOKY!`ly#QTNy%LF2eI@o;F`$Wr(iC`ftOY_<4R<&9(j!cJa8X_zHk}_ZL -d>88Y@*_EvUo>aeu=c{~ag>sIRi_vi6lY-OqY8w~L&b$HEbSy3SNndoC}fAF!l_G_rjq -y)KEqDXBoJSvN{6*H!^>vxYbk$`9SHK3q{q2ksX(&4#6^mv->z>ppXzmj3O<0?b<2uQs1TKn#1+mMWG -ILPjU7Wm -8K;Z4lW+&%QD;Lb;IhhDrmdu?U*gdOMafXtsxQIgCG>h>G=Dink=moG5V1^TkKIjBxWZ?|UY?S(S)DT -PtQHcM}}bME(BI~ESd*E}{_*eO7yAZ=uG@AiPEKAv*&(UYiKKD5c33jGD(DWM^UJcMncsPH8dxNTc1?7=6q --2(R?FACLxK!{gq^tlbS@c$*E;MgY6Ol)ePd=v6`88^Hz=JDuK=6XzKZ?PkrGtjmlArPUhX&}G_5Z!` -B*Xsiw6CnP64iwaE{I}fY3`^Q3KBu(eXO}U2w&p7ELek+^~p2}w!QHR%vMIP+^FD-EN{^7VxqPJgBZT -wYLT+E8u0qIRVf?76U=EJPT?6I1kv>A$Hr}8)14fZ(aa)j-*!5dS=ZR&VV*6B9&1lOR`wXR0{SK4Kg0=KdZw?j&dd$-jrmIo0C+iinb6=^3ofedP{NgXu(NUPmZ|cqcS8a~`SFWjrzxTiKoKW8G&E?+O5sDyD_Z=jP_I=B`(i*ZW4x0u~_pQi -${X{9h;_He;K-uMvC#>3LZP+5hAZg^G}-;ry^ffIi;l&|sG+j{2lmUzEHKfJBaDt4-3XA6C^{AL6@tx -zY9fcv-PHTpRuC!Z5sQ1OzDlQuS1Y(Y|+!C!bso -Wjms%|7#IEAZWAg^>Yf?P0-PGmfpIkxeBYs&Mc4#RnZ-+A|=!bwYvuAv80${`R45#I7OY#g{>Ct;yZ0 -P58ARx_<}NjpdqfBv0>M{QU9(H{E#Vbp00hh65njyUy~25Lz6LrwBlL5unpyI!Z -bo)!ym61yk%RZyamr{z*!$ubFm~HvNI`Tv6O7v)$%i=uMp#NpE$3t!ksVzgD#o@2`Cdms|d=_t(bq`) -h}5RU4fyui-*2;~I^`qhqgVZB%v&crohX~8NeiytnP*M&Fnb>WwnI%fC6m&yyQ>scXP>r_Z*d7*T1 -`B--k#;G=jYVF73>{sIK2XKBGms!)|ihouW_3&bAs}+TZY1xFkbY=JTz#W;!(ztwlV4%U1U9`SCO&hi -oGJn25C?B)++)lN@sI0zWnRUC~bsz3015Z!_eH7a5HEwu(D;;XDQdM*w3EKC^p%xY|R#p={IcyN-R|G -5|wQr`X=wTPW;yRJ7xU -QC0Tye9T4hn#7+W>3^hEEO7R2AQgOT6{FVpK(g+}X0;S*5D5-VKkbE)1UKSVpPwcXwPhYb?d`19>o9U -ak#i6fv-OZb#KNqASZe@r(`%yABs^b@qnZl{(e7s5tviY!Vt@aqF5hpD*0bt>P;T_J*1yY=kcDVvDY> -ao*nzhrZ5W@3x7r-8MMljw||3RWyY!-a`K4vSklO4OdWC;Io6esE(>4HO2R!+ClSME~WgzmrOwW*3&( -FkC`r-F8r+Kr|V54gfj5 -TDtaVE(jjPg^-CGrBzgDvd#}jcSjC`DH?dG`z&*J0KM`0x{1y|YYa9$r5f3@3CH^fa}`kFQJVld9svp -~_?7w_Gi!3zvqDP)VnyTD>|j<99(GYw|Yq;X;RO$=!hPWVW`<~(jFz6iw2w12PFLy~gIF;$P-F!D@X_ -t{zNLyx5ChO2SqxWc8F;>z((Jc5!C( -zZ!mLOKd!bqZoVCk<<`eihX$k<$YR7gAzy+U#4o}1XLe4P;5K@6UPwNt1oCVl`E2urWKV73*-O#aRTH -n{IVdwY~C_MXuPM(}Pg*btPdn7o -j@XeA9H%HMY@O##_zbAP=J(wA*l9ST(T$scEC>;y#Tl$xoFyR+3dk>DRc@e+jog>T6wfcFM2Ay_CzZ! -{v#i+Io#IDOXVcHDPSwvz)IdCzR;yM{qeAtU%w{qqiT|u}3MYwDzlFIk`)mSS#L=i?fBZ7=dZ!Y^|8p -049OFpj^g04RiLy+NGGNXtt_+PF_{MaF7)yY?s`5TZpY<%}-ZwQFoWZs@fDLs{X8+E8Nn>+F_GMwk*s -0mMtxN;%YLp*72uGt-*P5VV87ammq|^plsjA)`dTlUgbC9ZgMOr&vIH&{^}BoMrrK=|GU}znWxR+tUG -6+)A1VG;-78M!_mbldix(*d|5QEoHsni;AGJdfgTO2!EYCMql(u=Ee^p&#XQ_R%(qiZXX`<6aJ`20se -Z{8#&+!h1_}@0W$h#+T{{;3SJcK}` -g=h0Tv+K+8=)(mR)Sn+I)H9}x%i?b3t1 -ZE5m5m{ow)gqmC(EA^9{C+7u#+!PGPJ9pASa2J-!V1%wP}e4)}2y(*J|qxak8FH`0yu`dp!cZIJK(A+kJijzkzD%kLPNd+@p* -yA>(9)p0Cfdd}I=jC~Zk%Afs06X~?=>U4aT@Xss)a6^V4ci1&`E=%4!U?8!;Pn4g*P&>g6@AQ5^Ry$781r4hz5_s+oh_ -%L8})64dOTcnrl1NE0`jrKE;jcx|W>Fv^JqieN&@AhhUooh9_9jO-YZk&m<@V)Ivp{K$t&UMj0sEYCJ -CAzl;Pcd)7wx=w9pHz)IoN!K(-N34!gKH@3a6O~ct*X#{0bm+~-KR=lu$?E&_T0{UVsJx5_?{R~ufk* ->s1_A78HL)hg@6&>ckUItm8tqfPaQ0E7FV$8X@ -mX5C&Z`b>8`wLw+Bze?QF{U+>t2I596Hl0*B4yDy(*TEm{z9>aPv|H=)7Vecd$bPHqPk_YS71~7?wUh -JU*jpr>7Agx;5I3UTU-o0HZ;Tb^&OoLAy|V0T=D7(OyD(&KTW?wsl7K3ho<*0tsU<6g03$I17x|uI^21kdaNXBDgYZj6${(YM57V~+)3*-oB(%d!Fi -2=ujdmx|t_t{KIfU6aNsac5GoC@1&AvCwpDowL9s6lGJA|iL`RsGD!QOz66|<>l8=rc{S!b6Xz7Z8Q% -Lre&axL_v2L2w~Jb$S?r}3O|P!4;rELCrxhK~?eOA*C<7Ft{Qupdzsl(6~CdGUDky**xD -*_Ivc#U<`-5Jno2BhLa$g8*>*|TvA-l7Iok*V2 -S^E5D*v|;n&dvVJI!6;Nk{>+>{0WQQ|fC0r -E{qVhs)QsV%M_DA@^jU5P^aF{?47aVW=C_M*mc -!xL!k8>YobKqM0Wv#tV8d=Ea!9#H#TwAozwX3Z=2x&!xAa6R}B)u&IMm`my$li)B~$gdiz)Uu#>0{tiWkX>R%O -vvs+k$%4R?#voFrRm-@TnnKhsSX**b2k?D9Ww=fg$MQrs7>Lk{KZNZrxi1ceV9zB9lwKO07D$dE`F124uhD>}`+TG?Yb5ZNzdNz7*_QGls&ar>t%Ppb0MUU!g&v;I*nbQDwg*)@s*r?s-i -atn`Ek%RQZ^;_f}&QY3rlfI89wPW?LHW=401tVeN0y@ToTLs5PrLCaBrw&9vwPxgl(aqvUlrQ+(S%3# -+ajg+BE5LL8#2Hn=Hk``gF+K?|ngO%}V<4O%cYpDo$gmaUXQK&u=4e`BQlz9F{4DBp!O@gsiYj@M?E4 -2fW@cOQN~WRBI3A2HwJPe_cmOz$Ffm`f?U%2nE(E$-T4&%8^MGaBDNPj?!km>9_J -)n-qS)VzUYDp}I9M$q22!71g0=;OH^)3gO=NL@nNbEpky_qd|14f=Kni)9 -KTQ{$e+X-?OBCF06B65c -Xv?#lm0kLlEg(7^{8QQs^d2#tBNZY--laL$5b0GU4+{2VwpI;%s4=;2Sp0n==uHhWm**s73RC*402(0 -orJIF;=LGUFc8G9@2$Nam6h!35Ot#C;(M>X?xu$M1<}&jLq_3oDFl#mGi_SiuS -YgO2EMoc$2=tL$FJ;7&L(Tqj?opxuPr#T7SLhuIU%xEh8NlF`4a9&=+8lX2--I~?J)cuNpF=zY2)zJg -9L&c$=N;QCATOz@e||J|WBMDLqFR2JGx??@;n`<`n;cI+K+z==;7?{$^spXj(eyPYimPBpvd3iO9;XK -qTZj>Y!)j=1X>@4d3enQ^6(U21(8AJD+bYaE8MscTg8YTJq>@^mH+BqjA90tslZgTZHA!ElVz<}SHT! -2Kr^8!diIfZk#cGzLn2#39LSWX%=yZ%{bxP&ms>YI(-#-W%SzHKR7kbb~~L9gjUonumc}QSc^K>Q)C= -ux1dPbr3EFwJUJM -*bu0$!Sa`EKcHeZljuE>p9dBx>Nx-+At`yhX+CX)&o82zmYlh^98q(z$D}hi^u#SA#9_vW8s3Ul}P4`lUJP!nh`juVqlkoKw!h~n9={qL#Y5#(JlN9{;ISmZzKh+jp5R&`EqVy=k3J;V8T -(=ODuXC7%J!_W^Ecu>*H9~Q$L100Z)lH~_ctjBSH?q5?S*_NnD2S$-@|#qEDA2?ZIKZ(nD%5KR~$)}PH-e$I>?bIX$MEl(q@k2N$LJbI_$Jo(avbZDq~kcIk`%>pyslE}&vBebmoyy5mQ3 ->FxP-Wp<8_E%H88vZ@j8y9z9F6ExDxS`9A_IAD>;ta8>I@4<7PDSSi2HE-UBn5;Q9Y0@= -y}>AE^!b%HR5k^Tta*;$LkP(lH(1Cmv9^xf~AEVS0ZlaxEk?Pjt3w< -ljCdywvpqZh{td|9PvnwMGd00FMi~$D?C;lL9stZnKTsgn~^vw| -Se}goDj}+~zrM69qO?xlJjzi2<80Du8d|vIDoQi*rhMdEF&IzPLnZ|5k55ptqlr>R>2ipArD7R{f5ppxs;Vb=)E{K0w2F -aAJk8-w|VND@|vvY+|80g4XX)SOZHRR@U!OtBTlE6CSxcb6sERS~?}b9vc8|h1KT^_qmkD2E5K5oF61 -T!Lo=wQg3Z16>}4NpxztCq<8IO10uG`{_cFgF7gt?FF1o;TZl%-XZP{dtM=(t`$2K!v9~%tMW$^$lNvJtW$n(h3j~22n -}OF;PJld%m-Fn~W*K$VDWi5X-U=mUV}{N1#r%S76WO)B)<^G@>bIX)B^Zp)E9m*;D*P8p_!|jOm9F+; -FHPcZ^B5f;ihZHP#X9%L?`AW=dif2^wgq?dK|k)Iy?ou;hWd~5Ao2y=>`8Vl6q5i&BLL%&x!Oikmk`7ihjZoew1W%rhTE5G)gh7eWd+3-av6 -eQ|*?p7V4V07{$Ih+H3xd5k;sbnk}K%xW<**uusL5w8ML3JVv3B7P@CJmlOz>K^_wRa=_jTQbVSX{!-!pIn3Q8;?zKFHbx)aH4twOix -u6>@R#Wb!6^;|7Xy=$Q_TX~TxLd}4**@xJIaOJSy)Uquth&PAi0Lo%Vhq!WGO6WIh_VD*)T0Lz>f)d) -{sy#2y8QfT3?oWSQ6$qcydn9lonGeoAHPxXb#IA3**JoB&3e3p&hZVtMftih-%U>G9t(7)iu|!STzE?7u++o4_3tPj&C@O1A&1P -9oPI4yklIRm41snZb2_gw1OF|CR!NvR7V@}K&$b{^#7Ui(=?`3mi{Ttq>$-1)>BOD9 -9B+3S$mt#`X+1%OpY|?rKI)x8t#;Tx6d#7;AIr^G>e(7E%F=glz+ERKL!4u3qEAZxh>?VOuwKbn -DAk6u~93aeUVGb1L3W=LL3v;3{caiD+$jw1={KDK#nDxTkU5@VuZq~^033Cr&)|}<$JUKmtd4U|?cij -At%%3n{73NLCOoe%sFek9OZ((`~>Km9B(^(%Uw|cQ84E{8b(@ix>BVe;3B$g7+g_l#l4P<|ycSBwy^| -{Pvme4mi1*G=?D*^N2|2tW@=CQ;%YIzSvKd}k55svfu??Y2c0ayK>KuDp$MH@Cq%${K(91xpKyiXVBjq;#2mdD)7`%2z)A#FI}w{kK)mJp0`0HP6 -4W_QjW8UiZqYudRRmjW^$V`<=hP``-H>eE89Zjhi-a`S_E6Y~5C|eaFsSyZ7wfxBtMw%0q{bR2@Bb{K -Ti9eSY$bQ(vC`>g#W+zdiHa+3$b&QL6c=_T10EoUi-!x8E;ZtiRN7`N|(xuU)4^;o|D%-o``e>E-Ryw -w+4t+rERJf5%P%ft|Yqb?w$&)1zmv;E>*ZLi_d$>px)Npzy&%A|i+0F)V8Mi0F}{?i?MHGJ8&{DQ#|g -#{CauW@YD?AGG9JZS&^mEqLgjS@+(Tl-#=e!wVNJUh?0T|Gypo|2X}%V`6o2W5?+Y@#BpN6DB53nmlF -dwCOWu-gP%m|JL3ASEN6#2YEZyhpu3Db22~O%v=U$XI)}NGxKB3%;n9@E1Q`gZ)Sd?nfXJPrsj{DnQ> -VYb?OTEa5-q4NuFz*k&&I6Gk=OT#hQ_mjrP-WO_qtX?>Eh{8nV-JELqH9hM)uP#*|#Ec8)b;o+&ZMY% -@FTxg94*5`c2bT+^7GJRWiynF2cBWHy5|kmx|mG!o}uoBaGo@(c1op>usC|B>en~!rBB0i#r>85G9(iW-e6#rmeNGR5BS5o6-7=TW)bd}d`0Gz_ -?v4Lx95xHYA7S=`nEfDO17icQ!=F|_{OQ1)y2Xb2srZ6WkeSQw~;ruri{LW@`fsJ}Tr<1}oZrPU0Bl9owEAuJyCG#Wm!Q)%t;6s -jIj#rKc>7=lk7z-PhH}Wx-ao=c%Gj!-Hx0$~gY-E|uX6l?>rh;#0y973tZuBvQ@#$<%VRG?!<@jX!GC -i4&93IM*eneK*h+Id3N`+s4O#=Khh%A5~Pyd8Lsi}jwArXp;RumbXX^tstw#iW-CgjX(VxBn1nuEqEC -bLy`(AwtOa)H@+TPC9yZ_8#GuQgjTFb@(^EOQ+BY?^JcrC1yZ7N3&Mj1Vuzh4hg&(nNYl3&JlzT1W@O -V;C|e#cH#prZ75VEg1rXbV;{aavdf}FH>r^$;o1>jhhm3vYF)+n}8`+q=Vrx4EjSq=+46ZyStlPboXp -!W&(V;eiMu`r&v=mH71KC$D+x|)?}vGvgf3mEF&}_xomK3VWk@VWn`LCHP#$Wj@gv0G3A-&*sLkDGv% -5&EgKE!o(2u2CM8>wVg`??5C(G%8qk5w{8>yXshTuPP8NjVWO~Vy2biBZvwA3Nt2T%hv4)EvN^@Zb}lZ@3>_5@$x{@qOwB-QfkcLj#c~fFo?w!c+@bfdQ>6nzc))b4A^=*=EOdlqt@Y90)GXK1sI@7u#y;4m -qiJkq3Y?(H7?0~42)3;BrKAIFE1?En(7;g06qYucKnVB=6<#(?evZ0lHY&}g{$#=_KTb3!?nyU#l&4Z -ekk)|J&_e}n -HsIlP~e_@%-()dTo%gZ!I){n~Il2#aPp?0X@gCx9=}EjMw{iHfLethEl# -s(;aH#NcAwCLUqR{vdO{y=^OjQ$2WILj<1l4t}4yfu_;b&F^`H-Mg6$zT!js!&lJ~^PSW3^vZ`wHM!) -rP1bO;sSfYH}klk3%c*{vblm30?vRLi(icf;8Gmx+=Dkb`?Hm??li|77Xtv(PQ%4D -P$mc=@xESLX&S_lJQnBe!<7(yNe^F6|>@K+LlD}1RQ#2@1JAL3i#d!wDBe9w&~CZ25I3ZE;8 -aI_s8DoLl1{*Xr>Ov;Y;_va!R)BFUA#yas~XZx1!>lfba|YmSfV1piv&PD4w&jq0zj64$vh<$L7pV&C -6KGyw@Ovf*6fq)9qtAB?Td84e;26tU50e3<7ujLq*ecEgxm+;lQOUBHbiapAZn0FJ;bL%;psv=hq#9; -0+bLhe31SD;1)2%&&<*Q=z{FkyhZU!mg!!D0mGowM!LSfZHO=M>pP^WzsI00{s6wmz7+AZJoSb=^iZSrLE#jF5_(J#&$?YnukI9wieN7i92rQ0f9qTqP~EZ0ucE!#H(8y?dG#V*md3VV(L>Po!Pj1vm6eOOP%fZsP8 -DU-;$P7`&S#*GtXafygub1;pxm^BGSilHn%tpIPJP+`;3b4?gYTX%oy)&dTReo90@?pd`Glkw5VAn#3 -+rq*s8f%7S9?}@RJfbnl3f#B!m+OE(d`az5)%2KYltGvwP_E)>$9c{#Cemlk?|NI&pmeQvJqWQ$ddBL -vJn{WO}a;>lJ1JTNlWqWbGdoEM^_W#zNRtWz(Jm*oAo2oE%igvE%F1>P4O;K3tDDqBY7TrILaH+cxNr -pc#)9xa#~@ZXK@J+?5>15qb6!gBUeZ#N>2Zq^oM@0KwtApBTZk?-^%VwUMJ)!_;$+a&_hYuPgRlj&@Q -yMu$Da;;|iDCja|@YSfR~GZ433@2ip$OZomiaPXNRZ^_R69JWXGPG+o_dnpU}qItlgO(f%`eKn`gC0# -hCBakb3v;!mJ&gzxJn<*yz1g|ZI(KpC%gZhzPOgOFYDT^9azfPcRgHrXe!N -jqVIcA{n7pbm8dg}V!Jk5mvvdpAh4wxs>z-iZoN1@RP$6zlieV?Wh4uDi88q?<3)Ej8&7+wO6%I%Rd6 -Dz^$3ksf+S8|4detBLBEw;93>?JnBtPLL-ZBHCG+hYNRvQ$e_PMD;%K+|Grx8{!qN@N&U27OrTI`RWB -c0vy8gRne@ElhdO)WHKz3<7mvQ!2T|zv!ayq0C^c00{x6N68MZDofP3j)(P-{qoTVH>2CEU-BZ<2CRC -(*W8a<_IHWDnSZ$!QSV3n2tvAv_G>UA(wJ%O1*;ViXZC9R8C0;_3i&WwyyQ*3&Qg*+uBa`*%N_yMFn#hR*z6v0_ -3rHfb@h{Gu|=)W<2oP^;1EaV)~iK!x!2s)X>X6EF|rtxu;C&U>eh73&2%!E<8Vv5xQ{|qzmAgpnQHqp -QwK6lZZQp{s5CW!es!?ieYC%=)nY^%uxblJDo9{8kaZ6WJYR`#8#Z1{QxCz)!D_>kgGGzw#}VuvLsqextO)R-6mTzr)OBKwv^0i+ -4D29L3i$scE+5X2W;lCF!)CbAR10W1fWZ7irH$jU@5Vh@~k8T?Re0*JW}go$Ob`EGBX}(F0wW|b&5G7 -J2uA#@%{p-g)=~jIT@I0r`N -)@3Z8_-FLQGA^8D9gGftl!^7i{u6ueFIL3(Jb^IXt;Qq-Rm0sTp$~5b3w~#?}Ui<+F5LkZUz%P0awAb -6E-lMjjKj8!cuKt*bF71xo&GONwOy$a9M2?_?8aV=b>8yjFwu@V=875*1SXUf|i5n~ucB*wWIVn1Bwz -d?jM`k!-}Z81_!&XkuIf;yzF-AdNCoS^JeT*F>Jg6mn``QqUZiojNg%=j6-!1gb{ -M+Ud^$z6O=l;;~jW%eRCBM_pspJXnYC{PZZ-DE4Xh259{N;5v72h0(uEIZzs2oA}m6cpsN;kxKF#i_| -U$GupcVST49bA=0p)@vap{b;0!_kE)jR8u+Jj6bCIyU3AjhwB6w{h{O1dv3j|y$+zW+!k)VV3RpXB1= -Y{!2!OuDo-)q8tqu}qbaQ|Gm2YB$bkkgEcU;d3pC;p|s=56h*+TMS)|34f4-%bC|hX3pLfAe>%{jo01 -ey-vthhOyzKQ~b#AgSZfn{;Ck@C{pC|HYg(aSaGk>#0YA -D;|5^bzfd3;eoqee@`Tiy8rF&YZzxYLlO#+2;(y9ASX-Lwk`%ewI(f{$2UsqoyWbk4h@;bD~u}X70@hTrhw@JrV5xW;7kD%1=I@|C19w4K?14;^bt@gpqqe1z^i|7*dX8q0qX=jC!i$YSplmBJSpHl0 -Y4G&!#|qRe@no10G^0wxL=C19w4o^DNbCXKKU5Kt|kQa~cheMQJCV6}i%0#*pP -Uchnz^94*7Fj>Hv0wxNm7cfS^C;`I-3>8o#V1R&X0hIzaTo(KZSS4V^<)-xC73Q@9mJ66CV7h>b0!9h -gU%+4i)dETlB0d5CQ+nyTflcRi{qWka_{@WwhI12oojlhxP<%4|x*;5%js4 -faCE|BM(3N8UIj9hPHcx}=Vth%)ySKSn^4<0ipZbAsm$!mg0e%VJhk&03co+unb%0j^jP3w!j+cUr1e -gq8q>qBZ$^L|#06$X!eiZ=iCD>O3{3(F@!2{Rb;j2(6hz8&_ylNjO7dyikzca2ULA(IpgD)NEdA0;N)N^Z(u(a;9K|sj_|$^sMmle13U%aS-?*NoZg#|qBaUL6X4d~IO`330vr|!?H1r -s0OLbB|3-jM_a$U1*yCP_r^2AEMjW6G3P2vs?LBIHTHPXg>U82Smog8@z(%<0SoxEH?DV80LG4}- -Z};n2k<4&ib;KmW63;_In1 -ov|R;GR*S4}hP20LR`5eIwv{fCmL$32@SAj!y-69lo`AKYt7%3u1VATL^Gp45x|kLoJw*AAq_sVDGMA -@ZcC;2F?OJ0E$Ww*jEBn>$ofk>)~4n_6-1I#sdF1(Kaq3 -WX>W{UjP;?;`T)VUxP0X{I3VNTi7=M?3WMiAkqQ2B%g=HgK^6WpnQV;a)2)vaR2K7o+{un)&X3#6!-@ -}2-g;YZV5QTkYY|J6yPO+`#l2m9})BcRy-o=8o(zW<@x?3zzZuN9icoRJpLHS4)_UxZi*8okhj{*3^8qsb5{Cy3N_X5ED=Xu#cXkH7t9Qa4r??q^@pnUcR_z8T$fF -m5d4)ij>BLTL573v+}egH?l%4uf4M#%T;xhxXE(XaD(V*q{xUmp111aRYVW&{hDB@R7YxegH24xN$F!cN4&}eZU* -omm}QA?GbwJ=Xe0X2jM%7egJ;GAD;_?bO889CGY_FTL8x#0{$SKbpT&F40=1@>j3sV0{s);$)84zSB-koSNG0bBrI5#Z$jV?KvG0z465r;|{=0S^cGJ$&mie*yOT0_4TG0FM2F^N -;5a@QlJP&`A*DKL2n?D};xIJ;HMWM~Hjg5l0v%aD-C?j(f`I2^`^*0!R3^z!B~fIPOW71de--aqlqV2 -yuTe@`G@Jut)fqz!9z&IKrI*NBFhC5ndKJLch}-$Gw-40{`px|MricX?JDogP@Y;wo_%0K~P!a7A-E3Uz&)hVT=hDb)s5 -!7E#Tj+(OkV%!On!sX8kq=x!Wl|$aA70Oa%rmoo_g}@i%bbKr(LJIM5eokc^BBVzb$JMu8%d58tX)tH -^7wy+$@~-b^YgD#+)be@?DnzfQ!`N23FqyG)Y&&?1&rS>D0$Qsxoe^-xO{sv6-=+5|GdUaX -l)yjILf#&OzXBoi5)l8rdX7^9_`}JL2c?3jA!}L*}e7m5-c|He#59lbb6%X+>RvrN#%Q3l>S6_d2a1{ -5z%ngT*tn2w!CG(3P*q_smqzw?9tyu&AhhLsr*>Lqpeg*S?gwku%wl!R3&gdV~w`O$%WzH=9k%YvZ(L -cK`{3Lf~^cip5nJ7!dk2{mA-7A(*|Ln8R$oJoW?-+g+5Vd- -@9+tNZpLP%Ix7zqy#C!5+&HrQfmrfnj+Q)Ui6I{sj39648_2T-v&qI)X0qq8@uceI2T15vO8W1hW -bhtJM(?6z=mAPb9;Rg0AxdITP%{1$C6m6PBp1GEXDGSnM@r^YQ!@J;B?Scqq_nh@tX#R0{OxalBhNhZ -3|YN;HCelMEqUdYS6KeO`|i8sqmMpfZP_QEd_s=ze3vZ!m6DI@DA~PxH`%{`KRI;h5IK7EC^>QB1UYr -;6#43_ugG~&JdgiI$+zEr%gRMfO%1tl{wMO?WlHMm>d2)_msnZBpUWWV9};1FfMZPABo$tt>%d_>xsH_&n-MmO=Q{5dIwqUjgBdLH -M&y;d?{)7zlqigttQY6%hV)2)_fuABFHIA^g`6{yPX?1L4m@_5CkGSy)g(gCK1k?KD+#T8kI;Ij@O}`!Cxj1&@OMJ^1PBkb>R{YY7eM%B5Pl7W|2u@=4&jeM -`0t&|=zIGJJ^GDPcnyTV1Hv02{A>uH2jN#h_;nEe0|>tr!taIf5a-I%5dM -1zU*`zlA1I6m3K>A*QK0Y&P}l_&z6A<(zLfknn34;VD5-ytl1nQox%?g_e;lQb@LeGM00=)C!cT_qb0 -GXY2wwu>pMmhNLii6M{0<0z1j3(&@U>3il_CZFA$%7I-vh$;hVcC%{GAYfCWLna -=waMAjc|`oh>eRM4dmluwWG&qllr5FkdU4|gu5XjMjNk<)x|=1+Ju)TKj*K<>_X4DP7`CJheyN&bEvI*cF1JcK -b1Jv10TR)?-ybocAfb-ZBB*bifX@JXY!2@~SuI9MBjNO8Srl@rC5=Q6BK;Ws!O;nj#0hcn2}}qUg -Pi`rf0Ax+46+apG&+wR+o3}T@ZfMyx}!}}%%C`kU;?;z8#|V<5ae)=Rk^F8+J(o(>k=T9$988zbR8>- -$LJAS?GRU$d-&+2gro#RoZ!-NQwWsMML`uwL?`wmagLOL3poRPkcIfMPMh}dXDQ)ga&fW8h2q9JbRh-S`C^dV^s+7Zp1Nq -o~^LNjMdE0#2<@<&&LB2n?L(dU-5@U^JR<&)9P^tqesDY8B{dGchYk1RHgbLbwg<=sh2GUCW8ODy?tX -&ia?*~MhoKF}$kozs6#$@DW^XUGHi^wUq1=bn3xtXZ>$y!hgaWZk-TOjr2egAbTKxMj;0rYn3}@fvv! -^o@5xSJ<^{7dd?RFw+grp81BHIdg`bJ$sha*4C19=gyJeem&20gNqk0l55wlk(HMyc@NA-|8Qz&2lar -CZWwfQP%q2pKu5O#I=aW8qkEP3(htdCx|K|#`^bazI9W+gllSQN(0|uCg@+C?5k~Z8=xodTL-;!&d<= -w-hw%46_y-~UqY!=#gnu8x?}zY>{oG%A%3pfQ|5ZIjzURAh=gvJ42C|F5I|qae8Z@XMVw%pK13LHU*I -nJNT{kFafjvV*Li&UZ@>Q$)wgq$N9=-bX0l&WL?t{Vxg^{41{Xz$I^%~?09@@2S+byU^Na!GMuh4G7L -Zb=oH%O`U3576y+qY}mIiOR&LEcKGm#4eCPhXX)vs;_a{knQ9z0hKiy1T!J!lUOP{B`woNBSKDTsnZs -yO)=zXBgD49wA*^gTNJnbOkfS9~R`-r&rjZL1B2a7R28#EG#%ItVbA=F9?3Pr>{p3W+Y2gxGqKb0RUI -h`sNFTlOObt8~eNS`5`>tp3J;xZraY?#!o(i(8lR=7qR{)e*esbH}Z>H{{6dm?~aLzA6^;P+tbq%S{C --)C|(DTSI9$4!Hx~cDgLkexeB^Ix9K0#6}v|){+btFcwq+gJ0G7vfBuJGe);7`=zGrm{PWM>1N`Q~g$ -w6lTzdBO>C^A+-MiPWP$pwQ2LB}q~Z$olQEW5=G~zJ2?WF=NKy&IZgU -JTlUW@FN|_3+Ahr_z;(mu;5XVuIM)_D=VU*q2UU_X7Kj;4}|nS0(CGFX$%`StT*xpd@=qH95_HXZ{AF -SKe}ntCdT*o-+xbk_~8dyRaHfg9zDwZVHnU6(EcohdEveH-dnVBNIYPhq;tR$n

h@gZeoFmNV%R~`au&PHOBcs0OVyd~@32wdW?7JP%p&bX_daSo-)!!#rVrJ1O}ZzqcZ`k8={tGpr@&s^-Pg2-?S?T|g;SvI>ob2{e!n{%(Nw9fv({g!k7p+m>ohkBe5p7G^CuUp4 -oiaM?*N&c7{exRtW0ZgOYELNRsV!COOx4w_+PFZZl@&uP; -(RBIiFzkDRsvuk(&o@%5zTp1g$tZjkY>Iv4)*Q+q4o(COp_U05ffDa8yjwlRR2*M`l_mD0YJ4Al%5{Bz>spD)qRurRIqzS9>$|+|e$Lw# -X!^OVB}X~*s2_3OCs4Kb$EbK8A&IVYOFt_0sq<$F{e`MHM(D_>pAY?58D`j0*uV5@u9{r9}N5A78{%?(2Zq` -MOH*B7v(|c5!mVAk!q1mwGnCbYrCFg{O^yvi2)dtNDP_`8c=)r78Krd#ujw?>k>5HlVcxzm7I*VFDb{ -3_p32)-QRJeQ8gpf_AUtANY`TN6P7gcO2`^fGiRsd=YrZXRQuI$4q8S@4bC{Vo`Q=qDJaDH`%Ylv4!M -scM@jjzM|j&kCU&V4T`FjJ@?R9g*O<*M>QL+Rg`nDACP|FIIhomo|KXM1MvXV@||uwvZKOniAPRMQkM -tY=~x9^>Ra!-u-D4}9X?~sJBV~K`w?_?x6y7a --aPh#{tg*01Q@&&6+tat?4I!yaL;cBlt64d6A{_WoZa;Zjc6}^9 -gAPbv_^s;m!(S@N!rC0 -=C#u7gn5ND*NXA7G}psylV-?}GfSFrErN4~Gz+B{Nzx1z8BVh_L!pK!%D$N^UUM0;NVJ? -+s^kB{+X~uzFXO1-Ez^gMwnvcOeMVi;aY?WrL2RKJba}~_t((Ht}w=~zn93sv2F#Ah078;#Qn)NXMk} -UZQvs0QwVE$N|#RtI0q&XDkz0!=^qn%r&ISS?%r5V>+JJ(4wPSZHoNHeatb}p0V=`b&l<`kIor8x`cb -ZN%nH|KO|E`m8hnu}qMk>+JEM@sW5m_wy`EzDh{c^%Aw(!2p?FKONgbNwx{EMWfj7V%l3_|6L>pUj53 --r5=+Frtv!esAY~5d$~L1`L)io1{x1x%81PPf3^Q(!1v@MW+x3(pO0#+4>fKz2 -uBe}dUU1Ft6D7hS#E<>bCIJxYWF5RU|6uE4bE&;28dkNOP6Ztl0`1BNS61u$;akX@Oe5R`1dnT!1tJ`ZdYd|VV6I~T0WCryVY905a0K1zX -eMl`>f>_y<=ud1W$DQXmQk+Ph~Vb8DMt26X)1v;%~-8LAx8Tw9xpm78fSsl-zE9FnUkLbln0E$4Rpzq -sVc_Qg+JjV|D1vjufvmkBKf{+$PuggvoIjH;R;ep_lio?dHL2yJ5!YREJROsKDa3)=JINhO){{`vkFjW@kNY#2gXGooHtA(+S -lr0l%V~VdPO@%rs=5Q78vQqmAs*;&qtU-75OXbT;^n$yQ*Lt|Jn-#~b9xkKl*5vbU0b0H{D`=im -L@-#l8a@0e2Y>OppFY<337;)Ja_<=F3lV&uB%-#0(siKogdvqh*V5yaCnm(umzB)w?@3}TsBn6Y&l>-WTJhJv2w9$zGP4?4_vD67C+(k8|7{80RPqiF16J+_a9xppJz%sbe?Xtkp5*uxH^Ec6B -1|WI9(?XKzK-#gXrIW@bLIpK3_w6G8&1qM(l0I-`zMsX77$k&9-#3V(4zbk)4+R4;nF>cxuco^KoL#X|yfXfmcdxggTM9)g+{aExAACikY<2WKT;wyMYTNv1uRF#mW!f< -r>hc9avKlli(L_FLsPVK68cPxt8wC94);?iW1%P>$BOLoSP}X-j~+o(PRqqy`jE}Dq&1I|_Xy4ncCN^ -6nCge*ij|CXt7B@6m@AYll_!i$m@F8|a1@$`>rvY{6K7TC#zUn*TQph$VtNksCO(*R56{(3_&CGJi1E -Fn=?LGY@+3u^ZKRaKaS?cb=h-=&S0wi&gzlb$PdgUY8%i^poFk%I$(OYfXPyptiZu|*!cZD4g1Jr;Re -R$&OhzcRqt|)SY$R0b>k)@qX*Lq29Znb5O5uJA9;}!0(ynA-C{Y|CuD|%m_GGzd&0{?Hz7TBh++ir|E -Zi@l-H-U?963j=fe-=vb0qPG()AY`W41;p_xv_W9*K1h)U>mT>6`Fy1kAV%{5gBk?(cj^oP7z1moA)U -j+oii^pVlkSz>Hhse|m*9R(TxGHfx61@)*#>**od!kXFfxz+Ke)$yTo6io{qlS8Q6sN22N-qC5xajkM -)7h;qr^Dxk^+Z|&IaNdyPy1ct8g4gZV**ccrsju4|Xebq8hGUptT(p*ZmQN0G#Du5$W4&d& -w1d)Y0tNNAZupD{iNnR`RBiP^caSIk?Dey-F@#v~`0%4r<{mf^S -wx7N@j1w-!`gzwx1uCt12b`{c^9Gj9;~NCDQj_v-|CzsvXB1FP__d{It*L(x)y0#Tn`M7OWPIaIO#Y? -W1X@?i~MlWB=q*;3<9>1umP7sJ)K$haL@qtf!T2o%0hnbz}ThN5?nf84m+OUcoQl)J1^IbTi(9)$ldl -EtbA8#rEQw^%q|?2uz$6xLETGyMf=v7OTOTS%q8dQ4fEcjP9fgWo`%W0?K|VPYwBSVJWp6lYPnFG8nH -XBY>(|gjltTP20$nIo`^~);apXE!q%^}&elsQgy{^0Fv@Hov!672mDbrE6hn*L4E{o^Xit#PK6BM_-A -FHA`_)n-E4kUfSE@qo-O=_Lq`$w?*!rWDlI~oIgjZ1@58E|Fk2RV?+-!B2XsB=Y)!P%q&F^Fkw2vlZ2 -#g{2K~Ufd1siWe52&V(^bsw7XH8}7_s~dMQv$2&b@&Ha4F|1;L(~Dv+*@4F0Md3@NDYMmTD!~QB0{Ld -ra|4u^;Bl@TA6*`q@a$w71Ta~TZvQOP+)U|P+nAQsn$e&uDg4AG>%U#o0X=^r(=LSH*oBmZ! -$Hy^?Y;uy0WQhweZ8!+BWGeyg9)$VW$xII%gY&aQt_M)v751!DDX$pmfdiF}8QYF(oLMO)j;$wyA-38 -zOyyr0Qvy=k!KBeOS%63BW5zcN-RSUAvNA7$)1&Zyc@=^Eg@+tWzIw9(s#Hkg{)@cN*#KiyLmOHRqCbO)m&8PJqe9sx -nmn~Xi1beW0i(AyBxcO66!`#!N6gsnj0FZB1h+=$iM7L?&7tQ=jBy_SvN@7P -obP8hQ#K_F!cIA16eiwlRT?0Oc*V%Y>{7On-%&T^TJWmAqB%t&tm{gAIwgb!f80#2b+Ca}r$a}T5WGIE -cjl&@{Um*k9MCo+==)m)fKgl9O5pdVZYQWz6qWuuUDSUy1`y?ONCPSgU=M3G|xnZTuV;g%`VoFl?!5k --Y$N~QmWB9&Rhzxm{nPH7a7Z!VinwpgS3S8q$J)w(v=%c-ia@6)un5eTf@d`Usa!|I>tjhRV}Ox -!Fbf@HbMvc_LT%<ic69!r90|*+;<6mDWaH&r)2y95=uV;OU;GmfkggvOMPrN-tmUn#*tapU4kVoBk*B8| -KO{Uz8ZqolD^hD3)EM(OgZ^>SjZVT6&Rx0{>)@Y6dG3m=9KxC2c4}{33wp!ZTDf=pA4^eibvUgPWV@_%Br0glm-dRiUYiaMI<*)4BlzqCgch~a!O4^NDe#+iM*~3psdy -&QuWuLF*_ocMoq2Z_O7nJ>=vU6qMpzMjF?iYx03C0^JiyK5Ar?q;qER23eD(S`}$^yr#KWT(!K1NI$7jY9n3z`p+XD<0ZdP*Y8rlOMh0XF_-(5 -HuGy7Vu{;NcZEOq_)Fb>9#{C&;u`;_+5f-bxwK5P{<|eW*YLa2r;!Bc8h##E_-l}W|LX7e=*O=;{oHN -tepgJgqPwyEO6hH&yQvHAiD-C=mnz;h->Gj -V%``m`-|MtR*e}Cy88()6q)lIK$-m-Pu_SfI|=Z>9~yLRu{yKn!2gNNRH>+su0jvhOH;+=Qjd;f!z|N -8Kwk3aeJv#QU(`0~{0ufBFxe^c}Aci;a|`{PeP|MF|ynfkNm&R_WLB4;`ePcQFQKKjVbm>hYuMV5jkx5HBlo*MvodjW^7FAthDru%-LDlx89aB -CpRzu_JTs2eeS%X`FGqrW9BW%DJ}coxnSX<#sAav|4--tU*^AQT&&qL{#t8X{B;S5*H1{AIBD{fsW(i -Ue&bD&|1JCfui!uSd;Hw$LsznUx!E6RVy_^(-p#(UiT$1?_Ek;ntDD&GZDPN#iG7ntWBY4O?AT_+7`K -vMe>Zn4{YKIV2xFi^u~I0XboINMVU0-sj4qe?>c@opVBtPkxzHGz-0+wb#A6n-GP%x%8JG54PouE8&A -3lcYet&uWPJ;ptxNz6R#V$O~yUd;FAyV8kQ^FrndpD$MTa+Ez$j62h)Z3Oh@zSv8DDWja{JX ->gVFX!vXRYItgRY4~V($o%HJ@X+$t^40P|I;mpCpg_zY8}Jw}uy1g~N)kd9HVHRP%z$#mijup}6bkL` -mMG?Y4Iw5AJl*Z7f-ae_mY`JXsAJ$1#97R8^Bw2%(sBMzIKYO@!lr;2pO7i23F@g>V%Q0TG|zcSKuGu#}e*rhEoFIPBDwk -w!wLpq3$I0%O@@E7r}&CvD$re)`*=gpgJOSNT_Ke(-1kTU>5tUcnsUF-_%1{t2mtHdC4{d -u~QjUcNowWwBVi@eB*6_5l%$QAyK%^z54O@M%dtG~6_b=1QNEl|m0qQ1grE(NhTK!}NMRrtEs=qqS+Rii__ -mUQ$dMc-~cf*V5wl-rkf$Sy>r1)ZyX9NyW=3bZEb*q-n(zpE5~G!pUo6Xz{XQip40KtgI}(-lr%(e_n -q6CF%dWySv{RZipS2>*>WlO>e@-PK6sWbWnPZYPcH8X-f8-j6A!|q~to)mYQR<6cpqY7_)PY390tnw5 -$xweP=2E?3|2rqb<*vm!FYq%qYr8v)fW<=2O6Qii6rif-4GAJ9oA*Qy_AQe_@8r=H|@`ZRtctx;;N9J57ereB?v^M10Eu$Umc? -pk@CCI?{*`TZS=T)-I#H5NP!4Q`oNw-)3jnh;7+6V_IH%hA}Twiy_k+B-S7s`Ws78K2=B=Q*xBz&6$% -*CgLixAoBVRqH^d5Q(;!dtWSs(6gEDfLyE -f=)_nbdRM(I!w(?y7&p7l;KdA)t(ak`Uw%**U)Ckvz`8`XVOgdZl?)76GZ3NR>vyPE^)^ -SqsF)jTUdos3<-XkjgAc32Yz)cI2-G|yDdYxLB_N`d^bUo$kgM3}#D*7_^Xy1l#I$tm5OLP*x`OT$!C -pAxH{Tjlz4)A6HksVlou03l-eY_S9pGE7bfA%;cq0Zlf`Rjt1&gjpK=|RjmC6F13f5w6?wVkR$j$KvR -K3~_xU-ESd@imgnlNxv%WFX!XFAT&B!=wg$o*ly2{-HEJJ1X(%IH)!2n!cBHjoib!>UOX;mHzpDN%+W --u_|xyo_LT>{GZaActPe#fnsE$^YLIlx<^Est~XfEf^GDs`>;l3mzK}d(fcc%8C^Uw~ -pl4^siJXYMm*baJ6D7tlB{8$%T2+3;)lGm$P7hPK><4{_V6H15VLzSv;imT4u%-GJG-O@q5AFArT&7X -Kcd?0*@{#uRiD7T(78Ox-%M#Zb1!PsK5cUH0=6x50ZQM{m`jr05L7MhPIGd5g>({=S{U5VFSiPv3;*I -kL%U59q8>TrzsE$W#c)iYmF&t!X`7cwWyh{}fAk&aV*2**~CjmnnlW+qMGKFn^Yo4VeH@-AGo@5-#D@xh&peMj%BTH7$V -HS1=3jde@k#JWYk%DU+`vOv`~7DPD;+fdpSOlRG7H?hV&h@|D9$K~ -a3^#jy@JkTJ29f$j|K9RS3_R(c}HkY2U^X1cf?{S(lJ>iyK4?Sx;#lYH9U2Iz*THq9<6Ry?Oy;M(aR8 -P|bsIK{=zRJF@fXY$SS$at>Lx_Jwuc)(<=4XlKN1LVjn3vYJ(@VT+PrO1uC*+yzuD)B85tR+K;T_XmG -F+w6vi%jtKBBi;t5ZVm+E7@MJ;Ie_uFAbm{_9oxw}~;YV={a(*?YW3vU}|Eb@Cq+=I7Vk>ZGVc4S2Rt -M{7kL_4Z)ikvgVp>qR^cU~TX9OA_s5TS}*m2WvCbH@xG(084jUTjFsLwU>dcU2L0seQWhqt&VwBdMKV -*UHJx4zJbhe!Y`lV4ePGj(hgL9?IPL~G>sSTif5pBZJ6N|!Z(=uLP{g}l{WbSDgH^i);iW2?RHzpf-m -7oaHy08U6b}gs|QV?plPX=muiy=2*;sb%&0489rHs(Jqf3>@7Ra>1Y0EG9Kky1!kO0RL!p4KyFcr03u -4{V14)Jqtb41mLxbBFch|We_pQ)fn_-KUQ@#Y6@l9ikye4P3uk*#{&5~<>EK4`OAR{9odsYF~GdHkU -v96&l8q(-oq-8HCpvkC~zTSIUYPM~BUcqFV1m|R^l;%*#+>8Q>9h;Y1n3t0gYb(gH(Bzfs;8o02SeQL -KSEVo|uK@w}6>momlSVL9U5;>GqtA@!2^U*Qd@QGT3vT6R{%HEG5~ViS`^@_PF`Bj4653veP -qSvr-G#{fZ)2I2zI3hO{T!(yhcFtU>8L)Ox2_2xBb4L#>;d($fnBHe);!@>0_kmnem3@Y9V3% -}3eMj8<nC!EBNm~Jx%#`{0h`FMPG?>_}GE8cL&7KcdPGd*Bv=yF)68OSvYHpUuKHXB3mXQx`Q&Avu -_A2Oa(c8l_uF#w@%RYN{MnMuW5F*gmYmzPJhHT0*HD_w>yzJa`l3KVWhBMK;z4ZZfK+i2cMY;6rRdwvE`GGdV*ALgz1o1s5!*)r6CU=P-F5jdZpHoO|y&*Nnp22R0ZL(&&5jIg&#o(Kpq`l=xYr^lO(h8!u9vlpzZ^6)`Ni=@T+#DNX -cf*t0=6#s+&P#3m97f^EdL2q_UN-)Zdshetb)IrOQ|20j$V*xNIWComgR{`M&I;cODZ5G8W0gHg#hIksCo4EjrGKN!J4d7X70yc(T&ny_ -lz*v82RetbUH-VTKdJCpukw3Nxo=VU9Z~)tDE|;2$qS8V?tE`r4wrlW>hOOw{=Yl@KN|o4*9VHG-0f@ -B_pN^w{J;ME-uYXPCXc6jwD{|OkbHRRNA>-LdWtXowCTU}Xk(YyChpRs}aHxKY6u72KfUdIi@h_^5(w6rzmJuFh -;>}1&s=ZDA-;>y@Iu872OK9_G;XwoK)_|6g;S4rGi@(+^FCN1=lLLOu-@rQxvo+7^R?5!4L%l71S%p6 -s)gTcq`~suu8#`3LaDNpn{bOZd7osg3A;vs&AZrmV(n2v?>^`pix1+hR+!ZPbv7Zf(I2`r{FRL|GV0d -l>Uw99sk?>f0q{#&Bxc;pYUH)x&A6)zREBB>dWW**FJ$QKGNUV;`85z;=lE2`ShRkZ~64#|192r<@5i -$3^aNEkBh{*fogrm!%Iv@*3-x*W$FB-J(T~mpGo-SGZHR&qDp*H8ndWazzr0B*V7+9ZEPX^B^M=(QSh -}Z3~y3!Glf6;)TyUBvC~gEpSro_^cOuTOcQB>I`P9>J~XoA4{!Z&=%wM`Ir%A#0oag5GUhQgE~-@Uq8 -d-HSL3}w>ebrk+MyD@8~fM5#p?M*rF$~=&p{2>rhUOhHC|=cdADkT<$vs5+(QZ8NADYCUPEvzy)phe0sj_EV;FLOk>Ie7G!7#7D1zfU$}lMe7vm#q4;?EeII|ODUSv)o -_$s|8eRS+yf&rbSIgnsqWsV_OqRgcPw{*stD9V@MkMxFm>ew#?pY9^f>j_3c7dC~-A$V^$8FvlA5Z`x6|k%r6owAA&YP$5s&hlB!cBnZG4?O(cy;kuSmQNSRI!!H?+Gd+FH61 -kXiE+RejgJU>i^0W4K!z&D4@r% -02b?g5{E#of<71Sp66`Qm$q&JvF+>aTq&LCn7@7Vkg0>i$Cg6+84ETjI=bIRNncf)`w~F9sGszN}V+f -X*6+a1nsLUS|oNJMBiwNE_o@9)|rx4t5Ey*yM0ry`k%jh7%sc}@kWS&m&Y@DiJ@l=lVo+S4R1g}bv>4 -Xr>NM!66GG`Ioe!Z+0ZxH-!D#>;$!js_n8)&Xd<_iRSPLsIxCiucM8U96ri>ND{LSc#tUUjo{424!fIYZ(G_~J~GPYSb@pzRjLLxR^NlRS`n6v4b?89txj%gGXlO#}}sGvK4CQhoq~XUTLz -WIRt -s3knD)GTR6~TOi8__ZI9ZlzCMWoNiO)PVj4+q!H(AyzNT130jpoh2WYZYI}jhe3G9#B|l>bK6s~$yOv -nIFh;!?_w+>;0nDy2G4=5T`3OC=6~tCe{p+{6$FnzEqU@T!OrWY -xeLL`>t#Aq2tKo3;<9C(4na^)-?`G6Qz -sOmlrQ8wozLS@y*n2?lMEIJ77D^%f}uPJ+eTXl_Yn!0WdYugIK4aPfAAj1PX3Xhax-74)uvJHe#4h%Pdx5bSrDcuVFOg1^$ck<9f3Bi?3g6PY6k-te}h5#K1_TZ2cb- -2gnI%z!wjznnuFtN8%j6I@day!K>oR1int|ND>b8f} -Zgdk;C41Xs<>?=_qTsF=^2x9LjT-P)mo%lk_+Kjtcb8E&OPmvo*?(WN4a9`Vk`-T?Wx3=JZum$&%Ex0 -?IamP9(E8>{UB-;@ -fJ?Zr!P4H@W3UWzLLDe7-wcT`x9@*ge~`(KzhZ@~ft_<dO+DPNdFvizW_U ->e}Vk*P?*IseQD1*Bf=j(e00BbI3v>k4Eakt<CTy_df8=OEsT$P4U$jbQHw+02c76Xg?M%T*#iZk -7Y01F`B))D4Lbbwy+hq#j-VdCiX}{410aaNcQ*QIQH<8S!~PNe766d>)5fUZ)2f5IJ(;Sno_R);@5YTA*=w)8Cfc$$-gtw(vu7h)`Xgtr)pE9P-#&Ke&>{Br+i$bu$B(mj-+h;T_~D1_lTS -WjKb$_v-ua2M&p-cM$VGK^HT&gBBUp!hdZ{Mi)0hzGId6#r3*{}RQor1&Q&{wcTke -JOqn#lMN-+bI4@ivK*t-%at4Q~Z+@|5J+pCB?6%_&-qmI=A?P`_dSV=CJuRuUkd)m5nPIJNi8JX*4$E -CxRG1IfU^~CNh5NcE-P1&3Nt0jMurvZ%^@iQv7g=PxI@IH2*wGY1PskiqEI`%PIb26#pL-e;36+LGe$ -!#izkXk{9Nd6u&jby%e9?pIREkaARA>$58wk6#ov2{~*QRO!41!i_hAyB-VlIY!9}Ig;BK~&W@7g*Rn -XqgKlDcNIv5e?_&J+M;TxJ3ga&yWc>JNZt;y2e>lZYp!l;Wei6lAN%7ZH{8uUd4vK$(;!~chKc@JnDS -oXh{?(Mib(BIjrEoW;@C>D}ms0qgQm75$?581|{W6iWy4yKBvzoKBFLQSOICsVGOz{U&{IL{&62(uW_ -;V@#GK&8Y#ebIKZ=(3SDgIH4|1rg{af`2490;cPohg0~ir<&wUrq7HQ2gl>|8|PMg5p0*@pn@E58dK7 -ev;+m?i3q4&NR+s7UqNjp?!My?AiBPm#=ADd|aH_93MM&tjU}_FtlI4KE1EKwwIQIIgY&PFOCdmb8=X -J1i1EEqwnQyNj=g&t3CTED`pLoV+qJuHv< -MI;0`xEqy(i1f!Ln&T~r=EU*cIt8l$@b4cwFoDVRV?`Dk*OEsefa0G>e@Jv9u{hBZpD2hB -IcWSR{FBW?Vt_(CrO|2p_;&5uQ2>{J^6*y4F@r6X!S&?dZTxtFLKl~Rtijt5)h65$Z%!mGkMAys=sI4 -B$Jmi3(@;-?clg-k#N@;{i^9^S@hC1fa$M|SFP-o8$^*QLGn-ug$s+~_wr-`<1z8D0pqLmxmISH6-*n -Be@QBu)`nGZ889R<-IWjUfw!uF+d7NoNbQ>S<;be?WM(T0qhWwLb5oAJifQL^E{A0(GxW=;vfAEI{EX -FUW&4lFG#IeyNYmB+4FCS}Q(1=76@iETL8|j;cH@ROE5gQ%X*jvgErEexdjI#_I*~Hr|ePT_VX=D>`7 -T@?uY~sy%<>Gon@z^RFNL2ncf~irLsE9-;BZMj9*Z-Mg0^IdVjd4NiUW8T;akFW9M5r&vu*4g2=nZ`n^j{vgH%zyA6w`|Y>i*y=N!y-fDw=iS -=b!9A#>yM{VCs+X(MsH2-t9o;?D(LKw8_$D@l?_d-8L3TTThppxxvzPg4>c4B<;!}s1L^Jw)>TFkCP4 -S0Q{1}QKPw{W2__tI1yD9!-6#o^9e~98Y^mG3ir~GG}@_%)lqUm++)Txu$3hyWsKX(f0GkEY|-1*qa* -r`)Uryc{k2exU`jpVFj&(J=7`t=zc6lmxlK=w{OdiCo^VS@s@4-Oj~#=7(z5IVT4@8BQ`&?X?DTbCYv -LI?Z#hIUg9Mq}uJ!Fs)aD8=dDwoO2%kPZU|`|0(*t-Zbd`x^|Myjpb{(A7`x3x~mh-GhB}K0OEH>Dt; -G>0cG%(T;3>y?k4@4x{?jqfckgF62v5x{{sp59`vtU$3yigTtU1iSi#17S=l~tVfujuM0gmqtT;>-1% -Q@U~Ci?;XKvb(z2k=EeyirV0U-9K7{X^Q$!HsW!u>+c(fzvt=wL3mFs`U^Jk7&0bd;X4({H)JD7?WD# -7};ZrvI?ySQ2s>c62foLUNTY+U2`U-fvZbp3xXpnAYpbdL~!;}cIjF^&42*MIoohp)c>{`;?~@A=}p@ -4h=t@Uvfj`Q-SsT3I-S)->*pscqxjQ!3VFF+;IF-)L3>dq+6(+OIyAHPHl;;-31`ITXK5aoutgE()!^_IXNWk~g(qZ}??)J_@6hwS -Ic{Q~@{4iEh!_}A6daq5PI{6|Ga^@SYc1^#cp{WgF7_18I-Ij1qRsKekt%Hz-yAlf -n!d&;~%>P)|@sz-{yQoM(K<`Pd_zM;_vQ@IKDNc5yzalJiM#a{jl|oc~%^_YT#SF29Sp8~!_X>{#8qc -kf{|hF?kTCCWq40DQr7@D=o+EPy-ADEm)8{Zza#gXiEk@P!OOt?45M;biF$^%r8znv> -n+I__z!>d3y6ny#{IeB6xC7C@CoN}M1zHB*!Ug4lIKTyA8rZ%vuDq8>Sr3gph0^zI+`n!=IA(o{yaav -?J@q$f_VP$?PK`^c`*Wso4(?F>X)2Ptl~ToH2h1|XOfvwT75nw>oeMudZBh@Sq5D?Zw$ihtIsAL}?CFw!>f_PRUs4{ZzvvINvOs-+U84c`Q@h72A57;j%pb*{oj -004MKnA{G~h|4_Hzc&FrDz2@`a>9tIwc8tIueYh8!Ti@8P^ZXdwO@w^98+D3UqS9RAea3;CzIwi4qZ) -H#g~jTX>={-7n<0{& -CWXE(k~z~9f7CPdFEq|_y`VvRo6^x-9nomPvt{uJ{>p-p{G~gh`SV3Y!`#vQ*V=FR2j?UW$wb4=UlR> -(^*LVEXVW{fO^SM3_Rm_I)Q@QB^?I}IlE9zF_bY}C8`hJ?D5bz3?IIv#1~g#IqtOC4^tIZ!41VZuF=o -KCy?6xQyl4b}nP~Vs(XfGNc;lfw{>u;5SJc>46P{wnhJC-j_H*<&mC -jRLM#{>=TV~jy+jL{PQ)ZPpECwx`{Z{P(8oPam#1Mt?$1Z}+g_!#{!XoURlSvH3MlW5pVG;CT(G*DeY -eFhCrDH5zp;d9pt|rX(eMvdpV1~gX&=KMD;UGq=8xrTa%1>CIVSEP8tx(*mJ$sMi3U7P#~8 -P~(|r2_{7Dvs{F7Xlf|k4Px{JT~;){ZwE1^T91#z9nU*)??ui=$M!|OzYsLwWLF4#^>hdz6o4W -A5jMuEm|aKaF?&&D-%G}sit$R=AIAszT_HXpgvcq`rPEX?Dz-xqwK9#E6RaC|NQe}?1iyRd3iaXJ9n; -&hRe}$xiZ0nHfhtME2z&zLo@A6OHW7eY1OJ#yQuBt{rdIe$;rw5nP;Bi=$8u%3%Si^<11FI5cT?#Pd* -Xt4#q;w(E_~DH=wP;SP0`$%m?tGJ|BJ7&M%y!`Nq?8UG-TTV?3nl^D3$fzlZ-DZ@gikvCb3?|A7Ms4$ -sWY%uP>Euc3BSl*3a`J;f(Xn7}7bp3EyMD)<8rJiyniStIbl{2us%2J{8!Cp0=RhXD;}Pa%is3z5fOh -nb&v4*1vcH`mW?7-P(pV+_=1v`G&aB?A55oqvrQHL5%@F>wjxhh%*<&HIPF_S$PNQXS^x$BT-JIMoRb -`*qh{C&mc-_U#k$0NjBq%1Dzdtvo;X@37Z(@v8*aFP_v+P)_wV1I)7VpN85SG@kPcI{eTT3Y(^>eZ|H(xpp(z3HZ#cur1^;5*GLg)D&v)Ck*ho!VP02lpSbk<{|RWehMD_(e)ohrnKR^GoJMX;nBJi9xZJKydr!^V|3>d)Y& -6_960eyzHwxiJje1X5V=8L%jAnF6^2U?4f0Csqmn>QGF6wD~d^}&UV1XzH -&;b0$jT^_OPoFN_Q3jwvdqIOX@5NjU<7>!0@C1Ymfi`#9!k7x-sV%v;ckkZAH*MN<59Sbm27kyVUdR& -Go8bn$u;y&H+eQ72jg93oF)@75ph2P>;Ey;>>1a;2w7Q`|$PwBD$Q9aSl%2M|K{#Q%?MnAA1pY+#is8 -eD_aq*cqCWrgpZ^pzfInC_r1~LfNKH-U2?+^8w$`s-FYpJi!E=~_H|hb}AGl*|3i-iU8}$Hn0CfWCq7 -5e8FH$soFNr?zAOHA=hzDL1pPbaT&7?kZ0pY%z-0o&_-{VU6Z^ZZw;~%vDR3BHuj`{`&Tu|Pq -vm~ctEHP)!9MQH?T^Icu+8W5WCWoj8sFx@c$O*~-ZL<4#2xg>UJg}=M3y34S -;Yy&sY1sOtJxclzAIkj1$pLTzMoAx3O+8MM(cpyKR6X6B!pzDbzp1>O8Iu8$zKZ?5xe{K9v{4NCzTD# -aB9pE?GAnLotJOMI=zP6b)eSts9MjJz5Uk7pzSpv^dht}dS{~zajBmCXvA8ka_KDH?>fLLRnF=GaQ@W -BU#e7o~qdl3$@1X+h2eE@LR_D5)3``CX0cY(kA{FnNkm5@vHL7+oh???NAwhsM~J00Nd=FOY=!w)|!< -XNl3ctN+eHji-=?2s94|A5-e=R7?<|0}q=@OSSQ-N!KQW1GvB3Ep+<)`|F_3*kW<@P%xl?F20v?leAq -_D{ssAq3=3keiMO*XK_U}+Oa6>t0dvYiyJs^2p{})^|}3u%pdKTZ?v#<`iOIgJ}M%aToYQb}uLAEy=rkTLgb?-2!|DjgWPcql+{~a8g;JU+wf4E$P_Vm#V-;MiAeT@F*!a60Bl{B%&iDAJ_y4tbuCY;ER~#RbP*A0+{!+;wT6yJ9NQkhMN=2!k3JG>w -As58fl#sAEi@nCrU9fD5jf>l29s;K&Eyz6Voxpl$cIiSAaFUisN*gz=QWq2C(zJCcRUM}W2b|POqE7G -c&Rl!E!8V{u{lb;TyX&2~=ghh1p4b1*-PzhSu_E<8ar{OcAExAsdlbIwp8Zvk+trFWJ% -&9KG3N)u-o7jB(!YdVx+>!Hh=^^=MGVX{42#5(DdLTrrPpnoj9Mr--`AX4?&aH-_51fNEBB(Le`6Z@U -lKN47c|G*c)D6^qUz^P%>N&8+!i*sPuR^@=@`ruyb+uWe1)1gwb-{uEvxs|U17Z$*y-)txBK_+-|vG5 -Vkhzk{3CW9UxckDmL*Q%JKodQ3{K#MU_9WR)U?5OsL6w|%|xFZK;)oRB3~$1`8|0qbcv&piOPA1o7@e -&>^uLo@jkG!mqzYXx|q~%rs#vD?_T?my5<3y;J=3dan*{p_+%Y(uTukDKWtgg4B5Ep%4;_6tJV*=^$~ -msoH0whzCBqdGw>-QfAxzv*XLe`!T1vc!wdfBwS$$i21Y%Yn!KXV@$`_5dxEz~eeAcfHZUIa5sV6~6P -$4MZ{?*uiavf^M|9H%dj&uKc8WgcIT#IC9~cw*IR6*6eNgm?f -81DUD*g^Hw4{Si=yi5IcJ$_u^}Y8e^MF43QuHy`!AuuB`j~>#N%|sB@*g~S(C6j@+UPm2H1IZRs^AOM -girspW=70#=p)Mt30|`QU}J5}3Ghxged3CShK8zb+qRXvu~&GYZh|am)Yrk95)R%6&O|*FeFS3y+h}p -{rL86Q@ssUA$%E9#-U;kGm3}G~oQeT6{ug%SO1ulKh?*v~aix#c#lcs=CM3q?&~JS9Nl9y&OCPg;H+l -St$#(AC=|6PnkdL`YzE6D4eZvbf;PsLol(->y6?Ik9scj#1@CD`s_y|~Gb71MX3}|i}4R-6+f9BSfEn -BLD{V!Me0C@qq9Wuf8AdAt#KU#18xJcpz)Tfh9efPBS((-z=nv&;X~!sYTY1wAPejf-_gKtPi&c( -6L-=_m#*E>{u5(w-MY1E$BrG9$YI~UebVk>ckzALe{=zPpo`FUV@@}&UABg=T@iC4MIS5j$FZ{M=;Kq -Ub5PSo#^hIGE{@mIQ?W2LHjKruo-49Ou3xrp{{6~?K5m-O$M&YxkiVn<7yUn^==*%WzvbrU%DOAqbTA -mScJ10F^E-G_wm{iR#s}Hl9=vM3)w$7nr6pgk1yK4JX?W5)^?Z%>-t~7ZYl`?MCnsldUS3`U_tDhURK -0%v`Zv5@ueEXGMp*~myLYdwU8vj#ne&SL)!Ihnk?NCa^eN7}By?-q_;1021*^oomw6z*9$W@&NyJ&!n -l)?WeNRho?NS775q}JUB~mvoEG(4uS9qwct(9`e9w>}N>42&sD}4}t;**Ms -ic+D=VG$$oU^hAcOgU8svJ$dyD=RDeH5d;y`cAT866e(+9B~@}`!H4pK`8*I<6QaRkNyyTEnuf-JDx*i865ckbLi?d~uNIsfsL6@FC7aZQ`x(C|h^iykC?wSPtC=?1w+rU~?Raa!ZkTv&>P44UKJARL}C4J}!TO;lNo%m2O@ -X3=Wt;2^8%UUtEk(!gj6z`L^qz@hCf6*oGSHnKNpg;Qi7bzyG_bfnsN{eT;K5 -nMD7Fg)DYzcKzgj8_$}g-RHsln#sOR**?i=&K;OF>DgP3nV#8oKf61Aon{}Y`>))?bGx1?`4s*zW2*0 -jK0bc*=+T!Vk;sR_M%_4e?AVWvA3r|H?!@Eqo1%|u!!YFk#W|1Yx?b4P(Q!7BNXYS2K8$e|bNY(=dho -Oh7cNj|{aExdAoOpPc}Q-IzMc>{$jU$2>!5N)eBFLcc6CNw&$;L{F`SBL)SSYWJ@c-eGZCL&5@F3(-k -200YxrPjG1pX1=un2hIsMC=WAsj?)Kitc1?#m0y!J< -W1R3oY7OdZKYT*QTf}?Bdc>NeUkG#)ct>fs38i>E>*iPZGNmx05%JJ2eK -DNg6BvYFS-EF755@G9F}&2)G(!iN2)9;=LD=GVX6I8IQTS*_V-@@C(vzfyuFcK>1SI$)+4@XrNEZlN{ -;?K}mm9jX%1Ftw&E8%M~kDNSR`%8Oy)C9g -I*__;R=YbG{mXwI+$a@RQKTACV`}H+EV0{%!8-vD5HPKga^ChzwGc3hjqj_2|d`>j2sv5z@B2e8}P!y3Du^NGFI9?`sB+d8q++HB`c -kKAYNGtQYFxy#xdEz2Jc2P)TBGdMFb;mSwr7G-) -W{Z+vYfw208!R*XMk9sq6KKEIVCu>t^b6EZs;a&E&*uG9&84i?e4h1(gIG@FTLV?=Nf=b}oqEN6dSP> -`}bqsChcP9UalGXfoOzJs<6f_D1`o1JS|gNY_|b -O{_lF9BYlW#SX+eVqLLhtUGo-))VWE^~VNcgRzm=SWGkK8fiwl;W6eJUSo-oXA~GkMzOKZC^Kq|dZXE -BHQI~=Mu*X5B#mz4ywPtA7=y-$F=lAyTrmGfc?$wv*d3u44^vd)ay?Y~e<0|XQR000O8^OY7yP+wat{UiVYgO~sS8 -~^|SaA|NaUv_0~WN&gWWNCABY-wUIcW7m0Y%Xwl?LGZ>+cuKF>#tzz%_9{{%tv#*eSYiiIf>KyHnII| -r`=u0Whe=<8A~J|Nm)^L_kX|n06>5QCE0EF_TDXD8%q>000x7>d||NT4IdA^aW+ZP>pgE#O^3h7H@%( -Sj`u3dS4DDtQ+dIwzW4m;vu}p*&kOIzB#l?zdHgBKLn!t(8H=PC2{tLi38z4L5ZE#pFXZ?Z -)?iK_(O!3R-zF|?OfMKW4c8GO4ggqVx8LRjZQcyEth9Uh+_hSlfFi_?ks>g4$1?C9nDi<7f+dvXA{+i@(0Or7(mVh_F-2j^ -XTt(F?$Ct?rkS$>VE@Q;Cf^w9WRXm%C3ARZyUbi4 -z%6x^{6LM=r~ISc6Y}cLx%vEx4aRlmkKcv6QK1eQea$FMF6um@cew0uk^$x=`{2Edo=u`cc;wa1}>U#U|%XpUft{MroRtnc|WB9H2=KALl1ff{}nlk# -oXdYZ}KnvF4$gN(PCgbbGqUfM%m_Ow~k8y$IG+awnpAlmrq8J~_4lpf0h_z(By2F2W?z(f89;^!o7S` -|o`NriL5Fc`njP;7_1CTY>xO=;DXy^e^uY-o8C~wI1etTbR(r_s2)CPF^2I=SP1%^!rHUFV=xx7@!LQ -8&&H0e)uU%(trx~jXALJDzQB?-}ZWn7e;4?P@xdSuYm^!h41^l;E$(&Nax>O{yese_z?1k{$mMYl;BVDOI+X=E`%jMgv*=R?|RTUvd8e~`{R?d!&e9Ahu+ -`uJJ7((lk-C$T(uc(^I!W;XCZYyepixNEt#flF263SicC+D(Rw9L2Z5fLnK<5OZMnjXoI -d)|HU4wmK2!Ssv(Wx)$(k?{?tbc}Z$Ouo(eN=PmxO`?=SWI&gjKpD%B(>TXYybP~<8$zrDZK3&Xaj6d -woK8gXxFrYD2U`?BaC>OIz4zxyrCZ$$6Y^BM+_{X}dvn=lD>YDz+7RyySdsvsaR5h>GblGeG_y6^XFX -9B`(<74AND2c^oyMb?K>Y=AU(YJdH46rMT<$Id;e>>Y$qGs(n|VCGMO_9Pr3#l%uexSEy2-LzD5p3`%~O8D1!HrRufP79{=T9D -fZEX_nN3J6NmwcHNP4EKs6>d;3r-JDy%*2_vma^@^nuo+lJ=kj!81K(RJo#CoHgK^@c-+-D3p8UGX=AcGW2GIRa1#2=+idams^8$HH5bAh&}~8{ENflfG^wbOIr2z=m -;>;ZNg-n`|+gMBEuD!5{20gvUEl8er?Re#%$;{*oltEBi+fB1l3@VeEeMw_*x!d>cL)slOJ -BKxqbYX;SD=#NRZC_PjrfIp_7BRYYh{%PXQCL -ELR577=`m0iOJ-5Z9&I$(fx(t0jx95SBmBJj>Az<6zxfR}ZV9Z#|-Z|I>J!i&7P1UzkGeKoC_q}R5Uv -~=u8P!qEV6Gw^t*9Rwsk1NSML3*qFeBJjD*#;6byfG!1J+}v)J2v{dg%*k#ytgpKF%0TSGV1sRLk3}- -7O429tXp)9WZHAl!oFf9*TrEU<-jFP+P+Ni2g_i}|fUqok8c=L1$Q}*42D(@bs--0%E$l(9DEo!q$93 -{$Y9o|IVQo5>ivx{S_AkMgsm%(PcTm_abLo@tJ(MPClPR`z3PhwKfme$hx_g%k$u-`e#ELZ8E@k(}c(xEy*H!Wlkpl2PF^(5dA#hM8>tbKb75&dxl=qr;|EC`g58pPI>HX%M=DL#sv}Rv=6;Wbq`WFLp-X)?*o|7f}8yG2 -$>sMu>_hed@?P(LU>L4T-)EGt^l{aD(r`M8-u(mNMR3U1kuhbx@j45O_GzLM&gL#NXdwWV`Tii?(Pb* -QV_R*(}rc1>*~I1=8)vtBOyRXb&}oh`?S;gR^b1| -AB{X0W+MA#=9!5v%`IKAoLB-(?!m%-TnI?=V0fOwsv+Jw?Ry$Yb21k3Ew{kC;+W`Z=7G)JUig6 -@NxF}|2JQdOC+ZQ6mO)B6L{jk75jU32y-v>Ap?-BTMIZl$cuBH1kXz}YM23>nI1A(2Tim!Q$%rxs~d6Yhc}nx=C#i-vK;NmETpQ#E26RW#nMLF6Vmk?A7(0&BJDW$hxPF0pM1q$&f)!oMD!!gl -`V?ZL(2Yo{=`Es5a6;Z49rMvLpf|Eb6-(ln}!^o^925TB42=WS)^i$r!Hf47Hj3>#yz;_FiSbu4#LbB -l0T@3;cn>(~*6;#Mxk$ut30EE_;0-=bteuKp35t?`S|SQ8ZG=1GcPAr$b~&^)Ej)KI7K4`I1?E&8SQt -`lmL(XBuq(G2J{;2^xf2m-({$ess2dbObfawH5p!jJua-*ok%&rm|#uM0K&tYw6NaKTQ|PuAG##WaQ; -Akt1K4vxBV7Lv}WgO^7gze|S{hEJ_^{nlNoip8cLHQZv34mG`Fu0Ba8navbb8#q(QmM}gI-T=m}UNl$ -tWldIC5`Z|K!k9~6KwSSfoeC&$A;PsU!5BFR_eK%>+w#ff7|iiBn5HrYB7 -b4^d>>8W2wFUz$1pzlU=Vy3e*6Ch5~_4odoi~AuYVbkL4KToT_Zbhhgjn)RLe(7#jvKC+Wg=x=70|Bb -zYYfLohx0V`~|bz4=7EUR$KD#}64k)ZZ6p51oUQ+224o90^XLey2bu%h)`gx*0}0!h*to{{jTK0~#D2mBUk3682;TDO%TsudE -4e`f{}s7=_byK1&@Re-U3}Tf>L>kApjp!NhPZleP~AlR$eYKvup~=7l2=1%87|5oXxoqaU6!b3Z&83*)j^%Od -wzlKk4~QH8T%y;raHET3>;mijix(hfk2f|91EF^WvL(Xt -K7NEhu>3xLgvC=2MU@|*c)$^!$YWz~4A3#~cpycpWdg0iFJn3}$7EbBYjYks-H{R|$vCc*eStftnFJa -dfKiv~^d-tBx|jx~kF1fPMiVz669my%g7G;(9^*pfaXMb9VzQPIzI1_YjX~TSVIVB;9|>$FY$ic;KsU -+Y!$xm>E0o3CfMehgC@?|+jIiikfL1>sfsA?}4H-|QfkN&-Fiu11lqU`cdgxN;17c&*pWO)bb1i^q_G -|*fZ3$ORCDO2G3|c6HyF<@9<70%WX3zQ^@=tKFv=9NUT@G~z3wkq&TgQKdhHOi^iurG7qbnn+${r^&S3GM9P6f@8YMKN|HYj4>I -skNg?|HH<5+F)I`yhSL|M*DDAERq=$;TR%EMJyd^ryT~g8`Sf#pIo8IkX0$aeRA(Jy2{-ESmbI}ZWz -=E-7K9z*{IEf#Vp;D(pd)Bg4d!FWS13Br9^sdR1_1QCf?&CzV+%>uT0|M5(>#wK$Zcj{{%xfcs0b2iuS<-$5qy?eamy=7C2a`jw-fx_umu7hMCDb -m&k8h`xa>|lh$m_F$Agy9EMBBzm{F3oG5*nJtR3ko%?_i=! -BKTNbmdclbC1G7*(uNC<LYUL<1Wlay8F`=ctcSI^Q5HUH6q7* -oeILoXCYM&qtjT6eSEg2j~q?I;{CoXtz?+}whUuF)=sPXu`U`}J<=>S+US{x26fOzJ5*!f*})`^(aYK -}S2V))-Rhby3FMbe7(Q~+^pthYnO1)&20*U|Beh1L_V$6647!ZN_}Fm~3j7{95prCUk8msBKuq|oU13 -QX$sKCn3!L4qrHl3cBzly;%*7DcZ`O@LXX_eM-H3`PnxnuBJSbxrV0cA50W>}D?z`OBn@T84vIO|bP8 -}3<`X1Lac@VNhoU-@F@`;7(RztltpzYhCK@CjJZ-ZNMEh(%)hO+osXsAiAlaZ0hUQt+g*B;E2q?CxlR -m3_#Fq#h3C^pWyHo0!Bpv6Rxhd|&&Ba7rPDr$!5Msb;y0?Y=F}^nU$LlUha6K1!c`c`#Itkl+2 -qrFUg2P3lub$wp+gW$URruqyzt@t2<)i-{T}GKY$#{6}FFh>_avWI>@GYGDa8Esbh;Dujj`2pho60xJ -pgU?PS)Ke`O}EI@2K#;4?u}mpO3W(KphtL(81BJ@{t-up^~5faAZxI$X#hfeIdhP%~as=%T?SH$vwkD -7V;sD2dF(tkSAuNS1CacZrGY13)cE5zX2z6&#;#dff4(2U#d@iF*n`J1xiqh&GCRg^h)nbznHEZDGPZzite@rrHk=+VqDJBwWQ#7ZV6XL1W -@xK1$KWOs(nm1(=U9F%3I&^RdD|fti-sOrU-AdXa3}hw-^(?@*+}1s@@_ZKNW~{KdoDP8 -w2Uy7bW{5{;Y -;Kk{f2*Lrf<3SE+^Di+zo6mhef^ZxB0-KYYlydDg4?e!q2%XWu=AsT?!qhFfB3|A+&ZhO|&L68;zJIK -EVy9E<&XKVP8ay3ZSLc!A5!~=9$Uxy)W7==T=uE(%>!tEg5%+onkosgx -pr?IvDcjlruA1MZi+9)cAWE!bldG1tHg$$fDhHsfb5X{_`Zp-m{)}m%7$bdz>R2kSfNRRlFl -@<%UsX0Q9R>&74%Eoq3I?A=NVU4Z&M1?Ko2j)w`N{^mn9R9DTNI^^`3{H_sFy$0~vPkN|L9x7Ed=&G? -;>YqeIXikQdpfF%0PkzrUF#jQasD_r7TahN){B=$?sy(gf(=C6O>fY&6z#?Ekq$XLV#lx3%H$&liWsn -1A)$4AH+whBTeJ!pMDa&qzh5esgc5=T^zPtfbukclBV`&8Mup9_uhTSxyaZ;BBH^d}Mxgb?S#nnWpQW3H(q@Y; -GdWR69u-@!d_yXtp+6?Q5Bug6#6@SWCi*X}PvMbb{v$7AYCbVaJ2D=FV9m`{QWe>f9Xj#m5iq8=o2lN -f{Wk2IP%aUIGffK2x@?d!$nBsDruQus-TBfe+|fxOn-x?l3hX&kOPVwX(uH_GOi~dFy@J%1B3ntmHqi -P}$%u^AZ!9v3CIzs9>%3)B(;|GzxLc)+eGY>U6u`0e)w%>N(udDQJEk7q>iNl%HGG{KfszXqUH0w9j+ -f4m0RYJmaHkGLwUE+ykO3Ixm#qnRf`rD>dO#YjJM39oh9%U6AO3rh})h-ca?{#UxEZv2`M$>n0NUGhf -}H(q-WN8UkaloCo4nS9K9JRsz!IdGtEO+g@rx%y}QnBCXffZ@HQ@Kx4dH(29}qV@o>G6Dn_-anELhav -5FLO*8E|;6j_gVvn~1rzzkevoCugXJ5}I-%ataptAh?+}FR)ef<;8eeHM`C$CTR(OIJZgzaJfua83A= -lI6fM>igLY-5`v8{N9rLyl@dNBuCQ486L#8+upJV$**yk=Q8DXa!vL2y1)icYI{pG2qs+5(LU*Of^d;C_B6R);O7%nou4OPaaE -t;h1Vuwg|5+1*Dvd?yQD7UTq8Q-O$XdD-OWh>j*n@JddWBaZ0KJGhxH9DI79iT(WD`oxQL6&d?u3m({ -iJC3Mdu8O>9}WB;5;b**??wEgR6`=)@dtJ$~H<#FW6NWQ0#M7mZ0sgBsCg~$(U|vl>^`T&@X2l#c;}x -9~HH7k_jU>38g9(OLHdK0HaPna2)4w$VuLo30hIHQdT6_=tin*pkK?KHKReumW2j){7Mb0M&W?7+K>s -Rk#|JS3jBDImB^zj0#I -fzc;yWtYxQ#t%>5m#s-oEN6r|NfJr-yWkx%xXqNZm!4ncZg;!stK?KHYMtzD^r;l9F{2$^fNYkBPVIJ -=-%cG3)a8IIOTzh;RMaoGH*vX`%2P04wG;gOSZSID4Zb=c87 -ldJ6l3W$BnA{=CnRAKf(5jJwCsUa*t1^g6}G9_$$9~Za*En<0>vUefNQ}dmRYYazm|$OKGB+IOR;t#e -5`hKT_MRRYpmabxtI_oqB_S)@bDosR9xg0@R9En99$T3GFuJTe=BK7BE`TN?mhvP}N*HXwNegP*LGwm -1TmN8imZUDsLXB#q$;bX=RBlf#{xikiBexA`K&GzJx{7M103;-|-G66AZ4F+pm3-CyWklOn8AckGtax -d_(SY4!1p;9q%=$EE8d9ni_}Rb>?aeEelfXaYvr1XF8#?(Gt%_lAe;1^ziwYeV^_Vy?6K^J{(uG&ntS -!2pB#L6dD}XE^S!T<5^aUVCpcqbn{?mc#lHg8t&i4|BeAzTxWMyY)nIR0<0&&PWdV;b;=9sXCwo;t|RV6W&8qXy)$T6h^y?>>$p}+`@iQ1W0!A30@8S##?6DcozURV=ih%DefwfdxZ -kV;3;+SpeL-Tu&7IvIB${kz_W%i>xJr!@9>^ALEz$(naolWgd4nD?p8xOmT^1f<9^_hpK1r}0TvQ$(R -{xRa>LNyh(y7ywxGa&z_dN2$$#5pJ#dhw+yy`SBa99gyh(k09(QiB6yR58~HFyksFIyBUz+MYv$Rtp5 -q?@}HHsmGY$PsEpm=}X{XKW-jq9YX(4UXQOMyF?oz^%2xp#;9&@7p=yWuI9BOf%}(6K-%K5Tr=Qs{tM -LuOS*g>CPtuGZA)uDTiv?x`A)&E@O9@E5cvAE6R>eN|56{eK0~KKAH_koB%e=I*1uH7r)K;{e0#B79+ -Rdc8ra|N?l;t>-AopygNO(IC}Z^FuFMS{+v&g+CmA+DzoP69!oHG5T^7(==^SEC0Z>Z=1QY-O00;o{l@>=M?`QnO0000I0RR9g0001RX>c!Jc4cm4Z*nhW -X>)XJX<{#5Vqs%zaBp&SFJE72ZfSI1UoLQYC6B>Q12GIl@A-;R&JYB>@drI1@dqfIc)NzIQ^gL|{yi? -e&5S&w=NRKhud|V&^ea=vI{J>!!?rFsK`l$oqoVOL@?g>@tbKsRXh?3DO6by#6vA05|8kw4mX=k0)5} -<=6yq-L26=gU#)A5mzLs2mu6f%9rO0N%LTQ=u)iph_Xe82$iIO9KQH000080P~d=N3V)6WzGQr0Luda03`qb0 -B~t=FJE?LZe(wAFJx(RbZlv2FJEF|V{344a&#|kX>(&PaCv=G!EW0y487|shy;b5Eity9h5|XPK?VdE -(xFLD!yw2qooG`eL!!6%?!#Rr5l!+vJwC}(SiD<+w3RZ4J7}q1e2N)1Wm8z$rgQ3WB*<4Yxc%_ -)7WPMkZyg=2ft{`Ck8lWIY-=h(%9w?Y%!c?$&*zO-U_fPwW$6ZW@J~o+5?uGo-SVt -ae>p+=G{Z>^gG)OJHN8e-X*2u{1i-2HEogxCPPm%9DW1I`EIfo^D&!mt?FaCftQ(LO)^EG>rsK8JI1lBrJuErzcg|-6C@u{4EQfkOY -9=!XMr1a7ZgEJhGjJh;_YpHzo#qNWDNH)I;)ElW{e04Djf0(O&Q*eqW*IWMEq{*GUZg0mj3;4aU!OnY -XRpk>SR7@$&5WlMNvV(QD|tR~1Gov!Nf$*ExuWk={oeIuo*>BVpTFBVVk{~X0dS$J*50V$? -KNOY%XM$RXAZo)kb>f@aU0dp{x;Konj<`wpOQDAv-sNg*A;a#!6P)h>@6aW -AK2mtey7DqIx(aK01001&%001Wd003}la4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mb7*yRX>2ZVdD -T2?ZyU*x-}Ngx6bueG^u*R37I$9g4vyDGj3jHrkL+Fqff|xcYNFu`GY`x3-v0NiXFq0!lGX`uh(6dPr -@OkUy53zqr{?iDkIkxD=jHa9>DtZX|G-~PPEStFi)w$U^X+wOk{2^`_T=fA`EYH`+e3R@mF9i5X>YUI -npagIK45 -Oss>#42SA1ef_^ergW>W1F=no4VS;<8+_3*G3*>%Lc#dxJ|js+Limds* -1ugg8GxK>#|}{sRC)U8i_qQY3swY69a$pVEN^YzAk?M*R#d@k8j_;dH3Pv_vYMus5^UNKdxRX3;2F9!JR`+RLj3j -=Ei;1&%0{vKI4w)XZ`~?6DR#jK5Y4xQw7 -Ql3{egOHM&DOsPaw*o&npIW`+!}yHFmX5QgTN&v1O6OCRX6_-u<|ws^M&TonOd5Q6tP6$PUyrOOz!zKX!j{|i`uyp)-#mSC_V1n~vgc&5$=cx -5$3=c)4FCY^Y7hpB&hP<%MZ6IXNDPR=(`QaQmfZ%h!nrB(IN{Z2?s>l9t?f3?LX9#@7=7b@!6nk$I&W -4_|Loi(6zbt3L%Zl(%jI`iv0_Um75+paFvDW$`8-D -ugPH}8WT>Om1V!H7OD3UQbFB5ToTG|$ZH+OBTMW#dW)*F>daDg=s>kb)`Mt+K|tAH-K8aVa=|B*(mV^&|HD4qQu(Ipt;d#GSChzY;qqMhEqRYXBf^@T`T(@+R)~|fzE1 -mW7`G@vY+x5gkfnqi{Jofk%;vD;`RGiuV1}MKsB0nfnIwSuju(a@E6STyou~J@)=pfnvC`f%vs5tpVr -Ii%w!FzvR}rJBHJ>()lu*@MrPa`1(JpY9FsJBW|n!|+#zmWw*imUHB1S0I@*6!4flj#pF5uZ`OWt)Lz -cR6Fqxn-rTokxuVBZJhro-VgRE{UlQ>%D20X>i0xbS-Q)Js_c8tPt0v>{VpEn&Y7xD(6(r-+e%op4Q7 -=D?JgB!4Vj8WqgiDDEOP~0>xhKbehQTLJZSF`S>;&#f)jiKP1}AO%wrdNx-8Gq39s8 -a1{}A~>@!aOxA{MU$ATn+E3Ouq*QNra7m8Z7!&tV}L!U@e3`BoReVBV}+Mx)>*j)Fxy28F32Pxp{X0l -Mj*JL5IpM@VvY#BAGGU0cF}-k1%}uM4ox^(e7zA12vZVpF4YQFn_~{d_7EhcmQ)5kc?Mw)00W5uNKI8 -XvN(Xjh^!(w5UeOM2< -4+iHajNgr6hsEeh&on5T{wr$eB10hJ9T@45-`iKUGIo0VF)$k7L5d`vZ)?{Xr9Ws5*}Bva-eB8=xC)M -0*XKb=ahkMz%TqOnAXFaE>5j#%?y4@>NWS%UO6J*9E0UK(Pv=5lC^mM!Q+ -32MiThv)cI1r@2k0$siGMsV)R6)Z)nA2fYwG2Q-@H@R%Ex2AK>Jjha9#V}+O2?DRC5;sSS%oc^=0kt? -99Si8TGX+W!+ZDD(=J9{Uc8-U?&v7F{EAL3Iy^RpT7qBXOC%P6@X1Ekd|JszRYtVmDQ>HV{Rqs)W4`>&u1M8mb@T)~XE(?F -v6^92!k(et$qmmw{=TOQb?ufJn^EvcrNq%hD$D(jxASPgxt-+zc3NO+sZ73icos5BzyAHc@XG2$75Mb -B!Dj8Dug#pyLjgzlY++b}LFp`;*XPO4jK-W?OzseruvG>m40*1E41odmU>PlZ*r(mQ#>}@lO=tDSg3f2ZfW@ -5N3f@K9ht`leCs0NEEhL=j>ArRSIsq;|5ih`_ue(kbr*u0nlY&$fRhi@s^+~(rRv2F*FZ&0IqlJ2CH?Qp#M!@+RPY@o4KZnb!VMrz~_`DG1OLRldLBl+DGGZni~<3AVqi+47*=iGE52H8S#6lj6DuBsc2=X(W_ -D8!TqF5>1$_(|*x>40bUC?QTYjuUZ5$hhf>Vl1Td6{b64Iw^o75`45Hz-C$l?|YdcApw{tp@g|pmhWG -`OGb`Y#5(GVJqzh2ec1HdpaL -#$r~S-;5mgWvgjT~6mmrZK@mq8!gJVcpsAwDB=);3sm;z(!(E!DJOWHS*6YpgQ@X<1%PnpwPLvuIu9Y -`UXB#fsx1YdO}w=fLE?1Af-VAFbI@qvKLsB{m(P5Lu8TDlY{r?# -CO9jtL{9 -8edJJQib&WxhQ;ar;;-;n}hM8xSM`kQgs-N{BA(xB<;(wXgAoA -YvDS1Lp4Bab2q?ua$8Ek&f=URvCaDA)csA$SJASFFZciat8l(iSxm3b=<6^shcrVycQ`$hZ=c3wfZNH-M0(6H9*Q-v|*UJ+TM2w|U_pQpGz(`Uf#FVi`Tw3$wSq2W4o0XRfs0S_3WS`qi{2mM9yY8O-5^XVmkf{ -$lYH!xf$8kN#8$wR0QN$y>E5`byjI)iAEj& -vu6<)(B>eJgKrcog^SGG&X1gZ1YqLWmaWjZ?ZiKRo>GE4S)p}8eSL&i211x2NOJ6K5eJQI?#wNkETZJ -VQwGe&_~Ze2hB!`NI3S??vdUDJ0N(~obUu(Q3ZuUDPcUd83nP=b1)HbPLjX*r(}<4<;3yMiM#`(ezvE -9uRJ?f;*xf^5Gi}`w*qs)hkmSB|ltGdF3^owid9HVhQfh?_r4M^z{}-dYbAhA0mH`(ysjgD4_cgR*yRUPu9}(R)+kM*%GewT@^4F> -LSKea8~vPIOgIMexb*p^{Jiu$lmDX#Z-|&*iusDk4LD`)z#wEnxx2i%1_#pKS_o4oR7t?9F^I)FnC=) -qMF**MqY1eaB!EsM?0Vw!Y)Jy$9i9p34Yg}jY@Dp2X&6&r=J%}UDJF7<$L3Vm())N|%@6~+et{L(4yK -nFF2s`&d#qHofL~Ui-^0Z^zT-HVfo6p)4g*&KJ|4J^#;Ny2pN`67apo|_4B{>~`>wcalA;Ku#(cz5jc -`n(#EDQe(YvC;wFHzV`vkj&yMoQigx6~@UVnZ4mS#e@xX?OUdl3|IU3wAl?@_v^wOD7s6P*~-e2!soMw(TF@5d+a1jn|%6jd-Q|W3lmZv&mN38h -l6b9zn0i)K_Ki)*cl66xl!1xgs|i#h7t2gid{QSdv%v-s%u>FF`&@+=nHJG`%NWxr=bKKeGoC_CIEIMTMWAYKRx -l}zK28k0{0>vN4U@;_f4=nPYmvr~pS7}_?!2#p++yN7D24FZ99alIS68Iy@d!L6FLNVs#52g8D%^Twh -hZ-Yy)045nsZOLDmAn& -u@dcTCYzq~gKlNPN7s0lD1&t_!J55iq$3F)HDXNpaMM?PU?Qu~`kCxn30UoIx9%-}KezeBRDq+?ZlikcXrpR0ac~7YuXyRjHVks^-VCU!+9AnBkrH>VZ;;q -=wOf!UPK?y%x})m#*QM#(Ue)-3I(nKeq4k?sFk6CZN))kSjQBzXKqNnkG_2)JZf3n;>c3cP!YTjB+TY -ig6pbkF?12jpplGx^_kw#%m=C8R~<+M7KUGfu}vx5!xSv5wd5V9cw=@a4|D0c+2v)2*6SbyKBi0J8@a -^fO6=d6DL;2WV{7-!&?(f$NL6CO1^o%RM^;zNwkgt>D5lEFX}?`0vPa~8DvWo1JISVhnDL#-ZHkqj_O -Q=aRIXTEW1>bU#lcETyP?j9pw1b>NyDR?!TlcT)P!Z|z%zWc5hUr{mWg--AVMlI9iqa#-Q=H<2+Zo;O -OaSQgVsU0-W6cx$)IB(zsj0iSW`p?r}0_l)bY{F{U`@vA6 -px}`&R=AO{zpFVU|8}EIc^&>B^fDwz+ -31n8WBE>8rkC1Dl`ELqsl~_zOTlA9)MP34etxfHKTx{wknm-;qV_uxa#gcI(+W$ce;ftWE}?WON&F_OugFN;TZ+Ci0 -|_Hr=d$`Cg5Y!{BN3645C0aWCEOoBOi4ce@b>wOKmJ1*$%0WYAl4yeH$H1P5K@XHxJOQUBOFC0iOgcJi2IvesO9Waqk$rA}fR|(0xAMjo!7 -B;d&SF5%rPfuSfAnlX-4}+`M5W!h=qdLY3Nx4N%DyUbu+uPQ7;L)x7q~`o|0_^> -#GY_ez&gvW$O!lclFOJFMOpn=ee$& -n!+7UH^MqPz<5cI^;Hk_R+%U}L3O*rDOcLDtn2b|!pO0kuZH&y+@z75hsCdq^0&_AsbDY6(xY5|U_#t -pwZVx6zWJ6_7BlcG9eRa=c@+%5ibU!kIRaB>qHmy_ekt;0{HDygzGYIZ3HfYI$)>S~&;y;k8PGfM34Y -PZBi9w?PpB!F*SWmN_$ibhG++igPz@CDI0HYU0Zw{{Fd_xiP~#)faKx#+8$>n%8>g$HYxx3BL)R!v5P -G_unWmCt@A^SDbqEGs&C}n}i@D4+O{aRVZ0v5gTu_gm02I6$)Vl)^2nnPHyxzXZTUu)H8b0JW!+GecL -tW(gqo8Sd*9DFkj9o2vavJ{8%d}{(`K_DL)(p?Y@D-iZxy0DWd;A8&MsKUpd^vZ+Wk;ZoH6{6}dPp|* -6ipif9Z$}pBeu|3NH^94jRlPU9rj3VztDfnFK1t8J799P{9C^nEatix6CLp(tM9QW5nCcn4^Gx7TN^u -Ri;Tb#gj1moJG?_Sjq_aQIJWm3&&c`Z1+{gi)UXR5;eSZzdOIa&en*cm-LWGBI}YK22aW&+KL=or9X` -^;JI)?^em6XNyx@l5Be>q1VjMqlTwq63FN)~-iLcM}d;&I_?_udio3)*7a?{4{4{?G`J|Xz-?-<1I#~ -#;Nsl+p_y-K`ju@9(S#P4)?B*o~B4K;jhxVVep3L;mX15oV98_n0(_q6TbRyDl>+Q(V$N}-@n#9sZX( -tc3RH*ae9#v(2x#HleQSOW~>&ETjVka87yS5xzng3-M+c?OjYbDNEnD>8kHnoQPorsR8pB@%_NEx=|p -$Qy#nW%!B$+4v|SSheF7+VEjqxb9UVM@x4DkJl^8_Ow5&$@1by>awH=gWBvzsm(^ovYGz;;yr#B -oT_~ViKcFaUwX2`}PTN<*|mG+5y$0nQwZQXZof)=3v4^T@31QY-O00;o{l@>>D767gG0RR9w3IG5r00 -01RX>c!Jc4cm4Z*nhWX>)XJX<{#5Vqs%zaBp&SFLQZwV{dL|X=g5DW@qhH%Z{5s5WLSX`D+tWPOARcSjW0Z^K>F(;9Di`=z65}N-9i(_UsSo-q*%Y(N8INRjf(~L& -4uKC^KhYU9rP}AfpyTGm-Wkktuc`8VOP0j_66wbdOE1`;In>%nB_*fvTo!N!>(OQnM3a0t{bC%Nr~v+ -`EqU!pRz;vIhNQnqQERmN=zytmF@y!h?M3-?Pz|X}=`T6}AFIT8(;q8#0p~)l3XDcIIVtwWLthhqVf@ -8%l~;zl1GQ?n3K{zo9NMqJH9?V&QPtewV9gnBO7rQ8VYoFML0S8p?6s`J7jP`YA?M`$O_hc51E -4u=0g11hDFQ|hpGp%yn+&)m+{HG*qm7Fyfq}a(tm3aG!n80McVb8Qfq%!2=10AgD|PJBn@bW;Z#X~kd -EQ=kbnMuy_rQ&*;>DTn0pXz^p`FRJelG93gm+0-Tb~M&;(8L+MrK$4))kg@y*6ipp1Q(J6!GVOQ`Ibw -@&a?a-v(PjgDKk(>yEt(KXPoqKYF6ab`Gd<^6%9){b6%lcJ#-L!cszSxVa8ka&m2Yi;Ekviw>@07Xmq -;rlB0W*u5&(jr@6aWAK2mtey7Do|3NFeAQ002 -&D001fg003}la4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mb9r-PZ*FF3XD)Dg-97zx+cuKF`>()C$s -?6WbmF+aoLjfgv7Oe}B=)o1G<&vJp(w~=Op#iG^vCvkfBVf001_ZU+u3&Sht+#+BoY`5fcc&Q+-IX_B -Nk<|IKA9vWicPU#wTn2wLaU+R(E-PxhR;wH((ntUT(0{1!u>1#Ue}DIGYzYVb0mxtW0NN5oc)toyMHA -cZYiiAI1kkaa*u3ow2>652q)GZ+(9(3&Dy^f%F6*lFsAHGAD2>PUl&^l%S#g+FHC -^WqE<<@<`}kS@kXF`kS~DYx6u?!pmS477M1Huflv5=R;^2Cir}<$nUn-7w4`CSj6HCTxeDQ7`Y37ZcfLvY5={gs0(>d&Abt>o9je73Sk*c*PNj6B5p?`F -nzmMDwZrAPEaxa_brG&E%Tr0`|dtBccUgavLnozM3UGy?~XN@j07_aLy-s-F^JuK(1!B1^CH%QRXSL+ -tFLK8AoGdBa9xjn?NCR-1~sv@~AArX~Jd0$??h2e;w?dPTuT}4`4?WSp+}~h`!&z&IU0UtnoxBNc{$U -7KJIBa>kdd;*P=aVSagi_TqvqfFh=xrz~28=_Q{LCn(;Dg@RS41Or$Arjf_|8omRIAtG#*XP0@nWQd@ -15)GtbPOvM{&CCacaUtLV_GLRetd|x&LZG*bre&PWdca&Zz_Zco?TaAEZg}nw+^g0ekQVVv7N@?|cBm -K)5b3kyz4edd{|H`oqI7<~iq6lkT`0YL@u%a|#BKNe{?_KbxY2^0pNGrY)}|B5&3`45l6_*K8IiEj0| -B$LISNYV_r|~oE1+mm^oC6RO0p*0Kj=VFu)j$cbb=yJk{^FA@B-Fz -vI82{&e(V^5&Prcl)petqDMrXnu){GK1Hu7fA}9iZbWbTRqpyB%1%B+ -(P*hXkJA~*XWeWXMpyV8gkf|QUUJ+m5^0l3kc(9k7rqyGL-uk2OkMSwNGQ-)e({@N26aNjL|OAv&x#loxF-^8Hbbn74#6H&lQEd2rMBw_E_WW4v&!TW=8fNM2h`C? -#FhP7vQMvh_U$!dz4JsKPmj3%(RaQ>iU0g=O~vp#XTR -Wl_Tzu=Ep!745owgxjv)TH-{%2eDb{Y-+qh)AhOaU<13J9Kcc-hI0zjtxRR920%(4d^*^BpeZf8`nk8v -C_JaqokiYjACisnd9?UpIJ`Ck7DMNS -AUtO<=ZQMN9wL_8{i{Dufb14(A030u(54sXiTEK2L6DGGX_3`<`;kqjkRW*2t>`=m@z0hCt?5F@7gxN -S4djO50+vunpum4uZFA -FKeRp;@c;m|pi=x!sHN3@`_Jd8PHuAW(H~*~wOop1h@SX7EE64i(L`!HuWD~<4ErQ=R99`qBMDGLBrD -UJZ=!CS`X=6LOanjMWHh}sVjvbK_*-tU5)v4t@O#qLKv|EX9vn<0ZAG344&70rnPE8(#p9LtC?fO^!9S?nGk@9&=O_6Df9d;i-r$wg1zNhG4!ju3=OBh@e0}e7g1{u -gZ357J6I6$9a@Uld^6>VA_r7UGjQK0V(25iVueq+G1t(QJK;g?|Kff>a440@8Ffr%p8dZNt7;F^e+aT -21z3-f{=Lj{1$vn-jZ<)BCwEs7Y(u_oHnnB=#%L*Dbx!qGo=NB@1H{(Uj}&&kE}!MS+01ONHKvw@;;i -p2n&mn|51@BGQR@1H?$fN`PzB|y&x=gs~b&i=o3bpPGp+sEj1@H}|^E6s}f0X-qRRi;CNY{gT9-gqjr -Iy)X^bwJ#444jLdo+#nVWms@7qHx7~6eyb4C?w#yA`Wwk645W;FdXm!nU?s%vJmh|Ai(q~1R~~peUAj -AdY;ECe?S`Qp#Z@WeG+4n1Ja*9!m;Gjvf0ITd$i@A+Rn3-tiwkLN-I;+oL8KJ)z=Q2skF&QlogH4i9LVda1 -1*dlXo^WFmBHOi6d&~o=5|bR?@SqiXq^1c)rRK=|Q7wMUBi@ND_;}SBt2u`%2$`tlANagvuVbQK-B^DGrN_$q1l? -Qq7m_7>X&NrUToZU-MLfipjY&nt(`_Vw;Q=jaH~|3Y3wCFJ}{T#e8q??YrF{$GBVX_N%XZ$H(%!TE3e -F%4iTIe${!vzGp8CivqY>o5M1sShsY00~N8iLPJX(8CTLc5IoF*+oko3^23z1_S+`EEv5fmG=!@Dq^5 -Le6YCr^**ZMje2ESKPIu;nOfA55!njM3`--?-{Gj2e1?gf(u+vZn!)AvJT_OJW67(|55k+Sgjl9gHbd -THR%-2H$8^(py!pI@pY#t^FB}ydqQfIUh?pp;jC~&cM4?ZnA?O5D7^Rc0&Uy!E(zavs -x{mGddazbPq#7)W04gu!dkI{H`u6<6Dm$RwXZ@ObVe*GnMSGy-aQWiJ)A~z;_`TXob=6rSig^^-+H9c -%R4~I1p8bWzxXX?rET%+3uWpBMRj%o>1U=Rf=~Jim(9r4aOpvUEwsIC*h@)-BqEPS)5N4p?mVt=&5)r -Joc3Ntvt?R<~7i;}L1eYlkWIlMyjk$H-ed)eqJ3&G -a!tXwN-6yX(l+N&k?D|LxAdb#2Y8Um_|+Ua -Fi%HGC(|M0{!b7+q(YNaCYRXI&yC3lYx1^kwK*5uLEz0qqeIsP4@*N+X$Qgu%|`rMZ<7)5`r(C_mB!{ -GCIs*C~ft@ykRVEydb1?$sGHxPKgeqLpNWS|Da6?XI%gSV?Hdh6R+%&ed`wy>K*!I7#dprkJ-cdvI(&p9y|~8!btujI4A5EyKf?UHFI7qJ(+JHpLnt^c -)Z;xP-`8HN8j97?VPMuRZQ*H4M3%WKg*w=KclcTtVvy9K(PUo!xPbBp->JMr)u#^(}!$i -)U740N7vA_D{1)1B;;^Bs6t5>R&+2I_0Hp8I_~}vzA{Yb99pc^#I%Ymo&ab;~J*DWdeg#5g4Ne -w>n_f_8q^~;C_wMS#~4n+{gPcVn<^jRu2<`%Q9LpvBZ8@vs)+>Xwt43BRk_<$;1&d(IevxtqLPf0jkGs-#^?r&1PAvv$JT|4GN1}9mF8J;-c(^Xxuy6GQm3BuOXj;ny%&CDC(gH;Uk44Gz>PT?2ATlj5lbVT*W;tZj -0XE?eT;NlvKIXJf8~9jlNR -r#KlPW56p>~1@qs-=G3e;uW%3>-rPPekZ -OjcbNOwErx%83r7r38H?U4#rqUXOwN6K7+z|Du0gCh+>ijunKZ<5dNo}2dIuJF9>CO<1H#{0ufa%^a{ -5ajq=w>E;Abm2{x6x+S&41)QXGGAF?9HfNJ>)Lu}GK?nkmmM6yk%R76v|(&3uF;KDoQm8@f8vr= -OYDH80wi_ZCt$lmfTdwP!f_Nlq8bO7Y6!vuL)RKdO}9a-muk>(L1h(d7oRj?bn;#MYze)y1w^wl){~X -74dHXe^OPrA!AjVr^w&X+;_QE>7TQK({_9{fcx5BI48LT#0Rv+iHsGK-Oo}IV+NEMPgzwmE7h!;zs!Y ->Qz?LvC&R)I0cWBi6c%(IL0OGx76YcQR9?pcO6r-Am1&HN0LH8oVH6rcDbpTb9b=FR*r;bh*`N!ZTAhqVU}?FWf -=LfU%y%T@wbYeGjA+#*v_1xk84!;Yrd)R)35VEU?$=A9d)wqbx<*Gdng<;PHujTf@HLsREDa -;#@pGzj=Nxa6AV8GZKam_Se+J&i=;Ei;HKEfYHJfNo0M+g+`wJQ0}i6O!~dP6^*ft{`6qx(L*}VWQ -G5bX+t{FU#-}4~oV@*|IarpgACs{|GFPt}#f@Hri+l?VjxYBx&g}MP4K%tRgJ~KnFqn+cH~c@2}%Hv& -TQnbtVk??{n;fMN$B$vr9LlImqb{1CSmtO=i$AR%wS=)rAV6<~hu$>55nzib`3~ao0-FYayPp@&3<}Z -dE-dc-O*JG1x~e%rMU~1h&QkbLu(;e@5~?0>Klr61JO5$ZeU2v4bG`PUXd=)8t7Rdeyc@&Di~o5tc%;n3&jUhCUae$Q2Vct@EzW8z&8l>}t!^KnOP$XA7J -XAWoOv=;W%Lr!of)u#t*$V+gz8HA$>cYsqfx*lypHfni9Vev+nTmNFHKH3a -sUc~Ex!V@CorV5L0K?v`;z-6%WR6lI31(Jx-xjJu?T=}-Xjz>;Ua(VwJs3-o?A4y5H;`f@Oz>>RueaSWcKas&eu^ -4RxTO(1Xo27mc=ke|6o8XoCduwyF6>R8?j7;HRhOx>vr^sj(65#)j=q4}bZ*5M&%Fumau5=X`?CMp>Z -eMRrw!p7GObedimxK3Po2Ns@i)dhiibE%)Ls*))T$)W^Z2)9Ii%P8o8!=6wNQ6T>R$@^h+%g%ysj;f$~tx^{=;+z)NiE)v}b31a2RAN$Jt&~*$XNUC|E`x8Jf^OVcLKk1 -@%Rj0{b8NT6MlYS`pUo*$@4vVJ_XfQoi)+A`W^3Go5>7MMlwDM@vUnF=kjzOoGRZ9rW3!PoK<#?@jsf1N(4_q((H3Fn5s=hXw$h1{Li6*6 -S;5a(ui;Ob|SbIvCh_OO&IU!xD2)?AKYDlf1w@F7?QSOrS3^Q4F=aJJh0RSosEKh)$2C!|H|*$FXUDB -LbtsTHd;cS2E@xiUF?b?PCx=0-t7?VR1QoGu~f68iRZ!xu1urK<`Ku#xoyzp?8d+afvX5FBYnjM$Umy -q{O=-u==dzx?w}t6H?#mW@t2dlZV?8xREz7$c2tZY=3h>v2+r#J(DVS3%rR&(AhE)`|Csi07e1#bRoe -i&oJ=-lO2r=0P(BWTMZ&;(V8SBHa^}xkp%NYlVDiysTj!$U0-j!LO@qzv}Xg_AQQ%H;<+XhOo4t6Exz -e(8yweX<1z(u_y&8ArCMPd7E@Lm)>CSy*Wg(KkMHsB0f{e0ck6KnAk1G?^m?|jePO2L=U~)&Q@g( -LYfQApLwwJq0F|BK};DNihoz;73RwfC{=BP$5zl{g*9o{l%OHrdcV7OH2yT%KRAAO^w;+XA5JHyyC** -$kQ5iZFaQ-z12Uv+4r%Nq<`G0lN#ZEPD2tsMu3|ERU1q8dN$mp(NGxGTUsY -x;Z}eGh*|`hnT6jeBOI2Rm@;~am4Wny1bEq22phOpJ&&~tc1+o&Y-Q*^`6POD}v$oKOkR&yz^FTW5sp -dayfT&M&&p7CkB`wihoz+q<${co$!b9kzNVOf<&Nu)!h>)h)80SasBAtMp@K9ET;XbdZ=!otwm}L=_6 -7g9B5X@LPg)UO`u{x3bPSsz!DD$j|54QP{V`vE|GEBouoNWVi^RRalbPT;nrEg)>6)G}~Xw6BC~dh?G&`|HQ4iQX|**IfYecw&8&#_!T0y?wgp_6lz{)`P0sPgU -$k>^#lM+@~MICV|p?D|B%?al##SESMjYm+;8;$mnLAo0T$@4;GCy)l8eThV*J2m{ -XNFHR7fYK-ghx(*)*XJ`8g#!&`wT7D0Y*JbU(PCG*F}dmW*=x-j(6eYXnMsH0sw#Ogby}ZNQez#fINo+OoSpU=SdHbmW3}RqE{) -x=I_{}_ka>h#omr`&I1ka7VAO4V#twSN^3U2B=UX1?QQa2ix$n%yKM$h+Dg+6(39a>HqJ*1T`L+K8P) -h>@6aWAK2mtey7Du5&I9p>`007fz0RSif003}la4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mbYXI4X ->4UKaCzOmeS6zBvN-y`KLuAlIhGPxYdJ4Xee2%iBu?t5j-AJLHtD9hDkae}H!`V1QgPhf{qA?(0OF05 -oV4fO^V4o)i3A1%U@({&3}!aBzx}hZ8C7v{na-2J;&x;6kAe6+U)&by?5c{o&wJ7C&dzRh92aHuYFSo -sGEU~v4|DkaUo-W4Fin1hdI$4)MD@z3NXn%6oJhfYao~PwiKbof4!gyK1!xA4(k__r$=l+@(QJKu=3?s$P@F*DA -_IVhvxdo1U70Do$+{>G*{2FTjjJkt3E0@b60|a2)sN59(D|3JbIQ%1-RQ!~hy3FVE{04eWcx2NQdt2_ -&Twg$ec$|MusFzGeQI=QG3&sm)j4@-1kay)(4CE7y5icH9Km?`&pGse`^UE>NTvnwpQH#8wc5w(0E!7 -*Qxr?6;qw~|37w-YkilM8`+3k1hc6#c4#%3cRDkbASObqt}OL& -wqj^2hWazgb_~7V -uKYDTS`ry?e*F6PjfC?66qyfgepAPvcG=BgX96Y}`Iz6E-K0iIVID_AP7=^Qo8p6Ay^F!$G!P(I{pbs -!!o}EHVIP6dj2lfQ(o*XhLoDzHLpa}kcdyZdmJPCsrhX=<1?;NX}#c}R03n1{(=yF*ti)1v4(rcuYXi -=nD1y3_tyBiywPUkF%rx6uL%DgGkDnTL#jtV4RT*p-u7n7^>b5ahl_{PR)^cj{CR0pv8QRhF-lFupr{ -1131ZzBA_yPd)JgPji4h?l?@3aEfjH6Q(TxwDfzLSEYScxex-O@V`9C93uxFW}c6u;SrxduMlh_i;4* -Ztv0V-p(+3umcP_>b@+}egw~7CSxkri~a+lOg@+Cl)xaAqv@WpT|`fxK7RVd0{WPN{yn;ej&H-Dz-pQ -&*W+a|6L>`etG(pz(|+(dk51C$I=M}XK7N}!{p&|(DRT8`bdlcxAIqi#7_3cmzd51_D$R#7XXS0FzUK -NHG+L?eNl|3E`cb9VNnNN|PINJ3Me2KzY;07;?cN5Ctvs6*3t+%E(~acIBw18~(P2^K1($;Y&|@e8|D -NO-fPfvT9F(`$^ECSu!L+|ivuS=)BAEf70xEhk*olfbErD^JJA?cAN61#0**OOxNTse%p51cN0S1WI-mm_H@eE_Q`!X>(0TH_NPx!9Z?DHW>^R4O -+M6Q%43siUuuuGrO8b~U0Mt!X`aLy}C-HS+4C4YeXB;|Ob3%z~4({Vxna_!|K6EbP;w8KUE{$K0vdbL -5rsYU#$qRzr`M9wG-2`G8sO6bLg%3L)qaUJ&)I!$>MUhVu*vUZz8qf2|r*h-$@cHT43#nd%x(}Sjt6e0MyqK07uTI{MVDCA4PRJr(D -Wb^0c@sF&ES*HNY)NB-5)z0Xut^@hcPsw-Wd}YTv)Upr(=TSljpM_UR~J8xP7YopmcyMLuZ!35m-Kph -Z6F(y0GRVcc572{C{P^T&U3wUVPOPsBOCp^nYBl#Z&VPBW>+J^XmBM5Qz{c~R&UE>Q!Sb3gqjHf)*bW&^G& -rY$qVUBdqFn0dhoj1ro9XUoICU#qDjJzkTxtbb!MbBb={ulxu|Z^rHj)P1s9+!yl(eSO_R2yi)s-T86 ->mYPIzv;U)b@I76_wyVClRyO3I|@zUvS1ja&%UKPnwXo>))Z!*;Z@@&-c+J?q&yzbx{NT5CsYqwH+hE -1dcB5U3HoyQ`G0PIGk=uy!07g>LdP7Wejfg3~|i69rnO3EGZk~um&enHrD7IAfjk{$9Y^}S4gCu#2*# -ruvsI-O-Y#kVv5vqZ*7zv;^w_~CHHmzTiqVZz3@(bcrT{iaMR#tuiNMiCx&!)UrKn@yt`BiL}ZydHzZ -+9xYV4zpG8-VSS&-W!C(f=ek#y?y=c@T^AbpEN3+n1*OCx}4{6#Us_31fE?7p5Zv|0jBEr%=t~zKo2( -l{f!*y8EBAb3M2atlIV3lO}OLz=yN<@CNyOEq>AT*Z)xg$boBC=_QjoixQkL@&5CUy1WUsDs6G -=D1x1g^jUy{j^tRNTXuXKgoK!sO+g}+_AmkL9tf-?F79&gVM4_;_IBD+*f3oXCNV2{3d`|j-M;!q)Am -1KjAQS|Wr;d9-zRg@7-{#qtzu`%krsu6)%2qH2o^5p_b)`;xvHXx#k)`-A7tUyHSoEnJiJPMBpG5{!P -AhNR?Mnn}g5ZM{7K!odj+tN+56m75R?_yH_dRU;a=j8x-C9d^uC##ToPJnZ=9)5W8{FKbB`@oy3%k8H -fLrFJYqSil4Dl+ZgmKB;xCOKNv;~i0h_v9&Ld?u{3hXPW13t7AJ4kL@L8|xM+)0MnzHhul-_ -qbo#%N5TPN%j!urvs6qBaDU7__ni+RVY&@xUI`hlv-W*Quv0l`nYUNcmrNUCL#MdgP*M(1PnAnJ<7xs -51x%U%x@_mj8Bj66t>i2OQ8w;{@1;cnSTF9_+&G@EuwM`b*LRu<7;_M`3Lp5Fecdmr`|AFZAYrb$D81 -^=|$fGuvsyazFMi`(i7PbcVwjU*j%pxA&r^i7V|g)$w36sB4&QP^^z_JN-&Yg-C5&;vnnp5F{q2TL?p -K_4eqMVDA%ukNe1_^A)tqhKfQ%6xR^&xvtFF9ixoGJ>rfp0 -Thg%LLa(pHIeOd|4_fXt@CJ0;K!&{{1e)*dF$J+rxnt?WIx)A_caqFq@I|NaAKDKuGcgYReKd+Qr4~A -Uc4B9@7yf@4$!*%-uAd#1-ijfEDT!=>(-9fm5$9l;8AuV5IPqiS)v0-gS@87?V-htGdUW525G_X|y6<)=k(|lRbQ8Y -~P42Jh}tz}L02wd>B_; -9Y=fjSD|HSA6v_}p1q2^or8AI2p;xF|gLD<$BnBF|k*eW_Ep3?zE`YM`3_Y<~v??dF8S!F#fb-IID0c -Yh=`)~F!0y8yeE*2+-6`_$@e@^K`1r}*zG8J -3k2EBEn;(%k(Px9T8)`7+r;q;>?gk&M(&fTI`x(WR=FmUQmfXV)8?PN0FbAhTixU+q~*b-n$4lYeplo -FW3cE(H_^!qi2vOl)od1BQI4m<&*3>JFdWAMWfvve^Oh%p8yJF73KhAF6$_o?>4~ry?fcqDjA>y?rT1 -Swmp*5w=Lr`LL@GWv^q{ErH(mVR3xE&Zk`^+e=l3iws~~vplYDusf%7R^58M2v67({rTbD3-;v(0>fPAyP|^PvnRigiuU -nHx3gWr(hU)0HzF2s?YQf`G3m&fok5@h(ubS|9)q=-q3m&H}c$^9zf4g`OcvL1H^hiOxFy5Sccx;GTs -Hmxn|Ae##ECAa+*(nX(RhigPI8;=-UEF-(|7$M#wq$8v`3KC?vJzoP>%E{Tqu;|v%`2F&fnV69UN0wN -C@JuK+rJhWgfGvt -CeL8N{uC$Rv`=lM12I_Q+LF6j7koX%mM#NtAkAxQ(2?RoksQI -r~N%`^@8t=W@DO^UGGJno0ri|W<{YkY6&M}l<(bPynsLRJ}Ifho>*^im$QLwEzy7U)BI_8 -)(8bvK*Jme=k8&yCZCJ(?zfAY^vLF4%(dtTTP^7Lk7htgZ0T2$GmYpvlpi)$G_MrJZy>b_T3r2jsC^Ip2MDcp?+MPy*+ -te*ZcPeZ0MsYv|Ys|9>{icG$fvmo*kVWoc+>q6mdfDU;7M`i_{u7^lEU4o{>2_$93x-q7MG#$&+3^7? -XKkCNvU86Hu{!4zP^!ByRG+;SprdRVJ{mE(2AiSPg(BNP%FtS-;|ndV3l%OZDjMIlUz#8Xa|&WbXsLd -Kxd#(l$=2neyeI`Nirof<5m1QA%cY7l7*M?@5$c4OSBX^OmxenYTSU_ -Js?p8se1N%xI{ZNaSE -MN~*~~8;xY_5fkJL#An#XN^28GMzfIl?Om2zpL&X}5`CrZk{0gJ6-$1svjd_EAM=bwwP`JZ5wJz2MDL -UOYA!SN#?yB3Q&+S3o53nPWe5@OCYtFWdY{7BDz}%M -QoGub1sWPv!U@-S7Lxix-D4j}I;mUj!W~8$a7MfY%4_NAI2;U7X(yf`!58_2KK$@!{VNkM9O#r=D~4l -Pjy3yKNqJ{eZ_`cmj_l2KZ06*X!A%H5!TWvh(ZC!|#6G9X|YZXSjp^b)p9b=m+GEzq9-6!|%T9SoT!C -;SE3xDsi^DodK|W_moWUi~IHW4}04WYdL>2I(zwi`2FMEsElt*JbAfZmK91=(b4(o_S2`2zuz9}L#mh -LfNmU!dwnu7<1^H>%mobkAr#4C9-}i4pQ)}Pjsvm1Bkv|Lt(EF%iv^7^RjM&+-w%y##GqZ;OUk}}>&z -Z*)erW?38uNhzd(ak?DEJ`H3ch1uM!iEJ(%WF9)0BiA!;#R?gb8?B{wYfn@FXs{@#i(jm>~`-Ll$|wZ -jOM`YE5w(1^(UUi70S6a~gzu~UO?=xofa_A$U^<-kFew_5qQLY*W{4W85RIPyD4-?iZ@Dz8M1F%g)8e -2x~e6gJ6A5N~hdVp^^szyPl{Pm#>BdS|`q5W`=Kpv(zTgmpPzmRH^0nk{%oVlC6tI3Mmtzup4G58n*W -*d>94K3tJ0sn7bb_u=j~8mdvLnBjfW@v;g4!dZR8empk?TAd4&oaX5ytw1-N#AT)KCXlI~K|c=w!fP= -DygA>;>5f(NBl@f+}BpqT_ -oYzl@#A3ck4?{lQa-%~0e>xE$ZZv{m+ -=sKy6_u-3DOMtdbPHv+oU%LtQTnWsoiFi&jSHdM57xEDQvVxC`JY{VGz2 -)dX#;XSK~8$^8Yi0b^{AslWM(ut7JY8tlBd+4%hP07GJakK1e1j;fGD?j&c_h-c&bNCdnre&fxj}j@{ -~cQnfT$k*hFBAj&fjff)w~)PM3F9;ef3lWd00&^bEGX~y~EzUw2{;+$gF?OWoTJ&lf&p69V*%}i~A55 -lU;1UyH4rJwnNd9K-!v5Lm9bC5u$?HKG%Yw(}O$#c#UOgAZ?Y%8{*Y8uHsIBt4u{L!ud5{PJ+Z>AU$P06!p)blvNiJrBh=YBB-yTD4{ -0g8v0aRyl3$~JCc#5Y|u@yIOCh5eBE#@%CrdTYv@VIwtpy9nM&=QXRm4UT)RQz)NMxAS+8^S%Li8O`S -1BPGVleyliH+bCUlfmHl3xZ*1aRO=-fF(i^u~l+A98af2+6pXj7f1?b$<6pT0F6UfG>mB(G8~+>on4wZv0&RXvVw^5Rom7zY7_W%ZAVp+Fr`q#w8i~=`0OMpdCUCQ6#fc3vMav^Nr?w6Bcy-Vg>F*P@BqB3gVZ -F-$3YHj`jsYzfU(1UmBMqb%r1d4SggYxBD72r)*2NJ~09HrX|9PpV_EZGBFs=ozP@(BR!ZT0874hj&Y -%$WnGNRnfh}zLKrymzO2_lHmgA^WK1A|6Hwp9d^&4(B?;9?3c3P_?|w>ghb5Qqz#QrSWB;8gSL+M6p1 -l?G)=mu1KM@GU`sBKAAFh`vv0@WGM=R -yYcN7Yb+_s6+bYz)-z?;LNT)IuYB~w9$hQ9Jd -b*1iTSj>=zVf%CdDM@x{Q;d_5A&zW$xR_kp6cz}}J6U8W%Yt+yv5wxs5Sw!B -UUQJ@y(=~DkqDe~C?N41)MAxOsvM3h)TFz%{btv(BgSm8sP*&a23t*fiu-6zwCxOrDi{#PxaxJ9b(zK -*fp`LlDdn-yMb&|Ktn3D);ru_+WFbj~);l8-#$D{q2eQfneUn61l>;tmd7-4~D -^Vdf%_vtRbqx(|~!rp$(Jk;z!+=HKz;u=g*Xb503H*Pc~X5nu~SqVch2N4V>PZ?go}b&8RvSzTnsj2n -<4dUwY_M==Of_m4)R4uZ(HQ@#L9}4SiD#f1Z+P;R!kT%JONq&UZ6)uS>4|*B3=fY23cmC-=*6q`E!(I -<%#?wyCTVOp(6ep4u$Nn8KS1>8-YbMiMkW(tzynBU-C>sYeugrwSBL)DgTzn^t8gs;N~#^l;E{?dSR| -pPi+xcQVi>rj93oCAe8{#Q16)u`7Nb+KbIy($ZO43LDCSbgDZ1pB~}Z -bsaG(>2{L?OQILREssv$iF&y#DbNtb0GJN-g(jvVdI -n=bc4dq1=V_Lhw7)$JP(J$dNvH}e-$M36=jM>GKX$gQT)*mbT;+vHikVtnrXEbAL)$o8MA7?eoUs0jw -upIBF-HHBYsFCQn5uNBwTxVKhi3a!*mEt|L<4S?-0)zcS-^H8Tl2hmZ4;fQGFcRXvm(J)PM+vq8+M4a -)26fP^+&>KB|Iv386h7H)7W{L1n%F{;E_!0Eq^C0UJbOCBWnX3!SPuU6!2|~J_kY_-ZwO^zx2&@TQ+N -mc;--6va&Fx6nTu`Vxx*pdSbbpJMIrnq(~F9UmGilj|2_F_+~GlO>k>Ut;bScuer#dq!s@;+~F>|HnO -!OnrIXFK&{CRYKc=7G3_n*@*fXc|?!Zq*>7;6m45ZBLj{H05s-RT+Hv$=-`VLyL+=1CoFCO~OR`n@?kd9h-o0At+_F(t1J3;QO2FKcea0Yseyc3hz&D1iBDZ^+EC-n{`cfEybt9(n`BFHR<4S1RX?(&o14QPlCa6 ->i{qq3*OVo@gYW9gxQMc){!!1EMh5fnpAN*FEP#B630?uZtLsO48CU^WfP;csF-~yX6WHnA?X&N>VUa}dNDw$u1BCVWfH*aj_8}icrN7C8 -4S?U!>*^4cGtoI~`}08^+%S03@?@h-td5+3 -F(B<4a${d*FtWzczrwF*n!HODe9BhjkNMImSP!6Ib`~njL+BS)E5+#MrV4n$FW9fxuZ3$WSc_grExVd -FteYc>6l!ojc7dYgtD(vxac|hEE6a{VFU;BwwQ!~&PK>A8mWMJ$Y0cFg{h?+C0N|hhrn*L^46~w`4~{ -aU054N!i|pv6`I*F6rRb!X{BA1sIeSN4n0^jw_5th!AGI0e^kh?o(x|}v#x>g-T!3C+aXeTmP7eQmeSYT9j7g_bZZ#7~uVT|$Y%RkDW?uUD2bgw|e$-T`lKT>dJL -S!_eEq^qEZ-~Wc)Yl`}PuWsno{|DClE -jUp0;Zzul_K2BLqy;7Hj-%g2{Q)1?okn}9Ngm0hMSzjWPb30{3KG=&aPVE#T(ZOhoBI?*h^eWu53C!( -zJ(4vucKhy>nFY#dsbtUQy@6sRur8H6!N$%}ORESjGI2EOV-xGQtjT`!Zbr0Xoa%d=l5}w -kHWej6M4(g5acL{~IuX8Z$t6Uf=)xmzJT*8+bh?Pk>i5E$y!OCK64R+Le%K1oP;9Vb+z|!D3QOnS|Ud -KVxVd%_EY|XbJSQs8r8aCM$x(GIqal%$w>xSy+>?@m@Wy`N@q)zmy$WyoCwSWOF -LW`0UYIZ*M?M13?(NNw{&^_j$P~a;YeAsd}k{PjP-K75zp}Es((B?N!CdP(0r!wL|kdr1GoHM67HS3B -aw>!_VdE7KI`i(Pdj-ClHke{w;G{1%@)<-FX4kyrSL8mr|qc>S2vD7?l9a1qkOo&vzcD>V`qzXjmjLu -ao?N{gTz|eenmEb16?c@0wn!_d4of9Ke6P*c%@24*plHuBv_V3PbR2f^PaJ7s9#;-TGsmSUEt!+N)%fnp)H*;)3_#9}-H7Z`I3|__<`vyi1{$c2KcoBp$rKi=ce>z6VakFJ& -w+288ieAGZht#Dva@Hw%kZn-GTZ=?Oi1bG%{fm)3$*LrG7vE+nmOi994c8crG5A0OgEU${s7X84k*-$%Esf9Vm*|e$6oUc!eBK|yjbEXeGwK6Brw7OPs^0@^-hv5lA1!laK>(P}baBZAq+N`#NG7L;NqYL$Du8X -vgIo)e7`v4jnLhv(~1IBWiFWFPiq+j?_$`10sI<$=>B`4mjbBW(WqVS7jk^gz3I+#wWXDYpj&YqBw -Hb03iHa-p8#=+ItYma`Osg*%r3*sX%5uipf88)wS737#Aw(h_fGP8=!?l06GnYiba&BMPdkET+ATg*W -p84~<4G!KpSm(%?8DPb@h%xvw&)>7?WhL_s#^{pf==c$h+yTsvn;Rf|O(*f4+?16{Pmp46%>2WdOK+B -g^Ke1fetc>_bofc47H?pR(nLaZ>{U8{!LEL*FL_1OiK+%z(r;ePLF$P8G{3gz_00cg*LDTS^*BXti*v -hSO6eQRq=v#E!>D_gQ_&+b^;9&O_!bp1)Kk4#%D*?5YPLXGI-$8DynkFJ_-MO?c#Ez#Jnulo0K50(5Z -xYmqo0Q!*5O_ujzTUX!vNcsNk2I=1F_QNNSD4lHQ-p-T!*Bxw?VT95y64Zx}ziSDy(a!4@@h!+l)2{q -&iv@-Hf)ulI>+z*Jbd5Hrf}`>1ctEvfG%u!2C%^5f!8DHj$cVV0$;C{;TnGpGS)$rBwM -dDic+sdv}v+-kYvN+I|t5Ra|3bhBDgcUrkkKmK&cDip*42v#?;1=#?v)a|MTCD8A03nI)lFs{`z0X(C -cI1Uaqx4+5hcxW`0LJ`lEPo(x!hGGuoyIl%Bl(fcxoM-vgrGU5tzX_E%qlvE)czMBI_pv=WdzT|wBTn -g(hiem@v)@9yk8tw#eW!IqCh^g?}QMdGTm@KF*9bB6|51au_a -E9quyEy;)?tr5^?FJ=x<6jCWy=J?hCM?pKw=xSP!{G3$#oLGf2MT2NwWRRSE{(J6yQ6RNKHHfa%mfVo5??gdh(x3<4?kzmTx(ziP^6xT`p&5|SW)uXHY0r>einWb -4~<;~@`ZY5Y(61bDsRA97Z}vEQZhWEsa-YRKRwQJLVSTemp`S4aopbUoW6yshJh -wt|Xit)4I!{UpGhL#6mqY4a)oIRo-2gdGu8hsqhs9&DZ&Ojtp8WGlo1lVzu0fcVeycunVb3zU$OiEzR -m2|;skdA3zX#FQKK=V^wq=2!TfmDmpiP8M%GBAD7{E~+O|RRRVTuj -^NQ5)!9G6VQGCGnCCrWK9c9}=MKCU=oY|ar$v5#AP8!w`Qvg~3>GWWlTlPUChZYfHmM{TvMs-B``Wny -74SUjh`*e-L*KX7@V$FMX@EB9u$P8QJ0~!5q+^PdssI@n1-I?b78m~N|KLKsd@MV<{*X$k1x2Ix54CY -vtEnd=QT3G+y4BJ7x1b`hgy`LRfSOfdZel0(TfCdu)cHH!SHgJp-Hp!P+)y1R*h;M5XP8z_DpXASEMp -~iDs+9Do;iIQ}!^clPS|~^<_AhBlRBodYNE+A~$5XA_n@I5OVW0%VKOCLqm0(@5inp@|iu=blJrgU5z -pC!f4pw{m(JsUus&yIY^YDpNW@eWeKG_@YK61*4Q>res`)F_Y&;_KtQFW<@PdE#=RjO8PuPj$nd?%i! -V@b|EeEi)<>%HMBrv?kk?CnCiRl~J(>g_&xytn)P>UuM`-uK__J>30%Wj(_KRgDK!+k5!%yN`ZBaXQr -nA3__C9vcN~1FfI|ulF7|P>I1cPeJJV+jrz`BnCk(hOk8uI2gz)w`>%bY>TFttRtDn7+^7-Q}PR7b63 -_;L_K%=(Sh<4M!{QAcbkWnG4bN$WgVR1{sp~2M+)(4m7e62$#Rhb2c#hDvehlKrICG)ePJhwy8I;fRw -x%M*%lrtn9OsRg?am9Gdjnlf8@z~m0VM`c}(%EK|M$~H77u3ZGi!)=mUX)Q5yL9n}f4+ho$kY!G}+uI -F=}KxR1QJ!cKJPM}ecM#ynTrTUk*X-Yld*JkfCXqc17p2M;c3v$1MX4XJ8z4D}Ipq_(u*Mc9(g>+n4) -xRAmnAk;}XAxRRiKES1wQVXml&*y~yqo;0XQCxTU+@q%t_a1%!*ewW?>fDLI`yukRZ#3A~K&@4ImR#q -bQ6rcxvuT`FyrNWC0JSJnlNN=R(h}afN{q3E==D~hKCqzGX16>sKfvQ4_*cDg1vHEV)-E{7B@`B(LMeWB^FRM#Exs5i7Gdk1y3}Z;a`jIRZuyQ$;xUG2w -_sEmcMh0SP}n^eRi)YIG`tq>l|tx~B`H|cy{w@Y{^_zwrsS?yejCP5YcnjK=D+gr7b(wsCaxQ?UiT;= -M*C$Pz@%G_6FLQLAREssJ*$f1zVqO@5Ds&6r&`-|^2=-S4^!HLBy6}vXemdG{hHKvM^ud;Dzs(sh@0g -Di^3NCg-yKHC=gY(nlgR`Uak-S;i3$$+rTJjvCy^7;yI0!nOE;yrv44jG;BgrSeQb=DXBhX` -HeiHC2t~x1dGeRlG~f6=(;MhoPFCW%w=niYz0g+s(Q4Qme4+@g{~(_w#)OkZ{D1qT^zm$ZJHoreo7ZM -hcWqrZO>C-#FTRnm8oxj8>tg*j-W$p8j`>pZ8>zdO!f-}!FMVL07fPMVwjtv5Tv#FEgeqKl>~)|eJZh -XPjojogzXZUT7zp48HxVPXNisCZD#S!R>F@t&N<6ObZ4>cl4*;85S|}P6nmMd2_UwtE`yLu4Wn&xG*6 -tTN-Ca=BWjLP_0%|@8Qu<{_ZD8 -szoV7`jg`$Op1UhX2WHS>D4j|7_YEf`<39uSnf9%SoSi{~23v`ofgzNFyxg>pY?JcxUT3C%c}Qo%h{8rh$ch7G;ARZ-HOi?)KLD^HVoxPXD;bH*!x5D}t#;_I?nK3k}f3wb}Ts}|tLjq{5iM}yxT -{-3DA*KvsH)}CO{5C!zlRreq7n7y;FPJ0w|cTvIHa6J$YR_)p5<$tvp*4YOa60&C1qR(2+_CbW2Cgr3 -^$8>4J98c3bpot|=thf3cx8bDxn|8|s^W=w)SWDyb3iQNilNMK!qN3vLFSU$ChRv=T5t7_ciLeWpM`~ -RjG26UnaetA+U8f=QLQFs$Y7x9w)(zaJ(QXoz?RalEX}G8Il92={x{Q{kGi3U_Iae_8=6QVwo$czlzI -o?npA5|OTVN&?BZU&dE49}K8VKHAyxe{&S4yUsa5e&IW0Ke|DV1fB)@nIx-vmao(9vPJI(@%JqQ*=B; -^-jmB``Ej2PtpRT%u*n* -c<2PB}v-xeLRsN+MBSSwVUK+ergFn6%KLntKxBxa{Qc?#KogbY=!<{FOoH&lAm2=5q^!|4Ywhd4*+Z`Bdf$`3T9%|yi)X+Ve{nwv2hc!klN?uLM&MFz@4#s8nZtB%8r>`R@0 -A!q@m?gsp8JkxOK+ertFdllZ55kprRqSJ(k`s5`I3+)QJW#KUrt()fd^*JSsW5caiF~yaG^6LAVG~`> -YPRFxp9GJOcA$X?I1>|qrl?n!s_Woux9pQ$?O}`=L$j;#nLndTr^9{B>^hZ6n@Kk?2Nj- -21_Tlmku4CW>qjaw{n(2DTLvme6ve&F8BBWg?GVJy$=+)?Z~|5!1JLwDz54YrB43``T(J?2ooc+Jd0; -joE7mDbD*iBDAPs20;Y4x`Hj%WNrlH;IBb~TSS)nqrvWk<2T<}QMmi%a8XYwLupbQvyAP2##f+oaGOj -Y*B+B}7s{>3iAhQ${lh^aY%JZ~{slf8jc@ExL6VEouZF)$pinvd058IC6HtZ -0d)AZRy<1MQM>jK;79i>Vuf8EuvJj96oC<5QCy%S6oW$(}+hwW~RSb_C?VL7BQqbHz`py)=;pV^9TDk -Vh|%4v$})`^!X8aRXZP+B}Q)blM<-tB`DWKWoQjodF89-?%Z$aD7ycZ=Q}<$H`x1=K0@d*AX4UFdGC# -e4wcglo8De^DT5*uZV6EM6H(C$NQh5ILc%@gQ2}fY&*PI0d|I6969?UVBH6@)tI=EPud@W+|D}4?fA% -vjA&!%NjTPM;(ZtLi|PzHgjQ>Dy6M8j-OTT6b#1s-*M`Ba*#`qc8V$!6?WY#24Ar!Uxi@C<@{VtMb8X -Xiv`KsLf|f{^$97f|8h7*PGT0aKNv!2Ome_oDwu$?8marBC5??%@EO{eEF`iMiPXYrVtYCG%FL7;ms{ -23kvg=9Dsf=+jLciBO7;&0>AZ?0~fWC*rm9ISdXfdH$D^@P!hSzP2T@^(jcWH6mewb~TwiHIz@%W(|2 -&_P2Xln|VjuC8?5^Ah^uD?&xwN^wOKMig|8QM^6wN*^R(qXqpZFPwCLPZwe? -EG>Is^Xv|rX7}4CcGz(Gs4)J3z5Bw~O1?OJ;e)$-ejL#4@NTEy>3v)^1pMT~-rnxVzO?sYh`-u~V%S3 -HYaAl1GbY0(Vi!XY$F2;FlzX>vU7I_@?bkOVWfaNLz8?+UlA^rv4>#W_T_WK0InfWQ!u@F13y8sK4}` -aclW=o@qq`g(aKw;xx>66Fxs15JyL|3s+WsbLbGBS2HH*krU1_B4PmQ}1v&c33vVZ)dNIs|e(z;}31= -euQ-wo9HbvKF(y$VGylNVAbMUN^6Wyoz_Av(34^Rtg{IR4TD_iX -&G0>CAFUo}^caO61y=P7f{Rfvq3m3RJ5tLRmMU8;!|T$UUlHhdl*Bx4UT||SO4^qs8JCd$900pUM~&g -D548FbU2Ji98>RJKF3<-Guk%n5G^5v-%TdWwF-j{-=1&H*fokFD!$+X!{YcsE?tCepT3vY?-Z=tiUm7 -b@qY4?oukIU;s(L_J8EA>3tdzsE!&h%XDP+CCs7{8EminS?7&XvadR2pUa9N{bd3(K1#q(cYI~C{Ir* -$eGpZx4poLsGi>hqsmRLAqRT6}iwws@KPv719RUmm?Yb%&>RHfgA=>_qjEmpLuT=XL0yE1m5tTvM{vrJVI<4WI0M8bN*d@r8y6~_Md_u)9xw6m$BN`HpUvnsrx~M@Rb*y6Q8&w@ ->vC515bndMi{@eat-uw@CHzN8U-$~S0S-+9lvkPDm~%iequcd(_$rxp#M!rT8>)d-;vCs0qbeT(0h|F -NlFqWcNJbcjqjWJb5Gg;Ui!$Q-f#|>@fpKNgo5x4Zh^VM-rQz)>SP%=HC!Z6%Hav7I0v0>SZ&B=HX3N -KuDDK9H4A0IQC|qMSwHaX0#T>3Qr9Z-)_9*V=kJt*sUjr1Lf-NxL%2fGXlhZr7RPaWFr_|Cv6~s8Q<4 -FrBcBrQk018iaFdYzwsj!oxs^O{+BUKz~1G7W*76sX-+haU(QBe`dWtk -|%&9;|fL<5L=xI=z`M6T*jCyOug5x`p{oBO00*ViErP^eB%MJUIrjFWhCKDns|Y7zk|_$q(ylyF~8}D -MFG+~DQ2u)d15Xid87k{`_P&KhFkiPZVPBsfz*p6kZ<%9G(RMi?vnBx770>j&*W&)Z#V>7gXlNx{}wW -6c9n^?iY*vE6GzH5%3>LM4}t2(S3L+&KiZ17=#mAgn~}QgU=%fBaYiR-<%TLvRLH|Dxsi83N|?S?NL@ -FVz^DSEghQ!Cjpd{ymYA0+s$2~X~uOp^*T!DQ&JSdX4@3k -761-EK+rWuax^gu5c=ui|WOdUHbO3VPmpr5k}`kh@_-;Yp_2s@f^y8%Lk;5n}2pNrhlgx<6&D&Umwu-8~lDV?)>`$mh{8+$#8i3v(fB6Lew$;^KyXd(tv2A>^gxG)knt) -$bfXPq{{0@{-{E&-sE^42K2-4N4mh+E>S0l9?z?6lrJPMQQxTN7;NZy@};V)+Hqw315h1$l{3%M*j&X -WsedX5wIs<1jE%S+D^ri_`A*I=9xw{i7XW6Bh5~8PNkbp4kTW`oN3^deI3AajIE6zwsxFh@V%rLnxtW -(+zL`gtM;S)W)QLx|vr5@)8@;j^y4th(i&JR4!ulez^4aygG@*jLhR1ke>;oF6Ai#+jonAojUwgVnj| -v#B$+x`|Ddd}BpLWm3=bX`)kH2^b@o>Li|ADYrN&oBK(QeN60>ho!z20qR;Zt!K_NSb1Aq5wxn(;1s3 -gH*}9lTFNm;1&-V8dFRpY-Wu9IU*qL;(Pkv7iZQ^UqvvsQse)dyGZm|dPVy4K6x$(cni2ep4&x_$>B4B=Xq@!XW(-(FL_dC(5HXCE<$;eMi+oVj^d -wE)nVM15saZpyTAd=Ok990_HE)f9z+H%9&<+ovHRdS)CwBg9uWap!;N{xp;r8XUyz-=<#)Zy^aAw?qk -Z7m6HDA-z{aKg%pC$ABhKw9!+Ni@csKl_b1XQ0>234|ROMD63?hWhIrdDtW3Sago5m{fpS9w3l=RB)@ -&C#ocbvA*tSdQoE1U0$;OO!fFL|85tNzvIhFkqKWOjgULG8jsV0G|mUAd~-IBGyoMY}Z5$F{T*U>4a_ -;D}5TboMox@i)&y9byNV-l~3Oso{U}}Ui>82=vDXek_EItE0dh&OYUV}hb&M-q`X>T(p5vyJo>$=or& -GEsmCVT=w=Skte!x#MKVJ@h;l@r@)P6f%jYPEV>ggB)(mP!2Mz5$sFlGnMr;b{?!p;Iq2+ -s=l&kmoTp1t6J$oKDmx`~Tf8M10vRt!Ud?`!oPr)(kd0#xV%bFIXr{uTM6NO96_g0z?v;%qHdG>)KtT -Z* -V|_6b#MlpAUk`e}wpQva-e&#^3)GER94t_3D%A>T!s8}13})r_VYmqmgH_!h274U;bzje9&g5BQK!R( -MmST0O^bVBqFNZQH4nj=?VerQ6InbQpiS6-dfakz)#wd0MWgQ?lYj(>Rf2aPs9chNJb~i#GI%b*^+0^ -xww?->gAjL$^m#%=bA{I{eJS9?fiBEQb%eV%Y&FE!{vN&GQpq=-=Y@WEi8B7iPfN#t-Xp7)j0{gB`*) -V32=I*|HatYG~a>qc8qkF(*cR|7V3(*eLGHDI(%5rZ;orG4>a)wusDKE -d%$X=k-#hC%qOS`Ys)%QMIIf)$_3Usq-9JJ#{4Z4l!H47Q{*8hzyXpmlI^am&^J5w&VH4?~!w|x8D(h -__SZs3LAlyOX8mIf2Qil1kzU^woYN&NezJdD;5J5(%Eo`{+uN?%3C4?kCRJ^e>_1i5nfbIHM01dyw+X -<80zzXUChR-1THNSCZ}4JwFw3~ZcQ4;HA7#Ljc5qFKE+0xQFG8R -r|T>CK;`B}k0r1hmE!l`}qLXi+UxgGNq_CdHyfiLgWuQ=j0w>%mjO|L@P?>TzFdyo2L6`+eQvQzOJ@% --^?;rz?xyc}U@NptJ|IbIOhKuO0Wh4|{+;_(t371*+fJVe2_Q7`%diUYd4iB~2VrEs-Y<)G-uG6Co`9 -U4cdz5MIvp36a*^t=-&Q>j6=uxo34Xt1kwrVI)sH(X}W;la0d)B?{)648j?(qtk$?RHSaBhbVimC2qC -Z)ohV1T;FG_p4>$!(}N|3&#Mp>Ca#pp7Qm-nr95wVHz-!9--HaVLd(oFxF -uM>*yghVT_*refLd~f4Qws`)wx$UxGE99Dd&&Kz)Z-xWr)nY8$I>V;o)K9DO`=3GvsJtH)o{OsUSIZW -pWUWwjX{%;#EfQHFE0rW*!XypzdftMv&ys;mhaCF4E%LxzJs0d@tMy7=sOD2;z~Y1D`OeY&mz6NwGTd -hc+J&@!be|Nb)r3X5gmK4VaJTII02XQW}L*>qfqF|zDj1(ub{gXkzDPLgahNmVyFOl_8yWR>CkbK=HY -SR9{?o3($Z_Q5ooGnb!nToaO>{VUPU@^;{i>g4Tlbl=QBcR$+g1{=G=7!3|y@^lqm8T}UGtyUbL}cTRiRL9;B(dEf`q9tHEuZ}2`42L}L?^qS<$C4sZ_LhB| -JgD|g2g=!X+z_MCKVg3;@#q<<*N1)r37Y -E%A;=l!m6;3zIz`((mE(O?-2cL^qg@0BzJ`3>Q~p?k@|f4cnT0HckH@3Q@$KAmj<;*ylo@&8S4`#%|q -Q~t)wKBBH{K~%V=`z@3uvb+FKcF -5mzHk>nV~M!E|Wz+vTo!0#pmHHEGPL*pCzw`ur@|n^Mboj>qHTzbGR4wbF-t=5~~rfHz{ah_7*ly>>I -7v0>94jd*9CC0b@`hRz^jMjaJ@Xty2@T_mboF<=xkr6%ra&o+`>tz%PAMGai!q1FYx39J=@uJ1zYEk@U-+c9f{(KAuLZaw^ocxj+ -<~v2=TpOq$Oo^>%|F>5_4x7vix8}!~5g)%b2!{1m>3+$+zwE+>{`j!t(G|&1j#rG=dXr`kcg2S-p5Mf -`Wwhg$l`cqPHSaYxgzbOW2@EKH{EpQ;%AjnM%w8Owg~-gw(-y9acXV4STi1#G+AvWqmCXy+>SIhHEI} -j_eBv!!vytaNwRO+DW9`>{cHD-bdCi*ZHsn(wqrAaEU$*QAC|ft|2^b3$mIp|K-bOI6cO&n$oYrDrym -y>9(qIDcz$-L!3(br|sHMpTav@x2yab2}`d>q_!rA)c=TzMB`z3iOO?HZp{C$w8%t~3S-Wf!tzM5TI+ -&I>q@DZ>YO_dn!W{Tqc;s!>uYYcS{mafff*s7^?SRXRpIX3Z`6^lFIqmo)eEyQP5%nW>HUyYA9_n|xd -e!LuOw^v~f&3kS9f&&^hcgo1P32cDAn!91)ZGUcM$-;@1@oRJCCQAVYN0JyRNiojLWFO5!ZU8MzZHC^ -gc-!d)o94@k%{~H#Zj6$pxlenGtB`U~T}xzVX?lT;iRFiPnG236kVU`E%V>MPwT%`%OOs -nxizO9Z6!~;HX*yJ~?F;&GK!f!rTzVCtqJjf)v8zPaWK=!8Og-J-inaoYAgEgBUisI1CB@CQ*IkVfuC -?Y!upUv&-0HYATJWe1Qv;6Y(K9P^q>caqn_U?0a1T27ru}=Gr*yUH&J+fA;i0&3(H^A?ye9d;%IdeCt|_z4u}7$w#B*4Zm4y|9cRj{$6PWBzI9F`Sizin)__`SC1t -M$>zw!Jzuelq$ra`{vM{r&_E|^Ll}`B9Pe24FTY?ElpibljQ+@Lae%upJ$##g!RDPX|^C>KLT0yAdi!I)q%7LG3N6nLUNjw} -jV1K`^5;)fL`-I3XTDs(Rrv@{W6Fw^wPm^t35p1jR&am!V4A~~!)?+XWy}FlgGYp`avvsz1FJ9eUOfG -~A8f6+q-2P&9?R-eDjZ2{JG?xtDs$JF5mMQ&8GG+H7&ZZL=W^P6^rLV_vtX-Qz(K$XSfzTirHzja>ug -)z59_)CIx3xZwwyhM7j1!;;2Xf%dT{fVA2O8dsq>Me~0CgQ~qJeFg&2`oK{70UuZeN1bWjz-9rZ=rJu -f|V{AzA|AKh}^0<2`soV2VNdKDZX9+D_1vh~q5s-=wN9?>MoEOyoprvFsZhew$r}R4}HLw^|lCnrIO| -adVTs_gxshS#{W*rBYJ^>q`nSGiGOwu&*wibCNhN{b@p{9TfgN=sb -W=R5DOuk`GCc9zECcHu`y?oQGOIAtgrBpFgrrw;LTN`U135J -K^^SIKHzkWQ&P;cPql8M_(9p9$Hl~vE%i|uUnULl#f;J`V1-*Yz(VFIx;%Zrt2MBBdnZN9WFlqsX(?M$R`Gf3KSmLS$ -_?m!0THxj>mmcxkE7#`qj1-fLYJl-|yS2QL;mF#Pd6(X6<(o7LtW -id*97WFaRj-Un{OyMSQNTgD(F_iMxPs>{pA1V<}Lt`CsBirc_4n`5q!-}JE82N`Qfd4*%9NlUbM#Mvb -2s);Qt*U#VAqs51m|Fn5>)K$5xodPXcs4zHeZHj#eKrwh5opF5=oQdtB&dg|iIWWQnl0TP`6 -HNC!bzgxl5P?1)($#PvJGYZs%)%tcqP -<*t_R~J}6r)XZ`hq9gnLh^N~e -2p!b|71Z8JcWyCizFV_L6}!EDBn~r)`Mty+6q|xi;+;4g{|i|5DqEcCO)ko5qU8qPdSDsX*3M$LY2LU -%svxI`GLldaDkOD91{&V`o%$wG5B{(Y$d+WEP6tjg?HRO93KBCRs2v?dZH#`iWlOGhO1JDdLG>*D}W{-AY%}usV%X*A!Y#T{e$2PN}g+dnjnwn%!rLuC3gcBBPR4hacrs -i04o4f`OY5-eSeIy8!8kvLG?*e!lRN%7d!3Z<+nG%LpAlufIWunS*wo=7qnNL!pQk{2G*t~fzJGnwnn -Z5&WJpY7G`GB@>I>4zDES!$Gxu>4X97Xnb4Ye(`DrP>%{HCiW8(h;_os$PW ->P&JknKY1ujawoJCJRGCThYK_^gj8;N1#e12GKQbn=WgAYb-Ago(hxLW7x3b12~MU(hu9N}{RjwSLAp -1GEN6WNqmok?20ELV$vN#)f;br1H0)gK@o8I<1Hp6q$H;MoVnXqhiB`{c6RK^wSbLjgyDN0pKFtcv-k -RrEGIn=@MVXG8F@u+PfwrD!SB-4)`A*>PFy&hFTp#}0vWsp&gq2lo1gWQe=1nTnEII(iv4Dlz7bv#Tv -B57ZWczA@smnWtHLn|gcI@5SNJE>BNbz)m^p@{j@iz21jitW3KlV7!h_aATYe~NuDUZ{7F~ouI1te=7_e -TVD@af`Q{Cz&(A*zN751pS>V6YG(tJYLGbzuWdg|Z!QtWiqw|X&pj?{!H9B;VBMH@V?2rxMP{xE -%n-TZ{|pg&eGCXt=AtrOmVi}((*1se8Sr9g$H6bN@7`K7iK-yG%R8~giARK)Q(`|TfBNuCD$FN(<)Qr -`hBjG%;ln91F+BOWNjWJ+qg3rSw8KMROG*7G~JO3^_=t`VET+uxoQybBPXin0c%+J4TykL_h0+^>e$O -?$3M5sl~?@vPiHkEH1iqDESghNEE}KDm5NbIo~`!+>?tRK@@{k9Ri4;AJ{<99S}vf74F#kOc1kjxgS% -Qiou}90AJn5r60pUi;BhSk1`Ji{VfxPM)O8oP3=5p;GDK_v=>hL$G98ElC=^n=oAccy(5>mNvlm)+r2 -vWwF<+F{(^LEFH%X#RhNSZ(sbxCfKm_N~< -|Cb#v&HeFVdk)Y=yX3|ow(DvT8+GO)@QyAkEwx@TfK$XG`k!8IaAX})vGQRhS>NrQwcpJx&U(>Sn}yq -+h)w2j1|Z=dD^*hy%HO-GH{vUru9%a?O=MaoYi++M)WRG(Q`;G%X5m%GtEK -H9;}|snR&kxsG+{!NtE?r_l`F_X9j_p_k0@>Seh4JO$3%-hrrT6V7U$g{(|kxG^8USF}qPiQgKA>$|F-jB3zuO1b%ZOzp~qPXRt`1K3PoU -JXwWXnB149z_a-?bwxnL^y3K8$8WYaB&3Al+dUeZS9d7)DoW-Xe6|p)Bl_Io`;^sA@Zy9##8#rZLKNT -k~sdAnT5=Jv^O1$r6W?N7?jRLyKVv9a=9CUhKlT`G&SQv(p!K`d@LRH^ShmWJYpkCdYGZ2k|2K>A0}# -xLC!up+(F(bvD69Q_FR21k$Cg0v@P90z*01ySDv8<7qvjP6|QGm%KSsUZvdvtR|Zh54OchxLel1VB)_ -O{*q?u)m08gc)4lk%f0u?OUI6+nY87)tNr9__xMoZV73tzwK$__Hveb!jruoN7_020o;;>LO{o$C!*z -(+BU&>+es!xI&amkOCpOx?5ZmA#ChL#v`Z?YM`0ph!`PJ>O1D11L1}rZt^6IY2+SzpK*^s|76#3(iKl -wRMs|py^RWiq;apkaOcs_)}%j%6+Zslj_Up&VId*p9xZ(Nj13h%#LDQwXK#<$?n+&j*z3Z2@}|6yS%9 -7opZ%e6IjWm=YOSfwzT6=qKa`D6hqa@FJ&ahR3MLOg-ODTH}0>iYKW4l6#Uxse>B70Gl|DHH52-$cQX -#{sEn9lENUmv0~T6qVrxrZ1Yv+>G}!A2u{693hsf?=agpSL#@da=l?H9&)ZPLvw32{-dUb`E}riLRi7 -Ep&6CESQ=bp->ebf1tJj`-h4#y6l^vmfRV6Jo+F3ENd-$vd;W56<-IN;_Ie!~gqibb$tL!2xtyw!t3WnYD9tT^{-LBjJ^>0Q^PTQcP$&!%+ZE5 -M}SS42K11}_o%F-{L1JySv4=(*P;I$$1+;2V<0Xk-bd>X_C~4sRxM@H1ICO^?wctUAt%3ahi9wgzWtZ -NA~lcChrhs$3e!^UYcvh?VgXPcU?3Lo2wdCBmHe;dt= -3=O%iBY20L49{!q)M_=-h_eg!IGMytI?UJRcIVDC0Qv`BK8)+506So$9Uii==WF%J+V=5dr(8F-Wy_p -Tn=-*LcV+TKv`AcQT&qKxYs}q{=Dy{)iKC9v3b^nnz*OI`4>=AZmO=MG&nq*u^i@3Zkcx+Zx~4?ddT1 -%}Yd~dI)yyS{$^x%KNknvA&g>q%!&}Bsc)Xm=C}u6kG^+!wB}LJaDh6*>{IIX$q5=>bJr14(jdEas{T -il;#73dOIitte#DvRK4VgvKIW92B;$DU$pEdx?lp!3adQ}i7Un?~=@Swa>wh{xY -cyT+B@+w^Y643wQU^+k_v6rHBZqf%@f(9tZReNUdcjM^4ZOI($)~-;v_CJ2`etM$-QL*HKZ)v?;$?J! -M2^%_cy6bQcJ74=wC-Rqu=#SigaJ??ZFE*yS&ErC&1_w8Hgn~YqA!g141ztE(fzl=7A!=0 -T+yWgXi3C1@l$k8q>Cd+HS6H&^cwo(0xR87`rOx2`zw~MCBg71ckAYz6@=ae^e5u5iuHQUI%KoJA(lU -&CzUdjB{(p&UGk+}}DW8bPpWy8{|;Z51F38h0kgY>)n)@t@0RRBX0ssIY0001RX>c!Jc4cm4Z*nhabZu-kY-wUIUte -i%X>?y-E^v8el22>gFc8J>`V@ms3Am;`?4^)H3;A>VOYW+cbieEN=T?`}hUku`cV@2 -6*Lt<}^1_b(VNCkj1ya%}ko&L(Uj2FOQ*!_$xb;SqFE?zBoHHq=pLGsRHDUKFJr87M)EiTWVDIf6rI; -xLNNd4!qr5%7&t7Nga*i&JQUR+pK43%2Zs(c^$2Cz#RuFD-UdCL(iWU~J+m3SvImti;hCETa_76&d=g{x&BR -etF+{)I*tPv(@l9|GzPZO)}`pDjAq?e(9$aLwFEvYy_rAeV|###ry=qId8|U-@(edO^FqoEb~uBaE&TTp -#^`pr|iq`meaj=P$V}j`~~u)yYr!4^T@31QY-O00;o{l@>>jmU58HNdN#@Qvm=W0001RX>c!Jc4cm4Z -*nhabZu-kY-wUIV{dMAbYX6Eb1ras&An@z8#j_J_+7t(quE(WXH+)tMVixnR+dVaZe2XOxNUcPy~)fZ -nXV+0m6@z6Y0muj1LOto8vv3lb@x8I{q$oMBLYAG2m~Sm0pu#rw!PneTOGk9&t*5@u2STbh({9;C&+drg_5%#+>v-o1-=&wGF9z0G#9`dj_=U-x?IfA@EXG(8 -J9K^}yv;Qj9^XoY#JFg=6mB|G*1{h_Kb4z`bbdAv`9FphdRNxA8L`uFG0pFjKN{^PpZWOp5;Npz-p+G -okGd&I -@51`mefe*aiM+`yx_DI>*qT%094RZn!LmZw}DkzTP{M9V;pl~QY_zbM?+_n?T=)mfNkh0<_mt -29`jWv1E(cdVA{=;=D#ZmXhI*Ujwb$$C?sE!D!gjD=>qXlvE2=_2(YJow{-?wNOLzdFQ4sg(NJHpnmU -Qv3fz?Y)ODKfZb0i?X=T(@9IHIP9zaV4r7UTvWZ)h4MqF+bX_!)XCT#SSYe>TyAuoaatHDcWP{>O4oe -%v1}(tt8!;Jd#~2JOz&{L2mkTyA3ZYbYtvf2{+2#LMrZ}!tpTm8zN!VN;RpZrFbc}xQSrc9*otYrYJ9 -WeXSLe?HZi8kVcje#DS+1SbPPoA!daPBGp?l9jLXLE#=flCwJzFGJ6^xBH`thwRkt-qhkcrafvUvdxu -$1%w%;o@4H;FFNn^tdverjx1e|65wWIupUY55gZ$lUW)!oBCV>+vP?%vSprEFK-r5zu{R|jRp>S;aft -`3=})d&7A{Xx%dTL$g5^+NGW;rYr|gd}yg=8@B2RsHuaO95?Eg}T;)w?}p}RbRfk9c%jSWn52wlpU67 -d{zy?*DmU+hTg-!-G6kd6|FS?!B!reY-E?!4HSP@3%(gqPFFJ*jq}oI@H;ARy-Aq0^T#{P_?=p@C;Zz -ZZJCy$px7w0O&R!67M7p)eyiZY+1UfFrXDKU_TcMtPj2wUH73%Rp_MHS3KW>2@^xVYc1I(ru -(J{7b|7*_r0OrFH8s_R3fLdm5+;9&3brNw*?+kPXt7yyJ~qVsN~UYJbt4`l`x$56>QX#;Y2fzhk%_sA -;bUtCE0fzVE;~wehvwpE;|U$D^M2q73e;E$%SJm8|{)Ra(pT^q`7OrtP`q?8T0dJB#yeCZxFu5H)cjT -B+`muj{&_>qCtH5v-F=X&UMxlxqMk}_;BFImhuXfXBDd4^%qg8JMzy2<3#ps5mR0^vZ9y5I -!6R&q{dp&jZB9Khd%PYYvrfP3u}gNlINy}plzP8~>E&dA5tQL(wflHaB_#y6hJ{5Vi1_X)2 -B|*4aiiI7bW&GkCp+|MpO?o=3%_zo#8ffXEWrySGtS)o96NtK2u$pe+zbYj5L-q>7&T#^6njIyPHY>EcN7!dKoqZnZcT -C#FU8s`~M^89fRUHdS#K)Sqwf!i7G-sa)tT{UaF2)Sj2@g0!u=_pvVC3yPlVc6?JKOp}p5E(n7rFnO| -tcI3Y4Jptk!NiFMWcw#sN6p)U2SQ5e%hwXEIW&XJhh -IX9Mx9Dv2p>ktXC0}-l;flTkNjB)^uOjGoNm|bANnub%%c0^A$wdz6!Mm>v$J_J{x>9I8ozulBG%r3n -dQmzBhQx6SP;G>N*eho8F)b(y5)IZJ<{-&nmX8ctwj5}Bu- -<<__dpoVsNOZqepY1ZAy8gIHiq@Xs-fmPayUbaL#B*!Yw7gd#Amv?maNdyn>>P7!pi1}ls%39ztE;`U -Wfpz@2OHH@bhli4BF&apw|SjqQI>s$*{jfU9cdE=a8SXHCUW4l&A3q~Fcjv?}H~%0XVVtISlHR6rMeZLGwxYg5nsx -IYO`!dHYSGhmYVT&FLk)R+bx3lIQ_)i%L9ekmk50iIdjAz`_L#BXsW$TL<{#7=s)p`i{)+bQ-p*04Mr -rY|QVjK9U5l$il0Y?0HSnq(A>r6n8j@psLaUpOve2e=9pT`FE;-dlQ+1hLDz#?@*4q^K_OuInvhnWOl -&v0Vsuq}LSN8S$lzy(|rrp-N^eORVbb06KOP-v;_&SbGj?rm;s!h3$t{hP!U0ZQwp;h6PW4Pl@6#(U{Y1e$^P;>>OEeEh)3$4;yz6dt1)8FH2T ->4^80N8{weEbz(feV&=bMG-zp^X#d#qA|7g~`w9;1Wp`(>xP$P21sie&-f=Ge-(*2A+&jx9)_Nmvs)( -C(r_V^bvdHcp%0HU0#!dV^kx&}Pzo*HsjU9hQb8UuP_rB+ku9Mr~o&leU9+RYI|!~@rIFDtF2 -g+8m-y@J_^pa`@~aku+Az-2U>DsXHHMk4OSTpBf!uYLM8U*t(iWG{rL3EuGy#L6G%T7wYLkW;TBM>8G>9E{a#l -PFJ7jnWY>WRIfty9+o -sA*%e1vsqo+4*W*-#*6Q~t%vZ}$7-wH?^CtXA3Z)o69!de@;FiT$5 -D!HkY63*_&8Cv{9P-vqcpYtJWdjwz;C?xMp`OvlamzLNecg%F-38bqFTNuh=QHc06`U>zU`O>Ew-ApQ -7iAd$GN49;vzgsP$p$P55GRTcTb1-g0lR(WbpW0El;46^$GFKq7%{*Z;#_wN{Jq)@C%DU@3LinoWd^$ -KyQ_LKS5IF$>oWTDw=F}Vz|l^T|L}?R84rHc84TLzkar(D36O1{k@A?3i9}bM5u;M5RCr|@ -y9%(W9D7$qlq6eZUu2u}1kIw3Ccb{U`O$tsD{s5rG!R>}I1pAe^2mYtkKt>aHnXfNOnBqv$k3{K#OC- -9>a`0)w+}a6(z_vOB1oT~@E&Q&f$M{|{UGr}m5!n}trZIH9oiX^`wXO>B^zQlEF -}aS?~7_tGYsbHa@Ke9{5BgO7CDf;j0$sewCfhLw76`Mdlv!k^Tq#v3_8azdRRPKevhDU0fM>zBw5=c} -@#b>UY^1lM`x!2O`#7PzZX?YMyd-*|vkKWbh+Dv9_f^ydF(-gni(Ao~4Kl+WwYdtxs8BQ8~id%g?8@= -)Eu={;-$M0$1_;Nu=QRHJ`=^jMV7!#qpv@(u6~PR9uw_s%M%=by`@!EViEs^2Hd)UiA&R0EEesserw^)on++uu$B1(QX-Ya@{l -O%XFFzOp)Ec-VCdbd-c@g+6?^D<1chI~t^q9`~+vMUQmIy#DiX@1fciSIKQdqFSns}vS^$a+_UoGKkSA3-^$;&rc6dzGc%?8?(ueZwfN41@`KQ{ -D^MASyZQv^n1s}7qyD=MOEf>@>naf^JLCxF^I1S;ueYt` -?O#jtmv(d7sw%6z`B59R&5z3PGVPlakJSy~@UwO>@Vlv}VtSdW{V4G6y-N2HKlhV7SHf}~>`G|L+G>_``q)Gbuc6 -TcZ`D+6gFOg>LzH9|NpL7L0P{Bss1iSjPJ#Rpo-T)$**a%iK})O(Y;$`;eqD7UbS~)vrVIwRmo|v#J0^5xKsV2 -P9r23lS6q&UUiZG)(X6Oc`J#FztnHXRZqw18w0fp|Eg4t*~e%#aXtN!h*-&6k`_MbfM^)5cWf7ko)>c!iNYC4&WMvoh+0XC{nZ=YQ}fA# -j_SzXs~Ff(-x>$(O{da9bYFJ52tUcdXx*}V6kpWc0Z^6}NXx4kz{-v7BOH|`I0vAWzym+KGas{Ct3_q -O-p&6C%!d#^7(e!O_!d*1uYtB)^xFW?wtLLv&FPqLj -ef9q7r#H`EU;Na2^7QG&+mB5Hm!ZAhxX} -{_wU}e4b4qM-!~1-F`XCBKc4;Y?$ujW*Nfhh3g#K<(P#!9p4L1}h7J#}UOf5u>HS6T-GwV~&$6l+(@v$naT<(b9&J-K*)q4lD&J(cTx(QGc3xtx{@Z7i?re}e74{&$} -h)gSsOcTri;G0Hbq>ywK#sdA0}b{kGxE4>0P9O#=LH0b}N-wO!{!s;=&s@On67Y=xtD<7o>ANqs7@r< -5?Ngg)T61Z@opW6z?gT8^T@*4U{dE$d;(l-v)lXb3k^rn`+gf1L#y59tC^`ki$-v(h0zCpi>8t5>X81 -L>$w$65-1}oWqCAb{T3~IkmKR-Y0s!)AfWq%3=w42&+I}yNz11&-^7UOvcRFSMr^}`7`E0Z*82Wcds3 -kQ6tbIKHK%&>(G{9gHeMH&D+=)CWCJyBU`6vgH#aC2>0xAM^m{W6vgyNiA72@U$Hq&3`jUD$Gz0SV-48$4;~LBvws3&78j*?bD&Lwo=g3TJ&mCOLocFC^9#F{1dG|E -a8FrkR2y85)4)!QX1s**&WwPkLXXnK|Vy0uA+WCWm9T&A(9MKLs=OWd1ecPN0JO6(6QBPSC1G1)~Q>O>x+Mh1~fXHlRx`Z;8@a4z7cKyW?=VzAo&!xbUCJsM&;m=&j{2OEU~=UH?JQ7QI-r`bWz_32?Vn(S$w6=viEV$V^b;OjuEX+%(7W@9tp&wPvO -nG&Qt*cdf8heCVyC(;7w_OlNRMn%6c*s%XBSg&Iv+{#A+B8SWe1THqDjLp`N#Me -TlDTUp_kyiEcncTyW?`1r1-o|^bm4&OVV`}p>OHpY2;9SCauTr+ikdR55Ec4{Bg{-47_E%tTUlhp}4H@~o;62?)^aVV_CBqgDP( -P^$o41d8Z}-Z~tTxRHY?`Kl=PWd4ojtdu!wBkg{r!~4JAa|1>6}0#u+N=|ih#wN0>Qr805!2Sh=zG356y_Y -u;;A$yfjvE|i!vyT&VCUC`FAXo_H*z2ZGGl+c9(-uh|~+aqL3!S(BI`R7+q*5I*z!OCMWz -v7@kNKnf|Su!eb5}Dy^QGNP*Z5L%g!}&lqE!@g8V2)+-iV7-z3a_8Me~nE3$?2+@{y#Z7XaZE6GykSvf0F$&Z2eipIZZu(7Q3F -2i9ZMXJ&m#vyg$oLYBU9cdJS^B*JgtM?DX2m#GjpBn^s;6Zq4AnuJ-8vz|V#JEkm@3A-@i`%ZR$U1Y& -1)#dG9cy$-6c?Xg(_ll3(Rc@VgIEp2ufFR!hkMB_Y^fNJkse|6;h`dN0cHxne%4edKPa;66G@(tSKaN -|@;Q$3BVrw>}}s4tqYy=8~RsidjgGs{0j^s=R~-NTWeKzN69rg@%bC_jS5(-9Myj~xPwN9=1>ykr=RE -R5xRjxDt991Gq)=1HJu+SI-r`q12Qs3oS5JMU63QAa&&J_eG+GfjO-VTTJ=KD3x3Auo3E&_#;EVjzN! -$d|@dpD+kIVqV&6tj5N&FNaaUBpw5G%6PlhEmXzc -Q@$(=AgdxK+*ISwA)@YZ0~${V$j9Jay}=p)?rCQg;Y7Ot=vgEy8u!EUO~)x_}`T+BDlpqiESM)=k!al -j^P*nTTEbJO#;a<|5Wy_GvDq7!fBPKpDcw>(^CfxV5_L77~~zF~vM(^7rhB;n;9h<2xFbfn`rT~Wr7- -|;0svnI0@3`x%0_y)e6xhnD2o@pa~Z?o@JW0!^_X!y6;u0pBpo|wK3h=80-cyMoVU=qY3K|N=dLq^Nf -ylF(ZBVqU{kvWmZIU}Vm@7pLlfTzV3sUn)n3ZIP$=gip3MM?(F2QGy#CgQNsDI;B!GD_7J;>5Jxq4k23|^Q9#|NU>5?FD1>3 -Jwl-1%;{*cE?+fv@dtna}}{sVV9T0*zC!*T;K9o2UV2z=2z}G-tI!f{& -!F1lG#hz3=Nq9Jt3ONQ4{VgBqsBJgRo7&dG&EKl+`M-?LnBTc1Z6325XaeXId71_WPBL`es{r9R`^x# -D4dF8(RUn9B{0INaIW4_IF+GfiW$B7E?TAmf@nCgerKC2V32~Ukp*2iU=cqZhkz@i%!~@g_1!iJb3XY -qoA^7&<~3%=yM4Ut&H)P@GK;{7^*g9&WQe|VgdhMat-e%Qb$KSC3kS>+Gm+4R2TbAG0NH5oOmH-sGHl -@hmD(n$?&J8V!sKKEk0J+0v7-^978?6Qpi_G`ae@3&I$QfeKLJK*KSN}4{lM~PX7vYK%#3LN!1;)#TR -#xc$g1{|C=Ky;X;z+o4?#IC@m{GtI-~)=!hSYV_yYuCxdhPKc+UeHW$(H+-lKibLz~D_y)p1gCNQ5EC -@U|pPt9igEEh)ykR%|98~A8HIAV{1C}T2!Q?Owq^}TeK5p{bno#hFYpz{GV0J()K>$1w0Hi0km!6y2&_mIu -uKE3C&HL$SBAO&W@)zKPnlzc8}WJG7^B1N2h;^N)N5pobKDko4bIp~O#pIbz}Q28Wsi0oMTu!BMbQ)R -ELX!%kgMXY;hqpV=})W+NVTXj3(?vWQS?RGDT74ViF^hUgK9No}(*bOZbJ7^ty@nWc@XxOvW_h3bFIU -qqtKID6$#2_U46-w(+cn;_Fy)RUb84@8*0#k?+%kPlJ&*C)rjH@K`mFfD2m-4Q~90&#*P4(g3^N)-$) -9}I4okm@MXiZ7Aae`WELWF%jSeh^ff=_lQR1qBDhfMy6c?yI -Bx_1f!YNgia#df0!0wBYcZ^*O@l{TD00=Czw+0g7%_E?3@VnAJv|QoyflcGM&wc`{nxUlnv=e+nf*o@ -JGEb$U*%A;q+Boq2XsI7U2=#+VxKMh4+G -@rO%E$JV1en=l!g03D3~=XEW3tl!#W{@Utiot)DIv(5^#x5v0_lmEOay@yE&<1mPQnc3`pF7$O#?V*$ -*zDB2XZ*u{lqblKtdNTnA1L149?U(0z<JtIC40S?U_8)a7a<5BJxxM!ceJTii2Fy7q$e)jf4CWks;uW{AwXm -V%_DaX@_emxJP9f!pXN3$~*uWp3@pWnhBYs?BmIHX}KXSCm^y$Y)R5BNE?Apkd`jKW5w_|>cb859eAa -dAd7TAe0k8G?tGyY#T=0mI>A|r?89MOc9#?sn-!ut-rjfVKqRzMgOXX%+0{-ZO~7@KQ3#-^da2%8>h~Qrw#?0LRWY=e8Pb?}RH8*vW)i!{+-5c4%(*jvA -F+7wLiU*bIbOA?ivt^|)?geeBL_&z-Pz`i`rgnn@b!|26;<_(8x0nZzOtrtOz2pKa$sfZZB3xZaMaZ~ -`eaFIh6z+}NGXFw(kLk-)Q*}!`NIiUGK@_i7SXH}p&E8xO`nlYs}J_1`R(Qh(>a4a3L5k%lLUKO7a=) -{{C3bWsM;r!|elvp5NJz;oi;)wwb_Ex`GhqqyZCiwyYx+#q(E)+E2cT^^XAaF?FBF*-=B#do9p>UBM@ -fZqa4-ryUP*cYoj*^T43i541{0}4|2vFC|LM?%sTc{AIz(OH*g?+w35#OPOS^*VVs5MZrh1vkMA{571 -B>Wojgk@}D!1$b5C?I@8_>&sZUOW$J>epY$p&8+PD3FiqpoF8j(FElHVQTh9mjrM`f_*^FQh?}xuqU$ -uGqq135pV>nSC};T0U-N4yY;f65&R+yD#x2Y2>b{1<_|#~bqrP0jPCyc;PciyAR5k$VD9M57Kt4JpV< -=Fn6k*~4`9j?@Wy`Q1$EpIJU|?0DKh#De@o@1sk*Sn;T>sIY?<)L{ngmLJWrf3j_$q=N0Ei0p$Z9?Uz -4%CWQ2IwXd)5NM2uSICLNM|PYo^w3LWYi2HvnRoYB=GGhN4av#efKLeD1>;d^dr8S7inM)%I)^DJX_t -Z3}32by47fLAt8V7MwU?Ojw&c@xL*vk|RW+S{pF%gbaPl1{)Ol}5mh98O|Ugo23h<`p7~NGfrIQDgSx -<_Fk7HA<#7^qGg^irNZrB}}6zygMaHN!Dd^^rYQn(*cq{P@wL~lKXLx+>Qx#?R5YZ;-)suy${t2?-mW_Y>2fb*q1t{>Q=;X>Q=yT>Q=~b>K60!B -ftX&qq|eC=0~tI<O>`Zxhe%t`QWH{KwX@G_kn=67ZVcE<>=0BqGnJ}EjhZ~5{FiYrdgogXvVesE) -@(oQpH@l%}XX(UCT$7=w9@9QzaoEbY-gqeX;-R;gFhbuC1LpTY!^HD&pkZQu4>U{yj$s-wzthHj7qY{}OHFV*C9s3x|xQMrjX&2$GWry -)s5SwiH6LICyzX3g;?fn)Qq_dRTjXB(g-fWZL`INAg@9c#MR#ptGG|doQ4o7)*|Lc&timJTL5P$v>wGH1m3-j& -n0x>g2lU+7!B2BYBdz_0x$7kn+wHzm>4}U1Cxb$VW?%h4}sBNfUlO4fGvE$IFCH9Y=)KWR`6|*`*H9vXa?cPPmt}Wpk`^zVaM})P~LNimNb~iG -0-KA=a6Ld5UCy@Wf|9cY7C?own%u0_jE}=CU}7b7f~Cj7^SI1;AS=K3yw12ogD>L`zLRc#I4*vr;OnJ -lPlvPnQ_}VTn$Jl54^7i*1md>l5j2&NDY8(80y<6@zp+$L+@Z#*y0fShg4xjI6@Y*0uo#v!=H|Z&33oqQ<)`$2cY -w=hiO|bq*wrP7s%r>KRi-$cFENKrVY-k5@wv$eH$oOn`>qGobqJ>yRl!jSuI2|E$t`K=%oGR{g7u0YH{OT37|4g;!C-xqODEimOyo))PHg)?}VMYPx -yQc3JS%XUKbh9eJ!)V(Czxusf28Rc@~R)i1}XEv+IFyBA*g5+mB<&EQH|at&3NI+tAcY9zJB8vTB -WcGd>aaD*h5TXRYV2Uz75wVJQOpN)HFF#{M9rcf?*;9@r(p)vTfNsH|dn}Ib@Sux0dtFW#%qQX!b8X; -IBJq`oDG;YuolE74BdB;*QNi`)k9C>*WU@x4{Q3t8k51UH5q}_9OtBECEBiQ1!0}y<0Qq|H)wMOiXgL -?F76Z=;aZUp-zWxKA3b9M~0rw9T+l^Q$Wpmkn)hE!xfgurN$*_eB%#j6ve4_X^tZDxRkc38>R>SQ+4$ -FWqRneQYF`o4H>BCi^p9Nb>Bb)T%iZ!lTuq&l5P~8+U;MFR@gA%JHm|U#{oC>4@fhKH)jH+Z4X3|%`x -A4{P29^e7FGm22D$v`s+!@KAz#~}gvUbn!)2+Leqe3vQSsr-bBv%L%LmlE_3=Kx^9Bj_jUO#3)@juwK -t2_t?!&;n{7IfhS8{Ip=5~>j6hCGzeg%>ZAChQ$VORPuhv -IEAfkl}iEHaEd!ujH;+O?jk=GnBK&#@(db9Q@o`k5$nm%@fYfo!ZVN82< -olthISNLGJkp8CHJp)eg&a2@BRB@)(3ycS|AksA>KHj=#wlAK+X0El$u?AV)No1}=Z;B0vl!bW-i`b+g^_?wtZWntKUxS8vLu|c!7v!OQN4-tkUSd1dp5R?LtU3eEFw+#jUe)@M45z;8Z_6c=2|- -hAF~kj6{L2MNcDA_-kMV54a0;|~eNePRJzxKOeSjFcuE^}%UiqCKR#282fw<2DKC3YVy`91~lfjASGn --3cXh;ebt)kUqYVsQR~8uH -6Q0U_cwh2Q8dUKN+?ER_cN#`t>yf|Clx$pHb5XOoPrEif!Uk+K5Z)+uP7Kam1GnshZ>?c>chw35(;19 -sFBrlasrs{&)o#M|r|E+X&~#$emV3qlnfv8C0B5!b$^k$HxU+Qj-K3>XrhPJ#cKAfmHk*un<>Er*D@Kv2g~kKJ*@ -(d9bFrIJ1!eP4>CH8Zf6!a*?ted&x7Q1&?C?nL^8%>umekqV=Z$jcx>%o4{SsdyO>?|YDZ>m -^h?D^%xvBLb8?YGIXWC<+)b54&;D9OAr&tW&KOKL37@WJTqv8heFm -GvCHjU<1z+KbGlU~Fh7l1Xpry&8(};8rgy3mU*-N4X`4n^b6sdTlaS+f9z);{8q+C%8cs4c&A_miw-I -4T2(xni_5OBK5c8(WM(xrKr<-Y{1CjKkIF0t>DSt>vwId;gU3Oi0SVWf!1Oc@hj(K(_ROpRkC?`jIk#m+ -^QA|L}Hwo|CB|CET6`-;!4JNbqTx{5xYv_zmMPsPgnS9h1uW8sKTwC*2x -;|I*-*&QpnRxQbYPAEaGG*<3%;b3%CAA;U@zTf2L$;>OA8T%o7jisAQ^;S#B%2hmQqM43W%N)^r{1V< -!x5PaxwLpuyjI#b9@MspYfi_^>{yJHL>x&FIAm0(Kgr@So-IykdeO9#6q@r6KBb&Xz?<4E1(uA^W@0Jz;nCsb6GQYA`)tF=jZD4v -}h^9`Z<x9(sUQwFEaaAx4To?(b=n?yOr7dXgUsxLmo%gt4L;%Z*40F)3L!I -Af!}%*rc8iL}4r7!iCanOCy3hPueILuRR2W6hbY&rs8u6UASP*lSY7|g5$X(-1n{!^y=75A`TdQ3`!c -(<)tOSxZ+MHQQO_#|K-DN7EyZTki^K@CLs`eUqz1kMz@Qyea5Kj9V)`}!Z19y2d%c~Rxs{&Z4Z9fH7it9N$@%>V}YW_f`#nWr%$@-$&&huJ6ZvO17H$4d<-; -e~8!4l~VLtM(4TZx>9bv4G=X!^OZ!$9d&$S -?n8)-)Gpu1s?l4;Lg4*Z=uDdyAgrKw?Tzu@*ovUJ4=nOXNK1-D4^m7Ua^3>m-`c^YKo-d^p`*2spwKJ`3+zZ7s0t -Ch0I@hJA@wg#KCJPQL4K->cV-MD8AEtIaOVk=1_J5J&WMTP%3rI90oshap+JYCIEwUrX>=$3G^~rX^i -s3i7zYB5kwR!=CyYDP?wBu-#nz5PtiZfzC1HH{I~Q<1{k4Wcqvav6hu}Kss+pd{L@1@k;MN4fBnrc8A -{20L#llc4vBXd-kaxaC0;^JkgEXZCR*6IUXRwO?CLR&naW;lp57rp%vsAnkfqA8C^GHus(C|Rg!3a8G -vUgr_Z(P(C(_0;Gxm;)k2$l%8;4O^`j^|lNBfC10yEeDimG3x$>K5xo!f8Y>mGr&It -WJICgSIZ)`&_;jqz3U^F)#1=eYFxgRK0l)Ghx)|t?=i-W=ilEQgRv0qkV(KV;5N9@KFwEZ2)&ZiKnSd -Yrz-@!4&N^jD!~2>I{j;yXlXG=sp6M+KL{c@F`e<(_V!#jp*YIQCxoz;=N4u=(qup%D$=oPOFVEs)?2 -ccaWiTJCP}QEt9(j*qJn>JPmG>z~UbcdO>%amgrn0h^nt&iUW6u_ -%-``ku{6fXA3X{*Wwn0U8+s_w&7MzA@;0mHqqvNDk6@b?fTkKtP7W6OB@5Hw#LMYPg~;OAJd~tNJ!1(vz?d#GB+TB^1UMr8;;om98M}I!t(>1Kvr<1Dof0&@oEBwE -j++&4O!UZO4&Wgqe=9I-TA+Ys*1q@(LpI1Q7`F0U?guV;Dnn~!w1>-W>5Kj?gYyeCobm0N>!5N}W -H6oysVD#1G)UE_<;Q+5`k&X~q6E^9Dpg}VYQ-&>kKxt2N9kl%fP~EnVMsRk{444(NS#4@5gpDHkH-aT -iX7)D(+aj&2k9*y`mgpI11ukPejNM1Z``%WqV4UA?oDvjCzIX&-zcJ7DRq}>m+0dhaQ=Dn86rMC0kc7)==dpSxF|7XOk~VRdf2Bz(7Duv5m@l&qN -Z*0Y#MH(*U*Iz%o01CGN!yiG8qh+{no8U?{FfH05%X3!0y7^I45K= -znv`6vzD~1)Q%dYq^5^4qu8z)4Tg*=4*3cwn*NMVO(O=EnHSMDP=}m!JhEZ-PAmq4LQl8A#@`=yA$x) -bab;^))A*JDBG{F)mduD;$%)1Of90@imiW~nDC1mz+mfC;jTkGIG?i;JSN^8}@naw>V45iKeTFO~D3| -vqmVh&O2(Zj^Hv^Q*`xAzVTwIDUx|Kg9IvmyEzyTq}r@|*dM7Xp_AF|G!n-n9UI9qVeV7eDEWH`O@HD -Ng4m!OKw%?MbxIo*t4C_A)624g|b&nJwaD-#k$s205Q9W1mc?oy!ID3w;ZS4nsS)GSbmilOLw`H>xJ1n|%O#PE&?1Qr< -ur2?F00lyKl9p+r0ChbHh{LK!<0?hTSq(0DJR%ms<(f(a=TP2sy?Le1cTI=U5+>-(wBQ(G7&nct6&r6 -RW&t)!Gf3<0qc^#>9m6ZL`IiKpZtx-vIDA~@&96TQfdhZ>N1yw;hb(T -M_!6jG&1EFg^W8ifT>VeMw!um#ZnB0=>Z+WBE`B0$)y-&2zb8} -;J6=-)Gn>>=>3Ge7u%&hcl<<9sCEBggUykF$>Cs@sIs!qCfj}yGAyd^b&Q_}0gb`%2iULC05+-ajPtF -;(aDmN-gcgA4w_m^ohB3BYWgbi!we!Mnk(~}Zv9LC3#OI2xH{Eo;zM1qXvb~Cp{3Oeq5Cq1+IJp8Nfj -Sb}EH>@uCn5qZ99XiZ=i!j1P{CI~3W9%GDj6$Zct;w$j7ZP4jp&di>;cfV^X;diVZXc{IFtcKS~QOI%H#;!0j9{oNl291f`H#$Y8o`9?Bac -MYbwgWKpa+WcZc<^og!9gE`udxp2${l-UOnc$(rcsz!)Ms2JxvJ}9pE16#NlR>A3nV`TN4KO8!Qtx>_ -L*w`*6vSC&N4#~r<)CwW8K~^@3)`=`f{0Rmq>jaj4h2Vy)GFC%W4xjF$O~m@Hs6@clAnCh0c)=ZUkHW -FTpe#G}dgpr3-+INV9U^V=8?XYr0vxhb=0TN~Vt)qNq2Obfh_S6JLwBfz#0&|_=~Dz|J&ObwnNT%lFc -%=re^~09Ccq2`LnaPx(`h)h5fEHx&n0(FYR@@gWS*BqaPrgCMqT;GMdA2^Rf4}7cjfOCAGE;S*9iKWQ -Y4zK)hV)_}%NqPhpD=B7#n0cBkPUt&luvlYb!ffa?{ydxu3^&5H$-Ai}NPD?rd4zb -yh72c;xhAnvHMfuKcWvb;*+;25u}6v@XGe%r3(mSlMM$M$o1t3JA}JFgx -L%U^RS6lP0i;FK<=Ag$-4k&Kg5M!oF4p$asWo$?w(!Y`Mh~AcUif;Eb^Ej7afS>po6?$~dJX*b&Z?OW -S)gdZOIKd2GH2F+^5Ng;-_uZ5)B)2k&MAUVKJ2S2Pf)YcC=RFYOz1GlBIxH3}uZLoo;9l2bpauFjgWy -gB994J3!H^k$SRV=8HnR5YLc%kI`_a%ZZ7SSwe6g?$KWxS7EmRXE50;F`6bjpic*9uCXKp(;9 -RtRz3ct8ltJD4zvvP}X6Wy`D}o-kY1;X2sLg9xVzaO>L~WMi))l-8m+_Dx?D@+C;qn*bg8(X@IS0*Wb -zHcq5YQ}nMZb6PM@t9lZ1)v>=t;l&1slPZ+hK}O6*L5^TV@RA>#DYL%DW9movtH#*f^g6fhbrYwwuytta}O=HNPIWZ%A! -CB`)BbqBvW9}*6v~?8A$dJyTrc<;%iSq4OE9!dsGJTi+T?1Q6O&DuHaElJ0O?LFV3!#wYO -ADW}#ZSmG8J~7TBYj{R*&fJ+W*gU2>LjK9Y^2@nI(>FRM#7J3RvWp~wXOmH4Ho-C<7!D8;K8Q0L5=lq -HVSUT5*+Kf`YqvOtKZs+Y34`hQ$80tSp+IOnkjNV{Y~cXy@7@`udM&h`;pF;zvOSQ4roqUDhDU1M$N{ -}-Hm8%o5Qw}xHlvX88C;C0LhUkb?cvr_pUe5fIT}ImDZ{(c+OCDp=BoG*A9m2S&RiCu`yrz|Q4blAWF -iiKc&J=Qt(%BFHit^u?h*IJdx2~@^iaqPV({^=IRzU90A{?s)CXcJVX+fLa^x-0L~vc7~)L*I -yO)J|1W}-7R27Y&>L~vn+8JOsx -CGktL{t}qAI>+Uz8*ylhY`L2_Vz&pUyz(R0NT#mfBnopN63W&e;BmAYdyTW4g}gOEG?9~algD^ -LTp*k|GV1V_k3OI{ZutX*6TEeP%SRq?T5jdnQ;pEv+8s8deanwsoWo$fWiyK&O1z~nE1IQsn~F+ifQw -4dC_Rlt?=0Sm$1#lf-tz6Y0HSs4%+;Jw?D61Zb+?&tY;axVHWyt$P4e5XX5+YZrV@iK4x|E{RoosVS7 -RW=v|&2M*VNGo>vQjBL_V`i5=rR7111N-NY-b$EYATaYBM*V&DZ581X?&STmHr~jlrdbFEUaGXNSKTjO@!V{Fp25FMNsP5{Fd-Y;s>j0L_fe7kkvu06WeY -OzTs{1ALIJIe#fX(_%y-%J3HfZR~BLE$+VN-VS1h7#v3+A{|!Nx7!1z?i~W+KZ9Hf>>jz|LD3wL7 -cZ7(S)4^M-CjWuLTO0KvX*>E?hvZRjS%^Ru?UG*%a_gc0m{OZVKs=KTgXN4xVuI|ehr%=m$q`KX0qKI -Ufp(C*xfA9$X(<7cv^6s#RTb304H+VOivZOq$6LiL&P!`RQw_+ifHX8fq#cKqhVvl&0g!Tfm(o7Hk1@ -4_rn&IV-pfm-MfzUw^*_xg{z;DgzuU&Hht1~zPAL%=32Yy#MM3qyU=w!SIqn+{so0I;@=DcYEhTG$A% -w%sY(olaZW6tH;R*CwE{m{e5%rG-8!8_$E@F*aFE0&r-*2a{kLe5d1GVyNaP=49ld%Tx%lc0PA5G64{*^=w$Bk$ViPk -4D;eOI@rda=Bpy%h!MCm^abT+7_67EN15YvHt|G~CZeQ)jZ*xrZ<*+#VEukqir;;Dtqe2rrwe=i|A6?=Pd(w){QV2 -d(%i;BUY0L9|}#i+DD##YTC2+hAA8|7L&I{4nTbx%G;!Ms!H8MtMb2BfRpb5ndUo5gswA5I#w%5guWw -5gy5?5gy^F5gz%d5grk#5gsWilxESpl$wuP&FCLub_~H#Qv5b_XlfB?Nz^YUn9S;Vp7ouXR@hYE3>d|RwkU^0IJ5Ss3GK`Wi+%IECleDNXa -5R=dZ8}SBVn=7Ss9oAw;i2e6-IOjW+y;Ze*ekX*ZswK4IL*rWumg7pYsDf}zJIrfZ_9WW#gUqz+gdEb -%Q#wP`8Fukf4g^(^>Q#%jzz6j>OT#}v$J%lA^oQX>0Emi#^2>5i}C1&w)p~PH(y$4$0pag#VLf(66@I -aG}yE5IyOTE_E}?kXX!S_s%_G>$11S9use3!j=i>Hr|sBhE3j*ob!@&JTW`n4+p+C-Y`Q15+|wKGiS1 -TFrsHXnUk~QsahalQ07PJ0!FyI5gd0ZQVqA!hg-39kr-N3nHlXj} -*)KbW%)2UwrrGC|t`gKOy=@6wIeo)$>caM8`HMXlK-JahOr|*crcih!G=H*qmV?C7eX%@w{aKka%;xg -F%o_PI~ed%{^x*ea~Z&w~MIgdI@Wm2d;uCZOtO)JN}Cy!Ne=!hh#a`hgoE5KA&;M#wx5ohWL<5I?@jG -MIx)4^tP)!a56ss3`11A`p6$e}?FUF66hM=o+~kYg7)G02IFoEqfRMV=evxr>|`q&*0(_}!k}o{4DQf -8V=TW|#5qJ0e(>aS}ZWb7E=a!`7zLU2}TX*Vi(nbaSPDz9Mzyn -+e)_8$7c#MZ6H4cc@baad8WVcb*_&i%3%GGSzhJ(gM39?KKv`X@>g*1>*F578#aEe>+krVDA2O`>#vX -Q-MhEX<5hB7wXED~)#$_P$Gyu(J>{X52WS9m;(R&t@!RxFj{u1Q7WVe3!sfhFD??>NNo!KigL; -k+Ho*Q4>hVfp%DD=?$#nk^BP)h>@6aWAK2mtey7Dokc9IXFD003jk0RSTa003}la4%nWWo~3|axZ9fZ -EQ7cX<{#EbZu-kaA9(DWpXZXdF_2`ciT9!;P?Crj&f!r-?5ZO_q?+0-gRC*IXAD9cpkgHIaykSWR59P -O;T3Wefqy|RRJLJBtcnroW8A-6H6pe01AadRiUadFNC=2&uS@pnQ#ZaaP@#BZyVHntr-uc~X?qD*Y_sY|{Gt(~{NkEQ_n^&K>c%-mVz@qMB1#HqB -S-x~fYSFO4^Kal!KRCsvwOpfEdIr&+>E(T}P6X!_|au9z(RIxa745bHXXV`!euioB}hyq3?K-?Bipif -8QUd0fUbKtgpG#nmiL|GrwW^3khe1Fd)~vRN8u&oj1U9q`XtoTT}puh=Y!>sS^#j7sgduM#2i1SjAyd -e2sIS+VDzXKYo|?B?;3(dhhrtC!i!yk?6s#wzcMG_Tt}EaUoonVqoDwXcj1Zk+skUDYp&lBJ9MxUS3e -3<$6S)cRh%j#oZl&+pv1ldyS2!y6~X>`72NYixzC8)L0h$_}+(UC^D(*>(f;P(^$d#t=Wpc*TvfZd -?>;QiU5r+dz)97f4tf#=a`s$irUy!>*YV(mp4FAxAP3mC5BG)LS4D;Nz$XE0iC19p5PZ@zV)4tU*pk$ -g(ntN_|C%9iCyH12L13RghK@(MVJ!wA`0C7wJ>XSGrfKXV|(S -T2({RHOL`B-z%R0uNtSW1~8L(s=~@o>tY2jhotsoOMrMh_RgLomM|>i${?hdJ72fWmafHRX!V2+k7IiLoSHQZ?@JIXwRFHIk|om!83Zz1jeA5h=;ayobp|_H#S#Eg7VE`%Qy+J;KW6FKw2$Wyr7MGwIH!^D- -ctuxWpSA%L>DauP-!So@KLo*O&fqG=YX$eyv5#@Y?Z+zCA5&)bTLI>F;E3HxH(T}=ZLCHR>F=~6-xja -FA#j&J=lP?Ic$F1jo#a{2mi2R^R%pLF?;INH3R?@ITciJB*>wKoQipZaUi|wT!G$nb9S+d9O%s{6~`S -Mye%&$<`bWkBSm`D3eqs~{prU$`kU1`@(g&B!1%_eW6nrsStXWa)31XAnxW=BP@j_($`1_q9l;*cVmp -xR_v3-G{P_kgS|SQM1h~L$aL{rgo7=J3tiBQRW%(Ldqgdt1}%dbJ^2b -46w^_fO68t@&wca6h@(1`%*&~|u(3IES5Lfw7$7OvIFJSVCg#Bw#dyy3j -dWw9j$g?d@OhQ^E->;%2kfp-gMnA68@}e3=_oGpkE@6Eok@6@nHbgb#`C6za -;0mcG~;n)y-EVv|}sd}7eYFZHhWHb`8jK^FX{D3cY3do#omiuWm-r&{~*6PtwbPqN<(2=0Zym<{%B#398Qtd3-h`xOqIKXsK3>V_NH_*tRl!x|TDG7=2maZX2P4E7WDH;_q2A3aq7f522~EF&h%So -iJ1eMu!@btA1RrEIiVq^qyd?oOk)n#R~;W9`Nj-|nCSZbQavKGye7p8?`Jip@*h^jZD(KjA&HMgIPOg -PgU3(QO;n1j^bP(eYgD8YY(lDd+@b9Ner)B!llWX~AjsoK}D$VKc5c!vVn!HM)dRH8NDmy}79Yg1}=? -86N*X9K`=4X$WBeb>&43)uEXs@PQ=SvU++)?Uu@9uq+@06&@i2+-qp;o}p<8C5Dh@JhNyP`#Qz(O7xs -Q_}H@bw8D8eEjFS9jFXwtIP`NYo=yp$u#!h{4t=M}lg~iEAYdleQcx?AAcr+ulhf&ln~z2x-6I7NQS^ -R?D0R6BmU}V8KYO!@X5;N+uxbebA<}ADIYkUuGN{*E#P!<_|JZxJYd -ne%T!_jE*EQ*;I)JxJSIs>h^61G~SI)#-}uR;N3Ymu(6yPooRGd5=Nra5t7X4BP -|kGf%CHX3Dz7;2yAzYY`Z$gZ35ThB45Vk1#Er?T>}#|1(3!D=R0)r!-H;cV;|aG+j94St%VaP6?pK4) -vL?JsJr`Onw|1X_yjj7)#mrm+>^W*cCQHh*dnt>K=CarHxQD$#fjKcP%-(Q;#-%JdX0|z8&uf%&;z~GrLRMqW+*p6`^5=CVA~a4XUEYF4N1a4{A~sV0LIyR9BlcEhK* -KD_I6EjHg*qkvQ+{0~SUOY*#p*UF5|kW66Rgmga#UbEh5Uz|Ag;G?@rFc!CD02`CXMo?J|-B1@BXWm{ -#f&(ECKJ=QtjF9)i*{-1cVf@)_5GIKNsZM!-LO((7IRnhaeFBEZIAXMtf@PdqW(eswK(-cXwves@8n9*Q}HA1C2?6Z#pbZU!)B;e;T}jq(7EngFeDECIp>hNxI&P?8 -0C{F#{eu}Nu-`+-hzmIp?!vxVMUG0JetoQr<=D6=Wh(o}m4G|>!gVsZe)y^;YM>RJ+LYjo5MdiWuY5E -*vF*O-w0@xeX7z`fsA#x<=B&cZ_dUb<+!A!U=s`9>-%Pxu{;t4E`M{p(+obq=M_P&%O(K-)ZM6~&|4|avtf@y7(Rv%uW+;}3<_eI`rQE@75-4H0jbO%6q-tf5$K=| ->)5nh|4?ikmjC9o@V^T9v?$^gP^wzD7E*8V@cw%Lh$hy*az{;E?1|^rql -_2H_Gt7aUOu>`0r!>+boNo4Y2tF$+0+J@YN+B0@1N!dT7*IlK=ZTOBd(V0{{It{@Yo$nG62YITQTVCQ -UeE`OkmSPpf2gA=Z)txVjMLD-ZPQLM!Ynm9Lk@47O2@Vfgh{{4&ZR_h@MVf4OHL-r)K&J1ZV{^;ZAgJXK&D~&=)O|q$0haSJD -$5u_E-%HlwK|XO}0+H7b -ff-}0YU$s}QyDM_ciX!5N2ZIw;y*?A3;LdA>X&lCD-mRy%}Jfr}rf!Lt<{ega)Ww#Ybd>OFJb-duE>B -%ek#3*0KXBoSUvo-Gp{rm_2X_YKN-TBN*;a7_$`QvR{!lF!c8)&%`{&I7t%am=-3Tg|#J}Imn4QNoq?1I%d#Ls|NN9c`yihgb+(Q=+nzc<6$NTytC;2;e;wz^JNVTU(}ne-OcyDLH*|^w -qIi~8hJrE0t#@pmyMX9!R#io1hh_J2A&z*}a;GW~TZ-2ucmcwe|GRBr!dW+BXFt{;VxW -X5!G|viL0Vp0ds9AFS&CpY2R;1r}kjGJs2pt(b{sA)m`umQ}x|QcSyqk0OGM|%vcsxooyp{2n#9&ZZ? -g^FVW^7XH~(y(o#AXP{2t`0I}3*Yo9<*Jjw-Nj5SB2SepC%aL8(7xB|6aFu8Pp(F?H6rDXA(3*VUFs-O( -L3X@>{0O4fj=CJZ?tpSPdV0=g7lauQsghLK&CoJiofqpY;Xdc*WG58M%@F~?Va?2=eKB~+9>;QB9V*0 -iDCpx*%%bD;(TxqerJ7@epL1%SPrvK(p>eoufqs+bYvyR99gXB3c6F5?RDT6o<5YtAXtQWXyaJvy -em9Ihl<52Dfyac7QYsWdcXaE$E98l~kya0z$^Ys(9qQ_ZiMV(;+9T^7^q1m$5b!;*N*N6g4kMU~5m1<#8~`xz1U(0_G@=<@t&Ea@F{F#|@VRRY-6VH6BMhxO9Zc -b6V!%@&}Gxg}+DNGy3A#cG@^&y&=V+$`UlRzNk=~a;54qI_|vU(_8A -SsESV%Cxk~?sY!WKP^6$ZIAe==ww>@mdzYERzc-+FcJA -63#3`c^zeSqJa5k`XGv{4NE{C` -9stmi}nDkt_&h&^;`k+2!Lell4ViPIK1^94X!70>foQFB~QSLIGl?Ad*4gyn -`lsT(`%dN7a1Qiuma&Xs!q3r<-9dz~Z;9fxA>~(bC>}Pb}1da|WRkL`-V255Vr?^kArlEx6uPdm#A4G -AlWT4=0NyY-#fz{FYlaUBCv;L9d1nSfT*Xn*1|%AckW9zO;V<* -yI^^x)y+$E|pP$|JS=ZD=zN=-&$He+K#I!H&>Z+Xd=8#`Y|+(Np}>IiRV&`6h@^3axa%1i4{nHJhEwJ-PS^m{J_b5B+tap5s_S(~y1 -ne_W#w3xx*5^3F~nzWh_oOiz`zD)%6`qHgFSwuie?=|huD5Bzx;RBM7W^N1KrQ%lX?nKAy2l-c8|kpJ77J6KJLq#1Hu^jCaI0^$Iu1q4;hqTKIO<9zqaTA& -Dy!h0DM+XoidwkPg$2dIs7!1SrqUqirpfO5(7$nI|!mvvoaL6!ip?$ -5kUou0ah8W{vUiO&OZDT;!LZkX_L|lQ4-;g`TQ^Ae8R_t$74zK)t<4X~4;`K~ -OT~Tea918n^F#DX8FH7e*C^D>Mx2RG9JlffK5d0fn#{#OCLQ3m8E|-D(Z9POgnH!`Vxs -+I5lA3*fGmKj)a0)Vjxzo#M0Wp>tTnh=1HFA`?{YI^ztgJ|KhlF+&Ht6TeEa(#oy(yGoOYv2rf6_lt1 -C{LO33Ng1DaB?I#G6Zft6-2k_xP@(lN3c_)0d{N)|8jp0841Vfh{O?e>Kv$O(%WCo05d}@uVVOcsLcy -?f8znONuFg(-I_0hrfj6O>DWXb>J>$k+KD)9RrL9$kC3VZ+h-V-AMDG=>t$tW~T!_7^b}- -~Q6a%5Rjz?qw(r?iJ|!qWUlx+pBaOw^F`!y4v6{!uLSK+(v=lDWgZj*Cn7 -g1y2R?rr@zvl;gwMj|Qq%pVxNx1hbvcc7iEWiky0Mwy27Ap70Q$CC0?!*DTF1Mh+l)Tj)>w3Q9iZ6`j -4rg95XU=&O6XHtlHlU0dt40E1n2&p@ed>&V*mjUA~DIsTLKI(GKEi -#X>X&wBy-V_rgn`#n+1_7!HC=-}rV^W{T`J~7#XJgNb+xI4~ZsyaKb$?G^qEhWT472OF=x=*}@uOVbU -<7lU3a2`|R;o7bVvC1dpRTz_#wBwo)c|iq_DojOO%g%gxE+n>3)WmaqFyl}+xTefjr^cMCYLgL(UGj0 -PB$i)DC9D{lG-Pw{zvWDM091s-7MXRxEslFVz@zEMSnkeG5HI3-A?h&yYqNl&O -ECi2Pn4A2QYEBZUXUs&W;JfveD%wm9{Fj~C34nt(+!6XO#{ziVOU0feVFmR}hedfK5F_;1a=`*?k#@j -1O4oQg)St6VqV1&mXp1yoJsn#ooQyXoH@}inLLC~#2N9w)CQ;EGNTg>60k%~;>J>@NqN9%e%`HTAmN8 -T-FK(}x(#xA%4U>mb09!6XX>n=Kk`U$LupOV-%gn{d^x58@Zh-y_Eaf)=E0XGzcz;F0Tf$lcv4EJ$-( -gY|Gg>n%P6Fetrh2BDm9rGPJ1QAQ?83P}|9{IOBZqU#VmABOXGv|#~Y7KY1t+Lbaq@T(-To-17bh4df -npT+Xa_3jBF_Bmc*cwHsb`zG*?Y%-heJ)I$bm@1rDC+3<)hPPCC*49Q5=r@V>G`JQdyUB4Re`q6zj$L -wZ>sd*6Io@d-9`f$BF%%8Ue0kBYk5H|nJ{ -jhig?&7BThl|#UY?IzUB6M=`)`W4(HvF@@=53Mv#o2Yq1NJXmb@!>s-Q?{TU-nnqE -*saENwKac#eA~dPB_oFlHu8n9Zl#_FAFh`FnVyN97*`7P_4gP9xMEa6h?*!HYEObTC!zv$;JrAtt%NR -hW22-a!qfrJal7n^M7Y~(!nb%xl(S6SM>mL=C<-OT+<)wCDr!&LbZOgoAbEdEI`3q+{dJX6*@{!V2xM -z#hq#sw0qpYyW%OWCU~dkB+YS@4*Peuo#=lqS-Fj7W&G1tzrg!?W!AgVe=@cL`MqRwemg?SbCXcs#5j -x2QFcHnzL=w6U(1^#^XR)($-Z~s+cvWv%r!zi+xJna_p{$r){J1V^`ZdG+E_AAt06t)H+$d>Y;!Oa&INjJYN=PK0 -(b01DS%>LOWrnaTjE=jMGzMtpQn6H>Pbuu7Sy1bvr^6+o5_Z&HOzQP9BQ5Q&m0=~**h0Pv2VmL`G)Dx -Rq)an=S-|h#wo5sP1-uEg(dZhzjDt$WmY$49-g_|%2JvRBJrfQ+QNoj*34OX)Lb}kHup}xa8|PpW{*8 -UbH#HRXBl65WqRQu9C%mc1g@s)YiqcOr?~c_HZSNT)i^mnE8R -+`H+%JAIdz??uw;7CXk#k+4ybtM%5%84#q3zsG?r0eeFTIX;^n7=ky9UaaJsDQp}OUL9fK)1K%O@Xvj -yz^vW5$tWU}qt@LtEd1>4VAv8RrA6J^*ksBZY?aHWZx+kUkw;(Q-hjalm;`tB(D#$4v^l1EU|6N%J`NNJTeA@WqM17V3#HkZ -aa%y~eWai)=J_aPejTe0L5YYAsw7C*5Z&ta?$klQN^5isQVLVP^JB8i654R{bdo>t*n4k1L`oQa@*Cq -!o$?Tou!@_0FKD6Rb1>*sFtp)OXDu<3>b3Oy@})f=|KOAk9;tUeS=MmHcvW1h^lm~)frVf394>AvTle -&0z|@B4^^Q&<)oGoSG$&gmBD1X_osM3N5P-#~XSYGs87p5L*w!$R9_zvVVwb6u0aot6;)zw(hgyMdqU -a?+r1O2Z^}7`2+Pds6xBA9WY>^SBazg4X?63d-=$>BGmC8!kTY;!!2P2en+!>SGU!ad;V;`xYfs=Dv$ -ADhxVRZ-Z3jMa4(a=)cwv;Nv*+<99JNE^yLmHO@BiwxW!~QNGSHbSh1OgB2S)`3v9GJ^Xe!UYs~Fl1! -T;zY5^LR<{hi=xvN@fP-k1o>d@f!%>M?s>|^- -P7P99n@vd`i1}`L*iQGgNMb1No0&S|y -Tg1`@UweHaDk$Ltl$s(vw}B0@2PEM26xg(s3*)WbkZEf?LaFxM;ERv_zfvIayy#=3~tJj`iHao&8WWH16io9FJR4WuH#o82pA{pRmOYI{ -jnNDqd%}QvW+R)p_e$2LaOhwB3=()9g1MbV%5-k^=(BusQfB+mC$Im#$U&{GSc+Ty>+{-Uy@Xmq7pqOQ?UHMm>o%Xdv3>g1Z_Td-SN!2K -^e>FA)WJ9^|>dis8Dtvfz8yRLHYUCpXm+%{g9skk~=x$AMSR`%T}gS&0+x+?~XM>jRYt$UL)$Kv6Rvn -)s0lNM5a(P56<;{nP5i%XxSy~FkPhRp3j*=hO?w7Dz6ARC1f4gXrMZkLpJWlRq-(p)vO1^HD6;LlE){ -<}77`Ze25de;1n8pT44qJ&eQMO1e%zfB8vPwAuvpx22Y@_+BZiw4KtfZYcV_8s`3Bv6!b$vRW=nmx2q -r@Z#Zu4^WFuq)jF?V|jbR{DZMed1PgSOw3c6(FufTe8s}>& -yiF7AtDntb7bn3XgJXD0lR8{ySb_eWPpPxrEwULw)WsJ)xXPfrf!W0~}!wPv)Z_S~I6>4IEcgT;?p7k -DS>|h5_$}At*6F>TR;MvPXz|Icm#|c}(CPOn~o|nkrAp77r@TA7!g@ffkA;Qoe|MM><;8Dy&0xSk>18 -*Un%32>y|FZVY4wNCH3-(1CZGWBN=6$`P2(X@z^*$I`e8xKOzTg`1t6~;s=}&ZpW@N5)oFr&yxvE1Zi -I=peML^J}#jTDtAV%a?ufc-wwlgtiz>yj1LLzQ<__?h``U285*<=PDnthYTItfHTbGE~MXLcGx>vG*eYm_G<%k8 -XDlO=qGcAakWQab;^U<6MJMorp-*CM}JLx83ceV)R{JU~Zv2Bs1gn$emh$q}9Ar4AA2vuVSP(!VcX2n -?A)laB>_OD*Q%ay1?*)4CLQ^)&>(gE)Ia^Lpvi7xxq- -HR8u%Aa9c<^voMI?lg<{MZ-UO?AURd0UIvd-Pr+J<~iK*rg34OZ%by~+6|hUd+!EnFX;+ecp`6sKavn -n*MQX4wEuB4Hwh#~30%4+d83h16#2yq&qIQpoo}-j6giWNyUAV<=d``|AmHZ)NaNKdCIw)KM-7cRIED -P!Aqt_oDc!c=N;}@>=juG={3j;XSh1MPis%^FARdQ;U?RW^uMH9q-88}XYLZ{VHQi43p>Qa70^>eMHy -6LdEDoK6e@E9dMQ8Esf=+iZ%LqxxN($a4Gq08|Sd3N^QOLfBc@umra!<(~I6~e2=N#8sx2)qA0pQ9uh -cM2q^(EXNQ?AFlC?+f}vu$X6K-U2Gv@!P#DYPXA$@WAIT2PhqXpiKo$H@UXSu`v&9^pHl?5jfvpcF(q -dDZUVLpwZ@ao<)mndxj`S{##hTkU4ZcG`^qeYpOs0vuEp5dG-nZ5Y*P^+9MX(GgD;GYXicwu+k`JLpg -ARI4tDzgMKpFb1o&dx;U=4aB!s7t>?J?;ddwwVUCTUh_@~Y2!V8Y{|@ -6@__4*t+p{O%I1UN^KvKgGCpWCEX@b4oylT6S`&z7^x=te{rj1&zXXleSOa|T)ns5a(ih+n`+bGT!MV -Z#;OVcpd+_zC(=IVVL8+OJo+9>e0xSCB-kGm_u9&@NAyG$!=<fA@B`F@#IZF{T~W4ol+WaZB~&?y^PEf7CD@Y!MR;`NfXygxZFq6&CP#PgHFV_+j^MM(r);q@#6YM$3u%3gJ`S{7B^93Q!7)xDxQPk_0^?8&7@G0s&P%gHcF@=y|3ocGIt^0GLLUjZ7}PBC*Vko%Hs) -<|?Pv?6ErB*$|`5i@>0h1}aic&bDuS=U`A94b_l%5Z!XBYV|xK*to8<4e-yr#iE*KK3g=j+9Is`$S}a -auS&#MCr8FuyGds{g@KuIv~u`63T<3h}pQQERtl^?)zs&UBg!)T>GfZ-gO!PDj$m0EA-uQOA%>~Mk=I -FAGy+aS|PdVzN{7Wr{L1H={`S@#-dGl|TL92EF}@nyn3D~bzLIJqpgS``)dXTv)x@U$*Xpp|sKm7Z%Drpf(tob -oxYBuYz%_Ju!A@xYUuw4ff##R)X<@(pXih)Q&_>fyw+kj@y)H{VOVn)wtDx|vwTd|VEYvlv~%E?Lvjz -fNuRH+VS;p#U#G_sz#&trut#c*Cu#!nmp}D|_8xvfEC34KEe254mqS7M41*neSY8S2#QL2VX*H^he;Q -V6B0MCRYjv8fW!1MkMcRq0>BlN|isl;ffPFOHCV=wF*BW$3?!nvjP@fzP5QbM;|Al>7P1>a5RWRy3;m -l&Do1YG}n@@L9`vs?XbKEWziqJL?ycU7w79)h6k>EZB6M1_SnPo??&$#Ij(X{k}^PbcHANCi{QfRs)I -*w+mL=})IO9zgWD5}%wM3H5}Vuc*YCMx)6fq|E_m$%PlR1byJsKab*9_Kk5N#|ur1%YNrC8vrxpq+-V -FKS1Lu2#%X{|+NA8OLB(76el7Z-Sa#7&Y+)uT{e_^SBswLaIa^PSIP%e!wjC6qNfcs# -5YrWa45j2RQ<1CNm7I+x-b@`7St+-^1LESWXKXq-u_98`Jbv|g5wujZ8xeiM)*L6az9~}LPob2|7fgM -#}P1_#g8M0%0ZQ)r4$mxg~anRF~-k6jipQJsc58}B+mE1vRjcLxALTJyiGPXBwf6j*i?mKY5nPwAZ^|)AaTI4LE%(;+Ew0OV8&(R9ruM_`KofO_7!d_7eR;GjmjVB*}?wqQ66&9pUL!k -Z)fYit<<|sOZr19^Ix_ZxIqZQ?cpxotsx}ien;Gj+@6SRwVKYWiHC%Giu<=H(+6xZCuPd@MuBwUqJ&O -GzbBLM`=`&2Pmb@4tS=PbF^YaKR`fkY!aZk94JWxFZu&hq6CKyKn~^KRc6a1*(|XA&;iHAuHPVtJ%{< -EhIqUhHo5G7c+eYW4!2q7-2Argrtw{pIgJu?Oit?h`WoN!7ic&bNNCo0%vW*YqX0uU!AaT2>&=YdPT_ -O3&*#w7q|8AO3NQJ+ZtlGgaDGu+@00hsRch$F{=304?v&LPejYZe%i08gaj`FUeW3Qd$zyR>R*!L0F+XlSQgDD}-@ -G#TADo3TDIuer{Z)gBz%=ZzN$CGd9;+HFirL*y}pE4UnFND%j|@lAAiF>8>KE43t!wX$jd|?neKV{u! -E&1Z;}m;aIkRO61^0Bb?NYn+B-x5ZRd8yHx -H5njI?Gbi#rqHswwu&9{2?)yRK)ruH+y?bc$aEQhM;AXiI)XkZaY3Q63|iDF>b1#4Y0>r~>Chc{WE*l -~0tI?U`)e0QijOEaHrD886b=?>hCl7iF;|y!B-rZ_&&{@%?xRZLTA4r;y0{WNYs}viEyThNouiCeMPJ(vq;7tC*R*Gt1%eF%W{0!{fR2^HjcR*wjtI^bI^aMe -%q!z7V{bxk+nu>-=P6(E;Mz1zSixspO_5qR$)}iM?bOg2=GnSBH_S0c_fR~;q(-CZzhMI&pJJMiMzmA -&nYfy?ldi@2mcwWq`HeJiDoAX_bJ9H2VfYL;38Oik)%BL=2H -h~3dOK&AAOe>xo}JriCj)xLVT+IIDB$j|lm~Ag&2d)#<@+VK1YxV&?;*Q5>ASv-#cvb3_H*`e&pBpSQ -g(-+={&#GY*0>*>)Ul6Y`7k9NL`KxJ02hho*M6n_3J)0rjrwb{#-?nYY!6ZwL718i*-}e+}UZ(CxAlL -D;$Y+8uj`PT>QpaX@wcA61Z-W{F{g=PS&6rV1kAyD?qZ3WQ_7W#l&0dTBMpGH#AHK;<)rdonuK5u6e( -r)mBcw+it5ixQn^APum(Wr=5mcW-W#O?DkG%x|HPO6YeTE6FvbyuF>VKN|$MdJ{N^*?LoPHByXR(K}( -IC#(}n)tLHv9KAPdCVJ)}TbQ6HK>oeX2MU^;fh98v$-GKJx>_9snj~)DaIOT1(hYjG+x`9d8588w9J? -jVrSRdH0MMv=Y$lhiV-f#sL`*NToa8vq5q=V=?c90|KlQ%?C4!j}Ob2%q70p5Pts8f9*U25J#odu6k^Jb~}En}? -sMcB=74d;5-M8PayB<-XU2r*qZafTKDvMW2g$v+rEZ-ZKLT&DxrT-_sf7pJeQ;4sY+y1TKM&@qLmUKU -6tBiH`FvW_*pSsK}%9VuM!q>O7Vghmyy!vbp>(bM=q?=U4(Z1_B)fczN6upeoz-`I^TaV;l4dldq9u(u51iydb~KpOkCew4-L*J%2L}L`#*EwFy&`RdyMp=64 -JH&E#>DCXZ07LDwp}iJS+}MOSi>LCGa{HyQLD{+yVHXWCxiv~w6@CO1l;5h51B2^gfnGX!Ouc-y#h$_ -v4C5!13wd~rX^9aPuO8Swa6BIZMt3NOj(202p;!OBffewc$#j}((k$|37LLuOyvsG(# -Fawh$*o;WU)m}&WCpB}s4oT?QEpB-4VIE_p>B$s+MXR30phPyJH6q+rrWM@I@EQA)A*J30ji+$nA@$W -23|d*1H_a{*Qq@kN?=j7a_*pv87_-xH?wVIYMbXKCeNja=Pr}%K3hM>)~`d+`WiyAdS(1>3;Ui7CWIzUOYspx|v9;4}i_tO=af!f_lcNaNbk!)} -Ji^Dmbqxcq^VeD^-L}vkFJDTf~-$`$rdS3)>7y)a)}y|Qiy -m=2vn9CqOgIS&?Kdd_WpcnFPjy7vBuH^iC44Wo*4lPe}cB^chdXYnrE1R(3}n36c4k4+w6XBRt-9Ssw -1q%#Sl)8f%TRN>09az=91oThTUfJ_HS7a$fa^K>|!5Ip+m5wVM_Mji=;lTdY5k}RP1~1;W$ -fc*kwp#sha(z!@|{zTyK(bAB;yXHrr`2>AgbdWgW#?RW!qD2mPgZ|J~@x8u#h?9B<`8D!N@{#Rupntl -m9nZ|r#&>khXXwT2y(OhpTB+srPFs59}^B{<$^n&Ex&c->6Uc{k!Mw-#szje+M{K|YiE<$kwU*SYsZX3nn6wuYQuU2WBKUkSm`U6P&>PCFo!PvuI1;`cRsotY>OJuuoQdMy?^7`fNw1~h1< -x@T(-)@N(!`R&gyijt*^oV@pPj~$v$c8axB#xd*nyexiVu)o*i)6p3+sIzoIf3jkB@#DIviMdJMb{3w -Ma5Q6hZwmLDNC-+o956{Q=?}S7B;hjLh~Y)6@c$X(q4E#u|3~!yH{oE;zoi;~r2qd!|I6Te>TOE@EyE -B0Mj2Jf(h5(o@GBs9&HvUh{>_Uah~v&CJR_;0Tu)%tnA)$R#`l2X#VF>oYjkLyE;dO0KWe~-@8%J) -Pcs;YR_2T)$dJByk9`A`VxQl)y>moT(en`6(!Z>zn{|Yu)52F8v>dKuZw`}pt3Msj77H`w*XF>XFV`x -S-JvAitvoz-^CtxGo{X)0fFTSR++OW^tHDJp$B?ark{B|!q02|AfWbgRpdY%e5|aLFvQ~%`8W(x1@o* -xpq~LX^UET;WcncZv(RxQ>3qJ1Rgf;ui4zf!XZ+zS`7i)V)vT6fypmAbhp*#4cEO?4u<24?8W8w|I?` -W%o)v|lffw|(zs5SB#i9m$Jr1jJ*4B6uR%6lD_#v!D+17a9Ut({*RUFBTTp7fpK!rVR0_DqH6oQw{9_?gP_9ez2)C~>#XqlHiZi5I=4U?#IweA7 -MJ>h`XHW$uc&HOs9pE~KLdLJI;lYMN!oiA7nWa_XKP@YGg+(s-B*{3kHy))$(YnUc*`I3)TZsN -f8W0=W@*mia#6-f3QPrS@+UvYCq4DCSe&W#`IFH4=o}#TCj3r&(=WQEpglh2$^=G3sKSJ;O6bLpw9=> -AOV4#X`#;q+iekwZFJ3&;v!s)g?O4@9<|Rs1tbY5S9xFHAsf5?QbX}=L@6D?@z22O5%kmy9wdgy~Ro5 -!McD+|d95TP@GMidAJ|gBUGNHPb!sYOWHLBuN&OwRuoGqZHrXh2B!M4@-;2`=R5!d3ls0i}-Jf3kWKm -7^4D*LeRQQXn-q0!qxOBZ}$GUJNo9#Van1-X&C?-+((HU7IJU-NBsVHDjtw&YRkKuR?oJT`oGCw>3vklkN^f#s1#f)r5VfzpAo4Xhg)bodfSUp$od`w%tas;?oRNmAo5uL%fh -}(8sfjyx3$cS+ImgxwCW9F?Alpdj}vwH*;0^KFMhh*#MR#Q-Cr -Hx{>?)|DS1R%<@ahC`H50+bcR>wAoF6&D#{toQCx1FaHM5cch&9;{zd-R<&|z#?YUyDv#!f+yyNaQeI -~kA0a6G~h<_aFsiy_RSu1CoPc(O~+cxFL?Xcf2k;xIP0_S`GQfO-1ms_iJCwJkF?beMB6d%%jZ4byFX -Q1N3p26PBR{hwLDLEv3)v$g%2m10Sh`!}#wSLcTt?U;(Ue&uOYGDU&>dff+hcc1?TYNF33BfQl4$1L1bp;(DmyY|m+D_mA&(J&V -y(_CU8omFWg_B^R+4NfQFd!?gp{oKQqi1I^~(zLsH+zDQrgq&Fwg!hEyeybaPQ^!0DOuHYIuIBH@K($kZ^ZLkBNGJRhl6Uc)7$gwkQ}Zxa;O>bmx~<=-Ng0YIyXQ$QM=!xF -JJMXBM(hCDwkQ>qXdLI;B__W?KtS-D6j=GRdrtat`2NFmnc*7L#JO#y8iRTiTGQ_nc -bVtFSfH51QNAx}GeGn%LlPCe2W6H9Yn98n+CJ={=wxH2y*9#=e|s@7UT&eq}6pm{9uST7}Zz`1Tj%+q -Z$kN&@=|#N%sa>R$`{y`#*?&kdvzvb8kMpu$W3jrd*L)aZ<%OXc6l%oROpet3%Eq&CIihgnR_JGSO{& -3$}Cp*Mv{b|wqIDR@#A6DEoC0_?H;ZZ}Lcj<6cxTzQQi*6N -i;3@!LPfS-=0ET>7g(_U?POU9q -DP=Q@6aWAK2mtey7 -DqbIDGUV^006~6001BW003}la4%nWWo~3|axZ9fZEQ7cX<{#FXkm0^cx`MhaCz-pZFAfP@XczmdMk -%IW&XTbulj+nhF+U5_`ttd_x;~U@Z_ZCy~uC*#(CpRCXeDST#`tEb53S~!bn$l%P19Gs#s>IF?vS~mzxRv -Au8QKW8aInYWySKCQFIF`;$ZlrTKmior|)SnZ_w;ZzUn=>Kx6XF=3(~yBfxr$b)hhj1q2S%MROp{CtC -xsR!FjHpZA}~`6W=deDne{oNDKhJGMpI;ZP1CFx8){d=PDY4jb`NHRSmqha86lQg#4yN?+d>C1q6UoB -N^+pk4-MEy{${letz;0y7lTP-2GUC3S*^&cl-7VlA0DS4+yD(k4ln(iEvaMawiC?WD1hNl7NNS_N@TT -$zcB_GyW=fSt_vLuYttFS3e4u7cQd;9(VMR6TjdovDvp!{WIGajNl>@?^C#4tcJcU4Cd(WiupBY=oH+ -&S*%lyKI)=cylf6=ZHc!%8?Vex{>RK9tw>cVE{W}sO{)$RJJM%MV=mteBB6jBi0S$YE+O`Y2u10(%9E -_Vy(`!KWU;HnYNQsfN5pyV86?cMBB+yEu7^T$_*N2Ha02^LZ#y>Q89WY(@El$v~Z=VE~FMXm1mZ+@)F -|cqtdJ9BokPffMkNga6*y^^_o@+UTS2tUR78aVE|smRy`s0EHE5g(DEbK2D4K8lLO}}x57CIn_A1OC? -TuDw;YlwG80!xGNsk3$Z};ZSEN;qZp^*;Skuau+Jo{VGehHnHm4d}e(0jhr{@CSW%}gz-IO?$KKXsx7 -rr;w{-ilpr-q?7wlAMG^sIB5W6nswS>M$Q_3WaaT6iNLg|;4D -e0sp}?P2HB>FL|kGe~fO1zQy-qZ%|dXLm@KTxhSWkRA-etk5NFR_URf)OAA3R$!`9XhoqOiei1DMOaJ -uVXlX$D2StXkt{W-7%k1w7L_q^63d~Yw$zCzt5W#GTzytDUtj0U#|^{+U2L&HAES((8CYoMV$qyRSaX -*!x;a>)k9C&ix>4$ehK13&%yLsGFnYjX_5p*@0|v`As;to01EVJ&R_eJ@cTVA?{y1qmo}RLyCr#<-PX -qI)kOnbvY!yh0lA4__D@@XgZS6>rrY6!(a_ -Ir4`jZzA1A{TBb6v^@^vfu8f530aDTdQf6kqmw7^kiwTGBE&0JlH!7cQU)hLtgXu=88#?(bdg84TvpQ -805y#Y66+QM>Y&>aYD>g$^B&8B`b+jnnE-snKZH-l1Z&hMlzYTlhG-gS(%(R)kMVvJkAqmX=2la%WaHY;3s*NhXZ#9k9E!&JQ6^(FHu6Ycr6|3zGCtj< -zCOC-iWGFGmxfd2bf=f(&r%HI9V-PU=kL~w)$~$-Yk2BxUFX-clam+D-xkB|`eAT}TXC}DcVbVI%&D( -6WeS{1_C%61MQ$WHyxdPuoWnnjk(^OYQ7tz8@WedQtnzE4zvSGAb2-WVVkxGZ$&1J7*HGWQS8CMWmnX9q2Dxtiuxh{LLvt&2D!%N+*3d@A_*OjLE9L2CT-7ZQW -*0jva5tJErE_$rYVz5R*rFRH7rnDu56)NXmAE)q%FX+8et$2Qa(a0y9=~1xc{Px&oseMY{OxA_aNkd7 -*RumNajqyFAG3Y0@UwCLqxYt^;2S5j@yqQh6MW0jQ1wRFw-gI;mv@~ -i#qutRSSl)dX6(Ra?PZBG}f`)+?3fugo -_#o`6T&V4K)UHksiS_9&rrzEx+n$cAAidoJTG6{TF68Bm+Q;8<=yGLI(pbiqem4zGw}$|kYa*)zLzLnNw -LdZshf(fg;6)9oWv&ooRdAf1_T1FPa5k=5`yrai&xP{GiD175Q9|SBm^mkslTLd2+N4pufqb61i67Cq -<@;%&4xgsjL=JE#`p_7IyMgor`FkZ^ZqQHCTCcvpT -Ye=A6}i<3mfgzY<>i&E^3G0QU!48v>gw|B>gtF8xVrlB?CPYOGFFGf -=Q#Icft%1^7Zh2(v^K5d(qo}fg%=G!%9sv*O<9h@H4`PVaXUR8N-sXhCFLA(k9e_W{W8W`6pnxL)LNE1NEsBfY#JeI^2Vs+*5Ay -xpI^HQ1Kz_$Dr_%10U`yFL^)~g9wyShl9dPjwInoOdetjasbC;#K!>~2XH)TK;aMo;{c2UFkVB3km5j -!0~`)iIHAI^Pq?6P00Hl?L^W2rM(nlQ5=%{0Q|vWjuMvBV*lQm^)_w@esiP*Y0~$ftHHBRx?3%)^L+F -GFb)XYsGCBonU{F)?)Cpz-26a*sO956h3@~iOnkAsH#W2iC9s8{2A$4LChk%8j7buJPiVA5J*FTG}!nJou>`X&<45D2$~SN(NJtHwnvNDTEx~OwidCq6jh6;T3Y%R!LfumCZPSM1mG=S4ov~aHTV$iXpM!Gq5kOrL}fhM5ifC8@zz@n48iKN1!NXIdKS3|Z23oGx*qfOB!LZ?Bei_uY+uji>Xl{5fNKsjiusHb*-q%|m5KGXsa0|5pC3dX0MC%~Gpjw_qIR-HEH3V}}kUB8r-wJn$Nz25 -UR^M1Yjk1LaP{TpBXzgNK+{)g1RpIFoab%MHMt2+5-dGXKk;$!8-uPY)B%LkOsdxe884}L{q@WT0Kad*EI8)vx1e{ztO!e1Zi -MT>V;M{0!0g?*}boT1>{Po3~KmN<_K7aA2-`{*jukD&8?|bLZt8U$ -kp;{~lv6-&xccL-h5z}{qcVaahn{qSx?((X|+raQN{CP5dQ>eZcy}4Pe7Q@ZWv=__nR2x#h_ixneu_N -Dbwwv|6tc6zn7wd+jBzl9_ch8BY!?5|Pe^Ty#Bi>8ji}gdj6b0{Z^Yxty=HnVtHXTOka@9U5KL%E8-dsq(wt4b3{*zNbT61ek2Oymk2GM`W)bhb5!vp30;C`rvH$BvuWgKf*e- -pHN{Pr`_Vdt&T(82iXtANEI%`;hbIR-ydk&o-Nzwb(R5fw!n11~DeJdK*u)zn6;0>)Fn0lc&~Dy}46* -=l#GpL;qnh+)gKtO6Fp+_X=A7C#Q4Om`;ojz0>fOdKX)Zw~LjdOgOMGIosi{uRNfw-)Mcf;3=f`gJiKykr{RV5l&M_4w -E|Rg=v2m%3cy(EGH7{snf&4KUhmWlTpB=E*&`2PR$(PtMLJ3NvNv@OJ=vfSZjy!riP_1DDFYeJA5u4b -n<~D?XY+h)D{llSO`*S4YYh^&-mAucEflQGy3(n63OgAWxnEy8+`Zrov*QUKvl}TC;voFPG(wm``T2j -{@|qcpUb@`RxGP>;>qfPrZ-p!<4A(5^l-@V)USRQvpA6cUY_)@@BEjV;8U{Yxu~QYr_Up$96h?p$db()dm`DxY-^Rbe^RE}`o} -GL>}z3%ybC*ahu`TO|MF`5p_DPbvm|%FEW?zMkD+NMGLSwC-4VYIFN;H)hI4WN(2k5^Y%Po}eBswHJ@ -SU!Y(cHRwY1xtciYiT9CzwP(tv_EX+bqQl3X%f$RDV!zzmuM-Y%*cQg`aju_9o -g@16D-q@49(4LgJ66Spr+!)S?B3n}*^bJrZCC9x+fH)r-+|+gR#A-VB~m8G)8}Ee$J!R(JD`;#Y|jeX(Os6tGDI|qD;%t#kI(1M -K!9^TMefXx6MU!SBhY-(XzM}weEY_H08xKOGVynZK*b#Xed)q^Ohr)m0DH0;}#vJ}-csYMqgk;9~EzJLKAMVVB!IJupQvVp~`A-d26@Z{BZ -hHPzkzRsNsIn9!~b~^Wp$0z&FbgQCak2+L -O3X0Pz7rbU>W)07*F4uk%GF4gv2g(IChmG5*PCn#8Z-K{Sb9#sCD^KEF<~b -atVIEH5tV6>Q@oX#~KF&%Un4-0Q^t(r>(FsfH2N?U!A6}f1)tCn)L9en{gfhQ5D!YYaCMwBQ^X+B -FU5I>NuD9LBhv=X?-?eOR(Z7vlEWQWUY1cC`#rv{Y(QkT{ijGJPW&7h^JirH!^0A`eCnOGzlgMk9A^f -sUrm08jNS1;=*2f%6_2)$lSFC$!z8rxzuq867;D`d_}fHGZ{X(oDW+4!N+H|stEAoO*l%Q9Q@DBqf7L{&9+b?CF+0-9i#F*kD<*D~)-qp*+?t -Pjm~3&t~AB>M>6>lxMo-nQnQ$Id;$Wm=_w#3*GWsx4hmQyF)$ZP(wM=El0ZLcysKI^_UY4Xy^ -Zv6DhQ(0`qx0w%qFQLgf7vr15|JeE=__=Qx#$N2Bwn7-_h@_qE0zC0e|zfTV7%TxODOn!NGavt~5${r -sreGoJFF9zFUVp3o@=+{KZejL+{05f6w&36xh-7J7@Hmd;W0YV7TT`bRbVbrcvx0>DGPxGf#B ->8i1ok_vqT(jsA}F6P_46ntpC}Vc@W{jrY+jUr_NW_j1uj?lRgFpn?LVNlT9S)IlM$ewL6C5YWs=_^D -(F&yPRp`r0%|TRZX!@*ps3OYCwkw@|MaK5zFvsLWhUm}n*x~T;-XiJY(7wHVm=Etk7O$fE&X9XRI53N -&d%)zWl^VuGdvpZ0wbKGuA`Mj`D!^4)c}?{2Sw1L(}*l1RJhwzpuQNJ?{Z5K3OX|_3TOM)v}fb<^L>j -`5zxbfC=+>)#`m|JC-(T=c0H8<|2@ZUEvmH;SBh%T&hUlZ65u)_%$Ex0#Y8a{xhTDMV!3`;9)i}5skP -jjOOOjfny)oI??*4yaC?;sW5E!F#T-mV(zo^-Phk)9}TgHWr)MrQ?#aN$){VwsT2(*Xr_XdhqO -Do8HmO+FL1kt^9_x7&LyhMgKfN+AdOGRTiEnh!vfZI)5$!RhykNqmc!m>sjdQ~b-2P=cvH>D&eTQf>l -=){lnPs`niciX>q_7aw6)$T)L|UT05hF!TmCc^`7f=N2SivV27DTgW$}=7Br+=V#k(@j8C0Yb_-l%9% -ylHOucidc@kc;Q{Zv72piRvE%lsxBdGa2zz?Y9@g(~xdJ{#I01Q -BoBvkh~9f%_Z#fWVML4_b~k3m)2_BkEU5si<*3?X_4nLrW-LhINAP>Kf>60R1%y~Q7wK&`w+X#NG~2ja4!6wnC_%iz|_*zk>PHzCO@aPTC|_0BV{*xWk9HlvAby=ESg}g1 -^fwnZg$ph);_OQxT*VhPC)*1tSqT7zRvOM5RV|T4bxG%z0#KE}{n0WdKLvWSsvCkl|#NHAmy@BAN6w`E`irGMpVG<-GI9T0mz}SBQT%3uT^28YN9lrkwktJn9{dJaYckpqL(=AmF|x!vytY3X^k8+TQubsX9&w0p|;p0iKjo?(I-T{&6 -^Q5D5g#_RF8KcI%0YS%s~M-bauwKX)u90t46K`G@@L<7!cK2AyazvA9C4fFjQbd!?Cx)l0zI7C&0mf_J^mK7Sgu9o0MDEx;5lUhTg+Y0?0Zn$`%V-+ -mrUW@vyeUnqJp%`G%p7t -xD{TVNw&MZiqI>GIS)b{3rbOl{2dWxblb;S_T -%-^!Ld6a8@qh`=PtGwy$e9dGrne;Dn0Nt_<1!@z;W)RDC>Hiv&CNHxqwAV9ABT82T-R_J_~_+1IRN?> -s=HG?$`Y*yeZ%wGiQ4OpI>y~P?ecL3vvk`Z{`*gEkfkS%T~SKyzo1nyySoupYZ$;2p$Q(&#HZ!N_S?l@H^AeypYKW6KKY9B6)q$h_ZQkGsU6g7H6?%O?PoroFi`cTI& -CaW_Ce|&ftmkK}mvf+CgXG^}|2+MGknOy+#9wL$vt&wB*jen>8p4+NaWOZRlHJ@;$}!MfHw;2nsFP_C -m}~C;02?0647Z+#%tV9`xYtHbDvW`nWLg!qXW%sp`u5Q#FvlujOCQSgF&}Y{+11_13rChl0B-2ds3P9PowQq5=JkvnKIs%QYvx%!%;^Zu3l?HxT$zp(gPJnRW@dvfBcHO!mZR>}zmm4c(u?H$dq~DSew|2;6^x-N?TGv9klPC*2XTL~6lhe-l%jjw*PE(oUC5-AY>B|`AL(+U@X9ElclyuXqqeWG$%3j|Vae1IEJJd~ -5HNC#W^dDfen>$pj0%-yN)|XU(gswecoa8y?f+#&*N7%u|T&7*p`jghpACgqA@(iZmrvvY3?>u14TTP -g-bV>=sANZ7j9lijf!g6$;hfVjnIMPH3%29Bf6ZZnAn*LpWV_U}PId}=iX#T?Zmn3HLprc& -`rRN1qZ*0LJx}h -)21~|?IgCV&h!(OCBl4EgjAsai6)1R3sC3Kgq8SZm4cNH89!5y%%_yWqgB6j)(h1H50M%cn9X;M(0S -8~48J-<_Jk`6Ofq4_apJWH2)s(d9Xh6) -Sn4xhN}%!9;h+2s3TNozJ}MUm2SmlkqH$(o0TiyN`Rc-5m5p#q<*6GVuDvMsOm4BA*l#XXx)g{hD&u$ -=VdJH(rq7}2P`Lk0)d_g+M^Ivi9#)PWI4c0CR-^PW0A`lN*5KH2>eEMikV0T&&6%yWMDU6Xjt^`Peo9 -Y1hJ%SM0n+`*fN!bg$<@%vI9#WtUy*9W&kbc^?jb*IVmBKJfKH$BTt?1JTG4qO@pB^h!NIh4v}VPpct -SDl_%7zC6DLn9slhlqPXat3G0WM&s8q@-n$nNMwEp -2wtt}hBOl_`W|@@Oppi6ZG6EYct^7ON3p7n5sBYEM#m#)6MkFgLI0XuHYo0>BhDv`+HDj1nIOdVeYg( -a-1rfL=v*Blu<;+N}bQpx_zD(8Nfy4wp^GbA;8yP;%MtPC=emP}Jegxtlh0$Kgj6m93E|Dut9eF;)oS -7gL1GBmV!?MRXQEd{1SQg8c6)iGNo~bRDpLOl~4|;5(E%rld;lK`rYQXu1p!ytz&YwOf&2aqi_58ojE9`B1$3{I&WJmHLRcnnyG*J_g#} -pML)ocY?-sgCBZO@=iG1#8OHz1|OO+DP*d$JeX#{h^sqtTqE)1`q?4C*zn=?ZNIUUe2*^@bRBXCT(xd -+B*hffeQ|f(d0J9sW^EK(usgFIWcHF5(D1DZoWkWQ-hn*u1L3s@afNsz=~Jp`WU%+1+*Zd$w$Ba--^= -&yGqx@AU7JQnrwP7bI+6kf5%O`^wNu)u?nY6m|t$=hE59RB`U0 -|?E(3!>PU^VC9pJ7CF&}w@&u?$QrAtM`_N*D7PWVs -rb7kkaz3{pssJB84wYsjn`ve{b{UXdm__IJ_`_VOU`Xkh+p!58?K6*?@0wA!43DjdjCEF8EOS2b$?+a -?ZjZf7HYNX*GapNSE8DfsGwB$Fh-(@xkf#l*-^0_EB2Rw^%be$AeAr)-NUm`^in|%)$BVi;kgVc<{+4zJxwpV -j1izM6E4#iGzz#RXFK}Yj=zHraY^fropX{6IIiR#0I41H4$vM%^CZn`a;i|-DL2X2Fai1e4w>{-jOCS -a|K-zaQa5R{YUDL%JWT+lfv&81$x4fWZh}F0=Q&R6V)*>|lNZC?c;9jKe%lJIX@u!4kO>T#7_d$S$@- -kRFwQ+=*52J{sbn2OD_&b$NloJ;Y6@6nT -Q?V!=6x81b5C5Vx-EhB$H(=9O^+}{p0ido#>#m8Z1`sDhppLhn8b~FD`6FK@^A*bVtd3kx(x-a3trwVX^Lf6GF34Gl&Vp%o>TlT{wFFGnoqYgOnz(A$al|u*$re#@ngG#x}2&Y=6xyD?3 -SxQkaIi~;te(YQ%R!OR`)qdP}6%D_GMdKk&W#FFsA|hbbP_?m&h{Uj_oH?ipv>?&i%kV4rXN|VrD%-;t3#jK -Ci4=@SV2w)?b8*ZZisXgzXofDmr>&6TzIZ9t4YB*u0KRW{|GWkE%wPU10~(Urz-T!W7GO;XF8$)J@j1 -_%@LX`_?g0fFyGwn;TsmRV71V!zXw2fQL}Q$a`~V7O_|-CLP|Z -e8Cw^pjY#O8a#jU9y`N$L_$OsF`h#|=-Par9T&b4@7^$V=AsdiuYlmMH~?D9D-Xjgy)vm4d7&0xh*lR -bYb{YGf$20ECb~SZ`7bmQ-uzEE%@cIpC-Lh7A+xVSJuV&kCc*suaFg -JqrWBP>=?%PMmiTTtNVBaRv!0ej>&P3n0Iv-n2I)l%`!RKFqMG%flZ_X9o26w(4r@i{d7g-f0 -D2TfrTibvWzHcr6NFL6k-drQP^3+?;V!scHZSk}P=3v66Ve?}}B`f}@4?-`Vv~BJuEW#v5g1^*D58#H -?h>Sth{>TCwjU+|-WXX}^hx#6~fhH4FC3`!K!vj+_UCZ_SDVC9t6Q=6$0tJ6QyLw&p4IJx18F*b#7>v -g@dJo(()Ha|*)^JX+u -Kl%Fv5tEx%4+$e_58kNAKMrm8ytkiH5)ebPHsXIU#KKjM2qwq>n&9mJDs3!JgA6e?GDl1Y1$?guFzOcX7I>9 -*j|pKWzXprMSyaAUQ+^zyEz-9xTECRtu~x!}9Mpm;~9u^<&LQo=$;#Zjw7$I(l#78A_gq58yl#&$9*BqPvG?GAPM=T%_juPrYN0Y9gD3iaB?ocKvx -wM3}wa}#R;fSg?c~;N;bEFWFudv6uTD^l@!_`PvDJmERM2u91q+awJjr^;}i@rvO4UPMdscle)(WHj8 -zQ^ggUcK92H9{>=}4nkx+JDiedeZKia*3HR^PdiIaTxIavhyKd}3g!V7f!^Jd+`lYc_xh10iW#SJ2v) -^82;?>k-zQ6i&Bx_g&j5WTYKPoR`AQ1e$8s$>Y}yuOgeLKD_=;chX_>w&yrALSZ&prX$P;$ -;Jixe7SIS7#XzaXD_0bco9Z-m`_4uAwAWuCzuY81vho5lOu> -z-FygG^T{dhwlh14tAEeOuJx8FU*B -#Ql6vWn}|DRqVl+|iS#UZBY+&gb~g8g8r+U{nNaW7S6oA)0&=n+(yfz>l&G-~mo()4%Nomckr#AtJay -ltFh`C;OM|cOp{1z!ze(`q8EA_KPk63Er&-B#T2!j0*nz|xRo4tjn)n<;%Qt!Bz&&io0q%9jSLVUgMD -T5P$p57nD=3{xt@Sc?sjQFIWn4U`a!C3$5p^{Qy(}yVikq8)9>h_SEs6?=zVtwqRe>+y(WkvHY2U0~U -F7h^O~3aCYcGAr1wR}52+~#2ZbG*z+5lYeWfXk#*2uN(iCTWBHCyN)lb|G2`!Jw$A9^u?oi}M+EbEm~ -1I`6_q?@)Ux|LTS(J9E=5J>=2>_$DhXD`!`VTSB&^7}+T#@yJcQ?scl@Wk6I_ -*qd?I-Pa`^D+7bbz9ojd$SQ1}c#c^Zqb&XpoJcwlqQO(*FEb$g{K&G389t_E+ftOcUd*v -&nb#wP{XFy1<bYyL)gz>k^a9-%O^J_*d)<>UImonIt45BEdebOb5N>F4#%A63=kybK-NxhFl)-lNB`0KOvZU?zl -cV#1#pWayIJ-41|00TQd?d52-Xi9`oCaArOr?7<^xloN1`n(Df`0ZUa82DD(K1}+kI1ORAE`rnQw9En -jlQML#Z*P0N{JFYbp$&r1ig-_9ZqA_VTZX`qhnY5w{+TDHEzX$#~Oi~J0rlI|3t4#H+8r8n0f`SRk`f -XDsJ13(!CZWz!f*?=3W{k&@W*8c&;J2XO9KQH000080P~d=N69 -J+`$iN10Q^J%03iSX0B~t=FJE?LZe(wAFKBdaY&C3YVlQ)HZfSIBdS!AhaCxO%dw1J5mjBT1dFB;!wrX)A=q0 -OUm<1Ex@Gp1ZbQQG2#0%&BY>=a~aA=qP<*t)4u4ByuMg0GP?R%67M1^1_6jsQ!$gGeS**=SAHm|wN?Q -aia;e;SkRAJ(Irg$yDvqOQxoP2Bh8bzgM%;PjiBLxKS60w5vC!DhOd|+x+}hh=CaC?BJCocL=gxQd!W -v&GF6sCrE@Ct9U1Z^7vSxvxa=BvphTF^3%Y~!o!qS?jrndt(hbFe< -r_+Pz_*At4LTAjU1VJFl_uB9Au2-9OIC$gkkn(j&3SeCc2eYKz)6}LU7@n-R7q-?vaHiASy_Aef?R#ZnKq|t#cupBC-(5diw?V!XY!P@VnDJAi$i+Di>sd=X45~#39f*lozVGeR)!-uk -pxCv@h2laeSEm6a$KqJjbz_e@y&1)m*{svq{(!XU76@gQW!n${gL@79Y%1o@gs80T*3utrVWqH+C=tRE>gsc6X -EJ`fkzKo(q;^%ft_re#L`M#Z&t?wLaadE(kZ@8LYBIzzfW2$#5TIgM69jT@k5nhn~%!G?TF4>QQK -*aVw7SwsOh>U^@+X#&o(j7qgm?*qRF(nuQtQkd4b`-ex8sd -~?%CszlJN2S!6Wcz|#@>RLdj3)nqoJ1(ZF-3EZuQ-Hd*T+UWq`#1#85`v+@T~+K(QYS`O`zm6dne|N& -*vSYxI25cnn=%wbsgPXAlqI%F!h&^oQzF?-7KNSU?^VF&W0iXwg%@Pib&$UgI0z!xsg+~%aTxLOYV$y -jcSE41tEwAj?Twg&Mw&OFIVKO`AuR(26-!M3g%+WqSJtf#FJ;{BW(mEPw6Jnt`t>qYRIVOpl&_V47aN -5OI~_S~qUx9l@01`1E2IbPT@R{THk>vFuBdR4OVJ#+k%jZE41YHmSI6A7$8E^awu -w~W^e8bR*Z*G5i0eic?IeG*z5?AR1Z6Ns5gPwV7q$y4XV{>%rFi>}N`VB8jLgVhpHHwR*a$X -)S7i3r(~fKj(6ltaw*K;nYaJi7p}@nQi17or1IdgzqZIDKoBH{=;1V$yY>*ZyCQg5#&Zc6ovw$#H%fs -H@=qC?%lsZ!y=RBUORw;h>;twnK5i-%obXx2=Hrd3mYyZ>9~C>%x#=S;%scbh6uY_JFBw)#94%9(pgd -^cJJgk5CCDbOzigVSsf~G;xhX!aL{e{d!k~eYlQE5Lj@P-W;wqOdS#r{I~3wOu*X7h>cT=`&Q6U*?62 -9E=Sef!+)W^s(3fIY~X<%WY#l6e(M8b?fU$W47;rFlBWP?mDrxOgx{!sOnNKYoM~~1*-$!Ve -_{U<$Lik5hYeWiBmIZ|0+0s0w-rvFHyb5&Ni0g~S$$6NUi -h$8S-<3#`qR-ge`0oaBE0T#e%s5NXO&;y?ftIpex4{I%vh`pUr8RVMkJ#Gm-Mo-rAPM{PKgf(to;Nod -~kK!i%n2>}@>PLb0K?h&2&*l|6JSoNH=dq`Q6PCm5zF=kU_Cbe&~*48RDP~#M{3e8LQTrx*`N88DTfN -m->6G%#^N-DB8=w&A{j2=-I46%Emf)PP$TH+L&+uwmy0Do_zab!zzGW~LVhckm&;XC4xCnbY#Nz<1(a -a`xsl{|rJ18dAN5)k;wkYdSs*;SI7L}eT^yOe&s> -u6JR5ty#=ws#&h-D$HpKd?|XwX*fqmSz-$D&eN1b30HnkrBhp}WmSRcrd4ebrPg~sg^;RB!2QV6#ey< -)z$FqpFOW+-eV9X-$~^EPp4kU!Jeml1we-qUx;$o7WEr?8PmUc>JU=)TbY45KQlnMNn;t*haDL?d!}( -s)wMO#*gEiu_gKm!VZgA_hE(a#uXx_DMu6-OcoBFW!)T2pr>?+&CsdT9Je4R((`G}8p12#dbUb!xDl6 -xxl-n@JF;kTIl+`V>?28iR$4K?XN*_x*DFL=Li6XcJtxwhj-U5f5X?b_U!RsImg8 -r^k4Gpk5^uh%wqxYbguJaxf~3=mru>3{;=%qUB2@EEzDmucEX3YUn5K5;fC(A_q*5#ZhHal!G~SrVEC -f<>Mca|I}aSJ^Z;#o-#mZz?B!FjKa7{6sUbB3|5EX#OyDgijrP~S?3=b;|s&5V^VBUH#G-tS*2~*=~b^rFPnT11s+ -PlV``i)riZbvSq-c=m%-Il;oYagZgj(Y5k)v}-VFh||H#Sx&mC;MLe;(${oa|n6$*1TTyJ96e#KhiHl -E!)ZAshm?O%CIiN%bLu4Z$Uv|{Jq;c#}opZLt=kGW-vtPtW?YTm>jLFjqJi*+a5;m9!iy3)VZKXLEjv -J8yidqxB??@Bf=qBMOlU3UCTUWKDX10i}CZ@mew#Nq{}@4+w&ekms2n(|5?fd8rl?pZ->JP3I -hDt0hLF<9?uSY<~R$gQ}u<7_UOx`YP8jp&S}-^6GMK`n}J7O1~8{y?{GAn^t2yOO>ALMqjlH~7Uk$-R -nI0Ir|h!Tw4;O=#|hwHAVbfQ=Lw9!P#N1c6OCZ1`yX{pBK*v0fP^sp*8H^)syfUiY9@c`xDB;vLZ_q# -eRoLx;ZcdzFxJWnH^R%-@AN`#9wot(N)P* --ln6AM|hu-i8T&*w8x$VI8`AAOkQ4?4^58U-b@wtOe0u2barUFo(Bg1nqTCz3f&4eH8`ApQ5oHm&Q)im|Db$DX(;t%GMTcovxVxN{C}86vb63ZC@S&(nzR2Filk(Y@}ABO9!){T#dvvp{*bK}U{=BT{KB)L1iXKw`Ao?hc+ -F-`e8e|4$E^w6C5m{J(48z9$4v#1W4OG>PSGYo$H<7dP;e{veS$?&q+AGV)X)ML3yE%GNbuPCCTpNXivbr -_mpi))6_C65`A7%w0wZt7cq|?9f3__(T;wn99*E_{UxL(W;a4IoJRkNu%K34nLna0sMafP)h>@6aWAK -2mtey7DrMibLe&^ -r-1V({BCD+%ZD2xJneNCL{%nw3h-Z0;dLV7L!J|ebr=P<|jj!5J=mT%K**9mE0y6n-TFql7iMBuR|0X -g9X;KKnKx#lhX`U&y;-_1w#y+vmsd2LSVSrGVvs4+7c5Ex-6EZ=ph6+#PI4nL!Y --U>Y#l#Fu3wpxJicv3gLWh?AZZgYpexxDNI1+#TGMmxhiy!@a8kE(tov{-_`3Zf08hAb9T=-*QB -Vm_l#EHuX#$)9Bv0y=YHbW`ZOGQzmDP+8;xK0kUSxq*Lytni< -n{I37#(Id+RiEwhflg=MB==nFlfnfSVVuoRmi;2UCC>er?;jIc>WV>o&3d-MntK4A0}4 -b78_AcDUm##Pv+q4*+hUwK?qL(63J%;oxk78F-betH&$f$}|XB;YNA)Dn`)FhTUWf%WnoR{E-Tv!5j= -ngVj-L)zE@c|(JdAAn&)2f@0%J5XV??(ee{bmIehy01$r%F(N}AMslKVWP7Aj2Z*h#A+Pde8%qKzxxT8m@qDL>{w)C0$_SXa1~r-2YJ4gOs0T&F6|CL6?p~RY}obMpODan%>ah4Bgi}hFypKK;LK8mTT=O@_1|!GoBIZ0AB -<0%V+23=cmLEIGZi$Ysn2@2#5h)QYs&tTFw+;14@J6H|3w;tOLrx{!DCPNM1rv;W8g$1hDP^ypr*)L7 -WkZOQnK)IfB?Il;0Ny&aKMsRf^+7A2m(7wu~w#e}D}FG}@@cJX}eB2u#~~4_`k%PAy|3*q9YiN+F4PG -QTH;zD!$1eu8~iw*np&MSmeAh*YzjXCer|fWiT3nckSj>N7QO(Wn^&ssI8CE!+1FLo#uo7Pq^U1(t;0 -SVggwUO#6z7B(bDhX!XMJ5ew|E6amqJW@7RKl{7Bz3jNb4~7E!Xo!Zc3_aFs9<9Jw993Dc*faJL^yCD -8=o!ZFH;7VtNuT;hLI&CPpfMB1r!+FANqh;Q3uZukGzF&0KWz+!pbJKejDdb>OI{|#t}=C&Rrdsaim{ -UBF#t5_*mMUtX_;YIH-M;Q-~pQh#~Se1cW!9nE*&jw_YS%Oz5CNhh6R5mpFey^HG;ap$zJdH{pr`o$K -<;cg{$xfd=1dk2QbOC-Aju-g;I}?&#_!z%W&h@2=U8!XpCh!?*VRj;z#H_W)!rVhj}=Um{7nT=1=Lwz -b8F91n)fc?`UFvXlF#uzOuF)%kKF2__0QI@b%Xk*@5)2jp6RP( -Od6(#e?Y`W!`>zD@AD(9dVYQu|9g)AKIUK45+FXJ0-=I>2u{ax1lhoton`OQC@()y>Y`K6@ -wrTpfrrnJ72HNTd$zLwv7)0EaXvgR{M>zVxKc~e@?Wz83o)(iQ~X;WIKvgVnjbtb<#Z%XSt(WYZbOd# -4-9@6kx8oFxts0qaJ@-4z#(tdrY!zanFsSnH$gZbxiR?P#@!{CLHUtYW&d_msK!wJN$H<9Do>`-Lnz+ -d8jIcMU!-?Oo<4;*w -cjV7$zNW`Up^I((a!`wry>C7WBOK&z{yV-@!UHMlO+)#Vh900cnT5kli&Gt4?@Ar%nZY8k>=oo!@?rz -k@5;7C-TV&2K-O9;gYjjIY5#6Q8-|9>R7((dqz&P)L1owNIS%UHk}%XIV#GcF!jnzy5is&L%ul8h3Q9 -3!8kWjNKg1ISF!d3@=_#VKmamL2ei$|g@8B;Q6gYtA|c@UB7-}}pnPhEIGaug#f5?4pBg2zj$$}|rHU -&JpD&NE&@<+;$~f1{7wN&g00i@$afI#m3!;H4J%uH5Hi4Ys^9%L2lambjJSJ)cq?S&{%wx?=M}e|&VC -2K3pE0|TWJJ>WE=Yk<%BOzeA;T#i4kMo7W@z9~`FvQ0>r%OkoG%1eX@>`o1#6A>$klg-#y5zDF)gBni -^{fhoXED#MEH0kLc@_0usFwGhzYS9e3qE+donHVlV7#wih6;HP)b2e%{4j+Or7y06d6*_#6*GU`H-B+Rjw>COrx;S51?dBY3% -wprb{3Kam*Xg6hp557+IHpkfS6MHcBFa>##qaVIu;?1)Q6NMK{1R%+}zd(1hk_#ej|@V6tD}3qmDfn^ -FJ=0G?|M7$wl3W&0^|IK7-LCHWhTF*zdZrmlnyCnmeTrE_+TF7q0~gpu=JlVQ}H`9lStF^_IU(G&&6AE`G6UY!7fdcCv}ZSeXpIxh)bGri+0EP2< -Ulu%s0RsqwZTwiq|qkJ|KI?Bi3uu?mKjEB?Hj)wz8CKAlV)as*%Qk5C^is}NrF0sL%1@&XE)3heWPbW -s1$uHp-@Tv9<`5Jn6nxQ34DNK=J35&7&Z?mP18Y0ZpFRR)>&dEn*Wl;?0gRwobsk -a&TD#Zw>%i_k}j7)Yhba~OQR-dM0UoSh4+vtZ?Oelm;`7-dv|tl> -HKRo2IZMpl$SF$f+zYbp!Rwn%DYeHcpT#Y!uXLeNe3x-j;%cMlHFS!o{(kI!!hhboP%*6%v{4TM=#5U -WNHNb{D|c@95J4a#f=70ywZ!1kkHCw0sgRfMcWz0g}7hR=8}|73 -)nj?Y)#_Hq=e3Qm2`lIKLMK-5&1R3Ja1cB(R$fXDSOAeGhN3{Gx*vxXw7~o?yhM+VjkpIh&hh{*9*H1 -U}h%Nh3_kYFwf4-eYKm26q*&G04B%-2$0-)4DyK&k!U~nBf?-30P{VbACD25k0?iq31=y0urTcuGuV7 -Km2d0d`%z8&m6My3;uJFWDj=B|)D5XSA1*Die1Ow1lH{!XtYCEP7tB@kasxc#`N@7xzj*SCM;pMvXlA -47WOonZhPopH;AE)@NKTwjx^v`2R=|bM*mLfViC}M4VJC@D~bWWgi0=1n$IY_SP4-}xU@CfF8NZ*Go -xP%(`E!wIH;2qdjfNh&juCcA{m6XMPb$H6Y6iE_?37wAhUuV(Rms55tEZ~2&*;VCv|?^)xMEceDC;K%xSN8f<7=plSP6 -K-+fSFOE^Ad)bK*~gK{l-R%)0gbdzac{YD*FyDi{fRfJ+^Vr17+{N$}mfcjP7Cmg5I=+#GAk&2hNj1h -)x~;Sc86_~s_68sEw@B+sKTN6Gea6AP#qz5-t9&hZa1(`tu^$cs+)p*Q0b9ML? -O{)fE8jgW*>bxuQIwU>_YYV;{QX=&lmTK)_3mYCw2Iv~{y1VU{3)&i=Gk7{jfbZM>;gyDp_}dSv*xU} -fauG6rFMW{uEHK=QN0Evr?9U@^)*29rnOEkl%n?4hsxThrd#aVg&|UZv<^G_d^v7u!ALOBGVwSFa(#F -`94?;|T^AeCY?pfRGv*lnlYa-QZLBW~niI=h37!^a+%?^#BR`vvdD&VfLbov>uP$b*M;=qz=)^6@7M5b)Q57_c-@l -w&qWbvy;xHsCyBM#;wSRI+3HLsY_mMk@{Ho4U*QAlxd$_(buqtS>TZe(b-HfoalBBapGSzFH~v=+YAU -zX4fah*Y2UJN=#T`UP5kgh`#We$E5q9}D(Fp$8X1&*3kQNv<1%TiPj`z3pQG!mUKrw@Wd3qm|S7Z=XKR>t2Jv9wvR1b8bm7=}w0&vzsw5xv{Xm_*q -DQA-57AC;*6+_$h~Icao($zC{>E->i=lT|s?1tyybOlkx1g6&Sb5uBtQERRnrHzBO(9zUthK`Pzk2Q_ -n(-=8=tx5=)q&g^_NmGA1F1yn1Er3?pVGkBiHToJo_nM`DuQOC2=Z1>MVPW{J@GSZHRly1XCPhqb%^L -AKkcg&r|d(XyFzU_D%EkYKQkWZNIXpx+MNyBw)KFewV~wl|x+;f5S=qWx!bcv{n_wy4A(L;5~5o~1H{>xuBIJKN-S -@+<$;a8t||naero4U?$(j22{P`Vm$9cJxC)h(qJ>2(KpPH!G}w6f5}hBubJpMSq?!wfumu4NGtL1IdL9kwIX4 -OxcBl7qevrRE)=0p9ufHtq{=BpEP(k6aDSp6ae@{z)bBf$j+oiLLgtvX8f*lF -AaiA|H{sgEOMRn3)bP>|`nW?Pb&9u+i#Ytm5BCoa~ppHk#%u_1k -d95p$1-?ZY6SrW$^b%@4h~pj(K<$R%7msPFVLpWbU^Vlp5r3@ -HdZ7KzdR81-E7rrfTJ5~`9Ij?O8K}r%ry@J80a7F&gV@IPb`vwy=%fr_$?J3)yYAb*RT__}2%R#Dz3yN3UKi)P9&wOxW5sR-$eMri`j*%~?`-K~W^Gbg}UYWO)n -8c&^#1aMLJq@_+YwX-n;)KLx@#?(kx?&qx;!YG&5x-Rxe;zpj3&~UB2dKBCr(C+qca<@|c#S`qQRq+2 -(6NBBa%buRZ=P>wbHZVjjmCaE6C1}x@trQ&E(7K1YFTaHNyDTyM*!W$sfR1;RzIf+LjS;P3Cry6|^l0PMk#V&_^0S9rllao`s)Zh|eK@zJSk*L9cf>$AbSAm1g+)jrdIQ^Vwnk9 -iOEnsFfn_)Pga{@#xVxWkz;Co%$5F(l{eoaRntg^)3EwO~0C)*<{qbQ=S;J=*D%dmo`*-?Ryl@YMQf< -PSbB{60-aNF$Zd)%G6P0TMVwD4)=<7c*#%4dZcNOZ)Xb-=TOo(oW&)Fpg(lzgF>CT6s?RkEsvcV@|(V -KVnjYUDHaFdGb1;AEekDgdw?S7Zuqv6XZXL1si7r48C?IvF0MWwUmLc^VASs_cZUUe93@AS0dkt2;N#lNy{(JkcP -wl#X$4g)h*5gaA8(O65s`_>AtZjF;kPkbL{Cu}PPQZ57MAqj5RzH5HK>*Wg;IQvD)Q%CYdWm;C>rOYO -H;$K_;ti2#PF2pQ1T>$U-om%LRyl>Ro#FDqH6CuQ`P(kSqcX;ABIH5g?b7Wmur4cSF!?p2cw#mCiR4< -NUckvuYU1X{J?#KKe1xGG_a?miI~KfPP_u0kEhr9k}Y|Ny3hg@aFCs!S>w2Ms}*RAz4&7; -6Dt_(@ElB_Lh2C>vepi;G2@B(nY&ia&nW-_KxJXWdVU_;2=Lkg&UrJ(dCYK??M?o@OMDjWI>e{A>(_{o)-MKb)HQDK^KK`md0Wq>GtskSP{E6BVcU`PD-d@>{;Ix{;7G1rErw!uv5$+O*>txcEt+2RTH(9Flu+Kxm -H6r8)TH+2DTx)0mI7=7&&wYz8;xm>-duzAh5u7k^&{PaG|fvK?lbflcjiiSM~{UKRZ^3zfG~rZ@w}b4 -m}N9>#C&%xo|`juZ-V^bT_;neGz2%lVne#P~sWmajs8O!*EPt4aOO%$q)~1X#uW!Kdox`}&bd5 -vjJ8)qE4bxd4oCMh*>1Lks1g#GN>Bpeis}Eo)bsExR(0*uPZ9It5gnV%65)%0xkbVpdjk$@@h-H&=81 -n;&A`vlq2z5UrsAbK)#_|)UB|zXGZQ-~>7b;8l8ta{4Ny{P!kf*Yg!hzsneIIE?6>im53*mZg;`D8tG|cF;kM1bdB~ -d_rqN`&nU}^&)8B`{pgQyM4*$AoENb=o91w{c*%Hct8E1v=vLbrv8 -9VXwzJx{SU}aQZQA-fyV~}U-R%yfh1TLsy1dX1aH|VcN?&cPLXV9ux7GE>`C6y-pU{bW53VuA1{YncM`QrO`oRChH`PotA?A6PQ<#I+F(x(h4=ns72 -WR#=qOXPEzUUDK1k4G}u#;|1B+5Yk#n=2!C$bX$mPxF=V$Lbfg;=2R1t0DLl-?J(*5Fg+n4Z?&Lbf-` -xRuz5^-{6ZU;%11es}g&ZMdK3)c&#UcFRrwO^>2gedn$=bhGLhMQ~zU88piN92-R|`c|cC7>5_XVoDe -T^T{58oC4tFr=m{sLCtuDIw@D=RucpI~n54_G@OtGRYkNT_Zv| -v~;%F$fQ70iQS_AeeWpQmYt=mQB;xc?(z8U-jOqBmsAw9Hnfh5g7mVnE|8jfTepFW?meeU-)XO{$*DE -Ev=tY%4(wFzN28fwgmuGy6aLm#ZOvEs)LR?fjEg%qm33pUR~x^;t5AgK7To%LMELcl)v_LQaLnWKRn1 -E_;R-LLJXJhXZ5@he9r3EUb7WR7;E2#SYcOiYbS3!sH)W*bc>@L{u4mDpJXd5*Oj106D=@& -=?K4Mam3TOo7-MP422*E#DLRhsiKkJ$E`Rs7;dX4w3&Ngy#JD^JzQx<4+wC*3F-5?^`}Q`SF)6)*zwwFeCXX@7aALt6 -m*la*y>CmY6`tkP`m;U)L+wid@PXYtx}F(n^=1=ORgxmw4+4I3wS1snJl4vkh|A?9WHh?{7oe=%7`I< -K>pu9?U7sAQZFKK1km%I?Fl=ZBru)v6R-_0Y_-I5oZa-YM46&Z%LIU``DqffNJU9`x9N*C+w0U1k)A@T_R0WCCOA -5YRV7?i+JS?5Ep4XfMqDALjWE^Jwqbx3?sXX_>rBZEc~>)(OO?eQ9M4)*o}J7MY124o1aHdtgknOgsK -R^zhnj`RwupMXQ^YV=%<7x11wdrflJlNG)Hm+=d^lJ|$D)i>JTvi0rRI6pSvldb`pgD&$DYgfV>hb^t -b_{2LyyBO$Es;?@TIAQ^~q(~Uf51}{|hqM;Q&ND#|H%;hVMMZHr}+)1^oqC3|nT-LDJlUKuZG>IyH2w -!E@)6@8M?gjCyaE7}!DMp0LIQHl^s>O9xdL192+cvv!q%NTF!kVuF9Te1ArFUY;)i(ZtzE(^l6N?irH -e!Ks^8DyTlgKD)GL(|s0&oyp0tN3C^LG+&?GWc1qwovdW4#sg%}^lLQzF_}D$aJogfJVZF%BFMQr>XL -u#QZU>Fq~HqF7sW|WR;MTU(GQgFrFPsWozW5gdLbSUx+mRB<+x9>@0p&e&012f?#f2}b!7WYjm^7*On -dVz&>MB9a(Yd-#@=TL`%{iwnF_%+o!^v2wH5TFOC|Fe_bRfO)p2s+_E1939UuR75lUy>v!|nTxm1{|V -C2i!U9;{5r*ci`wvf}2a&p-?I=a1=zXlDgXT!5{cT0tKL|8?UchezBvIFgl83`oCQ(yEMCiIkc%WfgI -VGmW^gG|2%Wtek}!@wDku@BtWb6~%gn453p0$(}0wiI*|alg-}pJc|)zJuaJXzW9#L{W^}22IGRU_J2 -KPZmqz+avoLjrQMnr62tZP)h>@6aWAK2mtey7DoU80006200000001Ze003}la4%nWWo~3|axZ9fZEQ -7cX<{#CX>4?5a&s?VUukY>bYEXCaCrj&P)h>@6aWAK2mtey7Dpn0`^1$10015V001Qb003}la4%nWWo -~3|axZ9fZEQ7cX<{#CX>4?5a&s?VVqtS-E^v8ejzJ2;Fbo9meua(+gg&6qYri2JM-D2ERV=yhuR}~Rb -Z^?#jueX=fEcUQLWsb}TZ(~SRZ=y=YhGaE4=YPvpk@xT5hgY&KB;pqB(DljPR*HQeNnLa?x1O-*yx@6aWAK2mte -y7Ds;$kWL^0003|T001@s003}la4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?XY;b5{Vr6t`V_|GzbaZ -lQVs&(7b1rasb&pMJ!!Qhn@BS4crvyUSxzO7>*lCCER)SGtWtci~kd@N>``Jl5+O^fmAMYbQ>e%<7bv -Mbxq&3)n^eli)@NN>)>%9bHPc~RTlrRmp^@g;wLX0jb)ukTQ71a#}Qc8HZ}k()Khs09sH5-V@sPW-iK&ITOU;&?S##@6aWAK2mtey7Dp9#c{; -cP006oQ001)p003}la4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?fZfa#?bYE>{bYWj(Xkl`5WpplZd8 -JlOZ=5g?z4I$9s%SwXwCAmIOpd)Yw`gTKFa#^cCbmhsit^vf?N`r!kY6a2ZB2aRV{Vf8Dfp|AqWG-81=r5Dl$h1(2d<+JGf5+}4B@wqxSR?ObTh46 -UtgDLi%jnHEY~kd}st-Z=5XY#b7mV3nq2s7Jg^GxE$t2gqIMqhzk=UGAuBOp?x5A37hvP%Bbdub1-?X -jmEQ09*PR>BMBZpt@<v!7p!BoB -T>=9WliUy&f^YD+sjjisGf_0+wg`sUfV>$?^Y489Vnk;AR=3naaSR0{{SU5C8xq0001RX>c!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bY-w(E -E^v9>SM6%sFckgor?~SdIFRK50%MdegF#oy+Ks{}Mz!Tut0Ngn>Bq+2efLVT6DM+-bQ>GFL=m&5*){f=Z(` -)PTI9>%~&oCMrFe3Byyb&}0KTXAH=R17KSnWX4$cS{Lj})h;TVk -75w%fXjuM$c7>C7ZvydGPy*mw>-SJfC6tLm!Gz#fmj)v~M2~3uOtn4Mzj;DUcEf69XG^cFiB`^b>b6h -0s;{jf;GVNk*$uzk88Ej9Ke04X(xIJkL<6cz9y|!uMIJaKPPgsM)(uLY4Dy6p%!aG(koTma2s)gxg{D -A!fIcl;)i?Mr!m3=Uz9qAC$&N73ZU7iF>e$@%Q!JWY}fCxISpWZpBUEaLFSgY+IY -PC2Wt>oYY6+_V=_n0sqMk2P0>IrEA`n4K1~AXZ;>G*2Pf~S!SKTW_HLrTDVu%J?nO%Q--sTW_LUt;~q -^kGNF0C7xo6Y%Sfl#rvvrHQ)kPkF8npK#z_Rr($9ocHk+Ruv2A$Ju&}5&>UA766fJg!IaH|y_E8uWYj -js?0sZOf9SxQ?-;xS%RpD**H$MpiiJiU(Tx6MD`j&s>dU**K7Z+2wzhM@QiPg|YY%fXS&DKJ2%CzB*k -}CvU3s#G7;Y~z~|F-P|nn?ZL(ECZ=N_8I^RY$-nb?FvMtRCW{;C1P@CO-jCO9KQH000080P~d=N70jS -2+0Nj00b!j04x9i0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;$Z -qN7%sous-Y__XTryMS0=^nqEUUM8Y_xpL)z;jx_xt;Mxc^I)a!<5WnpyQjmMkwBGME{))tPMA;E^vqZ -n?#(lwqmAeD&_JkrJ*bi{Wu^RS8(TQTPTP9g --A2~pe4F6Y%+au|+(-`RrJ$SIo#2UfoS; -!0M+8T*vg;ygOZbBQSu%VN(#y3hZDJS+gag@{@7O{zwa%@Tg4nGjTjtup_f=j#1ibRn0Q88+=UE3IXJ -*4Q$+8vKJOgy2z?@}jja0K1Gc6%0l}=q83-aGiJ~+xr3J66`A8JNsGTo1MSg6znI3z2{MOSTxuP?5(# -}l>YW&Jb@27Ued^(}jn43em#sc3v7L^W&3P_8$27Y$o7&^~U#LLZS7?;|j-touc8q2p<#49tL>!FDTdz;>`gR@R&KgXU0F_4@u30QV4f4y+&z_=O_J6iWSI+(kfR0QrbsVGt -fbS;CVhT_Ws4PqaV;Lgn~osft290gM*Ay_;f7*9-jWJ8L!w{&kK@9Ooou32{lL1J;OGICi2ZQ^kW;+f -5{b>Q9%BqL8mc9lWhyq=e*(W%Vv(=Yp>Taw#fbz}FS{wlf#uIYj?>bPr95qfrTVvKW6gIwKtSc|GEwT -9v02ma$}7&qfhuEdcizZN@%J$%4{m7=STof!$;{T-zz2gIC*=?(H@5z3paVs}G?RXaa7BQR-$$kp&ki -W^}t$Fd`26Q*!aqthq-M$>7!yUj~!3K?P(WxRw!CzMk#G*fQimIC&c_lB$0AmY`w@VJmUPL_!3A_ih- -Pp@<_GN;%a*2~sL)PB*A{(o>-KE>Ygc5c`SM$*It9y^PlQxWNc2{L9t#x2~{Ht4cSm3a#n!O239nJn( -$t<4HYOU!S|sCp#25Y7bU-3uQ`P?b?AA`Cub7q}`0stA3T8y|JLbW2j{;^RTtjxJs0kCMw;c1F>7$co -{<8tQ8%sOg*5#raY!nIAvHhxAiS!w&Gw0a8+@v5$(Q=DQAHEtYXHSE}qvrJM%ENyu&}l{ -;2DscfZqPT&A$fI2@R99+zD?Dp&YL^VK0h6Ke`Gy@~Ep^zf=fpHy|=FpyPmu2=s#MTReI`m~kp`ih(j -vBuNSkz2+!Ne{cE9?+j)#_oXwPCYx~U!*xt|4dO66#sGttaUZThG^7EElYK~NYwHh)|ULucj_ft>8_! -)?<4iJN~#{);9aOs-R+eeYqy2n#K?{~Xqp}o$EQADoXeM&q>?|yag`2qTL-ArzXAum#%of?OY;|%>oW -(fSTAIH6MZG^pny3qFMsoTs?=6n3l-3ZALP -=LwEgL=l1J<2iQ;lUH6097l~{0mS^0|XQR000O8^OY7yIIrZPu>b%7U;zLCDF6TfaA|NaUv_0~W -N&gWXmo9CHEd~OFJ@_MbY*gLFLPmTX>@6NWpXZXd38=p3c@fD-RBguY@zf3f?IK6SGph4W&(q0BKe4V -dYh&d3;GrV^L{+--3W*}#pDSQc)U3uLH5C!6bZ}UfZ{s`cD8|Jd2ou*a3n8H5JKmUc8y{$11($|q~*v -j@~e8hbf@!5cKl!~gcytr0S;`Y#%j*Dz#lJiuANQZ$PX98NKis+IfiXN*36{cVGK2kx>$R$kJ -yx&TKW`dSho@65EoDCzDY{6mL*V0|XQR000O8^OY7yW3^fp&;bAdb_4(bDgXcgaA|NaUv_0~WN&gWXm -o9CHEd~OFJ@_MbY*gLFL!8ZbY*jJVPj=3aCwzfO>5jR5WVYH3<@DO>zejj$RPx`*U-(Ouw8`K9w$m<$ -w+e2^w)Rfk7VUd3z>spzTSH?mfSkqfe`Hw28Tj`>U!$}$b+|f2q-4MfJQwjudFFxFsil<3atVq1leFq3y;eaBJ-$Q;)2=wnTZ%azXn_DAlOGVpbQ*~EdK=)Exhy*W^CN?=<$70px -U{H_PQnI;a1*p_?6TwCQSp`tGGqajvLt#Y}6GMl<#h9r7Ib8a|vHql16>3t1``~D)KK)|AG7TKAf@Pt -tLXf&7EF}iD;fJemlNDWjljg^Z~3%3+c&Nf)942Qzkgu3^h(S$iwqJI?9gcb3CZ(1UdyIeZW67&e0^N -y4T>f)mru*#iTGx@_EYpqEOF^p;r@c@JTn_{`pHgq<@Kl<0o1A;gDUxMFC?S`wLJ@0|XQR000O8^OY7 -y0x`qn5CH%H>Hz=%D*ylhaA|NaUv_0~WN&gWXmo9CHEd~OFLPybX<=+>dS!AiUtei%X>?y-E^v8eQ9* -8lFc7@^6)Spy2=M?U)KjG%+Fla1+$;x{u!^zK+HTaoz6Lj>QGKz-J3BMG9@tJG6E2~rPjX~U3Bgcjdz6|yveHh7VbQ3nYp-X-i_&N0tv32eJ7iLtzLBrQ=fmsEetQ){^f&6s8_}Vv~63%ezZaNa6#x)HzN3v+~Z0}>7n^M -N_9eii11^D`BEuXG7Z0>plKlGs<$96irkNx|4+5DF)rxV$BG=nyV3!lm@Vg-|C$k|;5-}=R+rSr7=O- -ys~AlmuK05Jdn0B~t=FJE?LZe(wAFKBdaY&C -3YVlQ)La%o{~X?kUHFKBdaY;$FDX<=+>dS!AhaCyxeYjfK+^1FToN>5^{k>xaZ{cyJBnOv;)GM6-&$e -ByW$*>R!S*ZCc0m@P@_up?907Z}lDJSjBoia@%aNoPw2f(h1EFnR#DrH%)ARs)+vqBQO6j@wK7U32_mfR8sOvl;nL>zftiZbCMMrz8e7{mKhd2)RV~wU^p-vLb2&E4h?jsl!KT^eGo{cFzib+$DNMatJT5?c-RUlWc?EUR|F -n;|QMcm=^I)`R*}I^79FKd@JE^Cc|lmR)_n|<`c+#r{gDLE7FNA6L&rYv?Uy<1Zhca;*jC93Gv_Sc%3 -UAbG<*z+I2xw5rbLPa@&yw!?3>j)bg$|z2lh*y&3rdvLI_bKr8SG3ALrm1QMlG;!U&VuPl@|_!WdM1AMq3L-=`4Zlbz{_+80t^Rvrl7}P7RYD4 -)+c-i~NvTt_z3a?#hD*^9p8sJdcH>Ka%I4&vkRuTO!{HoWe(2hksM;Sk_Xa_ -+a?wab3*`q%nJ-%DDJsj``)?NS9tcmoW%%YyP4Gzp-K%fAZ!#Tq%ElGo7yJP%~TM}fNLR|^vz@4$~B%q> -}2uA>^RQa%n~j_7RNMY83~zx3~8GbhHQiC)?daso6W(2kI2MSaQo@j3O&u2$( -F=m_Y&&IScuUvuF%a7RF`7&T2vq{bm?-pWCg$zt&8yp=;yV01Adv9ziU~ood`6GD8)4$_T)bx|zmE&Q -`c+QH!#$M69~G>xAgA7{Edx=loXkVxJi;GC7by<9-jLVIeR@6eSp|Ee>iiDC+CnrzImGKV;0W*sbYz7dvT*k~$GEQr$rTQ@nh6k(L;C3iN&j1k^u1QFNC@NJ! -0Tx&RSVibN$!Jt7+TBGnW%JLiCde|pMj;o-v2FeiVZ9L_N;9m7Tjj@;fz0rD$qYn9u)zSvX;vgOwuqT -H6cvEU;QM7!f@vuHD|a!g#cZdCgJEY7NJ^c>Ad&qW*I_QytB`~G|p@gO?Gs1k9Kyp`c1r -b`4niBsScv@t_ECHQ_z{rbZ3ls^{DmL|sIb$$h1GH(~mkksax1Sd4tdI=0i9sM%xdqm^Wy!B4MQJGbp$>g0@DJd88JPE?--Js^aw78rU~ -lS+viyHqCz3wVI#+6g{Oa=Ej1#u~^fDu@VC0%|UK6tQ$XCG#nysf%@SY6(ABlHDG7i_I8**St-HM_L;PE3R{}SwhyWNx9hHn5)d-&8itI8^1z6!sVp{IRuEB -lT?-@uC2#(?~aPOu0O1!lDz(rYc+*1213K-TW3`oWKy4yTN2>Gj}iiD0+e&G)dZ#%-#z@qeP;WBX;~9(Yqd~1|G(%~9Z`R -UI-=^tjV@Tk?`eF;iV3M0%znyJW~tZUUY*+5y(n~D-BHsSNVXC76xI1DLOL4xrc&nGVZ~!?uUzoe^}r -7bq=8(kigK#wzDxbusz=aER8?Oi5V6k6IKo_`T2WID-k5xLO>bL_kJPSB=$0pCLfC4>Lk>v;Dv2tBP` -_f>eb{q1@v0zcw>*RPuzHlQHA6Q{tGYADxdJNwM8@4pGblm@sVdDMm*R*#w=0QNY7*?dAON83%L#Vln -QAwU92S94g$j)#8ykb2s!+lnLKUcv<~_x5P<+5ie}DD -z1@VB#am}PA;W*f>If)$%qRE3ed1UeP;(Gqt8xZ^uITs}OKaG5t?#JYEMxOQ`Sob4)$KD}i{ODv*l@E -1&$SmgPN>RvZ`AGUJ37*sLLE(35 -p;2SFoc}p^FC$UTo3&hr>NbFtLN9xdt#zvG`}Irm)ya0N$HcB7R6ydEO5AiijQ8H!P<+_FIxjD4rpyxjJfQQ312NkQMR%m~yc6YVpa66V -BHL(P!rs{0;w4#2G&3Apeh{dT9n&wprx3EX#`pwmwGx8j&^PV;lWvtk~4NF_rUcY~Li3V!I$3atCFcfvnZxO45@BeQ`jQu -S2bTSU+vrP>Uay&A7?YgC`%Qq-ZPU-$B3nk*wqwiB{DBU=>8-=U>8HDx1TD&e4uUH;nRom_%HZ~>S@;t5#B39}+PGW{R8f55Dl;2dqL$6VV -{DJs#%H7wh*dLXVkzx}G&pULpBEgmF})h*bsi`M5at^?@arcjsrp~LmB$mHa-$8WV2=)J8T#`!#ru($il)~> -fnJJ^Z2Uv2x}v|{}Y>ggkKS+}SIW_*z)inwF!*ZMa4H()8A^Zb5Uz4fPF18<7r -KD{14;8x&aM91T?prTbC*^{XMMLJ%XoQM17yY@qy60JHg!Md6JtnT*I|B3 -NmP)h>@6aWAK2mtey7DoU80006200000001oj003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*?y-E^v7R08mQ<1QY-O00;o{l@>?jTwf3x0ssJg1^@sk0001RX>c!Jc4cm4Z*nhabZu-kY --wUIbaG{7VPs)&bY*gLFLPmdE^v9ZR84Q&FbuuxR}ebcfaf1jpob!BfgKhU$Oa530zp|?CQH{r}+b2-SSLvkD2{c;froc=|k5(whSQ#* -ml}epBru4Qb3bX^%o%dGm2+OTE->O>m{%M*U?Yz+5jY*4_#`y2T;08P4umGdMTf`0nx)+7E5WQzgdRqV0US;l*ss<;?+g!0#xY@ces?q)lso;$g?Pqmh*E?6<(FfYy2n4J)W3b%Wy} -sv(GyMSK%z{t$bf0Kczl{~o^MIfkH%cEn-XlTlBq5MJW|vpoPiCcpe{bYkVPr+g?n!4>EfK+e3Co`n@T4MZ2(Zxgajj^fK~^U- -78f7eQ1nJSdFsJ#}>O#&P)THZON+4?|}nr0yXsSnz`>HaTme>3(uV}i85G$dlSaGH##zfem91QY-O00 -;o{l@>>!Oo!#-1ONa{4FCWw0001RX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7Vs&Y3WMy)5FJE72ZfSI1U -oLQYomNe6<2Dez^H&VKSkzuP0{U?>;6s`X+69^v*md_(6b3DgZ8ntXawt1#(f{5VQj%pkaf9R%+ZsMT -zV~LR(P(rHxw97YU|a=m4W%n;iv(-uVO1Mjm}&!sS+CJ!72v^C1xa1-h_LpqR6j57eu2W}b;$*kDYbB -rd(;6z$Fc~6K0<1!@Brayhb_nyo?OkpVgbQ1jxy!WqF@2x9=)~@woHO%N_{(lYyLIJ+T3cQhUi{<<7$ -eyksT%kn!(40*i=5r^QpRVW%}hdRb{Z)A|aGD1vu^=wg{#Q=+`E;??r-6JVj!&q#56MUQ$u;bsn6b^3f1Z@KL^H4dIDe;A5y+5MC5ypHe@8w&Y-iN8&7`C -eW4R4Sb{$b(w;bZ+vV`iY52S!fu(43Gnz=Z9IyN--+0L|J>?N&Iycj&4DRk!H<4y9<82))1F}%WWq<& -L79s8H-TbGPLGw8>;Z@cMie9Xq2<8G2*I0G9gw|m19l^}!&P)AMnFf8sq*Tn>a=EUh&6Z1vx -AT0i6*m_?E -rHj~qr>!=>XV0hb;lsm0`wdNI3iyu?@e|KCebQYiLeCDm*uw`CwsBa8D^`W-olsU0uid=~W2MV3GI42 -~#9i>XwFw!6up$%89w!-mNpM(1yx!kl+nPyek25uVHY!{>;ytffjfxG;p??W{{Pk`i24}EQSb`DU5U> -5y@L1Z6!LyPx#Q#AiNijgn&gewjUMBR+BqYGcog<;6tC#3NJ0`@fD{CHlH^wVZ1o1>^&gVTeFg&;R+E -~4^sg+&M%2JnB;!Iw@KqtMt95;&6pF|zA&6y+@Wn?{`HzUD8hK>ah)|cG7Ce2-Ca#i5SYQhDZZI -ySk2Cai#Sb3wuG9-JgXgG&YvxO2luyMZ$CpGhbq56a0KPE7|AROxh9*zFI!T*N|v91q&r6nvUr1*cd= -%C%AhxT`)?v06562^v2!kY5ks<+vXi2r*}u1_f3OP2HLqlmI^%z7yw%b(n@(@OH<}d}U$!fC7#nsgI= -s;`8l1>$!*5+*<)*sz-uW>%?QfOG+-)i&bFcprGkQ-Wxq#t)r+Dg&hT+ghAv-=+{s&M?0|XQR000O8^ -OY7yy9}waLk<7{k2L@QDgXcgaA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWny({Y-D9}b1z?FVRL0JaCzMu -{cjt$^>_ajtb(8tCST$f`-m}ZXx(HpumnMEYz17;piY#;=5$n!yeMv$|9$U0ejIs6$#T;lh6$)6-I4E -$@0+j7Ms3*L-Lf@pBkt~)+-y~27@uoZwMN|8-&3}bAEcJ5p0c)OTZ@{(KG6VhrshA1(lFs+!G75Fz7@hFWTmJo_`&Oif55i}ICjqvc&h=hQEb}?V -AZgtYBt;$KmhQFzfmRlJNP{ULSP{Q0swvV1kn>voV+Fm*o?hVHAt$G+IX&C^DR98<%Gcp-=4EEAo^JV -n`Yb--DJvM!GVa$l$MX?tud+|9ooYF!|>_NxRdS8Xl*vt=yn^q_h^LMSR+8SHJl&X46hlO_y#nY8L&0e2vLL`2!NfE5gNX-KLNWcB`52XW=*?l02 -?-K!HB?Y>^Ap9EooiZHuMwMv$1MO+0nr0?Lw99#=o8fcprGxdMfPqEHu8|R#IrRT=YluRHF$7K&9G{) -`kaQ)r|!8hjpingZBgLU8`z=azS3F4&Rnba6Cw6w8IgRuwJfZwRl5_5g^(RuA|3}pbYH=uqHLzwAutn -vM#F@*y2?c90~)(umS!PpeUL*vbtvqpfy$m=z%-t?v@o_AsycYIyO?H|Kqh#E$~C{&6*oc0@(;b -f-i&JLykAGQ}x56C1ID0+;cM334GW(oPi1)ie!N@(4QSF&kkKAiDp{3mxYPpl%3N-?)>OpeW -z(ppqrxT(*Wec%5eshk)II)Iz!{1eDrS~0T#Iy(TXB9eCThyIN=x+B;1lNr4A*q3YIsBTM-0X|8G1fN -06|ExOZn2GD?X25izSl#6b^0q<}(gp>KSx!oIC=sjLR$7_eig1|3v#BI#Ig=08Kuv!x>=paX(T7jo7F -U;;`m@PirjWl-dza+yYpCO9ccABG-7~V0((h?kzn}$$E`Mq3eH$9Mqlwqf-`&Cn#7U7NC<_SvQZt-Ff -_ls=tJ++>oxKUUTgN6bU3g(nReQ;D#u<8c|R>Rg@UnqE9oBdpw1_M;*WpGoZUk#o0lr1sYwVA~Z@IICzm!f`C8u>xI3e}S@ -8ph}&qNLRxW8Or?`<7Q1s->Lbc^n*x{4ZwAR#mBrpfb6n$*a@N`T6PDZMw`s@+)U~VE!|2py?ZO_p}cDNs>lA)JsK|GQ+`uXkH;9=H>vUDmZZu} -CJxYfTbVb0Io2<0W47ndp6zzKV)u2Sn$@$j7cX8s`$+wR13CXbfWyKJy98!DiL)4L0;S=FmMZWip(`{ -j)cBrQ0896ViAiV5KCOT#g&`G`SX1h=7JTv2yIbtjxgRNVT=faMp -JJ}%8yAU%cI!d%KesuIhGQu(+!kF$0douAljwA7NQ6VLc+kZzi*%$~c#R8b@hul*pI6Q<% -Pw~|LC44$vqljP^r}Ku?dW%{cnF{~W9$)krD}fJ~W#rw!Yn=V -$6jNN_eEt;TKeF!(rir#Rrkpx;5XT-&Pju*M&T~}! -u}3YH4!MPY`gL@~o2W*HO|-e_D&`3ydCg^A-J{IOfnrUb)X80 -gO4ocfdd!s)#VgoN^xNj>V|P<}lz^ZokAj08!~mib&ZkLMJZI07rw<()9+FFYve3@@b`=%8hhb+cW@| -Q4F9q!2*l2T -5_|>TZAN&e{hNdmCP0QYf*ThxgAeosf{HVbc%_giQD33A0=x5a;8UvH{ZOqU2a}p -$9i#Vj}8ZJ3_JXxaQd4?7_3`GH)G4Uu}uf15KKtKc@^0w}n&@|J|F1;mW?yqTH-&tADSQzeh0Yov33C -Pn{XnoPM}rY!~k@oP0}W(8)>aiKOotmi9>e&X%=%sC4&t^!Ud5$j!ve}lEPIpk*&e6kQ-Vmo&%0qg$ -4OmlS?#G!^oaRnsVC4y#U*q9ig)OzDDYa5KZ4Gm5lPMc{4xid;)(ynrJ$KSA`QNvqtOv^nk-b~?My7o -xI@GJj_&2nI&a>GeJ2#vZo5W*+t-q)l2!b@l)ueld60^4r`}Dq#cxXm(OK0wH(Ai~eEo2i-1PNYiY$N -P=ZEVw`2Z$Ok;8iw!CCeZWkVDh(dKGv7@MEJ@I`-g&2U<(`Uwfy7)!th-*Dy{mm1H_!kdL4p!o#|jmr -=Ak8D$8UYw^>`&`bRW$~%}A$tM!s_yk>)DWg<*!GG+t*o?Fv>y?MVqKw{3ztA8SW?0vJD-IkC-CyU1SQ^;4Gq -SdP7V%OXehrv@-&IZ)F>CIv|{4n%~3DTddj5vWF#un%V(K_>%BZ>`-rdpBg<%nKY~Rbe9&7Or@-5bI{ -2gd~?hmfW}5(Z$|z_x9nK!6w_x%vH?Pdg*FWKfgRMu9#5R@IavpP{W44tyszIg2g!5lvKFeks!K82>y -werllo=+MK3EL?ikf1>A1-bI49ly!{Qsc5N#1u>OdM(L*&nm8>Hh1`Js*#K&>KO#SxT177Jtyw3+kO} -r(w{@D0&O3DZvv5{i&vR+*CmG3%=~Dl -r_F2LJ#SApig<0001RX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7Vs&Y3WMy)5FJy0RE^v9B8fkCaHuSrH1 -*;;6yedN1kHJzPP13E{k`%2wY)AuvvFMbo4o{?W4EynWq)3XSNZE;iCK35AzJu>jS6y49qF8PCrXxjx -XuWPbj_?g@s|_bb|DK_e-cd%|CPSNsF58k673HME6`RdwD?#L;uJRIoD+)DjD7gjhDoLY&fmVcHNenioC~5-gb}b7YJLD6}lz-w5{K5XjPIfg+D -*k>x$H*;h4iA=Z7-{53HjjG}@iX&1HodL&uzVe^AEL_U1cTa)l@!!KNrc3A`v$MygeYNKeE95|7x+)f -TW*f6aVCpln6R!|w=~u0fTM!lspDkd5Ae5m^q{HB0C7+z^`k3>e`8$_Oizo1r^gZODYcIiMYDKB%CuDm& -NvGSbI8?f^*eBQv`g%rTX+ZM9sVuHT5BiC+Q6l8O2c9dB-j4yM)De1r;T5xjzQLcN^-vbyK-8>Rm -909K6vD8bk>-*%2cC2T*`za-%aflmPgT50$k_?tcW)SVl%S?7Ym`YKmma%2_Je7@TWoSrbWA7OD#;O! -q*s2&H3i>P=$hBi+MStfMW#I@ws0RQS9EwXfio=WNpAD|)ijq=f0#I1!Vk#rq1 -_>VohGgfsHXsOg80-WGm2JWt%dO85J9@?i48RdWf31%yoWaFD*49iD!I-E5>Kqq3@w|4Q};;0Ju{gDI -d$BkBVHY6t$5{JsS^H)zznHHN>l2FP1L}rm*;NZmd;hVpsR;es4YXo&w0pns%OpNKo5^S>rnOvqWp2K -(>HH_kjAg8`pA}BSF+Sg-1uH^ZYsL`P!2$P#RFuI3@%0+P_HD`-7n>9Yv_inNv(JY@)&@iP(7V3#2Nb -_)xu>)oD^ -l*v5^l!jztd~i3I5vDZ5GSdqdtU{o*Y=4gaLvhz&bukw+SijTs&~6G2dPeaI(^EXkjD#3bqARy& -m!r-7LJ}ziMjCpcLVsjjo!$_yAC6JZ*y1PK%#56U1Pn*V?Hl=X?*W+wq&y5x`j~?}gKfOHpa(; -HPC>DQzJd^qx+t^ooKZ7gpgDdZ`Bau7z2X9V$cSf(!o4NZP*X -ywr*b#c;tPAn_F*gWihG1r36`JIGg^~o;WzxVjUQoTZG^JXWfi$Ue(oxWZ7!RcQwm0l5e -(E%?Z70s$$1kroJa+nLp%BUX=;imHDDtvaHBCt7*|pR)WMf-=^6EE0fFnzDRncq{u-4y=)MO8MOmb@_!+8YL4LQ&JDwNq<4v{P73_j8cvU~?Uy})^>#SyL_ -P8Z85D}h;CvR_Qt&AwdMXbEIhgcQ9ZvbX~i$JUjy4DZf=& -+5CMu-<2;|$0+kjx-du?WH~WTQmCA2nZ(nur{c*fNp$=(@9JP}|B5*Hf-x{0eX^#hwxBI)qatS{Sk&j -l}orG&FWAk0*)N#EOFUu@-MzS6f!|r`V85S_OSR`nHt8QXcc?v(ot++M<(jpFxyNj#Z4vfoXKWIEFw3 -_=WR2zk{`~*(-t3oJy3?-X5uh(DsH$_60cuVw@57m^VBx*A^&Q<#oe7@K2vUkz>N|S -w;z1|CQDdA*#NrI4F@-xi~QmM3qy$V+;XR602h3CgV-KK)h2&G%t5sG)PxboPt5$buTEF-=*TeiqoIa -|um32@tDgQibt3Y}^OP3M>Gk0I=pCU8Pt<90($t#FRXpv6N=dT6-u_oHEc==VjR5(5bmh%k^OJ+MYbr -xYv-$O=*Rur;XL{)$0~f{5F_VA5?1b%$!>ij~&tJj7}%!N;^#Zo?*E=YrHN2qKB0n<$-^UUgMf@Ki^l -DY5L!wY-lMIP)m&*0fMS3`!=YwZ%|T5&B_7uIkw6xQqyp9$-8|fB_O9P$LCfyiN}B*stf9(CubG>0ZC -tGbA%%(qoz70g}joU`O+@(PeN4ZJZ)1hj;Z(4B^BM1^PHbi^6nzIkbIMDR4YWUux0V)aWWPG*U7;Nb& -yH6O=PxI(i2wT^sc8EeX7HN8PVdxg!N6{9gJ@_9cdaB^2Oy6s@GEk1?Y0=$* -O6k9(MHe4`=UBZ~lILei99JhFZCvNtk9X^wb|iAS0LP7xl-`XV)5iwBG@!^-hiVudfAPD^c|Bcl-E%JY}y4{?2lN_K&~Imom@f)Y+0U=}xr4$)8c{MCXsN -(dV$u*GJ_ES%W!_nuO?)wA|-eRPA_yZ{bF$*-*Z?7dyoEoH~`a94Zsc=LWZTG$R?PNw-Dpfb1@t#1PQ -T(sf;iOY)+Q)}GNkf^xT`ZEQ$fivfy<2oRFb?= -m=cdOo+x;GGTJ6I}NfiPTZI%bFY)m+c2@?Oo`;@8V|QX5>vUs8XZdF6^-u-s>JEis>B(`a5hCIZ~x#S -0x~2snp-jzP22%H$TzmGD`nhQZ-d3!}IoIb;a#3x>e1sB3$v%cMU3hEg -ybx!;v-S1l6~uO*lqZ|h8h>zuO+Lq9_x-hGt~9tRASBAF{2G2_No4Jk;*NM7S6z&dl|M+*>4`}V -$iiJdZOvGFq6&}Fn8XH9(-fkX>Pm`rkZ-<4URTy&(PB)D~?Re2pE~RLJ*jjzL5a1=H$i&?a+Eep)+TS -AP3zQ-HVGOma`$w=?c2x{^}y%r<3nALk6Jy4{9j(OQK$&4(;9!!TXOOf}l?Wyw2bg3$dscv=E!y$;7; -_`m6k70SGwkuLff8uK=c#{{m1;0|XQR000O8^OY7ylb5~DwSC$Uk>O+0TSD}7)a6}aj -#dnK4L|#EXEY6LJ2PAbLGZpzo1BqVSrOiBw`Eml#SN*~jO1T8d -Bp09!ELszXtj&TB|OhkM#-90aK}kql7=%vIoUMHdQz?gYC-Glu0_MQ+miEanX@^$&+2vA)PRPJRu#R; -fd85%w;T{|8A%#mmm9)zwqZp*Dd>g)pEa$?vSRd>ELnZeSV1a)pqz0jRa)K`97H2R1duFKNcTXI7DZV -D!nR@@Y0^AzB_gOH|105JmSn3efpUB^-fY1K!{E>G>Yv}PpU%F8(bHKln@rS_#x<-LzzTxVseBj)l&8Tg0&2h`$tmXqR<^- -+mjEA@%P%acXFpE}Tq#?@>SRS$$8pG6zM6|=pOb9^o|0Uob2M(vHW#VFzzYE*gahWnORN_f6<+FF8$e -S80DapNb&r^?FtKuCWzP>~;RqEcYgnug;8+~qUtLdHx^%l`MS6;_l?4>7F&@zk7#)HqoJBNE3kbDPy= -}o}9g7&CPh0-30u_VUD0*T_bW3cA?k%h8U1$>oP7`EPGhTmYRYvpd->eF4HL5$QH{P$Zg61MW7^cdKR -moZXCd(o2;Dz?$=)!yv8ftOP>s)fu9OpnQg?|?(hL+iiV6t0NPV2hrKm%~pz<^V*eK=)t7Z$H4>xgY#fbz*JP`kT32%UF_#h=)ndT2dYmNFaG{d -A`Ji|TybHq_G&}T}fjk@st|MNU=`q5J3~FPt96}3f0Tc!A}Gf{bpeve|~u`tBlD&jItqJ7k_!_LVHUIy# -b%7{4m`^&WG-fb~{8nPYEBWIXlTmsQh5Sf>ADlYfA1Cqzpf6mmV`JdzzM(Xcq?0?t&4)nfU48UM_dzG -6tef!>OD1)q6|m=`tv9nBkNgnT4XBWS!fux$+NI;~Uoyb!7Sv;U!P*fEiPi0f^>&8)?d@WVD977wq7I -<3CYW>^zoL%zU*h^YEOc`F%aJ6?L(gdd|;=Ly<{LxZSVf7jda^0)|xK9;3nM{>YDx^S6_Qfh%E;&iB< -GMIS0-pub0PSQ4`v8_VExm!3IL3CfEn__Q66exNp{6B6=THj+^-)?If?$%C}=|R4(GxWyk9vPm`I|6z -=Rd*ZwQ3TPKGAqLBuI*P#>4{FK3jIXe#e!Y5F2Y1v&DEk5q9?9PDCi^=95+cBM;hI|z3byU)(3Tt9(e -e-Uk>T3>%#`ndRW8B<@@xGoh#_3$O0L%Z`TnS@&4!%5$nSvuB$^c$mceF*A~zZs9`MBW>6-l=t)cAZe -^8%*HpW9F6yjX(Tz;ihB+FmZN*^dH$SNIK;pPaL0+qZX#&$!HpWOb&iP`n8g;9JS&c^R;X#LNP9nj3;{Vs+!1Cfw5@Ev-%}Q -r~B?wrz54Ae&0?SRcQB~>qgbfEZb})Ia)*Wt$QM4#@e4^^DRx-+spUwl&PVp)HC*M;NfcL&uYZpQ$o$$d(S)1mCO68E!Dy_OKNAs@|djka*-ewe}40nc-A -1i+l_i~$T4#04`eEg?_0JrYfWLXu_nZx3<>PI0sk18n5y<5`16Q=Qx!VkT|K{^JGFIEvMOP%^#s(jYt -P6JukjMz+md+b`)OOY?rvnZzCzm9KwMaD;#phZh&F7^-`Ut>CAD57IKC3*A#3pc?LTb$$J_l;Hka|H^ -SR0#ksj&njXSw3w=wOp--tf#9M0PXI2O|jG7K2Tnk^U!MtsroI3Y+Yden~HU`~0oj`ott5tV$V -Q}-pk@qeA@IM0oHWr4mnH-+{|RA(gh^fH>|F3<~8gpMR|!a&t1;?(cUAi-67 -2LbDX_Xv`g01Bh7gD26Gm>0CX2&0ud~3#>1EDGwkA9PV^YE1JOHuyq2|{sE1I*S>hLKXItEi2K7 -a$IFRW6!%7`F$YtZ}#iQ5{TgI^>+B7&;cBR(;^yMMn--S)Xfh%z*u#Y9X8^((owVg;_^XMy4BkagFcN -rjUB+T_Ls0*cR-%0Ko`cy3mV%b#mSEGgTcP2WS@lfj|!mo+4D9@vecMc{%mE^FdCcM|Vuvek*RxB>nD -8I*#&;y1ZqDVK23xi^o?1{uOj)Gmb|o0R6-OGLA?oApIn`wnh{z! -`mgSmSs&YkD=!)4e3W%f-!NIUd9;Jt+%XlBy*Vc}8oU`30vIK~$vs@hq)Rnyd3- -dtL!>j^gODlNeRxsY|)=p!)O{B--J^>RO-S|uGkbRlO=I?D|kB0c6eum$Ym!p8nO8P}S|*6urs{F(Faqke^V6Ihp=?a&q$gFVn%Z5k8$q&SbW} -Fx4N|1%XElD2)J^9`R`~NNVJ3qCsLB429Rrz>S|?fZ--@RZNfE8FY#hKVzUI%~mTW_A9!#7$9cqi?loPV1n) -!j&`9k+Y2wmx#R2&yFdr?2QVUJHZchCkhin9dgj47YSBU4;@Tk#Xb2iP)h>@6aWAK2mtey7Dt~ -peKm##004#-001li003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzbYEXCaCyyGTW{ -Mo6n@vQI8_l;>TF@yV=xye(rnnn+G6#(4yj=<5^b}gMUAAAdPV>H&LMS|>^j@a1SFQpbLV$1bQp#&Ay -rcH)C!e@+Q43ArQ`-SN`tUmGb{2f*qv78b_bc*Y`EsRg*%aF1{ngYIiJCn=MAm8-#0BJ6h -C`uIc*--lJ>UxWl;Ur$1Ftm+f~A5~b7na(Aj$B+<}90oam0DCAn8S3>OREeu75|v~s5c@*%J=xc1 -SGS+gMTpQGiNs6X`or&_DXGfu$ySxeXcn`r6oX=(8LkDBXy!B6b94lCu{(0KQo#%uCGk^lORqZ50?lo -yb4Qg|aYPSBQA&a^41-{!)gIRCO^Hl=y#_QuX%uvef=kQS{`(BWe=iK$IfF76sml0TI@!_$!Fr9pA@2 -fi!Y#M0i{T8yqR=9@^p>eTeQ+|JUeF}769&IBw;@08WwjYV`-DX)CGoC;pt8;!Ol5hJ)D~kXjb#|PdZ -V;LntC_m8&*oYcJc#<9B<+kOA!tW`0_Of0;GbT0}&A}@z`h3oD8GmTD(>{EdMR+C&eogiw7x)RU-uyZU#hAT5uz`qb88|^6{JD>rJpz# -RrN^vDyNT%h?&~+eKNre)z>nm$5BEGIVJ^iTipdec8+AQ|zd`Dn%nrwwnR}-ULM0h0aR|muCjra`&Jei(egG)HkWqk%j@QgbadB;-V -Jaz6D|{O>qv&@$YKKG)u8gF5S=&`Pre$oPy^Wy3)`XngBe)U9Bcs=bvM0!)dDor{$ZFzJ;q^);1a2il -)SUS75R3EDaKPWKM#W57(kfQN}C_S8)eEW^l%+dn9Cxf`i~PgD>9jOBfjGwBTx(d{QEhM)KmXBY`L4* -w^VCsq5egOaHTl9tVDOi+qP_N1V3^C3^t3*=@_7&QL8UN>$pTw5=;RwNu|;!1rT>oIqSp`{U5_&N6M6 -Y)ejG?+bgN_W@|0;z+%9wSS0&N&#&d0$#Xs{e5Ej$)cS;lV-!*ggc7`aWzp#CZ+p0RALIvH{vs&fFC_ -ML1avPGnTp<@sDBOlR6eLqHQ}RRGl(6vo2#d%Z{t8#Ps-jL>@tP7Nfc!FU$+4FN6@DSBRQ9L2+MW1-9 -=N@WbG^8BT!W7Oyr2BI9Ob2So}dHalWcI>WIu-}WUEUnf4knDiSBiiw)I%|I%=^EumQe%_`N_9`PMEx -{Yq-b8UciI7Ip^kH==9s?a0`6KXY1dh*~p5w@Agff^Q`yt+j`1;FuT<*W -$%#67y4DrttrY1m*%Z};-J!Gm)tjs3pKq_p{E#q1|6YW2h9_=l_0#wC42HflkKt&Ydkhy|53mFfS0_% -LMZ!O}+;}Q8rWpQZVE?~iZC#s;!LjNvkpiv16G?E6Mc?!*KBwuOux!GvAsQuM~mK>i9ejW`|6 -l69IsVBG4vM4tmA_mn4KzdD&4Vr4qLpsYmw2fSxicBDynNj*tKIALCpjv#CxjK*IFwbg}>+ZZ#OhbTK -7|(?=9BfXdIir`-C6!YUcGpii3XuP)h>@6aWAK2mtey7Dvs)G_L{%003qi001cf003}la4%nWWo~3|a -xZ9fZEQ7cX<{#Qa%E+AVQgzuOK#;RjUf^Rj7Nh6(DFM2aVD+FoFfW -OWBN9T!BkDaRUGM&hWM5zT_x5=a&e-d3(CV+1n?1jL=|17-#pWG;y;=XczI?k*=Luf*uhTpSb=6 -zz=f7(@x5`Hb~HQ1LVjuvplfrabm>&uH(Vu|)9anML0e>aWaX4G2aCT!QtS@YbS?OHu;uUFGOGh^+Cs -r2_}w)5OO-PgQaRcyy#4EAMD3wC}>B`sh>o21i6*mUus<|6CN%#tK2*_Nm}$8F94 ->$;-iF6Y}^)PkLD|{s7Uy6*#!SF^CuZNkTn{7O -NLJkMf2AMfGC0H^Iotm6Ww?RT*~edb{SP@A)q&8jvnY`kF~jEB={j2t4v7RTO4G?=e8cpxV$I3o7W2> -8LiJb3&Dpu-Uh?IltvqDVaEX4mmEg6#Rr?>QzS^9Y9CE2G3zQ_~}^}xPvjS-qVDPnq{Z*nh`3>=uo)R -HOc1*TKBX%bk&Abwm>xN>5)bjfSycw1u(ErML4X)A=2Da~!0hO}%OUk^cQnj -C_2q4ZXOA}x-kBa4JaMNov1$w#|i -G-o8h}(P|LkBI$By2f+fk%t+Kyn4ZlWY?PqZ9x?u`${1;47UNr%que(YC%ySOuN!O*{g0cpez2*=f;^ -tdmUQwuVwPh!xj9o0ju?`zjt-qN1`H$cN7D+*EAZpclRWQqFuREB|UIY+vwPPN$@W;K1RAS{l~2sUEAm{loK{ -i1&n=}oD4u$EVRKtg=ii$Cjsrh#MAKHdu$&ub|TgQU6>&U20Ywf!zhud7XWNqpNNCR5@hGmyfREJg40 -i!T{eNlXsW{&XU|1Jyr5% -_d`y*LQ`llV}(mW>xuLc!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bWN&RQaCwzf+iu%1 -41M=k=+OoQf53n|1dcldTkRrs+6}`XC^p>+l`oLwph2;JpQI>q9JlGF2Vcm;!y}SXExHB~QV(hnKnP+ -@-wB22PIi1yK#uspM4mX%!vgfj(#av21*;dpI$T6wu63mjw^U5GsqYCenC-CCYP -jE>MaqgjZSZ5+19vZp0%H|sgESNkiRq4AM`cO~VSwnx9U1Z&#c8eQ@LmvA+M9z?*Ss%w0%LvDgyrO(D -@)aZL-B;t?LJLEH!$ur}Xshp|xKXp3EZ$IetWRe{0zlO;Vu|G#=gY0cLo8?#Ue1Dijf5L1Cp6u+hF%# -L_>|2&UW_YSBIKLiln2^fW?fu)q@mYe}Vq&?Sa#b&d4Wh)J{8565gY0LPXQL?fy^WPJei?uL96$z^fk*OSJQdrPjnjo-xa~d#w<^+~0DIv3 -HYZ|m`or8w_Tx2$YhYU)~KDn8()=GQd7NiAI-YZA1J|MCi0;8v6%SMb)f}n=c5CkqnDav%Vh9XxwHR7 -QOW8uNh?51qY(q>|I#|_kDX=R0MQ(URMl5oK@tMsP+KxO!1reOgOB~s9kW@=Rm2~qf0H2w4I?W_1}l) -j3?I0%9q=4=6WJkbC@RYD^9Xe?m`g{2`((SPBjZ0ytQ%p?Aw^}g+yTDezDaMvxZXQGgsJd9JMA2{bsa -$^{o{Kn-yGIK(tSE{&ytkOoTVLKUb*B}hTk2qH_y98EpZADf|u6KxQC^eXdYl5c2soF^(X#uTbe62*z -DkF*o`nu@krU5G$OD-(1I8Dg7VYWgL!@dZ+bOh#Dnd%GrwQ!j#ECx9Z+L4o#P0$o!HBK<_EVlD+{k$l -0cwlPoaBCx^Ad&7Gh^4TG65jEBm$DDcSf1UJCoeKESSF3T*&2RNhI7dmETmEl6a3^thS(AeHTMAuENO -0$iYL)9rt}#q$Xhg$4N=_84-8NZ(9Xq;A|zoqx$Gs*qLaA0n(cdCu2+b84g_E#19G0YD4hzR2N~ktQD -EknazqA+Uz_-pv6t)>JciMtGKgNDGW739 -?N*dM&0V^I`bZ`!?S-*?4rw!~`L9zLlXdL$fbv?VB0?(;nTbrF$hWaxcJ(QQa8dR>@6aWAK2 -mtey7Dp`@u-Cx?008C)001xm003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgz)XP -WnpbDaCwzgO>f&U487-9aNS|fUKn_`w!+<62Rs-u$6ozWksbE<$EZJQ#?7vU+N37KLn(AUpA|Kz -QNGT~)24R?#rYtZFfoHiY46p~SL}@T==03!{;+iYzLn(QrVhja0STLbyvxG1XDD@*>M5@3JDwAZ=&O|1FQmBuqi5jOxQ`wsWoedc6kqvQuefe&aJ`CKy5*u6X2ou%Lm_T)4 -|-X(rK$<~>GTG_TN@V6^I=Uf(pC2sl+O8c?QCo0jh#Dw2#s|u-&R9m&XYgy&jp3k8CKHeSlv@UoKg6-*?8r*M_=di)uVMpp^Qf) -P4RD^n^QywEm9eU^oZyb2EBf-US{?n8;~8JS9VrF?0B9Eg04)Fj0B~t=FJE?LZe(wAFKBdaY&C -3YVlQ-ZWo36^Y-?q5b1!UoZER(9a%E*MaCzle-EZ4A5P$byLAdBDVTw@iY3P={FCE -DgneSoCW1jGLK-I4krCEDqhr(u3bWZm8Gj`vOPWL=Uh+qJrtEXxQln_6l@x2hJcW|{q-kb>WH#p@~|Z -N>AtV42{WNh;K0hY$^K((Im9MJ-dsA9@_k9(1N38@8});-M5hjcLi4eVwNGyluHCm{h5u3=njmNw#MX -O^1>8lx#~?51bBf`GJDgQY;pWg6#;a6rN0J8L9Zqg20FGh$38(o4R854Spm87gXk@dB+6s!I>+iX_d1 -`CF5!0nV9Ni)ErTz1w)TT%U18seq1JG3D)pjFJrJV7gQ`B@w1_tb}M+E@#6VV>QQM{W~~%)9FL&{TaAa)JtQXvYot{WTcF|F#qjbgc#atoN;Hz)^SV`0j -Cof9mY;hL%v>aZc^oAeHWZ0ZDXSo{L6M(6nC-wb6vRlNT=WDdR{@8k>-u#4!X5*4;@WoyESnLcHw1a+ -l2dhpRh_Ci?`kNlK4YJ%Et`zsj)Y)JCS*vdgmftZ*)=J@L8uGAdG=Wl3>^*se8PYa)Zy7@8T10n@cgV -Go%XPQrZGyZ&EU>!N%z=sOuxcE$35DMPo3s=r5^5+#7vd0WK4Fow2y>W1KK8d{C|65%R4z+Z_HCEv+M -XXbXh`x{ZxK<+&&vf0t5VYd-Q=SsAkvRC%_hduCG2hyy)eyXZWlqRqSEyex|FPhynP8$a3Ux)l -hSlj46d0Znv -&@M2H}Rl^>}vBcdfXGTg7xh-C~91EwO7wPt}QFjkNb4ZLovg1l5q@)99J6=xl|zPeo}Zg1-w&R|^ZEK -k$;Ste&#PIPpMclrL}_jgw}>*PtOZl?*O4PfifAFgZ&QoGTZM`x`u-vfI^Sm|Us#)N|Ja0l(v-Liq}_ -tR7l_|oXciRWuIuK|IapWEwUdQq3C^#tI>`*+4|ZhS0`8GTPFxT>IsKAyk_?6>RBN8s;PZ_ZX5%wD|G -HRQXWT!qs%4mp0{=IRNF+m@^#x+Yr&u7sp4ctzzS>8^C1TuF6)fczh?!l`)`&1|Ck*kAPF%!buB1V5M -*s-Za+Av(nJrF&VojeF||AH_qM?hgIO;)aa$s~FM;XYikYd9QK*vzdEOMa!_lu?bobl;PVH#~&CQhmD -&kH#@MP46eakk{C6r}fxPjB75HzQ9#0JTSWUj$P)+;P6}gf!^c&c(^Pq7gMOwG -S@0V!Qq9i%olfJIWUKNc;EeS0G(QPJAP!pd+pzSZ$S1pyA=NS=O@@|be?xUndj;Ya(jFGhJ0ltrxk{{ -RnQ5^(rlhKMs~y)PoY*!=_Sc)@PKS{m^@6*3*!Ye)SMz#FIn>aK@)}*09y>U+-nMPG49k}%!AFhJI#< -e;i{X&bxJ;7uG60#JqbJx`g$hms0;mmGtEj9&M}Meu7&tP`7Rqjm@Oa6;{TA0jz1?8+s0u>h1k;k3ue -!A1+b|G*_g^9MWP>s6wa|wwHEWn-7ewC}It~>g0IXvye7RjWCRpOR|sx4!W&^9g~edmRC{{*jW;U34(Z;u`UNphg%KiOcNoE!yr_YU6 -PJZJfdQ4+rZ`TRv{5HpaOP*#8kIQ9KAhESAgAYUnOAXiGNcrxeQ -vZuNSH0lNaz1)VjZs+JpTABDgDR{GXWGOL1tsjsZbF@HV6WpOP#9;`d3^>m?M)U|5Th -~)n&=0o91%^OCgXBVIfj_n-fl%ZEZp(da9Oc@{ats;@3iHho0a(BJAHF#0tc<$W#Gbnp9|Z=*h4s5_} -|Ty6Wg@Db8!II@YX=NgxF7qGUJ4_QMS~(W^bXqhV=&GzqM;$W(@soslAXul!1WWilqArj}bkzwXD%)e -2B;`k|3HT8K3)>Cuf(Ut@*LDKd(fO$#Jp0I2y4L@Lu#P)h>@6aWAK2mtey7DuU7-Kd5D007hg -001Qb003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%p8RUtei%X>?y-E^v8WjWG_wFbqZaoWcjFH~``bO$x_-xwu8v+OOnEXCqI2Z|G;ShYeUh(Xf4o^6Dzo(MD2a7sZ&+ejI -ZB$`2+4CvdNAGp6(DhsyP6;4{PXPFw!xUe5g(-!o=~TMw_yiHDk?zVuh1^0RRA>0{{Rb0001RX>c!Jc4cm4Z*nhabZu-kY-wUIbaH8BFJEF|b7d}Yd4-ZOPs1<}g?ImoQ -&|!bDwTnuQU?ZD5Qw2$RatI&X)GK&@;T7{d+a!&Nt+69w!e4x-r0pU6>wfOuCd5D$f`Ehf!L8zjYA&y -8SLe^Bx!U8jh4CDBUjR)6^a-uLXF%gg}L(x^+n!AT}ypnjO9uY!P-hpy2EtIz^~bC_Pir!MeblH2qBV -%vEV#S{+_kq9t-%w6D5SI$e^}Z$m8n6XzVJ56#!TPH8t8Kowt0-{;p-w=|B<$=~)?;MLz=#gf0onf$$ -DKPp&i?9_LR>&?YcGaOJC&sKZ!@O;p(&+aSK3j@G<^gQWHMERA(CsMJPdJ{aGG@I+>6L6stF|C)sOnKH@N;vd -q_L`V#YG##7nrz`GylMC^fq(Ra!yY|jo4?_Pyhj$tkGsCJKl7(W$;2UIXHU;B!Q&%=yjvN(Xyjl>OGU -p~KImM&5q_xoDSP#X3x1Ep|Ezw;`-`r8NB_U#nS6QS15ir?1QY-O00;o{l@>=!Pj1c~0ssK-1^@sb00 -01RX>c!Jc4cm4Z*nhabZu-kY-wUIbaH8BFK~G-aCyB|%Wm5+5WMRv7Cup^Ahg#2I;2H=?8&zvAZTe7F -G`aFNhQwTcd3U($xiw}QJyT$?r>%~gj;7%AZ6Q!-l3F0r_Qfo*J1IqEcfQFvQlQjkOhHBfO)D+Mu -?Xxygbkvpd8BJqd>FGT41Uv^BUOUXjvIBXn!;Fq!Qezt?yp#v!amM$K5R`}e&tKxtEX!)GydU<(w3** -!z^lQQZIGcLrSPa*maKxB(731tW7(P3f}I#2l&Mjii$!A&t#!cK&Cpx^z*jHwgd#4dSTyXp{Ht@;iQT -={5G&!-d$xq&gCq0gcX@VcjDkuTNue6JH^|UmfoId$i1hGHVXf*T@&R1D+ug!COD04v@v#7nW+2NaDd -Ui8Yl7kdTn5EQB_m#)>xF)?rUMewc0Ckzaq-dDWzJ}~~c^beyP8#{+Bo -vZKG;5r&30OTQJz&V(9syONR9mBKS)+Q9Qf*_WX;IU8$NztlIKb4Z(* -BK5d_6@}@@S_uthZqyS1raAhK^=}gOM@eEY^t*xi#{WEcbpy -YOO!gB{O9KQH000080P~d=NA-WC^;il30Lmi(03ZMW0B~t=FJE?LZe(wAFKlmPYi4O|WiMY}X>MtBUt -cb8dCgkukJ~m9|E|A+aIj}P=T*|82OJjNpy{On7HET9nxG%jK%gah%~%p0l3K6-`_2p>qWoItvIkTMc -30AHUYy5|ql`wQtXAb}A#0JZx9pO=t+`z&-CWAH5^DiJTFZEKCymluhI9-Um^{ngi7%bh!mzhnyHqXv -KK~c%+FBUHwyI-%y{@F{4&|%dB$rb|Xu{7FspTE(J5Z5zK`V=ygQZ0|DR#y -kDyBcF9`BO4YSiXq2~t4V^KgD3oExV80-?QFznUR<0ortZak{Y))JH3k8T&t%1-*Wq#3GX-GE+Yr)Ez -Lxe-tF$LymA5KV3w0NO^j;!HzO>!~04y?p$5aGb#W$Og_)B`3V&3s(5rK&4K&ZUq`ne|Z)obZM%+#M= -|yXUO{Mn<)9=?C)O2^*YyAGX3VBIy`0Y{L!goejA(Sn@{M-^lEg*e{=Vme$R;WM|oFjkV7C2EN0JAEft3E;8+esvMF9Z>`*O`bjw!;h%*K=nH}Ap4sD7QO6v5%@BjT(TG2n*lm9cM2NJqa9e>I)mn)>lBvupeG>lR -F{qyN!lDpCqJ0sq>;;6ZVmBc(g^*t@hO6k`iVj!6wcpanPC-n2Qj)Lj|*V15YQl3Gmh-PgKR(oHrVU@B;5Esz76k&2KF=K497colYSi5 -i`4&mi0nS@e5fwukkPdB}sigPTA=@d4Eb(!O2!J|7Qh?ivu5_Q56`Ye(m}-3j}4#go!;b}E?Tx!}><* -}0I2|F&$1HE)uzJe&=@4Ju>cG`te1xd%@0vJ1WYoH&YdchyhS_!=Wzt^QUcT(Dta;VA|&dqf@&n&UKh -40A%0hz9Hg(>fgE%vzLkAxmGVkN`kyU~iL-fT*q!%Fn1`K_$9=12%i7rJ4o -16EKhZ48Z((bctkw&eMakP}3Y01t$1w_yV~Xv`g23xQH$XsD{5M_+!fc$woxA!*QvM^;pB?lN9=-49Gicz=l2VL^{d?Z_BfAzH -vlgAhhhKxlgV&{r&(O`1QJw!=>(&Nn76QR^%gKX#O(m!`_49_13=RmoA7{;!&6{uIrtkFQIK6;x*oED -G=>1(04}LM^HQ|o(2;OJwG6UY)Uvc}f<=O25gZ$i9y8yopvvQeOL`Amx^E1=nUNx{i6OTK7^T+0PAfP -CY_znYfrkU0xR++QkmR%|B4I(oLe-u@y{HAPnk#?4j>->I9yp{0aPH1nP<@=sLbJoY>DCa`uDM}a471 -EJEq0>evy$z^hr|FppS(sF=ECIogFGAI2fB^q -*1XUmgbJcs*q|i@<^=HjRWXT0shEMjU5wl$93Slej~mskaoAVWzVbiTw#a*yH_zJ)hy~Lk9$Eepub0Z -?{{pA2PAR>UXn9xJPP_$;JJe2AP~nqfb~c0W!o7S1|agjVD|Zh<;4fAFol@1F)FMrV*9oRzPY{!-!H7 -2_ac`M;qymL~wD_tZUIgQ39YglHmp$hw0|j_(#)z=fi9ecmBv;zdH;#@wypkoQz*)yV&hfmF_2NC)9o -~V9x-^xq_)lxm4NzgEM8po5CNHPJ7gLx@Cx|+@@oiP=h~w&U!=@=MYIN(($x{4Kxe@xwPMmeK2Ct)u< -~^)FWWxPgxNeKdQDxft1>V(j&_L2l}+Qr%dO!u-B$r2K7}?FhadNWV`I@l&`hA5Dj3DB -sJ|Vtv3^uiWUz3vH-18iN7oDEM~&$>o$##*a8w37Qwq-Jl7^$Jt%G*bjv>2RsIN3(-YhYtpgb&b3heL*_z7x*FxGfx99ju<3}bayV(+31rGYCB7B&) -k3E&mRjXTWF2~0P5NT}#zfwX~9X*&md_(~Yc8AvN~Al0LdLPU<5;K*6QKjY94Z3Qv$!&96FfZc5=Cb< -6N^H1mporK8~WQ3ZdCFCc5r)2148Xy-ejMT^kpaAju?&?zzRg0GRPucY~`_2!NEyKO;CE?x2Q8?U;J^ ->&4)RP1&#LHwDDK4aNCW^yOI)WbxB}kOl;5GWn7#t2z{SHnPZk98Ly@xQX5M4JAta2`EX}7*By>h3Z& -S1Q;R&0Q(!u`H+(Kic2`*b)PKOqr|5S)1pBr#IMygW^2T9yZnDS7IOB#Tm#Jk8>IOP_YUZf_;)~)541=jHCyb?H@d>H&IRv>Kd_Y4zPn~!+MrwVH=YFHj!n20Z>Z= -1QY-O00;o{l@>=r5E(Zg0{{S73IG5k0001RX>c!Jc4cm4Z*nheZ)0m_X>4ULY-w(5Y;R+0W@&6?E^v9 -3R?BYNFc7@!D;6q(NT{nOIR>zc7HEI~c^n#`M}f9hHW5m6NUDzizDrV)t(TqfVu|JsXJ= -#5g=q@B*h*!9EwvPt!PLJ8K|ODHfz7kjL6F<MeBbjP^BYz9x#*w^~;ac^JziWh>Dm6 --+59Y2LamhF9190V)Dw1x*>zB*ijZMTYVU2qtNb_UpLg|yU2V35-~s5CFvz>F;T3bsmaQJFo+90Z|7H -*pfU_{CxY!UD{@+gxf{par^&Ke%oNW@Fi7Hos$n2sZruMj7Tr@~z?uBaI@TIZa7~`I9W0Z0s;r1NwewPWocjI1u*_0BS3|h}j}qYdS>y#=brWkLzqYgvjCUJrhZj|0H|Pt^?Hz8NJA( -~Vne&HLgqx(Zeoz-z8=W{m4a?(ZtYcE^j=0O$7wP%WNRd1>>oL!Z%MyH<5`agxUn1=A@*hGbtEIqi!u -86J0Y+(gX%d+zYQxNcVocMiTQ!KK8Z_Z^xEb=R<=Y??nXh@tgja1VDr!MHO%=PZb;o1*tjMAXhY-ZFB%+ZS{+@{9p%zmf?X*NqdfgQTy@QGdjfF-O}Ed_GX6ZRq+y -jl%i?c8nW)0NMl5pE}`5sNo2`W;yk-I~6_|?lRsovzbnHx_Zs<33hIUD7?_NFw9Sa_y6blon`2Xtp(y -XI&&a>zrM1k-BohkYxB|k`pvB?y1FoP{q0)hWHZ!_&|WDD1=4Nk40d#h*bXM9E=8_WFH#hb-3RS0-6( -4VTUEzYLQ%t$zwJK>zH@E#(Bu=_`7eQHJ5hfkEJ(^baA|NaUv_0~WN&gWY;R+0W@&6?FKugNX>x3DV{2w@s;n)~{CN( -!_$!Q1ax!Totf+XqSEk*Web{oXrJ76%GLW{o@fWq;eq@Hvfp+&ylsuoqS7qtgY#;V?@DfjGM%8vcf$s -WHYR>Y#*GeXnb;*o@hixvj14i6nE4g*rQ54Y^DDXd6?O}}wR>Y8E)hQR;hvQk-k{Ys`1EWPA%FwO6 -b@MumXtu4PL2S+mu$@ughMUGbIrZ9WEHANtB$aQO~Z+>Qm>FXSqxH{lsroRC?TDPDMgf -W@aXW8F-Y9GL~#y0Mc0wz7119tEUFpV8e+~#-<{5o -!Al(1)p~9kg6L|^Ox1G2Hw1P&n7=&A~-%+(Ds=y~fueH}D>Au9JhMmkl)iu -o6PS{%&&Cp3-CEdVY*L-K;+vAm;aHhuRI%UYr)vt2NbHnKl7$U3j#tUC@jB7+nd#hvG4h}z>rT-x -5A4m*T*Xbv`7Wj^^o7Rbp28Ce8c%F|8XSi%Oy)K_gH{93z&|U@c1_w|!g3GP)Y#;*hgLLQb;glRFsJAWp_AhlJcP0u`TDfM{&!`Z$}%Bb -zJixvfJRDEWEEyVal(Xr57|SE9y1(gv@(rUd66RM7Z+qB&fce^5&U1QY-O00;o{l@>>&%^(s+2mk<07 -ytkx0001RX>c!Jc4cm4Z*nheZ)0m_X>4ULaA{<0Z)0m_X>4UKaCxOz?{4F`5&v%VAqWSH*gZ$drq|+{ -HbJv#(gw&Si^T0+(H1f-Q8BTS=p(5(F8X2Lp$_i$Ye5 -LdUU{#f=(69olLKlXqjDEbQ)7gXP&8`$|nEJ8D77qJrk0&_2A+Zj!=~y4+cLQBsn(*H6u>Is6K -0a60~dpYQq9%+rS0jM2ackjy~+bm$Agl4f0qowAbP6?9AzK+QDYus6wDX`{OU!MxKH%s -mQ=tKu#OSBO~%`!cgrA9FJxd>FE{E(ahGF==4^V!4UXReqbR%7?!GXA6%(gI@j?`m|6-=!7_nRXFOl= -wL!m6M2i!hgjS?T4y0T^M)juP3Q@1jT~Wt1RVp>w7%)*L!mW{CA?gUFk5T-FVh(3)kQfML>j?1o_^$_ -V|6cE><*JlFRU-Cu_09%p)F=kLh)WAZ^yohb>+%db7{;1yJ8jg78nj+`*8<|atXaoMi!VsklC}{-nmD -JR?2}?DjAb%w4u@b#Dy<>F@-xb#~ZhZEdP)*Rv*z{ynrz6I`=WD -Q%$%R-#J)27#_40THMvpo`8L;aYWrNig@|zF2Tf0vf4gCu=UD87QGpmA+4PRun{S1AQ1+d?kA$#+Mjn6Ugh&~DS7Ku~|2j@cNTTNX{&UUWC?VGiri-AM6 -?yrNlAYtt(eTa6Lw+rYl{;p{c{Bz&ULx1d2`o#Qme@q*japoR2*OF_ID4jN~gBwpaMjEFwP+@@j_JK -B6h0rqTGQyS`hLR4$noG@?U2n8*2`_#9Mr9}ff|J8=gHA3R^l&Fm&#@n_(WA&02B?IB{|~r8 -MJ4q;~D}KwcF|fCDE~65+2Nsu8clC -$0~5RkoS5UR?uBk`@*8n*fXf$Jm_gWD01>OhQ{I%MSVZ!^QRWfhZG&hDt>uVJw|MIm&aja#JY`t71jN -WwPL!Csycamo)FSdepq|vm~0WrH)xpPllBqrok2N$Z~Mxc`iCkKyCU68o=oZLi`&hBN0v9lIJ5IVTcx -B1FLz59-1R)B9}aYSqzdW!Tk@RA=V~%4FSrE01%MMJj}>}-m6Ov$J11zVPICrHM8AM*Q5l|Y49BCk#T -7>j_}fG*=h&3x-{pBva}fEq5_{x;< -73qLoDP8jr&m1qsCYY=ftCv@1d@6aWAK2mtey7Dwk&dG-$l005*F001Tc003}la4%nWWo~3|axZLeV{2wsJsm3`?!5+RZKK*yxs1;-XD}pePD~Bfaquro;(Jc|8BVkBfHA -=J?P<2^i6kZ~gebM=~oZN|I%(TGtY?jIeSeq$YH!1g|w@?sq~8_QVtuRSKcW(oNqpny -k3JBmihm9upw1nTJ6mqai7DQ3 -9taDS=3FRp^C#9^ -0_?>!A_zi$93kGWIcYemi2VB_dCkwC-c34Ed~nI4r<(>66cGd);wQ>laphV>_-wycu*Dv7&}L-Q{+li --QEr?>cNQ(XQF2~!DeNkeE=wDUr`T>S4Y<*LZcoHt?Dd+8xDk6FGY*F(%&li#*s1$zumxxJ;#q;s9#^ -me7E^y6aeuF*KKi(aI$@jbb@?jmxGI7F3Jbh|b+Y`XoZA+0Pl)&Nr(x2IARznxU;g*niOTTcmE+7T^W -kH<2Zh`R_nKC(&y78`VHz+RLTB?i1xToaW^&A$M_@91|TK9LeOsh~tTgy(FB$_m?# -wn23)8F#EE_VwKp!)<8tXcMj{d;04Izc%x%%omz!bDO;P8M1JUGsP?dza3<0 -SaZIH{+bF>NHxxFCPk8wBSwTw%Bc0*8ex5H~C>Y@)L|67ZH?4Ljwmga3=T9fKlXEcREi+Xw@YZLab~+ -tG}{PZl$i3c6}ZA<^HPQ6@QVpY>dK7Wwwa -ANq;P3I{iRLweT4@Pl$M=JI8*`$pgdoc(5Yuwkr;>i45kwOP)k-;rgvR9=|15yYTwFDHdTAU7-c -eRJfmgiU%-3qy9an*enH>Y%qHd87F6>wktXR0Bg-+^-G5Nypu5rhV*4^SBtwm -_H-mmBWCC|0O66h!fj>&m_!g7yl7fQ&3yrme{%DQJG3%ngU;Mq%y -!VEk$K8_0K`joEyHzb}w}h6r`TCTG6%4SD%>18PM(v;{q2m_%01SHrtz;9=yc8H76@G3t+fD3WaP@d# -yMKa>2BQyLv5nxpJnh<<47t<@Ccaq!VCyj#k=8U{F{&s5CDhKzr@zU7T3Sz^N>-u)*_^n>39yied&EW -|lKBO9Ft4`Ms)aG{)ncf0t$Jjn)b1YJ(~o0gDrFGfI*q?u1*k$+HeSU-7P&jo=3CFJt-YRriAQld9y8 -6{aOyBg}1160(;#jc6r1+HM#=y7R&q_%(GNl;TxKmhBSh#=6bZ*%*2&X!P(+MxVgC2-oNzCN?ac4gycvI -wc|7$Wc7?)%)}1Ks@_EfC5S2hmtv3?|U^B+TmADUZK!<$knY`qS{hD+6@r0NuYZ*kJLv~PPRtcqSy~$ -WNK1UlL))kX(nzIHXGP7ZfHExxby=deAd)-g+6|o2(JHLsO}O>Ln}V0csLX7@&OL6jVL_TL^AV-;A`y -V_>LlUiPHjc6Ez8WdwFpv(-aC^B$uOJ+8f}wgLIWs5xXY(iRTL8K}uKe4{};=O;vZ}UZFsH{kSgQX(5 -Y~!1*@Qsb^{2W1imb9&f27#g5i}G@%%nf2NB&5B~F@^&pz>hRo7PcCs4Qc)*#RWL4P@vYoNjanJ`iV! -@NuU7uVZv9lY=|Cn+e|GQ_vN>i2Y6`ju~H(HM*vuY~`Wlv(C$8bdzhEH4@4QFTW))=JZFrWVbP)h>@6 -aWAK2mtey7DtF|o!UnN001!r001HY003}la4%nWWo~3|axZXUV{2h&X>MmPUteKjZ*_EEUoLQYeN@|S -(?Ae?_g9QuRRYO4Z7DAxBtlw*MU|jBrK%9JHul(AvEE(w64!svtS^uV3BSa%bLPxBv*Vn>O6lJ4X7Aw -Y;_@19lw_iU-1)k8(OGl`cf3Stu>vnEG~o6KOU+99nKB7{Lu0v;aFt%bivWnHRQ&QCG4#qq%X*N?fwx -E$+(OL-0zQ|h9dHSyYPH}@mIxhp`=QN5k`l$!M4@($5tcKZoA%`Smca+#E -9R_R554=E0V6F{h`?pTlzA`Jv!P&@r_oB{A*HPu9>x;^;_0$gGq>@Qw?*f3(9;zxLEv!dQbglng2ZJS -?K6O>F3<{4S*xU+7-5#ZiOk$Vn){m@Z_5e9VTxfR}HxjcF3h%4aI-#2E>0p*1&Z%i_zlA- -@&bYEXCaCv2tO>dh(5QgvkiV?mf62)oMQ==YS+f`8`ECr`gR8?q!0gnW`bU#e|?>n&AbyP0wJ3IT -#JF~lhwdzlrnuCS=yN{n>qoimn$gHbt8!UnaJW`3$U8CY+RmPMkn03(g=T$Usdk0=|{lTObLg>iU+1ED;8>hpEgAi5c-aBUE7pXA92nS=HBhAiUv&wf*Piau -|kKOh#j+n`P^h%=sVgRK)`)*KYXWZ{~0*^{a2v->-SqNWOS&~J}cuDr(ch7rxSv@_i(tWbcVD|*;UAjs3$u4E}4OZzZ -{7BMG1ju9JGWgc((LbA{afDcn^U4t48K{*vWO^*Arjq-TjS~$*qmHO0w*x)uj?8$GhV4~MX{jSC>=gO -0sW_;$>LAZ+XPw48AL}b^K@>){+-L4}#H}A`#759-l9mt1a)bt+5a+oll(YW`Hv#a+VP_9Y=Xu2I^88 -M{#7hg_m<-G>Qw+%L(F_7mSx@w_$YV%q -IQz#io~6{qTX`!Cz2I0|XQR000O8^OY7yXGgu8umS)8VP|P>X -D?r4Z*6d4bS`jtbyVMPn=lZ5=dU;=4^1aVx^xdyraok8r=eBJRMJ(|G$98LV$ImpHlb+R|Gu-KQL-O? -0sB6G_ubtGV_2%X)4beSm|eVi3)f0AkwapeqOid@7{e{kP#VmkkvVFxJA_5eGI|V=5Wb=|TuGQk7cg; -v(GVJ)zbA%HHBhk*q_WT$Bnobz-~s`kGpsFe37M*D!I{huT5fkf%|H?n#p6Jsww4i^5x%Bfaf}1j3*K -2<&!^M2Z6oG|MoO1c(SywNHeTMWlAG5g*2C|mKx07TQ^Pftx$S_}q$OipQYcspN&_o3Qp_r+wbk5mS% -zR#VOyq=SaNQx=G(@eH0nhe)q4z}Rxt^qMFMd$f)9%%PD0{%h&P|s_ZxUv+}$l!oA@Sy^&KqNtLu0Zu -UEAD2#eJte2!PwAt1Gh(%^HgoqiI@T?;XH{Ynr|1Qew-8==+<8wi8jbvOsgYT7q9*|l@BPf+a6dY^F@}x%90vOtca>Y`Y#J;L$#;M5`%aWJIG -!VOej+PYR4(E3rmDJu>yX4xTuCx8?ol|t{+LT+nY7&V5-qconi6G{np=aSuXdnwX<23)CjOM)vz_*2= -!ILZYiTO6P18vxObC)y^rLWJe(L*1t~i3brIBnTJ>{fFAArG8+)XKZp+4jf;mo2l6VqMlPtHP^oQLr9 -*Lm<8P)h>@6aWAK2mtey7DujMmPUvqSFbz^j -Oa%FQaaCzNRO>dh(5WVv&M)t*)2u`D(67@iBM@5aWWSmAhp#=um3h$EL#l-)2cDwPm_Z{lRA5R3zh)`D_7xX?pwe6lxbd!GWE%$i(q -Mc?3|ra2nr%Ty1C2(a;2LsXA>eC@wE-?5mFv3VOr!`cH)XfYp2Q=H=RJi?45MyF{WY!f<33ax8+BNCPLol6((fo?UcI}U%LajmJOT!h7nQVd8q$OnuDXdrvQUNOzQq4%KwN>13QMjOG -Zd#_0STe4S;z?spj5;Wzd5;^&DkfmyM-W5<`07VN9ZEm`AW!!gLYNf>p2xX>|{ -N_zd5JaOMJ%O|%WZ*2?N9k=$B{ne{6|JQ0w~ogiIf%5$F5T%u@Lfl$Z|Dna8wjcU!cJxERRGGeLtnj2 -=iKNmxJPOjt{;y7>q`+DS3E+4vrxu)8)GmTO3)^U448Etjr$fg0${lqVHLy@dSb&hTuydgzOU9* -xNAbIw)$??!|HER~(;+7QG7W#rqIt(d)xXH77F_y&}#L0*iOgD8zzdx52~dI?mw>zPzPn{5wGB{eKap -tACxOb3ginbdLBRa&&Py`h#=<`BReK5_FysO43Da#?CKLO9KQH000080P~d=M~s4+wG|lv0IzKT03!e -Z0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rZaAjj@W@%+|b1ras?LBLA+eVV#^($a%t4u01BKz{?bfz4|arR -V~lT(&At}R*74#5$L2m}}a6vbH1Z@+%b06hbMq7-Lyn+>ayh~S{7r>9@j-P73(US^AR9#3aw@NEC-7s -1zAs**`?S}rdy%bnew-Qe3e(rKY5!7`obJSb;6I9jL({$qX_2H)$vh_f_!7VZaq9MCgA^#=b15Z2i;n -5%V=W@WG}G=PYU;4)5hpl>3*D1$f+qHMlMVwFZZSjFXxrZGT50P%MNA{&`Re5K)e}ILhW{;1bWsGk{%INKu*~r~Pz%5%Qe(g{QL7-!12xSx{8na -&>ne}SIGqlIBD*YCD%SvI5*KA2kC&xGD2o}aR}KJDsWj*vod(CJz2K{()8o@2z<783_P<~M?QQVx=*^ -p>lefpOPJ`EPf|svPzCM0?{Q3mGeG?p={5|-etSg-^)l>)5>{{n3EGJm#d>$9Lkp-YP0Vqj4k4sh3lg6ULoy$C%2NxHY%W|3Piwm4T%gaEGi!6b4U -hwxJEd4r0u)|=H$7u;Kq!9w$*{R-$?4R^omL-LK5SKc49ss#{=I{cUMwND6q;ERCDAx;J42g>_=DJi- -qKd-2acvmYykYou7<{XzDq2@x7b-7cmK}OEI8Lus5>HNUuac#HmFHPLIM@l`)9dx2U|h -|$yN%OJp=L$k@@o?C}!CbL@d{rNYE_!?$vj}7hmj$6(~FLSE|tUtnPyPK(p}ZtC#-^4~8HXKkBF)06G -NZOZ*YGq0CiO!Yi|ELeD4q67~xoUtIJHom?99_rD)UgRfHA57EC)UM(^4h(#yZu%FV;AGE6f*p2Fj^iSGdFUxdv1~pKr7E9*Xex6Z?9g -aAB(%ER1kcNs_JD3X~2b+vT+3D$ofFU4q8y#B|6E*n#k=E`NJ$H}FK1rD$I*s-S!4L%D>}NtSlu{o4MZLF9Yye0ssn+nY_6UL&ch&)$8Rc{I67g&iLC$`hz&;8|5%kGPn+Cn-uz~##PXU1s&pr+gD=Zv -1JmUqi^~DAJm8v*zIXC6e+)e8*mK*6k7oA$fxjs8ymHGtx6vU>lO#2D&-Tx|V93R81o5;J#0Kxx0n;!Vzs}KY -vr9Ba3Z(S_E3rh6rvt&tTcj~Hl>2&-yS49#ydp6~zX^`W2XKOnpTs| -Fc3WX;RYkX8W{+FRH6X+aINRgsnYz{joI-aYFQa8iC(eKTqxUS_@1X}Me5AwCv!3v=a9*phJOLAQZlT -*si{o~&TwsWU;yRK%zGo_cF=dAa)FdOJHES*3*$m?C^_Ti3}jzvRh!?aq|lNuM^OnrG&t;&jE*9#-QogpfL)qMvJrxfLyCYUJ^I=Y^!d<{+=dPg? -YBXn#ep7HYV21WYu2$&CLk9hLj?PrLQbBvpPkn!WU`bc -axxj|O-rm(}&~y-XgJUo?%e;&0hqPpnpOrR25K!f$YEYB3fD_w*I!B}MJqDr{bXX*D -4YfHRws5wm{;uov%76f{dIy*3%dR=1qDbaoZPEODT#?_Yl{EVRTNi6-OXo*RQpetqBX4hJUSTvxlx)< -H2TLX_7$BSQ3X;^nfZv4k8(|CVj`Dk^;nUlVG`UrIc*JDh7s}0uRr$nh=yqW;+!=&SwcjVHbbbU0Qkq -f5+$+lA0h38}Zrzw*_6QFbhRPVB2yXq78`?U7vGv8B+S8`s;nMSN+|8@!fN)`Vae~(e0zr?eo#?A^iL -Ha4_h6$KZVEEa~ir_r>`h5dEDFeq0tN5aY0bImIBURx{v~Vxc17`55zRPJ~c=c3DC75~52_My*obKud -K#eUaTCGYakS)HqurD=}8}p0}^}FESKXAN+yh-@khE)$7w&!7Y9{{_Dx>H?LkEoxb8RgSJ3e4Qez3d) -A}yvH;q9M2~^t-KL -6T33w046doN=}F?2?f$=$NDeYoaVQ9D41YUv0MkWQYWXF3>sJ+T|{bu-U-@0_KCpnXaNStJ{*3dB3l<=jHSstTUC -gqDXX}cab*YWVUjf6x?Rd?vx|e<4YrTHV$8dl?7elIz&7HL$`xyKFTt%U^jyJ8qhPKT62!=nY3SNykkWw*%-e8UXi**8`0LJAJAVD5WzvJQ{U`r -<{@J6!3puG?WFl>9KRguPc^~qhgFPDEb;g8|{-eO0k~`m_d7fOn56_#}5=?bFzKw44=vF0*8GO;Dx&? -sv&vmR<&GY765NRn*Y7JVc)xMsrC^s$$UVLIGc8eruZ2I`#Euejy56mORrMU(`riIV2)Xr!zEY?#Vqb -uOmYdlL6$5-xQ6Hb{;IgbjQPI*|4=umZ^0+$|v&DE9W$JqjFi&TsDZIe;++^i1}a#vb&-7aB!2NmCcc -BY>EY}t@ORZj*8Zns0e@pIey^nLh#kCb3Vykeb}>IMx^cqd;xOlNU9TukK*)_@pK2xPkqkO(Ce=S<>h -T-s1v3p5*lE%X#KQSEx=7gwnS9fqU@tKUtteCDh!=)bd(j^Hyg{}{V~4N^giwETPM9sl!B(nBpU?-uS -2(tUpcIs)g8v&FTcB}aoTz6y%vm;$xHA1m}c+a;&VZ6g}|7C)i23vxy@^M_|Dqp*S&M&*7GtFR8O^hvKF}uOb+S90V7 -ABE_N1FIrCE(1ULo$xjs+Rq5M6T#)glBIhbJ%ggF@|48&%$T;O#lIvb%>9LBl!28IkwAE013xd^qAxn -cwIW57d95bR;P-(7s3;11A-bnE-}FfG`ZGANWLGRiCMktAT^g&z&dbJ8&1f}NUp7I;!tLt-WlCopW7+ -cfbS*fMsmhHmC=+Tji{Bn#D1D$u9DONQd@{#QKdtTDJYSxtSPgl&w(l=xbiWOZr3S98#%I-O -!bq^S77M=`U>f6BXhrAu05Yi*ecawMA;4^-fON|o=S -t{;&6<)SLi5=x!lVt?+7&8Nx@w{Xxsu=s?@;$MfzeX_?b0_POi+9c|*O7~!un{^9US$;+O#PI|9Mx3o -qtA5%nrhv#yM^^~7(0Y?-flj5{;Z*Y4(9l(SCq$VirxZD_tu&TQ5v9Xq`WJ?;#On`R|>AQ^2Z))7;h*_>uO*c>gg0M_LCYVaPcf3N0tcgxM0)-mY2 -vTVfp4jW1dO(~?xThTC{{>^wL)^#(0+(hwd2=&uU)q)$c~GDJlD5bc7=I-yij8Ub9L01!>Vp{U`_Q>q#KLaxtUfaA*x#d^>F{y30eU`D -5)|lOzVYP&_hvhT;Ge7^r_3-(%=jud_&4h3@Lpvq?E{z(+TJP(H&#n=0M370gat80>IQFCN<={Wqd$h -`C$fY+jEX*jrAqPsTCmZ-|&zK!_n7t5sN3v> -7#6@krn*xly$dZFBD+epJf(6-Xx%bSAgZEZAY;t)J8yzC@;SQP!ircjo7&s>tKXEM9OKiiedfLWq1!N -sEfZ)P3%go$FF^A{qm1r1VQ$wxv$2+yEa^ol<`=BnSgT0)f>-!SRA^@ -K!FS*m?!<$^~j>^5!2nDR7%7s-SxN7tK_h_V)y3MV_mDtR!nanO`1%s>}9vIvt&J*tFi -&KgZ@dK(~|IIR*#pD$oi&)N~S0;%kg^i^EGwS7c2JlkWp#!@U|FwW%=>%sq5tpa278j?XItR~JybXHV -l5fY=tc>kZdRqY@K2U!%u{y#aYFcI>%yJig;<_i9Cazd-uqitqkXL3W%Mbx98%IvqmEyJeSPoG7uZ_$ -aLWyLlp=%P62H0TNt2rWFaoij{5A9fW~~AaDKp21Ny7;3g-xZV)1%`d1AlY7v` -&p;tl~RIKU7Nbu>guo9{mR$E?dLaal&AvNY}gW^k}(PzoWu=6FBXYb?32-cpU0@ZFn~H&XKR(uX9e -V9lXg0%^_`4BcbxS~jHScY86cp&VV$uZSl5Qg(Z$RT7C^XNfcVIATL;Dj<*6@I-0bS -jhwOO{)d&!p?xco~y%wQ7Lc%&gZaa>e{{CiDsc>O-dBzNfk*whJifKUk6C+sG+wQMz^c3c;{6FO=ip5 -ZqZ-$q}h!s{mHSd35DPVC=|sE@jd3hsQT{h)e~4)cLNdgqI=ZFA$kdH+bBy+nt-JWR*Y_LyEU&nCuOt -;2aTl%Rl|+i_pAEE$PsApBXAMPM;i)YUWl@0fmGMGCmGUJnysqN -N1`8!8`pc%>B8BBM7?_*+?P5*?$^j)D^$~_eGMnRxbcr@7%O9%jTDV+h2y+D$1DQ_76B@w2WVDO>W#o -PKp!fy=$o&WU@>tw` -;pjxdK042T7J)@cWV1HzolF_&6iHpnr~t?9WkmNiKeo+faZdIyu38kqx+H2&o -}2jCRo~c0sniFYaTYnXr(F5*G+0$>+Oh2CjCvr$=F=|!@P~TFAC3$RHI9N=wjve*Bv!T;AAqo9#xQ1h -xNoXWe93V-A7aqI(GhREtol1t`C$0h*gRmt%@Q(yzu4|m9?ZLc~K -H*dOq$ViV9}&lly|Ua+f8K!fDeg+V1NwJuymZySF}>kr;}JVo}8Vz)ZODu2MnJ&U+H)zzAvF@!dY;l~ -Ib*4^(iOjfRHf+IbECcMh^cpBL~Ho;tqU;<$=>;|?O*i%7GN0Xgsh3q>r!BnTPNYQ+t8DQYoDFl6X?rqNIPMdZEZ3eNuQzc{X -70#gL3BV3hHI~Jfa~hQplaXjL!msni?5EK`Q+j9q;O_Q^4KN6xt@*?^?)DSOs#+ft9VZ!cmeIC)*^|l -Z+qtPnn*E>|h*O#2u94)Zc@sa^eW{yr8n&ehpB8W`$+eoSnUC;BqPOs+IDj;H7;?n1{EGg4gdhHE&u=^0001RX>c!Jc4cm4Z*nhiVPk7yXK8L{F -Lq^eb7^mGE^v9}T5WUNHWL1>UxCs$6S0vQJI&p-zBs9yxINEh9FOg$({X$%L_rd2ieN#?vQziJ-?Mn3 -2vTyKHs4N@i6vt3VBfIVU2u!NQpK&7(^oF*~aklS$Rv>TR(%G8K6##%z&~g=W=Eu!Dl -9_~S+f?48i1R5^Q^?65u&L~baG{{@6wwP168%W_q*MJWIwOE!_2VB#hfMa5*!QZ+9!$@5gOrL1OV83& -R8;%5h;MimD&2YrEGlO`SGmf=}d6?;#fESJlK8%7hQr%y6VR6cog^y={V>~I^*8uB0WOq3_}JN|iy*q5VC8=+}~92dvOCuP`A`3AER9Gg6gh!aOSdBUuSuDV5a^pk=#YGK3-*DXm%hC6Drn%w= -`k>-C01o@HQWpI!7AK2gCn9C5%R=cV-ZjhOQEw(;O7zvh`7H=evZJUxTbhbIT;=ZB}qQSXw#y{GRtc} -{XZ7vpMCWTJ1^9M(YQ_eCTMmCguOi%f9K&sbd3ADGYlQDsGcGnMizx*YUktTz@DX87-4TflhFE)YfL? -+J|=qfF(s$eE*JBKDrGAAR22M2z0v&lWHWr1*#{`aL0|;h -GYe|+IQA}Z93@EDUl9e;H$VlT8+9}G5z7o$bI{XeU;Fq+D#d3y>EIu60csUym`=!VxaYrH=G(*YoO5D -cHd0FLV4VWT(cPHC<6m1c=`i5wLU@#wzIV&-1kCp5>Qz5GOEU5b}Sn=EEfZcDyPCpB`FFLTFMYS(lsQ -G7M_KOy?p1J`%U~^H;)VQ$#b}yaC2+es}(aG!4o9@}5Z!mSNsv{gWVlHx=XT3JhcBz$*Iv%{gx?K?N% -+{g}9Z_VjwRGKK%dT==2WG^+Fixz9usjHcHu?%eRGAIGS;|`9+Gw2wE^H*dyOXDVFu`ZTg1vg=gC)K}hQnN)YhWjVIOX54)*?s!ev%ml2p -I?8|nz{wLv5_%f%!Nh{Yr~u@;h#;yTPbh~6KL`QRYunTdKCu*JYsJRb@XM#9-BFqvn_@c7a1n<8;*=N -D`x!3NL2huikwQ0d4*~Nqay)+kX@7YdQCL*B=SZJ15OyikoF54>3W>1v7oZRq>5D9Z0|AzO_8vJP7(z -!kbh;jn0Spzc8-HXr2_USRp%z#LS4f%N=J4Qc21So5;|dGGNJ7CS^%V2R5r11#-@RTTh1idL4s2n8py -*_fYFID2G>|YPDxnc$kmZRRaA*xSeP8%VsM6+1R{VWP?=4}NE>XwLO(9kBD`cCd6ezByaM -4mNbSlau*cy%1sp_EeM>#xMJwkyqRz+p<1!`5v@pV4M&DRe&$P -g~=XP#g%U#_hxD;lDww5pZ5XCzxl)ep6O&i(*&HQqcd~HN -7H*oBs?0qfZ143gLWwvR7@xZw(7 -MCO*)W#(Q*CK{OP}3DFEO5FHfEumS0@#Y=3k4IQ}Ajxz2XArB>0wBAh&T?&JV~`95)2U&iYYy!(}6O8 -Yy&f_J{SXZa2m=(inSVAhN6;rrzBW$?`553?72emA;H?{s=+g7F;%<2wx9x#KjB9}Jdzy{(2DUkw#fi --*eukwDMZ$pp=Ad%$77>lY4ry=zbDc>6kOn!G|k^ydz$xYO~cPtTurRYIS5lY)?$e3H#Uzg9n+%mjMK -g#RCARU+SP)!1*M_m7F#)v1&psM^gZWAAD$ -#f7`T>h3Qtm?qeZzk;)oM}nUH2}INw{?bCaq*UgHT-S@B8-HAxs&YgFsUD5Wx7RVC*t;q|I?0q9JhYy -Nn|f74o~feCurM0NO;)s0Fr`DsNM@IY6ZNb1aw$^>H3-jD$9!qctN>Kf)h^z@K8z#F~$CXF|+JI5452 -=7E0HECg7##oM%S;N3rn+$0~!{HS4J6L6EXj|3&+wg@Vfrb~$R9S&D%1l$EXAh9{mJp|4t?<0ZN+&c` -j-8T-E-ZyNt)KSrcnk=8vUb&~$(@6ds<~a4x+x#7v^(S0! -^J;*AY8Hxz2t+BIC@WKB-ikqqXh`ir7F^>*$P??IdZuf+u%<^gO_vh_ed3^8=QLDe*Rv3nVE@mioLRs -|`#le2V~p~U8)ynuEyD;Vr>@}`-3bd2BO#bzoGOce=se8=95Zr#3bHuJs4x< -7mKk7luLA@&R^;( -uUUvD#bJlGm4eux18Rkg>RTSD&OUEu=syW+l9tllwrkTV7@5wXx!+Hbqwg^D4n(7pc2}_`LN~xn^TPI -D5E@Xls8n)l&zW~DWR(PIyWx!jNH=)6F?fG33r$L%2( -3jE%o7Fb^CIoD$h0V0U8`E+h)4B+$ij)#)z~<1w0<5WyQps#nimY0n}BqB50bWTCFsr5&6^6HDC0ex3 -LWR=-pR=e-E=B7?P$yA;hT%OapR?Jt=pFhxT7Ah5lTEaM0kGK;x@2g#N57Ngnx^Y!WP-J-aE}+4J&W+ -ir=ulNTvzfO?I|-8SlHDPq0$UMrHlXTvj-<|;{_N0F&%BUcbj)Wi7dx*irDT-W75&8A?r -WkebolNxkJLLqFD`CwYf^iwQzmWLc4ZgOg*5waKM_HgujuGEQPy3qC(3%gj;{m3=p0Q>NH`K?k;SX!N -Ij!;I=V7PS}|O%p*|KOK-FWq1!N%Ny8crAOlB_a#6NbP -+F9g!!k#NT^Ib1czR`hg2+;ZxR%m|-PmnS*SH3=#@OcBqO9elyD%~u#YI>jai4?^ -{ilA*DRxuZ*+bfcAi2}6)aw;|64WZwS8fwGduH|kbMN&<*iY$IWDfx+8_%Xn!{l=!pj$G -82+AsU{M`(GbN7A^fsw7p%0?f0jc~MzKU6%qG_Q_jL%PBn)_&$@I<&@t?v8PSFmF$p5az%Vc4R`Pxd_ -CrwVtW0o8`6P{6SrdrWcuTSAjEFIdgAinv>f3Mdl1kcTAQK3JbPd=xVU~!NxkMFjwr`^$U8IAy=T6W< -yc)E=*?n?$s`C5Mdua!j6jl3s$9h%W&f3{+1KiY)&lh?h&()?>0-TR|Yq;)X;OVwzK}aWogldavH1B) -21diuRCs3pzD@5qHkK=St4AV9=1hp#{7_aEmM~E6SZNsubJ5Pf$$=}wPI&EyGbeh_$RLMOE2X5Tjwwd -Xn8u0n3Kbk`fWT*w#^PGQ>!m19e5eY)gFBC{7l@)R82K6W-_G<@?hri+BpuXLwz>GD2(p!$^#BFl~0> -vOPd0jpfiy-qRFyv=8GFnJG^71HHUm(B5#Py`QCU}Oq$Hco$vkHxOmz< -Z=1QY-O00;o{l@>>sRHesgZ~y?}p8)_R0001RX>c!Jc4cm4Z*nhiYiD0_Wpi(Ja${w4FJE72ZfSI1Uo -LQY<-Kit8^@6-`klXG46ZK#2^_sSn=BL9t4OrNjV19&vYi}?2N(iFazbDRo&iX~iO+Ap_14|hJv|`hI -D7YbE_P!Pn4aqH>gwux?_RIBcaqJnv&%fG^QPL=vpjiza=dpC`RwgIca4fB$&y8NSsi9qy!@t>D29ivtkEYX6@}R8N50cv}cyN=~_!bNZheL15J21|ofw8=-5@?=mnmnnRlv- -4)92yi=*(A{OGAoPKW&yzLu=Z$J$$4IsmoSp1fdLdHw8gGq9_ij*=M({(^Smi85qt2)ZB<|M;LECB3W -A$$v(A_1{bsb6=9icJWRzs(JlT}^3?R4%FqPwVGRt5w7LCBAm01+af-sbAsiVF0r((tL5G?9^wrSSYG -C4UqNuE7^3h2t_c@5JC945_XwW{hhO>R29%-557w$28_>2zS#RomGD(Uh -y_TIf)nc>GC;WYHPkx6&rp#xM_@hWaX9$Pc$!UBU|4_RTu8&n`A4P-V5 -S4_DWhn{~0U9aYzP>4v&Iuk0fxkE*tB0&QHt;+gNWYOw$+M*4A0ie|ki&dv9HnH38lwz|nJ7+7&{I_v -!7`nJwij8_?+K`O2S{|Ny0*7f#qFM*Fd#YcPj$63BwC&%>DQC(Lxx7kllwyi<1x%f1Yrw;A^nHYXA -vMF_^6FFn)%(6CJvQqamV82Vf@5CSqrH65;_}>y+3>Mk)e4Zu6VN#^@ -<6t;UxWfeDCP9N*8tv`v!)9FJR=|w|4PmpNZ;@Ff4Q#vf>LZMV*S2cx{D|u9at2SA*T76iup5y501C= -QQC?HSAKo6nKbpMz?&Rdn+xIZ+_w^>#K22OOx`+M{GuSLfOJVhccF<0s!dKZ?Tr8hA^-7mgY>M2W -;wH52^PJZ5HU=&7NxH?R}dh@0m(RRIjJ-ae9H&NqajRkhB`bpebJhqS;|AO)QimQ -9Mw-zLp5(q{5(NGuK?!;1h7U=wFg5rxTkob+ZZ+6}$KfcoJdq}pXRg99#y<11_2&lCHzBCg0&K-uf6% --cIuwtm+VA(>c4xhhuaRh;X)6@KOUPZ7#Na(84(g-KBeV{^JIYeuDu#k8tZX`Pw375Bh@b0Ef;OUp)SSnf2i -9ro>GkUx$njJYVqN@9?C(y#jJ0VS+@H68_r&@erA0iQon05IcKfPRQyOTSNezf(QGLlR=X&E@ZU$sR2M;;s(p>K?gY44){`PVGK3g#af_(Oo -g*mz=7h6rYPY&D`)wDo{kdeVUepwY83Q{N0|J9q1k4Ret+4}X_!1fZ}j=UX7uAD`1z0jlHrek? -cvin+rz*7*I@t4UwinMaqM6IYe@ggUwia%(l7rt$p7ruMt<3W{CtfvjGe=EzHRe0HLz1?aHavE6x3#j -$bNzAm+J`~3U!|1FCgy@>i*!v{9*Es<@aG+(2gYZ#3i@q_>Z}9j3RKNe60?zjASHc1v@Dn4GkhVH#f<*?Uf%I6^(=> -Wgl9F1@@k7nW1_uNDI-(zkt)@V0cP2L8jx3FFKml^F{e(_pFjm#41U+1PMg~OxBCzJ4-vwi*JeM-%Z6oekYTdL> -MDD5p0BevbxEU(9I+>kgP#=TI3ljCD~>4Md<~k1vB?}2l%+}Gq1I)WL6wtK{n<+EeRyN1ipvK44T^Fe!SdJL -4>4jozTCn)z4fsjG!0_YZGTryS^YV#P&Mv8w7Jovr8RvWgKAs;5&SY@nWb>3_iYXsZ#-&tK>PK=eRNj -;KGllM3THUj3C*=!4h1n>(OBj6D*503(HMG4HLDH>GeST4uj%ly_#=PYJ}u25I=&5X=vu!82i3gP`Oe -Viu8WwNXqG;uX(27?|9Fi;yaMktPDQjGBe8&Nr71T?!qb3ZveEhQnE1oHIz^XJwwx)1H4o`TCRp4CXV -tUgS6VV*JECQS_%dQ-r;(Yd+NjZsXXuRiIk3N4GfAQfX6pKGeE!3+}f>i+4fa$#jxP-yT?h1jzG!gxp -92tKH*AHh3EYH_Qk`=Wlm?T;61hVlK^h0Q9F0VE6VWXxoH=!SGNp`k6;N5p|xQ4&W(TzDCJ|2iLbUbk -Xq#!*sL4<8S~^=z)T09?gr{Iz^5P5?=!iM~Ofj4y8X79{D{`W{t@W4_O)$^#_02KKBgGT>~gO4OORNN -OO3gXQ$U^2;sCpY0w7Re|U2?xP%`WmJxulr5RG=hD86GiSHZ;wQLW8`faFRHB{*SYyfZKIN<%xq0opC -iLeq2fhx`52atzX+kwF(^+Ig{*`P?Aj}krl>O7qRC#hxV@Kx4`8|e<&W)bhwUohRZyw%lt1g%Jf*k1` -^EZ~;G$QLn^KFI3J=FnJwurqu?jF3678?mGtl=phQw{l$K8Dt*!n`D`NES8(4wO<1_HQPv35jcI&U=G -9!|3v{^K^I@kVvB-wg;D@A++|S`Ok-K2sa_gb?1h=vlHh5@caj`vEjU56g36?c*wT8yB?1LIkK!EfB9c^$jE@qy7;V6rAHNtL|n`X^!CU0c3O-w|M!#6lL07h>EE -gX&N_ZXr_f+{dieBgI7*i3WnFDngJ(l0ZpumXeYV)-%D8Mk`!rUwuz}*zG@4i7pkRMbfS4u|RA}}Xz# -p>)1a0fz1RR6lMKec=2T^5%%kc<^qTVJe82lO^%upcZjnNm916{ulbUQ)$X0^s|v}5b)rkLk7eCHoDR -8heD=&PJi4-@Layv#o>vz7k?x(CdwWT{ZEHs*nu(S+%XMyGztv!(YFN^|H?XuXbZKM)?h#`#D1vGIN) -=LozkSUoClin=PvS+O9!yslU+?VAIg9MG_r331A{j$gC+e3HRFxFJsmjUg`)i3|etvAKsx8VfRO*ei8 -L8)$;A8~hm$nR2so%7KAGtC3%1pifL@pnv6V_$PI-1mQdJJuWQr=S)_8HAU>^2cE$@p1@n_>{V6*tFi --s=`B7sBhoQ2j&L1Mm;x*&X$O!emOvon1p%P_fUn7}eo>Vdzy=AD?&x*3{<_+fb2EtVN@RKE5u%EEwK -x-qrt2S!^O;`rd>jf@AUz<{H;jw-4igOt^!W;QK2Mw-=n+TP;wIRQ6zL~r{e)k@M{qgwq^S6JsU*Em??(K^s`}M`2j$Zuv&3EtZ4=<0 -tKl=8~iF`Lb_fCXW^%8P`UBK3aQ_0@~61-98mpD%P>CvL9t~V=;43VK7zslDc23VXp=GQ+qTSEW%HQ> -xNHtTT$_;A0$L@zJBugleXt6}8$gW|Ic<@IK<(5(Q9{`!*lz5eNc7ps#12u~9jEHa#2c%b}b+1KO>Ft -P}qa`Xv#=^fMh2wcd$X2cl7+f6KlqJD?ERf4kH^~2D22H$0C>U=0WLi=lDmNUPoVx)UQ753t^q>Xg?~ix>Ep -Am*8%>WZ$D8U6V^d?F1VR#irhI{4<0Isu!=N35#N=TzPyj~55O6(0fY}gakNJMORqVxMswd~w1JGMfIfA{QR(g%gq?FNInpZhyV*)+P7q@SKy -e8vQ*Zr1Z$@ewVTf_BX6)CImDo$H{7ah83zzxz8N1lCrjNn|>TC$#WWHz@G`+#CKgyL~6G;9l;{F?PV -1SOe{0xY7J6MfX}CsV!TfF@QvqemE999a#hQp$&h1RyM(@>^=mgE4PWYWZq3|-ib4>@}}&sjr~69ktC -a3-cMw#LQe;LL60*p3 -*a!bamCZ=vYKxeIR@VFo0I93MLgVyk)e>^$=Y?0J&sJob(TC}Xb%#$R*sa(f&#;))0W^oozh&0&&pUl -mL6H%Q#DC6K8J&JmQ3?xz>we6AiT6pnJ})_sANnW?>?7-Ar95yU`FW2kf@$UT2^ZB8f7I&Q6%>Usrn) -}kA5~p{)K=%Ta}EFNu9qmr|PvcF)oq`>d*N$FhEU2WQR?z`}#!iyfSRP%hq<>z^EL70oy`*oM)9Mon! -)P(Q1v6GVL`V3Fx6fG`4YVdSkoC`1DM0Ev%M*b~81y)7V-qF{l(l3@m2x14=NQ^Qfy3HN47ZCzWQHpM{4w=Z;SIftGAC{RCWF?uWt%aNadMG2r0eO_rO3W61bbPooYah;&BL9Swl!S( -e0$eW%CmP+YymKZCOe!*Mt*(H??m{kI}cG)BXwB*4HwLKAMF+pxs`3y%Oq$(-7pDbBOX{8gIVQayUMx -pZ147RZ(L)?KQDv_3UaOA;G>2=I{LzjPp2ofe}Tk)eKKq`eg#Ej|nBsm3cxjMh40#G2k5U32oPRc~Hd -2L>^!H^*{n4k}{>yB*MX-Ef@o70^5%G2a&D<|7 ->i#w_h~XO9EfM24s7Z;^j}IewNtwNEKB1egb^t;MCzo3QyB*sLo8+k)`t6os?Lgl*jjfdfI}(_?-Bnk -q$U!9y>kN6i0v8?{^oj-Gv&fY(SU1scJ|-r)HHZ0C!!)P#`rlHMrkO?uHNm7eiJ%+t^32cI`RbVLAQn -wjXFcxE}rIYpn-{*{uRvacXEw47>CBFie4GF|TcnOLy(V -VjoA=108nP7$(J70MTVOAFu8vt~;{K%o#ui8*4SwBB1{yXfi3jD -G}R;?o_DN4q{|;QWdk1P<^H7-kM$02(oMlDhG2v9o>^>XQOJ+^FVQFhm)y3C9*UJ5G(f(lr&Q -?UP|!+@bNh_j;cCcg?>eD;(TmGqdJp& -ug;}fxsp7IsFbWAa@I{=m+y;09kDo((5WB<)4Tl0wSG4VkHP8v2aP1YulO3Fd0;wL4-PhV -}XnP}G_rj8VeBkaxqKK;KsA&+#pMQ~T1CoogG45=o{C!c@Q+HeWWPS7P+j1=?m|anp;5goAM#$`6F5r -+wpO>7U8lUg(wI0$+hYwPDvy3)Q_;%~uU^1aK&4H14a~Gaf3G5-b2G{A-j@e{HLSjn47V$A%LQz|rOd -N}nUX7dJZ~kdc>8t4M0js;KtdkeixE)(I_cy%1oYdBuZ+$59KGHuGsyNLIj+@E*p?uDjk56&%Qo&)pj -Y$sQUI2+FQ!A!Yo5*CC8Uk&)1r8znv^%c4w~I(2wVb&*Wz6}D3mc~40Qp`j~1#Vm{rBu)ltYgBqXj(} -{ij2`uv>?UnRGWSLdFY!=$*j8e@*ubI94WY^XM(YoS0Ja8+0X+A>Ee^qjglIySfj(sH(|C=z`KhC%vG -^DjYjn$vuX0AOvSzZB#{)HZnZU~`=aWDro_^!+S*gCE?S%sDE9)dNDBID^`_}6!kPGEMxBsIcIW!~!_ -^%WWz5_IwsxVOl)VK3RR$kLz!0?Fk5LkN(eVb=hW6O3pE8qVsiPPc -B^!w0SHquhn|)FLCk914vIKExUVLEV+6MZ>Mgy}^=W%|`a6NgLJnC?&oBzCp7QnMrXk4M-ks -ie<6LYC13cDNZIBSY%U_@h~p(M$0SG^9$Gkz@fzVMWGjTN|+;vdXv|affxhFW*kEuvO->G)6~o9v`@A -Z%#3l#F81L$J&8P+iOWYIYIV+ZB}OM-V{_v$WA&4`Snh&ll!pG>991wE!EiwTH31H^m|WM%p_?s;%M2 -aHgW00-k!=4ysj;>e9|+u7V?G`Ubc>UiEwtIXW$2d5Qm6pAx>6Gp3)@U4p(#0P&d1L_)gB{F3J#7-(E -TU~fRqTL2~0!K5jinE`L@w&yG=08y%$M<06ccj>b5a46azh%wq4v0=!vTCfWTB%36bT62?x+a{oc%G* -UGnHLWg8{V#PL24u8aVVIQ}4U#2ldR)Z82FDgmYSb~m|%YH(H&1t38W^D}kjfq^;d_=uxzV(P!( -`9M)_iPz9lm;Y+0Q~sz{@(!wo9JJY<0=pQ&1H$(VrxS!+P%httC|#+CHdMVm;9u1m --CgQ&*mh!y7Pn7W5uPp1YpIup?C&)UScefkutcEEJnPLtrNj>sSehacq{H=F>5jRU8tfi$aXAcR%L9g -Ek=9y{BS347fV!+=SGz5)HyL+rx>$`-d794_pN=5GDTID$+!Q#A@By<(djIN^ -+qm+DZ1oN?+whK+j~}ICk&uRD;Pm3z1gDLaS(KGdX7^s)VPf+Ub8tjfqS2y}Q}V(!W^{-gOC1zAfUl= -m$ptO?^+-lQ&%p`Kyn_sS^E8UHviek<84 -H$^AR9rQ?n6_G7*<0{0oX(+S`_7-5#%<~k8)bTOQD>Ft^z!zh-;vo%okh8ni)o0^B$^o9GGWjH6+{0+ -Y|a#mbi#6z;-Fm*h+eeoSMe$YUz6#=$NoTVz3pFe8iOxkk>9WT+*Mc6_*4a<(l-*9bvOdM3Smew}>E2 -Q9(aXV@GAdoL6Yel1?ailE;Rp2n`FUV<19>GxyhMN{Q2hW`T&#E`@_wNz_oQ+oNF~kB+GJV!F#$N<~T -Ol=0H-^@od0(HhEt9$~vF8AX3WahzrLgd_g1Oih-2UCd_>rN>)>LLY7eYAXl?&HMP~be8m_`R^;1AX -Qw!jvuM~RzFy3>=C?PS6p-Xv|y_#Gt%hk5S$knNntB7MWV&ya+>5DciD0 -&{V5gp(=l~yzDb;D?=xn(#iuPlpUyLCT1ZZwX*EW-8$-c1MKBvA?hmyoxq~4$;+U+@u)0E5BY^ -AI7MIUe&fr_0~XwGGm3%;g!f^pG!rWw(&5lW*i4IksjXlo7+dv$)=APIOmCb9;j=ZP1|ZTmLXem!4^+$KN#?x*foLxk;H!1U5Z89-NaWuwwXFM5kkRWaxXQE`gn!g9wA(T%{ -9xQCM7}Fw)ItqmT5s2Z=yiwt}#iA!5+%G^KBgJ8=$D_R(-tW$}0h0v<0F-ZHRZ|tSfZU6PS~eowOh+2 -c#v?aU6;jAiqO4P>ok%bR-YMYnFDZ}A0tmQhd&Zebq_&qtlui@lT_qA{$ZYia470F{G97tyXfcYSys5 -4YgCRe#)(FX4ILk_$#yOd0(I}{_8ST_(J-FZFj0I~pFLpZB@gazOSDw{qWQuox=QB``l!%#*STREHdz -e|8n=Es{fg5sQttRQ8lN}`rmqa3(y17AvEm8oHL`oRBvrr@MYt*o9?Z4!W(M1UNNGonR$oX!3yoD_h? -g&oS1IVK~w-zPSeNZJxFBNh%sbHd@1;U!LIO2J?S@A)ICGNE4*5PJM7XE?$ZFqWkc<|&b098>mAbOL@ -7Z-5`xW}H9xKFax!IwUVJkLqdR_)f6DbSJ!ejkhqUagS$s|%lcD>F2Im-z|9#rpRO)TYTVHVcvfI9n3 -oQhEIB98KpoqdyH1M!Dc)eUn8ho1IFM!AR8k$<;J9p2DL?(B+CCpnQIgyKQ}SKp_|br~Q$l;T=FKwfV -TEVPZq}sY4&XHF8h%Dalkf-6*&>uJi{Xjy*?;7VP2~WAt8U>0tBO$D0M5O -DK0;@D(|HAmIkYqYkgGxC0zA=8H{D0kV<884A630MfMaiOA7nW9&mKsJ!-F?G@3V3W1>%2py*Q+r%a$ -i~yvPp*mCe?ziGLzufTxWJ`w5byjEeb+RxRYcH-|hM@Hsd4zD1qIXXuI8?uHPc2$Rb7_w{zD -3G3p(>)W5eEuoBU4n`5w7pwnXDF@OW2sA{_wX6?BEfF=}zva0h#>dao`8Djv^5Mq<@n8TbAyr>sVn1nv#Ae-IJu(eK_B})JEqHgCH4+Db2Ls)=5TomU`)RB!Jw1Dg3z>6b)+#zUq -2*>PJW)n~a25I+Ske)$NDOEP_n~4v75!cM*A0Ig7(i?TkhCkb*IIWzKz;-UVq%(>S1Jd2BD>%pS(n7$5SozRG<<3XIqUV -@oYZU=uZLumxVv;6BXuVwtxMiMk=?Zkw*IN}xv`HpJDgcPd3BmxEHYFd=48Qduxu@fH@CU0q|-{*SmcFdB>{`Y#9cjEDGDNF#C}++I -NPkf;=8o|R$&)V^HlEvn6RvaE&Gu?J)m0ahsj{-;cSYwTHHnywm%)>YH1%q&{|5~3-{%4NZ+Y}YIexg -3^1w4Tj#Waky1xM!j+3YGSzN7b{!vBN@KLBT+=0(T6ZB+kDC||+(lX=gIZ}xb5oizC3Y)&gQ!Rpb_NH --JiPkz4sp~s51k77))>O_U9%zLcgfgfx$-S0MkEU@ClQCaF-gU30I~$utt7g>TN%fK_i0yIi?|JVrOQ -Fi^EGLSb9K*706T4@?vOWqzIM*j@_nRoi6HX~h~6-%F0=FfbscQ`aI8*sH?)@K!*Ffi5A|D)OQ -?S*^GgnTS^|oPZ0xKywF_7+6#(0o)&q}9_l!?UzEL2!gFuN*T;Ri7g2T2K%y_QdbWSypv)~o{ur$qC$Lxx{e^dv&&9uwTm4 -|v&N5qN=GkF&>*^&c0lYmS?cn2khe4;r^pQIWaQFy`ZL%u|F?T}af>4cn51?Pk^I?I#^XrQ=Ef9SyDXJ(0W$1Q5{K*2HLreA9J^Ee@t+Nlm$N+A!@EFTDQBux_VIv8S8G1<9L10Q&EVG2=x~H(41XGpn_kezw?<%hp7YQ -aCCJFUB?OdMsr7-5Eq7BOjYs6Xu5TAZkYp!9ifyIs@AgdfBE*k)SLII$tvrp^=G$JRI^_B-5D_dy!IF --mL*+jbg8{P!^FC5YaI3PFu;_IA^U(JQm0APGGO8u|nA)M{(2++A{4!XQ*U{^^*@wPbBwoj -H&|Xdxq;+^UYWc_cew2}C^p@Y+fb3`ilzr+~nDmDS)IYhNoKJKzgAEzL{znP-IZAZWj=Z!Nn*|w3&3x -J|Y_^b^o!`o)4SBQeAQJS~=t-NrEGEPjfg_#}uBoBL1zLbgBkDby4^(j>qE9F*^SpWyuI!^Gc_u7&SIf#7z=@Y -gW{?o^Mb#m5Akvw6knsPPE{FBH39E7O&(PemHe@cilI8W~xhePXa&RI;YjejDWJWeTY4KTDtWr_-VHf9@EIU#%QJcxm1eEpqNM9Mpak&IfSBKf)MK8T^nFFxbb -BoPJwvEV$dEx#B9StKgstsC8CY1W^=Z3C6%4j-uucoeflX0h)I$UJ!9X(X3BS?7%T( -W@NE$(+sWu(PYNaZ59evKuxyCUt)ai_7W9I>Q;uD0f$4)e%ki|uCPu>v;?>Js6^qXpg=h; -bohhEBKc0;*^E6)>4JCPC|5nWT|u#$PGeRvBM-d4A6?>^Wm166nzRvP(^!D?>-v-hn)l%gxa#wqaP8L -j#JCD&SE#gBYy)Rjtev?V*!72IRjtNHuvV&DwXud2#Ji4NiHrzQZssEQE#eWOy$erStf$)xF3R(!8OC%vhOo_DAb^32ECHgIx -QokBR3=pJ9tw8*_JM6$UA -!7`5G{)-yvUOFbSd1AEjyd{$n8MX;x$0ASK%5JQYb(5~*bN&LJJNpD&>0-@_#WHzT8cu@|9*ifw -fza$;R-5@Av5qksv=(PQohihTrG*FX=V7mYW -;_2V0BtQ*yd8s1dWAsq)KrUBW0VqGp9Q;2}4ltl>*tSjPGS2M)Dt{B^bPz&(JPo1E*REL# -9IW8d2TVe6LH~$+B=k3Z2*0$HFsAxAuW=E`ybv~p@h!FwhjUG=73 -R0v`)^y!g82dnGkdc?Q!@8I38MX24oV8JsDwmtw7oVO@%#8T`y^6oDO}T0zK|&~ShSc|4lOg!3s;u-T5Vk1&l@C&Sn?ntU(A*8Zd2+1{D>;T$)3=FI@>P#95?79untA4qD>++1>d5iSgs?u}IHf#DJt6Y}l#*peLhIQ=VAqCrpGleI6d -+{RhrfO{bE<-=Az}boYn@k69H|4rm=HX>sa%rKB^hnIDvBZB&9Wh=4G}K&F$kFKOn#YiHnu^=YWI!;a ->Rg&O07ZQFQsT`s1KGM|@=)?2sI)==g@I6x?Zk`WLpXGBxVS7%nGn$KT3iNE)x~8|W{U|S!UGeDnUS< -3in?-;$Z-erH)!3{mrJUGbr$dZJvJz|a!GM?Lz}@>zOdwc>AKq(%51N;glI*8qdC<^)Nw0bZ8^CeMl@ ->feNxpEPlUKnNxh)r9l`x7VmybB-72Y#n=}Pe6dw&iv=6zq_F3zX%61`hOM!Sda6c#Xx(8VXfd_W41Wbe`>a-M&&P_E -@knC)kh<{-Niuvvm4wD`O~(z;`4MGMI`HQ3clQsk8Kd9G0fh`dqB#|Mjzow*Mr7Y+r&?`m;=9`iA5Lw -;=0$vQvk*Au*S^2PHPe>(E~9yeKC5DUXf$y5f3C0rgs!OE2YPWJ%+ByKYajM -O?06+NmoOpPQKWC!9Sk4Pet7`E}HE4;RfyLP*aR0VkIR~~lYWY?p20Z3n$upSSFalU>|QI{C2%_SF5B -xf9xiC=?K#g-b+hKae>a>0TP@4rwcF7n~x)NNf0$vxo8A4n8Vtx%?Hk|xk=?vKKGn$|{sHD{&1U6{~X -&K4Dyi3IW;u&n~^o)TFfMhm$1KNTwk`k4ySaB)vqfv%SV$X-H8T9Pp?s2SxXdem#}Sjv8fHR)BZEbRwq%e)hQb`2{`4Bk$r+9<_bJ2JV5 -gLNJ`e>mur?9FY^+u_NF*G^W#ePAJ%dzH>(8i$*tq2OM(1LIIaP)&T2ZM7=kG(O&9!X=>AT6*gse=SN -&1)fX2O}Xz%2Fi#MlDxIXU0?uvoxH>`CVF>bU@ICW&O-VKUxIoXs=c7bY%hXQXR;fq?$IaPx?qf2-#y -OGp7_gu>5V(?fo3+v_X8Vn60UMlxk0zl<9Iz@KI*;?Je^tpBm(x1siCQTCyin#6W2({V3MhDV+1WQK2 -In^ph$Ki^@hcFatQ<{6Z@CaCADko~um72e)G-F1E`ACI{R3WcOwgDv6#ZOp}Fx#SSHcfuWH2!h-9wrTCA}AES-<1{ae -g$s{3bwb!;CCK>YyED$H#uTATVV+yw{gZ#kCi^_%zH1M70H0KNPxH`|zz~c$P|ezUm0hjG=Bn<%AXzuXRDrE%3FNg=HzkVuD>&Smj-Sd5G~N>}N1A49H-`GNEDekK}Rno8SCq2z=&o^;`IO5a7kx6*L?;%BR;<@K}4}S{p!k -_P&#fy(BubU`|AC7u#aioqOww#9B@*P%C^);h#Xe#KIkI8h4|3;&3Or;lVN@?&x?O`4K-jnlO0POCO< --vWRduMK}H62bAzNz2F>eNvP>GblxK~Y9pcw&qlzE3c!|jz!=N@ive^jFbH}iyYPPXg>)P|%!ZY -Xiu)Xi)wpWFJ^o;6b)8;=R%6OWam5!L8_&DwvGssG_In?Da=8hpko{0n|0Sh7H0p<3+*{@E^<6EsMo& -jlq_y{*7+e%N7O`Rd%|&?rQ+4rqH}2$ktgjk+r>cO-}vQAD-mwEUSLa21K9Wzd)py27&9GQOslH)~E?cXn%mi(2qOj!m?Fu89uqY$#_XK64MQ&=ev_m#@+^%0cf=BZEfEN^NomxQNMJZRqb?q}<2m-YJj|E1qSb -TAMflVurD`$+EfC3D5O^(E6@;1A}r|Wu^zx?Gd>RwU*bg|yZmq2M4b)0)zD_hKLjnqB6?m9T_6HXu6! -xCz(>JU~+6)S8M51^pOM%sg;%gd&x4~ng}i1nVYxC%8Q_GPxtddl8Om3}Fqoy1rc<)|MleDZ%ENxc0* -j$QbdhkFJPIjps68BSZucT3{;pYv^ST@hV7Pv4vz_SqOU*;qHE)B=gYUPXOz(D%pM7e2({0&5fac+Sh -U$n9DF88ypRs|j5u2x4D|uD)$?RW11{EJZ#P1j?B_+URF`$u8W{Fc|copPamW{{DG?G?a2)BmMNdcSm -ne-oE+z_}e3DVMgV*`qP_NM=#$Ve-CZw?~~{6|J2{vnp*4z7#q=k@*lr>^dG-_^y)~r{^9ub%j35(a8 -g4+0+LXJCyJz669#*SdbdiA_kQ30sDhc=MRlc=ccIBF7Ef&8dKNzUd8A1cqo9Jy643;C&L{6~Lsfoos --Hd@e$O97K;-@leYNNN{GLA`KIU~Wi+|AfPJoLxxyXB+z7vl%Iesa((~`N5+|>SEv@bXkpKNROd9fzR -QPSJ^oH4a}ypSXE_7M!sO{q7W=Z_WisYpo)(sW(S9;NQOQWliORyQ|A<>VCWAM|}zB^a&q6!1OhpZ=f -c2md=e`04S%f23y*`y+h8-Dhj(XCmU|UpGto_x@8gq0{`Zn}_bhj6rl?6hHAX(@x=Hm-O0rSJ41wQsT -Z320PTuw%z==1ih-5%Uf;?_P%?YYbQ7!^b_DWX}=YKwi~HtI2x~XD6^&dmrzch-t6C#XzoiglRh&sbG -eg*X;XYV1)kbmlKCgn)W(PV832_s`&xoD4$ZDd0fD_3`f_{q8=ca(YmAa7>biiMt~LkcWGIDhB4^ -)Ug%jLwV9igaS}`U%&3!3joGS)%Dz4e^csVY0}U=kx5)9QE$p>4OwvQ}|Rv -O0P1he6BU0`V%VgBRGPWZ2GM{mM87^+$*M^j#mf6)5B+H8i2Hm^&08Uv|eTyG@k3$@>6?o1r`dlri93 -}{00o*=N$w6u;Yo!g{RclS -?RK5u#1@Z!gu=`A-?pwTPCC-J;@TR_T3TU96?z>Ux>)1BB65Aqh9;}lp%Y}6AL1@p1%s>pB1dXRael& -d0nQb}$%)hIX@{4h)ja8c7cNF-lXYS)>%Io4fn?g>wTN1khkE4|9@ueQ<4i>Hw~u9hkLV{*glP`j`;i -N_c4)8CXJ(C4JbAHDfn!dS3?3h-#4{k|cdhLG0x3n}zD8sRE$*n(eT7FdFg{d~Uj<)1a>q!vkIKPefX -A-+lotD_b% -=t<(zVDo3uJGrPMj8mxA{dNO4ls+d9_ghW6OWDbbY_xPQwj~Lk>w;MJq*@K&hn5u4HdEn;R|}-#nqEp -CCcVUL$zOZH4E^H(mFzQ6TNb!S{L!A#!2`Ysfq&^ezRY7H4Q#cmtiepA0pk-CQaCekLHa?=4=nnr;9Odq$^O8HMS%);Cq)eL`zUC#=nw{G -`f3^aBiI?xr*eRGAN}|nayV0Ls^pp4w^S7er9S-^PZgziEdM~>L^#*5*1_DCxK8>REUm!DsaXX5JHBa -w?FhAup13@4w784Dm98r)J3V-Uaq+v@j1a)0IGY;y1(Cp^_?4??K3H7MXb3jTM(%`xfBS^f3bj+^QRLxn8mxpt -%QWqPiUTDV<`J$NN!YImdWc1ea66+AG$Sl(KECRoVGe+M6p^@Fpbhil5d&F01H`+7YgB99?R=hWmMqA)) -MM@!qq@9(GOQ-TSx4ufGYRH#|3k0m$rJeDSio|wgU$PJ9`=X#YTE1f`@MG4{)Z2im(KJ2yyrrly>)E1{{P9z|ECUzPgrVk_my^)^ -h`-5g3-&jDZ+DveNDhfG-QB(mT$VHgBaHSZ6Mi;9pOs&`f!^eXVFr!(rUwylXiX(x{r*set;RE+Wy~B -v*PX5E)m^)g%Z}B^!Z$m*^-`qo+i6jyf82sPbo_?9jV1DSz}hhmm#F+{lSfnYz0sih_o@a&QjNR%gZF --Me`X&@e>=LdW`NmNGFir-~MyfBf0=q{f;D`(B4m)dB^?Ffm-?31w@zX~4Y+ -C;##|i4d49?s^Z?nEQ_+2j`YBSUcdPn|CgBWWo6AL$EGJuVe$0Kh^o7JLN4`?Y{6ZD|@vy_%0q8#8hwm -OleV0Gcl$(-hNZY3S@?s;9UkDXyN7Lmwl2P;Y6BU2okwN3iWrZnN>u-Qa>U2j)@T%sM1U*_n4!id81E -dLY6bYY5MViHmJDN|hdkD_ef3sq%!54^VwO+V_l`98K+<1#Wx3s2gW;nWz|@f5g^f!ZPSR%a47PEFH+ -pP2fqErF0<4UE-%fG1FwZuMa?fR{Vhvwih8}t7AjG5*L5Z ->g;95u#vA)8A{Le1tR|~EzbHNqG{Jcfg0emPSnHY!g69e4e(~jso7(Bm628y(R$($d3<+}}V6NBsT4! -`rAktv{5xip;a{+!&(E6BShPOOX9dWJ6N}W=CFO|{{7Md#NVk@VF(a(@v2{&@ -?aSVkg1VIHX{URb>`1dkxo^)aG`MwfCA>4!kYO0%8B?n{N(|Uw{3kzvK0~s@5iHD{SP)#XEGg8gqY?c -S@9#bjECkamc>SL@ -W3be9UsVApr9STu@57@hD3G8FiQ$XrUg2TJ`7=E-GGClC(tkKTB_tBG0$zwEaAgc%x-VbmJYmV-g0WFi0CV3OmPrHV=4^pXX6UX#ckkE)D>%d-s*720P2z1Ny~Y -q-ywNEeqM}E>^Fyvbeyh(nXO$Ud2zv3h9^{BH}sx;{ErEhM_KP8YxBy|>z~wklyT?v|#OFR;+xN0bdEsF2+=2>eF(d+xgH-d35Ptp_@G64?S?K8Hl&QXKM -Sg_V9hy47C-`ZeuMEip^Xjh|m(e#S}=q^~U&xn!!6QGtUi`nnk^_;zb7F~3W5WgLBH@dx`iGBgS@7cd -#u2jUc637W8XGPqWf^i7PjBiJGE3Si8-s{&mvEhMX+A0GV?ryZF> -A(AIl6f}jGLZ`O9o54z58KN3cs!0ciDyKm-16Z1P%b!t5%!*-kN0c>5aPuTFlYk)d4T1*FPjdc#Og)s -dNad}Co^}LSqp=dezJl?W>ps$vk-%&)WiVaVf1><<7fr -yu_Fbx_r_B=MA7I)Sa|*05j=KuuRWM=D@ZV;0?kObu=7Jt`^I+`ESJg043*~BfNvIv-CE`t3UQOd6PG -B0!%wy_HQCyT`Mrh$1|yR&bM;Id;B^JC_SqR8hB6)@#KM&7FE3Z`xisQ#oNpBi?fKR~HqnySPe) -Hz5sSWkkUAW$l>p~KQvO}?2|2N#X6A@WcS$;enAnxWhS*+x$l`nn&|%}c|FPY%yS8I||{MXO+Y442_Q -k)uHuTe~Q-FLrS4)Zgl5ma6`2s@~(+^c5Bty1^U}(*HNbLC572-K8t#9754A{C)C-jr9*rPEBf-oCkxIOPYyXS@!)p5OD$i+jGO4&5?k+%fxI2T3#O|3-F#NxP6NsjXZMFP>8I9w_JfYk>YOI!ayPRJwn} -@gaY&%M}^xwIPMyEbRq_l9{j}McmH*{J~#xvB;v5i1(E#~0Pm>~K9pqUmE43G2g;|I5Bb -mRJAFFSQio-C?8=j$aAm0q(v1=o6tiVUW2x1P%8>HuuBZw#2DpYVABG_vu#>hHg{egP7+4GuguMELod0C<`9v5r%mimJl$ZfXDhqfD0SfFp)X}13Q -kW@DQw{ZS2FXHfvNjsKy~hCtst*b~Wgw|0Yz@!^<-3aYzRi-q0U6w4-XB1BM*+06DfBzRDU6zUn{P5D -Va8j*@|*I{Rk;%q)zqWoq7cWA~8}jm~8XyYpQ!Oks(ec!;j@(-#e02jD=(v*~{Mnw!tQE39^&&yZD_Y -M^{97job9RX)4MdwS2Sn>=nMVrW<*jgYAg5p9G81Q&;8>uSyO1vxKl{Wk!hEPwh#SB**0ig8e%D*P}f -P)Ob};I0+^#Z%;4KAo_#i#U)qlLnMg`Q?L)y2#5p2xP6qeoNH53YEwAyZBBl9f`tMSieJrnzU*!Sv`2 -KE2Sn2S=sxU4PDvm)LS})S6bqqJ~a#^IW&TuWrr5mNBle0QEpLIG54ckomDmU9NFCAJ=+i$IRSCaRB%FbK$*XjHSY|DNxnYRTe(Hf1B)Sc -;Ec@NFghQ$N8#i(P|$Nt*9uQJgpF`r{hyv_aqWbA(BnF?gY9k$@?GJSp8jF>eP>NieYQvH|8Q?CGgyr3aUDI13?|E)+#EWE*aIVYWe{P}K6M|(IwvofPXp9r(S`M{&^RabBV%Jd%EMy~N -@mUz3IkZ2;)QvbxCWAG-S5UfP_n`m}Pr2!tx%ZlZcf!U`+u3eD-Kp?FZ%D?}6D8FR&)NiHR}PvMK^}& -^^K>3{q_^yLEv4Es_DS>D_Kq!h!bZ@zM%3Y%Z;dE4pR`7^3$pLC?}AOfCl5sGf~sR(f*?86!MMJP{s| -GlEmNu==ZS`=9WlTyi^s3i^X>rTs6XBsV^jMVs-4Pi?u_YZY&Qw51JB{??CCb)^$O1Oh4@UkZqWj7EI -#=&2f=Wx2xH_ss;HziE*ph3_WSHT!l^x4SC0%B6B18p;MN^p=i~_{KR?0oQiF`=->^yY>IgiRgl(GmT -JBK7j8(aHk?ZE0y4SHg+*qh(qlsMJPPY`PdxZp9osNNk+G%lRbNlk$y>mT8d^Yp!$1@2!W6{IceFo@6 -4?EIPzy2;Nc?9d*5fKAzRQEVREfa12=;(zn?j4 -mp>6H^9eVAr!hs~ExIuIZ;3DDSNK4s2xBLUlWNjas>Y>-Zr`o^}_;Jeogs2(6vDK2Yx12?&#qhh4)qX -O*wKz95E;5f^RHT<=dEbKY$vfj`x>37x54bDP>}T5FbRA#e1UBZ<=H})!ThKRri-)R2#Y=P~-~}QG|fyew68Sb$zLnVI1K^ZiK+H|9l%;{xL((VQP#t(ZxOW5Q -!>Hq?HudrEa|Cp%9=6j%-B!M(=_N==ZNU*(sTrun8l_ZE%vaYL?+qRs8n|g-zztT|D -mqQYPUv0Z#P+F}d8L}qP)!`qV&G6D&3C>KB7pw=x{yc{imNMD%=>L~}DNl|~oOnqkWt5EWI?X_3aWIj5aoI4QP$7c=JP`1Ub=>y9)96Za6wGLV -@GoOVe}5+#bVO|elma3DPmN2bq+nQUwKu+lJP<8&yOVefhyNtpIMw~(ovF>G~hl6y2z-H*Ax>)u=S4q -ipsKlb2g-P>(}BR_Jri~0H>&ABWIwlW&H0pAYWq};W~V4L*qbPXRXAEh_xCLZjyFHI(|r3E7!HT8AE4{@DfD=01)?7U<=-}W$D9K -SkV(71xrNZ0acpv-GawRj`BQilEiquJD3Fxs?*5o)1d*k)Bk93sO~VM(mi-wQ%$&*Vjq6G^d~iJJCt8 -wr0udV?S|R40gPEEPR{rVu{}~}CJ5cLe2({2k6#{rfAsB}lgZ2DckiRH+T$YcD0#y$oQo=rM@XoPI*@ -$G`_q=(c2i3nLHdLt(A_JbPK{qSr33WzcFoJ#qwbgn8TRncNjnF_8xyr5E0Ed7^adHP*f`XU5~}@96{ -ReY9sUEJJGM%3Jyu}^Qusk3t0*`5PU73K{i&x~y6X0a>>!ohesikCEuzpJM1dbB46As>KJ1za4}4I0U -_6Ty^tfYR(vYM6mt?Ma3V@%qhK%EDdfe)!OMABI{1ee9n=xw6cQ==WOKu)$+AW}=(%othQ@LA>Na2=& -IS?lG^S?*Ujtt6IvKIwi4qG(ZL`t_qbRtFMJi~^`Nb)+9yI%cZeEirLx=g)?sKL-yN(#He6gM9&uPwU -FI+LbF{7h~Vlz0lO%Cfjhg=Qr}k|1T5H3izDmS0c_HvuV^<}C7?tW*YokufdU`;M_wEh@XPX&Hi)uAL -C^PA2Z|L=&lLv^cp#F#mB=+++(1C}Kz{sIZ<%LD7pK0E5DqL$z%ai+oZxc7>G@gM^ -2VKzg#gB+z3>;lRwD+~6gm!p#(DNQU|CH`FF8L=PLdSI ->l<)dVqk9)j>Ni?=ng0bde|E!E%?T%*)l4%$uu-6Ijy~eCGr0CC{^eDuzA45Uis%0egt@cKJT#!e=y3 -teJH_2_)jNA;m5>>Ow56fU!oNkxP@dB24jl&1N{arOvBqRHVcdsjA)OWqtoKw8@S!yFXbQ;b184_zG~ -X%lcjagsqFCO3Y2bOe$X3cJ&3^PMdr}tEliwxhV7N6K4h8ioGal`*x_Un1sV;X4xE03Vr7%oz-#$&Sr&ykS+`;g3uHgpp*y~{Ebe}hHk?|Htn5I9K$)) -vHADd?E8rvoO~mFE(q&4;k4`gV!<~}Nu>}Hn??aJmPodkbGq=2E_Wa0d&cIEw5(ZN&) -qakGk`X5jH+oQ=LXArKWncfY~A>lfPt*)#KqtZZZmH(D#*+=r>~Iv8mrx}1Dk6E%Pi*JUkkBhf>ke#s -p+?QPSEIeEjLVZ%>e5>FJo|M_Uw25XOR(ESU0uQ@PCGZ^5Dk6mZ}g1In8-y*i3P82Y-^1HCu|W(z-2UVAAUzvC -94aU`pf@HI_4WPH+jqxrUdLYj!}zOzdkKsR`jsNj~$3q42!Q``t0aQdv1|sqL7H?hRz@8UxUcGu -Afj+YDz4_zY=P&+z^gf1zQ`_prj#g*3)vGrzzx%e0&D)2A4=Mb2_`snO?{dd$Km5kbKFuZ>e0A~%+^J -ul{-1-hheK7y=>Q)A7TZtg>1vD5Da<@lS|Z{ -8lgc>eBav}a~$1NzYVc>)}2?cY2Nz}~O{6EEq@o4h19A6_m#$66Kz20`)BNOoI(c~^8_sm@9X=tLISj -0Z!x&y4>>k3x8}nV5ih1qTX7wA%FdSa3%aK)I&fShFb2*c(MqennWkmq)FG@8r4q<~O4$p=FGUPtmua -2c9Z4d7G1#K$m6Fr9^{4@8jv`%^4QHz^mdpkd&GaheLVM2PT1}9IN3F4{V@au?YLbY8zuyTfRrAV>F;D -Wo6_{i-or-94DBT!FD0!1uQZ4Xy>27@8aq*BO9R>OkQ_4QQU1F -M$-)H!bJ85$?jBzb|_erm==S@>;0sTq)z*~=H(wAaovekp+A4ElkG)@}ob_w0IsVejLo{!@=?q{B!kt -US59z7#j6dFf;%^HV@J{(>?#sMG@ah*r3U9CTb@h9|QW#1;{Jd@-#VU75+k-8Lei7iE&7;bKEWPfeWfnA(lEReg;@Fi7u~s1OuQR?SnH;W3+SnXL -x;)oeaDS56D|K#hS7T1LbT8f_m0nZEjJMUV91SHs}hIMSBa{mau2w<$;)VS_^y+@KW_iD@(ZDguVl^5 -uuq6vQfO@o(H@*VS&!cBzzIQ_teZJ63qbW~h_^k`|E-C(6ncU`(As^GG$5yT>moj7ws#HP!$*49b4U0 -p3(tlZNneNPpw(lT(`F6Ol)rp6N?T&7cSXWuG~bLM)<0L$J0$b=3cKdPqBOI`!`4nohZ&<_sRN+DXpj -6;)JS#Mwx~m&*yIuoO1{Y_yW-gBrndJDNL$lH~^L!jk2&PboHn1{Ph+(E5bEY~73OK_y@Tcv@J!w{WX -0)62Trtf)e$W;i1I(7kd*8eBc6!2(gIeg3wa7#NR`C*s6HHImYU1UshI -W%5YS=nxD49{ERrK{$m`z^57aJhQ`|9?Qi5fP$>g3PgOeh5hwBkr+cVJU70~0~phUD{CFOQaf@)lYy` -7@2T6Z6B#Unj4g|JR$hBU?x<^0o?cMr#=w8C&V?s(;+jcwH)I?C1x8pS}q7eeYD0;lyKOY$s;arUUsp -kbeW?i<>3d@$HwOk<1#K$e(@#gLY_ONh6rKK@P&OU;IY8*1rv3N2{%O5x@?%?uV)qYd7Ecu8<&Ynidg -NWqtR6T8fcDxuyn31Q@r4AkH3qVPAK>@WpDad~nmiTUorLOHwAt|E+a3tbH1WB)FsqjJ`uoI=gZxn-> -=sIl4}Q2m=z4F%eCSxskERc&KG0Nad4oLqJ&Sji(K;^f~Io%kW>a|Kh&@pohm$@h3 -pMwUJr;P4V|f=I7D>1V>4BM^E+k{!^YVB!Il~OYG<|HtE{=2Ems{@yg_@{Gsm7p2N&$X$iwS=>;D=(r -@XB`jP>D|2{N&MtcjtIpn+FF9B1EY!o-IIQ{f7c!gcB?wysa=8^imJ4q{z*#)nlncC3iXu)}{#k4#m^w -|8L6PR^h-@!@+NA-OZE46T3?K$gL<4Ldv(b!!4~KyUAtNJovKH9upH_MeUQqUmJHrm`OTeM|zb)A(nj -R>9Vs9NI_jz2T_MVQ4W-{na{Fi#67v2=CRc$z+p~=0DQY$`1sWSkfh!UL;z)LQ(*|uxs-+phSEMNsqP -wBVx()WQtRx|<)v2ZTPQF^ -=8G>LJJEsn#R4`L)-}D(7npdW-nUz3hFgRUpYRt}*+Pq>xi6`}c_mA{Dak;&%GP=uYl6@S2rLCc-T}0 -9;rwvt(5-K*>)Xp9g4s}zBepHpCd!j;BuL&>;@%<-(O)c*OH?h%>LUIq1qac{nJEgZz(V-;u53-QrdS -TLQVua)E?-{Ty@YF!h|uv0LeVW~VCfu>|MftdEAZ3*yWW~VCxgEW^q+?mF@B!ophVk5r-ZDyf4G-030 -d8!Qk5outv1BZsKQA#p95fEp#^2t%wbjQHB1>p^u5=QOEL%-vkl&;g@t{kDp|wD9AH4iU;*=G@;H5*! -Xe~Kvkf4I15oB%&wp85*0ea4rAKq^)gq6Lz434{iXT%m;=e -90rU+oP(W=yMue|X5OJbcMk@x4TG+JtyexRHClPR{wU>Jnq+)!c`$U_mDIXZf#rNrHgzBNM^A>QWY^e -{)VUKAgpFtlwQQW;tD-^gOVa<|3_H2XDd7kx_7Py|^M*J@+cn%WHxbCs6AyRB2iLLOlX<=(6XhqZw|V -PR7JR<61vSm^4QC#vQPG+jJf=%%ghB4rO?#OP&&wlckzx;(5#+^+Ob>pCRaBC(eM=Zy?w -y^T_rw-_@UI;g4htd}g%%K_%ULKGB%$GVXgYk{I9a4Ol#je^pdm8d452J$OeA#len=*$sc*?ire~Ym} -)rIyZH6n|<;1n);gKIfuFjLZ6HgNjslT+=PaL2*-pu98wV&(`az*GjdF;byc(@M67CDy=<9ZehZA)or -IF${8^Izx*sX4?S;(PhM-DNN%n@fx|=l@P;4o~2ENB-IW!Lc#I@{Mk{nEhUnnHl8b&#lYwl8u`z@X19y_ihHP7VRmxbqW+6z%aGFf2GA -Lc3Aet8gjCH2Ic-Eg5mRHx89Rfo?lFidyyWGHW!QOFZ6-nT`zEq|lb16wAqDhMW-*Sn1v*%@{`i+$Gt ->>;vBOQ2>ZGN8X6|zq$l<)xlf3=lpLVx#G{{2{$%Z4?=-U+=R{~q6MTABw{WRt>=k*Y%xzKV_urf0~&%6QTv>Y+6oPGGF=xu@9=X -!s}<{=ZkWZIAJ2Lrt`RvpC^c$|9{QF+nuaxi;TNCmU*@Q|tvQo%Q=(RMSyJxSYID9QX7mclh!hx^w#t -hJoC%wI(tZ05Oup>S6Fn&exOD*NMR0x~nZ;cmAG>kLEB`Q#8K3nB8=6vIEH@QZ-*jd_D0 -sT~{;p(;nhd5TqBA)62aMdD;N|4Ijdmoej&sVs^J7p?oJVN%QNd6|_)!Sbm_eNq#RNgmD3NQ(>9SRB2u-} -pbV8PGHB)91pRVUd0iZuLh>53JwuFwDWTOa2WE!SR?`3ZlZLm$;gKyUW$3Th#uND?XinfU@lD+5iesr -uNA*Do*TBwIi<+NVYDGqo#)vKh94?dZ2Bn{1hY1xj{$)-+>CQrSbp8iOWsdW%%AgTHwj9sA7w;)9h#K -C55QVqTGlolR$g8!A9ztdK{f(yUdZC))IR{MZ}-`!%J#|zJwUZau}iR5&!B3o#rcqXaU@L!U&&Fob)F -8w~T`PF&3S>|Zu9F&n#hLiz~Wje<+iMD**z8HoK3g#u66B%v8&<>6*z|faA(0!YEot1J8>t#VnA1WXu -sj#RnE@!+lr3`VU;BW&*97iAcwP3UHJ-L -#XJty5H7g+VTg-e%r>2zLu4Q-fRUW@j(DBHz0Lk1$%(;{+zV`^Tg6?6fD3RA14B|yLh&|Z-51&NM6kU ->b8^dud;|K5HqaIJo)fqDy{3}A6SJ`K6ilFg^GKJ$~9jnu!43RGs6fNg`3QVN1K`zUx<^-Ff%x?-d7A -S8O0y;1qHA!+f*tytcv!YzM*_uRL7(vv;+Nq%H>PfS9nt6x1hP((=cVi@ub-1op6H4WY83F)d1M|L=- -BH$n#D@-3jP8BERm7eVu|7oOSh*mW0W|1)rQOixt=1F20h5ebHlnaEJpEIpw@Z&evi%9EHh -kjph0ge3q<&+~$OAqj3>^aj$p0o|_ay%E(kn|vZZuSnV*7ezy#$*rpZXo`}|*)jWh!?_}S1v+~kshm( -G`wn$f!#+u{6{LX%ScayAFs06JVYDCK*RQ6{GWRtL_(I4fE;STZ--7UjcIcAg2MLw982+DKGIzwbOadN -)P^PIic~e67AT&)+}iRXX}#NB=9V4=_0WFc_Ut -af1)@^a17D4NgZNhG)ZGw=+`|b>yB_J&EVX%o7rNlQ0lGx+nb@90C3*I-x3)-SQ6vuI@H7usx!)aG4b -g)*tJX=7P>|`i^Ew|Ne#D!|%f3f15+N9b0(RXmCdWXDLS&9O%WY$cE+dtd-5s68F1R~`&WV8@TEh1iRa_9R@Mtn!aje}ey(7^< -^^8Qw2b>1Fx~s`WIX=x^ux2>$hM5WYyNa$E(1hyU&Xx)`G=7A4a}?TPuHgEC>g~pp3*StqtP#?oj*hKbRkT9xxcY_V84q_OdxG+eY3=0Cd -QAz+lmkg~;M&=*r?bAV?8-<5EB76fv5IJZ-XZaVloR3jyysKhjdh%4SwO6gR=DF -;QF@Tf-`2qE(&XNVXdJp%|TP_p~{ZVHgg<(dO>&BsZgD=s4*C7ke8eBS8$b@DQWCfOSyJqLk(=vbD6yE-P8ih_`i80CmkT&P7EP=!eo{c>qf413=3hHAM9)RUFjXq9n+VbZvEP6b6X0RRsk(RGX=@0S$YYUQA@P*zu*m^gOe -NW@X`7`iZU=CDfjT<11~Z~qr<@i -@?s?c+!_5`x_WzUV*`HJ&lV?q=tMC@>Q-{?aBVDhLiAB}ig>D>sZ#NA#WjV|QeYPm{_X)Kcg3A{j?oZ -CFT?zL{QGoucovMDsKOl1I*0E86H|En+e|-f-+=|HYuAZ}4ircoM81A{xoqF06n3qj*$Bux$vB4X{-{ -rhr{(;hx;R+yeLufGx(#|FV^rse#R3revM8CCVEjetd?Rrzb|J{#EH7L_-72aB=7N-eGg>a6NF#06T4 -@hr7m{p^9y}Qhf -pSDprx6V&Pe>`XGqj -z~%-^QMp1(5dLM(I{^6sPj8afZ{8;_o`3so^8Qc9?~?CczkKuJyH`iA-ygk9ULC#v)0>ySCrPXwCNlg -?E0rXiY)YH3KMKh)7*jN{Kg_&uN3(Fcoc~~F-W$5FC9VBmEQA;lKVPy9v1ZBN?x(VqzC9fQN~lFEGh}K4Lo4SudZA&99f8OB#^*chMOuZ%_C*I(9Wc@~y%iB4?YOf5v{J8c4>Qr6$LE&AE= -ocsL^6PSSQ{yg8_wT3lqusbzdBm!&o8wiYxD`JeTbhf+%4_#bOMqelererB>NtN+*F>)BTl=~N4x?FXkppk8igCbK*mgAVJHDBL=0R|>$Icb&|UBiUdORfoL(%%#~N}-_+M2IJtz=Bp||*s!Yd!?Sa*Y-nzBI7{Gc#H_3v<4lga6mL&i}1k<7rmmx`|xK)ZZ(uCM*$cv&pZO -zo13jKYaHxUD*$vZZ)xUbj(gWR;m28IE({qPo)>B+nAPEOvuRqbVpzcJVilOz>F$-AX*E(i@&K#J%ilb1&nxb=l0~bjnwwn!owPgY&uzS!xmkvS`@ -?+VG@n8wN?usl|SR#SfCriVb~DPPL5ocHn?H+VUFjPg=Dd2o)?N-n+~!75}221HS>jTh&=z0MRlN0Ii -U?pSJW100K3!pa?k66VNon8d=Xr}oYDsCdy0-KcsFI$^9wna3Vp*zpcI+Ke}iSB(G$pGXYN$k -xCC6r@7^%Dj9lj -q|Wy7x9wqCg%>i`A-Fh;i5UDpkTkj<=DEf%&`DkK9W2Co)|=fN>OH -)$gt=6qBzf4z~?g(?_@q`vKzeMm0*~*V=DTNufO77WY=Gw_9xP&e@50Y`r9%+6E2BonmlV)>LH89&it -{Xn{Bw)sDxwX^cX-xFFY*I38qy2>Z-gF2b#GOb*5Z`H~bbp)%Ds)int;c)bp@G7cG*iL0<_Ot5MPVt+CL2yiea^W;BP>P=>!8F=duz)J>g~G -tQdeit)Pt6-@?hwZ3|)9dHR*bG+b?+lM}RUJ?E*-L7CvhZj9rmYP2O0zkV0vC1*8k93IQ2oZ#2hIvkF -DAg2#<-&;&3HZ^7n5ZSgC$P%xe9w)8Wo=c`VC2M-6!EESkRjR8~N$7G)fY>8iriMC*camn*-Ge_t~ -&+H4d^ztUYM6*m?>XIN_BIIf$sgkP)h>@6aWAK2mtey7DxJ8ag34#007Sm001BW003}la4%nWWo~3|a -xZXlZ)b94b8|0WUukY>bYEXCaCxm(TXUjF6n^(toSHm{S>l*HZf&N9C@NJ5S-?!q6Gfmky#bo-ZjJu? -J>4LpiP@d1^&!H!eCIn?a|L5o?Kxe)NHEd?+>LJUU`82VGXYNo70D|V@W-}({Jt&{nh#S}eCu8HuHcd -If(k)d36jA^5ED|wGofG^UEz09W{^=KIep$p0`djH1Y60sgcDdXjs|i0iF-`lkG(i&J|3D*MkkNV?DSwO#J|n -Ebk|TkM`KHToXwL_Bb*T;qZhWW8VwyKbMGxHZZXk)=bd|v}^OKvYJ~_=ws9Xa|@Slq;i-B{sLS-RJ36 -k+8Dx$Eai;#L&Bknem2qz6l=>OkH?Y3uK}>*Z~${VQJjyX(NWc-iosV;&`=@8&2XFXi+gPadx*<%}isEvOFiLM1g26$ln`MYq -LZWNegmNsppL3GO5)?g2UaYQbO}uD)udukQw2;7N6tvdc8QtEmUNX-aYhhhj)FHrg%Z$CD{C3pS!i=mib>$z&h9LRMgzJQ_1%6$>zNx1MPa~jyhzMkd2%}T6 -kO`Nu6sS?0jlrq9)|^d~0x-NXeVr4qk( -9_G|1My0!&CqYemNDM8IzsN-bxdr&NVx%w(mlQ`Y?4=cJfopvr}6`QIAW>wfNdN(rw97OA-fxOPS#C4Cc5-RSb@>Y2Q>2kKJSD~4MM*L4_9@c*Eamg~W1sK34pGP#I -{Zz(C?4gKLRDEF$V8M4HDF9IE!^f6LFOXJq;&e_+tv=_;>^|%C@?2NWQHyv;jMuUG@>kFg3W|AF7TOo -C~w@f)sLCwA!?G#gww6gsV3nTgd{3oTIHg$t(XP3z?C6$C|UlE&g#!nrO7f5~n=SBPnP)h>@6aWAK2m -tey7Dodn?<7V9005H;000{R003}la4%nWWo~3|axZXlZ)b94b8|0ZVR9~Td9_vBZrer>eb-kEVi=YLN -_E_qB4~oHDM}(hkt#{q2m(W(#ig_@MY2oMwt#$q(<|Bn3HsW8K>sOU(%D^-y3}q{6cJz#cXrO1GsB(b -5%jt}Sfn9Kmd~IpqTXl1(`p@oo@N`)ma78Viw>NfK0SjGOZhU*;ez5u@HNZf^BeW}#d006xW7o(FIq< -ko>IPMdCt-ViWJJ6YM3P3Xt2gq5!xULA!K>M*>zb^C{{?8r%`bma0*e%F<^r{S;@0Br*O-P6`)txv@9 -T^6cDkZoL+BW$%CYzp#~XGZ&*k}S?MIjFm;^^b6^bM3Gs0K1c*J5L1gBS9Tx_sr(49Fct9)*5aklvHw_P|E=_+7t}!AmA{+!E- -Im(ct=Yh|M-pdFrk06Gws>%cNHH;7eT)urZd#`QQYIgozHNA3A1T0gz_>7MAH1=k+0k`wfMt?%%YdQd -A``J+f;TmElUN#xb`9OvkfDA;gzng$@#PHJFa`!>LPkP{E1}g=R5d2P=U`SBYx8E7FKQUN&IByS6S86 -E8JL3jM1Zk>DA>~wXP`V+s3x`$r2D30i+D`zyF{q4jge)J3|lt@)RFPN<6_{3j}sou#~hGGRD1bRM&U@*vJzRb;;onDTVVX` -WZ^6^-$r<@N3*M_imt*d0p{x`=~3hx359cQ>?#r1Pu=_`78xj=^*I^h_?-xDzZXI!;ccBQK+f-HG*an -x7>ix7Pt$6>uH!dB$lK1h2Q=E%Y@gFI{KFW*#vd0THX5_3}t9S2%3*Magp<&FA3rlD4Ejq!E-^ -7!SW+*90`2$23{WQdm;RkiM#|3v!XwbvHPrrh)B1di$KM2C{9BjINi*a@j;-@pXhOu6sbYC!mh -p=}mV}S`*&%Q^r@TgVZrg)XVFCm9nJ$s#2&a%=TSrLZqhh>})Dht)V;osr{>M4^`9D0c(roo#yE2tAH -=@8z7D#{#7q*_dMb0UC^ZHgvZAZo~4J5(t{`I{rzwIXX*Xh`;$h<5S^&Q`=-PXK`!L%NULNW@V)*0kn -fMb@#%~&;t%9|_vZoMyEj`tGg)xD#zqA3ey_4skkcIF+gP?HRQ#mOkIMX@%=gNCr_8s?yiw-nR4=gY7_TBsm2^Qj{yxHUU|3MS2%OQ5af_vWdu|KvKKeW7{Mx&_hw6ZQd_W(xGIpvu -M#n5FI=cXTF~qlRSg-$LFxog{rqNpmpW>bH5S -$lr|uB!1y@4pGo5WJLTudG$N2B)F5GDMN)E`&Wwl^FB7fI?Yk)OG75xE+#NUAo)cNGP?zf;;4CTGMDN -;a0gF;Hr@@st~k!W+@O|6~U$j(5g+MKK&Q%xgt1FD9 -+sytFjJMP*Na|%42iYt;)U>ufNddVhq0*?sC??*tANmoQxVxDF&VLXZnTW}z842a4|A{gaJb;ZOSGCC -s}B2ok)-HAGh;?;yDvku1=%b20a2@mNMDHb$~=D0vESj@!hPJGHlLOCBJ1tclZOPUDab5HY`uL}w>BN -s7+X__GuNnQhA(uk2bMAI3KM2HN>H$+5f!s&M_WWySmkOi4}8(9ZEeEP2DMDP?!v~keZ3Qvt(SIS9~SN2diKIU0nsv2` -4EREh8Y3-q4Co9}>_E>jiuxO#)syYaQO_f`V2d~B5Y=);)cuzNa5dc1Wku`3_=)u`uoQ|{M3h^`|z$0@B8qf55M%`*TLuuyQuHgD_QqV^edzL5{1dVs)xtYb9fr!w -c-xdhi2gMk!v*i&l#PlzgIt;#=F -nWIMt1ONa|3jhEg0001RX>c!Jc4cm4Z*nhia&KpHWpi^cXk~10WpZ;aaCyB}(Qe{66n)QET(u8CH$t6 -C`!ZT)*98O7hNKgRR-+vWh2Vf^LV|3kw12DCM$LaL;if`7RXv_PD$KW4TU5-c8H(C+E_+ggY+RLMc%epi8I}cOgYS7uMxMWcZ&H3s?xHrI=TmgI -*z-Dl@%JB!{e&81Rfdn@Vm<#bGP-3UJi?mz9Q$b3nw3OFn;wrA!LV7cOjM`6w2AfqaR^9}da9eB?-!9 -;zuyEmCe1u&SG5s{5(Uh9?q40ZE=4q~NM+%ZkSoSU8LyNJPP7a2JL5-hd9^f-ro(01^yr5Shl~FoJ={ -`aba{42bUoq9PK+9%V@N;KgHz=!is!2oZ#IN9v&OPX}HwvN&&Y=X)q}#6vhliV2PSV;ms2p6|t9toYE -21IkzzDIf@e-qRokHa0YkylyG@9=Y`?48sVSNbm*N9qoI>cQNUR_G1?r_IHTrhXJFXr^tpeFd!2$GHF -B>T0feq#w2DTszz8FoBFY-VHkxI@Iz+OhAE>cL1JRS*gs5|xrn2fUSzT+fk~(zdtqSWQ8$s(X5-y -6}OPYpD*@o^Yo;FQ$>7f9qWqZv-)U6VpfiYx)$aoWb4USK9R2O41$CdBd%UoJ$~aWYx1VK&PuT}eKhf -mm-!sd1-?LgQ$WYTP-mMOB4J%LSk1LUWnq%5j`A?w47A8ZngaLF?<&hxuQ>-~5`l95xOgPRy)Yh)VNB -DR_{`GZ9asXqWSEJk_0#4&b%IJwHn;sn8)k7@`n&?8Jg+n3X7mp3T~d=NTH1E0rvHFDMH%<<-@9blg( -aMCMWzI--4)a=`#Q-2=}7bA(_(ceWJ^G-(g6591=+%N^+t@%0P>>N}^2vmu$tc~_`J>*sdoCB;6ZQTo -dObJ;~|H#+VDFBZL4%LPN-JBW0gpJB};&%+&a&hkpF+MVMfY)w1s6=*j5j7sNrGt66X)$H?&kQ75yH~ -&_tI_+J|sjBAi3#9KT=dh~lYUwy40jKX*uC@*_1m-g?bY2C({Rk|CA~0DUi^>tsm0DP( -0^)_v)gx;F%FGLb9^c0#aSzOO0D%(+9U1H))`{kUH|H)=c3^6leF{uj8FN%Q2uLIzhh6I>d0HF?>OJi -bb)0Ks_qu -xch*i1fv?)^%J}0Ae>JlC*QLVARGFdnGWZi1JAC8KqgYD -~%^EXgS0|XQR000O8^OY7yiZk0@{sI61Jp}*&9{>OVaA|NaUv_0~WN&gWaB^>Fa%FRKFLQ8dZf<3AE^ -v8`Q_YUsHW0q+DF#^-UKd)o&8Y~Qpj?@@3CNNo(z^(fz|dNhO;i>IQrgV|eTJY-4tbFz1)Ah#@+28jw -s&)j4jgf2zMrAQ6FB?%4A#0(_2vG}qLlkLlL)f8Ii7~GWD3ooDy6Rd9?H0+bF58>jNGP?zhFj!mI@4$ -?;YPJvz^se9YoU}95V4g;UfsgRy{sE9=?3>6^%+d_Tj7KqHa}Feq0Z|!A1fv|OE}57?My -Di0M2aA!yQ5B`csXXt)Z^HE5i=CI!$UejiaE`q879a%iLS#6+AtFi>PMc#wFhaLLeFAPBUGK{*Y2 -niYy83IsL)Avp^@_1I_Rd=EU<(zW)%TASjLA!D>}@ZD-_a1!~u5(?VA(yft!FsaBf2viru-q0Z`3)mY -o7x3a?j%pR(j21|4GO4UIStgGBw;Ek$lX-@A-;gMwcC;)tR(%O6@;V}#bKGAG*D=qF%2WNv21}|Q?^> -4TQG8p=nEnbJ!x-%9p&tnj#lY!3{vV^WF@>ZT&S(SSQ_bBXhsgbG+`3io5O4hz-)XNQzoj!Tv{NArWS -1*UhsTN8e2HVHI($V_!!Pj^HImch$eeA=BKD-~iJkrdyu77~%-yZp<5C8Px?LD4Y)j#0p_5U9E`cof1 -_u=vjs?i30{{R;2LJ#d0001RX>c!Jc4cm4Z*nhkWpQ<7b98erUtei -%X>?y-E^v8uRNHRjHV}R1R}7Q~ORY>_iXw&31lR^{H`p{A#O||}mc}-_lBkkY9Jknh`wl5eb{4H6nB) -v+=A60k3Z~ypp-`o4_8D|`H~q;;7`p<1Ja@}1&lB4F5BmQc@|jymJ%gBb@f6~j|EAz>lQvJhkMNr@7D -W-$_*aL<8hF3iJV7P5TIdt|_rHFOJr9?q0nxlMN#Urawb+1c;OS%!s!3s|G#t8`u5OX&7!JP(BMbO#w -PBqRd(0RkD7Uw_AnR6X3j>@%tl?&q@jcpjaE*W5uS-duX&*wVq%@yMt8^<=NyR3)5rDZ47nAjN{NyXma?$%XFM%#CNHAua4|`Nj>~X -dUZA_=(<&1P5g)f~r6)6U3UW~jD{exR(L<|cV`I%NzFIH*hxvLE#C{V|*6S!6&U%RS;QWafI`4m>FhPmWh_&Lz-OE -?|Pi2f~SEGtxd(sF;W8N@|GMO^#{+Y@}irlIigjMDziSyssc8-p3VYehjYmwcXjAP@IAl3(+=lWsd%m0mV~oiFFt)KhsbI>N5|n{R+Qi-4@xp3yng -$gNl24ac74H=bx_-_cyvtp%$98?mhrI$hD+{V*}Ge!L%wkb>L+wT_W=g;{;dd?9yQ)xZhBXKHZ6gQ@R -vEw{tqwI|gQUQ>CS@x*2GCl)rRo>O@+jT45i1rnfpZ@bc3={{B~jA5*gIC$NwNB6}C9g($Suxpe1*zbuBkUH)vdG$N1r#!n)rK*Us<9c- -0?*z9)a_DE8z7=GCB1VIyl)4$mLY4^AtISwCGHrG6L9=^0Cs71pGFw0tI0xKq>tg>&HrEOAY+MoYAIq -N^-aYQJ~S)A81Qn^Slu?%~irhSq`Bt!zKy)3Q$V}1QY- -O00;o{l@>=)>}^bU5dZ+HK>z?C0001RX>c!Jc4cm4Z*nhkWpQ<7b98erVPs)&bY*gLE^v9}TWxdO#u5 -I`UvZT_5cE)plYHrLOwY)&(rBtkt|X^3bv)3KIEsis0L6=FCX@d5?(V(d4mi+Mnx@m1GjT*_9Hx>7OUXfNz -y}J=GUsehAvf#@{{vfKbDbqArd>s~fo^E&s&q_Vy9X$F@KAN(k%s=fS92~)rAugqwMYH(!?(W^^W^U> -v)%17CM&u1>rP6=i@@BbrD9l-xyLOrIMUgM_O#wPpZ(vNp%Sueyf`fAF5_VM)A{(Qq;O+T0r|&QCqO; -TJ&HJmjm*>&D)4Ok{>_OC#$fP+)MXUvnVe6(N=J^z*C`1-V)p9L1B1%?KCPXY^$%r@g+Gul%!og0L`~ -ja&lvp5Rv#cA?sg~^wB)r!rPvUK|tcO%1J}pH-Hev=#vr&3IFU!0IJ2bm?;`ZyaSk(D4PoFvL1~&KC>FW0OvXxkWdCtVrU+iJaJbz4DI}o1$K$dl+9!GT^{m3(xj>CO4w&BggGJbXDCjg~2|D)t8a;Zy=>kS~6O6-{O&G@#-gz%0IJcLr+}DM2Pufy=QdO0uMmqM# -D#N{z-()fB+gnqbO^A~XXgEfes_xXYmA2~2*K*B6^21q8@y5z8$#!0orC>3yIa~9}aN9rtWl4>ssDetAFfe3qcIY3xNeP-1i#P{Kv% -F?9;7eJ3a)s<-#ddkaFyOKWu(&4WC7ElPr!0SxR)G)VM6QHP#qip$6Hw(=sF}E4#?;Cs&@RRmyT2#+y -Vo{{DkLl6=ug|A^!J3PQ?kHd2$me*Ibts`YQZsQ^Ju -@~T`0u&gEEHi1r0LmPA~qnv+j53L~SY_d8Suj{&)eeuP3%J@X168%4lzz)kQieQotV~Y`xj$vi1*w9T<6&)2-KV$RblwSAL(E9Zc`q7Tksw*weA#@?I;>|7Yg}CD43M -EYcsYgr6PE3kO|V(ECo1wM=U$$Qo`v!vK!mN4^ni>o -m3c>Z6p7Hn%pZBLYcgl}kZ){;4y^RJ!iG{2)NDp~?aOPV<>(CN19UCTCLsm&OK$$v>n6jLC}=FctOk`x4e9)EHwa%U%&(jPhmW6mQIkYRzcWmL$*I4wB@ -l5V;H|Nm4loPVl$Nsu%CYSWB`;vD@Y)WQpZNgZVmjpkkCLF -&j=o;Z8HN)s|scE>4R8V%RNmkcu{sd>5N8j6`_h(=a0NdFG9b7se%#P_2vfkGuDfJb}d!kN*KbrFBThqCaKDL0aI0dgyz -DrP0s3gA621sl0)v?YYBDN&)Qb*}dKZNgnE2%8vo47tP!#Bwwk{BUrCRuO0^UZPJNdU9KPK+eb`voX& -30vu$a5{>OUGx$~`0-1^l(EbNWYE_X -bEVIp+eWqjb$y{M3ThJq}AM$9^T0rI~#&7E_wKaTS6&7nC4rE7LyRt#j>t&akA#E#uM5YCF#g9L9!jN -Oz=5O+TEAO>@)?gWP>MFA(kKzr~$_?7{gJop)&$RQL9a4Uj!q|tY`Grtde}x<$_~1)!y;`laXigll{$ -e-J}kV&WzEo5>Oon!%b?;TWD|2PMz&pG+2U!N0W|f!S+I$6D$Z}aeQ`ugLU#>-e26Dza4vsd4%+oZYW -vzRK^4Rudc7o_w#l)I*|Y}^Jy%puuH_Vr3jG5KBk&@cEt#^N>ZT~@!{o1KOuxOhwe+4uD{;FDOx1N26 -G(g13v|ZpdI|DDqQ$`gS1#LXzbBv92W5CN3ZWSd=T=PKyHDxBvjb>+=NAgrBem|TR^jinLsZ=M{|2u3 -V0)8)#GHZIuAe>I`5Fp`C6tOMg{#Ds=`HOb0RC1>PIz0G&iSDcIV|74`|W_hlCm=L6b(KMFHQ_pRHvFG_yA`4Dqy{yVN^2!Bp_H3B)Tq -$+`wUx@q47-;qYSI=DapT)@3J*#7m_uS?n2gy|ve}IkYi74*!+gjCcx_U6F!24JS)xhoKzvm_;qu^5Z -y83XTtQBW0Z%9F)SUjDRP_#m5H>^cUAe>Fi5em?5)YtIJxWGD(CHC#^B3sC>J`c|%)AX@Qv-c*B(M@c -$o%M9$HehGS&#P1HDc($4HBrrp0daBq(9c`Y4*z#Y7ltJJyf%)>=dnK)NQc`|LybeV|I;(BZW36QG$^ -c2!36GQB5&SY^%(bOhSbuMD3ywUfH{inql#~u8D-7Ib#Qtc$-w{4HeoE&vx<{8jMbLfLpF-O<9VpPIv -0e^v4EpgSb|vA!cq#$zHX3i_#CAPQo&U8eA4bg64lYW6rGB!+AJE-^&3z6KmFrtB -t?dMTPodym_#6aE+8M?F4|AsK=a~mCoZE4Z0DG{@BqcCoj>BVPxEI3!97<)g#Y8vpARxI2-PgF*dhpYqj}@azxk3ane?7S_S?Oj8P}I2pX1AXu -Ou)f4Rl5n#W2u=X3_T;Sb3YSwW>F+uR({UhMEt$qHr=6_+(82NVtD{T&qrpiY&yS$KvmZO-Zj9D&S7% -a*L#0DFCPb$)i&#uthb|HZawa9P#idbcF%wQE!vzAtC(*xt3ui0Ry2{n@iczsOEOb^myK#R-Pl)0ci09~&xb3!TbQ9@T>w%&7^Z#trrVtP9kK?wPN&Q=*UxhGRyCOlus3*5g9Z1ddek?S@miC^OTA&Q(5AlN@e -{T|;&5GW(qnx+@%4Q)0YoaCgYkM-h;~IZEzU}0-G%F82)_nZPrh@mPz@YG*u`!p!}>`fujIzQvxx=%c -BH`*l7k9peKd-RofSSXP!xr{^J#6hiy%(nqARjam&3}%+7hI5+HN12$-^>dlyhj-A{1qBG~O_xJ6=MuubSvd3luOc^Hk -tG|Nfoq83t)-+YL3rrl7n0Nn`KKq1JQ?R(r`UzX%IiueHnD7ybxLc{2o8@fO)RXSbp`#Ti`QC$Mn8LU -zyvE<0sR%0y=KvCx*b4U@oabua^dl2T=q!FIwl-UfQA*U>|X$;?_P=+3P-pQeW=vUXk@v>+E63nLDSK -c)kGXloyHd<3FDR<5=^G&Mzdas@s^@K^l9G4Dq9&oD8O=9`$I`d>h%ck;eU?v$RQntQY2NreV?4YMsF -$7U}y8TBz?+JtjrOmxzGoY=)9KkM#J#q(z#nbu+YM%l_i96K@4uL$Z&}2SAlY3ZB96bQrR_R -PYS)`EEaKfEVPelpo5#TjjF*u*Hf$)7Q_Dlf3W4%ugNt{LGHaLx6$3#;N*C_Cl@{@-$5`U)+i`o$3;^ -^UEFG4{>hr+8>FkfD95$sVmqzAZ^0Jo{{ZDLl1)Up@K!9!%Tc7!N -8z6L{BRlZ&*+z56@pJ(@Oz2h8JhFX@Wi?hU0}o!dsH4wP2`{s~Y^0|XQR000O8^OY7y%AV%vI|Tp$Cl -vqy8vp=2 -YXnD>MYUr&5};LJH_>e?YECSogB+answ-awWuE)**<Q6>{C3`Q_2MY6=BJ{Ux}yf__SO~x=+n&>n_idM+XgtdpkT&o;Hc0p-N7RE?bm>>vJoP+njn-h -;p`%vku4+jUUwa^RGivpk*p`4P1)m1_+iy|eEBBdvYl1vyA#XcT*?H`6Qk+W%33N3P|(IfxYdCF-haJ ->%^gPQ${i4Awn$*Bl#-&}sQp?f!!R8?9ET4X&qlZkuO8z8XR#v)0gV1^u&1z9)(f}{f!GHJeL-Dhl3r -NW9Qi25~6p9$wO!^2Fj(7VgroXv)Krc!cj{yg8WMinhS{=#|juOXKxQq)hUYYykr=?$FM$F?+UNhSI$ -c%sxw;zMvw%BlP92ch?q^3R|-ryue2~;#`_Omi>16NEIPTT=tIDh --Rts3v9RaE`QzC6SBr3aX`7^3G4myb(8llhV=|mWr49?_&0veoF#?m!)3Fgx+JS%flm2E+ut2Jbb_z7 -?=q}^7jL4AjMn?kM#hsCcM&bdJ>JcJsK5e01S41=r>76JNOv -9zkvzPvi8OHB=b+|qZyD9NL3P;Cm?no8?Ky$Y#XQ>K_b`If(Yuq|tFy~7H8(1%L=+T=aSe>v?qrJXTBII^B7aEu9a(J|HJXw --Jkl*KEVsdiS>`$AM_9}@kg9dTrM^eNp6T;uH5E^;NB43bPTvI~sw6?DTA^IixSbC_}=^y%*LuXO -J^E8KK?WG=Pm(r7D94e!1Yc#mHA};OPMS^7#AF=yI3H13yMuuI>DcW -F5FEk$TFuo5{3sJ?+O_;cW@I=(EO(bWy2&Z4@U-yJkciHO-IO1;x+>;{WcMPaiJ7V6w(M+>qh31proL1r1?t}&{sUc`Ab~}3wmF@<2wLK -C2-QgSJw@oi#{b#p&YoY7xn(h;uX`}D;&Gh2>YVwIS{_+y<)7jZy^?kN^2YfEo=i|}Y*F3vCyD9p3qB -)aKWw}(wcQ0PgeDC4~{@FIh+s-G>{TJ|`%m1)^_RE1KZ_2@m&Tn3HetV=ys)sf5fx@``-0R|V5V3kp! -w13%n=C&@y3zFX{Hu8Xxp*u~Bj1PgOEE)>&rQMYznfq99NbT1ot=l1?Qc*^0|XQR000O8^OY7yDP{LP -eh2^niW&d_8~^|SaA|NaUv_0~WN&gWa%FLKWpi|MFJX0bXfAMh%~)-38#faEu3teYFm^YQHnEW!fpJF -R+U~_@;{>(~LZ?*J -Ys$E42So!hadLuD@4YuQE9sjTWj{vl-Xo_$_mLv*WiS2l<8DjpxO>ATDl56tV#2ghHAQhRh4v(3Y -ZRZG#4RVLNPgp>AT@B`P}2vaHWCucw4A$A6bnAI>Q&mkRhf;GI>QU& -bQz#t)!;;;5p7zPLWB-$AbI}Jz48Y22AE~CP_jqvc-fc$C_l}5}02X=F0OD>7`PI3Ij6T3StYgr -P2_vAOx`CvrNQ6REz!o?(P#=5$Qv(L?iu~F?_xfmayfOR;HPP@^1;k=RVVzwE{V<(L?6a)OzfV1N?y$0{`>%O6d=P*%I%Cx*-6UVxCT)j#Z>Kr#{zczZcpwjZj0`~GZ)ih9N -We=5S|htJi~3))2IPuM-#P+@w)(vyZh989<$9#&Y>$?6;+m!D9~Dnb!i@(+m -O>~eQ8X8L(Gp~kJ|>Q_u)SE*wvnnyn=xF9=p3PWn+%BLri$GvTy8qwTrNBZwWg)s?XD5kD+*b%USQ~p -2n|dhf!h3QZTL+>+oI6cynKu!cL~@PNsf2IXwOvwGI9}VC}oK8$_@>u{uti7`@!ZdblT -Rb!qeOrwhxb1pEb$X4JxzsCdM -z)IV4Elf*qE;upi#S>r7#KH@ZjZZJ=?6U65 -8dey*+PWqs_IkzcHZxDUOYO=k2B34;PR#t%M0XBz^nRh=~rwQ!`Kg6))n?^~@0Ljk9P-pmnLvl0edHg -Q&La7G~0cV+qqJ8I2bdm^Ay)A5H7h9H`t$3rl8sNAKPCX0+O^(ky#{qy?c&E@&o?PWB)!A+KfC&CbT$ -GVz@0kE>-Pi#=19=2poWCLL`a$6C?S}^6#7>F?FYfi_r4l81)`!r%C?9(?yB}FYJR1AONyB1dZynwf<3BL+`7>P(J$us -L6E95UxLt$%p!O1{x+%p!I!!zN5=Ay>91~;4k$f#k=^cqzQbR63#vGa{eT>YPHj`2d{T_phML!j>4N~Gk7F9jW5gv2G^l2vVg?mw(A -i!f6jE8z`y7=!`Z_(PMHwNcMdXUl?*rh)SUne6J>0|XQR000O8^OY7y(@OVaA|NaUv_0~WN&gWa%FLKWpi|MFJob2WpZ>baAj@ -my;+l^O138Y&aVjTemQOGDlrc-I}gl45=bECmut*o(u_d-`s+>%J2EqJXYQ&xr>pJWZIQ7f9B>>D^nL -4FYx(m3`C=c++sppcU6brZJf+!-a=NxJpzYShRhHae?x&agA$z%J*Y@^u%BNrS(^xi5^s?*Xrc99k`L -ZdK?0C!m_siq&FZkclzrSetOZ1YQ&d-lacAJ+zy1g7v_m{N1-LGZb-Lv$iFYgC%LU{wd02_(57umu5*W{aF$Fyw20I7NTkV?@F8aB6|E3pQQg*aAZrQ3 -U%X;{}Q@5@r!Ii-caJ5gaNQHpVPacEOR0j9TRJg25Jf4u7EO16J%90UPRflH -ANG7Tb^1GUDHIb5=B1IMZQoQokvx1e^K{ZOh~3I2)x7VOJ@*AekBx!EAWBMH?FN)MXwZrgt(@;mV0jL -%1&Y8+%r+RXW(1s7$=9-$TzPS-RxzZI@Vs0GH=x+jrB}@1JxAcfy7G}jXbVPo_(?RsA^Nml`hIEk2x| -w=#hn4iY6OW(7I1|xxx~{EG&F@1g&z@lojZJF#F{pF}8NmZzXxuCH}d!`Q8I<`g>cYV^dotV7hthMKh -4V$W^&txrj5$fi48o9mRvbd%NQ!ISP-YRi@GD`=npJUbK-1>h*DnrVRa+gCs|HOhv(t@c~QK<`EzDn< -h71@FWLq^4tR}B*{r73K)DB1O@;`Uf@Kz$NHN$*nQb$jpyt&rHglBCpKV3o~yFI!WSc#{{ -tdbz-33A{>N5w$;_{d;5Kcv1$DdD+Paf}{oZe5c0K!ITa*!CZQ>9|GOeN!b=x6l2ItZt4dVV;T-2b{6 -jXcpPA6Ky)@&NkYnnVC?U2_L0@RB4D|HSNiFY_{a1 -w?oSpo-gzR6fcZX!#CZ|D_$jBkT8_e#Xq2t<>MB!&=+rC*{c -PCy6)KnA`jY{3CI!xtpBAXx}=F$u8@^pWC=h=5-?1tFG=7i{tqGzHgy>rnuTplcigVHPa_@RJM#NHAJ -FU$FTiA{QvOU?Ygk1Q>9-0FOf^kOv|bLN|bSl3rjLd^7;*BsiKbGVWJs3cv=S>G4_cy(aJl_-FHmP}G --0U8-Dy4$G#i9u6rO9l-D=IfhMA3X*BdEuxF&=MVXcw*o(bcLDglft?<$(Og=mz)#U|PgOCFzQK0@ -pqd{LfZsj*H{o{$?p5i-D}Fl^psFt??(@7M|H#CBo;TzlnYhpMhWsNF_j%rs-<`N3WP8aBR_jx!9Uh6 -nLsT_+2`K`U2TZc!PXJzxZSAOxHpjv%b>q@|chaM!yF6X4B7QQP`MN?aY#AM5r$|?Oby;v2^2};2$Q? -Ddg-)?*k#;wHaK9UE$dpkr$XlJ5JvyTneMy;LmFqeV9{Z$VFfox=mgpm!S!Tuwe=^TU-b^?!3fWH;5R){?Emd>+q;!?Sng?Vo(Iu8!!KRmMxpScKRUYMWt$ -Q_v`8B~Nhd6K=C`|5TLFDkcEyEt+(qe#@J99Zf>y&be&(@429b9a%tx%YsomS?QIlo!@ll&>+Sj{=+Z8JPENtnFXCMi0D -g(q45QiL%SM~6An%Ud_pWZ4pIt}!b6}-0QU*E$g@QZ7=~C78KeO&`kB2RL*4^+J@^9p0T|yD3GHQ(NJx9049 -N)rFgiyh#n`;~9b6h>r#qFM)DulOn+NVJ-3Phk8OM{6B|nQ$ckF6azU;MhY52UoR}R!6V<8WS3_1`G@ -3C-U&l6-{%D~5Aun6ra#wrlpQ9^RTFy+7VohU{h^!oeD`)o#-~PyA6Cw$f?en3wbkJVWgQn~zIhVWEIQGL;}*9XBY0}H@(6Sb>6ZHZQe*}v -uM7$m)1{P%d@u8Sq}#e6_Y(XQTd2*O%Q?_0Jr7yv(<37vpEmH!g~_*jvG@9>qG=&SrS;|FW9FQ_=c`N -=GQTB>;JG49qLsAlnFb1o9cEdKL1*=PHo@}(>DXn ->gi{^LGNx+~y>4+_X$`0joB+SVAZD>WRWacq~w>h0q6m`TDV1&E`Uf$i3LW&A8>5Jkc$kchgb4Q7l2^EO`uzdhSWm*j5bgfG6VyZ -2nxkW8bkI16vCp=!9!rMh0fp)3=P#2&@6zmfDp>CMGUAZ1zkg3gHGNjKp2oYxCNd-R~Ezmk~TC6(8j5 -Krw!Ri8Fc*N1MC3m5Vl|WNK74Q^*7*JTE2osUU2Jo`EGTWC#e_9~1x@d=~&R_l$ -gtdc$H8VDVG0WZaNsOm`s`%ipvips}~VV>H**2U&t2K8SWFTR`0*^_n*Di(zB)*LV0_$?kx>9e}V|rT -z+H?q^H|zbhC(xJS}9X!ZrTAzz_e@8W}}CR)(ZMO&h|sN$BQmVtO+W_V#eWYQ|NWM}0%og+dfk^q{w# -&#^rvm=M=afmP@7vkL}B*nQ|the(!Du~&5;00?p-#vQCz@)CZT}f-kBgv|ET}t;@bLL0aT#Q6L8D%Wg -*MqgJy2qM}y8v~WA#HNU*i;VB(&aXrD?6eXm|8?$(QPXNs_ctGR`lh>_UW>>&bpfPVI)*1RjvI|NWXs -v;46UqGw%R=1&}Y_0Tb=TS2~sC-jbZUA9UgLYWedfz+zR9M##-Yk8CCFsoMdn+s@!s{09DwmnJI%wgZ -n9^vhS!t^}dzl@ssmx8Z5Ff9!8(-?zA;LNr0x=~QVRIkR7y)5%*w2xLXB+Gtl_(d*j9&^*wd;MU_ds8 -@4G=leGuVk*eH2vI+5kB}2kAU=5T7{g6*E4|ZIU{n+_|AWiRba-U)c`4O)on2Xuqp`7AQwrlLXnd^5m -9MXC83>DLA0KCU-EK2y4!Wa}MY2qtF!q7#YKym=GAO})_h7to12+$fp5CCwerhq|`Lhn7zd`U=vbpX@@cHkzb765-hLV((`c= -AngP=w&|L>4jhWq~`;uUv)ygpe`@#z80=#w{`+K@vDNE?Oknf+OG$bPR__0l5S20ZxeFX(SGhf<_931 -P1gJxG<(5$tfG{)+mJ7NAA_6=C6sF3D4z;gfn -GUlqk4>fwF3UyT;|E5rS2w8(D__fNtJ$RF_pY2_EW(p$vp}9CwyJ9Nht}jt?8%^l8ejYdzX(>MW4v1&JDPdp}W&jscoR&3h$tt`#-`7$T!bbyu}kXcU>+YyNwv|_F&pX6 -f<-FWF53|TnodoE;;so^J!u(oscH((+clz7iFm@Tv_+ZuD9<&+b;vbCDpxOE(bJT&MA&Rcsh1gW`?|6 -^`RxTE8ln~2+wm~Wv)XeTAP+L*4-f1yPSXWJu{4t>hyF~ood%Pb)NHioIa0wjc?m7w*iQUJXZgAVe8A -^UQ~SkAIblE!8ne6`L4Ua!HD)t^m_7`r7ztrdpRAO=luP|m)D4^k=^^#wf@&4^}l><|0M2D_4UnoSyEieTs9K0qVnKLLN1fEN?V0>hy!0Ym^a62-wzf#d*u# -9~m>fD_Oh`ms2`F~lUCA~=*JSx^~NFQ5_4Ch}rn;Dlu%&9U(>)d&xR&g~6=KM~H0e0LFOLS8n<8J(>R -J@_8{6$t)CB2T^;T`+^9O9|P->?%!q0cZV~&e%PIN)?14UTS?q1C#SGlY`Nq1il*6zINp)Sd5h|-mF%|j_Bh-7e -xJ0rAnXytIUaao2CFaXhWfmXbXS9XIZH90u(Y4+lPDN<^UpokV$U+cQTRwZ`@NIz- -{-kyy60jfUY&$*Xu~4Z?Lxdv4NZri9OUywpejgssm3a$4bO6fU{n4u`yE{Y=0=r4&tZicgKl$KP%dWT -CgC-zO*i^~*ofkAArHo3taA0FsHo8Nd!4gEBPDp(ur;B7rwdVn9eVRrAefGOVVH;kC$gv9fx+JqmR5lwS(~O^|vX9$)h(FxjRQNnI2oRYF%JI$P(D$54`b6V1-ra -xPzPo7R=hJ;$m$i)_<&9L97U?%H}r8)ZNPYpUhL=y67dC%S*qx5QrZ%ae_+bscppXHF97UUvX6GnfQy -WQLe;n>~A0I8r5C!xp!GZH#QaJR_KQt!}59cB`6<`+zOgCSKQsa>n*#tR3}sUbD~6=gQpK?^Y|axyMP -W(zc~8tqS~v+>Xxn&=p~Mcki*`lFHdD>7-b1w~yyaFm?&Hw`J0yRi@93jkghkCzX=jfDdd@N4FK?;Iu -g&Z$!FjdW(`v$J4zmqK9iOx1wHzYfe!wb>)TP)h|YSz7elNEHu)-$P|h*ScEH;6EnL$oijJDDQWi})i -x{eO1=8fQt36QEyGt`sQBIF$+9Nj5>Qq)FTuEjE}*X`7p5l&R*~UBWSO}CJT>NqK;_ZipXT$C+yCgTb -fC9V1RoL}JMNCT%;Bhp&za4od{nlwmeyFl8*WFjzdp=1a~SUGUryG36F1^|J0i~tJJ_kAim^WHX{ibT -O|aMN<7yudCR3BAS@0;!fMICCbRS1me4yl*n43gVorWr8gkX)lF&y`4S;A4b($q6uDd${$`&6qrYcS6 -z6`(PGd5rl(J#w4FN()!lqRGXUdA2)*k7f66_URdDr;S?InLv-{VHkprSwC0VO~LSW|2QlUEqNJ~U}# -d|SO(5@<~>{AiBd#bUqouvScESUI2Le0W?e{k^tcDf5%p3RXsU9qobAlbE1l%r{gH`2>F-Ueii=p6k) -`hBXH9r0duc@!Pfa`!UfB5MT&`B@eRwAM-wmUDOFQ4t4NQOik&*uPV&OmMt>5q9=gc*o@l*PuS)64ln -qo1W`ij0d5^4}2F_;We1W*Hc3KOdc6ox8DKujpig9U5=6Kv71eOlBaL!n;@@COE{g__jJBy>;`Dj1+c -(sYtF?8HV4^myUmR@qPJ3nqHu@EUUReZlKdnAi*WD&}D70FW#&V#2{RvN(sqd%&0x2FDBp6r{BT=AzL -#ba9c8vLLI1OTbYs`z3vKP}W@5KhT#%1}#;fU(%N?$p9V5x2W)-`|s(kZ>H=A=4&EaIF&ZQ%$Rp-6F; -#N0_f?}LH(P9;MkOBrAq-|B^jG^!bh5wJhdSojg_G5d%j=3GtZEIFwA!ZQ*8Fa9$X9~rXPXr^*4|3cJ -M8*|J^Y#UwiFiUXagOOn{npJaiJ8ClUNC@auTD;_2C@Wlyc+io^Og)7*V5a>o3ylxX?7+aM1z&4=SmM -H#L4jhMUU3PWstGFSzx`XFJbvdd<~eU^~r%{d*I{Uu)SqcFRyGu=C=ERvlz*T-o*-{_~eGBbaFt}nuK -hAxlUyewuIf9&JtS}C10w-(~kO&o-uT3Uj}1F38<(vQn~dk7c2Yt5S~Fm9b~`MQ#q1or~lqxgDN -&_vR7A;Uu>5DL>kceB7+mwWV#w6cIT;9Cyddsy|&5YN;Nr?)KClCvq*J8%o^RdDk0<2d?@T1(4@6u(q -1Nniq9{wi@yrA>(Cs#q#VTM(5&@j-k(S&x^;~e!&Y*=SuHr`y%xEfj`mWv)G9($-V`?x55!fA*8im4W -p&WPIUAhT=_{vJbgWvl$FAC+L^XQTs%pZH{l}Osqnr!-3hJ_4<*?f#neGAh-?odbl~}m6&W9wxw{FgwjF3e-VvuNm<`y9qpw+$u -tlb?3i*C(Ol`Q#mz21bg<5`OS&^ys=C@M}0JXiXTj~4$?~kY{lk9r`dva>$(6>k|Kj_6_#D5#%>8wy8x52o3z-l|wJ3$zVL&$lHUcURriM{42@b|ta+oZZeZ4XzqoCd -btVbk}P=Vr0Na%OuSm>oo6WBeQK;Ixe2}23b-oRWLY|{AGlQf|+g&4?m}0I|Sp~u#))lJ=aRb!b7Y!lQ -#;{lHA-j(4-`J-1r!?(aUMh$SbqjI;%GpO%x^ -d5derufTVeho=aI_+>umsYB5%dQ#jNq71*3I+1_GN -Kz;^K!`7a9rK8))4=7J<$fw3XovfeD74o~2^|QG`es{8dHdn~+PS(%n3i+6<-&$BB1zxbC%eeHqOYi_ -A3y{qvb(VbCaodZr-}FNx>QqSuNukVs}R?r_h@zU}2 -=v?Mx~AqjlM#<9r~5S}metOG?-DsThiA#;rt1(ySI+satu1$p(m>1DSqTM%UjP>2X~wLp1FTbe{ZdVa -li&C0E?KONX2-`}HjKR-W*d$)?yA?4}g#zQprb -}HDp;5@2Kq8w~%za^~$@2Oy@E3!<}<%;YhH850M4c{^v%KOJ`InuU*{9 -RJhKQo3V}dka+o?m5R;0dpd3mF7{mwA4VVZJ1`uB9v}7`eA*i3Q1t2iE(1(Evj+?xG>6G*U_y7p97=z -Bih=y)NKm&l@h-vW<5P&SRU|IgZTUW86$ -K1g78)s}WBjgaTY0qJ5t>h2Tjcl|!zF;*Tfb(CbxJygK; -%sB1mV*;eAA$2p3iA(Ct^}k>X={^S&|3IA8KHPg6xfQt0Z0&2iOC}b1a2;lqGIj+mYnzSAi(5O!Pu_B -N$V?IIX035Wm!UM;9ijztc#>AD_0E>7CU%`_$2o>OYrS5g^hTfS_uB=J#(k;kRP5+_MVhzUa66^XsFi -yW@#ed27t&2qQ0x21veY3w%{I(Em7lD~x#bewrT;B#LHswd#jo!3&KB05e{T`ZWaJfnztSoAJP@lmp>dG09V`g)ij{ -7Z*j`^>ZLQ&M+*4Vl2whG-xBSFC$ejt$IpPh#2U -$0-7Vq7O$ZvEQN{9K;yg;3
'); - $container.addClass(this.getNamespace('body')); - - // Message - $container.append(this.createMessageContent()); - - return $container; - }, - createMessageContent: function() { - var $message = $('
'); - $message.addClass(this.getNamespace('message')); - - return $message; - }, - createFooterContent: function() { - var $container = $('
'); - $container.addClass(this.getNamespace('footer')); - - return $container; - }, - createFooterButtons: function() { - var that = this; - var $container = $('
'); - $container.addClass(this.getNamespace('footer-buttons')); - this.indexedButtons = {}; - $.each(this.options.buttons, function(index, button) { - if (!button.id) { - button.id = BootstrapDialog.newGuid(); - } - var $button = that.createButton(button); - that.indexedButtons[button.id] = $button; - $container.append($button); - }); - - return $container; - }, - createButton: function(button) { - var $button = $(''); - $button.prop('id', button.id); - - // Icon - if (typeof button.icon !== 'undefined' && $.trim(button.icon) !== '') { - $button.append(this.createButtonIcon(button.icon)); - } - - // Label - if (typeof button.label !== 'undefined') { - $button.append(button.label); - } - - // Css class - if (typeof button.cssClass !== 'undefined' && $.trim(button.cssClass) !== '') { - $button.addClass(button.cssClass); - } else { - $button.addClass('btn-default'); - } - - // Hotkey - if (typeof button.hotkey !== 'undefined') { - this.registeredButtonHotkeys[button.hotkey] = $button; - } - - // Button on click - $button.on('click', {dialog: this, $button: $button, button: button}, function(event) { - var dialog = event.data.dialog; - var $button = event.data.$button; - var button = event.data.button; - if (typeof button.action === 'function') { - button.action.call($button, dialog); - } - - if (button.autospin) { - $button.toggleSpin(true); - } - }); - - // Dynamically add extra functions to $button - this.enhanceButton($button); - - return $button; - }, - /** - * Dynamically add extra functions to $button - * - * Using '$this' to reference 'this' is just for better readability. - * - * @param {type} $button - * @returns {_L13.BootstrapDialog.prototype} - */ - enhanceButton: function($button) { - $button.dialog = this; - - // Enable / Disable - $button.toggleEnable = function(enable) { - var $this = this; - if (typeof enable !== 'undefined') { - $this.prop("disabled", !enable).toggleClass('disabled', !enable); - } else { - $this.prop("disabled", !$this.prop("disabled")); - } - - return $this; - }; - $button.enable = function() { - var $this = this; - $this.toggleEnable(true); - - return $this; - }; - $button.disable = function() { - var $this = this; - $this.toggleEnable(false); - - return $this; - }; - - // Icon spinning, helpful for indicating ajax loading status. - $button.toggleSpin = function(spin) { - var $this = this; - var dialog = $this.dialog; - var $icon = $this.find('.' + dialog.getNamespace('button-icon')); - if (typeof spin === 'undefined') { - spin = !($button.find('.icon-spin').length > 0); - } - if (spin) { - $icon.hide(); - $button.prepend(dialog.createButtonIcon(dialog.getSpinicon()).addClass('icon-spin')); - } else { - $icon.show(); - $button.find('.icon-spin').remove(); - } - - return $this; - }; - $button.spin = function() { - var $this = this; - $this.toggleSpin(true); - - return $this; - }; - $button.stopSpin = function() { - var $this = this; - $this.toggleSpin(false); - - return $this; - }; - - return this; - }, - createButtonIcon: function(icon) { - var $icon = $(''); - $icon.addClass(this.getNamespace('button-icon')).addClass(icon); - - return $icon; - }, - /** - * Invoke this only after the dialog is realized. - * - * @param {type} enable - * @returns {undefined} - */ - enableButtons: function(enable) { - $.each(this.indexedButtons, function(id, $button) { - $button.toggleEnable(enable); - }); - - return this; - }, - /** - * Invoke this only after the dialog is realized. - * - * @returns {undefined} - */ - updateClosable: function() { - if (this.isRealized()) { - // Close button - this.getModalHeader().find('.' + this.getNamespace('close-button')).toggle(this.isClosable()); - } - - return this; - }, - /** - * Set handler for modal event 'show.bs.modal'. - * This is a setter! - */ - onShow: function(onshow) { - this.options.onshow = onshow; - - return this; - }, - /** - * Set handler for modal event 'shown.bs.modal'. - * This is a setter! - */ - onShown: function(onshown) { - this.options.onshown = onshown; - - return this; - }, - /** - * Set handler for modal event 'hide.bs.modal'. - * This is a setter! - */ - onHide: function(onhide) { - this.options.onhide = onhide; - - return this; - }, - /** - * Set handler for modal event 'hidden.bs.modal'. - * This is a setter! - */ - onHidden: function(onhidden) { - this.options.onhidden = onhidden; - - return this; - }, - isRealized: function() { - return this.realized; - }, - setRealized: function(realized) { - this.realized = realized; - - return this; - }, - isOpened: function() { - return this.opened; - }, - setOpened: function(opened) { - this.opened = opened; - - return this; - }, - handleModalEvents: function() { - this.getModal().on('show.bs.modal', {dialog: this}, function(event) { - var dialog = event.data.dialog; - if (dialog.isModalEvent(event) && typeof dialog.options.onshow === 'function') { - return dialog.options.onshow(dialog); - } - }); - this.getModal().on('shown.bs.modal', {dialog: this}, function(event) { - var dialog = event.data.dialog; - dialog.isModalEvent(event) && typeof dialog.options.onshown === 'function' && dialog.options.onshown(dialog); - }); - this.getModal().on('hide.bs.modal', {dialog: this}, function(event) { - var dialog = event.data.dialog; - if (dialog.isModalEvent(event) && typeof dialog.options.onhide === 'function') { - return dialog.options.onhide(dialog); - } - }); - this.getModal().on('hidden.bs.modal', {dialog: this}, function(event) { - var dialog = event.data.dialog; - dialog.isModalEvent(event) && typeof dialog.options.onhidden === 'function' && dialog.options.onhidden(dialog); - dialog.isAutodestroy() && $(this).remove(); - BootstrapDialog.moveFocus(); - }); - - // Backdrop, I did't find a way to change bs3 backdrop option after the dialog is popped up, so here's a new wheel. - this.getModal().on('click', {dialog: this}, function(event) { - event.target === this && event.data.dialog.isClosable() && event.data.dialog.canCloseByBackdrop() && event.data.dialog.close(); - }); - - // ESC key support - this.getModal().on('keyup', {dialog: this}, function(event) { - event.which === 27 && event.data.dialog.isClosable() && event.data.dialog.canCloseByKeyboard() && event.data.dialog.close(); - }); - - // Button hotkey - this.getModal().on('keyup', {dialog: this}, function(event) { - var dialog = event.data.dialog; - if (typeof dialog.registeredButtonHotkeys[event.which] !== 'undefined') { - var $button = $(dialog.registeredButtonHotkeys[event.which]); - !$button.prop('disabled') && $button.focus().trigger('click'); - } - }); - - return this; - }, - isModalEvent: function(event) { - return typeof event.namespace !== 'undefined' && event.namespace === 'bs.modal'; - }, - makeModalDraggable: function() { - if (this.options.draggable) { - this.getModalHeader().addClass(this.getNamespace('draggable')).on('mousedown', {dialog: this}, function(event) { - var dialog = event.data.dialog; - dialog.draggableData.isMouseDown = true; - var dialogOffset = dialog.getModalDialog().offset(); - dialog.draggableData.mouseOffset = { - top: event.clientY - dialogOffset.top, - left: event.clientX - dialogOffset.left - }; - }); - this.getModal().on('mouseup mouseleave', {dialog: this}, function(event) { - event.data.dialog.draggableData.isMouseDown = false; - }); - $('body').on('mousemove', {dialog: this}, function(event) { - var dialog = event.data.dialog; - if (!dialog.draggableData.isMouseDown) { - return; - } - dialog.getModalDialog().offset({ - top: event.clientY - dialog.draggableData.mouseOffset.top, - left: event.clientX - dialog.draggableData.mouseOffset.left - }); - }); - } - - return this; - }, - /** - * To make multiple opened dialogs look better. - */ - updateZIndex: function() { - var dialogCount = 0; - $.each(BootstrapDialog.dialogs, function(dialogId, dialogInstance) { - dialogCount++; - }); - var $modal = this.getModal(); - var $backdrop = $modal.data('bs.modal').$backdrop; - $modal.css('z-index', BootstrapDialog.ZINDEX_MODAL + (dialogCount - 1) * 20); - $backdrop.css('z-index', BootstrapDialog.ZINDEX_BACKDROP + (dialogCount - 1) * 20); - - return this; - }, - realize: function() { - this.initModalStuff(); - this.getModal().addClass(BootstrapDialog.NAMESPACE) - .addClass(this.getCssClass()); - this.updateSize(); - if (this.getDescription()) { - this.getModal().attr('aria-describedby', this.getDescription()); - } - this.getModalFooter().append(this.createFooterContent()); - this.getModalHeader().append(this.createHeaderContent()); - this.getModalBody().append(this.createBodyContent()); - this.getModal().modal({ - backdrop: 'static', - keyboard: false, - show: false - }); - this.makeModalDraggable(); - this.handleModalEvents(); - this.setRealized(true); - this.updateButtons(); - this.updateType(); - this.updateTitle(); - this.updateMessage(); - this.updateClosable(); - this.updateAnimate(); - this.updateSize(); - - return this; - }, - open: function() { - !this.isRealized() && this.realize(); - this.getModal().modal('show'); - this.updateZIndex(); - this.setOpened(true); - - return this; - }, - close: function() { - this.getModal().modal('hide'); - if (this.isAutodestroy()) { - delete BootstrapDialog.dialogs[this.getId()]; - } - this.setOpened(false); - - // Show scrollbar if the last visible dialog needs one. - BootstrapDialog.showScrollbar(); - - return this; - } - }; - - /** - * RFC4122 version 4 compliant unique id creator. - * - * Added by https://github.com/tufanbarisyildirim/ - * - * @returns {String} - */ - BootstrapDialog.newGuid = function() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); - }; - - /* ================================================ - * For lazy people - * ================================================ */ - - /** - * Shortcut function: show - * - * @param {type} options - * @returns the created dialog instance - */ - BootstrapDialog.show = function(options) { - return new BootstrapDialog(options).open(); - }; - - /** - * Alert window - * - * @returns the created dialog instance - */ - BootstrapDialog.alert = function() { - var options = {}; - var defaultOptions = { - type: BootstrapDialog.TYPE_PRIMARY, - title: null, - message: null, - closable: true, - buttonLabel: BootstrapDialog.DEFAULT_TEXTS.OK, - callback: null - }; - - if (typeof arguments[0] === 'object' && arguments[0].constructor === {}.constructor) { - options = $.extend(true, defaultOptions, arguments[0]); - } else { - options = $.extend(true, defaultOptions, { - message: arguments[0], - closable: false, - buttonLabel: BootstrapDialog.DEFAULT_TEXTS.OK, - callback: typeof arguments[1] !== 'undefined' ? arguments[1] : null - }); - } - - return new BootstrapDialog({ - type: options.type, - title: options.title, - message: options.message, - closable: options.closable, - data: { - callback: options.callback - }, - onhide: function(dialog) { - !dialog.getData('btnClicked') && dialog.isClosable() && typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(false); - }, - buttons: [{ - label: options.buttonLabel, - action: function(dialog) { - dialog.setData('btnClicked', true); - typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(true); - dialog.close(); - } - }] - }).open(); - }; - - /** - * Confirm window - * - * @param {type} message - * @param {type} callback - * @returns the created dialog instance - */ - BootstrapDialog.confirm = function(message, callback) { - return new BootstrapDialog({ - title: 'Confirmation', - message: message, - closable: false, - data: { - 'callback': callback - }, - buttons: [{ - label: BootstrapDialog.DEFAULT_TEXTS.CANCEL, - action: function(dialog) { - typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(false); - dialog.close(); - } - }, { - label: BootstrapDialog.DEFAULT_TEXTS.OK, - cssClass: 'btn-primary', - action: function(dialog) { - typeof dialog.getData('callback') === 'function' && dialog.getData('callback')(true); - dialog.close(); - } - }] - }).open(); - }; - - /** - * Warning window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.warning = function(message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_WARNING, - message: message - }).open(); - }; - - /** - * Danger window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.danger = function(message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_DANGER, - message: message - }).open(); - }; - - /** - * Success window - * - * @param {type} message - * @returns the created dialog instance - */ - BootstrapDialog.success = function(message, callback) { - return new BootstrapDialog({ - type: BootstrapDialog.TYPE_SUCCESS, - message: message - }).open(); - }; - - return BootstrapDialog; - -})); diff --git a/static/js/bootstrap.min.js b/static/js/bootstrap.min.js deleted file mode 100644 index 63866bcb4..000000000 --- a/static/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.0 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.0",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus","focus"==b.type)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.0",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.0",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
"),this.element_.insertAdjacentHTML("BeforeEnd",p.join(""))},Z.stroke=function(e){var t=[],i=10,n=10;t.push("o.x)&&(o.x=l.x),(null==a.y||l.yo.y)&&(o.y=l.y))}t.push(' ">'),e?_(this,t,a,o):x(this,t),t.push(""),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},Z.fill=function(){this.stroke(!0)},Z.closePath=function(){this.currentPath_.push({type:"close"})},Z.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Z.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Z.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];X(this,l(i,this.m_),!1)},Z.rotate=function(e){var t=F(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];X(this,l(n,this.m_),!1)},Z.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];X(this,l(i,this.m_),!0)},Z.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,l(r,this.m_),!0)},Z.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,r,!0)},Z.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,m={x:0,y:0},V=[],U=y(u(this.font),this.element_),d=g(U),p=this.element_.currentStyle,c=this.textAlign.toLowerCase();switch(c){case"left":case"center":case"right":break;case"end":c="ltr"==p.direction?"right":"left";break;case"start":c="rtl"==p.direction?"right":"left";break;default:c="left"}switch(this.textBaseline){case"hanging":case"top":m.y=U.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":m.y=-U.size/2.25}switch(c){case"right":l=s,h=.05;break;case"center":l=h=s/2}var b=L(this,t+m.x,n+m.y);V.push(''),o?x(this,V):_(this,V,{x:-l,y:0},{x:h,y:U.size});var f=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",k=S(b.x/A)+","+S(b.y/A);V.push('','',''),this.element_.insertAdjacentHTML("beforeEnd",V.join(""))},Z.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Z.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Z.measureText=function(e){if(!this.textMeasureEl_){var t='';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Z.clip=function(){},Z.arcTo=function(){},Z.createPattern=function(e,t){return new w(e,t)},v.prototype.addColorStop=function(e,t){t=c(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=J.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=f,CanvasGradient=v,CanvasPattern=w,DOMException=J}(),G_vmlCanvasManager}),i("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),i("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),i("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),i("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=d.length;i--;){var n=d[i];e["_"+n+"Handler"]=t(c[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),m=e("./tool/matrix"),V=o.EVENT,U=e("./mixin/Eventful"),d=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],p=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},c={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(V.RESIZE,e)},click:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(p(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,V.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((p(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e), -this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a="move",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a="move":this._hasfound&&this._lastHover.clickable&&(a="pointer"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,V.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(V.GLOBALOUT,e)}},mousedown:function(e,t){if(p(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,V.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,V.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(m.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var y=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return u.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&ts;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r("ZLevel "+n+" has been used by unkown layer "+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(m){r(m,"brush error of "+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r("ZLevel "+e+" has been used already");if(!n(t))return void r("Layer of zlevel "+e+" is not valid");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;in;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l("image",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||"#fff",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:"up",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d");r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),m=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(m.position=i.position=l.position),null!=l.rotation&&(m.rotation=i.rotation=l.rotation),null!=l.scale&&(m.scale=i.scale=l.scale),m},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),i("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),"group"==e.type){for(var i=0;i0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;tt;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),i("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++)l[V]=s(e[V],t[V],i[V],n[V],a,o,r);else for(var U=e[0].length,V=0;m>V;V++)for(var d=0;U>d;d++)l[V][d]=s(e[V][d],t[V][d],i[V][d],n[V][d],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(c.call(e[n]));return i}return c.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var m=e("./Clip"),V=e("../tool/color"),U=e("../tool/util"),d=e("../tool/event").Dispatcher,p=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},c=Array.prototype.slice,u=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,d.call(this)};u.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=U.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(p(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),p(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:u},U.merge(u.prototype,d.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,U="spline"===e,d=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},p=function(p,c){var u=p.length;if(u){var y=p[0].value,g=o(y),b=!1,f=g&&o(y[0])?2:1;p.sort(function(e,t){return e.time-t.time});var k;if(u){k=p[u-1].time;for(var x=[],_=[],L=0;u>L;L++){x.push(p[L].time/k);var W=p[L].value;"string"==typeof W&&(W=V.toArray(W),0===W.length&&(W[0]=W[1]=W[2]=0,W[3]=1),b=!0),_.push(W)}var X,L,v,w,K,I,J,C=0,S=0;if(b)var E=[0,0,0,0];var F=function(e,o){if(S>o){for(X=Math.min(C+1,u-1),L=X;L>=0&&!(x[L]<=o);L--);L=Math.min(L,u-2)}else{for(L=C;u>L&&!(x[L]>o);L++);L=Math.min(L-1,u-2)}C=L,S=o;var m=x[L+1]-x[L];if(0!==m){if(v=(o-x[L])/m,U)if(K=_[L],w=_[0===L?L:L-1],I=_[L>u-2?u-1:L+1],J=_[L>u-3?u-1:L+2],g)r(w,K,I,J,v,v*v,v*v*v,l(e,c),f);else{var V;b?(V=r(w,K,I,J,v,v*v,v*v*v,E,1),V=h(E)):V=s(w,K,I,J,v,v*v,v*v*v),i(e,c,V)}else if(g)a(_[L],_[L+1],v,l(e,c),f);else{var V;b?(a(_[L],_[L+1],v,E,1),V=h(E)):V=n(_[L],_[L+1],v),i(e,c,V)}for(L=0;L=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),i("zrender/Layer",["require","./mixin/Transformable","./tool/util","./config"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=a+"px",n.style.height=o+"px",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute("data-zr-dom-id",e),n}var n=e("./mixin/Transformable"),a=e("./tool/util"),o=window.G_vmlCanvasManager,r=e("./config"),s=function(e,a){this.id=e,this.dom=i(e,"canvas",a),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",this.dom.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*i),this.dom.setAttribute("height",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute("width",e*i),this.domBack.setAttribute("height",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var m=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(m,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),i("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){ -var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,m=o.length;m>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),i("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,m=t.radius;"number"==typeof m?i=n=a=o=m:m instanceof Array?1===m.length?i=n=a=o=m[0]:2===m.length?(i=a=m[0],n=o=m[1]):3===m.length?(i=m[0],n=o=m[1],a=m[2]):(i=m[0],n=m[1],a=m[2],o=m[3]):i=n=a=o=0;var V;i+n>l&&(V=i+n,i*=l/V,n*=l/V),a+o>l&&(V=a+o,a*=l/V,o*=l/V),n+a>h&&(V=n+a,n*=h/V,a*=h/V),i+o>h&&(V=i+o,i*=h/V,o*=h/V),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return d(t,i,o,l);case"rose":return d(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"polyline":return m(t.pointList,t.lineWidth,i,n);case"ring":return V(t.x,t.y,t.r0,t.r,i,n);case"circle":return d(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),p(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return t.pathArray&&k(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return c(t.pointList,i,n);case"text":var u=t.__rect||e.getRect(t);return U(u.x,u.y,u.width,u.height,i,n);case"rectangle":case"image":return U(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var m=l*o-r+h,V=m*m/(l*l+1);return s/2*s/2>=V}function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);if(m>t+V&&m>n+V&&m>o+V&&m>s+V||t-V>m&&n-V>m&&o-V>m&&s-V>m||h>e+V&&h>i+V&&h>a+V&&h>r+V||e-V>h&&i-V>h&&a-V>h&&r-V>h)return!1;var U=X.cubicProjectPoint(e,t,i,n,a,o,r,s,h,m,null);return V/2>=U}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var m=X.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=m}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e,h-=i;var V=Math.sqrt(l*l+h*h);if(V-m>n||n>V+m)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var U=a;a=t(o),o=t(U)}else a=t(a),o=t(o);a>o&&(o+=C);var d=Math.atan2(h,l);return 0>d&&(d+=C),d>=a&&o>=d||d+C>=a&&o>=d+C}function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],m=e[a+1][1];if(r(s,l,h,m,t,i,n))return!0}return!1}function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],m=e[o][1];a+=u(s,l,h,m,t,i),r=o}return 0!==a}function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var m=X.cubicRootAt(t,n,o,s,h,S);if(0===m)return 0;for(var V,U,d=0,p=-1,c=0;m>c;c++){var u=S[c],g=X.cubicAt(e,i,a,r,u);l>g||(0>p&&(p=X.cubicExtrema(t,n,o,s,E),E[1]1&&y(),V=X.cubicAt(t,n,o,s,E[0]),p>1&&(U=X.cubicAt(t,n,o,s,E[1]))),d+=2==p?uV?1:-1:uU?1:-1:U>s?1:-1:uV?1:-1:V>s?1:-1)}return d}function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=X.quadraticRootAt(t,n,o,s,S);if(0===l)return 0;var h=X.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var m=0,V=X.quadraticAt(t,n,o,h),U=0;l>U;U++){var d=X.quadraticAt(e,i,a,S[U]);r>d||(m+=S[U]V?1:-1:V>o?1:-1)}return m}var d=X.quadraticAt(e,i,a,S[0]);return r>d?0:t>o?1:-1}function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(S[0]=-h,S[1]=h,Math.abs(a-o)>=C){a=0,o=C;var m=r?1:-1;return s>=S[0]+e&&s<=S[1]+e?m:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var V=0,U=0;2>U;U++){var d=S[U];if(d+e>s){var p=Math.atan2(l,d),m=r?1:-1;0>p&&(p=C+p),(p>=a&&o>=p||p+C>=a&&o>=p+C)&&(p>Math.PI/2&&p<1.5*Math.PI&&(m=-m),V+=m)}}return V}function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||"fill";for(var y="stroke"===i||"both"===i,k="fill"===i||"both"===i,x=0;x0&&(k&&(o+=u(m,V,U,d,n,a)),0!==o))return!0;U=L[L.length-2],d=L[L.length-1],p=!1,c&&"A"!==_.command&&(c=!1,m=U,V=d)}switch(_.command){case"M":m=L[0],V=L[1];break;case"L":if(y&&r(m,V,L[0],L[1],t,n,a))return!0;k&&(o+=u(m,V,L[0],L[1],n,a)),m=L[0],V=L[1];break;case"C":if(y&&s(m,V,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;k&&(o+=g(m,V,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),m=L[4],V=L[5];break;case"Q":if(y&&l(m,V,L[0],L[1],L[2],L[3],t,n,a))return!0;k&&(o+=b(m,V,L[0],L[1],L[2],L[3],n,a)),m=L[2],V=L[3];break;case"A":var W=L[0],X=L[1],v=L[2],w=L[3],K=L[4],I=L[5],J=Math.cos(K)*v+W,C=Math.sin(K)*w+X;c?(c=!1,U=J,d=C):o+=u(m,V,J,C);var S=(n-W)*w/v+W;if(y&&h(W,X,w,K,K+I,1-L[7],t,S,a))return!0;k&&(o+=f(W,X,w,K,K+I,1-L[7],S,a)),m=Math.cos(K+I)*v+W,V=Math.sin(K+I)*w+X;break;case"z":if(y&&r(m,V,U,d,t,n,a))return!0;p=!0}}return k&&(o+=u(m,V,U,d,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(v[i])return v[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),v[i]=n,++K>J&&(K=0,v={}),n}function _(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");var n=(L.measureText("国").width+2)*e.length;return L.restore(),w[i]=n,++I>J&&(I=0,w={}),n}var L,W=e("./util"),X=e("./curve"),v={},w={},K=0,I=0,J=5e3,C=2*Math.PI,S=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:_,isInsidePath:k,isInsidePolygon:c,isInsideSector:p,isInsideCircle:d,isInsideLine:r,isInsideRect:U,isInsidePolyline:m,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),i("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var m=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+m;break;default:o=h.y+m/2}for(var V=0,U=n.length;U>V;V++)t.fillText(n[V],a,o),o+=m}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),m=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};m.prototype.invisible=!1,m.prototype.ignore=!1,m.prototype.zlevel=0,m.prototype.draggable=!1,m.prototype.clickable=!1,m.prototype.hoverable=!0,m.prototype.z=0,m.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},m.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},m.prototype.afterBrush=function(e){e.restore()};var V=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];m.prototype.setContext=function(e,t){for(var i=0,n=V.length;n>i;i++){var a=V[i][0],o=t[a],r=V[i][1];"undefined"!=typeof o&&(e[r]=o)}};var U=a.create();return m.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},m.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,m=i.textPosition||this.textPosition||"top";switch(m){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var V=(n||i).__rect||this.getRect(n||i);switch(m){case"inside":s=V.x+V.width/2,l=V.y+V.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=V.x-h,l=V.y+V.height/2,o="end",r="middle";break;case"right":s=V.x+V.width+h,l=V.y+V.height/2,o="start",r="middle";break;case"top":s=V.x+V.width/2,l=V.y-h,o="center",r="bottom";break;case"bottom":s=V.x+V.width/2,l=V.y+V.height+h,o="center",r="top"}}break;case"start":case"end":var U=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],d=U.length;if(2>d)return;var p,c,u,y;switch(m){case"start":p=U[1][0],c=U[0][0],u=U[1][1],y=U[0][1];break;case"end":p=U[d-2][0],c=U[d-1][0],u=U[d-2][1],y=U[d-1][1]}s=c,l=y;var g=Math.atan((u-y)/(c-p))/Math.PI*180;0>c-p?g+=180:0>u-y&&(g+=360),h=5,g>=30&&150>=g?(o="center",r="bottom",l-=h):g>150&&210>g?(o="right",r="middle",s-=h):g>=210&&330>=g?(o="center",r="top",l+=h):(o="left",r="middle",s+=h);break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},m.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},m.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(m.prototype,l.prototype,!0),r.merge(m.prototype,h.prototype,!0),m}),i("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-u&&u>e}function i(e){return e>u||-u>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,V=l*l-3*s*h,U=l*h-9*s*m,d=h*h-3*l*m,p=0;if(t(V)&&t(U))if(t(l))r[0]=0;else{var c=-h/l;c>=0&&1>=c&&(r[p++]=c)}else{var u=U*U-4*V*d;if(t(u)){var b=U/V,c=-l/s+b,f=-b/2;c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f)}else if(u>0){var k=Math.sqrt(u),x=V*l+1.5*s*(-U+k),_=V*l+1.5*s*(-U-k);x=0>x?-Math.pow(-x,g):Math.pow(x,g),_=0>_?-Math.pow(-_,g):Math.pow(_,g);var c=(-l-(x+_))/(3*s);c>=0&&1>=c&&(r[p++]=c)}else{var L=(2*V*l-3*s*U)/(2*Math.sqrt(V*V*V)),W=Math.acos(L)/3,X=Math.sqrt(V),v=Math.cos(W),c=(-l-2*X*v)/(3*s),f=(-l+X*(v+y*Math.sin(W)))/(3*s),w=(-l+X*(v-y*Math.sin(W)))/(3*s);c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f),w>=0&&1>=w&&(r[p++]=w)}}return p}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0;if(t(l)){if(i(s)){var V=-h/s;V>=0&&1>=V&&(r[m++]=V)}}else{var U=s*s-4*l*h;if(t(U))r[0]=-s/(2*l);else if(U>0){var d=Math.sqrt(U),V=(-s+d)/(2*l),p=(-s-d)/(2*l);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,m=(l-s)*a+s,V=(m-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=V,o[4]=V,o[5]=m,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var g=c.distSquare(b,f);p>g&&(U=y,p=g)}p=1/0;for(var x=0;32>x&&!(u>d);x++){var _=U-d,L=U+d;f[0]=n(e,i,o,s,_),f[1]=n(t,a,r,l,_);var g=c.distSquare(f,b);if(_>=0&&p>g)U=_,p=g;else{k[0]=n(e,i,o,s,L),k[1]=n(t,a,r,l,L);var W=c.distSquare(k,b);1>=L&&p>W?(U=L,p=W):d*=.5}}return V&&(V[0]=n(e,i,o,s,U),V[1]=n(t,a,r,l,U)),Math.sqrt(p)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)){var V=-h/l;V>=0&&1>=V&&(r[m++]=V)}}else{var U=l*l-4*s*h;if(t(U)){var V=-l/(2*s);V>=0&&1>=V&&(r[m++]=V)}else if(U>0){var d=Math.sqrt(U),V=(-l+d)/(2*s),p=(-l-d)/(2*s);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d=0;1>d;d+=.05){f[0]=h(e,i,a,d),f[1]=h(t,n,o,d);var p=c.distSquare(b,f);U>p&&(m=d,U=p)}U=1/0;for(var y=0;32>y&&!(u>V);y++){var g=m-V,x=m+V;f[0]=h(e,i,a,g),f[1]=h(t,n,o,g);var p=c.distSquare(f,b);if(g>=0&&U>p)m=g,U=p;else{k[0]=h(e,i,a,x),k[1]=h(t,n,o,x);var _=c.distSquare(k,b);1>=x&&U>_?(m=x,U=_):V*=.5}}return l&&(l[0]=h(e,i,a,m),l[1]=h(t,n,o,m)),Math.sqrt(U)}var c=e("./vector"),u=1e-4,y=Math.sqrt(3),g=1/3,b=c.create(),f=c.create(),k=c.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:m,quadraticRootAt:V,quadraticExtremum:U,quadraticSubdivide:d,quadraticProjectPoint:p}}),i("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),i("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;et)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this.__needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),i("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),i("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","zrender/shape/Polyline","zrender/shape/ShapeBundle","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","../component/base","../layout/EdgeBundling","zrender/tool/util","zrender/tool/area"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType="stroke",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth="icon"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=m.get(e.dragged,"data")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e("zrender/shape/Image"),a=e("../util/shape/Icon"),o=e("../util/shape/MarkLine"),r=e("../util/shape/Symbol"),s=e("zrender/shape/Polyline"),l=e("zrender/shape/ShapeBundle"),h=e("../config"),m=e("../util/ecData"),V=e("../util/ecAnimation"),U=e("../util/ecEffect"),d=e("../util/accMath"),p=e("../component/base"),c=e("../layout/EdgeBundling"),u=e("zrender/tool/util"),y=e("zrender/tool/area");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=m.get(n,"seriesIndex"),r=m.get(n,"dataIndex"),s=this.series,l=this.component.legend;if(-1===r){if(m.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:m.get(a,"value"),name:m.get(a,"name")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var V=!1,U=s[o].data,p=0,c=U.length;c>p;p++)U[p].name===i.name&&"-"===U[p].value&&(s[o].data[p].value=i.value,V=!0);!V&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||"-",null!=i.value?(s[o].data[r].value="-"!=i.value?d.accAdd(s[o].data[r].value,m.get(a,"value")):m.get(a,"value"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+m.get(a,"name"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]="-"!=i?d.accAdd(s[o].data[r],m.get(a,"value")):m.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var u=this;setTimeout(function(){u.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=m.get(i,"seriesIndex"),a=m.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l="__kener__stack__",m=this.component.legend,V=[],U=0,d=0,p=e.length;p>d;d++){if(t=o[e[d]],n=t.name,this._sIndex2ShapeMap[e[d]]=this._sIndex2ShapeMap[e[d]]||this.query(t,"symbol")||this._symbol[d%this._symbol.length],m){if(this.selectedMap[n]=m.isSelected(n),this._sIndex2ColorMap[e[d]]=m.getColor(n),a=m.getItemShape(n)){var c=a.style;if(this.type==h.CHART_TYPE_LINE)c.iconType="legendLineIcon",c.symbol=this._sIndex2ShapeMap[e[d]];else if(t.itemStyle.normal.barBorderWidth>0){var u=a.highlightStyle;c.brushType="both",c.x+=1,c.y+=1,c.width-=2,c.height-=2,c.strokeColor=u.strokeColor=t.itemStyle.normal.barBorderColor,u.lineWidth=3}m.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[d]]=this.zr.getColor(e[d]);this.selectedMap[n]&&(i=t.stack||l+e[d],null==s[i]?(s[i]=r,V[r]=[e[d]],r++):V[s[i]].push(e[d])),U=Math.max(U,t.data.length)}return{locationMap:V,maxDataLength:U}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"",m=this.component.grid,V=e[l];if("-1"!=i.indexOf("x")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var U=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[U,m.getYend()],[U,m.getY()]],V["minLine"+h]=[[V["minX"+h],m.getYend()],[V["minX"+h],m.getY()]],V["maxLine"+h]=[[V["maxX"+h],m.getYend()],[V["maxX"+h],m.getY()]],V.isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var d=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[m.getX(),d],[m.getXend(),d]],V["minLine"+h]=[[m.getX(),V["minY"+h]],[m.getXend(),V["minY"+h]]],V["maxLine"+h]=[[m.getX(),V["maxY"+h]],[m.getXend(),V["maxY"+h]]],V.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{}; - -if(r.show){var m=e.style;m.text=this._getLabelText(t,i,n,"normal"),m.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,m.textColor=l.color,m.textFont=this.getFont(l),m.textAlign=l.align,m.textBaseline=l.baseline}if(s.show){var V=e.highlightStyle;V.text=this._getLabelText(t,i,n,"emphasis"),V.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,V.textColor=h.color,V.textFont=this.getFont(h),V.textAlign=h.align,V.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=this.getDataFromOption(t,"-");return a?"function"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):"string"==typeof a?a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+" , "+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=u.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||y.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var m=l[r];m.zlevel=a.zlevel,m.z=a.z+1;for(var V in n)m[V]=u.clone(n[V]);this.shapeList.push(m)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=u.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||"max"!==s.type&&"min"!==s.type&&"average"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[u.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value="average"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],"markLine.precision")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var m=this._markLine(e,a),V=a.large;if(V){var U=new l({style:{shapeList:m}}),d=m[0];if(d){u.merge(U.style,d.style),u.merge(U.highlightStyle={},d.highlightStyle),U.style.brushType="stroke",U.zlevel=n.zlevel,U.z=n.z+1,U.hoverable=!1;for(var p in i)U[p]=u.clone(i[p])}this.shapeList.push(U),this.zr.addShape(U),U._mark="largeLine";var c=a.effect;c.show&&(U.effect=c)}else{for(var o=0,r=m.length;r>o;o++){var y=m[o];y.zlevel=n.zlevel,y.z=n.z+1;for(var p in i)y[p]=u.clone(i[p]);this.shapeList.push(y)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=m.length;r>o;o++)this.zr.addShape(m[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;u.merge(u.merge(t,u.clone(this.ecTheme.markPoint||{})),u.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,V,U,d=[],p=t.data,c=n.dataRange,y=n.legend,g=this.zr.getWidth(),b=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark="largePoint",a&&d.push(a);else for(var f=0,k=p.length;k>f;f++)null!=p[f].x&&null!=p[f].y&&(r=null!=p[f].value?p[f].value:"",y&&(o=y.getColor(i.name)),c&&(o=isNaN(r)?o:c.getColor(r),s=[p[f],t],l=this.deepQuery(s,"itemStyle.normal.color")||o,V=this.deepQuery(s,"itemStyle.emphasis.color")||l,null==l&&null==V)||(o=null==o?this.zr.getColor(e):o,p[f].tooltip=p[f].tooltip||t.tooltip||{trigger:"item"},p[f].name=null!=p[f].name?p[f].name:"",p[f].value=r,a=this.getSymbolShape(t,e,p[f],f,p[f].name,this.parsePercent(p[f].x,g),this.parsePercent(p[f].y,b),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",U=this.deepMerge([p[f],t],"effect"),U.show&&(a.effect=U),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(p[f])),m.pack(a,i,e,p[f],f,p[f].name,r),d.push(a)));return d},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;u.merge(u.merge(n,u.clone(this.ecTheme.markLine||{})),u.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,"symbol"),e(n,"symbolSize"),e(n,"symbolRotate");for(var V=n.data,U=[],d=this.zr.getWidth(),p=this.zr.getHeight(),y=0;yy;y++){var K=U[y],I=K.rawEdge||K,g=I.rawData,x=null!=g.value?g.value:"",J=this.getMarkLineShape(n,i,g,y,K.points,W,I.color);J._mark="line";var C=this.deepMerge([g[0],g[1],n],"effect");C.show&&(J.effect=C,J.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(J._geo=[this.getMarkGeo(g[0]),this.getMarkGeo(g[1])]),m.pack(J,a,i,g[0],y,g[0].name+(""!==g[1].name?" > "+g[1].name:""),x),v.push(J)}return v}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,V,U,d){var p=[i,e],c=this.getDataFromOption(i,"-");h=this.deepQuery(p,"symbol")||h;var u=this.deepQuery(p,"symbolSize");u="function"==typeof u?u(c):u,"number"==typeof u&&(u=[u,u]);var y=this.deepQuery(p,"symbolRotate"),g=this.deepMerge(p,"itemStyle.normal"),b=this.deepMerge(p,"itemStyle.emphasis"),f=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==f&&(f=h.match("empty")?2:0);var k=null!=b.borderWidth?b.borderWidth:b.lineStyle&&b.lineStyle.width;null==k&&(k=f+2);var x=this.getItemStyleColor(g.color,t,o,i),_=this.getItemStyleColor(b.color,t,o,i),L=u[0],W=u[1],X=new a({style:{iconType:h.replace("empty","").toLowerCase(),x:s-L,y:l-W,width:2*L,height:2*W,brushType:"both",color:h.match("empty")?U:x||V,strokeColor:g.borderColor||x||V,lineWidth:f},highlightStyle:{color:h.match("empty")?U:_||x||V,strokeColor:b.borderColor||g.borderColor||_||x||V,lineWidth:k},clickable:this.deepQuery(p,"clickable")});return h.match("image")&&(X.style.image=h.replace(new RegExp("^image:\\/\\/"),""),X=new n({style:X.style,highlightStyle:X.highlightStyle,clickable:this.deepQuery(p,"clickable")})),null!=y&&(X.rotation=[y*Math.PI/180,s,l]),h.match("star")&&(X.style.iconType="star",X.style.n=h.replace("empty","").replace("star","")-0||5),"none"===h&&(X.invisible=!0,X.hoverable=!1),X=this.addLabel(X,e,i,r,d),h.match("empty")&&(null==X.style.textColor&&(X.style.textColor=X.style.strokeColor),null==X.highlightStyle.textColor&&(X.highlightStyle.textColor=X.highlightStyle.strokeColor)),m.pack(X,e,t,i,o,r),X._x=s,X._y=l,X._dataIndex=o,X._seriesIndex=t,X},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:"-",m=null!=i[1].value?i[1].value:"-",V=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],U=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];U[0]="function"==typeof U[0]?U[0](h):U[0],U[1]="function"==typeof U[1]?U[1](m):U[1];var d=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],p=[i[0],i[1],e],c=this.deepMerge(p,"itemStyle.normal");c.color=this.getItemStyleColor(c.color,t,n,i);var u=this.deepMerge(p,"itemStyle.emphasis");u.color=this.getItemStyleColor(u.color,t,n,i);var y=c.lineStyle,g=u.lineStyle,b=y.width;null==b&&(b=c.borderWidth);var f=g.width;null==f&&(f=null!=u.borderWidth?u.borderWidth:b+2);var k=this.deepQuery(p,"smoothness");this.deepQuery(p,"smooth")||(k=0);var x=r?s:o,_=new x({style:{symbol:V,symbolSize:U,symbolRotate:d,brushType:"both",lineType:y.type,shadowColor:y.shadowColor||y.color||c.borderColor||c.color||l,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:c.color||l,strokeColor:y.color||c.borderColor||c.color||l,lineWidth:b,symbolBorderColor:c.borderColor||c.color||l,symbolBorder:c.borderWidth},highlightStyle:{shadowColor:g.shadowColor,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:u.color||c.color||l,strokeColor:g.color||y.color||u.borderColor||c.borderColor||u.color||c.color||l,lineWidth:f,symbolBorderColor:u.borderColor||c.borderColor||u.color||c.color||l,symbolBorder:null==u.borderWidth?c.borderWidth+2:u.borderWidth},clickable:this.deepQuery(p,"clickable")}),L=_.style;return r?(L.pointList=a,L.smooth=k):(L.xStart=a[0][0],L.yStart=a[0][1],L.xEnd=a[1][0],L.yEnd=a[1][1],L.curveness=k,_.updatePoints(_.style)),_=this.addLabel(_,e,i[0],i[0].name+" : "+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],m=this.component,V=t.data,U=m.dataRange,d=m.legend,p=[V[0],t];if(d&&(n=d.getColor(h.name)),!U||(a=null!=V[0].value?V[0].value:"",n=isNaN(a)?n:U.getColor(a),o=this.deepQuery(p,"itemStyle.normal.color")||n,s=this.deepQuery(p,"itemStyle.emphasis.color")||o,null!=o||null!=s)){n=this.deepMerge(p,"itemStyle.normal").color||n;var c=this.deepQuery(p,"symbol")||"circle";c=c.replace("empty","").replace(/\d/g,""),l=this.deepMerge([V[0],t],"effect");var u=window.devicePixelRatio||1;return i=new r({style:{pointList:V,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*u,size:this.deepQuery(p,"symbolSize"),iconType:c,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,"animationDurationUpdate"):this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},m={};if(this.option.animation&&!this.option.renderAsImage&&a.lengthV;V++)t=this._getAnimationKey(n[V]),t.match("undefined")?this.zr.delShape(n[V].id):(t+=n[V].type,l[t]?this.zr.delShape(n[V].id):l[t]=n[V]);for(var V=0,U=a.length;U>V;V++)t=this._getAnimationKey(a[V]),t.match("undefined")?this.zr.addShape(a[V]):(t+=a[V].type,m[t]=a[V]);for(t in l)m[t]||this.zr.delShape(l[t].id);for(t in m)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],m[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:r/2,this._animateMod(!1,m[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var V=0,U=a.length;U>V;V++)this.zr.addShape(a[V])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===h.CHART_TYPE_RADAR?m.get(e,"special"):""):m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case"polyline":case"half-smooth-polygon":V.pointList(this.zr,e,t,i,n);break;case"rectangle":V.rectangle(this.zr,e,t,i,n);break;case"image":case"icon":V.icon(this.zr,e,t,i,n,a);break;case"candle":o?this.zr.addShape(t):V.candle(this.zr,e,t,i,n);break;case"ring":case"sector":case"circle":o?"sector"===t.type?V.sector(this.zr,e,t,i,n):this.zr.addShape(t):V.ring(this.zr,e,t,i+(m.get(t,"dataIndex")||0)%20*100,n);break;case"text":V.text(this.zr,e,t,i,n);break;case"polygon":o?V.pointList(this.zr,e,t,i,n):V.polygon(this.zr,e,t,i,n);break;case"ribbon":V.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":V.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":V.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":V.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&U[i._mark]&&(U[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;il;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&m.get(o[r][s],"seriesIndex")==e&&m.get(o[r][s],"name")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},u.inherits(i,p),i}),i("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),i("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function _(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function W(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function v(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function w(e){I.call(this,e)}var K=e("zrender/tool/util"),I=e("zrender/shape/Base");return w.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:m,forceChart:V,chordChart:U,stackChart:d,tiledChart:p,dataView:c,saveAsImage:u,cross:y,circle:g,rectangle:b,triangle:f,diamond:k,arrow:x,star:_,heart:L,droplet:W,pin:X,image:v},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*("pin"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},K.inherits(w,I),w}),i("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BezierCurve","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/curve"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BezierCurve"),s=new r({}),l=e("zrender/tool/area"),h=e("zrender/shape/util/dashedLineTo"),m=e("zrender/tool/util"),V=e("zrender/tool/curve");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||"solid";if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case"dashed":n=[5,5];break;case"dotted":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if("solid"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*("dashed"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace("empty","").toLowerCase();t.symbol[i].match("empty")&&(e.fillStyle="#fff");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,m=0===i?r:l,U=t.curveness||0,d=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(d=d/180*Math.PI,"arrow"==a&&0===d)if(0===U){var p=0===i?-1:1;d=Math.PI/2+Math.atan2(p*(l-r),p*(s-o))}else{var c=t.cpX1,u=t.cpY1,y=V.quadraticDerivativeAt,g=y(o,c,s,i),b=y(r,u,l,i);d=Math.PI/2+Math.atan2(b,g)}e.translate(h,m),0!==d&&e.rotate(d);var f=t.symbolSize[i];n.prototype.buildPath(e,{x:-f,y:-f,width:2*f,height:2*f,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},m.inherits(t,i),t}),i("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,m=Math.ceil(n/h),V=i[0]instanceof Array,U=t.size?t.size:2,d=U,p=U/2,c=2*Math.PI,u=0;m>u;u++){e.beginPath(),a=u*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t["randomMap"+y%20]/100,d=U*r*r,p=d/2),V?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>d)e.rect(s-p,l-p,d,d);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,p,0,c,!0);break;case"diamond":e.moveTo(s,l-p),e.lineTo(s+p/3,l-p/3),e.lineTo(s+p,l),e.lineTo(s+p/3,l+p/3),e.lineTo(s,l+p),e.lineTo(s-p/3,l+p/3),e.lineTo(s-p,l),e.lineTo(s-p/3,l-p/3),e.lineTo(s,l-p);break;default:e.rect(s-p,l-p,d,d)}if(e.closePath(),m-1>u)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),i("zrender/shape/Polyline",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"polyline",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,m=0;o-1>m;m++)s=r[2*m],l=r[2*m+1],h=n[m+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(n=i(n),o=n.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var V=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)a(e,n[m-1][0],n[m-1][1],n[m][0],n[m][1],V)}}else{e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)e.lineTo(n[m][0],n[m][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),i("zrender/shape/ShapeBundle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:"shape-bundle",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;oh;h++)o[h]=[r[h][0],l];else for(var m=r[0][0],h=0;s>h;h++)o[h]=[m,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=p.clone(r[s-1]),o[s-2]=p.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var V=o.length;i.style.pointList=V==s?o:s>V?o.concat(r.slice(V)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,m=r.height,V=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(V[0]!=t.position[0]||V[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:V}).start(o),n.__animating=!0,e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:m}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,"").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{ -style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||"QuinticOut")}}function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,m=o.yEnd;if(o.curveness>0){i.updatePoints(o);var V={p:0},U=o.cpX1,d=o.cpY1,p=[],u=[],y=c.quadraticSubdivide;e.animation.animate(V).when(n,{p:1}).during(function(){y(s,U,h,V.p,p),y(l,d,m,V.p,u),o.cpX1=p[1],o.cpY1=u[1],o.xEnd=p[2],o.yEnd=u[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,"style").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:m}).done(r).start(a)}var p=e("zrender/tool/util"),c=e("zrender/tool/curve");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:m,icon:V,line:U,markline:d}}),i("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","zrender/tool/curve","../util/shape/Icon","../util/shape/Symbol","zrender/shape/ShapeBundle","zrender/shape/Polyline","zrender/tool/vector","zrender/tool/env"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,m=r.shadowColor||l,V=r.scaleSize,U=r.bounceDistance,d="undefined"!=typeof r.shadowBlur?r.shadowBlur:V;"image"!==i.type?(a=new h({zlevel:n,style:{brushType:"stroke",iconType:"droplet"!=i.style.iconType?i.style.iconType:"circle",x:d+1,y:d+1,n:i.style.n,width:i.style._width*V,height:i.style._height*V,lineWidth:1,strokeColor:l,shadowColor:m,shadowBlur:d},draggable:!1,hoverable:!1}),"pin"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),p&&(a.style.image=e.shapeToImage(a,a.style.width+2*d+2,a.style.height+2*d+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var c="image"!==i.type?window.devicePixelRatio||1:1,u=(a.style.width/c-i.style._width)/2;a.style.x=i.style._x-u,a.style.y=i.style._y-u,"pin"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var y=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var g=a.style.x+a.style.width/2/c,b=a.style.y+a.style.height/2/c;"scale"===r.type?(e.modShape(a.id,{scale:[.1,.1,g,b]}),e.animate(a.id,"",r.loop).when(y,{scale:[1,1,g,b]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,"style",r.loop).when(y,{y:a.style.y-U}).when(2*y,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,V=new m({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(V),e.addShape(V),e.modShape(i.id,{invisible:!0});for(var U=Math.round(100*a.period),d={},p={},c=0;20>c;c++)V.style["randomMap"+c]=0,d={},d["randomMap"+c]=100,p={},p["randomMap"+c]=0,V.style["randomMap"+c]=100*Math.random(),e.animate(V.id,"style",!0).when(U,d).when(2*U,p).when(3*U,d).when(4*U,d).delay(Math.random()*U*c).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor||h.color,V=s.shadowColor||h.strokeColor||m,c=h.lineWidth*s.scaleSize,u="undefined"!=typeof s.shadowBlur?s.shadowBlur:c,y=new r({zlevel:n,style:{x:u,y:u,r:c,color:m,shadowColor:V,shadowBlur:u},hoverable:!1}),g=0;if(p&&!a){var n=y.zlevel;y=e.shapeToImage(y,2*(c+u),2*(c+u)),y.zlevel=n,y.hoverable=!1,g=u}a||(o.clone(i,y),y.position=i.position,t.push(y),e.addShape(y));var b=function(){a||(i.effect.show=!1,e.delShape(y.id)),y.effectAnimator=null};if(i instanceof U){for(var f=[0],k=0,x=h.pointList,_=h.controlPointList,L=1;L0){var F=h.cpX1-g,T=h.cpY1-g;y.effectAnimator=e.animation.animate(y,{loop:s.loop}).when(E,{p:1}).during(function(t,i){y.style.x=l.quadraticAt(K,F,J,i),y.style.y=l.quadraticAt(I,T,C,i),a||e.modShape(y)}).done(b).start()}else y.effectAnimator=e.animation.animate(y.style,{loop:s.loop}).when(E,{x:J,y:C}).during(function(){a||e.modShape(y)}).done(b).start();y.effectAnimator.duration=E}return y}function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],m=0;ml&&(l=d.duration),0===m&&(o.style.color=U.style.color,o.style.shadowBlur=U.style.shadowBlur,o.style.shadowColor=U.style.shadowColor),h.push(d)}t.push(o),e.addShape(o);var p=function(){for(var e=0;e=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ("zlevel")},getZBase:function(){return this._getZ("z")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),i("echarts/layout/EdgeBundling",["require","../data/KDTree","zrender/tool/vector"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]0&&t(e[o],n[a-1])||(n[a++]=U(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++f&&(f=W,k=L,V(g,c),V(y,p),b=u)}if(k){s+=f;var X;k.group||(X=new a,o.push(X),X.addEdge(k)),X=k.group,V(X.mp0,y),V(X.mp1,g),X.ink=b,k.group.addEdge(m)}else{var X=new a;o.push(X),V(X.mp0,m.getStartPoint()),V(X.mp1,m.getEndPoint()),X.ink=m.ink,X.addEdge(m)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=m(e[0],a)+m(a,o)+m(o,t[0])+m(e[1],a)+m(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;rl;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var V=Math.cos(this.maxTurningAngle),U=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var d=0,p=0;py){s.scaleAndAdd(i,o,e,u*y);var g=m(i,c),b=g/U;s.scaleAndAdd(n,i,e,-b);var f=h(n,o);f>d&&(d=f,s.copy(l,n))}}}}()},o}),i("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var m=a/o,V=-a/2,U=r+l*n(V),d=s+l*i(V);V+=m;var p=t.pointList=[];p.push([U,d]);for(var c,u=0,y=2*o-1;y>u;u++)c=u%2===0?h:l,p.push([r+c*n(V),s+c*i(V)]),V+=m;p.push([U,d]),e.moveTo(p[0][0],p[0][1]);for(var u=0;ur;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],m=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-m),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+m)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),i("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),i("zrender/shape/BezierCurve",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return i.prototype={type:"bezier-curve",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),"undefined"!=typeof t.cpX2&&"undefined"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;"undefined"!=typeof o&&"undefined"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var m=!0,V=0;h>V;++V)m?t.moveTo(i,n):t.lineTo(i,n),m=!m,i+=s,n+=l;t.lineTo(a,o)}}),i("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,m=o.length,V=0;m>V;V++)s=r[2*V],l=r[2*V+1],h=o[(V+1)%m],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var U=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=U,e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)a(e,o[V-1][0],o[V-1][1],o[V][0],o[V][1],U);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],U)}}else{e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)e.lineTo(o[V][0],o[V][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]i&&(i=o[r][0]),o[r][1]a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),i("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),i("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,m,V,U=s/(l-1)*(n?a:a-1),d=Math.floor(U),p=U-d,c=e[d%a];n?(h=e[(d-1+a)%a],m=e[(d+1)%a],V=e[(d+2)%a]):(h=e[0===d?d:d-1],m=e[d>a-2?a-1:d+1],V=e[d>a-3?a-1:d+2]);var u=p*p,y=p*u;o.push([t(h[0],c[0],m[0],V[0],p,u,y),t(h[1],c[1],m[1],V[1],p,u,y)])}return o}}),i("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],m=[],V=[],U=[],d=!!a;if(d){s=[1/0,1/0],l=[-(1/0),-(1/0)];for(var p=0,c=e.length;c>p;p++)t.min(s,s,e[p]),t.max(l,l,e[p]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var p=0,c=e.length;c>p;p++){var o,r,u=e[p];if(n)o=e[p?p-1:c-1],r=e[(p+1)%c];else{if(0===p||p===c-1){h.push(t.clone(e[p]));continue}o=e[p-1],r=e[p+1]}t.sub(m,r,o),t.scale(m,m,i);var y=t.distance(u,o),g=t.distance(u,r),b=y+g;0!==b&&(y/=b,g/=b),t.scale(V,m,-y),t.scale(U,m,g);var f=t.add([],u,V),k=t.add([],u,U);d&&(t.max(f,f,s),t.min(f,f,l),t.max(k,k,s),t.min(k,k,l)),h.push(f),h.push(k)}return n&&h.push(t.clone(h.shift())),h}}),i("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),i("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),i("echarts/data/KDTree",["require","./quickSelect"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e("./quickSelect"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),m=0;for(a.data!==e&&(m++,this._addNearest(m,h,a)),e.array[a.axis]h,U=!1;h*=h,(t>m||hm||hm&&m++,this._addNearest(m,h,a)),U=!0),V?(U&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(U&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;m>l;l++)n[l]=s[l].node.data;return n.length=m,n},n}),i("echarts/data/quickSelect",["require"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),i("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonRefresh.setAttribute("type","button"),this._buttonClose=document.createElement("button"),this._buttonClose.setAttribute("type","button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='

'+(t[0]||this._lang[0])+"

";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");"function"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement("div"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._buttonRefresh.style.cssText="display:none", -this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}var h,m=this.option.series;for(e=0,a=m.length;a>e;e++){for(r=[],t=0,i=m[e].data.length;i>t;t++)o=m[e].data[t],h=m[e].type==n.CHART_TYPE_PIE||m[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",m[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(", ")),r.push(h+this.getDataFromOption(o));l+=(m[e].name||"-")+" : \n",l+=r.join(m[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof e){for(var t=this._textArea.value.split("\n"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),""!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],m=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}var V=this.option.series;for(t=0,o=V.length;o>t;t++)if(m++,V[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=V[t].data.length;a>i;i++)s=e[m],l=s.replace(" ","").split(","),"undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l,m++;else{s=e[m].split(",");for(var i=0,a=V[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l;m++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),i("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),i("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var m=t.cos(s),V=t.sin(s);e.moveTo(m*o+n,V*o+a),e.lineTo(m*r+n,V*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,m=e.r0||0,V=e.r,U=t.degreeToRadian(e.startAngle),d=t.degreeToRadian(e.endAngle),p=e.clockWise;return p||(U=-U,d=-d),m>1?i.arc(a,h,m,U,d,!p,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,V,U,d,!p,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),i("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;sa&&(a=l[0]),l[1]r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l=2*Math.PI)return m[0]=e-i,m[1]=t-i,V[0]=e+i,void(V[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(m,r,s),a.max(V,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var U=o;o=n,n=U}for(var d=0;o>d;d+=Math.PI/2)d>n&&(l[0]=Math.cos(d)*i+e,l[1]=Math.sin(d)*i+t,a.min(m,l,m),a.max(V,l,V))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),i("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),i("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case"left":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:"round"};break;case"right":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:"round"}}var o=i.style;""!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),i("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"};var o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),i("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config");r.dataZoom={zlevel:0,z:4,show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",handleSize:8,showDetail:!0,realtime:!0};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var m,l=0,h=e.length;h>l;l++)if(m=e[l],m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR||m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_K){for(var V=0,U=n.length;U>V;V++)if(n[V]==(m.xAxisIndex||0)){o.push(l);break}for(var V=0,U=a.length;U>V;V++)if(a[V]==(m.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&m.data&&this.getDataFromOption(m.data[0])instanceof Array&&(m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR)&&o.push(l)}var d=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,p=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;d>p&&(d+=p,p=d-p,d-=p);var c=Math.round((p-d)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:d,end:p,start2:0,end2:100,size:c,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var m=this._originalData.yAxis,V=this._zoom.yAxisIndex,l=0,h=V.length;h>l;l++)i=Math.max(i,m[V[l]].length);for(var U,d=this._zoom.seriesIndex[0],p=this._originalData.series[d],c=Number.MIN_VALUE,u=Number.MAX_VALUE,l=0,h=p.length;h>l;l++)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),c=Math.max(c,U),u=Math.min(u,U);var y=c-u,g=[],b=e/(i-(i>1?1:0)),f=t/(i-(i>1?1:0)),k=1;"horizontal"==this.zoomOption.orient&&1>b?k=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>f&&(k=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=k)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),g.push("horizontal"==this.zoomOption.orient?[this._location.x+b*l,this._location.y+t-1-Math.round((U-u)/y*(t-10))]:[this._location.x+1+Math.round((U-u)/y*(e-10)),this._location.y+f*(h-l-1)]);"horizontal"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y]),g.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:"",end:""};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:e.start,brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition="bottom",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="top"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e]; - -"horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var m,V=0,U=t.length;U>V;V++)m=t[V].value||t[V],m[0]>=n&&m[0]<=a&&m[1]>=o&&m[1]<=r&&s.push(t[V]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=["xAxis","yAxis"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis";var m=this._zoom.seriesIndex[0],V=this.option.series[m][e+"Index"]||0,U=this.option[e][V].type,d=this._zoom.scatterMap[m][e.charAt(0)].min,p=this._zoom.scatterMap[m][e.charAt(0)].max,c=p-d;if("value"==U)return{start:d+c*this._zoom.start/100,end:d+c*this._zoom.end/100};if("time"==U){p=d+c*this._zoom.end/100,d+=c*this._zoom.start/100;var u=s.getAutoFormatter(d,p).formatter;return{start:s.format(u,d),end:s.format(u,p)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.xt.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),i("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.categoryAxis={zlevel:0,z:0,show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,m=Math.floor(.5/r);for(m=1>m?1:m,e=Math.floor(15/r);!h&&n>e;){e+=m,h=!0,a=Math.floor(r*e);for(var V=Math.floor((n-1)/e)*e;V>=0;V-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[V].textStyle)o=l.getTextWidth(this._getReformedLabel(V),this.getFont(s.merge(i[V].textStyle,this.option.axisLabel.textStyle)));else{var U=this._getReformedLabel(V)+"",d=(U.match(/\w/g)||"").length,p=U.length-d;o=d*t*2/3+p*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e="function"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l="function"==typeof n.interval?n.interval:"auto"==n.interval&&"function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:"auto"==n.interval?this._interval:n.interval-0+1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0,U=V>0?-h:0;if(this.isHorizontal())for(var d,p="bottom"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(d=this.subPixelOptimize(this.getCoordByIndex(c)+(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:d,yStart:p,xEnd:d,yEnd:p+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var u,y="left"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:y+o,yEnd:u,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,m=o.textStyle,V="function"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var U,d;"bottom"==this.option.position?(U=this.grid.getYend()+l,d="top"):(U=this.grid.getY()-l,d="bottom");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(p),y:U,color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||d}},r&&(e.style.textAlign=r>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var c,u;"left"==this.option.position?(c=this.grid.getX()-l,u="right"):(c=this.grid.getXend()+l,u="left");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoordByIndex(p),color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===p&&""!==this.option.name?"bottom":p==a-1&&""!==this.option.name?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0;if(i-=m||"undefined"==typeof m&&this.option.boundaryGap?1:0,this.isHorizontal())for(var U,d=this.grid.getY(),p=this.grid.getYend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(U=this.subPixelOptimize(this.getCoordByIndex(c)+V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:d,xEnd:U,yEnd:p,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var u,y=this.grid.getX(),g=this.grid.getXend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:g,yEnd:u,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var m,V=this.grid.getY(),U=this.grid.getHeight(),d=this.grid.getX(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(m=r>p?this.getCoordByIndex(p)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:d,y:V,width:m-d,height:U,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),d=m);else for(var c,u=this.grid.getX(),y=this.grid.getWidth(),g=this.grid.getYend(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(c=r>p?this.getCoordByIndex(p)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:u,y:c,width:y,height:g-c,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),g=c)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),i("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../util/smartLogSteps","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.valueAxis={zlevel:0,z:0,show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,m=0;i>m;m++)l=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var V,U="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,m=0;i>m;m++)V=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:V,xEnd:U+o,yEnd:V,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[m]),y:l,color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var V,U;"left"===this.option.position?(V=this.grid.getX()-o,U="right"):(V=this.grid.getXend()+o,U="left");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoord(t[m]),color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||U,textBaseline:s.baseline||(0===m&&""!==this.option.name?"bottom":m===i-1&&""!==this.option.name?"top":"middle")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,m=this.grid.getY(),V=this.grid.getYend(),U=0;i>U;U++)h=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:m,xEnd:h,yEnd:V,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var d,p=this.grid.getX(),c=this.grid.getXend(),U=0;i>U;U++)d=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:d,xEnd:c,yEnd:d,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),m=0;a>=m;m++)r=a>m?this.getCoord(n[m]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[m%i]}},this.shapeList.push(new o(e)),h=r;else for(var V,U=this.grid.getX(),d=this.grid.getWidth(),p=this.grid.getYend(),m=0;a>=m;m++)V=a>m?this.getCoord(n[m]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:d,height:p-V,color:t[m%i]}},this.shapeList.push(new o(e)),p=V}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var m="log"!==this.option.type?this.option.boundaryGap:[0,0],V=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(V*m[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(V*m[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)for(var V=n[h].evolution,U=0,d=V.length;d>U;U++)e[a].push(s.getNewDate(V[U].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e("../util/smartLogSteps")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=ethis._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=ethis.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=ethis.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),i("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=m[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=m[s].formatter,r=m[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),m=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(m)),e=e.replace("s",m)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var m=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),i("echarts/util/smartSteps",[],function(){function e(e){return X.log(I(e))/X.LN10}function t(e){return X.pow(10,e)}function i(e){return e===w(e)}function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e||0,t=+t||0,x=_=0,"min"in b&&(e=+b.min||0,x=1),"max"in b&&(t=+b.max||0,_=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&_)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return d(e,t,n);if(0===o)return p(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X.min(s.e,l.e,h.e);0===l.c?m=X.min(s.e,h.e):0===h.c&&(m=X.min(s.e,l.e)),r(s,{c:0,e:m}),r(l,s,1),r(h,s),a+=m,e=l.c,i=h.c;for(var V=(i-e)/n,U=t(a),d=0,p=[],c=n+1;c--;)p[c]=(e+V*c)*U;if(0>a){d=u(U),V=+(V*U).toFixed(d),e=+(e*U).toFixed(d),i=+(i*U).toFixed(d);for(var c=p.length;c--;)p[c]=p[c].toFixed(d),0===+p[c]&&(p[c]="0")}else e*=U,i*=U,V*=U;return k=0,f=0,b=0,{min:e,max:i,secs:n,step:V,fix:d,exp:a,pnts:p}}function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(""+I(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=w(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?w(s):K(s),!s&&(r=0),(""+I(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}function s(e,t,i){e.et[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,-1,1),b=o(t,-1);if(r(u,p),r(g,p,1),r(b,p),n?s=V(g,b,h):h=m(g,b),i(e)&&i(t)&&e*t>=0){if(h>t-e)return d(e,t,h);h=U(e,t,n,g,b,h)}var L=c(e,t,g.c,b.c);return g.c=L[0],b.c=L[1],(x||_)&&y(e,t,g,b),a(g.c,b.c,h,b.e)}function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c)/n,f),a=a.c*t(a.e),o=w(e.c/a)*a,r=K(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=s.c*t(s.e),a=s*n,o=K(i.c/s)*s,r=o-a;var h=e.c-r,m=o-i.c,V=h-m;return V>1.1*s&&(V=v(V/s/2)*s,r+=V,o+=V),e.c=r,i.c=o,s}function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var m=l-(n-e);o.c=v(e-m/2),r.c=v(n+m/2),o.e=0,r.e=0}return s}function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o=v(e-n/2),r=v(t+n/2),s=c(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-n:(e-=n,t+=n),h(e,t,i)}function c(e,t,i,n){ -return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function u(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(_){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=v(t.c+i/2),a(t.c-i,t.c,i,t.e);I(t/s)<1e-6&&(t=0),I(e/s)<1e-6&&(e=0);var l,h,m,V=[[5,10],[10,2],[50,10],[100,2]],U=[],d=[],p=o(t-e,3),c=o(e,-1,1),u=o(t,-1);r(c,p,1),r(u,p),s=u.c-c.c,p.c=s;for(var y=n.length;y--;){i=n[y],l=K(s/i),h=l*i-s,m=3*(h+3),m+=2*(i-n[0]+2),i%5===0&&(m-=10);for(var g=V.length;g--;)l%V[g][0]===0&&(m/=V[g][1]);d[y]=[i,l,h,m].join(),U[y]={secs:i,step:l,delta:h,score:m}}return U.sort(function(e,t){return e.score-t.score}),U=U[0],c.c=v(c.c-U.delta/2),u.c=v(u.c+U.delta/2),a(c.c,u.c,U.secs,p.e)}var b,f,k,x,_,L=[10,20,25,50],W=[4,5,6],X=Math,v=X.round,w=X.floor,K=X.ceil,I=X.abs;return n}),i("echarts/util/smartLogSteps",["require","./number"],function(e){function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}function i(){U=u=g=c=b=f=y=k=d=p=null}function n(){d=u.logLabelBase,null==d?(p="plain",d=10,c=I):(d=+d,1>d&&(d=10),p="exponent",c=L(d)),y=u.splitNumber,null==y&&(y=E);var e=parseFloat(u.dataMin),t=parseFloat(u.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,U=u.logPositive,null==U&&(U=t>0||0===e),b=U?e:-t,f=U?t:-e,S>b&&(b=S),S>f&&(f=S)}function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n=(i-U)/2,a=w(l(r-n));V(a-r)&&(a-=1),g=-a*c;for(var s=a;o>=s-e;s+=e)k.push(W(d,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*Ct&&a(l-1)+n(l-1)*C>o;)l--;g=-(a(e)*I+n(e)*J);for(var m=e;l>=m;m++){var V=a(m),U=n(m);k.push(W(10,V)*W(2,U))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return w(l(e/3))}k=[];var o=l(L(f)/c),r=l(L(b)/c),s=v(o),h=w(r),m=s-h,U=o-r;"exponent"===p?e():F>=m&&y>F?t():e()}function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:U,labelFormatter:r(),dataMappingMethods:n}}function r(){if("exponent"===p){var e=d,t=c;return function(i){if(!isFinite(parseFloat(i)))return"";var n="";return 0>i&&(i=-i,n="-"),n+e+m(L(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):""}}function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&S>i?i=S:!e&&i>-S&&(i=-S):i=S,i=X(i),(e?1:-1)*(L(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=S),e?W(K,i-t):-W(K,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(T[a]||"")}return t.join("")}function V(e){return e>-S&&S>e}var U,d,p,c,u,y,g,b,f,k,x=e("./number"),_=Math,L=_.log,W=_.pow,X=_.abs,v=_.ceil,w=_.floor,K=_.E,I=_.LN10,J=_.LN2,C=J/I,S=1e-9,E=5,F=2,T={0:"⁰",1:"¹",2:"²",3:"³",4:"⁴",5:"⁵",6:"⁶",7:"⁷",8:"⁸",9:"⁹","-":"⁻"};return t}),i("echarts/chart/line",["require","./base","zrender/shape/Polyline","../util/shape/Icon","../util/shape/HalfSmoothPolygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.match("empty")&&(e.fillStyle="#fff"),t.brushType="both";var h=t.symbol.replace("empty","").toLowerCase();h.match("star")?(l=h.replace("star","")-0||5,a-=1,h="star"):("rectangle"===h||"arrow"===h)&&(n+=(r-s)/2,r=s);var m="";if(h.match("image")&&(m=h.replace(new RegExp("^image:\\/\\/"),""),h="image",n+=Math.round((r-s)/2)-1,r=s+=2),h=o.prototype.iconLibrary[h]){var V=t.x,U=t.y;e.moveTo(V,U+l),e.lineTo(V+5,U+l),e.moveTo(V+t.width-5,U+l),e.lineTo(V+t.width,U+l);var d=this;h(e,{x:n+4,y:a+4,width:r-8,height:s-8,n:l,image:m},function(){d.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+r,a+l)}var n=e("./base"),a=e("zrender/shape/Polyline"),o=e("../util/shape/Icon"),r=e("../util/shape/HalfSmoothPolygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var s=e("../config");s.line={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,dataFilter:"nearest",itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1};var l=e("../util/ecData"),h=e("zrender/tool/util"),m=e("zrender/tool/color");return t.prototype={type:s.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._buildPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.xAxis.getAxis(c.xAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){o=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s-=x>0?a.getCoordSize(U):l-a.getCoord(U),r=s):0>U&&(h+=x>0?a.getCoordSize(U):a.getCoord(U)-m,r=h),y[p].push([o,r,g,u.getNameByIndex(g),o,l]),n[p].min>U&&(n[p].min=U,n[p].minY=r,n[p].minX=o),n[p].max0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getY();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s+=2*L+5,r=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"horizontal")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"y"),this._buildBorkenLine(e,this.finalPLMap,u,"horizontal")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.yAxis.getAxis(c.yAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){r=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s+=x>0?a.getCoordSize(U):a.getCoord(U)-l,o=s):0>U&&(h-=x>0?a.getCoordSize(U):m-a.getCoord(U),o=h),y[p].push([o,r,g,u.getNameByIndex(g),l,r]),n[p].min>U&&(n[p].min=U,n[p].minX=o,n[p].minY=r),n[p].max0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getXend();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s-=2*L+5,o=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"vertical")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"x"),this._buildBorkenLine(e,this.finalPLMap,u,"vertical")},_buildOther:function(e,t,i,n){for(var a,o=this.series,r={},s=0,l=i.length;l>s;s++)for(var h=0,m=i[s].length;m>h;h++){var V=i[s][h],U=o[V];a=this.component.xAxis.getAxis(U.xAxisIndex||0);var d=this.component.yAxis.getAxis(U.yAxisIndex||0),p=d.getCoord(0);r[V]=r[V]||[],n[V]=n[V]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var c=0,u=U.data.length;u>c;c++){var y=U.data[c],g=this.getDataFromOption(y,"-");if(g instanceof Array){var b=a.getCoord(g[0]),f=d.getCoord(g[1]);r[V].push([b,f,c,g[0],b,p]),n[V].min0>g[0]&&(n[V].min0=g[0],n[V].minY0=f,n[V].minX0=b),n[V].max0g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max10&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(r[k]),r[k]=[]);this._calculMarkMapXY(n,i,"xy"),this._buildBorkenLine(e,this.finalPLMap,a,"other")},_buildBorkenLine:function(e,t,i,n){for(var o,s="other"==n?"horizontal":n,V=this.series,U=e.length-1;U>=0;U--){var d=e[U],p=V[d],c=t[d];if(p.type===this.type&&null!=c)for(var u=this._getBbox(d,s),y=this._sIndex2ColorMap[d],g=this.query(p,"itemStyle.normal.lineStyle.width"),b=this.query(p,"itemStyle.normal.lineStyle.type"),f=this.query(p,"itemStyle.normal.lineStyle.color"),k=this.getItemStyleColor(this.query(p,"itemStyle.normal.color"),d,-1),x=null!=this.query(p,"itemStyle.normal.areaStyle"),_=this.query(p,"itemStyle.normal.areaStyle.color"),L=0,W=c.length;W>L;L++){var X=c[L],v="other"!=n&&this._isLarge(s,X);if(v)X=this._getLargePointList(s,X,p.dataFilter);else for(var w=0,K=X.length;K>w;w++)o=p.data[X[w][2]],(this.deepQuery([o,p,this.option],"calculable")||this.deepQuery([o,p],"showAllSymbol")||"categoryAxis"===i.type&&i.isMainAxis(X[w][2])&&"none"!=this.deepQuery([o,p],"symbol"))&&this.shapeList.push(this._getSymbol(d,X[w][2],X[w][3],X[w][0],X[w][1],s));var I=new a({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:X,strokeColor:f||k||y,lineWidth:g,lineType:b,smooth:this._getSmooth(p.smooth),smoothConstraint:u,shadowColor:this.query(p,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:this.query(p,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});if(l.pack(I,V[d],d,0,L,V[d].name),this.shapeList.push(I),x){var J=new r({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:h.clone(X).concat([[X[X.length-1][4],X[X.length-1][5]],[X[0][4],X[0][5]]]),brushType:"fill",smooth:this._getSmooth(p.smooth),smoothConstraint:u,color:_?_:m.alpha(y,.5)},highlightStyle:{brushType:"fill"},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});l.pack(J,V[d],d,0,L,V[d].name),this.shapeList.push(J)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:("horizontal"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:"horizontal"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t,i){var n;n="horizontal"===e?this.component.grid.getWidth():this.component.grid.getHeight();var a=t.length,o=[];if("function"!=typeof i)switch(i){case"min":i=function(e){return Math.max.apply(null,e)};break;case"max":i=function(e){return Math.min.apply(null,e)};break;case"average":i=function(e){for(var t=0,i=0;is;s++){var l=Math.floor(a/n*s),h=Math.min(Math.floor(a/n*(s+1)),a);if(!(l>=h)){for(var m=l;h>m;m++)r[m-l]="horizontal"===e?t[m][1]:t[m][0];r.length=h-l;for(var V=i(r),U=-1,d=1/0,m=l;h>m;m++){var p="horizontal"===e?t[m][1]:t[m][0],c=Math.abs(p-V);d>c&&(U=m,d=c)}var u=t[U].slice();"horizontal"===e?u[1]=V:u[0]=V,o.push(u)}}return o},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,l=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor||s.calculableHolderColor,h=this._getSymbol(e,t,i,n,a,o);return h.style.color=l,h.style.strokeColor=l,h.rotation=[0,0],h.hoverable=!1,h.draggable=!1,h.style.text=void 0,h},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],"#fff","vertical"===o?"horizontal":"vertical");return h.zlevel=s.zlevel,h.z=s.z+1,this.deepQuery([l,s,this.option],"calculable")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&("max"===t.type||"min"===t.type||"average"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?"1":"";return[n[t.type+"X"+r],n[t.type+"Y"+r],n[t.type+"Line"+r],n[t.type+r]]}return["string"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,m=n.length;m>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],"horizontal"))}},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}function n(e){e.style.controlPointList=null}for(var a=this.series,o={},r=0,s=e.length;s>r;r++)o[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(U=this.shapeList[r]._seriesIndex,o[U]&&!o[U][3]){if(this.shapeList[r]._main&&this.shapeList[r].style.pointList.length>1){if(d=this.shapeList[r].style.pointList,h=Math.abs(d[0][0]-d[1][0]),V=Math.abs(d[0][1]-d[1][1]),p="horizontal"===this.shapeList[r]._orient,o[U][2]){if("half-smooth-polygon"===this.shapeList[r].type){var u=d.length;this.shapeList[r].style.pointList[u-3]=d[u-2],this.shapeList[r].style.pointList[u-3][p?0:1]=d[u-4][p?0:1],this.shapeList[r].style.pointList[u-2]=d[u-1]}this.shapeList[r].style.pointList.pop(),p?(l=h,m=0):(l=0,m=-V)}else{if(this.shapeList[r].style.pointList.shift(),"half-smooth-polygon"===this.shapeList[r].type){var y=this.shapeList[r].style.pointList.pop();p?y[0]=d[0][0]:y[1]=d[0][1],this.shapeList[r].style.pointList.push(y)}p?(l=-h,m=0):(l=0,m=V)}this.shapeList[r].style.controlPointList=null,this.zr.modShape(this.shapeList[r])}else{if(o[U][2]&&this.shapeList[r]._dataIndex===a[U].data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!o[U][2]&&0===this.shapeList[r]._dataIndex){this.zr.delShape(this.shapeList[r].id);continue}}this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).during(n).done(i).start()}c||t&&t()}},o.prototype.iconLibrary.legendLineIcon=i,h.inherits(t,n),e("../chart").define("line",t),t}),i("echarts/util/shape/HalfSmoothPolygon",["require","zrender/shape/Base","zrender/shape/util/smoothBezier","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/smoothBezier"),a=e("zrender/tool/util");return t.prototype={type:"half-smooth-polygon",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,m=0;h-3>m;m++)r=o[2*m],s=o[2*m+1],l=a[m+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e("zrender/shape/Polygon").prototype.buildPath(t,i)}},a.inherits(t,i),t}),i("echarts/chart/bar",["require","./base","zrender/shape/Rectangle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.bar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_BAR,_buildShape:function(){this._buildPosition()},_buildNormal:function(e,t,i,o,r){for(var s,l,h,m,V,U,d,p,c,u,y,g,b=this.series,f=i[0][0],k=b[f],x="horizontal"==r,_=this.component.xAxis,L=this.component.yAxis,W=x?_.getAxis(k.xAxisIndex):L.getAxis(k.yAxisIndex),X=this._mapSize(W,i),v=X.gap,w=X.barGap,K=X.barWidthMap,I=X.barMaxWidthMap,J=X.barWidth,C=X.barMinHeightMap,S=X.interval,E=this.deepQuery([this.ecTheme,a],"island.r"),F=0,T=t;T>F&&null!=W.getNameByIndex(F);F++){x?m=W.getCoordByIndex(F)-v/2:V=W.getCoordByIndex(F)+v/2;for(var z=0,A=i.length;A>z;z++){var M=b[i[z][0]].yAxisIndex||0,O=b[i[z][0]].xAxisIndex||0;s=x?L.getAxis(M):_.getAxis(O),d=U=c=p=s.getCoord(0);for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),o[f]=o[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"!==g&&(g>0?(l=P>0?s.getCoordSize(g):x?d-s.getCoord(g):s.getCoord(g)-d,1===D&&C[f]>l&&(l=C[f]),x?(U-=l,V=U):(m=U,U+=l)):0>g?(l=P>0?s.getCoordSize(g):x?s.getCoord(g)-c:c-s.getCoord(g),1===D&&C[f]>l&&(l=C[f]),x?(V=p,p+=l):(p-=l,m=p)):(l=0,x?(U-=l,V=U):(m=U,U+=l)),o[f][F]=x?m+h/2:V-h/2,o[f].min>g&&(o[f].min=g,x?(o[f].minY=V,o[f].minX=o[f][F]):(o[f].minX=m+l,o[f].minY=o[f][F])),o[f].maxP;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"==g&&this.deepQuery([y,k,this.option],"calculable")&&(x?(U-=E,V=U):(m=U,U+=E),u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:E,x?E:h,x?"vertical":"horizontal"),u.hoverable=!1,u.draggable=!1,u.style.lineWidth=1,u.style.brushType="stroke",u.style.strokeColor=k.calculableHolderColor||this.ecTheme.calculableHolderColor||a.calculableHolderColor,this.shapeList.push(new n(u)));x?m+=h+w:V-=h+w}}this._calculMarkMapXY(o,i,x?"y":"x")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,"horizontal")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,"vertical")},_buildOther:function(e,t,i,a){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var m=i[r][l],V=o[m],U=V.xAxisIndex||0,d=this.component.xAxis.getAxis(U),p=d.getCoord(0),c=V.yAxisIndex||0,u=this.component.yAxis.getAxis(c),y=u.getCoord(0);a[m]=a[m]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,b=V.data.length;b>g;g++){var f=V.data[g],k=this.getDataFromOption(f,"-");if(k instanceof Array){var x,_,L=d.getCoord(k[0]),W=u.getCoord(k[1]),X=[f,V],v=this.deepQuery(X,"barWidth")||10,w=this.deepQuery(X,"barHeight");null!=w?(x="horizontal",k[0]>0?(v=L-p,L-=v):v=k[0]<0?p-L:0,_=this._getBarItem(m,g,k[0],L,W-w/2,v,w,x)):(x="vertical",k[1]>0?w=y-W:k[1]<0?(w=W-y,W-=w):w=0,_=this._getBarItem(m,g,k[0],L-v/2,W,v,w,x)),this.shapeList.push(new n(_)),L=d.getCoord(k[0]),W=u.getCoord(k[1]),a[m].min0>k[0]&&(a[m].min0=k[0],a[m].minY0=W,a[m].minX0=L),a[m].max0k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1=a&&(d=Math.floor(t.length/n),a=1);else if(n="string"==typeof U&&U.match(/%$/)?(e.getGap()*(100-parseFloat(U))/100).toFixed(2)-0:e.getGap()-U,"string"==typeof V&&V.match(/%$/)?(V=parseFloat(V)/100,a=+((n-m)/((t.length-1)*V+t.length-h)).toFixed(2),V=a*V):(V=parseFloat(V),a=+((n-m-V*(t.length-1))/(t.length-h)).toFixed(2)),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?"string"==typeof U&&U.match(/%$/)?+(e.getGap()*(100-parseFloat(U))/100).toFixed(2):e.getGap()-U:m,a=0,V=h>1?+((n-m)/(h-1)).toFixed(2):0,0>V)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,V,d)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},m=0,V=0,U=0,d=e.length;d>U;U++)for(var p={barWidth:!1,barMaxWidth:!1},c=0,u=e[U].length;u>c;c++){var y=e[U][c],g=r[y];if(!t){if(p.barWidth)s[y]=i;else if(i=this.query(g,"barWidth"),null!=i){s[y]=i,V+=i,m++,p.barWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];s[k]=i}}if(p.barMaxWidth)l[y]=n;else if(n=this.query(g,"barMaxWidth"),null!=n){l[y]=n,p.barMaxWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];l[k]=n}}}h[y]=this.query(g,"barMinHeight"),a=null!=a?a:this.query(g,"barGap"),o=null!=o?o:this.query(g,"barCategoryGap")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:m,sBarWidthTotal:V,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var m=e[l][0];i[m]&&i[m]0&&b.height>g&&b.width>g?(b.y+=g/2,b.height-=g,b.x+=g/2,b.width-=g):b.brushType="fill",m.highlightStyle.textColor=m.highlightStyle.color,m=this.addLabel(m,U,d,i,h);for(var f=[b,m.highlightStyle],k=0,x=f.length;x>k;k++){var _=f[k].textPosition;if("insideLeft"===_||"insideRight"===_||"insideTop"===_||"insideBottom"===_){var L=5;switch(_){case"insideLeft":f[k].textX=b.x+L,f[k].textY=b.y+b.height/2,f[k].textAlign="left",f[k].textBaseline="middle";break;case"insideRight":f[k].textX=b.x+b.width-L,f[k].textY=b.y+b.height/2,f[k].textAlign="right",f[k].textBaseline="middle";break;case"insideTop":f[k].textX=b.x+b.width/2,f[k].textY=b.y+L/2,f[k].textAlign="center",f[k].textBaseline="top";break;case"insideBottom":f[k].textX=b.x+b.width/2,f[k].textY=b.y+b.height-L/2,f[k].textAlign="center",f[k].textBaseline="bottom"}f[k].textPosition="specific",f[k].textColor=f[k].textColor||"#fff"}}return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(m),m.draggable=!0),o.pack(m,V[e],e,V[e].data[t],t,i),m},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)if(o.isHorizontal){i="string"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:"string"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i="string"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:"string"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var m=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?"1":"";n=[o[t.type+"X"+m],o[t.type+"Y"+m],o[t.type+"Line"+m],o[t.type+m]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(d=o.get(this.shapeList[r],"seriesIndex"),a[d]&&!a[d][3]&&"rectangle"===this.shapeList[r].type){if(p=o.get(this.shapeList[r],"dataIndex"),U=n[d],a[d][2]&&p===U.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[d][2]&&0===p){this.zr.delShape(this.shapeList[r].id);continue}"horizontal"===this.shapeList[r]._orient?(V=this.component.yAxis.getAxis(U.yAxisIndex||0).getGap(),m=a[d][2]?-V:V,l=0):(h=this.component.xAxis.getAxis(U.xAxisIndex||0).getGap(),l=a[d][2]?h:-h,m=0),this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}c||t&&t()}},r.inherits(t,i),e("../chart").define("bar",t),t}),i("echarts/chart/scatter",["require","./base","../util/shape/Symbol","../component/axis","../component/grid","../component/dataZoom","../component/dataRange","../config","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Symbol");e("../component/axis"),e("../component/grid"),e("../component/dataZoom"),e("../component/dataRange");var a=e("../config");a.scatter={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("zrender/tool/util"),r=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_SCATTER,_buildShape:function(){var e=this.series;this._sIndex2ColorMap={},this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this.selectedMap={},this.xMarkMap={};for(var t,i,n,o,s=this.component.legend,l=[],h=0,m=e.length;m>h;h++)if(t=e[h],i=t.name,t.type===a.CHART_TYPE_SCATTER){if(e[h]=this.reformOption(e[h]),this.legendHoverLink=e[h].legendHoverLink||this.legendHoverLink,this._sIndex2ShapeMap[h]=this.query(t,"symbol")||this._symbol[h%this._symbol.length],s){if(this.selectedMap[i]=s.isSelected(i),this._sIndex2ColorMap[h]=r.alpha(s.getColor(i),.5),n=s.getItemShape(i)){var o=this._sIndex2ShapeMap[h];n.style.brushType=o.match("empty")?"stroke":"both",o=o.replace("empty","").toLowerCase(),o.match("rectangle")&&(n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height),o.match("star")&&(n.style.n=o.replace("star","")-0||5,o="star"),o.match("image")&&(n.style.image=o.replace(new RegExp("^image:\\/\\/"),""),n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height,o="image"),n.style.iconType=o,s.setItemShape(i,n)}}else this.selectedMap[i]=!0,this._sIndex2ColorMap[h]=r.alpha(this.zr.getColor(h),.5);this.selectedMap[i]&&l.push(h)}this._buildSeries(l),this.addShapeList()},_buildSeries:function(e){if(0!==e.length){for(var t,i,n,a,o,r,s,l,h=this.series,m={},V=0,U=e.length;U>V;V++)if(t=e[V],i=h[t],0!==i.data.length){o=this.component.xAxis.getAxis(i.xAxisIndex||0),r=this.component.yAxis.getAxis(i.yAxisIndex||0),m[t]=[];for(var d=0,p=i.data.length;p>d;d++)n=i.data[d],a=this.getDataFromOption(n,"-"),"-"===a||a.length<2||(s=o.getCoord(a[0]),l=r.getCoord(a[1]),m[t].push([s,l,d,n.name||""]));this.xMarkMap[t]=this._markMap(o,r,i.data,m[t]),this.buildMark(t)}this._buildPointList(m)}},_markMap:function(e,t,i,n){for(var a,o={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},r=0,s=n.length;s>r;r++)a=i[n[r][2]].value||i[n[r][2]],o.min0>a[0]&&(o.min0=a[0],o.minY0=n[r][1],o.minX0=n[r][0]),o.max0a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1t.largeThreshold)this.shapeList.push(this._getLargeSymbol(t,i,this.getItemStyleColor(this.query(t,"itemStyle.normal.color"),r,-1)||this._sIndex2ColorMap[r]));else for(var s=0,l=i.length;l>s;s++)n=i[s],a=this._getSymbol(r,n[2],n[3],n[0],n[1]),a&&this.shapeList.push(a)},_getSymbol:function(e,t,i,n,a){var o,r=this.series,s=r[e],l=s.data[t],h=this.component.dataRange;if(h){if(o=isNaN(l[2])?this._sIndex2ColorMap[e]:h.getColor(l[2]),!o)return null}else o=this._sIndex2ColorMap[e];var m=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],o,"rgba(0,0,0,0)","vertical");return m.zlevel=s.zlevel,m.z=s.z,m._main=!0,m},_getLargeSymbol:function(e,t,i){return new n({zlevel:e.zlevel,z:e.z,_main:!0,hoverable:!1,style:{pointList:t,color:i,strokeColor:i},highlightStyle:{pointList:[]}})},getMarkCoord:function(e,t){var i,n=this.series[e],a=this.xMarkMap[e],o=this.component.xAxis.getAxis(n.xAxisIndex),r=this.component.yAxis.getAxis(n.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)i=["string"!=typeof t.xAxis&&o.getCoordByIndex?o.getCoordByIndex(t.xAxis||0):o.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&r.getCoordByIndex?r.getCoordByIndex(t.yAxis||0):r.getCoord(t.yAxis||0)];else{var s=null!=t.valueIndex?t.valueIndex:1;i=[a[t.type+"X"+s],a[t.type+"Y"+s],a[t.type+"Line"+s],a[t.type+s]]}return i},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)}},o.inherits(t,i),e("../chart").define("scatter",t),t}),i("echarts/component/dataRange",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../util/shape/HandlePolygon","../config","zrender/tool/util","zrender/tool/event","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=function(e,t){return s.__ondrift(this,e,t)},s._ondragend=function(){return s.__ondragend()},s._dataRangeSelected=function(e){return s.__dataRangeSelected(e)},s._dispatchHoverLink=function(e){return s.__dispatchHoverLink(e)},s._onhoverlink=function(e){return s.__onhoverlink(e); - -},this._selectedMap={},this._range={},this.refresh(a),t.bind(r.EVENT.HOVER,this._onhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/HandlePolygon"),r=e("../config");r.dataRange={zlevel:0,z:4,show:!0,orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,splitList:null,calculable:!1,selectedMode:!0,hoverLink:!0,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}};var s=e("zrender/tool/util"),l=e("zrender/tool/event"),h=e("zrender/tool/area"),m=e("zrender/tool/color");return t.prototype={type:r.COMPONENT_TYPE_DATARANGE,_textGap:10,_buildShape:function(){if(this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._isContinuity()?this._buildGradient():this._buildItem(),this.dataRangeOption.show)for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncShapeFromRange()},_buildItem:function(){var e,t,i,o,r=this._valueTextList,s=r.length,l=this.getFont(this.dataRangeOption.textStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this.dataRangeOption.itemWidth,d=this.dataRangeOption.itemHeight,p=this.dataRangeOption.itemGap,c=h.getTextHeight("国",l);"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(m=this._itemGroupLocation.x+this._itemGroupLocation.width-U);var u=!0;this.dataRangeOption.text&&(u=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(m,V,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?m+=h.getTextWidth(this.dataRangeOption.text[0],l)+this._textGap:(V+=c+this._textGap,i.style.y+=c/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var y=0;s>y;y++)e=r[y],o=this.getColorByIndex(y),t=this._getItemShape(m,V,U,d,this._selectedMap[y]?o:"#ccc"),t._idx=y,t.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(t.clickable=!0,t.onclick=this._dataRangeSelected),this.shapeList.push(new a(t)),u&&(i={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:m+U+5,y:V,color:this._selectedMap[y]?this.dataRangeOption.textStyle.color:"#ccc",text:r[y],textFont:l,textBaseline:"top"},highlightStyle:{brushType:"fill"}},"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(i.style.x-=U+10,i.style.textAlign="right"),i._idx=y,i.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(i.clickable=!0,i.onclick=this._dataRangeSelected),this.shapeList.push(new n(i))),"horizontal"==this.dataRangeOption.orient?m+=U+(u?5:0)+(u?h.getTextWidth(e,l):0)+p:V+=d+p;!u&&this.dataRangeOption.text[1]&&("horizontal"==this.dataRangeOption.orient?m=m-p+this._textGap:V=V-p+this._textGap,i=this._getTextShape(m,V,this.dataRangeOption.text[1]),"horizontal"!=this.dataRangeOption.orient&&(i.style.y-=5,i.style.textBaseline="top"),this.shapeList.push(new n(i)))},_buildGradient:function(){var t,i,o=this.getFont(this.dataRangeOption.textStyle),r=this._itemGroupLocation.x,s=this._itemGroupLocation.y,l=this.dataRangeOption.itemWidth,m=this.dataRangeOption.itemHeight,V=h.getTextHeight("国",o),U=10,d=!0;this.dataRangeOption.text&&(d=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?r+=h.getTextWidth(this.dataRangeOption.text[0],o)+this._textGap:(s+=V+this._textGap,i.style.y+=V/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var p=e("zrender/tool/color"),c=1/(this.dataRangeOption.color.length-1),u=[],y=0,g=this.dataRangeOption.color.length;g>y;y++)u.push([y*c,this.dataRangeOption.color[y]]);"horizontal"==this.dataRangeOption.orient?(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l*U,height:m,color:p.getLinearGradient(r,s,r+l*U,s,u)},hoverable:!1},r+=l*U+this._textGap):(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l,height:m*U,color:p.getLinearGradient(r,s,r,s+m*U,u)},hoverable:!1},s+=m*U+this._textGap),this.shapeList.push(new a(t)),this._calculableLocation=t.style,this.dataRangeOption.calculable&&(this._buildFiller(),this._bulidMask(),this._bulidHandle()),this._buildIndicator(),!d&&this.dataRangeOption.text[1]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[1]),this.shapeList.push(new n(i)))},_buildIndicator:function(){var e,t,i=this._calculableLocation.x,n=this._calculableLocation.y,a=this._calculableLocation.width,r=this._calculableLocation.height,s=5;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[i,n+r],[i-s,n+r+s],[i+s,n+r+s]],t="bottom"):(e=[[i,n],[i-s,n-s],[i+s,n-s]],t="top"):"right"!=this.dataRangeOption.x?(e=[[i+a,n],[i+a+s,n-s],[i+a+s,n+s]],t="right"):(e=[[i,n],[i-s,n-s],[i-s,n+s]],t="left"),this._indicatorShape={style:{pointList:e,color:"#fff",__rect:{x:Math.min(e[0][0],e[1][0]),y:Math.min(e[0][1],e[1][1]),width:s*("horizontal"==this.dataRangeOption.orient?2:1),height:s*("horizontal"==this.dataRangeOption.orient?1:2)}},highlightStyle:{brushType:"fill",textPosition:t,textColor:this.dataRangeOption.textStyle.color},hoverable:!1},this._indicatorShape=new o(this._indicatorShape)},_buildFiller:function(){this._fillerShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:this._calculableLocation.x,y:this._calculableLocation.y,width:this._calculableLocation.width,height:this._calculableLocation.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,onmousemove:this._dispatchHoverLink,_type:"filler"},this._fillerShape=new a(this._fillerShape),this.shapeList.push(this._fillerShape)},_bulidHandle:function(){var e,t,i,n,a,r,s,l,m=this._calculableLocation.x,V=this._calculableLocation.y,U=this._calculableLocation.width,d=this._calculableLocation.height,p=this.getFont(this.dataRangeOption.textStyle),c=h.getTextHeight("国",p),u=Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max),p),h.getTextWidth(this._textFormat(this.dataRangeOption.min),p))+2;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[m,V],[m,V+d+c],[m-c,V+d+c],[m-1,V+d],[m-1,V]],t=m-u/2-c,i=V+d+c/2+2,n={x:m-u-c,y:V+d,width:u+c,height:c},a=[[m+U,V],[m+U,V+d+c],[m+U+c,V+d+c],[m+U+1,V+d],[m+U+1,V]],r=m+U+u/2+c,s=i,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m,V+d],[m,V-c],[m-c,V-c],[m-1,V],[m-1,V+d]],t=m-u/2-c,i=V-c/2-2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m+U,V-c],[m+U+c,V-c],[m+U+1,V],[m+U+1,V+d]],r=m+U+u/2+c,s=i,l={x:m+U,y:V-c,width:u+c,height:c}):(u+=c,"right"!=this.dataRangeOption.x?(e=[[m,V],[m+U+c,V],[m+U+c,V-c],[m+U,V-1],[m,V-1]],t=m+U+u/2+c/2,i=V-c/2,n={x:m+U,y:V-c,width:u+c,height:c},a=[[m,V+d],[m+U+c,V+d],[m+U+c,V+c+d],[m+U,V+1+d],[m,V+d+1]],r=t,s=V+d+c/2,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m+U,V],[m-c,V],[m-c,V-c],[m,V-1],[m+U,V-1]],t=m-u/2-c/2,i=V-c/2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m-c,V+d],[m-c,V+c+d],[m,V+1+d],[m+U,V+d+1]],r=t,s=V+d+c/2,l={x:m-u-c,y:V+d,width:u+c,height:c})),this._startShape={style:{pointList:e,text:this._textFormat(this.dataRangeOption.max),textX:t,textY:i,textFont:p,color:this.getColor(this.dataRangeOption.max),rect:n,x:e[0][0],y:e[0][1],_x:e[0][0],_y:e[0][1]}},this._startShape.highlightStyle={strokeColor:this._startShape.style.color,lineWidth:1},this._endShape={style:{pointList:a,text:this._textFormat(this.dataRangeOption.min),textX:r,textY:s,textFont:p,color:this.getColor(this.dataRangeOption.min),rect:l,x:a[0][0],y:a[0][1],_x:a[0][0],_y:a[0][1]}},this._endShape.highlightStyle={strokeColor:this._endShape.style.color,lineWidth:1},this._startShape.zlevel=this._endShape.zlevel=this.getZlevelBase(),this._startShape.z=this._endShape.z=this.getZBase()+1,this._startShape.draggable=this._endShape.draggable=!0,this._startShape.ondrift=this._endShape.ondrift=this._ondrift,this._startShape.ondragend=this._endShape.ondragend=this._ondragend,this._startShape.style.textColor=this._endShape.style.textColor=this.dataRangeOption.textStyle.color,this._startShape.style.textAlign=this._endShape.style.textAlign="center",this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape.style.textBaseline=this._endShape.style.textBaseline="middle",this._startShape.style.width=this._endShape.style.width=0,this._startShape.style.height=this._endShape.style.height=0,this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_bulidMask:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;this._startMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:e,y:t,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._endMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:"horizontal"==this.dataRangeOption.orient?e+i:e,y:"horizontal"==this.dataRangeOption.orient?t:t+n,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._startMask=new a(this._startMask),this._endMask=new a(this._endMask),this.shapeList.push(this._startMask),this.shapeList.push(this._endMask)},_buildBackground:function(){var e=this.reformCssArray(this.dataRangeOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.dataRangeOption.borderWidth?"fill":"both",color:this.dataRangeOption.backgroundColor,strokeColor:this.dataRangeOption.borderColor,lineWidth:this.dataRangeOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this._valueTextList,t=e.length,i=this.dataRangeOption.itemGap,n=this.dataRangeOption.itemWidth,a=this.dataRangeOption.itemHeight,o=0,r=0,s=this.getFont(this.dataRangeOption.textStyle),l=h.getTextHeight("国",s),m=10;if("horizontal"==this.dataRangeOption.orient){if(this.dataRangeOption.text||this._isContinuity())o=(this._isContinuity()?n*m+i:t*(n+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?h.getTextWidth(this.dataRangeOption.text[0],s)+this._textGap:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?h.getTextWidth(this.dataRangeOption.text[1],s)+this._textGap:0);else{n+=5;for(var V=0;t>V;V++)o+=n+h.getTextWidth(e[V],s)+i}o-=i,r=Math.max(l,a)}else{var U;if(this.dataRangeOption.text||this._isContinuity())r=(this._isContinuity()?a*m+i:t*(a+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?this._textGap+l:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?this._textGap+l:0),U=Math.max(h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[0]||"",s),h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[1]||"",s)),o=Math.max(n,U);else{r=(a+i)*t,n+=5,U=0;for(var V=0;t>V;V++)U=Math.max(U,h.getTextWidth(e[V],s));o=n+U}r-=i}var d,p=this.reformCssArray(this.dataRangeOption.padding),c=this.zr.getWidth();switch(this.dataRangeOption.x){case"center":d=Math.floor((c-o)/2);break;case"left":d=p[3]+this.dataRangeOption.borderWidth;break;case"right":d=c-o-p[1]-this.dataRangeOption.borderWidth;break;default:d=this.parsePercent(this.dataRangeOption.x,c),d=isNaN(d)?0:d}var u,y=this.zr.getHeight();switch(this.dataRangeOption.y){case"top":u=p[0]+this.dataRangeOption.borderWidth;break;case"bottom":u=y-r-p[2]-this.dataRangeOption.borderWidth;break;case"center":u=Math.floor((y-r)/2);break;default:u=this.parsePercent(this.dataRangeOption.y,y),u=isNaN(u)?0:u}if(this.dataRangeOption.calculable){var g=Math.max(h.getTextWidth(this.dataRangeOption.max,s),h.getTextWidth(this.dataRangeOption.min,s))+l;"horizontal"==this.dataRangeOption.orient?(g>d&&(d=g),d+o+g>c&&(d-=g)):(l>u&&(u=l),u+r+l>y&&(u-=l))}return{x:d,y:u,width:o,height:r}},_getTextShape:function(e,t,i){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:"horizontal"==this.dataRangeOption.orient?e:this._itemGroupLocation.x+this._itemGroupLocation.width/2,y:"horizontal"==this.dataRangeOption.orient?this._itemGroupLocation.y+this._itemGroupLocation.height/2:t,color:this.dataRangeOption.textStyle.color,text:i,textFont:this.getFont(this.dataRangeOption.textStyle),textBaseline:"horizontal"==this.dataRangeOption.orient?"middle":"top",textAlign:"horizontal"==this.dataRangeOption.orient?"left":"center"},hoverable:!1}},_getItemShape:function(e,t,i,n,a){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:e,y:t+1,width:i,height:n-2,color:a},highlightStyle:{strokeColor:a,lineWidth:1}}},__ondrift:function(e,t,i){var n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;return"horizontal"==this.dataRangeOption.orient?e.style.x+t<=n?e.style.x=n:e.style.x+t+e.style.width>=n+o?e.style.x=n+o-e.style.width:e.style.x+=t:e.style.y+i<=a?e.style.y=a:e.style.y+i+e.style.height>=a+r?e.style.y=a+r-e.style.height:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(e),this.dataRangeOption.realtime&&this._dispatchDataRange(),!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,this.dataRangeOption.realtime||this._dispatchDataRange(),t.needRefresh=!1,this.isDragend=!1)},_syncShapeFromRange:function(){var e=this.dataRangeOption.range||{},t=e.start,i=e.end;if(t>i&&(t=[i,i=t][0]),this._range.end=null!=t?t:null!=this._range.end?this._range.end:0,this._range.start=null!=i?i:null!=this._range.start?this._range.start:100,100!=this._range.start||0!==this._range.end){if("horizontal"==this.dataRangeOption.orient){var n=this._fillerShape.style.width;this._fillerShape.style.x+=n*(100-this._range.start)/100,this._fillerShape.style.width=n*(this._range.start-this._range.end)/100}else{var a=this._fillerShape.style.height;this._fillerShape.style.y+=a*(100-this._range.start)/100,this._fillerShape.style.height=a*(this._range.start-this._range.end)/100}this.zr.modShape(this._fillerShape.id),this._syncHandleShape()}},_syncHandleShape:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(this._startShape.style.x=this._fillerShape.style.x,this._startMask.style.width=this._startShape.style.x-e,this._endShape.style.x=this._fillerShape.style.x+this._fillerShape.style.width,this._endMask.style.x=this._endShape.style.x,this._endMask.style.width=e+i-this._endShape.style.x,this._range.start=Math.ceil(100-(this._startShape.style.x-e)/i*100),this._range.end=Math.floor(100-(this._endShape.style.x-e)/i*100)):(this._startShape.style.y=this._fillerShape.style.y,this._startMask.style.height=this._startShape.style.y-t,this._endShape.style.y=this._fillerShape.style.y+this._fillerShape.style.height,this._endMask.style.y=this._endShape.style.y,this._endMask.style.height=t+n-this._endShape.style.y,this._range.start=Math.ceil(100-(this._startShape.style.y-t)/n*100),this._range.end=Math.floor(100-(this._endShape.style.y-t)/n*100)),this._syncShape()},_syncFillerShape:function(e){var t,i,n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(t=this._startShape.style.x,i=this._endShape.style.x,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.x=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.x=t),this._fillerShape.style.x=t,this._fillerShape.style.width=i-t,this._startMask.style.width=t-n,this._endMask.style.x=i,this._endMask.style.width=n+o-i,this._range.start=Math.ceil(100-(t-n)/o*100),this._range.end=Math.floor(100-(i-n)/o*100)):(t=this._startShape.style.y,i=this._endShape.style.y,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.y=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.y=t),this._fillerShape.style.y=t,this._fillerShape.style.height=i-t,this._startMask.style.height=t-a,this._endMask.style.y=i,this._endMask.style.height=a+r-i,this._range.start=Math.ceil(100-(t-a)/r*100),this._range.end=Math.floor(100-(i-a)/r*100)),this._syncShape()},_syncShape:function(){this._startShape.position=[this._startShape.style.x-this._startShape.style._x,this._startShape.style.y-this._startShape.style._y],this._startShape.style.text=this._textFormat(this._gap*this._range.start+this.dataRangeOption.min),this._startShape.style.color=this._startShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.start+this.dataRangeOption.min),this._endShape.position=[this._endShape.style.x-this._endShape.style._x,this._endShape.style.y-this._endShape.style._y],this._endShape.style.text=this._textFormat(this._gap*this._range.end+this.dataRangeOption.min),this._endShape.style.color=this._endShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.end+this.dataRangeOption.min),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._startMask.id),this.zr.modShape(this._endMask.id),this.zr.modShape(this._fillerShape.id),this.zr.refreshNextFrame()},_dispatchDataRange:function(){this.messageCenter.dispatch(r.EVENT.DATA_RANGE,null,{range:{start:this._range.end,end:this._range.start}},this.myChart)},__dataRangeSelected:function(e){if("single"===this.dataRangeOption.selectedMode)for(var t in this._selectedMap)this._selectedMap[t]=!1;var i=e.target._idx;this._selectedMap[i]=!this._selectedMap[i];var n,a;this._useCustomizedSplit()?(n=this._splitList[i].max,a=this._splitList[i].min):(n=(this._colorList.length-i)*this._gap+this.dataRangeOption.min,a=n-this._gap),this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED,e.event,{selected:this._selectedMap,target:i,valueMax:n,valueMin:a},this.myChart),this.messageCenter.dispatch(r.EVENT.REFRESH,null,null,this.myChart)},__dispatchHoverLink:function(e){var t,i;if(this.dataRangeOption.calculable){var n,a=this.dataRangeOption.max-this.dataRangeOption.min;n="horizontal"==this.dataRangeOption.orient?(1-(l.getX(e.event)-this._calculableLocation.x)/this._calculableLocation.width)*a:(1-(l.getY(e.event)-this._calculableLocation.y)/this._calculableLocation.height)*a,t=n-.05*a,i=n+.05*a}else if(this._useCustomizedSplit()){var o=e.target._idx;i=this._splitList[o].max,t=this._splitList[o].min}else{var o=e.target._idx;i=(this._colorList.length-o)*this._gap+this.dataRangeOption.min,t=i-this._gap}this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK,e.event,{valueMin:t,valueMax:i},this.myChart)},__onhoverlink:function(e){if(this.dataRangeOption.show&&this.dataRangeOption.hoverLink&&this._indicatorShape&&e&&null!=e.seriesIndex&&null!=e.dataIndex){var t=e.value;if(""===t||isNaN(t))return;tthis.dataRangeOption.max&&(t=this.dataRangeOption.max),this._indicatorShape.position="horizontal"==this.dataRangeOption.orient?[(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.width,0]:[0,(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.height],this._indicatorShape.style.text=this._textFormat(e.value),this._indicatorShape.style.color=this.getColor(t),this.zr.addHoverShape(this._indicatorShape)}},_textFormat:function(e,t){var i=this.dataRangeOption;if(e!==-Number.MAX_VALUE&&(e=(+e).toFixed(i.precision)),null!=t&&t!==Number.MAX_VALUE&&(t=(+t).toFixed(i.precision)),i.formatter){if("string"==typeof i.formatter)return i.formatter.replace("{value}",e===-Number.MAX_VALUE?"min":e).replace("{value2}",t===Number.MAX_VALUE?"max":t);if("function"==typeof i.formatter)return i.formatter.call(this.myChart,e,t)}return null==t?e:e===-Number.MAX_VALUE?"< "+t:t===Number.MAX_VALUE?"> "+e:e+" - "+t},_isContinuity:function(){var e=this.dataRangeOption;return!(e.splitList?e.splitList.length>0:e.splitNumber>0)||e.calculable},_useCustomizedSplit:function(){var e=this.dataRangeOption;return e.splitList&&e.splitList.length>0},_buildColorList:function(e){if(this._colorList=m.getGradientColors(this.dataRangeOption.color,Math.max((e-this.dataRangeOption.color.length)/(this.dataRangeOption.color.length-1),0)+1),this._colorList.length>e){for(var t=this._colorList.length,i=[this._colorList[0]],n=t/(e-1),a=1;e-1>a;a++)i.push(this._colorList[Math.floor(a*n)]);i.push(this._colorList[t-1]),this._colorList=i}if(this._useCustomizedSplit())for(var o=this._splitList,a=0,t=o.length;t>a;a++)o[a].color&&(this._colorList[a]=o[a].color)},_buildGap:function(e){if(!this._useCustomizedSplit()){var t=this.dataRangeOption.precision;for(this._gap=(this.dataRangeOption.max-this.dataRangeOption.min)/e;this._gap.toFixed(t)-0!=this._gap&&5>t;)t++;this.dataRangeOption.precision=t,this._gap=((this.dataRangeOption.max-this.dataRangeOption.min)/e).toFixed(t)-0}},_buildDataList:function(e){for(var t=this._valueTextList=[],i=this.dataRangeOption,n=this._useCustomizedSplit(),a=0;e>a;a++){this._selectedMap[a]=!0;var o="";if(n){var r=this._splitList[e-1-a];o=null!=r.label?r.label:null!=r.single?this._textFormat(r.single):this._textFormat(r.min,r.max)}else o=this._textFormat(a*this._gap+i.min,(a+1)*this._gap+i.min);t.unshift(o)}},_buildSplitList:function(){if(this._useCustomizedSplit())for(var e=this.dataRangeOption.splitList,t=this._splitList=[],i=0,n=e.length;n>i;i++){var a=e[i];if(!a||null==a.start&&null==a.end)throw new Error("Empty item exists in splitList!");var o={label:a.label,color:a.color};o.min=a.start,o.max=a.end,o.min>o.max&&(o.min=[o.max,o.max=o.min][0]),o.min===o.max&&(o.single=o.max),null==o.min&&(o.min=-Number.MAX_VALUE),null==o.max&&(o.max=Number.MAX_VALUE),t.push(o)}},refresh:function(e){if(e){this.option=e,this.option.dataRange=this.reformOption(this.option.dataRange);var t=this.dataRangeOption=this.option.dataRange;if(!this._useCustomizedSplit()&&(null==t.min||null==t.max))throw new Error("option.dataRange.min or option.dataRange.max has not been defined.");this.myChart.canvasSupported||(t.realtime=!1);var i=this._isContinuity()?100:this._useCustomizedSplit()?t.splitList.length:t.splitNumber;this._buildSplitList(),this._buildColorList(i),this._buildGap(i),this._buildDataList(i)}this.clear(),this._buildShape()},getColor:function(e){if(isNaN(e))return null;var t;if(this._useCustomizedSplit()){for(var i=this._splitList,n=0,a=i.length;a>n;n++)if(i[n].min<=e&&i[n].max>=e){t=n;break}}else{if(this.dataRangeOption.min==this.dataRangeOption.max)return this._colorList[0];if(ethis.dataRangeOption.max&&(e=this.dataRangeOption.max),this.dataRangeOption.calculable&&(e-(this._gap*this._range.start+this.dataRangeOption.min)>5e-5||e-(this._gap*this._range.end+this.dataRangeOption.min)<-5e-5))return null;t=this._colorList.length-Math.ceil((e-this.dataRangeOption.min)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._colorList.length),t==this._colorList.length&&t--}return this._selectedMap[t]?this._colorList[t]:null},getColorByIndex:function(e){return e>=this._colorList.length?e=this._colorList.length-1:0>e&&(e=0),this._colorList[e]},onbeforDispose:function(){this.messageCenter.unbind(r.EVENT.HOVER,this._onhoverlink)}},s.inherits(t,i),e("../component").define("dataRange",t),t}),i("echarts/util/shape/HandlePolygon",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=e("zrender/tool/util");return t.prototype={type:"handle-polygon",buildPath:function(e,t){n.prototype.buildPath(e,t)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.rect;return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?!0:!1}},a.inherits(t,i),t}),i("echarts/chart/k",["require","./base","../util/shape/Candle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Candle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.k={zlevel:0,z:2,clickable:!0,hoverable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"},label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util");return t.prototype={type:a.CHART_TYPE_K,_buildShape:function(){var e=this.series;this.selectedMap={};for(var t,i={top:[],bottom:[]},n=0,o=e.length;o>n;n++)e[n].type===a.CHART_TYPE_K&&(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,t=this.component.xAxis.getAxis(e[n].xAxisIndex),t.type===a.COMPONENT_TYPE_AXIS_CATEGORY&&i[t.getPosition()].push(n));for(var r in i)i[r].length>0&&this._buildSinglePosition(r,i[r]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){this._buildHorizontal(t,a,n);for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n=this.series,a=this.component.legend,o=[],r=0,s=0,l=e.length;l>s;s++)t=n[e[s]],i=t.name,this.selectedMap[i]=a?a.isSelected(i):!0,this.selectedMap[i]&&o.push(e[s]),r=Math.max(r,t.data.length);return{locationMap:o,maxDataLength:r}},_buildHorizontal:function(e,t,i){for(var n,a,o,r,s,l,h,m,V,U,d=this.series,p={},c=0,u=i.length;u>c;c++){n=i[c],a=d[n],o=a.xAxisIndex||0,r=this.component.xAxis.getAxis(o),h=a.barWidth||Math.floor(r.getGap()/2),U=a.barMaxWidth,U&&h>U&&(h=U),s=a.yAxisIndex||0,l=this.component.yAxis.getAxis(s),p[n]=[];for(var y=0,g=t;g>y&&null!=r.getNameByIndex(y);y++)m=a.data[y],V=this.getDataFromOption(m,"-"),"-"!==V&&4==V.length&&p[n].push([r.getCoordByIndex(y),h,l.getCoord(V[0]),l.getCoord(V[1]),l.getCoord(V[2]),l.getCoord(V[3]),y,r.getNameByIndex(y)])}this._buildKLine(e,p)},_buildKLine:function(e,t){for(var i,n,o,r,s,l,h,m,V,U,d,p,c,u,y,g,b,f=this.series,k=0,x=e.length;x>k;k++)if(b=e[k],d=f[b],u=t[b],this._isLarge(u)&&(u=this._getLargePointList(u)),d.type===a.CHART_TYPE_K&&null!=u){p=d,i=this.query(p,"itemStyle.normal.lineStyle.width"),n=this.query(p,"itemStyle.normal.lineStyle.color"),o=this.query(p,"itemStyle.normal.lineStyle.color0"),r=this.query(p,"itemStyle.normal.color"),s=this.query(p,"itemStyle.normal.color0"),l=this.query(p,"itemStyle.emphasis.lineStyle.width"),h=this.query(p,"itemStyle.emphasis.lineStyle.color"),m=this.query(p,"itemStyle.emphasis.lineStyle.color0"),V=this.query(p,"itemStyle.emphasis.color"),U=this.query(p,"itemStyle.emphasis.color0");for(var _=0,L=u.length;L>_;_++)y=u[_],c=d.data[y[6]],p=c,g=y[3]a;a++)n[a]=e[Math.floor(i/t*a)];return n},_getCandle:function(e,t,i,a,r,s,l,h,m,V,U,d,p,c,u){var y=this.series,g=y[e],b=g.data[t],f=[b,g],k={zlevel:g.zlevel,z:g.z,clickable:this.deepQuery(f,"clickable"),hoverable:this.deepQuery(f,"hoverable"),style:{x:a,y:[s,l,h,m],width:r,color:V,strokeColor:d,lineWidth:U,brushType:"both"},highlightStyle:{color:p,strokeColor:u,lineWidth:c},_seriesIndex:e};return k=this.addLabel(k,g,b,i),o.pack(k,g,e,b,t,i),k=new n(k)},getMarkCoord:function(e,t){var i=this.series[e],n=this.component.xAxis.getAxis(i.xAxisIndex),a=this.component.yAxis.getAxis(i.yAxisIndex);return["string"!=typeof t.xAxis&&n.getCoordByIndex?n.getCoordByIndex(t.xAxis||0):n.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&a.getCoordByIndex?a.getCoordByIndex(t.yAxis||0):a.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){p--,0===p&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p=0,r=0,s=this.shapeList.length;s>r;r++)if(U=this.shapeList[r]._seriesIndex,a[U]&&!a[U][3]&&"candle"===this.shapeList[r].type){if(d=o.get(this.shapeList[r],"dataIndex"),V=n[U],a[U][2]&&d===V.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[U][2]&&0===d){this.zr.delShape(this.shapeList[r].id);continue}h=this.component.xAxis.getAxis(V.xAxisIndex||0).getGap(),l=a[U][2]?h:-h,m=0,p++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}p||t&&t()}},r.inherits(t,i),e("../chart").define("k",t),t}),i("echarts/chart/pie",["require","./base","zrender/shape/Text","zrender/shape/Ring","zrender/shape/Circle","zrender/shape/Sector","zrender/shape/Polyline","../config","../util/ecData","zrender/tool/util","zrender/tool/math","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.onmouseover=function(e){var t=e.target,i=h.get(t,"seriesIndex"),n=h.get(t,"dataIndex"),a=h.get(t,"special"),o=[t.style.x,t.style.y],s=t.style.startAngle,l=t.style.endAngle,m=((l+s)/2+360)%360,V=t.highlightStyle.color,U=r.getLabel(i,n,a,o,m,V,!0);U&&r.zr.addHoverShape(U);var d=r.getLabelLine(i,n,o,t.style.r0,t.style.r,m,V,!0);d&&r.zr.addHoverShape(d)},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Ring"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Sector"),s=e("zrender/shape/Polyline"),l=e("../config");l.pie={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}};var h=e("../util/ecData"),m=e("zrender/tool/util"),V=e("zrender/tool/math"),U=e("zrender/tool/color");return t.prototype={type:l.CHART_TYPE_PIE,_buildShape:function(){var e=this.series,t=this.component.legend;this.selectedMap={},this._selected={};var i,n,r;this._selectedMode=!1;for(var s,m=0,V=e.length;V>m;m++)if(e[m].type===l.CHART_TYPE_PIE){if(e[m]=this.reformOption(e[m]),this.legendHoverLink=e[m].legendHoverLink||this.legendHoverLink,s=e[m].name||"",this.selectedMap[s]=t?t.isSelected(s):!0,!this.selectedMap[s])continue;i=this.parseCenter(this.zr,e[m].center),n=this.parseRadius(this.zr,e[m].radius),this._selectedMode=this._selectedMode||e[m].selectedMode,this._selected[m]=[],this.deepQuery([e[m],this.option],"calculable")&&(r={zlevel:e[m].zlevel,z:e[m].z,hoverable:!1,style:{x:i[0],y:i[1],r0:n[0]<=10?0:n[0]-10,r:n[1]+10,brushType:"stroke",lineWidth:1,strokeColor:e[m].calculableHolderColor||this.ecTheme.calculableHolderColor||l.calculableHolderColor}},h.pack(r,e[m],m,void 0,-1),this.setCalculable(r),r=n[0]<=10?new o(r):new a(r),this.shapeList.push(r)),this._buildSinglePie(m),this.buildMark(m)}this.addShapeList()},_buildSinglePie:function(e){for(var t,i=this.series,n=i[e],a=n.data,o=this.component.legend,r=0,s=0,l=0,h=Number.NEGATIVE_INFINITY,m=[],V=0,U=a.length;U>V;V++)t=a[V].name, -this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t]&&!isNaN(a[V].value)&&(0!==+a[V].value?r++:s++,l+=+a[V].value,h=Math.max(h,+a[V].value));if(0!==l){for(var d,p,c,u,y,g,b=100,f=n.clockWise,k=(n.startAngle.toFixed(2)-0+360)%360,x=n.minAngle||.01,_=360-x*r-.01*s,L=n.roseType,V=0,U=a.length;U>V;V++)if(t=a[V].name,this.selectedMap[t]&&!isNaN(a[V].value)){if(p=o?o.getColor(t):this.zr.getColor(V),b=a[V].value/l,d="area"!=L?f?k-b*_-(0!==b?x:.01):b*_+k+(0!==b?x:.01):f?k-360/U:360/U+k,d=d.toFixed(2)-0,b=(100*b).toFixed(2),c=this.parseCenter(this.zr,n.center),u=this.parseRadius(this.zr,n.radius),y=+u[0],g=+u[1],"radius"===L?g=a[V].value/h*(g-y)*.8+.2*(g-y)+y:"area"===L&&(g=Math.sqrt(a[V].value/h)*(g-y)+y),f){var W;W=k,k=d,d=W}this._buildItem(m,e,V,b,a[V].selected,c,y,g,k,d,p),f||(k=d)}this._autoLabelLayout(m,c,g);for(var V=0,U=m.length;U>V;V++)this.shapeList.push(m[V]);m=null}},_buildItem:function(e,t,i,n,a,o,r,s,l,m,V){var U=this.series,d=((m+l)/2+360)%360,p=this.getSector(t,i,n,a,o,r,s,l,m,V);h.pack(p,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(p);var c=this.getLabel(t,i,n,o,d,V,!1),u=this.getLabelLine(t,i,o,r,s,d,V,!1);u&&(h.pack(u,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(u)),c&&(h.pack(c,U[t],t,U[t].data[i],i,U[t].data[i].name,n),c._labelLine=u,e.push(c))},getSector:function(e,t,i,n,a,o,s,l,h,m){var d=this.series,p=d[e],c=p.data[t],u=[c,p],y=this.deepMerge(u,"itemStyle.normal")||{},g=this.deepMerge(u,"itemStyle.emphasis")||{},b=this.getItemStyleColor(y.color,e,t,c)||m,f=this.getItemStyleColor(g.color,e,t,c)||("string"==typeof b?U.lift(b,-.2):b),k={zlevel:p.zlevel,z:p.z,clickable:this.deepQuery(u,"clickable"),style:{x:a[0],y:a[1],r0:o,r:s,startAngle:l,endAngle:h,brushType:"both",color:b,lineWidth:y.borderWidth,strokeColor:y.borderColor,lineJoin:"round"},highlightStyle:{color:f,lineWidth:g.borderWidth,strokeColor:g.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(n){var x=((k.style.startAngle+k.style.endAngle)/2).toFixed(2)-0;k.style._hasSelected=!0,k.style._x=k.style.x,k.style._y=k.style.y;var _=this.query(p,"selectedOffset");k.style.x+=V.cos(x,!0)*_,k.style.y-=V.sin(x,!0)*_,this._selected[e][t]=!0}else this._selected[e][t]=!1;return this._selectedMode&&(k.onclick=this.shapeHandler.onclick),this.deepQuery([c,p,this.option],"calculable")&&(this.setCalculable(k),k.draggable=!0),(this._needLabel(p,c,!0)||this._needLabelLine(p,c,!0))&&(k.onmouseover=this.shapeHandler.onmouseover),k=new r(k)},getLabel:function(e,t,i,a,o,r,s){var l=this.series,h=l[e],U=h.data[t];if(this._needLabel(h,U,s)){var d,p,c,u=s?"emphasis":"normal",y=m.merge(m.clone(U.itemStyle)||{},h.itemStyle),g=y[u].label,b=g.textStyle||{},f=a[0],k=a[1],x=this.parseRadius(this.zr,h.radius),_="middle";g.position=g.position||y.normal.label.position,"center"===g.position?(d=f,p=k,c="center"):"inner"===g.position||"inside"===g.position?(x=(x[0]+x[1])*(g.distance||.5),d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),r="#fff",c="center"):(x=x[1]- -y[u].labelLine.length,d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),c=o>=90&&270>=o?"right":"left"),"center"!=g.position&&"inner"!=g.position&&"inside"!=g.position&&(d+="left"===c?20:-20),U.__labelX=d-("left"===c?5:-5),U.__labelY=p;var L=new n({zlevel:h.zlevel,z:h.z+1,hoverable:!1,style:{x:d,y:p,color:b.color||r,text:this.getLabelText(e,t,i,u),textAlign:b.align||c,textBaseline:b.baseline||_,textFont:this.getFont(b)},highlightStyle:{brushType:"fill"}});return L._radius=x,L._labelPosition=g.position||"outer",L._rect=L.getRect(L.style),L._seriesIndex=e,L._dataIndex=t,L}},getLabelText:function(e,t,i,n){var a=this.series,o=a[e],r=o.data[t],s=this.deepQuery([r,o],"itemStyle."+n+".label.formatter");return s?"function"==typeof s?s.call(this.myChart,{seriesIndex:e,seriesName:o.name||"",series:o,dataIndex:t,data:r,name:r.name,value:r.value,percent:i}):"string"==typeof s?(s=s.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),s=s.replace("{a0}",o.name).replace("{b0}",r.name).replace("{c0}",r.value).replace("{d0}",i)):void 0:r.name},getLabelLine:function(e,t,i,n,a,o,r,l){var h=this.series,U=h[e],d=U.data[t];if(this._needLabelLine(U,d,l)){var p=l?"emphasis":"normal",c=m.merge(m.clone(d.itemStyle)||{},U.itemStyle),u=c[p].labelLine,y=u.lineStyle||{},g=i[0],b=i[1],f=a,k=this.parseRadius(this.zr,U.radius)[1]- -u.length,x=V.cos(o,!0),_=V.sin(o,!0);return new s({zlevel:U.zlevel,z:U.z+1,hoverable:!1,style:{pointList:[[g+f*x,b-f*_],[g+k*x,b-k*_],[d.__labelX,d.__labelY]],strokeColor:y.color||r,lineType:y.type,lineWidth:y.width},_seriesIndex:e,_dataIndex:t})}},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},_autoLabelLayout:function(e,t,i){for(var n=[],a=[],o=0,r=e.length;r>o;o++)("outer"===e[o]._labelPosition||"outside"===e[o]._labelPosition)&&(e[o]._rect._y=e[o]._rect.y,e[o]._rect.xa;a++)if(e[a]._rect.y+=n,e[a].style.y+=n,e[a]._labelLine&&(e[a]._labelLine.style.pointList[1][1]+=n,e[a]._labelLine.style.pointList[2][1]+=n),a>t&&i>a+1&&e[a+1]._rect.y>e[a]._rect.y+e[a]._rect.height)return void o(a,n/2);o(i-1,n/2)}function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]._labelLine&&(e[n]._labelLine.style.pointList[1][1]-=i,e[n]._labelLine.style.pointList[2][1]-=i),!(n>0&&e[n]._rect.y>e[n-1]._rect.y+e[n-1]._rect.height));n--);}function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VALUE:0:t?Number.MAX_VALUE:0,V=0,U=e.length;U>V;V++)r=Math.abs(e[V]._rect.y-h),s=e[V]._radius-n,o=n+s>r?Math.sqrt((n+s+20)*(n+s+20)-Math.pow(e[V]._rect.y-h,2)):Math.abs(e[V]._rect.x+(a>0?0:e[V]._rect.width)-l),t&&o>=m&&(o=m-10),!t&&m>=o&&(o=m+10),e[V]._rect.x=e[V].style.x=l+o*a,e[V]._labelLine&&(e[V]._labelLine.style.pointList[2][0]=l+(o-5)*a,e[V]._labelLine.style.pointList[1][0]=l+(o-20)*a),m=o}e.sort(function(e,t){return e._rect.y-t._rect.y});for(var s,l=0,h=e.length,m=[],V=[],U=0;h>U;U++)s=e[U]._rect.y-l,0>s&&a(U,h,-s,n),l=e[U]._rect.y+e[U]._rect.height;this.zr.getHeight()-l<0&&o(h-1,l-this.zr.getHeight());for(var U=0;h>U;U++)e[U]._rect.y>=t[1]?V.push(e[U]):m.push(e[U]);r(V,!0,t,i,n),r(m,!1,t,i,n)},reformOption:function(e){var t=m.merge;return e=t(t(e||{},m.clone(this.ecTheme.pie||{})),m.clone(l.pie)),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),e.itemStyle.emphasis.label.textStyle=this.getTextStyle(e.itemStyle.emphasis.label.textStyle),this.z=e.z,this.zlevel=e.zlevel,e},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){s--,0===s&&t&&t()}for(var n=this.series,a={},o=0,r=e.length;r>o;o++)a[e[o][0]]=e[o];var s=0,h={},m={},V={},U=this.shapeList;this.shapeList=[];for(var d,p,c,u={},o=0,r=e.length;r>o;o++)d=e[o][0],p=e[o][2],c=e[o][3],n[d]&&n[d].type===l.CHART_TYPE_PIE&&(p?(c||(h[d+"_"+n[d].data.length]="delete"),u[d]=1):c?u[d]=0:(h[d+"_-1"]="delete",u[d]=-1),this._buildSinglePie(d));for(var y,g,o=0,r=this.shapeList.length;r>o;o++)switch(d=this.shapeList[o]._seriesIndex,y=this.shapeList[o]._dataIndex,g=d+"_"+y,this.shapeList[o].type){case"sector":h[g]=this.shapeList[o];break;case"text":m[g]=this.shapeList[o];break;case"polyline":V[g]=this.shapeList[o]}this.shapeList=[];for(var b,o=0,r=U.length;r>o;o++)if(d=U[o]._seriesIndex,a[d]){if(y=U[o]._dataIndex+u[d],g=d+"_"+y,b=h[g],!b)continue;if("sector"===U[o].type)"delete"!=b?(s++,this.zr.animate(U[o].id,"style").when(400,{startAngle:b.style.startAngle,endAngle:b.style.endAngle}).done(i).start()):(s++,this.zr.animate(U[o].id,"style").when(400,u[d]<0?{startAngle:U[o].style.startAngle}:{endAngle:U[o].style.endAngle}).done(i).start());else if("text"===U[o].type||"polyline"===U[o].type)if("delete"===b)this.zr.delShape(U[o].id);else switch(U[o].type){case"text":s++,b=m[g],this.zr.animate(U[o].id,"style").when(400,{x:b.style.x,y:b.style.y}).done(i).start();break;case"polyline":s++,b=V[g],this.zr.animate(U[o].id,"style").when(400,{pointList:b.style.pointList}).done(i).start()}}this.shapeList=U,s||t&&t()},onclick:function(e){var t=this.series;if(this.isClick&&e.target){this.isClick=!1;for(var i,n=e.target,a=n.style,o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),s=0,m=this.shapeList.length;m>s;s++)if(this.shapeList[s].id===n.id){if(o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),a._hasSelected)n.style.x=n.style._x,n.style.y=n.style._y,n.style._hasSelected=!1,this._selected[o][r]=!1;else{var U=((a.startAngle+a.endAngle)/2).toFixed(2)-0;n.style._hasSelected=!0,this._selected[o][r]=!0,n.style._x=n.style.x,n.style._y=n.style.y,i=this.query(t[o],"selectedOffset"),n.style.x+=V.cos(U,!0)*i,n.style.y-=V.sin(U,!0)*i}this.zr.modShape(n.id)}else this.shapeList[s].style._hasSelected&&"single"===this._selectedMode&&(o=h.get(this.shapeList[s],"seriesIndex"),r=h.get(this.shapeList[s],"dataIndex"),this.shapeList[s].style.x=this.shapeList[s].style._x,this.shapeList[s].style.y=this.shapeList[s].style._y,this.shapeList[s].style._hasSelected=!1,this._selected[o][r]=!1,this.zr.modShape(this.shapeList[s].id));this.messageCenter.dispatch(l.EVENT.PIE_SELECTED,e.event,{selected:this._selected,target:h.get(n,"name")},this.myChart),this.zr.refreshNextFrame()}}},m.inherits(t,i),e("../chart").define("pie",t),t}),i("echarts/chart/radar",["require","./base","zrender/shape/Polygon","../component/polar","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Polygon");e("../component/polar");var a=e("../config");a.radar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_RADAR,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._radarDataCounter=0;for(var e,t=this.series,i=this.component.legend,n=0,o=t.length;o>n;n++)t[n].type===a.CHART_TYPE_RADAR&&(this.serie=this.reformOption(t[n]),this.legendHoverLink=t[n].legendHoverLink||this.legendHoverLink,e=this.serie.name||"",this.selectedMap[e]=i?i.isSelected(e):!0,this.selectedMap[e]&&(this._queryTarget=[this.serie,this.option],this.deepQuery(this._queryTarget,"calculable")&&this._addDropBox(n),this._buildSingleRadar(n),this.buildMark(n)));this.addShapeList()},_buildSingleRadar:function(e){for(var t,i,n,a,o=this.component.legend,r=this.serie.data,s=this.deepQuery(this._queryTarget,"calculable"),l=0;lr;r++)n=this.getDataFromOption(t.value[r]),i="-"!=n?o.getVector(e,r,n):!1,i&&a.push(i);return a},_addSymbol:function(e,t,i,n,a){for(var r,s=this.series,l=this.component.polar,h=0,m=e.length;m>h;h++)r=this.getSymbolShape(this.deepMerge([s[n].data[i],s[n]]),n,s[n].data[i].value[h],h,l.getIndicatorText(a,h),e[h][0],e[h][1],this._symbol[this._radarDataCounter%this._symbol.length],t,"#fff","vertical"),r.zlevel=this.getZlevelBase(),r.z=this.getZBase()+1,o.set(r,"data",s[n].data[i]),o.set(r,"value",s[n].data[i].value),o.set(r,"dataIndex",i),o.set(r,"special",h),this.shapeList.push(r)},_addDataShape:function(e,t,i,a,r,l){var h=this.series,m=[i,this.serie],V=this.getItemStyleColor(this.deepQuery(m,"itemStyle.normal.color"),a,r,i),U=this.deepQuery(m,"itemStyle.normal.lineStyle.width"),d=this.deepQuery(m,"itemStyle.normal.lineStyle.type"),p=this.deepQuery(m,"itemStyle.normal.areaStyle.color"),c=this.deepQuery(m,"itemStyle.normal.areaStyle"),u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:c?"both":"stroke",color:p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:V||t,lineWidth:U,lineType:d},highlightStyle:{brushType:this.deepQuery(m,"itemStyle.emphasis.areaStyle")||c?"both":"stroke",color:this.deepQuery(m,"itemStyle.emphasis.areaStyle.color")||p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:this.getItemStyleColor(this.deepQuery(m,"itemStyle.emphasis.color"),a,r,i)||V||t,lineWidth:this.deepQuery(m,"itemStyle.emphasis.lineStyle.width")||U,lineType:this.deepQuery(m,"itemStyle.emphasis.lineStyle.type")||d}};o.pack(u,h[a],a,i,r,i.name,this.component.polar.getIndicator(h[a].polarIndex)),l&&(u.draggable=!0,this.setCalculable(u)),u=new n(u),this.shapeList.push(u)},_addDropBox:function(e){var t=this.series,i=this.deepQuery(this._queryTarget,"polarIndex");if(!this._dropBoxList[i]){var n=this.component.polar.getDropBox(i);n.zlevel=this.getZlevelBase(),n.z=this.getZBase(),this.setCalculable(n),o.pack(n,t,e,void 0,-1),this.shapeList.push(n),this._dropBoxList[i]=!0}},ondragend:function(e,t){var i=this.series;if(this.isDragend&&e.target){var n=e.target,a=o.get(n,"seriesIndex"),r=o.get(n,"dataIndex");this.component.legend&&this.component.legend.del(i[a].data[r].name),i[a].data.splice(r,1),t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},ondrop:function(t,i){var n=this.series;if(this.isDrop&&t.target){var a,r,s=t.target,l=t.dragged,h=o.get(s,"seriesIndex"),m=o.get(s,"dataIndex"),V=this.component.legend;if(-1===m)a={value:o.get(l,"value"),name:o.get(l,"name")},n[h].data.push(a),V&&V.add(a.name,l.style.color||l.style.strokeColor);else{var U=e("../util/accMath");a=n[h].data[m],V&&V.del(a.name),a.name+=this.option.nameConnector+o.get(l,"name"),r=o.get(l,"value");for(var d=0;dh;h++)t=m.polar2cartesian(s,o*Math.PI/180+r*h),l.push({vector:[t[1],-t[0]]})},_getRadius:function(){var e=this.polar[this._index];return this.parsePercent(e.radius,Math.min(this.zr.getWidth(),this.zr.getHeight())/2)},_buildSpiderWeb:function(e){var t=this.polar[e],i=t.__ecIndicator,n=t.splitArea,a=t.splitLine,o=this.getCenter(e),r=t.splitNumber,s=a.lineStyle.color,l=a.lineStyle.width,h=a.show,m=this.deepQuery(this._queryTarget,"axisLine");this._addArea(i,r,o,n,s,l,h),m.show&&this._addLine(i,o,m)},_addAxisLabel:function(t){for(var i,a,o,r,a,s,l,m,V,U,d=e("../util/accMath"),p=this.polar[t],c=this.deepQuery(this._queryTarget,"indicator"),u=p.__ecIndicator,y=this.deepQuery(this._queryTarget,"splitNumber"),g=this.getCenter(t),b=0;b=x;x+=U+1)r=h.merge({},o),l=d.accAdd(s.min,d.accMul(s.step,x)),l="function"==typeof k?k(l):"string"==typeof k?k.replace("{a}","{a0}").replace("{a0}",l):this.numAddCommas(l),r.text=l,r.x=x*a[0]/y+Math.cos(m)*V+g[0],r.y=x*a[1]/y+Math.sin(m)*V+g[1],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:r,draggable:!1,hoverable:!1}))}},_buildText:function(e){for(var t,i,a,o,r,s,l,h=this.polar[e],m=h.__ecIndicator,V=this.deepQuery(this._queryTarget,"indicator"),U=this.getCenter(e),d=0,p=0,c=0;c0?"left":Math.round(t[0])<0?"right":"center",null==o.margin?t=this._mapVector(t,U,1.1):(s=o.margin,d=t[0]>0?s:-s,p=t[1]>0?s:-s,d=0===t[0]?0:d,p=0===t[1]?0:p,t=this._mapVector(t,U,1)),i.textAlign=a,i.x=t[0]+d,i.y=t[1]+p,r=o.rotate?[o.rotate/180*Math.PI,t[0],t[1]]:[0,0,0],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:i,draggable:!1,hoverable:!1,rotation:r})))},getIndicatorText:function(e,t){return this.polar[e]&&this.polar[e].__ecIndicator[t]&&this.polar[e].__ecIndicator[t].text},getDropBox:function(e){var t,i,e=e||0,n=this.polar[e],a=this.getCenter(e),o=n.__ecIndicator,r=o.length,s=[],l=n.type;if("polygon"==l){for(var h=0;r>h;h++)t=o[h].vector,s.push(this._mapVector(t,a,1.2));i=this._getShape(s,"fill","rgba(0,0,0,0)","",1)}else"circle"==l&&(i=this._getCircle("",1,1.2,a,"fill","rgba(0,0,0,0)"));return i},_addArea:function(e,t,i,n,a,o,r){for(var s,l,h,m,V=this.deepQuery(this._queryTarget,"type"),U=0;t>U;U++)l=(t-U)/t,r&&("polygon"==V?(m=this._getPointList(e,l,i),s=this._getShape(m,"stroke","",a,o)):"circle"==V&&(s=this._getCircle(a,o,l,i,"stroke")),this.shapeList.push(s)),n.show&&(h=(t-U-1)/t,this._addSplitArea(e,n,l,h,i,U))},_getCircle:function(e,t,i,n,a,o){var s=this._getRadius();return new r({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:s*i,brushType:a,strokeColor:e,lineWidth:t,color:o},hoverable:!1,draggable:!1})},_getRing:function(e,t,i,n){var a=this._getRadius();return new s({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:t*a,r0:i*a,color:e,brushType:"fill"},hoverable:!1,draggable:!1})},_getPointList:function(e,t,i){for(var n,a=[],o=e.length,r=0;o>r;r++)n=e[r].vector,a.push(this._mapVector(n,i,t));return a},_getShape:function(e,t,i,n,a){return new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:t,color:i,strokeColor:n,lineWidth:a},hoverable:!1,draggable:!1})},_addSplitArea:function(e,t,i,n,a,o){var r,s,l,h,m,V=e.length,U=t.areaStyle.color,d=[],V=e.length,p=this.deepQuery(this._queryTarget,"type");if("string"==typeof U&&(U=[U]),s=U.length,r=U[o%s],"polygon"==p)for(var c=0;V>c;c++)d=[],l=e[c].vector,h=e[(c+1)%V].vector,d.push(this._mapVector(l,a,i)),d.push(this._mapVector(l,a,n)),d.push(this._mapVector(h,a,n)),d.push(this._mapVector(h,a,i)),m=this._getShape(d,"fill",r,"",1),this.shapeList.push(m);else"circle"==p&&(m=this._getRing(r,i,n,a),this.shapeList.push(m))},_mapVector:function(e,t,i){return[e[0]*i+t[0],e[1]*i+t[1]]},getCenter:function(e){var e=e||0;return this.parseCenter(this.zr,this.polar[e].center)},_addLine:function(e,t,i){for(var n,a,o=e.length,r=i.lineStyle,s=r.color,l=r.width,h=r.type,m=0;o>m;m++)a=e[m].vector,n=this._getLine(t[0],t[1],a[0]+t[0],a[1]+t[1],s,l,h),this.shapeList.push(n)},_getLine:function(e,t,i,n,o,r,s){return new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:e,yStart:t,xEnd:i,yEnd:n,strokeColor:o,lineWidth:r,lineType:s},hoverable:!1})},_adjustIndicatorValue:function(t){for(var i,n,a,o=this.polar[t],r=this.deepQuery(this._queryTarget,"indicator"),s=r.length,l=o.__ecIndicator,h=this._getSeriesData(t),m=o.boundaryGap,V=o.splitNumber,U=o.scale,d=e("../util/smartSteps"),p=0;s>p;p++){if("number"==typeof r[p].max)i=r[p].max,n=r[p].min||0,a={max:i,min:n};else{var c=this._findValue(h,p,V,m);n=c.min,i=c.max}!U&&n>=0&&i>=0&&(n=0),!U&&0>=n&&0>=i&&(i=0);var u=d(n,i,V,a);l[p].value={min:u.min,max:u.max,step:u.step}}},_getSeriesData:function(e){for(var t,i,n,a=[],o=this.component.legend,r=0;ro||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}var o,r,s;if(e&&0!==e.length){if(1==e.length&&(r=0),1!=e.length)for(var l=0;l0?r=o/i:o/=i),{max:o,min:r}}},getVector:function(e,t,i){e=e||0,t=t||0;var n=this.polar[e].__ecIndicator;if(!(t>=n.length)){var a,o=this.polar[e].__ecIndicator[t],r=this.getCenter(e),s=o.vector,l=o.value.max,h=o.value.min;if("undefined"==typeof i)return r;switch(i){case"min":i=h;break;case"max":i=l;break;case"center":i=(l+h)/2}return a=l!=h?(i-h)/(l-h):.5,this._mapVector(s,r,a)}},isInside:function(e){var t=this.getNearestIndex(e);return t?t.polarIndex:-1},getNearestIndex:function(e){for(var t,i,n,a,o,r,s,l,h,V=0;Va[0])return{polarIndex:V,valueIndex:Math.floor((h+l/2)/l)%s}}},getIndicator:function(e){var e=e||0;return this.polar[e].indicator},refresh:function(e){e&&(this.option=e,this.polar=this.option.polar,this.series=this.option.series),this.clear(),this._buildShape()}},h.inherits(t,i),e("../component").define("polar",t),t}),i("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function t(e,t){return[e*n.sin(t),e*n.cos(t)]}function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var n=e("zrender/tool/math");return{polar2cartesian:t,cartesian2polar:i}}),i("echarts/chart/chord",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Sector","../util/shape/Ribbon","../util/shape/Icon","zrender/shape/BezierCurve","../config","../util/ecData","zrender/tool/util","zrender/tool/vector","../data/Graph","../layout/Chord","../chart"],function(e){"use strict";function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this.scaleUnitAngle=4,this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Sector"),r=e("../util/shape/Ribbon"),s=e("../util/shape/Icon"),l=e("zrender/shape/BezierCurve"),h=e("../config");h.chord={zlevel:0,z:2,clickable:!0,radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:"circle",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:"#000",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999",opacity:.5}},emphasis:{borderWidth:0,borderColor:"#000",chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999"}}}};var m=e("../util/ecData"),V=e("zrender/tool/util"),U=e("zrender/tool/vector"),d=e("../data/Graph"),p=e("../layout/Chord");return t.prototype={type:h.CHART_TYPE_CHORD,_init:function(){var e=this.series;this.selectedMap={};for(var t={},i={},n=0,a=e.length;a>n;n++)if(e[n].type===this.type){var o=this.isSelected(e[n].name);this.selectedMap[e[n].name]=o,o&&this.buildMark(n),this.reformOption(e[n]),t[e[n].name]=e[n]}for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type)if(e[n].insertToSerie){var r=t[e[n].insertToSerie];e[n]._referenceSerie=r}else i[e[n].name]=[e[n]];for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type&&e[n].insertToSerie){for(var s=e[n]._referenceSerie;s&&s._referenceSerie;)s=s._referenceSerie;i[s.name]&&this.selectedMap[e[n].name]&&i[s.name].push(e[n])}for(var l in i)this._buildChords(i[l]);this.addShapeList()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t){var i=this._getNodeCategory(e,t);return[t,i,e]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].chordStyle]},_buildChords:function(e){for(var t=[],i=e[0],n=function(e){return e.layout.size>0},a=function(e){return function(t){return e.getEdge(t.node2,t.node1)}},o=0;oa;a++){var r=n[a];if(r&&!r.ignore){var s=this._getNodeCategory(t,r),l=s?s.name:r.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=i.addNode(r.name,r);h.rawIndex=a}}}for(var a=0,o=e.links.length;o>a;a++){var m=e.links[a],V=m.source,U=m.target;"number"==typeof V&&(V=n[V],V&&(V=V.name)),"number"==typeof U&&(U=n[U],U&&(U=U.name));var p=i.addEdge(V,U,m);p&&(p.rawIndex=a)}return i.eachNode(function(e){var i=e.data.value;if(null==i)if(i=0,t.ribbonType)for(var n=0;n0&&(p.style.brushType="both"),p.highlightStyle.lineWidth>0&&(p.highlightStyle.brushType="both"),m.pack(p,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(p),i.shape=p},this)},_buildNodeIcons:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),o=this.parseRadius(this.zr,n.radius),r=o[1];i.eachNode(function(i){var o=i.layout.startAngle,l=i.layout.endAngle,h=(o+l)/2,V=r*Math.cos(h),U=r*Math.sin(h),d=this._getNodeQueryTarget(n,i.data),p=this._getNodeCategory(n,i.data),c=this.deepQuery(d,"itemStyle.normal.color");c||(c=this.getColor(p?p.name:i.id));var u=new s({zlevel:e.zlevel,z:e.z+1,style:{x:-i.layout.size,y:-i.layout.size,width:2*i.layout.size,height:2*i.layout.size,iconType:this.deepQuery(d,"symbol"),color:c,brushType:"both",lineWidth:this.deepQuery(d,"itemStyle.normal.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.normal.borderColor")},highlightStyle:{color:this.deepQuery(d,"itemStyle.emphasis.color"),lineWidth:this.deepQuery(d,"itemStyle.emphasis.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.emphasis.borderColor")},clickable:n.clickable,position:[V+a[0],U+a[1]]});m.pack(u,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(u),i.shape=u},this)},_buildLabels:function(e,t,i,a){var o=this.query(a,"itemStyle.normal.label.rotate"),r=this.query(a,"itemStyle.normal.label.distance"),s=this.parseCenter(this.zr,a.center),l=this.parseRadius(this.zr,a.radius),h=a.clockWise,m=h?1:-1; - -i.eachNode(function(t){var i=t.layout.startAngle/Math.PI*180*m,h=t.layout.endAngle/Math.PI*180*m,V=(i*-m+h*-m)/2;V%=360,0>V&&(V+=360);var d=90>=V||V>=270;V=V*Math.PI/180;var p=[Math.cos(V),-Math.sin(V)],c=0;c=a.ribbonType?a.showScaleText?35+r:r:r+t.layout.size;var u=U.scale([],p,l[1]+c);U.add(u,u,s);var y={zlevel:e.zlevel,z:e.z+1,hoverable:!1,style:{text:null==t.data.label?t.id:t.data.label,textAlign:d?"left":"right"}};o?(y.rotation=d?V:Math.PI+V,y.style.x=d?l[1]+c:-l[1]-c,y.style.y=0,y.position=s.slice()):(y.style.x=u[0],y.style.y=u[1]),y.style.color=this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle.color")||"#000000",y.style.textFont=this.getFont(this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle")),y=new n(y),this.shapeList.push(y),t.labelShape=y},this)},_buildRibbons:function(e,t,i,n){var a=e[t],o=this.parseCenter(this.zr,n.center),s=this.parseRadius(this.zr,n.radius);i.eachEdge(function(l,h){var V,U=i.getEdge(l.node2,l.node1);if(U&&!l.shape){if(U.shape)return void(l.shape=U.shape);var d=l.layout.startAngle/Math.PI*180,p=l.layout.endAngle/Math.PI*180,c=U.layout.startAngle/Math.PI*180,u=U.layout.endAngle/Math.PI*180;V=this.getColor(1===e.length?l.layout.weight<=U.layout.weight?l.node1.id:l.node2.id:a.name);var y,g,b=this._getEdgeQueryTarget(a,l.data),f=this._getEdgeQueryTarget(a,l.data,"emphasis"),k=new r({zlevel:a.zlevel,z:a.z,style:{x:o[0],y:o[1],r:s[0],source0:d,source1:p,target0:c,target1:u,brushType:"both",opacity:this.deepQuery(b,"opacity"),color:V,lineWidth:this.deepQuery(b,"borderWidth"),strokeColor:this.deepQuery(b,"borderColor"),clockWise:n.clockWise},clickable:n.clickable,highlightStyle:{brushType:"both",opacity:this.deepQuery(f,"opacity"),lineWidth:this.deepQuery(f,"borderWidth"),strokeColor:this.deepQuery(f,"borderColor")}});l.layout.weight<=U.layout.weight?(y=U.node1,g=U.node2):(y=l.node1,g=l.node2),m.pack(k,a,t,l.data,null==l.rawIndex?h:l.rawIndex,l.data.name||y.id+"-"+g.id,y.id,g.id),this.shapeList.push(k),l.shape=k}},this)},_buildEdgeCurves:function(e,t,i,n,a){var o=e[t],r=this.parseCenter(this.zr,n.center);i.eachEdge(function(e,i){var n=a.getNodeById(e.node1.id),s=a.getNodeById(e.node2.id),h=n.shape,V=s.shape,U=this._getEdgeQueryTarget(o,e.data),d=this._getEdgeQueryTarget(o,e.data,"emphasis"),p=new l({zlevel:o.zlevel,z:o.z,style:{xStart:h.position[0],yStart:h.position[1],xEnd:V.position[0],yEnd:V.position[1],cpX1:r[0],cpY1:r[1],lineWidth:this.deepQuery(U,"width"),strokeColor:this.deepQuery(U,"color"),opacity:this.deepQuery(U,"opacity")},highlightStyle:{lineWidth:this.deepQuery(d,"width"),strokeColor:this.deepQuery(d,"color"),opacity:this.deepQuery(d,"opacity")}});m.pack(p,o,t,e.data,null==e.rawIndex?i:e.rawIndex,e.data.name||e.node1.id+"-"+e.node2.id,e.node1.id,e.node2.id),this.shapeList.push(p),e.shape=p},this)},_buildScales:function(e,t,i){var o,r,s=e.clockWise,l=this.parseCenter(this.zr,e.center),h=this.parseRadius(this.zr,e.radius),m=s?1:-1,V=0,d=-(1/0);e.showScaleText&&(i.eachNode(function(e){var t=e.data.value;t>d&&(d=t),V+=t}),d>1e10?(o="b",r=1e-9):d>1e7?(o="m",r=1e-6):d>1e4?(o="k",r=.001):(o="",r=1));var p=V/(360-e.padding);i.eachNode(function(t){for(var i=t.layout.startAngle/Math.PI*180,V=t.layout.endAngle/Math.PI*180,d=i;;){if(s&&d>V||!s&&V>d)break;var c=d/180*Math.PI,u=[Math.cos(c),Math.sin(c)],y=U.scale([],u,h[1]+1);U.add(y,y,l);var g=U.scale([],u,h[1]+this.scaleLineLength);U.add(g,g,l);var b=new a({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{xStart:y[0],yStart:y[1],xEnd:g[0],yEnd:g[1],lineCap:"round",brushType:"stroke",strokeColor:"#666",lineWidth:1}});this.shapeList.push(b),d+=m*this.scaleUnitAngle}if(e.showScaleText)for(var f=i,k=5*p*this.scaleUnitAngle,x=0;;){if(s&&f>V||!s&&V>f)break;var c=f;c%=360,0>c&&(c+=360);var _=90>=c||c>=270,L=new n({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{x:_?h[1]+this.scaleLineLength+4:-h[1]-this.scaleLineLength-4,y:0,text:Math.round(10*x)/10+o,textAlign:_?"left":"right"},position:l.slice(),rotation:_?[-c/180*Math.PI,0,0]:[-(c+180)/180*Math.PI,0,0]});this.shapeList.push(L),x+=k*r,f+=m*this.scaleUnitAngle*5}},this)},refresh:function(e){if(e&&(this.option=e,this.series=e.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this.backupShapeList(),this._init()},reformOption:function(e){var t=V.merge;e=t(t(e||{},this.ecTheme.chord),h.chord),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),this.z=e.z,this.zlevel=e.zlevel}},V.inherits(t,i),e("../chart").define("chord",t),t}),i("echarts/util/shape/Ribbon",["require","zrender/shape/Base","zrender/shape/util/PathProxy","zrender/tool/util","zrender/tool/area"],function(e){function t(e){i.call(this,e),this._pathProxy=new n}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/PathProxy"),a=e("zrender/tool/util"),o=e("zrender/tool/area");return t.prototype={type:"ribbon",buildPath:function(e,t){var i=t.clockWise||!1,n=this._pathProxy;n.begin(e);var a=t.x,o=t.y,r=t.r,s=t.source0/180*Math.PI,l=t.source1/180*Math.PI,h=t.target0/180*Math.PI,m=t.target1/180*Math.PI,V=a+Math.cos(s)*r,U=o+Math.sin(s)*r,d=a+Math.cos(l)*r,p=o+Math.sin(l)*r,c=a+Math.cos(h)*r,u=o+Math.sin(h)*r,y=a+Math.cos(m)*r,g=o+Math.sin(m)*r;n.moveTo(V,U),n.arc(a,o,t.r,s,l,!i),n.bezierCurveTo(.7*(a-d)+d,.7*(o-p)+p,.7*(a-c)+c,.7*(o-u)+u,c,u),(t.source0!==t.target0||t.source1!==t.target1)&&(n.arc(a,o,t.r,h,m,!i),n.bezierCurveTo(.7*(a-y)+y,.7*(o-g)+g,.7*(a-V)+V,.7*(o-U)+U,V,U))},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getRect(this.style);return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?o.isInsidePath(this._pathProxy.pathCommands,0,"fill",e,t):void 0}},a.inherits(t,i),t}),i("echarts/data/Graph",["require","zrender/tool/util"],function(e){var t=e("zrender/tool/util"),i=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={}};i.prototype.isDirected=function(){return this._directed},i.prototype.addNode=function(e,t){if(this._nodesMap[e])return this._nodesMap[e];var n=new i.Node(e,t);return this.nodes.push(n),this._nodesMap[e]=n,n},i.prototype.getNodeById=function(e){return this._nodesMap[e]},i.prototype.addEdge=function(e,t,n){if("string"==typeof e&&(e=this._nodesMap[e]),"string"==typeof t&&(t=this._nodesMap[t]),e&&t){var a=e.id+"-"+t.id;if(this._edgesMap[a])return this._edgesMap[a];var o=new i.Edge(e,t,n);return this._directed&&(e.outEdges.push(o),t.inEdges.push(o)),e.edges.push(o),e!==t&&t.edges.push(o),this.edges.push(o),this._edgesMap[a]=o,o}},i.prototype.removeEdge=function(e){var i=e.node1,n=e.node2,a=i.id+"-"+n.id;this._directed&&(i.outEdges.splice(t.indexOf(i.outEdges,e),1),n.inEdges.splice(t.indexOf(n.inEdges,e),1)),i.edges.splice(t.indexOf(i.edges,e),1),i!==n&&n.edges.splice(t.indexOf(n.edges,e),1),delete this._edgesMap[a],this.edges.splice(t.indexOf(this.edges,e),1)},i.prototype.getEdge=function(e,t){return"string"!=typeof e&&(e=e.id),"string"!=typeof t&&(t=t.id),this._directed?this._edgesMap[e+"-"+t]:this._edgesMap[e+"-"+t]||this._edgesMap[t+"-"+e]},i.prototype.removeNode=function(e){if("string"!=typeof e||(e=this._nodesMap[e])){delete this._nodesMap[e.id],this.nodes.splice(t.indexOf(this.nodes,e),1);for(var i=0;in;)e.call(t,this.nodes[n],n)?n++:(this.removeNode(this.nodes[n]),i--)},i.prototype.filterEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;)e.call(t,this.edges[n],n)?n++:(this.removeEdge(this.edges[n]),i--)},i.prototype.eachNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;n++)this.nodes[n]&&e.call(t,this.nodes[n],n)},i.prototype.eachEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;n++)this.edges[n]&&e.call(t,this.edges[n],n)},i.prototype.clear=function(){this.nodes.length=0,this.edges.length=0,this._nodesMap={},this._edgesMap={}},i.prototype.breadthFirstTraverse=function(e,t,i,n){if("string"==typeof t&&(t=this._nodesMap[t]),t){var a="edges";"out"===i?a="outEdges":"in"===i&&(a="inEdges");for(var o=0;or;r++){var s=o.addNode(e[r].id,e[r]);s.data.value=0,n&&(s.data.outValue=s.data.inValue=0)}for(var r=0;a>r;r++)for(var l=0;a>l;l++){var h=t[r][l];n&&(o.nodes[r].data.outValue+=h,o.nodes[l].data.inValue+=h),o.nodes[r].data.value+=h,o.nodes[l].data.value+=h}for(var r=0;a>r;r++)for(var l=r;a>l;l++){var h=t[r][l];if(0!==h){var m=o.nodes[r],V=o.nodes[l],U=o.addEdge(m,V,{});if(U.data.weight=h,r!==l&&n&&t[l][r]){var d=o.addEdge(V,m,{});d.data.weight=t[l][r]}}}return o}},i}),i("echarts/layout/Chord",["require"],function(){var e=function(e){e=e||{},this.sort=e.sort||null,this.sortSub=e.sortSub||null,this.padding=.05,this.startAngle=e.startAngle||0,this.clockWise=null==e.clockWise?!1:e.clockWise,this.center=e.center||[0,0],this.directed=!0};e.prototype.run=function(e){e instanceof Array||(e=[e]);var n=e.length;if(n){for(var a=e[0],o=a.nodes.length,r=[],s=0,l=0;o>l;l++){var h=a.nodes[l],m={size:0,subGroups:[],node:h};r.push(m);for(var V=0,U=0;Ul;l++){var m=r[l];m.node.layout.startAngle=f,m.node.layout.endAngle=f+k*m.size*b,m.node.layout.subGroups=[];for(var u=0;un;n++){var o=i[n];if(o.type===d.CHART_TYPE_FORCE){if(i[n]=this.reformOption(i[n]),e=i[n].name||"",this.selectedMap[e]=t?t.isSelected(e):!0,!this.selectedMap[e])continue;this.buildMark(n),this._initSerie(o,n);break}}this.animationEffect()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t,i){i=i||"normal";var n=this._getNodeCategory(e,t)||{};return[t.itemStyle&&t.itemStyle[i],n&&n.itemStyle&&n.itemStyle[i],e.itemStyle[i].nodeStyle]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].linkStyle]},_initSerie:function(e,t){this._temperature=1,e.matrix?this._graph=this._getSerieGraphFromDataMatrix(e):e.links&&(this._graph=this._getSerieGraphFromNodeLinks(e)),this._buildLinkShapes(e,t),this._buildNodeShapes(e,t);var i=e.roam===!0||"move"===e.roam,n=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:i,zoomable:n}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(d.EFFECT_ZLEVEL,{panable:i,zoomable:n}),this._initLayout(e),this._step()},_getSerieGraphFromDataMatrix:function(e){for(var t=[],i=0,n=[],a=0;an;n++){var o=i[n];if(o&&!o.ignore){var r=this._getNodeCategory(e,o),l=r?r.name:o.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=t.addNode(o.name,o);h.rawIndex=n}}}for(var n=0,a=e.links.length;a>n;n++){var m=e.links[n],V=m.source,U=m.target;"number"==typeof V&&(V=i[V],V&&(V=V.name)),"number"==typeof U&&(U=i[U],U&&(U=U.name));var d=t.addEdge(V,U,m);d&&(d.rawIndex=n)}return t.eachNode(function(e){var t=e.data.value;if(null==t){t=0;for(var i=0;ih;h++){var m=t.nodes[h];l=Math.max(m.layout.size,l),s=Math.min(m.layout.size,s)}for(var V=l-s,h=0;i>h;h++){var m=t.nodes[h];V>0?(m.layout.size=(m.layout.size-s)*(a-n)/V+n,m.layout.mass=m.layout.size/a):(m.layout.size=(a-n)/2,m.layout.mass=.5)}for(var h=0;i>h;h++){var m=t.nodes[h];if("undefined"!=typeof this.__nodePositionMap[m.id])m.layout.position=y.create(),y.copy(m.layout.position,this.__nodePositionMap[m.id]);else if("undefined"!=typeof m.data.initial)m.layout.position=y.create(),y.copy(m.layout.position,m.data.initial);else{var U=this._layout.center,d=Math.min(this._layout.width,this._layout.height);m.layout.position=o(U[0],U[1],.8*d)}var p=m.shape.style,c=m.layout.size;p.width=p.width||2*c,p.height=p.height||2*c,p.x=-p.width/2,p.y=-p.height/2,y.copy(m.shape.position,m.layout.position)}i=t.edges.length,l=-(1/0);for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight>l&&(l=u.layout.weight)}for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight/=l}this._layout.init(t,e.useWorker)},_buildNodeShapes:function(e,t){var i=this._graph,n=this.query(e,"categories");i.eachNode(function(i){var a=this._getNodeCategory(e,i.data),o=[i.data,a,e],r=this._getNodeQueryTarget(e,i.data),s=this._getNodeQueryTarget(e,i.data,"emphasis"),l=new U({style:{x:0,y:0,color:this.deepQuery(r,"color"),brushType:"both",strokeColor:this.deepQuery(r,"strokeColor")||this.deepQuery(r,"borderColor"),lineWidth:this.deepQuery(r,"lineWidth")||this.deepQuery(r,"borderWidth")},highlightStyle:{color:this.deepQuery(s,"color"),strokeColor:this.deepQuery(s,"strokeColor")||this.deepQuery(s,"borderColor"),lineWidth:this.deepQuery(s,"lineWidth")||this.deepQuery(s,"borderWidth")},clickable:e.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()});l.style.color||(l.style.color=this.getColor(a?a.name:i.id)),l.style.iconType=this.deepQuery(o,"symbol");var h=this.deepQuery(o,"symbolSize")||0;"number"==typeof h&&(h=[h,h]),l.style.width=2*h[0],l.style.height=2*h[1],l.style.iconType.match("image")&&(l.style.image=l.style.iconType.replace(new RegExp("^image:\\/\\/"),""),l=new V({style:l.style,highlightStyle:l.highlightStyle,clickable:l.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(o,"itemStyle.normal.label.show")&&(l.style.text=null==i.data.label?i.id:i.data.label,l.style.textPosition=this.deepQuery(o,"itemStyle.normal.label.position"),l.style.textColor=this.deepQuery(o,"itemStyle.normal.label.textStyle.color"),l.style.textFont=this.getFont(this.deepQuery(o,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(o,"itemStyle.emphasis.label.show")&&(l.highlightStyle.textPosition=this.deepQuery(o,"itemStyle.emphasis.label.position"),l.highlightStyle.textColor=this.deepQuery(o,"itemStyle.emphasis.label.textStyle.color"),l.highlightStyle.textFont=this.getFont(this.deepQuery(o,"itemStyle.emphasis.label.textStyle")||{})),this.deepQuery(o,"draggable")&&(this.setCalculable(l),l.dragEnableTime=0,l.draggable=!0,l.ondragstart=this.shapeHandler.ondragstart,l.ondragover=null);var m="";if("undefined"!=typeof i.category){var a=n[i.category];m=a&&a.name||""}p.pack(l,e,t,i.data,i.rawIndex,i.data.name||"",i.category),this.shapeList.push(l),this.zr.addShape(l),i.shape=l},this)},_buildLinkShapes:function(e,t){for(var i=this._graph,n=i.edges.length,a=0;n>a;a++){var o=i.edges[a],r=o.data,s=o.node1,l=o.node2,V=i.getEdge(l,s),d=this._getEdgeQueryTarget(e,r),u=this.deepQuery(d,"type");e.linkSymbol&&"none"!==e.linkSymbol&&(u="line");var y="line"===u?h:m,g=new y({style:{xStart:0,yStart:0,xEnd:0,yEnd:0},clickable:this.query(e,"clickable"),highlightStyle:{},zlevel:this.getZlevelBase(),z:this.getZBase()});if(V&&V.shape&&(g.style.offset=4,V.shape.style.offset=4),c.merge(g.style,this.query(e,"itemStyle.normal.linkStyle"),!0),c.merge(g.highlightStyle,this.query(e,"itemStyle.emphasis.linkStyle"),!0),"undefined"!=typeof r.itemStyle&&(r.itemStyle.normal&&c.merge(g.style,r.itemStyle.normal,!0),r.itemStyle.emphasis&&c.merge(g.highlightStyle,r.itemStyle.emphasis,!0)),g.style.lineWidth=g.style.lineWidth||g.style.width,g.style.strokeColor=g.style.strokeColor||g.style.color,g.highlightStyle.lineWidth=g.highlightStyle.lineWidth||g.highlightStyle.width,g.highlightStyle.strokeColor=g.highlightStyle.strokeColor||g.highlightStyle.color,p.pack(g,e,t,o.data,null==o.rawIndex?a:o.rawIndex,o.data.name||s.id+" - "+l.id,s.id,l.id),this.shapeList.push(g),this.zr.addShape(g),o.shape=g,e.linkSymbol&&"none"!==e.linkSymbol){var b=new U({style:{x:-5,y:0,width:e.linkSymbolSize[0],height:e.linkSymbolSize[1],iconType:e.linkSymbol,brushType:"fill",color:g.style.strokeColor},highlightStyle:{brushType:"fill"},position:[0,0],rotation:0,zlevel:this.getZlevelBase(),z:this.getZBase()});g._symbolShape=b,this.shapeList.push(b),this.zr.addShape(b)}}},_updateLinkShapes:function(){for(var e=y.create(),t=y.create(),i=y.create(),n=y.create(),a=this._graph.edges,o=0,r=a.length;r>o;o++){var s=a[o],l=s.node1.shape,h=s.node2.shape;y.copy(i,l.position),y.copy(n,h.position);var m=s.shape.style;if(y.sub(e,i,n),y.normalize(e,e),m.offset?(t[0]=e[1],t[1]=-e[0],y.scaleAndAdd(i,i,t,m.offset),y.scaleAndAdd(n,n,t,m.offset)):"bezier-curve"===s.shape.type&&(m.cpX1=(i[0]+n[0])/2-(n[1]-i[1])/4,m.cpY1=(i[1]+n[1])/2-(i[0]-n[0])/4),m.xStart=i[0],m.yStart=i[1],m.xEnd=n[0],m.yEnd=n[1],s.shape.modSelf(),s.shape._symbolShape){var V=s.shape._symbolShape;y.copy(V.position,n),y.scaleAndAdd(V.position,V.position,e,h.style.width/2+2);var U=Math.atan2(e[1],e[0]);V.rotation=Math.PI/2-U,V.modSelf()}}},_syncNodePositions:function(){for(var e=this._graph,t=0;t.01?this._layout.step(this._steps):this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END,{},{},this.myChart)},refresh:function(e){if(e&&(this.option=e,this.series=this.option.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this._init()},dispose:function(){this.clear(),this.shapeList=null,this.effectList=null,this._layout.dispose(),this._layout=null,this.__nodePositionMap={}},getPosition:function(){var e=[];return this._graph.eachNode(function(t){t.layout&&e.push({name:t.data.name,position:Array.prototype.slice.call(t.layout.position)})}),e}},c.inherits(t,r),e("../chart").define("force",t),t}),i("echarts/layout/Force",["require","./forceLayoutWorker","zrender/tool/vector"],function(e){function t(){if("undefined"!=typeof Worker&&"undefined"!=typeof Blob)try{var e=new Blob([n.getWorkerCode()]);i=window.URL.createObjectURL(e)}catch(t){i=""}return i}var i,n=e("./forceLayoutWorker"),a=e("zrender/tool/vector"),o=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r="undefined"==typeof Float32Array?Array:Float32Array,s=function(e){"undefined"==typeof i&&t(),e=e||{},this.width=e.width||500,this.height=e.height||500,this.center=e.center||[this.width/2,this.height/2],this.ratioScaling=e.ratioScaling||!1,this.scaling=e.scaling||1,this.gravity="undefined"!=typeof e.gravity?e.gravity:1,this.large=e.large||!1,this.preventNodeOverlap=e.preventNodeOverlap||!1,this.preventNodeEdgeOverlap=e.preventNodeEdgeOverlap||!1,this.maxSpeedIncrease=e.maxSpeedIncrease||1,this.onupdate=e.onupdate||function(){},this.temperature=e.temperature||1,this.coolDown=e.coolDown||.99,this._layout=null,this._layoutWorker=null;var n=this,a=this._$onupdate;this._$onupdate=function(e){a.call(n,e)}};return s.prototype.updateConfig=function(){var e=this.width,t=this.height,i=Math.min(e,t),n={center:this.center,width:this.ratioScaling?e:i,height:this.ratioScaling?t:i,scaling:this.scaling||1,gravity:this.gravity||1,barnesHutOptimize:this.large,preventNodeOverlap:this.preventNodeOverlap,preventNodeEdgeOverlap:this.preventNodeEdgeOverlap,maxSpeedIncrease:this.maxSpeedIncrease};if(this._layoutWorker)this._layoutWorker.postMessage({cmd:"updateConfig",config:n});else for(var a in n)this._layout[a]=n[a]},s.prototype.init=function(e,t){if(this._layoutWorker&&(this._layoutWorker.terminate(),this._layoutWorker=null),i&&t)try{this._layoutWorker||(this._layoutWorker=new Worker(i),this._layoutWorker.onmessage=this._$onupdate),this._layout=null}catch(a){this._layoutWorker=null,this._layout||(this._layout=new n)}else this._layout||(this._layout=new n);this.temperature=1,this.graph=e;for(var o=e.nodes.length,s=new r(2*o),l=new r(o),h=new r(o),m=0;o>m;m++){var V=e.nodes[m];s[2*m]=V.layout.position[0],s[2*m+1]=V.layout.position[1],l[m]="undefined"==typeof V.layout.mass?1:V.layout.mass,h[m]="undefined"==typeof V.layout.size?1:V.layout.size,V.layout.__index=m}o=e.edges.length;for(var U=new r(2*o),d=new r(o),m=0;o>m;m++){var p=e.edges[m];U[2*m]=p.node1.layout.__index,U[2*m+1]=p.node2.layout.__index,d[m]=p.layout.weight||1}this._layoutWorker?this._layoutWorker.postMessage({cmd:"init",nodesPosition:s,nodesMass:l,nodesSize:h,edges:U,edgesWeight:d}):(this._layout.initNodes(s,l,h),this._layout.initEdges(U,d)),this.updateConfig()},s.prototype.step=function(e){var t=this.graph.nodes;if(this._layoutWorker){for(var i=new r(2*t.length),n=0;nn;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;nn;n++)this._layout.temperature=this.temperature,this._layout.update(),this.temperature*=this.coolDown}},s.prototype._$onupdate=function(e){if(this._layoutWorker){for(var t=new Float32Array(e.data),i=0;i0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,i){return e[0]=t,e[1]=i,e}}:e("zrender/tool/vector");var l="undefined"==typeof Float32Array?Array:Float32Array;if(t.prototype.beforeUpdate=function(){for(var e=0;e=e&&this.bbox[1]<=t&&this.bbox[3]>=t},t.prototype.setBBox=function(e,t,i,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n,this.size=(i-e+n-t)/2},t.prototype._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new t,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},t.prototype._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),i=this.bbox;if(!t){var n=(i[0]+i[2])/2,a=(i[1]+i[3])/2,o=(i[2]-i[0])/2,r=(i[3]-i[1])/2,s=e.position[0]>=n?1:0,l=e.position[1]>=a?1:0,t=this._newSubRegion();t.setBBox(s*o+i[0],l*r+i[1],(s+1)*o+i[0],(l+1)*r+i[1])}t.addNode(e)},t.prototype._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=r.create());var t=this.centerOfMass[0]*this.mass,i=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,i+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=i/this.mass},a.prototype.nodeToNodeRepulsionFactor=function(e,t,i){return i*i*e/t},a.prototype.edgeToNodeRepulsionFactor=function(e,t,i){return i*e/t},a.prototype.attractionFactor=function(e,t,i){return e*t/i},a.prototype.initNodes=function(e,t,n){this.temperature=1;var a=e.length/2;this.nodes.length=0;for(var o="undefined"!=typeof n,r=0;a>r;r++){var s=new i;s.position[0]=e[2*r],s.position[1]=e[2*r+1],s.mass=t[r],o&&(s.size=n[r]),this.nodes.push(s)}this._massArr=t,o&&(this._sizeArr=n)},a.prototype.initEdges=function(e,t){var i=e.length/2;this.edges.length=0;for(var a="undefined"!=typeof t,o=0;i>o;o++){var r=e[2*o],s=e[2*o+1],l=this.nodes[r],h=this.nodes[s];if(l&&h){l.outDegree++,h.inDegree++;var m=new n(l,h);a&&(m.weight=t[o]),this.edges.push(m)}}},a.prototype.update=function(){var e=this.nodes.length;if(this.updateBBox(),this._k=.4*this.scaling*Math.sqrt(this.width*this.height/e),this.barnesHutOptimize){this._rootRegion.setBBox(this.bbox[0],this.bbox[1],this.bbox[2],this.bbox[3]),this._rootRegion.beforeUpdate();for(var t=0;e>t;t++)this._rootRegion.addNode(this.nodes[t]);this._rootRegion.afterUpdate()}else{var i=0,n=this._rootRegion.centerOfMass;r.set(n,0,0);for(var t=0;e>t;t++){var a=this.nodes[t];i+=a.mass,r.scaleAndAdd(n,n,a.position,a.mass); - -}i>0&&r.scale(n,n,1/i)}this.updateForce(),this.updatePosition()},a.prototype.updateForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];r.copy(i.forcePrev,i.force),r.copy(i.speedPrev,i.speed),r.set(i.force,0,0)}this.updateNodeNodeForce(),this.gravity>0&&this.updateGravityForce(),this.updateEdgeForce(),this.preventNodeEdgeOverlap&&this.updateNodeEdgeForce()},a.prototype.updatePosition=function(){for(var e=this.nodes.length,t=r.create(),i=0;e>i;i++){var n=this.nodes[i],a=n.speed;r.scale(n.force,n.force,1/30);var o=r.len(n.force)+.1,s=Math.min(o,500)/o;r.scale(n.force,n.force,s),r.add(a,a,n.force),r.scale(a,a,this.temperature),r.sub(t,a,n.speedPrev);var l=r.len(t);if(l>0){r.scale(t,t,1/l);var h=r.len(n.speedPrev);h>0&&(l=Math.min(l/h,this.maxSpeedIncrease)*h,r.scaleAndAdd(a,n.speedPrev,t,l))}var m=r.len(a),s=Math.min(m,100)/(m+.1);r.scale(a,a,s),r.add(n.position,n.position,a)}},a.prototype.updateNodeNodeForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];if(this.barnesHutOptimize)this.applyRegionToNodeRepulsion(this._rootRegion,i);else for(var n=t+1;e>n;n++){var a=this.nodes[n];this.applyNodeToNodeRepulsion(i,a,!1)}}},a.prototype.updateGravityForce=function(){for(var e=0;ethis.barnesHutTheta*t.size*t.size){var a=this._k*this._k*(i.mass+t.mass)/(n+1);r.scaleAndAdd(i.force,i.force,e,2*a)}else for(var o=0;o0?o=this.nodeToNodeRepulsionFactor(s,l,this._k):0>=l&&(o=this._k*this._k*10*s)):o=this.nodeToNodeRepulsionFactor(s,l,this._k),n||r.scaleAndAdd(t.force,t.force,e,2*o),r.scaleAndAdd(i.force,i.force,e,2*-o)}}}}(),a.prototype.applyEdgeAttraction=function(){var e=r.create();return function(t){var i=t.node1,n=t.node2;r.sub(e,i.position,n.position);var a,o=r.len(e);a=0===this.edgeWeightInfluence?1:1==this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;if(!(this.preventOverlap&&(o=o-i.size-n.size,0>=o))){var s=this.attractionFactor(a,o,this._k);r.scaleAndAdd(i.force,i.force,e,-s),r.scaleAndAdd(n.force,n.force,e,s)}}}(),a.prototype.applyNodeGravity=function(){var e=r.create();return function(t){r.sub(e,this.center,t.position),this.width>this.height?e[1]*=this.width/this.height:e[0]*=this.height/this.width;var i=r.len(e)/100;this.strongGravity?r.scaleAndAdd(t.force,t.force,e,i*this.gravity*t.mass):r.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(i+1))}}(),a.prototype.applyEdgeToNodeRepulsion=function(){var e=r.create(),t=r.create(),i=r.create();return function(n,a){var o=n.node1,s=n.node2;if(o!==a&&s!==a){r.sub(e,s.position,o.position),r.sub(t,a.position,o.position);var l=r.len(e);r.scale(e,e,1/l);var h=r.dot(e,t);if(!(0>h||h>l)){r.scaleAndAdd(i,o.position,e,h);var m=r.dist(i,a.position)-a.size,V=this.edgeToNodeRepulsionFactor(a.mass,Math.max(m,.1),100);r.sub(e,a.position,i),r.normalize(e,e),r.scaleAndAdd(a.force,a.force,e,V),r.scaleAndAdd(o.force,o.force,e,-V),r.scaleAndAdd(s.force,s.force,e,-V)}}}}(),a.prototype.updateBBox=function(){for(var e=1/0,t=1/0,i=-(1/0),n=-(1/0),a=0;an;n++){var o=h.nodes[n];o.position[0]=t[2*n],o.position[1]=t[2*n+1]}}else switch(e.data.cmd){case"init":h||(h=new a),h.initNodes(e.data.nodesPosition,e.data.nodesMass,e.data.nodesSize),h.initEdges(e.data.edges,e.data.edgesWeight);break;case"updateConfig":if(h)for(var r in e.data.config)h[r]=e.data.config[r];break;case"update":var s=e.data.steps;if(h){var i=h.nodes.length,t=new Float32Array(2*i);h.temperature=e.data.temperature;for(var n=0;s>n;n++)h.update(),h.temperature*=e.data.coolDown;for(var n=0;i>n;n++){var o=h.nodes[n];t[2*n]=o.position[0],t[2*n+1]=o.position[1]}self.postMessage(t.buffer,[t.buffer])}else{var l=new Float32Array;self.postMessage(l.buffer,[l.buffer])}}}}return a}),i("echarts/chart/map",["require","./base","zrender/shape/Text","zrender/shape/Path","zrender/shape/Circle","zrender/shape/Rectangle","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Ellipse","zrender/shape/Image","../component/dataRange","../component/roamController","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/event","../util/mapData/params","../util/mapData/textFixed","../util/mapData/geoCoord","../util/projection/svg","../util/projection/normal","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=function(e){return r.__onmousewheel(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onroamcontroller=function(e){return r.__onroamcontroller(e)},r._ondrhoverlink=function(e){return r.__ondrhoverlink(e)},this._isAlive=!0,this._selectedMode={},this._activeMapType={},this._clickable={},this._hoverable={},this._showLegendSymbol={},this._selected={},this._mapTypeMap={},this._mapDataMap={},this._nameMap={},this._specialArea={},this._refreshDelayTicket,this._mapDataRequireCounter,this._markAnimation=!1,this._hoverLinkMap={},this._roamMap={},this._scaleLimitMap={},this._mx,this._my,this._mousedown,this._justMove,this._curMapType,this.refresh(a),this.zr.on(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.on(c.EVENT.MOUSEDOWN,this._onmousedown),t.bind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),t.bind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Path"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Line"),l=e("zrender/shape/Polygon"),h=e("zrender/shape/Ellipse"),m=e("zrender/shape/Image");e("../component/dataRange"),e("../component/roamController");var V=e("../layer/heatmap"),U=e("../config");U.map={zlevel:0,z:2,mapType:"china",showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}};var d=e("../util/ecData"),p=e("zrender/tool/util"),c=e("zrender/config"),u=e("zrender/tool/event"),y=e("../util/mapData/params").params,g=e("../util/mapData/textFixed"),b=e("../util/mapData/geoCoord");return t.prototype={type:U.CHART_TYPE_MAP,_buildShape:function(){var e=this.series;this.selectedMap={},this._activeMapType={};for(var t,i,n,a,o=this.component.legend,r={},s={},l={},h={},m=0,V=e.length;V>m;m++)if(e[m].type==U.CHART_TYPE_MAP&&(e[m]=this.reformOption(e[m]),i=e[m].mapType,s[i]=s[i]||{},s[i][m]=!0,l[i]=l[i]||e[m].mapValuePrecision,this._scaleLimitMap[i]=this._scaleLimitMap[i]||{},e[m].scaleLimit&&p.merge(this._scaleLimitMap[i],e[m].scaleLimit,!0),this._roamMap[i]=e[m].roam||this._roamMap[i],(null==this._hoverLinkMap[i]||this._hoverLinkMap[i])&&(this._hoverLinkMap[i]=e[m].dataRangeHoverLink),this._nameMap[i]=this._nameMap[i]||{},e[m].nameMap&&p.merge(this._nameMap[i],e[m].nameMap,!0),this._activeMapType[i]=!0,e[m].textFixed&&p.merge(g,e[m].textFixed,!0),e[m].geoCoord&&p.merge(b,e[m].geoCoord,!0),this._selectedMode[i]=this._selectedMode[i]||e[m].selectedMode,(null==this._hoverable[i]||this._hoverable[i])&&(this._hoverable[i]=e[m].hoverable),(null==this._clickable[i]||this._clickable[i])&&(this._clickable[i]=e[m].clickable),(null==this._showLegendSymbol[i]||this._showLegendSymbol[i])&&(this._showLegendSymbol[i]=e[m].showLegendSymbol),h[i]=h[i]||e[m].mapValueCalculation,t=e[m].name,this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t])){r[i]=r[i]||{},n=e[m].data;for(var d=0,c=n.length;c>d;d++){a=this._nameChange(i,n[d].name),r[i][a]=r[i][a]||{seriesIndex:[],valueMap:{},precision:0};for(var u in n[d])"value"!=u?r[i][a][u]=n[d][u]:isNaN(n[d].value)||(null==r[i][a].value&&(r[i][a].value=0),r[i][a].precision=Math.max(this.getPrecision(+n[d].value),r[i][a].precision),r[i][a].value+=+n[d].value,r[i][a].valueMap[m]=+n[d].value);r[i][a].seriesIndex.push(m)}}this._mapDataRequireCounter=0;for(var f in r)this._mapDataRequireCounter++;this._clearSelected(),0===this._mapDataRequireCounter&&(this.clear(),this.zr&&this.zr.delShape(this.lastShapeList),this.lastShapeList=[]);for(var f in r){for(var c in r[f]){"average"==h[f]&&(r[f][c].value/=r[f][c].seriesIndex.length);var k=r[f][c].value;null!=k&&(r[f][c].value=k.toFixed(null==l[f]?r[f][c].precision:l[f])-0)}this._mapDataMap[f]=this._mapDataMap[f]||{},this._mapDataMap[f].mapData?this._mapDataCallback(f,r[f],s[f])(this._mapDataMap[f].mapData):y[f.replace(/\|.*/,"")].getGeoJson&&(this._specialArea[f]=y[f.replace(/\|.*/,"")].specialArea||this._specialArea[f],y[f.replace(/\|.*/,"")].getGeoJson(this._mapDataCallback(f,r[f],s[f])))}},_mapDataCallback:function(t,i,n){var a=this;return function(o){a._isAlive&&null!=a._activeMapType[t]&&(-1!=t.indexOf("|")&&(o=a._getSubMapData(t,o)),a._mapDataMap[t].mapData=o,o.firstChild?(a._mapDataMap[t].rate=1,a._mapDataMap[t].projection=e("../util/projection/svg")):(a._mapDataMap[t].rate=.75,a._mapDataMap[t].projection=e("../util/projection/normal")),a._buildMap(t,a._getProjectionData(t,o,n),i,n),a._buildMark(t,n),--a._mapDataRequireCounter<=0&&(a.addShapeList(),a.zr.refreshNextFrame()),a._buildHeatmap(t))}},_clearSelected:function(){for(var e in this._selected)this._activeMapType[this._mapTypeMap[e]]||(delete this._selected[e],delete this._mapTypeMap[e])},_getSubMapData:function(e,t){for(var i=e.replace(/^.*\|/,""),n=t.features,a=0,o=n.length;o>a;a++)if(n[a].properties&&n[a].properties.name==i){n=n[a],"United States of America"==i&&n.geometry.coordinates.length>1&&(n={geometry:{coordinates:n.geometry.coordinates.slice(5,6),type:n.geometry.type},id:n.id,properties:n.properties,type:n.type});break}return{type:"FeatureCollection",features:[n]}},_getProjectionData:function(e,t,i){var n,a=this._mapDataMap[e].projection,o=[],r=this._mapDataMap[e].bbox||a.getBbox(t,this._specialArea[e]);n=this._mapDataMap[e].hasRoam?this._mapDataMap[e].transform:this._getTransform(r,i,this._mapDataMap[e].rate);var s,l=this._mapDataMap[e].lastTransform||{scale:{}};n.left!=l.left||n.top!=l.top||n.scale.x!=l.scale.x||n.scale.y!=l.scale.y?(s=a.geoJson2Path(t,n,this._specialArea[e]),l=p.clone(n)):(n=this._mapDataMap[e].transform,s=this._mapDataMap[e].pathArray),this._mapDataMap[e].bbox=r,this._mapDataMap[e].transform=n,this._mapDataMap[e].lastTransform=l,this._mapDataMap[e].pathArray=s;for(var h=[n.left,n.top],m=0,V=s.length;V>m;m++)o.push(this._getSingleProvince(e,s[m],h));if(this._specialArea[e])for(var U in this._specialArea[e])o.push(this._getSpecialProjectionData(e,t,U,this._specialArea[e][U],h));if("china"==e){var d=this.geo2pos(e,b["南海诸岛"]||y["南海诸岛"].textCoord),c=n.scale.x/10.5,u=[32*c+d[0],83*c+d[1]];g["南海诸岛"]&&(u[0]+=g["南海诸岛"][0],u[1]+=g["南海诸岛"][1]),o.push({name:this._nameChange(e,"南海诸岛"),path:y["南海诸岛"].getPath(d,c),position:h,textX:u[0],textY:u[1]})}return o},_getSpecialProjectionData:function(t,i,n,a,o){i=this._getSubMapData("x|"+n,i);var r=e("../util/projection/normal"),s=r.getBbox(i),l=this.geo2pos(t,[a.left,a.top]),h=this.geo2pos(t,[a.left+a.width,a.top+a.height]),m=Math.abs(h[0]-l[0]),V=Math.abs(h[1]-l[1]),U=s.width,d=s.height,p=m/.75/U,c=V/d;p>c?(p=.75*c,m=U*p):(c=p,p=.75*c,V=d*c);var u={OffsetLeft:l[0],OffsetTop:l[1],scale:{x:p,y:c}},y=r.geoJson2Path(i,u);return this._getSingleProvince(t,y[0],o)},_getSingleProvince:function(e,t,i){var n,a=t.properties.name,o=g[a]||[0,0];if(b[a])n=this.geo2pos(e,b[a]);else if(t.cp)n=[t.cp[0]+o[0],t.cp[1]+o[1]];else{var r=this._mapDataMap[e].bbox;n=this.geo2pos(e,[r.left+r.width/2,r.top+r.height/2]),n[0]+=o[0],n[1]+=o[1]}return t.name=this._nameChange(e,a),t.position=i,t.textX=n[0],t.textY=n[1],t},_getTransform:function(e,t,i){var n,a,o,r,s,l,h,m=this.series,V=this.zr.getWidth(),U=this.zr.getHeight(),d=Math.round(.02*Math.min(V,U));for(var p in t)n=m[p].mapLocation||{},o=n.x||o,s=n.y||s,l=n.width||l,h=n.height||h;a=this.parsePercent(o,V),a=isNaN(a)?d:a,r=this.parsePercent(s,U),r=isNaN(r)?d:r,l=null==l?V-a-2*d:this.parsePercent(l,V),h=null==h?U-r-2*d:this.parsePercent(h,U);var c=e.width,u=e.height,y=l/i/c,g=h/u;if(y>g?(y=g*i,l=c*y):(g=y,y=g*i,h=u*g),isNaN(o))switch(o=o||"center",o+""){case"center":a=Math.floor((V-l)/2);break;case"right":a=V-l}if(isNaN(s))switch(s=s||"center",s+""){case"center":r=Math.floor((U-h)/2);break;case"bottom":r=U-h}return{left:a,top:r,width:l,height:h,baseScale:1,scale:{x:y,y:g}}},_buildMap:function(e,t,i,m){for(var V,c,u,y,g,b,f,k,x,_,L,W=this.series,X=this.component.legend,v=this.component.dataRange,w=0,K=t.length;K>w;w++){if(k=p.clone(t[w]),x={name:k.name,path:k.path,position:p.clone(k.position)},c=k.name,u=i[c]){g=[u],V="";for(var I=0,J=u.seriesIndex.length;J>I;I++){var C=W[u.seriesIndex[I]];g.push(C),V+=C.name+" ",X&&this._showLegendSymbol[e]&&X.hasColor(C.name)&&this.shapeList.push(new o({zlevel:C.zlevel,z:C.z+1,position:p.clone(k.position),_mapType:e,style:{x:k.textX+3+7*I,y:k.textY-10,r:3,color:X.getColor(C.name)},hoverable:!1}))}y=u.value}else{u={name:c,value:"-"},V="",g=[];for(var S in m)g.push(W[S]);y="-"}switch(this.ecTheme.map&&g.push(this.ecTheme.map),g.push(U.map),b=v&&!isNaN(y)?v.getColor(y):null,k.color=k.color||b||this.getItemStyleColor(this.deepQuery(g,"itemStyle.normal.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.normal.areaStyle.color"),k.strokeColor=k.strokeColor||this.deepQuery(g,"itemStyle.normal.borderColor"),k.lineWidth=k.lineWidth||this.deepQuery(g,"itemStyle.normal.borderWidth"),x.color=this.getItemStyleColor(this.deepQuery(g,"itemStyle.emphasis.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.emphasis.areaStyle.color")||k.color,x.strokeColor=this.deepQuery(g,"itemStyle.emphasis.borderColor")||k.strokeColor,x.lineWidth=this.deepQuery(g,"itemStyle.emphasis.borderWidth")||k.lineWidth,k.brushType=x.brushType=k.brushType||"both",k.lineJoin=x.lineJoin="round",k._name=x._name=c,f=this.deepQuery(g,"itemStyle.normal.label.textStyle"),L={zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:p.clone(k.position),_mapType:e,_geo:this.pos2geo(e,[k.textX,k.textY]),style:{brushType:"fill",x:k.textX,y:k.textY,text:this.getLabelText(c,y,g,"normal"),_name:c,textAlign:"center",color:this.deepQuery(g,"itemStyle.normal.label.show")?this.deepQuery(g,"itemStyle.normal.label.textStyle.color"):"rgba(0,0,0,0)",textFont:this.getFont(f)}},L._style=p.clone(L.style),L.highlightStyle=p.clone(L.style),this.deepQuery(g,"itemStyle.emphasis.label.show")?(L.highlightStyle.text=this.getLabelText(c,y,g,"emphasis"),L.highlightStyle.color=this.deepQuery(g,"itemStyle.emphasis.label.textStyle.color")||L.style.color,f=this.deepQuery(g,"itemStyle.emphasis.label.textStyle")||f,L.highlightStyle.textFont=this.getFont(f)):L.highlightStyle.color="rgba(0,0,0,0)",_={zlevel:this.getZlevelBase(),z:this.getZBase(),position:p.clone(k.position),style:k,highlightStyle:x,_style:p.clone(k),_mapType:e},null!=k.scale&&(_.scale=p.clone(k.scale)),L=new n(L),_.style.shapeType){case"rectangle":_=new r(_);break;case"line":_=new s(_);break;case"circle":_=new o(_);break;case"polygon":_=new l(_);break;case"ellipse":_=new h(_);break;default:_=new a(_),_.buildPathArray&&(_.style.pathArray=_.buildPathArray(_.style.path))}(this._selectedMode[e]&&this._selected[c]&&u.selected!==!1||u.selected===!0)&&(L.style=L.highlightStyle,_.style=_.highlightStyle),L.clickable=_.clickable=this._clickable[e]&&(null==u.clickable||u.clickable),this._selectedMode[e]&&(this._selected[c]=null!=this._selected[c]?this._selected[c]:u.selected,this._mapTypeMap[c]=e,(null==u.selectable||u.selectable)&&(_.clickable=L.clickable=!0,_.onclick=L.onclick=this.shapeHandler.onclick)),this._hoverable[e]&&(null==u.hoverable||u.hoverable)?(L.hoverable=_.hoverable=!0,_.hoverConnect=L.id,L.hoverConnect=_.id):L.hoverable=_.hoverable=!1,d.pack(L,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(L),d.pack(_,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(_)}},_buildMark:function(e,t){this._seriesIndexToMapType=this._seriesIndexToMapType||{},this.markAttachStyle=this.markAttachStyle||{};var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];"none"==e&&(i=[0,0]);for(var n in t)this._seriesIndexToMapType[n]=e,this.markAttachStyle[n]={position:i,_mapType:e},this.buildMark(n)},_buildHeatmap:function(e){for(var t=this.series,i=0,n=t.length;n>i;i++)if(t[i].heatmap){var a=t[i].heatmap.data;if(t[i].heatmap.needsTransform===!1){for(var o=[],r=0,s=a.length;s>r;++r)o.push([a[r][3],a[r][4],a[r][2]]);var l=[0,0]}else{var h=t[i].heatmap._geoData;if(void 0===h){t[i].heatmap._geoData=[];for(var r=0,s=a.length;s>r;++r)t[i].heatmap._geoData[r]=a[r];h=t[i].heatmap._geoData}for(var s=a.length,U=0;s>U;++U)a[U]=this.geo2pos(e,[h[U][0],h[U][1]]);var l=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]}var d=new V(t[i].heatmap),p=d.getCanvas(a[0][3]?o:a,this.zr.getWidth(),this.zr.getHeight()),c=new m({zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:l,scale:[1,1],hoverable:!1,style:{x:0,y:0,image:p,width:p.width,height:p.height}});c.type="heatmap",c._mapType=e,this.shapeList.push(c),this.zr.addShape(c)}},getMarkCoord:function(e,t){return t.geoCoord||b[t.name]?this.geo2pos(this._seriesIndexToMapType[e],t.geoCoord||b[t.name]):[0,0]},getMarkGeo:function(e){return e.geoCoord||b[e.name]},_nameChange:function(e,t){return this._nameMap[e][t]||t},getLabelText:function(e,t,i,n){var a=this.deepQuery(i,"itemStyle."+n+".label.formatter");return a?"function"==typeof a?a.call(this.myChart,e,t):"string"==typeof a?(a=a.replace("{a}","{a0}").replace("{b}","{b0}"),a=a.replace("{a0}",e).replace("{b0}",t)):void 0:e},_findMapTypeByPos:function(e,t){var i,n,a,o,r;for(var s in this._mapDataMap)if(i=this._mapDataMap[s].transform,i&&this._roamMap[s]&&this._activeMapType[s]&&(n=i.left,a=i.top,o=i.width,r=i.height,e>=n&&n+o>=e&&t>=a&&a+r>=t))return s},__onmousewheel:function(e){function t(e,t){for(var i=0;in;n++){var o=this.shapeList[n];if(o.__animating)return}var r,s,l=e.event,h=u.getX(l),m=u.getY(l),V=u.getDelta(l),d=e.mapTypeControl;d||(d={},s=this._findMapTypeByPos(h,m),s&&this._roamMap[s]&&"move"!=this._roamMap[s]&&(d[s]=!0));var p=!1;for(s in d)if(d[s]){p=!0;var c=this._mapDataMap[s].transform,y=c.left,g=c.top,b=c.width,f=c.height,k=this.pos2geo(s,[h-y,m-g]);if(V>0){if(r=1.2,null!=this._scaleLimitMap[s].max&&c.baseScale>=this._scaleLimitMap[s].max)continue}else if(r=1/1.2,null!=this._scaleLimitMap[s].min&&c.baseScale<=this._scaleLimitMap[s].min)continue;c.baseScale*=r,c.scale.x*=r,c.scale.y*=r,c.width=b*r,c.height=f*r,this._mapDataMap[s].hasRoam=!0,this._mapDataMap[s].transform=c,k=this.geo2pos(s,k),c.left-=k[0]-(h-y),c.top-=k[1]-(m-g),this._mapDataMap[s].transform=c,this.clearEffectShape(!0);for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o._mapType==s){var x=o.type,_=o.style;switch(o.position[0]=c.left,o.position[1]=c.top,x){case"path":case"symbol":case"circle":case"rectangle":case"polygon":case"line":case"ellipse":case"heatmap":o.scale[0]*=r,o.scale[1]*=r;break;case"mark-line":i(_,r);break;case"polyline":t(_,r);break;case"shape-bundle":for(var L=0;L<_.shapeList.length;L++){var W=_.shapeList[L];"mark-line"==W.type?i(W.style,r):"polyline"==W.type&&t(W.style,r)}break;case"icon":case"image":k=this.geo2pos(s,o._geo),_.x=_._x=k[0]-_.width/2,_.y=_._y=k[1]-_.height/2;break;default:k=this.geo2pos(s,o._geo),_.x=k[0],_.y=k[1],"text"==x&&(o._style.x=o.highlightStyle.x=k[0],o._style.y=o.highlightStyle.y=k[1])}this.zr.modShape(o.id)}}}if(p){u.stop(l),this.zr.refreshNextFrame();var X=this;clearTimeout(this._refreshDelayTicket),this._refreshDelayTicket=setTimeout(function(){X&&X.shapeList&&X.animationEffect()},100),this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"scale"},this.myChart)}}},__onmousedown:function(e){if(!(this.shapeList.length<=0)){var t=e.target;if(!t||!t.draggable){var i=e.event,n=u.getX(i),a=u.getY(i),o=this._findMapTypeByPos(n,a);if(o&&this._roamMap[o]&&"scale"!=this._roamMap[o]){this._mousedown=!0,this._mx=n,this._my=a,this._curMapType=o,this.zr.on(c.EVENT.MOUSEUP,this._onmouseup);var r=this;setTimeout(function(){r.zr.on(c.EVENT.MOUSEMOVE,r._onmousemove)},100)}}}},__onmousemove:function(e){if(this._mousedown&&this._isAlive){var t=e.event,i=u.getX(t),n=u.getY(t),a=this._mapDataMap[this._curMapType].transform;a.hasRoam=!0,a.left-=this._mx-i,a.top-=this._my-n,this._mx=i,this._my=n,this._mapDataMap[this._curMapType].transform=a;for(var o=0,r=this.shapeList.length;r>o;o++)this.shapeList[o]._mapType==this._curMapType&&(this.shapeList[o].position[0]=a.left,this.shapeList[o].position[1]=a.top,this.zr.modShape(this.shapeList[o].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),this._justMove=!0,u.stop(t)}},__onmouseup:function(e){var t=e.event;this._mx=u.getX(t),this._my=u.getY(t),this._mousedown=!1;var i=this;setTimeout(function(){i._justMove&&i.animationEffect(),i._justMove=!1,i.zr.un(c.EVENT.MOUSEMOVE,i._onmousemove),i.zr.un(c.EVENT.MOUSEUP,i._onmouseup)},120)},__onroamcontroller:function(e){var t=e.event;t.zrenderX=this.zr.getWidth()/2,t.zrenderY=this.zr.getHeight()/2;var i=e.mapTypeControl,n=0,a=0,o=e.step;switch(e.roamType){case"scaleUp":return t.zrenderDelta=1,void this.__onmousewheel({event:t,mapTypeControl:i});case"scaleDown":return t.zrenderDelta=-1,void this.__onmousewheel({event:t,mapTypeControl:i});case"up":n=-o;break;case"down":n=o;break;case"left":a=-o;break;case"right":a=o}var r,s;for(s in i)this._mapDataMap[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,r.hasRoam=!0,r.left-=a,r.top-=n,this._mapDataMap[s].transform=r);for(var l=0,h=this.shapeList.length;h>l;l++)s=this.shapeList[l]._mapType,i[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,this.shapeList[l].position[0]=r.left,this.shapeList[l].position[1]=r.top,this.zr.modShape(this.shapeList[l].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),clearTimeout(this.dircetionTimer);var m=this;this.dircetionTimer=setTimeout(function(){m.animationEffect()},150)},__ondrhoverlink:function(e){for(var t,i,n=0,a=this.shapeList.length;a>n;n++)t=this.shapeList[n]._mapType,this._hoverLinkMap[t]&&this._activeMapType[t]&&(i=d.get(this.shapeList[n],"value"),null!=i&&i>=e.valueMin&&i<=e.valueMax&&this.zr.addHoverShape(this.shapeList[n]))},onclick:function(e){if(this.isClick&&e.target&&!this._justMove&&"icon"!=e.target.type){this.isClick=!1;var t=e.target,i=t.style._name,n=this.shapeList.length,a=t._mapType||"";if("single"==this._selectedMode[a])for(var o in this._selected)if(this._selected[o]&&this._mapTypeMap[o]==a){for(var r=0;n>r;r++)this.shapeList[r].style._name==o&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));o!=i&&(this._selected[o]=!1)}this._selected[i]=!this._selected[i];for(var r=0;n>r;r++)this.shapeList[r].style._name==i&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this._selected[i]?this.shapeList[r].highlightStyle:this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));this.messageCenter.dispatch(U.EVENT.MAP_SELECTED,e.event,{selected:this._selected,target:i},this.myChart),this.zr.refreshNextFrame();var s=this;setTimeout(function(){s.zr.trigger(c.EVENT.MOUSEMOVE,e.event)},100)}},refresh:function(e){e&&(this.option=e,this.series=e.series),this._mapDataRequireCounter>0?this.clear():this.backupShapeList(),this._buildShape(),this.zr.refreshHover()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)},pos2geo:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform,t):null},getGeoByPos:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];return t instanceof Array?(t[0]-=i[0],t[1]-=i[1]):(t.x-=i[0],t.y-=i[1]),this.pos2geo(e,t)},geo2pos:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform,t):null},getPosByGeo:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=this.geo2pos(e,t);return i[0]+=this._mapDataMap[e].transform.left,i[1]+=this._mapDataMap[e].transform.top,i},getMapPosition:function(e){return this._mapDataMap[e].transform?[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]:null},onbeforDispose:function(){this._isAlive=!1,this.zr.un(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.un(c.EVENT.MOUSEDOWN,this._onmousedown),this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}},p.inherits(t,i),e("../chart").define("map",t),t}),i("zrender/shape/Path",["require","./Base","./util/PathProxy","../tool/util"],function(e){var t=e("./Base"),i=e("./util/PathProxy"),n=i.PathSegment,a=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},o=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(a(e)*a(t))},r=function(e,t){return(e[0]*t[1]0&&""===d[0]&&d.shift();for(var p=0;p0&&!isNaN(d[0]);){var c,u,y,g,b,f,k,x,_=null,L=[],W=h,X=m;switch(U){case"l":h+=d.shift(),m+=d.shift(),_="L",L.push(h,m);break;case"L":h=d.shift(),m=d.shift(),L.push(h,m);break;case"m":h+=d.shift(),m+=d.shift(),_="M",L.push(h,m),U="l";break;case"M":h=d.shift(),m=d.shift(),_="M",L.push(h,m),U="L";break;case"h":h+=d.shift(),_="L",L.push(h,m);break;case"H":h=d.shift(),_="L",L.push(h,m);break;case"v":m+=d.shift(),_="L",L.push(h,m);break;case"V":m=d.shift(),_="L",L.push(h,m);break;case"C":L.push(d.shift(),d.shift(),d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"c":L.push(h+d.shift(),m+d.shift(),h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"S":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,d.shift(),d.shift()),h=d.shift(),m=d.shift(),_="C",L.push(h,m);break;case"s":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"Q":L.push(d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"q":L.push(h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="Q",L.push(h,m);break;case"T":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h=d.shift(),m=d.shift(),_="Q",L.push(c,u,h,m);break;case"t":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h+=d.shift(),m+=d.shift(),_="Q",L.push(c,u,h,m);break;case"A":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h=d.shift(),m=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f);break;case"a":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h+=d.shift(),m+=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f)}for(var v=0,w=L.length;w>v;v+=2)L[v]+=t,L[v+1]+=i;l.push(new n(_||U,L))}("z"===U||"Z"===U)&&l.push(new n("z",[]))}return l},_convertPoint:function(e,t,i,n,a,s,l,h,m){var V=m*(Math.PI/180),U=Math.cos(V)*(e-i)/2+Math.sin(V)*(t-n)/2,d=-1*Math.sin(V)*(e-i)/2+Math.cos(V)*(t-n)/2,p=U*U/(l*l)+d*d/(h*h);p>1&&(l*=Math.sqrt(p),h*=Math.sqrt(p));var c=Math.sqrt((l*l*h*h-l*l*d*d-h*h*U*U)/(l*l*d*d+h*h*U*U));a===s&&(c*=-1),isNaN(c)&&(c=0);var u=c*l*d/h,y=c*-h*U/l,g=(e+i)/2+Math.cos(V)*u-Math.sin(V)*y,b=(t+n)/2+Math.sin(V)*u+Math.cos(V)*y,f=r([1,0],[(U-u)/l,(d-y)/h]),k=[(U-u)/l,(d-y)/h],x=[(-1*U-u)/l,(-1*d-y)/h],_=r(k,x);return o(k,x)<=-1&&(_=Math.PI),o(k,x)>=1&&(_=0),0===s&&_>0&&(_-=2*Math.PI),1===s&&0>_&&(_+=2*Math.PI),[g,b,l,h,f,_,V,s]},buildPath:function(e,t){var i=t.path,n=t.x||0,a=t.y||0;t.pathArray=t.pathArray||this.buildPathArray(i,n,a);for(var o=t.pathArray,r=t.pointList=[],s=[],l=0,h=o.length;h>l;l++){"M"==o[l].command.toUpperCase()&&(s.length>0&&r.push(s),s=[]);for(var m=o[l].points,V=0,U=m.length;U>V;V+=2)s.push([m[V],m[V+1]])}s.length>0&&r.push(s);for(var l=0,h=o.length;h>l;l++){var d=o[l].command,m=o[l].points;switch(d){case"L":e.lineTo(m[0],m[1]);break;case"M":e.moveTo(m[0],m[1]);break;case"C":e.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case"Q":e.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case"A":var p=m[0],c=m[1],u=m[2],y=m[3],g=m[4],b=m[5],f=m[6],k=m[7],x=u>y?u:y,_=u>y?1:u/y,L=u>y?y/u:1;e.translate(p,c),e.rotate(f),e.scale(_,L),e.arc(0,0,x,g,g+b,1-k),e.scale(1/_,1/L),e.rotate(-f),e.translate(-p,-c);break;case"z":e.closePath()}}},getRect:function(e){if(e.__rect)return e.__rect;var t;t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0;for(var i=Number.MAX_VALUE,n=Number.MIN_VALUE,a=Number.MAX_VALUE,o=Number.MIN_VALUE,r=e.x||0,s=e.y||0,l=e.pathArray||this.buildPathArray(e.path),h=0;hn&&(n=m[V])):(m[V]+so&&(o=m[V]));var U;return U=i===Number.MAX_VALUE||n===Number.MIN_VALUE||a===Number.MAX_VALUE||o===Number.MIN_VALUE?{x:0,y:0,width:0,height:0}:{x:Math.round(i-t/2),y:Math.round(a-t/2),width:n-i+t,height:o-a+t},e.__rect=U,U}},e("../tool/util").inherits(s,t),s}),i("zrender/shape/Ellipse",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ellipse",buildPath:function(e,t){var i=.5522848,n=t.x,a=t.y,o=t.a,r=t.b,s=o*i,l=r*i;e.moveTo(n-o,a),e.bezierCurveTo(n-o,a-l,n-s,a-r,n,a-r),e.bezierCurveTo(n+s,a-r,n+o,a-l,n+o,a),e.bezierCurveTo(n+o,a+l,n+s,a+r,n,a+r),e.bezierCurveTo(n-s,a+r,n-o,a+l,n-o,a),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.a-t/2), -y:Math.round(e.y-e.b-t/2),width:2*e.a+t,height:2*e.b+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/roamController",["require","./base","zrender/shape/Rectangle","zrender/shape/Sector","zrender/shape/Circle","../config","zrender/tool/util","zrender/tool/color","zrender/tool/event","../component"],function(e){function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamController.show){if(!a.roamController.mapTypeControl)return void console.error("option.roamController.mapTypeControl has not been defined.");i.call(this,e,t,n,a,o),this.rcOption=a.roamController;var r=this;this._drictionMouseDown=function(e){return r.__drictionMouseDown(e)},this._drictionMouseUp=function(e){return r.__drictionMouseUp(e)},this._drictionMouseMove=function(e){return r.__drictionMouseMove(e)},this._drictionMouseOut=function(e){return r.__drictionMouseOut(e)},this._scaleHandler=function(e){return r.__scaleHandler(e)},this.refresh(a)}}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Sector"),o=e("zrender/shape/Circle"),r=e("../config");r.roamController={zlevel:0,z:4,show:!0,x:"left",y:"top",width:80,height:120,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,handleColor:"#6495ed",fillerColor:"#fff",step:15,mapTypeControl:null};var s=e("zrender/tool/util"),l=e("zrender/tool/color"),h=e("zrender/tool/event");return t.prototype={type:r.COMPONENT_TYPE_ROAMCONTROLLER,_buildShape:function(){if(this.rcOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){this.shapeList.push(this._getDirectionShape("up")),this.shapeList.push(this._getDirectionShape("down")),this.shapeList.push(this._getDirectionShape("left")),this.shapeList.push(this._getDirectionShape("right")),this.shapeList.push(this._getScaleShape("scaleUp")),this.shapeList.push(this._getScaleShape("scaleDown"))},_getDirectionShape:function(e){var t=this._itemGroupLocation.r,i=this._itemGroupLocation.x+t,n=this._itemGroupLocation.y+t,o={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:i,y:n,r:t,startAngle:-45,endAngle:45,color:this.rcOption.handleColor,text:">",textX:i+t/2+4,textY:n-.5,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(t/2)+"px arial"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};switch(e){case"up":o.rotation=[Math.PI/2,i,n];break;case"left":o.rotation=[Math.PI,i,n];break;case"down":o.rotation=[-Math.PI/2,i,n]}return o=new a(o),o._roamType=e,o.onmousedown=this._drictionMouseDown,o.onmouseup=this._drictionMouseUp,o.onmousemove=this._drictionMouseMove,o.onmouseout=this._drictionMouseOut,o},_getScaleShape:function(e){var t=this._itemGroupLocation.width,i=this._itemGroupLocation.height-t;i=0>i?20:i;var n=Math.min(t/2-5,i)/2,a=this._itemGroupLocation.x+("scaleDown"===e?t-n:n),r=this._itemGroupLocation.y+this._itemGroupLocation.height-n,s={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:a,y:r,r:n,color:this.rcOption.handleColor,text:"scaleDown"===e?"-":"+",textX:a,textY:r-2,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(n)+"px verdana"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};return s=new o(s),s._roamType=e,s.onmousedown=this._scaleHandler,s},_buildBackground:function(){var e=this.reformCssArray(this.rcOption.padding);this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.rcOption.borderWidth?"fill":"both",color:this.rcOption.backgroundColor,strokeColor:this.rcOption.borderColor,lineWidth:this.rcOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.rcOption.padding),i=this.rcOption.width,n=this.rcOption.height,a=this.zr.getWidth(),o=this.zr.getHeight();switch(this.rcOption.x){case"center":e=Math.floor((a-i)/2);break;case"left":e=t[3]+this.rcOption.borderWidth;break;case"right":e=a-i-t[1]-t[3]-2*this.rcOption.borderWidth;break;default:e=this.parsePercent(this.rcOption.x,a)}var r;switch(this.rcOption.y){case"top":r=t[0]+this.rcOption.borderWidth;break;case"bottom":r=o-n-t[0]-t[2]-2*this.rcOption.borderWidth;break;case"center":r=Math.floor((o-n)/2);break;default:r=this.parsePercent(this.rcOption.y,o)}return{x:e,y:r,r:i/2,width:i,height:n}},__drictionMouseDown:function(e){this.mousedown=!0,this._drictionHandlerOn(e)},__drictionMouseUp:function(e){this.mousedown=!1,this._drictionHandlerOff(e)},__drictionMouseMove:function(e){this.mousedown&&this._drictionHandlerOn(e)},__drictionMouseOut:function(e){this._drictionHandlerOff(e)},_drictionHandlerOn:function(e){this._dispatchEvent(e.event,e.target._roamType),clearInterval(this.dircetionTimer);var t=this;this.dircetionTimer=setInterval(function(){t._dispatchEvent(e.event,e.target._roamType)},100),h.stop(e.event)},_drictionHandlerOff:function(){clearInterval(this.dircetionTimer)},__scaleHandler:function(e){this._dispatchEvent(e.event,e.target._roamType),h.stop(e.event)},_dispatchEvent:function(e,t){this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER,e,{roamType:t,mapTypeControl:this.rcOption.mapTypeControl,step:this.rcOption.step},this.myChart)},refresh:function(e){e&&(this.option=e||this.option,this.option.roamController=this.reformOption(this.option.roamController),this.rcOption=this.option.roamController),this.clear(),this._buildShape()}},s.inherits(t,i),e("../component").define("roamController",t),t}),i("echarts/layer/heatmap",["require"],function(){function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==e[i]?e[i]:t[i];else this.option=t}var t={blurSize:30,gradientColors:["blue","cyan","lime","yellow","red"],minAlpha:.05,valueScale:1,opacity:1},i=20,n=256;return e.prototype={getCanvas:function(e,t,a){var o=this._getBrush(),r=this._getGradient(),s=i+this.option.blurSize,l=document.createElement("canvas");l.width=t,l.height=a;for(var h=l.getContext("2d"),m=e.length,V=0;m>V;++V){var U=e[V],d=U[0],p=U[1],c=U[2],u=Math.min(1,Math.max(c*this.option.valueScale||this.option.minAlpha,this.option.minAlpha));h.globalAlpha=u,h.drawImage(o,d-s,p-s)}for(var y=h.getImageData(0,0,l.width,l.height),g=y.data,m=g.length/4;m--;){var b=4*m+3,u=g[b]/256,f=Math.floor(u*(n-1));g[b-3]=r[4*f],g[b-2]=r[4*f+1],g[b-1]=r[4*f+2],g[b]*=this.option.opacity}return h.putImageData(y,0,0),l},_getBrush:function(){if(!this._brushCanvas){this._brushCanvas=document.createElement("canvas");var e=i+this.option.blurSize,t=2*e;this._brushCanvas.width=t,this._brushCanvas.height=t;var n=this._brushCanvas.getContext("2d");n.shadowOffsetX=t,n.shadowBlur=this.option.blurSize,n.shadowColor="black",n.beginPath(),n.arc(-e,e,i,0,2*Math.PI,!0),n.closePath(),n.fill()}return this._brushCanvas},_getGradient:function(){if(!this._gradientPixels){var e=n,t=document.createElement("canvas");t.width=1,t.height=e;for(var i=t.getContext("2d"),a=i.createLinearGradient(0,0,0,e),o=this.option.gradientColors.length,r=0;o>r;++r)"string"==typeof this.option.gradientColors[r]?a.addColorStop((r+1)/o,this.option.gradientColors[r]):a.addColorStop(this.option.gradientColors[r].offset,this.option.gradientColors[r].color);i.fillStyle=a,i.fillRect(0,0,1,e),this._gradientPixels=i.getImageData(0,0,1,e).data}return this._gradientPixels}},e}),i("echarts/util/mapData/params",["require"],function(e){function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n>1^-(1&r),s=s>>1^-(1&s),r+=n,s+=a,n=r,a=s,i.push([r/1024,s/1024])}return i}var n={none:{getGeoJson:function(e){e({type:"FeatureCollection",features:[{type:"Feature",geometry:{coordinates:[],encodeOffsets:[],type:"Polygon"},properties:{}}]})}},world:{getGeoJson:function(i){e(["./geoJson/world_geo"],function(e){i(t(e))})}},china:{getGeoJson:function(i){e(["./geoJson/china_geo"],function(e){i(t(e))})}},"南海诸岛":{textCoord:[126,25],getPath:function(e,t){for(var i=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],n="",a=e[0],o=e[1],r=0,s=i.length;s>r;r++){n+="M "+((i[r][0][0]*t+a).toFixed(2)-0)+" "+((i[r][0][1]*t+o).toFixed(2)-0)+" ";for(var l=1,h=i[r].length;h>l;l++)n+="L "+((i[r][l][0]*t+a).toFixed(2)-0)+" "+((i[r][l][1]*t+o).toFixed(2)-0)+" "}return n+" Z"}},"新疆":{getGeoJson:function(i){e(["./geoJson/xin_jiang_geo"],function(e){i(t(e))})}},"西藏":{getGeoJson:function(i){e(["./geoJson/xi_zang_geo"],function(e){i(t(e))})}},"内蒙古":{getGeoJson:function(i){e(["./geoJson/nei_meng_gu_geo"],function(e){i(t(e))})}},"青海":{getGeoJson:function(i){e(["./geoJson/qing_hai_geo"],function(e){i(t(e))})}},"四川":{getGeoJson:function(i){e(["./geoJson/si_chuan_geo"],function(e){i(t(e))})}},"黑龙江":{getGeoJson:function(i){e(["./geoJson/hei_long_jiang_geo"],function(e){i(t(e))})}},"甘肃":{getGeoJson:function(i){e(["./geoJson/gan_su_geo"],function(e){i(t(e))})}},"云南":{getGeoJson:function(i){e(["./geoJson/yun_nan_geo"],function(e){i(t(e))})}},"广西":{getGeoJson:function(i){e(["./geoJson/guang_xi_geo"],function(e){i(t(e))})}},"湖南":{getGeoJson:function(i){e(["./geoJson/hu_nan_geo"],function(e){i(t(e))})}},"陕西":{getGeoJson:function(i){e(["./geoJson/shan_xi_1_geo"],function(e){i(t(e))})}},"广东":{getGeoJson:function(i){e(["./geoJson/guang_dong_geo"],function(e){i(t(e))})}},"吉林":{getGeoJson:function(i){e(["./geoJson/ji_lin_geo"],function(e){i(t(e))})}},"河北":{getGeoJson:function(i){e(["./geoJson/he_bei_geo"],function(e){i(t(e))})}},"湖北":{getGeoJson:function(i){e(["./geoJson/hu_bei_geo"],function(e){i(t(e))})}},"贵州":{getGeoJson:function(i){e(["./geoJson/gui_zhou_geo"],function(e){i(t(e))})}},"山东":{getGeoJson:function(i){e(["./geoJson/shan_dong_geo"],function(e){i(t(e))})}},"江西":{getGeoJson:function(i){e(["./geoJson/jiang_xi_geo"],function(e){i(t(e))})}},"河南":{getGeoJson:function(i){e(["./geoJson/he_nan_geo"],function(e){i(t(e))})}},"辽宁":{getGeoJson:function(i){e(["./geoJson/liao_ning_geo"],function(e){i(t(e))})}},"山西":{getGeoJson:function(i){e(["./geoJson/shan_xi_2_geo"],function(e){i(t(e))})}},"安徽":{getGeoJson:function(i){e(["./geoJson/an_hui_geo"],function(e){i(t(e))})}},"福建":{getGeoJson:function(i){e(["./geoJson/fu_jian_geo"],function(e){i(t(e))})}},"浙江":{getGeoJson:function(i){e(["./geoJson/zhe_jiang_geo"],function(e){i(t(e))})}},"江苏":{getGeoJson:function(i){e(["./geoJson/jiang_su_geo"],function(e){i(t(e))})}},"重庆":{getGeoJson:function(i){e(["./geoJson/chong_qing_geo"],function(e){i(t(e))})}},"宁夏":{getGeoJson:function(i){e(["./geoJson/ning_xia_geo"],function(e){i(t(e))})}},"海南":{getGeoJson:function(i){e(["./geoJson/hai_nan_geo"],function(e){i(t(e))})}},"台湾":{getGeoJson:function(i){e(["./geoJson/tai_wan_geo"],function(e){i(t(e))})}},"北京":{getGeoJson:function(i){e(["./geoJson/bei_jing_geo"],function(e){i(t(e))})}},"天津":{getGeoJson:function(i){e(["./geoJson/tian_jin_geo"],function(e){i(t(e))})}},"上海":{getGeoJson:function(i){e(["./geoJson/shang_hai_geo"],function(e){i(t(e))})}},"香港":{getGeoJson:function(i){e(["./geoJson/xiang_gang_geo"],function(e){i(t(e))})}},"澳门":{getGeoJson:function(i){e(["./geoJson/ao_men_geo"],function(e){i(t(e))})}}};return{decode:t,params:n}}),i("echarts/util/mapData/textFixed",[],function(){return{"广东":[0,-10],"香港":[10,10],"澳门":[-10,18],"黑龙江":[0,20],"天津":[5,5],"深圳市":[-35,0],"红河哈尼族彝族自治州":[0,20],"楚雄彝族自治州":[-5,15],"石河子市":[-5,5],"五家渠市":[0,-10],"昌吉回族自治州":[10,10],"昌江黎族自治县":[0,20],"陵水黎族自治县":[0,20],"东方市":[0,20],"渭南市":[0,20]}}),i("echarts/util/mapData/geoCoord",[],function(){return{Russia:[100,60],"United States of America":[-99,38]}}),i("echarts/util/projection/svg",["require","zrender/shape/Path"],function(e){function t(e){return parseFloat(e||0)}function i(e){for(var i=e.firstChild;"svg"!=i.nodeName.toLowerCase()||1!=i.nodeType;)i=i.nextSibling;var n=t(i.getAttribute("x")),a=t(i.getAttribute("y")),o=t(i.getAttribute("width")),r=t(i.getAttribute("height"));return{left:n,top:a,width:o,height:r}}function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o&&(o.scale=n,o.properties={name:e.getAttribute("name")||""},o.id=e.id,s(o,e),a.push(o))}for(var r=e.childNodes,l=0,h=r.length;h>l;l++)i(r[l])}var n=[t.scale.x,t.scale.y],a=[];return i(e),a}function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]/e.scale.x,i[1]/e.scale.y]}function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]*e.scale.x,i[1]*e.scale.y]}function r(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function s(e,t){var i=t.getAttribute("fill"),n=t.getAttribute("stroke"),a=t.getAttribute("stroke-width"),o=t.getAttribute("opacity");i&&"none"!=i?(e.color=i,n?(e.brushType="both",e.strokeColor=n):e.brushType="fill"):n&&"none"!=n&&(e.strokeColor=n,e.brushType="stroke"),a&&"none"!=a&&(e.lineWidth=parseFloat(a)),o&&"none"!=o&&(e.opacity=parseFloat(o))}function l(e){for(var t=r(e).replace(/,/g," ").split(/\s+/),i=[],n=0;no;o++)if(n=a[o],!n.properties.name||!t[n.properties.name])switch(n.type){case"Feature":r[n.geometry.type](n.geometry.coordinates);break;case"GeometryCollection":i=n.geometries;for(var l=0,h=i.length;h>l;l++)r[i[l].type](i[l].coordinates)}return e.srcSize={left:1*r.xmin.toFixed(4),top:1*r.ymin.toFixed(4),width:1*(r.xmax-r.xmin).toFixed(4),height:1*(r.ymax-r.ymin).toFixed(4)},e}function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin:360,xmax:-360,ymin:180,ymax:-180},y=o[c](u),m.push({path:y,cp:o.makePoint(t.properties.cp?t.properties.cp:[(o._bbox.xmin+o._bbox.xmax)/2,(o._bbox.ymin+o._bbox.ymax)/2]),properties:t.properties,id:t.id})}n=n||{},o.scale=null,o.offset=null,e.srcSize||t(e,n),i.offset={x:e.srcSize.left,y:e.srcSize.top,left:i.OffsetLeft||0,top:i.OffsetTop||0},o.scale=i.scale,o.offset=i.offset;for(var r,s,l,h=e.features,m=[],V=0,U=h.length;U>V;V++)if(l=h[V],!l.properties.name||!n[l.properties.name])if("Feature"==l.type)a(l.geometry,l);else if("GeometryCollection"==l.type){r=l.geometries;for(var d=0,p=r.length;p>d;d++)s=r[d],a(s,s)}var c,u,y;return m}function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i=1*t.x,n=1*t.y),i=i/e.scale.x+e.offset.x-168.5,i=i>180?i-360:i,n=90-(n/e.scale.y+e.offset.y),[i,n]}function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y])}var o={formatPoint:function(e){return[(e[0]<-168.5&&e[1]>63.8?e[0]+360:e[0])+168.5,90-e[1]]},makePoint:function(e){var t=this,i=t.formatPoint(e);t._bbox.xmin>e[0]&&(t._bbox.xmin=e[0]),t._bbox.xmaxe[1]&&(t._bbox.ymin=e[1]),t._bbox.ymaxn;n++)t=o.makePoint(e[n]),i=0===n?"M"+t.join(","):i+"L"+t.join(",");return i},Polygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t=t+o.LineString(e[i])+"z";return t},MultiPoint:function(e){for(var t=[],i=0,n=e.length;n>i;i++)t.push(o.Point(e[i]));return t},MultiLineString:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.LineString(e[i]);return t},MultiPolygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.Polygon(e[i]);return t}},r={formatPoint:o.formatPoint,makePoint:function(e){var t=this,i=t.formatPoint(e),n=i[0],a=i[1];t.xmin>n&&(t.xmin=n),t.xmaxa&&(t.ymin=a),t.ymaxt;t++)this.makePoint(e[t])},Polygon:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPoint:function(e){for(var t=0,i=e.length;i>t;t++)this.Point(e[t])},MultiLineString:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPolygon:function(e){for(var t=0,i=e.length;i>t;t++)this.Polygon(e[t])}};return{getBbox:e,geoJson2Path:i,pos2geo:n,geo2pos:a}}),i("echarts/util/mapData/geoJson/an_hui_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3415",properties:{name:"六安市",cp:[116.3123,31.8329],childNum:6},geometry:{type:"Polygon",coordinates:["@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„Ž°VX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ"],encodeOffsets:[[118710,33351]]}},{type:"Feature",id:"3408",properties:{name:"安庆市",cp:[116.7517,30.5255],childNum:9},geometry:{type:"Polygon",coordinates:["@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ"],encodeOffsets:[[118834,31759]]}},{type:"Feature",id:"3411",properties:{name:"滁州市",cp:[118.1909,32.536],childNum:7},geometry:{type:"Polygon",coordinates:["@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL"],encodeOffsets:[[120004,33520]]}},{type:"Feature",id:"3418",properties:{name:"宣城市",cp:[118.8062,30.6244],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl"],encodeOffsets:[[120803,31247]]}},{type:"Feature",id:"3412",properties:{name:"阜阳市",cp:[115.7629,32.9919],childNum:6},geometry:{type:"Polygon",coordinates:["@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL"],encodeOffsets:[[118418,34392]]}},{type:"Feature",id:"3413",properties:{name:"宿州市",cp:[117.5208,33.6841],childNum:5},geometry:{type:"Polygon",coordinates:["@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK"],encodeOffsets:[[119836,35061]]}},{type:"Feature",id:"3410",properties:{name:"黄山市",cp:[118.0481,29.9542],childNum:5},geometry:{type:"Polygon",coordinates:["@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜"],encodeOffsets:[[120747,31095]]}},{type:"Feature",id:"3414",properties:{name:"巢湖市",cp:[117.7734,31.4978],childNum:5},geometry:{type:"Polygon",coordinates:["@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn"],encodeOffsets:[[119847,32007]]}},{type:"Feature",id:"3416",properties:{name:"亳州市",cp:[116.1914,33.4698],childNum:4},geometry:{type:"Polygon",coordinates:["@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽ@¼ƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ"],encodeOffsets:[[119183,34594]]}},{type:"Feature",id:"3417",properties:{name:"池州市",cp:[117.3889,30.2014],childNum:4},geometry:{type:"Polygon",coordinates:["@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX","@@llUL@VlxšL@a@UƒwXa¯@"],encodeOffsets:[[119543,30781],[120061,31152]]}},{type:"Feature",id:"3401",properties:{name:"合肥市",cp:[117.29,32.0581],childNum:4},geometry:{type:"Polygon",coordinates:["@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@VšJ°š°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦"],encodeOffsets:[[119678,33323]]}},{type:"Feature",id:"3403",properties:{name:"蚌埠市",cp:[117.4109,33.1073],childNum:4},geometry:{type:"Polygon",coordinates:["@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3402",properties:{name:"芜湖市",cp:[118.3557,31.0858],childNum:4},geometry:{type:"Polygon",coordinates:["@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb"],encodeOffsets:[[120814,31585]]}},{type:"Feature",id:"3406",properties:{name:"淮北市",cp:[116.6968,33.6896],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV"],["@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V"]],encodeOffsets:[[[119183,34594]],[[119836,35061]]]}},{type:"Feature",id:"3404",properties:{name:"淮南市",cp:[116.7847,32.7722],childNum:2},geometry:{type:"Polygon",coordinates:["@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3405",properties:{name:"马鞍山市",cp:[118.6304,31.5363],childNum:2},geometry:{type:"Polygon",coordinates:["@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl"],encodeOffsets:[[121219,32288]]}},{type:"Feature",id:"3407",properties:{name:"铜陵市",cp:[117.9382,30.9375],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U"],["@@LllUL@VlxšL@a@UƒwXamK"]],encodeOffsets:[[[120522,31529]],[[120094,31146]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ao_men_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8200",properties:{name:"澳门",cp:[113.5715,22.1583],childNum:1},geometry:{type:"Polygon",coordinates:["@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW"],encodeOffsets:[[116325,22699]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/bei_jing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"110228",properties:{name:"密云县",cp:[117.0923,40.5121],childNum:1},geometry:{type:"Polygon",coordinates:["@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT"],encodeOffsets:[[119561,41684]]}},{type:"Feature",id:"110116",properties:{name:"怀柔区",cp:[116.6377,40.6219],childNum:1},geometry:{type:"Polygon",coordinates:["@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn"],encodeOffsets:[[119314,41552]]}},{type:"Feature",id:"110111",properties:{name:"房山区",cp:[115.8453,39.7163],childNum:1},geometry:{type:"Polygon",coordinates:["@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR"],encodeOffsets:[[118343,40770]]}},{type:"Feature",id:"110229",properties:{name:"延庆县",cp:[116.1543,40.5286],childNum:1},geometry:{type:"Polygon",coordinates:["@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL"],encodeOffsets:[[119262,41751]]}},{type:"Feature",id:"110109",properties:{name:"门头沟区",cp:[115.8,39.9957],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA"],encodeOffsets:[[118635,41113]]}},{type:"Feature",id:"110114",properties:{name:"昌平区",cp:[116.1777,40.2134],childNum:1},geometry:{type:"Polygon",coordinates:["@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD"], -encodeOffsets:[[118750,41232]]}},{type:"Feature",id:"110115",properties:{name:"大兴区",cp:[116.4716,39.6352],childNum:1},geometry:{type:"Polygon",coordinates:["@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP"],encodeOffsets:[[119042,40704]]}},{type:"Feature",id:"110113",properties:{name:"顺义区",cp:[116.7242,40.1619],childNum:1},geometry:{type:"Polygon",coordinates:["@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF","@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP"],encodeOffsets:[[119283,41084],[119377,41046]]}},{type:"Feature",id:"110117",properties:{name:"平谷区",cp:[117.1706,40.2052],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX"],encodeOffsets:[[119748,41190]]}},{type:"Feature",id:"110112",properties:{name:"通州区",cp:[116.7297,39.8131],childNum:1},geometry:{type:"Polygon",coordinates:["@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L"],encodeOffsets:[[119329,40782]]}},{type:"Feature",id:"110105",properties:{name:"朝阳区",cp:[116.4977,39.949],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH"],["@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB"]],encodeOffsets:[[[119169,40992]],[[119398,41063]]]}},{type:"Feature",id:"110108",properties:{name:"海淀区",cp:[116.2202,40.0239],childNum:1},geometry:{type:"Polygon",coordinates:["@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD"],encodeOffsets:[[118834,41050]]}},{type:"Feature",id:"110106",properties:{name:"丰台区",cp:[116.2683,39.8309],childNum:1},geometry:{type:"Polygon",coordinates:["@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A"],encodeOffsets:[[118958,40846]]}},{type:"Feature",id:"110107",properties:{name:"石景山区",cp:[116.1887,39.9346],childNum:1},geometry:{type:"Polygon",coordinates:["@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD"],encodeOffsets:[[118940,40953]]}},{type:"Feature",id:"110102",properties:{name:"西城区",cp:[116.3631,39.9353],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H"],encodeOffsets:[[119175,40932]]}},{type:"Feature",id:"110101",properties:{name:"东城区",cp:[116.418,39.9367],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J"],encodeOffsets:[[119182,40921]]}},{type:"Feature",id:"110104",properties:{name:"宣武区",cp:[116.3603,39.8852],childNum:1},geometry:{type:"Polygon",coordinates:["@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N"],encodeOffsets:[[119118,40855]]}},{type:"Feature",id:"110103",properties:{name:"崇文区",cp:[116.4166,39.8811],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H"],encodeOffsets:[[119175,40829]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/china_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"xin_jiang",properties:{name:"新疆",cp:[84.9023,41.748],childNum:18},geometry:{type:"Polygon",coordinates:["@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ"],encodeOffsets:[[98730,43786]]}},{type:"Feature",id:"xi_zang",properties:{name:"西藏",cp:[88.7695,31.6846],childNum:7},geometry:{type:"Polygon",coordinates:["@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ"],encodeOffsets:[[80911,35146]]}},{type:"Feature",id:"nei_meng_gu",properties:{name:"内蒙古",cp:[117.5977,44.3408],childNum:12},geometry:{type:"Polygon",coordinates:["@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ"],encodeOffsets:[[99540,43830]]}},{type:"Feature",id:"qing_hai",properties:{name:"青海",cp:[96.2402,35.4199],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜"],encodeOffsets:[[91890,36945]]}},{type:"Feature",id:"si_chuan",properties:{name:"四川",cp:[102.9199,30.1904],childNum:21},geometry:{type:"Polygon",coordinates:["@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ"],encodeOffsets:[[104220,34336]]}},{type:"Feature",id:"hei_long_jiang",properties:{name:"黑龙江",cp:[128.1445,48.5156],childNum:13},geometry:{type:"Polygon",coordinates:["@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ"],encodeOffsets:[[124380,54630]]}},{type:"Feature",id:"gan_su",properties:{name:"甘肃",cp:[95.7129,40.166],childNum:14},geometry:{type:"Polygon",coordinates:["@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ"],encodeOffsets:[[98730,43740]]}},{type:"Feature",id:"yun_nan",properties:{name:"云南",cp:[101.8652,25.1807],childNum:16},geometry:{type:"Polygon",coordinates:["@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ"],encodeOffsets:[[100530,28800]]}},{type:"Feature",id:"guang_xi",properties:{name:"广西",cp:[108.2813,23.6426],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ"],encodeOffsets:[[107011,25335]]}},{type:"Feature",id:"hu_nan",properties:{name:"湖南",cp:[111.5332,27.3779],childNum:14},geometry:{type:"Polygon",coordinates:["@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ"],encodeOffsets:[[111870,29161]]}},{type:"Feature",id:"shan_xi_1",properties:{name:"陕西",cp:[109.5996,35.6396],childNum:10},geometry:{type:"Polygon",coordinates:["@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ"],encodeOffsets:[[108001,33705]]}},{type:"Feature",id:"guang_dong",properties:{name:"广东",cp:[113.4668,22.8076],childNum:21},geometry:{type:"Polygon",coordinates:["@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@","@@X¯aWĀ„@l"],encodeOffsets:[[112411,21916],[116325,22697]]}},{type:"Feature",id:"ji_lin",properties:{name:"吉林",cp:[126.4746,43.5938],childNum:9},geometry:{type:"Polygon",coordinates:["@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ"],encodeOffsets:[[126181,47341]]}},{type:"Feature",id:"he_bei",properties:{name:"河北",cp:[115.4004,37.9688],childNum:11},geometry:{type:"MultiPolygon",coordinates:[["@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς"],["@@õə@Ƨɛ˜@ŐóƦφô"]],encodeOffsets:[[[117271,40455]],[[120061,41040]]]}},{type:"Feature",id:"hu_bei",properties:{name:"湖北",cp:[112.2363,31.1572],childNum:17},geometry:{type:"Polygon",coordinates:["@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎"],encodeOffsets:[[112860,31905]]}},{type:"Feature",id:"gui_zhou",properties:{name:"贵州",cp:[106.6113,26.9385],childNum:9},geometry:{type:"Polygon",coordinates:["@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ"],encodeOffsets:[[106651,27901]]}},{type:"Feature",id:"shan_dong",properties:{name:"山东",cp:[118.7402,36.4307],childNum:17},geometry:{type:"Polygon",coordinates:["@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒"],encodeOffsets:[[118261,37036]]}},{type:"Feature",id:"jiang_xi",properties:{name:"江西",cp:[116.0156,27.29],childNum:11},geometry:{type:"Polygon",coordinates:["@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ"],encodeOffsets:[[117e3,29025]]}},{type:"Feature",id:"he_nan",properties:{name:"河南",cp:[113.4668,33.8818],childNum:17},geometry:{type:"Polygon",coordinates:["@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐"],encodeOffsets:[[113040,35416]]}},{type:"Feature",id:"liao_ning",properties:{name:"辽宁",cp:[122.3438,41.0889],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО"],encodeOffsets:[[122131,42301]]}},{type:"Feature",id:"shan_xi_2",properties:{name:"山西",cp:[112.4121,37.6611],childNum:11},geometry:{type:"Polygon",coordinates:["@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ"],encodeOffsets:[[113581,39645]]}},{type:"Feature",id:"an_hui",properties:{name:"安徽",cp:[117.2461,32.0361],childNum:17},geometry:{type:"Polygon",coordinates:["@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ"],encodeOffsets:[[119431,34741]]}},{type:"Feature",id:"fu_jian",properties:{name:"福建",cp:[118.3008,25.9277],childNum:9},geometry:{type:"Polygon",coordinates:["@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ"],encodeOffsets:[[121321,28981]]}},{type:"Feature",id:"zhe_jiang",properties:{name:"浙江",cp:[120.498,29.0918],childNum:11},geometry:{type:"Polygon",coordinates:["@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ"],encodeOffsets:[[121051,30105]]}},{type:"Feature",id:"jiang_su",properties:{name:"江苏",cp:[120.0586,32.915],childNum:13},geometry:{type:"Polygon",coordinates:["@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ"],encodeOffsets:[[119161,35460]]}},{type:"Feature",id:"chong_qing",properties:{name:"重庆",cp:[107.7539,30.1904],childNum:40},geometry:{type:"Polygon",coordinates:["@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ"],encodeOffsets:[[111150,32446]]}},{type:"Feature",id:"ning_xia",properties:{name:"宁夏",cp:[105.9961,37.3096],childNum:5},geometry:{type:"Polygon",coordinates:["@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@"],encodeOffsets:[[106831,38340]]}},{type:"Feature",id:"hai_nan",properties:{name:"海南",cp:[109.9512,19.2041],childNum:18},geometry:{type:"Polygon",coordinates:["@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ"],encodeOffsets:[[111240,19846]]}},{type:"Feature",id:"tai_wan",properties:{name:"台湾",cp:[121.0254,23.5986],childNum:1},geometry:{type:"Polygon",coordinates:["@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ"],encodeOffsets:[[124831,25650]]}},{type:"Feature",id:"bei_jing",properties:{name:"北京",cp:[116.4551,40.2539],childNum:19},geometry:{type:"Polygon",coordinates:["@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ"],encodeOffsets:[[120241,41176]]}},{type:"Feature",id:"tian_jin",properties:{name:"天津",cp:[117.4219,39.4189],childNum:18},geometry:{type:"Polygon",coordinates:["@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО"],encodeOffsets:[[119610,40545]]}},{type:"Feature",id:"shang_hai",properties:{name:"上海",cp:[121.4648,31.2891],childNum:19},geometry:{type:"Polygon",coordinates:["@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒"],encodeOffsets:[[123840,31771]]}},{type:"Feature",id:"xiang_gang",properties:{name:"香港",cp:[114.2578,22.3242],childNum:1},geometry:{type:"Polygon",coordinates:["@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@"],encodeOffsets:[[117361,22950]]}},{type:"Feature",id:"ao_men",properties:{name:"澳门",cp:[113.5547,22.1484],childNum:1},geometry:{type:"Polygon",coordinates:["@@X¯aWĀ„@l"],encodeOffsets:[[116325,22697]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/chong_qing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"500242",properties:{name:"酉阳土家族苗族自治县",cp:[108.8196,28.8666],childNum:1},geometry:{type:"Polygon",coordinates:["@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ"],encodeOffsets:[[110914,29695]]}},{type:"Feature",id:"500236",properties:{name:"奉节县",cp:[109.3909,30.9265],childNum:1},geometry:{type:"Polygon",coordinates:["@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L"],encodeOffsets:[[111781,31658]]}},{type:"Feature",id:"500238",properties:{name:"巫溪县",cp:[109.3359,31.4813],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl"],encodeOffsets:[[111488,32361]]}},{type:"Feature",id:"500234",properties:{name:"开县",cp:[108.4131,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J"],encodeOffsets:[[111150,32434]]}},{type:"Feature",id:"500243",properties:{name:"彭水苗族土家族自治县",cp:[108.2043,29.3994],childNum:1},geometry:{type:"Polygon",coordinates:["@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦"],encodeOffsets:[[110408,29729]]}},{type:"Feature",id:"500235",properties:{name:"云阳县",cp:[108.8306,31.0089],childNum:1},geometry:{type:"Polygon",coordinates:["@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K"],encodeOffsets:[[111016,31742]]}},{type:"Feature",id:"500101",properties:{name:"万州区",cp:[108.3911,30.6958],childNum:1},geometry:{type:"Polygon",coordinates:["@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„"],encodeOffsets:[[110464,31551]]}},{type:"Feature",id:"500229",properties:{name:"城口县",cp:[108.7756,31.9098],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇƁ@a@yÞ_VmƒUnU@K"],encodeOffsets:[[111893,32513]]}},{type:"Feature",id:"500116",properties:{name:"江津区",cp:[106.2158,28.9874],childNum:1},geometry:{type:"Polygon",coordinates:["@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500240",properties:{name:"石柱土家族自治县",cp:[108.2813,30.1025],childNum:1},geometry:{type:"Polygon",coordinates:["@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ"],encodeOffsets:[[110588,30769]]}},{type:"Feature",id:"500237",properties:{name:"巫山县",cp:[109.8853,31.1188],childNum:1},geometry:{type:"Polygon",coordinates:["@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™@ğ±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn"],encodeOffsets:[[112399,31917]]}},{type:"Feature",id:"500102",properties:{name:"涪陵区",cp:[107.3364,29.6796],childNum:1},geometry:{type:"Polygon",coordinates:["@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b"],encodeOffsets:[[109508,30207]]}},{type:"Feature",id:"500230",properties:{name:"丰都县",cp:[107.8418,29.9048],childNum:1},geometry:{type:"Polygon",coordinates:["@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn"],encodeOffsets:[[110048,30713]]}},{type:"Feature",id:"500232",properties:{name:"武隆县",cp:[107.655,29.35],childNum:1},geometry:{type:"Polygon",coordinates:["@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚n¼ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„"],encodeOffsets:[[110262,30291]]}},{type:"Feature",id:"500119",properties:{name:"南川区",cp:[107.1716,29.1302],childNum:1},geometry:{type:"Polygon",coordinates:["@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx"],encodeOffsets:[[109463,29830]]}},{type:"Feature",id:"500241",properties:{name:"秀山土家族苗族自治县",cp:[109.0173,28.5205],childNum:1},geometry:{type:"Polygon",coordinates:["@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx"],encodeOffsets:[[111330,29183]]}},{type:"Feature",id:"500114",properties:{name:"黔江区",cp:[108.7207,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ"],encodeOffsets:[[111106,30420]]}},{type:"Feature",id:"500117",properties:{name:"合川区",cp:[106.3257,30.108],childNum:1},geometry:{type:"Polygon",coordinates:["@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500222",properties:{name:"綦江县",cp:[106.6553,28.8171],childNum:1},geometry:{type:"Polygon",coordinates:["@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤"],encodeOffsets:[[109137,29779]]}},{type:"Feature",id:"500233",properties:{name:"忠县",cp:[107.8967,30.3223],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb"],encodeOffsets:[[110239,31146]]}},{type:"Feature",id:"500228",properties:{name:"梁平县",cp:[107.7429,30.6519],childNum:1},geometry:{type:"Polygon",coordinates:["@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b"],encodeOffsets:[[109980,31247]]}},{type:"Feature",id:"500113",properties:{name:"巴南区",cp:[106.7322,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I"],encodeOffsets:[[108990,30061]]}},{type:"Feature",id:"500223",properties:{name:"潼南县",cp:[105.7764,30.1135],childNum:1},geometry:{type:"Polygon",coordinates:["@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500118",properties:{name:"永川区",cp:[105.8643,29.2566],childNum:1},geometry:{type:"Polygon",coordinates:["@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb"],encodeOffsets:[[108192,30038]]}},{type:"Feature",id:"500231",properties:{name:"垫江县",cp:[107.4573,30.2454],childNum:1},geometry:{type:"Polygon",coordinates:["@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn"],encodeOffsets:[[109812,30961]]}},{type:"Feature",id:"500112",properties:{name:"渝北区",cp:[106.7212,29.8499],childNum:1},geometry:{type:"Polygon",coordinates:["@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb"],encodeOffsets:[[109013,30381]]}},{type:"Feature",id:"500115",properties:{name:"长寿区",cp:[107.1606,29.9762],childNum:1},geometry:{type:"Polygon",coordinates:["@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@KÆ°na@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL"],encodeOffsets:[[109429,30747]]}},{type:"Feature",id:"500225",properties:{name:"大足县",cp:[105.7544,29.6136],childNum:1},geometry:{type:"Polygon",coordinates:["@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL"],encodeOffsets:[[108270,30578]]}},{type:"Feature",id:"500224",properties:{name:"铜梁县",cp:[106.0291,29.8059],childNum:1},geometry:{type:"Polygon",coordinates:["@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb"],encodeOffsets:[[108316,30527]]}},{type:"Feature",id:"500226",properties:{name:"荣昌县",cp:[105.5127,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@"],encodeOffsets:[[108012,30392]]}},{type:"Feature",id:"500227",properties:{name:"璧山县",cp:[106.2048,29.5807],childNum:1},geometry:{type:"Polygon",coordinates:["@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500109",properties:{name:"北碚区",cp:[106.5674,29.8883],childNum:1},geometry:{type:"Polygon",coordinates:["@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI"],encodeOffsets:[[108855,30449]]}},{type:"Feature",id:"500110",properties:{name:"万盛区",cp:[106.908,28.9325],childNum:1},geometry:{type:"Polygon",coordinates:["@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m"],encodeOffsets:[[109452,29779]]}},{type:"Feature",id:"500107",properties:{name:"九龙坡区",cp:[106.3586,29.4049],childNum:1},geometry:{type:"Polygon",coordinates:["@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500106",properties:{name:"沙坪坝区",cp:[106.3696,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500108",properties:{name:"南岸区",cp:[106.6663,29.5367],childNum:1},geometry:{type:"Polygon",coordinates:["@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n"],encodeOffsets:[[109092,30241]]}},{type:"Feature",id:"500105",properties:{name:"江北区",cp:[106.8311,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l"],encodeOffsets:[[109013,30319]]}},{type:"Feature",id:"500104",properties:{name:"大渡口区",cp:[106.4905,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U"],encodeOffsets:[[109080,30190]]}},{type:"Feature",id:"500111",properties:{name:"双桥区",cp:[105.7874,29.4928],childNum:1},geometry:{type:"Polygon",coordinates:["@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK"],encodeOffsets:[[108372,30235]]}},{type:"Feature",id:"500103",properties:{name:"渝中区",cp:[106.5344,29.5477],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@"],encodeOffsets:[[109036,30257]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/fu_jian_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3507",properties:{name:"南平市",cp:[118.136,27.2845],childNum:10},geometry:{type:"Polygon",coordinates:["@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV"],encodeOffsets:[[122119,28086]]}},{type:"Feature",id:"3504",properties:{name:"三明市",cp:[117.5317,26.3013],childNum:11},geometry:{type:"Polygon",coordinates:["@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb"], -encodeOffsets:[[119858,27754]]}},{type:"Feature",id:"3508",properties:{name:"龙岩市",cp:[116.8066,25.2026],childNum:7},geometry:{type:"Polygon",coordinates:["@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ"],encodeOffsets:[[119194,26657]]}},{type:"Feature",id:"3509",properties:{name:"宁德市",cp:[119.6521,26.9824],childNum:9},geometry:{type:"Polygon",coordinates:["@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢÇ°aUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV"],encodeOffsets:[[121816,27816]]}},{type:"Feature",id:"3501",properties:{name:"福州市",cp:[119.4543,25.9222],childNum:9},geometry:{type:"Polygon",coordinates:["@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ñ°wôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„"],encodeOffsets:[[121253,26511]]}},{type:"Feature",id:"3506",properties:{name:"漳州市",cp:[117.5757,24.3732],childNum:10},geometry:{type:"Polygon",coordinates:["@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL"],encodeOffsets:[[119712,24953]]}},{type:"Feature",id:"3505",properties:{name:"泉州市",cp:[118.3228,25.1147],childNum:9},geometry:{type:"Polygon",coordinates:["@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xÇ°öÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb"],encodeOffsets:[[120398,25797]]}},{type:"Feature",id:"3503",properties:{name:"莆田市",cp:[119.0918,25.3455],childNum:2},geometry:{type:"Polygon",coordinates:["@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX"],encodeOffsets:[[121388,26264]]}},{type:"Feature",id:"3502",properties:{name:"厦门市",cp:[118.1689,24.6478],childNum:1},geometry:{type:"Polygon",coordinates:["@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x"],encodeOffsets:[[120747,25465]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gan_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6209",properties:{name:"酒泉市",cp:[96.2622,40.4517],childNum:8},geometry:{type:"Polygon",coordinates:["@@ÇnÅaĉ@ƒU¯¥›UŹ‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™UġŽkUŻnUW™@š¯ƒk»šmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨaġ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼ǬŚ²¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°VĀ¯b@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸĢƒ°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ"],encodeOffsets:[[101892,40821]]}},{type:"Feature",id:"6207",properties:{name:"张掖市",cp:[99.7998,38.7433],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„Ñ°VVwšJ²»ÆԚVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnÇ°U¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒkŻŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x"],encodeOffsets:[[99720,40090]]}},{type:"Feature",id:"6230",properties:{name:"甘南藏族自治州",cp:[102.9199,34.6893],childNum:9},geometry:{type:"Polygon",coordinates:["@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒU¯šyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ŽÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDŽW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™n҄U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w"],encodeOffsets:[[105210,36349]]}},{type:"Feature",id:"6206",properties:{name:"武威市",cp:[103.0188,38.1061],childNum:4},geometry:{type:"Polygon",coordinates:["@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„@șÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mŁyġ™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů"],encodeOffsets:[[106336,38543]]}},{type:"Feature",id:"6212",properties:{name:"陇南市",cp:[105.304,33.5632],childNum:9},geometry:{type:"Polygon",coordinates:["@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšI°Žl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšJ°Ž@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšVуlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼"],encodeOffsets:[[106527,34943]]}},{type:"Feature",id:"6210",properties:{name:"庆阳市",cp:[107.5342,36.2],childNum:8},geometry:{type:"Polygon",coordinates:["@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôÇ°ğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšVȃlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w"],encodeOffsets:[[111229,36383]]}},{type:"Feature",id:"6204",properties:{name:"白银市",cp:[104.8645,36.5076],childNum:6},geometry:{type:"Polygon",coordinates:["@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImŽ¯Uk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒaó„kŽ@b@nmbkx„°"],encodeOffsets:[[106077,37885]]}},{type:"Feature",id:"6211",properties:{name:"定西市",cp:[104.5569,35.0848],childNum:7},geometry:{type:"Polygon",coordinates:["@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„U¦™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@"],encodeOffsets:[[106122,36794]]}},{type:"Feature",id:"6205",properties:{name:"天水市",cp:[105.6445,34.6289],childNum:6},geometry:{type:"Polygon",coordinates:["@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„W°„nkVŽ‚UÈlš£°V@n¥šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„m¼™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒb݃ƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@Ž°KVz„Kl¤„nÞ݂Èkb„‚܁"],encodeOffsets:[[108180,35984]]}},{type:"Feature",id:"6201",properties:{name:"兰州市",cp:[103.5901,36.3043],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„L°„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—KŻ¼™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U"],["@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢnĢƒVLU‚°k"]],encodeOffsets:[[[105188,37649]],[[106077,37885]]]}},{type:"Feature",id:"6208",properties:{name:"平凉市",cp:[107.0728,35.321],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nšJ°„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUUKDŽÅaġlmkUġlƒ»—Lƒl™Um¦@Ž¯U™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„","@@@Žż@™mlkƒġk"],encodeOffsets:[[107877,36338],[108439,36265]]}},{type:"Feature",id:"6229",properties:{name:"临夏回族自治州",cp:[103.2715,35.5737],childNum:8},geometry:{type:"Polygon",coordinates:["@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV"],encodeOffsets:[[105548,37075]]}},{type:"Feature",id:"6203",properties:{name:"金昌市",cp:[102.074,38.5126],childNum:2},geometry:{type:"Polygon",coordinates:["@@šĢȼ™„Çł°bœU°šV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™@݃±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`"],encodeOffsets:[[103849,38970]]}},{type:"Feature",id:"6202",properties:{name:"嘉峪关市",cp:[98.1738,39.8035],childNum:1},geometry:{type:"Polygon",coordinates:["@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb"],encodeOffsets:[[100182,40664]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4418",properties:{name:"清远市",cp:[112.9175,24.3292],childNum:8},geometry:{type:"Polygon",coordinates:["@@lǯkÿƒaV¯™VaÈU„¥ÆDŽIlxšmnb‚Uœxl™„Uôl°kš„„Wl„š@ô™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„È°Æ„@¼™„@x„šWxœŎ‚V„šK°„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV"],encodeOffsets:[[115707,25527]]}},{type:"Feature",id:"4402",properties:{name:"韶关市",cp:[113.7964,24.7028],childNum:8},geometry:{type:"Polygon",coordinates:["@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽU°„blĀ°ŽkÈ@x™¦Æܙ°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜KȚ„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥"],encodeOffsets:[[117147,25549]]}},{type:"Feature",id:"4408",properties:{name:"湛江市",cp:[110.3577,20.9894],childNum:6},geometry:{type:"Polygon",coordinates:["@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊUĖ±ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@"],encodeOffsets:[[113040,22416]]}},{type:"Feature",id:"4414",properties:{name:"梅州市",cp:[116.1255,24.1534],childNum:8},geometry:{type:"Polygon",coordinates:["@@„‚nԚlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛĖšnƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_J°m‚@X"],encodeOffsets:[[118125,24419]]}},{type:"Feature",id:"4416",properties:{name:"河源市",cp:[114.917,23.9722],childNum:6},geometry:{type:"Polygon",coordinates:["@@°VlmX¹laĢÒlm„@„„šVš£‚‚@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwa¯š@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„lȄ¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn"],encodeOffsets:[[117057,25167]]}},{type:"Feature",id:"4412",properties:{name:"肇庆市",cp:[112.1265,23.5822],childNum:7},geometry:{type:"Polygon",coordinates:["@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„Kš™k¥™£Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›W¯—Û`Ç_¯`mš¯I™bĉWċzx±J™xš¯ÆUƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚m²˜@ÞWxXš‚Unb"],encodeOffsets:[[114627,24818]]}},{type:"Feature",id:"4413",properties:{name:"惠州市",cp:[114.6204,23.1647],childNum:4},geometry:{type:"Polygon",coordinates:["@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUŽL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n"],encodeOffsets:[[116776,24492]]}},{type:"Feature",id:"4409",properties:{name:"茂名市",cp:[111.0059,22.0221],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒkV¯™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒa±„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš"],encodeOffsets:[[113761,23237]]}},{type:"Feature",id:"4407",properties:{name:"江门市",cp:[112.6318,22.1484],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„l¯œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦"],encodeOffsets:[[114852,22928]]}},{type:"Feature",id:"4417",properties:{name:"阳江市",cp:[111.8298,22.0715],childNum:4},geometry:{type:"Polygon",coordinates:["@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆƄ™k¥‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›l¯ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„"],encodeOffsets:[[114053,22782]]}},{type:"Feature",id:"4453",properties:{name:"云浮市",cp:[111.7859,22.8516],childNum:5},geometry:{type:"Polygon",coordinates:["@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx"],encodeOffsets:[[114053,23873]]}},{type:"Feature",id:"4401",properties:{name:"广州市",cp:[113.5107,23.2196],childNum:13},geometry:{type:"Polygon",coordinates:["@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±VU¥™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„V¼™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l"],encodeOffsets:[[115673,24019]]}},{type:"Feature",id:"4415",properties:{name:"汕尾市",cp:[115.5762,23.0438],childNum:4},geometry:{type:"Polygon",coordinates:["@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„V°„Ll‚²xlz"],encodeOffsets:[[118193,23806]]}},{type:"Feature",id:"4452",properties:{name:"揭阳市",cp:[116.1255,23.313],childNum:5},geometry:{type:"Polygon",coordinates:["@@V„Ȧ„Æ@X°V@@¼‚x²°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚mĢl@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„V»ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ"],encodeOffsets:[[118384,24036]]}},{type:"Feature",id:"4404",properties:{name:"珠海市",cp:[113.7305,22.1155],childNum:1},geometry:{type:"Polygon",coordinates:["@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçƏ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț","@@X¯kmèVbnJ‚™"],encodeOffsets:[[115774,22602],[116325,22697]]}},{type:"Feature",id:"4406",properties:{name:"佛山市",cp:[112.8955,23.1097],childNum:1},geometry:{type:"Polygon",coordinates:["@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°@±„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑWݐƒĊÛ@Ǧ™W¯Wݗw›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ"],encodeOffsets:[[115088,23316]]}},{type:"Feature",id:"4451",properties:{name:"潮州市",cp:[116.7847,23.8293],childNum:3},geometry:{type:"Polygon",coordinates:["@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġŽn@l"],encodeOffsets:[[119161,24306]]}},{type:"Feature",id:"4405",properties:{name:"汕头市",cp:[117.1692,23.3405],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x"],encodeOffsets:[[119251,24059]]}},{type:"Feature",id:"4403",properties:{name:"深圳市",cp:[114.5435,22.5439],childNum:1},geometry:{type:"Polygon",coordinates:["@@ÞLš„@xšbV„šVšK°™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ"],encodeOffsets:[[116404,23265]]}},{type:"Feature",id:"4419",properties:{name:"东莞市",cp:[113.8953,22.901],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy"],encodeOffsets:[[116573,23670]]}},{type:"Feature",id:"4420",properties:{name:"中山市",cp:[113.4229,22.478],childNum:1},geometry:{type:"Polygon",coordinates:["@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš"],encodeOffsets:[[115887,23209]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4510",properties:{name:"百色市",cp:[106.6003,23.9227],childNum:12},geometry:{type:"Polygon",coordinates:["@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4512",properties:{name:"河池市",cp:[107.8638,24.5819],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4503",properties:{name:"桂林市",cp:[110.5554,25.318],childNum:13},geometry:{type:"Polygon",coordinates:["@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4501",properties:{name:"南宁市",cp:[108.479,23.1152],childNum:7},geometry:{type:"Polygon",coordinates:["@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV"],encodeOffsets:[[109958,23806]]}},{type:"Feature",id:"4502",properties:{name:"柳州市",cp:[109.3799,24.9774],childNum:7},geometry:{type:"Polygon",coordinates:["@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4514",properties:{name:"崇左市",cp:[107.3364,22.4725],childNum:7},geometry:{type:"Polygon",coordinates:["@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L"],encodeOffsets:[[109227,23440]]}},{type:"Feature",id:"4513",properties:{name:"来宾市",cp:[109.7095,23.8403],childNum:6},geometry:{type:"Polygon",coordinates:["@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„"],encodeOffsets:[[111083,24599]]}},{type:"Feature",id:"4509",properties:{name:"玉林市",cp:[110.2148,22.3792],childNum:6},geometry:{type:"Polygon",coordinates:["@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb"],encodeOffsets:[[112478,22872]]}},{type:"Feature",id:"4504",properties:{name:"梧州市",cp:[110.9949,23.5052],childNum:6},geometry:{type:"Polygon",coordinates:["@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mŽwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@"],encodeOffsets:[[112973,24863]]}},{type:"Feature",id:"4511",properties:{name:"贺州市",cp:[111.3135,24.4006],childNum:4},geometry:{type:"Polygon",coordinates:["@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@Ž@ƒxU_mƒXmmamLkUkKVkUƒVу¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb"],encodeOffsets:[[113220,24947]]}},{type:"Feature",id:"4507",properties:{name:"钦州市",cp:[109.0283,22.0935],childNum:3},geometry:{type:"Polygon",coordinates:["@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@"],encodeOffsets:[[110881,22742]]}},{type:"Feature",id:"4508",properties:{name:"贵港市",cp:[109.9402,23.3459],childNum:3},geometry:{type:"Polygon",coordinates:["@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆȄKnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚"],encodeOffsets:[[112568,24255]]}},{type:"Feature",id:"4506",properties:{name:"防城港市",cp:[108.0505,21.9287],childNum:3},geometry:{type:"Polygon",coordinates:["@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒIğ™Ç@U@mVUKkkm@UJm@XnWV@x"],encodeOffsets:[[110070,22174]]}},{type:"Feature",id:"4505",properties:{name:"北海市",cp:[109.314,21.6211],childNum:2},geometry:{type:"Polygon",coordinates:["@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmV@ǃ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ"],encodeOffsets:[[112242,22444]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gui_zhou_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5203",properties:{name:"遵义市",cp:[106.908,28.1744],childNum:14},geometry:{type:"MultiPolygon",coordinates:[["@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m"],["@@@KlKkUUVVX"]], -encodeOffsets:[[[108799,29239]],[[110532,27822]]]}},{type:"Feature",id:"5226",properties:{name:"黔东南苗族侗族自治州",cp:[108.4241,26.4166],childNum:17},geometry:{type:"MultiPolygon",coordinates:[["@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J","@@@KlKkUUVVX"],["@@UUVUkUmV@ln@VXVK@K"]],encodeOffsets:[[[110318,27214],[110532,27822]],[[112219,27394]]]}},{type:"Feature",id:"5224",properties:{name:"毕节地区",cp:[105.1611,27.0648],childNum:8},geometry:{type:"Polygon",coordinates:["@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK","@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ"],encodeOffsets:[[108552,28412],[107213,27445]]}},{type:"Feature",id:"5227",properties:{name:"黔南布依族苗族自治州",cp:[107.2485,25.8398],childNum:12},geometry:{type:"Polygon",coordinates:["@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n"],encodeOffsets:[[108912,26905]]}},{type:"Feature",id:"5222",properties:{name:"铜仁地区",cp:[108.6218,28.0096],childNum:10},geometry:{type:"Polygon",coordinates:["@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb"],encodeOffsets:[[110667,29785]]}},{type:"Feature",id:"5223",properties:{name:"黔西南布依族苗族自治州",cp:[105.5347,25.3949],childNum:8},geometry:{type:"Polygon",coordinates:["@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„V¦ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšU°ƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V"],encodeOffsets:[[107157,25965]]}},{type:"Feature",id:"5202",properties:{name:"六盘水市",cp:[104.7546,26.0925],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™@DŽU¥›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš@°˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL"],["@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa"]],encodeOffsets:[[[107089,27181]],[[107213,27479]]]}},{type:"Feature",id:"5204",properties:{name:"安顺市",cp:[105.9082,25.9882],childNum:6},geometry:{type:"Polygon",coordinates:["@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@"],encodeOffsets:[[108237,26792]]}},{type:"Feature",id:"5201",properties:{name:"贵阳市",cp:[106.6992,26.7682],childNum:5},geometry:{type:"Polygon",coordinates:["@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b"],encodeOffsets:[[108945,27760]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hai_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"469003",properties:{name:"儋州市",cp:[109.3291,19.5653],childNum:1},geometry:{type:"Polygon",coordinates:["@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”"],encodeOffsets:[[111506,20018]]}},{type:"Feature",id:"469005",properties:{name:"文昌市",cp:[110.8905,19.7823],childNum:1},geometry:{type:"Polygon",coordinates:["@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà"],encodeOffsets:[[113115,20665]]}},{type:"Feature",id:"469033",properties:{name:"乐东黎族自治县",cp:[109.0283,18.6301],childNum:1},geometry:{type:"Polygon",coordinates:["@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø"],encodeOffsets:[[111263,19164]]}},{type:"Feature",id:"4602",properties:{name:"三亚市",cp:[109.3716,18.3698],childNum:1},geometry:{type:"Polygon",coordinates:["@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰lɂwr}jŸR±E{L}j]HąKÃT[P"],encodeOffsets:[[111547,18737]]}},{type:"Feature",id:"469036",properties:{name:"琼中黎族苗族自治县",cp:[109.8413,19.0736],childNum:1},geometry:{type:"Polygon",coordinates:["@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd"],encodeOffsets:[[112153,19488]]}},{type:"Feature",id:"469007",properties:{name:"东方市",cp:[108.8498,19.0414],childNum:1},geometry:{type:"Polygon",coordinates:["@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ"],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"4601",properties:{name:"海口市",cp:[110.3893,19.8516],childNum:1},geometry:{type:"Polygon",coordinates:["@@ńZƂtĢ¬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ"],encodeOffsets:[[112711,20572]]}},{type:"Feature",id:"469006",properties:{name:"万宁市",cp:[110.3137,18.8388],childNum:1},geometry:{type:"Polygon",coordinates:["@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`"],encodeOffsets:[[112657,19182]]}},{type:"Feature",id:"469027",properties:{name:"澄迈县",cp:[109.9937,19.7314],childNum:1},geometry:{type:"Polygon",coordinates:["@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj"],encodeOffsets:[[112385,19987]]}},{type:"Feature",id:"469030",properties:{name:"白沙黎族自治县",cp:[109.3703,19.211],childNum:1},geometry:{type:"Polygon",coordinates:["@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^"],encodeOffsets:[[111665,19890]]}},{type:"Feature",id:"469002",properties:{name:"琼海市",cp:[110.4208,19.224],childNum:1},geometry:{type:"Polygon",coordinates:["@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh"],encodeOffsets:[[112763,19595]]}},{type:"Feature",id:"469031",properties:{name:"昌江黎族自治县",cp:[109.0407,19.2137],childNum:1},geometry:{type:"Polygon",coordinates:["@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ "],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"469028",properties:{name:"临高县",cp:[109.6957,19.8063],childNum:1},geometry:{type:"Polygon",coordinates:["@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê"],encodeOffsets:[[112122,20431]]}},{type:"Feature",id:"469034",properties:{name:"陵水黎族自治县",cp:[109.9924,18.5415],childNum:1},geometry:{type:"Polygon",coordinates:["@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj"],encodeOffsets:[[112409,19261]]}},{type:"Feature",id:"469026",properties:{name:"屯昌县",cp:[110.0377,19.362],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@"],encodeOffsets:[[112513,19852]]}},{type:"Feature",id:"469025",properties:{name:"定安县",cp:[110.3384,19.4698],childNum:1},geometry:{type:"Polygon",coordinates:["@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL"],encodeOffsets:[[112903,20139]]}},{type:"Feature",id:"469035",properties:{name:"保亭黎族苗族自治县",cp:[109.6284,18.6108],childNum:1},geometry:{type:"Polygon",coordinates:["@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN"],encodeOffsets:[[112031,19071]]}},{type:"Feature",id:"469001",properties:{name:"五指山市",cp:[109.5282,18.8299],childNum:1},geometry:{type:"Polygon",coordinates:["@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH"],encodeOffsets:[[111973,19401]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hei_long_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2311",properties:{name:"黑河市",cp:[127.1448,49.2957],childNum:6},geometry:{type:"Polygon",coordinates:["@@VÈÞ@Žkx˜nXŽ°VÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lČ¯ĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™Uķ‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœx°ƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒwĉ‚ĉmmn_V»™a@U™ƒVwķóƒ‚U¦LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUĶ°@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧUó„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@Ž¯„‚bU°ğL݂Ý@"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2327",properties:{name:"大兴安岭地区",cp:[124.1016,52.2345],childNum:3},geometry:{type:"Polygon",coordinates:["@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯aó¼›KՃaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„V¦™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™bĊš„„ÞVƚnŽĸ²lxUŽ°n°òÈb‚¦—xVbƒŽƒ@¯„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥ĢŽ°@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒJómƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥"],encodeOffsets:[[130084,52206]]}},{type:"Feature",id:"2301",properties:{name:"哈尔滨市",cp:[127.9688,45.368],childNum:11},geometry:{type:"Polygon",coordinates:["@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVÑ°UȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜lŎ²ÆškšV‚I@ŽnJnĠŽ°knƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒJĉƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„kĊƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxŹ²mKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁšmºšÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn"],encodeOffsets:[[128712,46604]]}},{type:"Feature",id:"2302",properties:{name:"齐齐哈尔市",cp:[124.541,47.5818],childNum:11},geometry:{type:"Polygon",coordinates:["@@Þ@ށĠKV¯a°ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—KݍVwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šVôƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2310",properties:{name:"牡丹江市",cp:[129.7815,44.7089],childNum:7},geometry:{type:"Polygon",coordinates:["@@U`lLUlVL„Ulb„aô„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaÝ°¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—@±ƒUk@Wwƒa¯xU„V°ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž@¼™VUx@x¯W¼™Æ¯šmĖ„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„KĊŽ„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b"],encodeOffsets:[[132672,46936]]}},{type:"Feature",id:"2312",properties:{name:"绥化市",cp:[126.7163,46.8018],childNum:10},geometry:{type:"Polygon",coordinates:["@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒUȃ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™L¯ƒUkōƒÇVU™l›w—V󁱃¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķŽ±„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@UkV±@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒV°Ž@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2307",properties:{name:"伊春市",cp:[129.1992,47.9608],childNum:3},geometry:{type:"Polygon",coordinates:["@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVŽ¯¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™V¥„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚X£šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxĶ°nœU`@x°¦@"],encodeOffsets:[[131637,48556]]}},{type:"Feature",id:"2308",properties:{name:"佳木斯市",cp:[133.0005,47.5763],childNum:7},geometry:{type:"Polygon",coordinates:["@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@VôbšwĊ‚lœ„JķĸĢl„wôwƨxVVUƒŦšxšLź™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶaĢȰ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx"],encodeOffsets:[[132615,47740]]}},{type:"Feature",id:"2303",properties:{name:"鸡西市",cp:[132.7917,45.7361],childNum:4},geometry:{type:"Polygon",coordinates:["@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVŽ°lšwVk„Lšaގl„n҄š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™wġk@@IÇóX™ƒwVakmV@mwXUWanƒlĉ@ǙUw™KƒƒóšܛNJۄm°@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ"],encodeOffsets:[[133921,46716]]}},{type:"Feature",id:"2305",properties:{name:"双鸭山市",cp:[133.5938,46.7523],childNum:5},geometry:{type:"Polygon",coordinates:["@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒXóƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VÈ°lLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™W¯„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™@»„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„LƚÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀƄ„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU"],encodeOffsets:[[137577,48578]]}},{type:"Feature",id:"2306",properties:{name:"大庆市",cp:[124.7717,46.4282],childNum:5},geometry:{type:"Polygon",coordinates:["@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIÆ°„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2304",properties:{name:"鹤岗市",cp:[130.4407,47.7081],childNum:3},geometry:{type:"Polygon",coordinates:["@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšVƾƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_ǙŹš™K™wťŽ„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVmUŻ„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°"],encodeOffsets:[[132998,49478]]}},{type:"Feature",id:"2309",properties:{name:"七台河市",cp:[131.2756,45.9558],childNum:2},geometry:{type:"Polygon",coordinates:["@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkŽ¯@@n±KnŚlbkVV‚mz—lWXº@Ķ°"],encodeOffsets:[[133369,47228]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1308",properties:{name:"承德市",cp:[117.5757,41.4075],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1307",properties:{name:"张家口市",cp:[115.1477,40.8527],childNum:15},geometry:{type:"Polygon",coordinates:["@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1306",properties:{name:"保定市",cp:[115.0488,39.0948],childNum:23},geometry:{type:"Polygon",coordinates:["@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL"],encodeOffsets:[[117304,40512]]}},{type:"Feature",id:"1302",properties:{name:"唐山市",cp:[118.4766,39.6826],childNum:11},geometry:{type:"Polygon",coordinates:["@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒn»‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b"],encodeOffsets:[[120398,41159]]}},{type:"Feature",id:"1309",properties:{name:"沧州市",cp:[116.8286,38.2104],childNum:15},geometry:{type:"Polygon",coordinates:["@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„KôVm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@"],encodeOffsets:[[118485,39280]]}},{type:"Feature",id:"1301",properties:{name:"石家庄市",cp:[114.4995,38.1006],childNum:19},geometry:{type:"Polygon",coordinates:["@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒUóŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I"],encodeOffsets:[[116562,39691]]}},{type:"Feature",id:"1305",properties:{name:"邢台市",cp:[114.8071,37.2821],childNum:18},geometry:{type:"Polygon",coordinates:["@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx"],encodeOffsets:[[116764,38346]]}},{type:"Feature",id:"1304",properties:{name:"邯郸市",cp:[114.4775,36.535],childNum:18},geometry:{type:"Polygon",coordinates:["@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W@DŽU@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV"],encodeOffsets:[[116528,37885]]}},{type:"Feature",id:"1303",properties:{name:"秦皇岛市",cp:[119.2126,40.0232],childNum:5},geometry:{type:"Polygon",coordinates:["@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ@їţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl"],encodeOffsets:[[121411,41254]]}},{type:"Feature",id:"1311",properties:{name:"衡水市",cp:[115.8838,37.7161],childNum:11},geometry:{type:"Polygon",coordinates:["@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@"],encodeOffsets:[[118024,38549]]}},{type:"Feature",id:"1310",properties:{name:"廊坊市",cp:[116.521,39.0509],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L"],["@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U"]],encodeOffsets:[[[119037,40467]],[[119970,40776]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_nan_geo",[],function(){ -return{type:"FeatureCollection",features:[{type:"Feature",id:"4113",properties:{name:"南阳市",cp:[112.4011,33.0359],childNum:12},geometry:{type:"Polygon",coordinates:["@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVašJ°™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmŁ¯Vƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„JƗn@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n"],encodeOffsets:[[113671,34364]]}},{type:"Feature",id:"4115",properties:{name:"信阳市",cp:[114.8291,32.0197],childNum:9},geometry:{type:"Polygon",coordinates:["@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b"],encodeOffsets:[[116551,33385]]}},{type:"Feature",id:"4103",properties:{name:"洛阳市",cp:[112.0605,34.3158],childNum:11},geometry:{type:"Polygon",coordinates:["@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ŽnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b"],encodeOffsets:[[114683,35551]]}},{type:"Feature",id:"4117",properties:{name:"驻马店市",cp:[114.1589,32.9041],childNum:10},geometry:{type:"Polygon",coordinates:["@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ŽLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb"],encodeOffsets:[[115920,33863]]}},{type:"Feature",id:"4116",properties:{name:"周口市",cp:[114.873,33.6951],childNum:10},geometry:{type:"Polygon",coordinates:["@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x"],encodeOffsets:[[116832,34527]]}},{type:"Feature",id:"4114",properties:{name:"商丘市",cp:[115.741,34.2828],childNum:8},geometry:{type:"Polygon",coordinates:["@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn"],encodeOffsets:[[118024,35680]]}},{type:"Feature",id:"4112",properties:{name:"三门峡市",cp:[110.8301,34.3158],childNum:6},geometry:{type:"Polygon",coordinates:["@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmVсkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_"],encodeOffsets:[[114661,35911]]}},{type:"Feature",id:"4107",properties:{name:"新乡市",cp:[114.2029,35.3595],childNum:9},geometry:{type:"Polygon",coordinates:["@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wšmôšnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„mº@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx"],encodeOffsets:[[116100,36349]]}},{type:"Feature",id:"4104",properties:{name:"平顶山市",cp:[112.9724,33.739],childNum:8},geometry:{type:"Polygon",coordinates:["@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b"],encodeOffsets:[[114942,34527]]}},{type:"Feature",id:"4101",properties:{name:"郑州市",cp:[113.4668,34.6234],childNum:8},geometry:{type:"Polygon",coordinates:["@@@nWVUKÅ@W„nVnI‚ŽV@œkƂšwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V"],encodeOffsets:[[115617,35584]]}},{type:"Feature",id:"4105",properties:{name:"安阳市",cp:[114.5325,36.0022],childNum:6},geometry:{type:"Polygon",coordinates:["@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™I¯ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™"],encodeOffsets:[[117676,36917]]}},{type:"Feature",id:"4102",properties:{name:"开封市",cp:[114.5764,34.6124],childNum:6},geometry:{type:"Polygon",coordinates:["@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ"],encodeOffsets:[[116641,35280]]}},{type:"Feature",id:"4108",properties:{name:"焦作市",cp:[112.8406,35.1508],childNum:8},geometry:{type:"Polygon",coordinates:["@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™xŁ›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b"],encodeOffsets:[[114728,35888]]}},{type:"Feature",id:"4110",properties:{name:"许昌市",cp:[113.6975,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„W°lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx"],encodeOffsets:[[115797,35089]]}},{type:"Feature",id:"4109",properties:{name:"濮阳市",cp:[115.1917,35.799],childNum:6},geometry:{type:"Polygon",coordinates:["@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl"],encodeOffsets:[[117642,36501]]}},{type:"Feature",id:"4111",properties:{name:"漯河市",cp:[113.8733,33.6951],childNum:3},geometry:{type:"Polygon",coordinates:["@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêƎ"],encodeOffsets:[[116348,34431]]}},{type:"Feature",id:"4106",properties:{name:"鹤壁市",cp:[114.3787,35.744],childNum:3},geometry:{type:"Polygon",coordinates:["@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlŽ°lö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank"],encodeOffsets:[[117158,36338]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4228",properties:{name:"恩施土家族苗族自治州",cp:[109.5007,30.2563],childNum:8},geometry:{type:"Polygon",coordinates:["@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚Ķš@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš"],encodeOffsets:[[112816,32052]]}},{type:"Feature",id:"4203",properties:{name:"十堰市",cp:[110.5115,32.3877],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„šm²„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW"],["@@mUkUUm@nllVKXXVK"]],encodeOffsets:[[[113918,33739]],[[113817,32811]]]}},{type:"Feature",id:"4205",properties:{name:"宜昌市",cp:[111.1707,30.7617],childNum:9},geometry:{type:"Polygon",coordinates:["@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Uގ„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X"],encodeOffsets:[[112906,30961]]}},{type:"Feature",id:"4206",properties:{name:"襄樊市",cp:[111.9397,31.9263],childNum:7},geometry:{type:"Polygon",coordinates:["@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„yƍXnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš","@@kUUm@nllVKXXVKmU"],encodeOffsets:[[113423,32597],[113794,32800]]}},{type:"Feature",id:"4211",properties:{name:"黄冈市",cp:[115.2686,30.6628],childNum:10},geometry:{type:"Polygon",coordinates:["@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkÇ°£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUÇ°»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V"],encodeOffsets:[[117181,32063]]}},{type:"Feature",id:"4210",properties:{name:"荆州市",cp:[113.291,30.0092],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„bܙ@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚@ö—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX"],encodeOffsets:[[113918,30764]]}},{type:"Feature",id:"4208",properties:{name:"荆门市",cp:[112.6758,30.9979],childNum:4},geometry:{type:"Polygon",coordinates:["@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LƒV¯™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V"],encodeOffsets:[[114548,31984]]}},{type:"Feature",id:"4212",properties:{name:"咸宁市",cp:[114.2578,29.6631],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞƂLČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n"],encodeOffsets:[[116303,30567]]}},{type:"Feature",id:"4213",properties:{name:"随州市",cp:[113.4338,31.8768],childNum:2},geometry:{type:"Polygon",coordinates:["@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV"],encodeOffsets:[[115830,33154]]}},{type:"Feature",id:"4209",properties:{name:"孝感市",cp:[113.9502,31.1188],childNum:7},geometry:{type:"Polygon",coordinates:["@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml"],encodeOffsets:[[116033,32091]]}},{type:"Feature",id:"4201",properties:{name:"武汉市",cp:[114.3896,30.6628],childNum:1},geometry:{type:"Polygon",coordinates:["@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL"],encodeOffsets:[[117e3,32097]]}},{type:"Feature",id:"4202",properties:{name:"黄石市",cp:[115.0159,29.9213],childNum:3},geometry:{type:"Polygon",coordinates:["@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV"],encodeOffsets:[[117282,30685]]}},{type:"Feature",id:"429021",properties:{name:"神农架林区",cp:[110.4565,31.5802],childNum:1},geometry:{type:"Polygon",coordinates:["@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„"],encodeOffsets:[[112624,32266]]}},{type:"Feature",id:"429006",properties:{name:"天门市",cp:[113.0273,30.6409],childNum:1},geometry:{type:"Polygon",coordinates:["@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL"],encodeOffsets:[[116056,31636]]}},{type:"Feature",id:"429004",properties:{name:"仙桃市",cp:[113.3789,30.3003],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL"],encodeOffsets:[[115662,31259]]}},{type:"Feature",id:"429005",properties:{name:"潜江市",cp:[112.7637,30.3607],childNum:1},geometry:{type:"Polygon",coordinates:["@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V"],encodeOffsets:[[115234,31118]]}},{type:"Feature",id:"4207",properties:{name:"鄂州市",cp:[114.7302,30.4102],childNum:1},geometry:{type:"Polygon",coordinates:["@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@"],encodeOffsets:[[117541,31349]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4312",properties:{name:"怀化市",cp:[109.9512,27.4438],childNum:12},geometry:{type:"Polygon",coordinates:["@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@Ž²LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb","@@XLVKVXVKUa@UUUmV@l"],encodeOffsets:[[112050,28384],[112174,27394]]}},{type:"Feature",id:"4311",properties:{name:"永州市",cp:[111.709,25.752],childNum:10},geometry:{type:"Polygon",coordinates:["@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b"],encodeOffsets:[[113671,26989]]}},{type:"Feature",id:"4305",properties:{name:"邵阳市",cp:[110.9619,26.8121],childNum:10},geometry:{type:"Polygon",coordinates:["@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„V°š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@"],encodeOffsets:[[113535,28322]]}},{type:"Feature",id:"4310",properties:{name:"郴州市",cp:[113.2361,25.8673],childNum:10},geometry:{type:"Polygon",coordinates:["@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™U¯™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV"],encodeOffsets:[[114930,26747]]}},{type:"Feature",id:"4307",properties:{name:"常德市",cp:[111.4014,29.2676],childNum:8},geometry:{type:"Polygon",coordinates:["@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@"],encodeOffsets:[[114976,30201]]}},{type:"Feature",id:"4331",properties:{name:"湘西土家族苗族自治州",cp:[109.7864,28.6743],childNum:8},geometry:{type:"Polygon",coordinates:["@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVŽ±K@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b"],encodeOffsets:[[112354,30325]]}},{type:"Feature",id:"4304",properties:{name:"衡阳市",cp:[112.4121,26.7902],childNum:9},geometry:{type:"Polygon",coordinates:["@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl"],encodeOffsets:[[114222,27484]]}},{type:"Feature",id:"4306",properties:{name:"岳阳市",cp:[113.2361,29.1357],childNum:7},geometry:{type:"Polygon",coordinates:["@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇƃUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆVĢ¦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nŽ°„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL"],encodeOffsets:[[116888,29526]]}},{type:"Feature",id:"4309",properties:{name:"益阳市",cp:[111.731,28.3832],childNum:5},geometry:{type:"Polygon",coordinates:["@@„ŽÆxXL@l‚V„@ĢšVI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„kƃVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn"],encodeOffsets:[[113378,28981]]}},{type:"Feature",id:"4301",properties:{name:"长沙市",cp:[113.0823,28.2568],childNum:5},geometry:{type:"Polygon",coordinates:["@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X"],encodeOffsets:[[114582,28694]]}},{type:"Feature",id:"4302",properties:{name:"株洲市",cp:[113.5327,27.0319],childNum:6},geometry:{type:"Polygon",coordinates:["@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUŽxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš"],encodeOffsets:[[115774,28587]]}},{type:"Feature",id:"4308",properties:{name:"张家界市",cp:[110.5115,29.328],childNum:3},geometry:{type:"Polygon",coordinates:["@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼"],encodeOffsets:[[113288,30471]]}},{type:"Feature",id:"4313",properties:{name:"娄底市",cp:[111.6431,27.7185],childNum:5},geometry:{type:"Polygon",coordinates:["@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWŽVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@"],encodeOffsets:[[113682,28699]]}},{type:"Feature",id:"4303",properties:{name:"湘潭市",cp:[112.5439,27.7075],childNum:4},geometry:{type:"Polygon",coordinates:["@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„"],encodeOffsets:[[114683,28576]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3209",properties:{name:"盐城市",cp:[120.2234,33.5577],childNum:8},geometry:{type:"Polygon",coordinates:["@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„LޚܦXlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUŽ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl"], -encodeOffsets:[[122344,34504]]}},{type:"Feature",id:"3203",properties:{name:"徐州市",cp:[117.5208,34.3268],childNum:7},geometry:{type:"Polygon",coordinates:["@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkŽ±@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa"],encodeOffsets:[[121005,35213]]}},{type:"Feature",id:"3206",properties:{name:"南通市",cp:[121.1023,32.1625],childNum:7},geometry:{type:"Polygon",coordinates:["@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„bĢ„lkČÇƃȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵĖ¯lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb"],encodeOffsets:[[123087,33385]]}},{type:"Feature",id:"3208",properties:{name:"淮安市",cp:[118.927,33.4039],childNum:5},geometry:{type:"Polygon",coordinates:["@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ"],encodeOffsets:[[121062,33975]]}},{type:"Feature",id:"3205",properties:{name:"苏州市",cp:[120.6519,31.3989],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL"],encodeOffsets:[[122794,31917]]}},{type:"Feature",id:"3213",properties:{name:"宿迁市",cp:[118.5535,33.7775],childNum:4},geometry:{type:"Polygon",coordinates:["@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV"],encodeOffsets:[[121005,34560]]}},{type:"Feature",id:"3207",properties:{name:"连云港市",cp:[119.1248,34.552],childNum:5},geometry:{type:"Polygon",coordinates:["@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb"],encodeOffsets:[[121253,35264]]}},{type:"Feature",id:"3210",properties:{name:"扬州市",cp:[119.4653,32.8162],childNum:5},geometry:{type:"Polygon",coordinates:["@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkĶ°IÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3201",properties:{name:"南京市",cp:[118.8062,31.9208],childNum:3},geometry:{type:"Polygon",coordinates:["@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3212",properties:{name:"泰州市",cp:[120.0586,32.5525],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„lŎ™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUŹš™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb"],encodeOffsets:[[122592,34015]]}},{type:"Feature",id:"3202",properties:{name:"无锡市",cp:[120.3442,31.5527],childNum:3},geometry:{type:"Polygon",coordinates:["@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU"],encodeOffsets:[[123064,32513]]}},{type:"Feature",id:"3204",properties:{name:"常州市",cp:[119.4543,31.5582],childNum:3},geometry:{type:"Polygon",coordinates:["@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼"],encodeOffsets:[[122097,32389]]}},{type:"Feature",id:"3211",properties:{name:"镇江市",cp:[119.4763,31.9702],childNum:4},geometry:{type:"Polygon",coordinates:["@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™K¯„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X"],encodeOffsets:[[122097,32997]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3607",properties:{name:"赣州市",cp:[115.2795,25.8124],childNum:18},geometry:{type:"Polygon",coordinates:["@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒK¯Uw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒX¯ƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽšV°šŽ@XVV@l@xUz"],encodeOffsets:[[116753,26596]]}},{type:"Feature",id:"3608",properties:{name:"吉安市",cp:[114.884,26.9659],childNum:12},geometry:{type:"Polygon",coordinates:["@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV"],encodeOffsets:[[116652,27608]]}},{type:"Feature",id:"3611",properties:{name:"上饶市",cp:[117.8613,28.7292],childNum:12},geometry:{type:"Polygon",coordinates:["@@„„@„V‚š„„I°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnŽ°InJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl"],encodeOffsets:[[119194,29751]]}},{type:"Feature",id:"3604",properties:{name:"九江市",cp:[115.4224,29.3774],childNum:12},geometry:{type:"Polygon",coordinates:["@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWŽKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽVȚ„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ"],encodeOffsets:[[119487,30319]]}},{type:"Feature",id:"3610",properties:{name:"抚州市",cp:[116.4441,27.4933],childNum:11},geometry:{type:"Polygon",coordinates:["@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒW¯kw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ"],encodeOffsets:[[118508,28396]]}},{type:"Feature",id:"3609",properties:{name:"宜春市",cp:[115.0159,28.3228],childNum:10},geometry:{type:"Polygon",coordinates:["@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3601",properties:{name:"南昌市",cp:[116.0046,28.6633],childNum:6},geometry:{type:"Polygon",coordinates:["@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V"],encodeOffsets:[[118249,29700]]}},{type:"Feature",id:"3602",properties:{name:"景德镇市",cp:[117.334,29.3225],childNum:3},geometry:{type:"Polygon",coordinates:["@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J"],encodeOffsets:[[119903,30409]]}},{type:"Feature",id:"3603",properties:{name:"萍乡市",cp:[113.9282,27.4823],childNum:4},geometry:{type:"Polygon",coordinates:["@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„Ž@¦šxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3606",properties:{name:"鹰潭市",cp:[117.0813,28.2349],childNum:3},geometry:{type:"Polygon",coordinates:["@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚_²‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l"],encodeOffsets:[[119599,29025]]}},{type:"Feature",id:"3605",properties:{name:"新余市",cp:[114.95,27.8174],childNum:2},geometry:{type:"Polygon",coordinates:["@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ@¦„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI"],encodeOffsets:[[118182,28542]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ji_lin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2224",properties:{name:"延边朝鲜族自治州",cp:[129.397,43.2587],childNum:8},geometry:{type:"Polygon",coordinates:["@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanV¥ƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@VŽ²„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™UřƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒ@ġƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒ@ĕƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚Ž²V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ"],encodeOffsets:[[131086,44798]]}},{type:"Feature",id:"2202",properties:{name:"吉林市",cp:[126.8372,43.6047],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒLݏƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š"],encodeOffsets:[[128701,44303]]}},{type:"Feature",id:"2208",properties:{name:"白城市",cp:[123.0029,45.2637],childNum:5},geometry:{type:"Polygon",coordinates:["@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlšU҄Ž°Lšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ"],encodeOffsets:[[127350,46553]]}},{type:"Feature",id:"2207",properties:{name:"松原市",cp:[124.0906,44.7198],childNum:5},geometry:{type:"Polygon",coordinates:["@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜƃxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVkŚUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV"],encodeOffsets:[[126068,45580]]}},{type:"Feature",id:"2201",properties:{name:"长春市",cp:[125.8154,44.2584],childNum:5},geometry:{type:"Polygon",coordinates:["@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™L¯ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆǼV¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V"],encodeOffsets:[[128262,45940]]}},{type:"Feature",id:"2206",properties:{name:"白山市",cp:[127.2217,42.0941],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑĢ¯@W‚aUaVUVkkw@a¯@¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlŽ¯bǦœl‚@ô¼Ģ„@x°„l¤„n„a„l@x™b"],encodeOffsets:[[129567,43262]]}},{type:"Feature",id:"2205",properties:{name:"通化市",cp:[125.9583,41.8579],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆlXnĠxĢ°lÈ°š„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„Ç°a„wƨ@„aސ„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@Ž°bXn„V@Ž°ÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn"],encodeOffsets:[[128273,43330]]}},{type:"Feature",id:"2203",properties:{name:"四平市",cp:[124.541,43.4894],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„Iô‚@bWnnbU`‚šV@Å°ó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇŽ¯aU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġĀ¯™Unóšm¤œxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ"],encodeOffsets:[[126293,45124]]}},{type:"Feature",id:"2204",properties:{name:"辽源市",cp:[125.343,42.7643],childNum:3},geometry:{type:"Polygon",coordinates:["@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒL¯™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL"],encodeOffsets:[[127879,44168]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/liao_ning_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2102",properties:{name:"大连市",cp:[122.2229,39.4409],childNum:5},geometry:{type:"Polygon",coordinates:["@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсIĉÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆބźb„VVbX„‚°²¤"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2113",properties:{name:"朝阳市",cp:[120.0696,41.4899],childNum:6},geometry:{type:"Polygon",coordinates:["@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@Ž°¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2106",properties:{name:"丹东市",cp:[124.541,40.4242],childNum:4},geometry:{type:"Polygon",coordinates:["@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™mţ—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J"],encodeOffsets:[[126372,40967]]}},{type:"Feature",id:"2112",properties:{name:"铁岭市",cp:[124.2773,42.7423],childNum:7},geometry:{type:"Polygon",coordinates:["@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L"],encodeOffsets:[[126720,43572]]}},{type:"Feature",id:"2101",properties:{name:"沈阳市",cp:[123.1238,42.1216],childNum:5},geometry:{type:"Polygon",coordinates:["@@ȚĊÜ°„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚kŃlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb"],encodeOffsets:[[125359,43139]]}},{type:"Feature",id:"2104",properties:{name:"抚顺市",cp:[124.585,41.8579],childNum:4},geometry:{type:"Polygon",coordinates:["@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J"],encodeOffsets:[[126754,42992]]}},{type:"Feature",id:"2114",properties:{name:"葫芦岛市",cp:[120.1575,40.578],childNum:4},geometry:{type:"Polygon",coordinates:["@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒU¯„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„"],encodeOffsets:[[122097,41575]]}},{type:"Feature",id:"2109",properties:{name:"阜新市",cp:[122.0032,42.2699],childNum:4},geometry:{type:"Polygon",coordinates:["@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2107",properties:{name:"锦州市",cp:[121.6626,41.4294],childNum:5},geometry:{type:"Polygon",coordinates:["@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„@ބƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln"],encodeOffsets:[[123694,42391]]}},{type:"Feature",id:"2103",properties:{name:"鞍山市",cp:[123.0798,40.6055],childNum:4},geometry:{type:"Polygon",coordinates:["@@l„œxĠŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL"],encodeOffsets:[[125123,42447]]}},{type:"Feature",id:"2105",properties:{name:"本溪市",cp:[124.1455,41.1987],childNum:3},geometry:{type:"Polygon",coordinates:["@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V"],encodeOffsets:[[126552,41839]]}},{type:"Feature",id:"2108",properties:{name:"营口市",cp:[122.4316,40.4297],childNum:4},geometry:{type:"Polygon",coordinates:["@@ĊĖƐn¤„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2110",properties:{name:"辽阳市",cp:[123.4094,41.1383],childNum:5},geometry:{type:"Polygon",coordinates:["@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL"],encodeOffsets:[[125562,42194]]}},{type:"Feature",id:"2111",properties:{name:"盘锦市",cp:[121.9482,41.0449],childNum:3},geometry:{type:"Polygon",coordinates:["@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ"],encodeOffsets:[[124392,41822]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/nei_meng_gu_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1507",properties:{name:"呼伦贝尔市",cp:[120.8057,50.2185],childNum:13},geometry:{type:"Polygon",coordinates:["@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧL±ŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎèƒbȄÞȌ΀ǸlŽ²IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkÅ°ġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝĶƒ@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹"],encodeOffsets:[[128194,51014]]}},{type:"Feature",id:"1529",properties:{name:"阿拉善盟",cp:[102.019,40.1001],childNum:3},geometry:{type:"Polygon",coordinates:["@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ@é—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkÇ°ȁÈnšõl¯ô„ÞɛÝkĢóWĊ„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1525",properties:{name:"锡林郭勒盟",cp:[115.6421,44.176],childNum:12},geometry:{type:"Polygon",coordinates:["@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„Æ°ѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġŃ¯Iĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»ÝU¯™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉÑ°Łkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ"],encodeOffsets:[[113817,44421]]}},{type:"Feature",id:"1506",properties:{name:"鄂尔多斯市",cp:[108.9734,39.2487],childNum:8},geometry:{type:"Polygon",coordinates:["@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈÝ°UšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™wǎƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ"],encodeOffsets:[[109542,39983]]}},{type:"Feature",id:"1504",properties:{name:"赤峰市",cp:[118.6743,43.2642],childNum:10},geometry:{type:"Polygon",coordinates:["@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`š¦™„™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽX¼šnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXĀšè"],encodeOffsets:[[122232,46328]]}},{type:"Feature",id:"1508",properties:{name:"巴彦淖尔市",cp:[107.5562,41.3196],childNum:7},geometry:{type:"Polygon",coordinates:["@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™aó‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£šmۙlÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1505",properties:{name:"通辽市",cp:[121.4758,43.9673],childNum:8},geometry:{type:"Polygon",coordinates:["@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁź¥„ƒ™aôŤ™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠÝ°šČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆĢšŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦"],encodeOffsets:[[122097,46379]]}},{type:"Feature",id:"1509",properties:{name:"乌兰察布市",cp:[112.5769,41.77],childNum:11},geometry:{type:"Polygon",coordinates:["@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„Ž¯ÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦"],encodeOffsets:[[112984,43763]]}},{type:"Feature",id:"1522",properties:{name:"兴安盟",cp:[121.3879,46.1426],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐŽêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„Ź¦ƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼ĊŰ°JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl"],encodeOffsets:[[122412,48482]]}},{type:"Feature",id:"1502",properties:{name:"包头市",cp:[110.3467,41.4899],childNum:5},geometry:{type:"Polygon",coordinates:["@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱĖ¯ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™l¯™ǫnǫ±¯zkŽÝVķUô™˜l²ô°ŎwŦxĶĠk¦±ê¯@Ý°U°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ"],encodeOffsets:[[112017,43465]]}},{type:"Feature",id:"1501", -properties:{name:"呼和浩特市",cp:[111.4124,40.4901],childNum:6},geometry:{type:"Polygon",coordinates:["@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸÑ°„ɲĕš°Ŏn"],encodeOffsets:[[114098,42312]]}},{type:"Feature",id:"1503",properties:{name:"乌海市",cp:[106.886,39.4739],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ș°ÇīXњŗ@ȍlkƒlUŁ±īĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ"],encodeOffsets:[[109317,40799]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ning_xia_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6403",properties:{name:"吴忠市",cp:[106.853,37.3755],childNum:4},geometry:{type:"Polygon",coordinates:["@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6405",properties:{name:"中卫市",cp:[105.4028,36.9525],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6404",properties:{name:"固原市",cp:[106.1389,35.9363],childNum:6},geometry:{type:"MultiPolygon",coordinates:[["@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l"],["@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX"]],encodeOffsets:[[[108023,37052]],[[108541,36299]]]}},{type:"Feature",id:"6401",properties:{name:"银川市",cp:[106.3586,38.1775],childNum:4},geometry:{type:"Polygon",coordinates:["@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb"],encodeOffsets:[[108563,39803]]}},{type:"Feature",id:"6402",properties:{name:"石嘴山市",cp:[106.4795,39.0015],childNum:2},geometry:{type:"Polygon",coordinates:["@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚K²ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯"],encodeOffsets:[[109542,39938]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/qing_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6328",properties:{name:"海西蒙古族藏族自治州",cp:[94.9768,37.1118],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„kôƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ@ĉ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnŽ¯X›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚU¦™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġŹ¼ƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒKǎÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°kĖƒšÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńÆ°ğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎŽ°@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVUĢƒƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ"],["@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUWçƒKĉ„a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠŹW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUŽ@¼ŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„"]],encodeOffsets:[[[100452,39719]],[[91980,35742]]]}},{type:"Feature",id:"6327",properties:{name:"玉树藏族自治州",cp:[93.5925,33.9368],childNum:6},geometry:{type:"Polygon",coordinates:["@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐaĢƒôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚kȘƒĢ@Všk°šLlx@xż@Ċn„Çź»ôĢ²VÆ҄@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±m¥ƒwÅJƒ@™™™Vƒ„mÈIléÈa°U¥™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñšyƐ„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„JônV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒk»šwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—@±ŽUa™LUxƒK¯„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™š@¦llš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒbǏÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦"],encodeOffsets:[[93285,37030]]}},{type:"Feature",id:"6326",properties:{name:"果洛藏族自治州",cp:[99.3823,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™W°™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉĢ±`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è"],encodeOffsets:[[99709,36130]]}},{type:"Feature",id:"6325",properties:{name:"海南藏族自治州",cp:[100.3711,35.9418],childNum:5},geometry:{type:"Polygon",coordinates:["@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™nğƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@Ç°óÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆޜlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ"],encodeOffsets:[[101712,37632]]}},{type:"Feature",id:"6322",properties:{name:"海北藏族自治州",cp:[100.3711,37.9138],childNum:4},geometry:{type:"Polygon",coordinates:["@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤ÝnƽĖ¯V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@Ž°¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™@¯U¤ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@wĢƒ°ĸwlwĢw°±„_lVkš@°ƒbƒÆ¯zƒ‚„š„@l_„@Ģ±lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞÑ°x„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@"],encodeOffsets:[[105087,37992]]}},{type:"Feature",id:"6323",properties:{name:"黄南藏族自治州",cp:[101.5686,35.1178],childNum:4},geometry:{type:"Polygon",coordinates:["@@ôl²ôÜê„VƒVkš™KmnU¤VĀ¯°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™@¯„ƒK™„ĉUU`óšlČ¯ô@¤ƒÞJ„k°xVŽ„n@ŽmbXŽ¯Ā›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln"],encodeOffsets:[[103984,36344]]}},{type:"Feature",id:"6321",properties:{name:"海东地区",cp:[102.3706,36.2988],childNum:6},geometry:{type:"Polygon",coordinates:["@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧnŏm£X»˜™naV±„Ýw@ašb@aƒm¯„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK"],encodeOffsets:[[104108,37030]]}},{type:"Feature",id:"6301",properties:{name:"西宁市",cp:[101.4038,36.8207],childNum:4},geometry:{type:"Polygon",coordinates:["@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅmĊx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Å°@„™n„V°¦ĊJ„kĶa„lȍźU„a@aVwnJ°°J„anXlwš@ĢÓ"],encodeOffsets:[[104356,38042]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shang_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"310230",properties:{name:"崇明县",cp:[121.5637,31.5383],childNum:1},geometry:{type:"Polygon",coordinates:["@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡nα|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“"],encodeOffsets:[[124908,32105]]}},{type:"Feature",id:"310119",properties:{name:"南汇区",cp:[121.8755,30.954],childNum:1},geometry:{type:"Polygon",coordinates:["@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~"],encodeOffsets:[[124854,31907]]}},{type:"Feature",id:"310120",properties:{name:"奉贤区",cp:[121.5747,30.8475],childNum:1},geometry:{type:"Polygon",coordinates:["@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn"],encodeOffsets:[[124274,31722]]}},{type:"Feature",id:"310115",properties:{name:"浦东新区",cp:[121.6928,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP"],encodeOffsets:[[124383,31915]]}},{type:"Feature",id:"310116",properties:{name:"金山区",cp:[121.2657,30.8112],childNum:1},geometry:{type:"Polygon",coordinates:["@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH"],encodeOffsets:[[123901,31695]]}},{type:"Feature",id:"310118",properties:{name:"青浦区",cp:[121.1751,31.1909],childNum:1},geometry:{type:"Polygon",coordinates:["@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD"],encodeOffsets:[[124061,32028]]}},{type:"Feature",id:"310117",properties:{name:"松江区",cp:[121.1984,31.0268],childNum:1},geometry:{type:"Polygon",coordinates:["@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@"],encodeOffsets:[[123933,31687]]}},{type:"Feature",id:"310114",properties:{name:"嘉定区",cp:[121.2437,31.3625],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN"],encodeOffsets:[[124213,32254]]}},{type:"Feature",id:"310113",properties:{name:"宝山区",cp:[121.4346,31.4051],childNum:1},geometry:{type:"Polygon",coordinates:["@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ"],encodeOffsets:[[124300,32302]]}},{type:"Feature",id:"310112",properties:{name:"闵行区",cp:[121.4992,31.0838],childNum:1},geometry:{type:"Polygon",coordinates:["@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ"],encodeOffsets:[[124165,32010]]}},{type:"Feature",id:"310110",properties:{name:"杨浦区",cp:[121.528,31.2966],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R"],encodeOffsets:[[124402,32064]]}},{type:"Feature",id:"310107",properties:{name:"普陀区",cp:[121.3879,31.2602],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH"],encodeOffsets:[[124248,32045]]}},{type:"Feature",id:"310104",properties:{name:"徐汇区",cp:[121.4333,31.1607],childNum:1},geometry:{type:"Polygon",coordinates:["@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J"],encodeOffsets:[[124327,31941]]}},{type:"Feature",id:"310105",properties:{name:"长宁区",cp:[121.3852,31.2115],childNum:1},geometry:{type:"Polygon",coordinates:["@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB"],encodeOffsets:[[124250,31987]]}},{type:"Feature",id:"310108",properties:{name:"闸北区",cp:[121.4511,31.2794],childNum:1},geometry:{type:"Polygon",coordinates:["@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310109",properties:{name:"虹口区",cp:[121.4882,31.2788],childNum:1},geometry:{type:"Polygon",coordinates:["@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310101",properties:{name:"黄浦区",cp:[121.4868,31.219],childNum:1},geometry:{type:"Polygon",coordinates:["@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV"],encodeOffsets:[[124379,31992]]}},{type:"Feature",id:"310103",properties:{name:"卢湾区",cp:[121.4758,31.2074],childNum:1},geometry:{type:"Polygon",coordinates:["@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB"],encodeOffsets:[[124385,31974]]}},{type:"Feature",id:"310106",properties:{name:"静安区",cp:[121.4484,31.2286],childNum:1},geometry:{type:"Polygon",coordinates:["@@DLLB\\NPGLFHUDMYABEeKEVMAAJ"],encodeOffsets:[[124343,31979]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3706",properties:{name:"烟台市",cp:[120.7397,37.5128],childNum:9},geometry:{type:"Polygon",coordinates:["@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„È°ĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊŃ²kŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô"],encodeOffsets:[[122446,38042]]}},{type:"Feature",id:"3713",properties:{name:"临沂市",cp:[118.3118,35.2936],childNum:10},geometry:{type:"Polygon",coordinates:["@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3707",properties:{name:"潍坊市",cp:[119.0918,36.524],childNum:9},geometry:{type:"Polygon",coordinates:["@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»V@»ƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub"],encodeOffsets:[[121332,37840]]}},{type:"Feature",id:"3702",properties:{name:"青岛市",cp:[120.4651,36.3373],childNum:6},geometry:{type:"Polygon",coordinates:["@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn"],encodeOffsets:[[122389,36580]]}},{type:"Feature",id:"3717",properties:{name:"菏泽市",cp:[115.6201,35.2057],childNum:9},geometry:{type:"Polygon",coordinates:["@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb"],encodeOffsets:[[118654,36726]]}},{type:"Feature",id:"3708",properties:{name:"济宁市",cp:[116.8286,35.3375],childNum:11},geometry:{type:"Polygon",coordinates:["@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLKǃUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ŽômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3714",properties:{name:"德州市",cp:[116.6858,37.2107],childNum:11},geometry:{type:"Polygon",coordinates:["@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3716",properties:{name:"滨州市",cp:[117.8174,37.4963],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™J±—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b"],encodeOffsets:[[120083,38442]]}},{type:"Feature",id:"3715",properties:{name:"聊城市",cp:[115.9167,36.4032],childNum:8},geometry:{type:"Polygon",coordinates:["@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœLô„lJ@xl²„"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3705",properties:{name:"东营市",cp:[118.7073,37.5513],childNum:5},geometry:{type:"Polygon",coordinates:["@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x"],encodeOffsets:[[121005,39066]]}},{type:"Feature",id:"3701",properties:{name:"济南市",cp:[117.1582,36.8701],childNum:5},geometry:{type:"Polygon",coordinates:["@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦"],encodeOffsets:[[119014,37041]]}},{type:"Feature",id:"3709",properties:{name:"泰安市",cp:[117.0264,36.0516],childNum:5},geometry:{type:"Polygon",coordinates:["@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3710",properties:{name:"威海市",cp:[121.9482,37.1393],childNum:4},geometry:{type:"Polygon",coordinates:["@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚"],encodeOffsets:[[124842,38312]]}},{type:"Feature",id:"3711",properties:{name:"日照市",cp:[119.2786,35.5023],childNum:3},geometry:{type:"Polygon",coordinates:["@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„Uô„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lUīƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU"],encodeOffsets:[[121883,36895]]}},{type:"Feature",id:"3703",properties:{name:"淄博市",cp:[118.0371,36.6064],childNum:4},geometry:{type:"Polygon",coordinates:["@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜K²ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI"],encodeOffsets:[[121129,37891]]}},{type:"Feature",id:"3704",properties:{name:"枣庄市",cp:[117.323,34.8926],childNum:2},geometry:{type:"Polygon",coordinates:["@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKÇ°kLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3712",properties:{name:"莱芜市",cp:[117.6526,36.2714],childNum:1},geometry:{type:"Polygon",coordinates:["@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@"],encodeOffsets:[[120173,37334]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_1_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6108",properties:{name:"榆林市",cp:[109.8743,38.205],childNum:12},geometry:{type:"Polygon",coordinates:["@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššV°Ș¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊĖ°m„nƒšV„²V°ÒƦ„aބ„˜@zll@bÞĀšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ"],encodeOffsets:[[113592,39645]]}},{type:"Feature",id:"6106",properties:{name:"延安市",cp:[109.1052,36.4252],childNum:13},geometry:{type:"Polygon",coordinates:["@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™wó„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™LķƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™VÇ°ƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mÆ°VUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@Ñ°ƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™V»šwnwlUôšĊ¥nn„yÆb"],encodeOffsets:[[113074,37862]]}},{type:"Feature",id:"6107",properties:{name:"汉中市",cp:[106.886,33.0139],childNum:11},geometry:{type:"Polygon",coordinates:["@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb"],encodeOffsets:[[109137,34392]]}},{type:"Feature",id:"6109",properties:{name:"安康市",cp:[109.1162,32.7722],childNum:10},geometry:{type:"Polygon",coordinates:["@@„bĊaƨèšwôô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČƃÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è"],encodeOffsets:[[110644,34521]]}},{type:"Feature",id:"6110",properties:{name:"商洛市",cp:[109.8083,33.761],childNum:7},geometry:{type:"Polygon",coordinates:["@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚LŚ@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒnĉƒÇ°kwÇa@wƒa—„ċĀ¯xƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ"],encodeOffsets:[[111454,34628]]}},{type:"Feature",id:"6103",properties:{name:"宝鸡市",cp:[107.1826,34.3433],childNum:10},geometry:{type:"Polygon",coordinates:["@@@ƒ„£@›°Išb@¯°ynŹƒaUƒlƒU£„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn"],encodeOffsets:[[110408,35815]]}},{type:"Feature",id:"6105",properties:{name:"渭南市",cp:[109.7864,35.0299],childNum:11},geometry:{type:"Polygon",coordinates:["@@@ÈôL„xUŽ°„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™Xġ„£W¥ƽɽƒó@ýóƝÝ»„£X™mƅšĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°"],encodeOffsets:[[111589,35657]]}},{type:"Feature",id:"6104",properties:{name:"咸阳市",cp:[108.4131,34.8706],childNum:14},geometry:{type:"Polygon",coordinates:["@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒ@¯ƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚LĢ¯ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš"],encodeOffsets:[[111229,36394]]}},{type:"Feature",id:"6101",properties:{name:"西安市",cp:[109.1162,34.2004],childNum:5},geometry:{type:"Polygon",coordinates:["@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l"],encodeOffsets:[[110206,34532]]}},{type:"Feature",id:"6102",properties:{name:"铜川市",cp:[109.0393,35.1947],childNum:2},geometry:{type:"Polygon",coordinates:["@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub"],encodeOffsets:[[111477,36192]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_2_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1409",properties:{name:"忻州市",cp:[112.4561,38.8971],childNum:14},geometry:{type:"Polygon",coordinates:["@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„aôšlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmŽxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b"], -encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1411",properties:{name:"吕梁市",cp:[111.3574,37.7325],childNum:13},geometry:{type:"Polygon",coordinates:["@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„xĊ„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaŁ±KkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x"],encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1410",properties:{name:"临汾市",cp:[111.4783,36.1615],childNum:17},geometry:{type:"Polygon",coordinates:["@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX"],encodeOffsets:[[113063,37784]]}},{type:"Feature",id:"1407",properties:{name:"晋中市",cp:[112.7747,37.37],childNum:11},geometry:{type:"Polygon",coordinates:["@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@"],encodeOffsets:[[114087,37682]]}},{type:"Feature",id:"1408",properties:{name:"运城市",cp:[111.1487,35.2002],childNum:13},geometry:{type:"Polygon",coordinates:["@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚U²ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„"],encodeOffsets:[[113232,36597]]}},{type:"Feature",id:"1402",properties:{name:"大同市",cp:[113.7854,39.8035],childNum:8},geometry:{type:"Polygon",coordinates:["@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXŽ¯„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl"],encodeOffsets:[[115335,41209]]}},{type:"Feature",id:"1404",properties:{name:"长治市",cp:[112.8625,36.4746],childNum:12},geometry:{type:"Polygon",coordinates:["@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšaȍll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ"],encodeOffsets:[[116269,37637]]}},{type:"Feature",id:"1406",properties:{name:"朔州市",cp:[113.0713,39.6991],childNum:5},geometry:{type:"Polygon",coordinates:["@@XXWVXVWnnlnn@èƼ@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœL܃ĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„Xܚ°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚"],encodeOffsets:[[114615,40562]]}},{type:"Feature",id:"1405",properties:{name:"晋城市",cp:[112.7856,35.6342],childNum:6},geometry:{type:"Polygon",coordinates:["@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°"],encodeOffsets:[[115223,36895]]}},{type:"Feature",id:"1401",properties:{name:"太原市",cp:[112.3352,37.9413],childNum:5},geometry:{type:"Polygon",coordinates:["@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈƘL„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°"],encodeOffsets:[[114503,39134]]}},{type:"Feature",id:"1403",properties:{name:"阳泉市",cp:[113.4778,38.0951],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb"],encodeOffsets:[[115864,39336]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/si_chuan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5133",properties:{name:"甘孜藏族自治州",cp:[99.9207,31.0803],childNum:18},geometry:{type:"Polygon",coordinates:["@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™X¥™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLšVǚLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒUф¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWÜ°U‚¯n™Æݜ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„@ҁl@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmŽ¯Lĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒUóŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5132",properties:{name:"阿坝藏族羌族自治州",cp:[102.4805,32.4536],childNum:13},geometry:{type:"Polygon",coordinates:["@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„lè„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„n°„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚`ȍ‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒlĉk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nŽ°@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚XȃĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™@¯kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃UDŽkKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽX¼ƒÒkk±W™wƒnUºVzklVxLǚ@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚ@¤ƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5134",properties:{name:"凉山彝族自治州",cp:[101.9641,27.6746],childNum:17},geometry:{type:"Polygon",coordinates:["@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™@¥‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒaVݙ™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—m±™IVġUwóKUn±¯—K›w»ƒKݐV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎW¦„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇŚƒaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ"],encodeOffsets:[[102466,28756]]}},{type:"Feature",id:"5107",properties:{name:"绵阳市",cp:[104.7327,31.8713],childNum:8},geometry:{type:"Polygon",coordinates:["@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑƍš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²l¥šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›JńUxUšma@L@„mbUŽU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇƁVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVŚ¯¼nx›š@ŽXݏmxnb@n™J@b"],encodeOffsets:[[106448,33694]]}},{type:"Feature",id:"5117",properties:{name:"达州市",cp:[107.6111,31.333],childNum:7},geometry:{type:"Polygon",coordinates:["@@Uxn°‚bnŽlUnÒƃnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„VƍX@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ŽnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°"],encodeOffsets:[[109519,31917]]}},{type:"Feature",id:"5108",properties:{name:"广元市",cp:[105.6885,32.2284],childNum:5},geometry:{type:"Polygon",coordinates:["@@ÆL„Ċx°»Ŧ¦˜W„™šLȄ@xÞKÜ°ÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜VȚ°XXa˜lX°VI°b„W„nšaššš¥@ƒw°™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽm¦„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™@ŎmÒ@șl¯L™¤n¼"],encodeOffsets:[[107146,33452]]}},{type:"Feature",id:"5118",properties:{name:"雅安市",cp:[102.6672,29.8938],childNum:8},geometry:{type:"Polygon",coordinates:["@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚KȄôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WŽ¯KU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò"],encodeOffsets:[[104727,30797]]}},{type:"Feature",id:"5115",properties:{name:"宜宾市",cp:[104.6558,28.548],childNum:10},geometry:{type:"Polygon",coordinates:["@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™aō‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nŃ¯¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx"],encodeOffsets:[[106099,29279]]}},{type:"Feature",id:"5111",properties:{name:"乐山市",cp:[103.5791,29.1742],childNum:9},geometry:{type:"Polygon",coordinates:["@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbšmĸ„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚l¼„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL"],encodeOffsets:[[105480,29993]]}},{type:"Feature",id:"5113",properties:{name:"南充市",cp:[106.2048,31.1517],childNum:7},geometry:{type:"Polygon",coordinates:["@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_VŽ°@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—z±ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš"],encodeOffsets:[[107989,32282]]}},{type:"Feature",id:"5119",properties:{name:"巴中市",cp:[107.0618,31.9977],childNum:4},geometry:{type:"Polygon",coordinates:["@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@šn£™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤"],encodeOffsets:[[108957,32569]]}},{type:"Feature",id:"5105",properties:{name:"泸州市",cp:[105.4578,28.493],childNum:5},geometry:{type:"Polygon",coordinates:["@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒ`¯ķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mšV°—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²"],encodeOffsets:[[107674,29639]]}},{type:"Feature",id:"5101",properties:{name:"成都市",cp:[103.9526,30.7617],childNum:11},geometry:{type:"Polygon",coordinates:["@@°n°m²°ÜUšw²ŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛƻșUÝ°Kl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒU±ŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽVĀ™LmxÅaWƒUnVƒÝXUþÆ°UÔÈÆ@±ºƒLnVVÒkóÆ"],encodeOffsets:[[105492,31534]]}},{type:"Feature",id:"5120",properties:{name:"资阳市",cp:[104.9744,30.1575],childNum:4},geometry:{type:"Polygon",coordinates:["@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒk²™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n"],encodeOffsets:[[106695,31062]]}},{type:"Feature",id:"5104",properties:{name:"攀枝花市",cp:[101.6895,26.7133],childNum:3},geometry:{type:"Polygon",coordinates:["@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„bƙœÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›mс@mz™m@īƒÑX¥Ç@ݙxU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵĖ±@@Ž¯xUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ"],encodeOffsets:[[103602,27816]]}},{type:"Feature",id:"5114",properties:{name:"眉山市",cp:[103.8098,30.0146],childNum:6},geometry:{type:"Polygon",coordinates:["@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š"],encodeOffsets:[[105683,30685]]}},{type:"Feature",id:"5116",properties:{name:"广安市",cp:[106.6333,30.4376],childNum:5},geometry:{type:"Polygon",coordinates:["@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n"],encodeOffsets:[[108518,31208]]}},{type:"Feature",id:"5106",properties:{name:"德阳市",cp:[104.48,31.1133],childNum:6},geometry:{type:"Polygon",coordinates:["@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV"],encodeOffsets:[[106594,32457]]}},{type:"Feature",id:"5110",properties:{name:"内江市",cp:[104.8535,29.6136],childNum:4},geometry:{type:"Polygon",coordinates:["@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„kº‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ"],encodeOffsets:[[106774,30342]]}},{type:"Feature",id:"5109",properties:{name:"遂宁市",cp:[105.5347,30.6683],childNum:4},geometry:{type:"Polygon",coordinates:["@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô"],encodeOffsets:[[107595,31270]]}},{type:"Feature",id:"5103",properties:{name:"自贡市",cp:[104.6667,29.2786],childNum:3},geometry:{type:"Polygon",coordinates:["@@lIÞDŽbVŽš_šJVaUwš™nуV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@"],encodeOffsets:[[106752,30347]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tai_wan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"7100",properties:{name:"台湾",cp:[121.0295,23.6082],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆe܍ò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCŠ²®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•"],encodeOffsets:[[124853,25650]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tian_jin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"120225",properties:{name:"蓟县",cp:[117.4672,40.004],childNum:1},geometry:{type:"Polygon",coordinates:["@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB"],encodeOffsets:[[120575,41009]]}},{type:"Feature",id:"120114",properties:{name:"武清区",cp:[117.0621,39.4121],childNum:1},geometry:{type:"Polygon",coordinates:["@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120115",properties:{name:"宝坻区",cp:[117.4274,39.5913],childNum:1},geometry:{type:"Polygon",coordinates:["@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120223",properties:{name:"静海县",cp:[116.9824,38.8312],childNum:1},geometry:{type:"Polygon",coordinates:["@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120221",properties:{name:"宁河县",cp:[117.6801,39.3853],childNum:1},geometry:{type:"Polygon",coordinates:["@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB"],encodeOffsets:[[120145,40295]]}},{type:"Feature",id:"120109",properties:{name:"大港区",cp:[117.3875,38.757],childNum:1},geometry:{type:"Polygon",coordinates:["@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ"],encodeOffsets:[[120065,39771]]}},{type:"Feature",id:"120107",properties:{name:"塘沽区",cp:[117.6801,38.9987],childNum:1},geometry:{type:"Polygon",coordinates:["@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`"],encodeOffsets:[[120391,40118]]}},{type:"Feature",id:"120111",properties:{name:"西青区",cp:[117.1829,39.0022],childNum:1},geometry:{type:"Polygon",coordinates:["@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120113",properties:{name:"北辰区",cp:[117.1761,39.2548],childNum:1},geometry:{type:"Polygon",coordinates:["@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF"],encodeOffsets:[[120139,40273]]}},{type:"Feature",id:"120110",properties:{name:"东丽区",cp:[117.4013,39.1223],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^"],encodeOffsets:[[120048,40134]]}},{type:"Feature",id:"120108",properties:{name:"汉沽区",cp:[117.8888,39.2191],childNum:1},geometry:{type:"Polygon",coordinates:["@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@"],encodeOffsets:[[120859,40235]]}},{type:"Feature",id:"120112",properties:{name:"津南区",cp:[117.3958,38.9603],childNum:1},geometry:{type:"Polygon",coordinates:["@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH"],encodeOffsets:[[120045,39982]]}},{type:"Feature",id:"120103",properties:{name:"河西区",cp:[117.2365,39.0804],childNum:1},geometry:{type:"Polygon",coordinates:["@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt"],encodeOffsets:[[119992,40041]]}},{type:"Feature",id:"120102",properties:{name:"河东区",cp:[117.2571,39.1209],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN"],encodeOffsets:[[120063,40098]]}},{type:"Feature",id:"120104",properties:{name:"南开区",cp:[117.1527,39.1065],childNum:1},geometry:{type:"Polygon",coordinates:["@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ"],encodeOffsets:[[119940,40093]]}},{type:"Feature",id:"120105",properties:{name:"河北区",cp:[117.2145,39.1615],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF"],encodeOffsets:[[119980,40125]]}},{type:"Feature",id:"120106",properties:{name:"红桥区",cp:[117.1596,39.1663],childNum:1},geometry:{type:"Polygon",coordinates:["@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^"],encodeOffsets:[[119942,40112]]}},{type:"Feature",id:"120101",properties:{name:"和平区",cp:[117.2008,39.1189],childNum:1},geometry:{type:"Polygon",coordinates:["@@D†T@FCHG\\FFOROMEgYc@"],encodeOffsets:[[119992,40041]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/world_geo",[],function(){return{type:"FeatureCollection",offset:{x:170,y:90},features:[{type:"Feature",id:"AFG",properties:{name:"Afghanistan"},geometry:{type:"Polygon",coordinates:["@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"AGO",properties:{name:"Angola"},geometry:{type:"MultiPolygon",coordinates:[["@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ["],["@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ"]],encodeOffsets:[[[16719,-6018]],[[12736,-5820]]]}},{type:"Feature",id:"ALB",properties:{name:"Albania"},geometry:{type:"Polygon",coordinates:["@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"ARE",properties:{name:"United Arab Emirates"},geometry:{type:"Polygon",coordinates:["@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț"],encodeOffsets:[[52818,24828]]}},{type:"Feature",id:"ARG",properties:{name:"Argentina"},geometry:{type:"MultiPolygon",coordinates:[["@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп"],["@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ"]],encodeOffsets:[[[-67072,-56524]],[[-66524,-22605]]]}},{type:"Feature",id:"ARM",properties:{name:"Armenia"},geometry:{type:"Polygon",coordinates:["@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒"],encodeOffsets:[[44629,42079]]}},{type:"Feature",id:"ATF",properties:{name:"French Southern and Antarctic Lands"},geometry:{type:"Polygon",coordinates:["@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ"],encodeOffsets:[[70590,-49792]]}},{type:"Feature",id:"AUS",properties:{name:"Australia"},geometry:{type:"MultiPolygon",coordinates:[["@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ"],["@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:"Feature",id:"AUT",properties:{name:"Austria"},geometry:{type:"Polygon",coordinates:["@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅"],encodeOffsets:[[17388,49279]]}},{type:"Feature",id:"AZE",properties:{name:"Azerbaijan"},geometry:{type:"MultiPolygon",coordinates:[["@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv"],["@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ"]],encodeOffsets:[[[46083,40694]],[[48511,42210]]]}},{type:"Feature",id:"BDI",properties:{name:"Burundi"},geometry:{type:"Polygon",coordinates:["@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ"],encodeOffsets:[[30045,-4607]]}},{type:"Feature",id:"BEL",properties:{name:"Belgium"},geometry:{type:"Polygon",coordinates:["@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ"],encodeOffsets:[[3395,52579]]}},{type:"Feature",id:"BEN",properties:{name:"Benin"},geometry:{type:"Polygon",coordinates:["@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ"],encodeOffsets:[[2757,6410]]}},{type:"Feature",id:"BFA",properties:{name:"Burkina Faso"},geometry:{type:"Polygon",coordinates:["@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم"],encodeOffsets:[[-2895,9874]]}},{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:["@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯"],encodeOffsets:[[94897,22571]]}},{type:"Feature",id:"BGR",properties:{name:"Bulgaria"},geometry:{type:"Polygon",coordinates:["@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ"],encodeOffsets:[[23201,45297]]}},{type:"Feature",id:"BHS",properties:{name:"The Bahamas"},geometry:{type:"MultiPolygon",coordinates:[["@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ"],["@@ࣷƅÏ̴Ђäֈ{~ɕ"],["@@ƟׯƷņ`ѮϓͪCĪڐϗ"]],encodeOffsets:[[[-79395,24330]],[[-79687,27218]],[[-78848,27229]]]}},{type:"Feature",id:"BIH",properties:{name:"Bosnia and Herzegovina"},geometry:{type:"Polygon",coordinates:["@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ"],encodeOffsets:[[19462,45937]]}},{type:"Feature",id:"BLR",properties:{name:"Belarus"},geometry:{type:"Polygon",coordinates:["@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ"],encodeOffsets:[[24048,55207]]}},{type:"Feature",id:"BLZ",properties:{name:"Belize"},geometry:{type:"Polygon",coordinates:["@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ"],encodeOffsets:[[-91282,18236]]}},{type:"Feature",id:"BMU",properties:{name:"Bermuda"},geometry:{type:"Polygon",coordinates:["@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC"],encodeOffsets:[[-66334,33083]]}},{type:"Feature",id:"BOL",properties:{name:"Bolivia"},geometry:{type:"Polygon",coordinates:["@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ"],encodeOffsets:[[-64354,-22563]]}},{type:"Feature",id:"BRA",properties:{name:"Brazil"},geometry:{type:"Polygon",coordinates:["@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę"], -encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"BRN",properties:{name:"Brunei"},geometry:{type:"Polygon",coordinates:["@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ"],encodeOffsets:[[116945,4635]]}},{type:"Feature",id:"BTN",properties:{name:"Bhutan"},geometry:{type:"Polygon",coordinates:["@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ"],encodeOffsets:[[93898,28439]]}},{type:"Feature",id:"BWA",properties:{name:"Botswana"},geometry:{type:"Polygon",coordinates:["@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ"],encodeOffsets:[[26265,-18980]]}},{type:"Feature",id:"CAF",properties:{name:"Central African Republic"},geometry:{type:"Polygon",coordinates:["@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜"],encodeOffsets:[[15647,7601]]}},{type:"Feature",id:"CAN",properties:{name:"Canada"},geometry:{type:"MultiPolygon",coordinates:[["@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С"],["@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ"],["@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ"],["@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ"],["@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ"],["@@͡ѳχîəʢ Î͖ʦΆkɈǣ"],["@@ঝҧץnǿɪزϲ଼SiǍ"],["@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å"],["@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ"],["@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍"],["@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ"],["@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj"],["@@݉ևಹך˸Ş૸’ٔȁ"],["@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң"],["@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի"],["@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР"],["@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ"],["@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν"],["@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ"],["@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ"],["@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ"],["@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ"],["@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ"],["@@ϣy༽Âɡɼၜ]מƻĵĩ"],["@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ"],["@@৽ǏඉBbŤࡴʦҌદǝ"],["@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣"],["@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ"],["@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև"],["@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ"]],encodeOffsets:[[[-65192,47668]],[[-63289,50284]],[[-126474,49675]],[[-57481,51904]],[[-135895,55337]],[[-81168,63651]],[[-83863,64216]],[[-87205,67234]],[[-77686,68761]],[[-97943,70767]],[[-92720,71166]],[[-116907,74877]],[[-107008,75183]],[[-78172,74858]],[[-88639,74914]],[[-102764,75617]],[[-95433,74519]],[[-123351,73097]],[[-95859,76780]],[[-100864,78562]],[[-110808,78031]],[[-96956,78949]],[[-118987,79509]],[[-96092,79381]],[[-112831,79562]],[[-112295,80489]],[[-98130,79931]],[[-102461,80205]],[[-89108,81572]],[[-70144,85101]]]}},{type:"Feature",id:"CHE",properties:{name:"Switzerland"},geometry:{type:"Polygon",coordinates:["@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ"],encodeOffsets:[[9825,48666]]}},{type:"Feature",id:"CHL",properties:{name:"Chile"},geometry:{type:"MultiPolygon",coordinates:[["@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı"],["@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह"]],encodeOffsets:[[[-70281,-53899]],[[-69857,-22010]]]}},{type:"Feature",id:"CHN",properties:{name:"China"},geometry:{type:"MultiPolygon",coordinates:[["@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ","@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ"],["@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ"]],encodeOffsets:[[[124701,24980],[112988,19127]],[[130722,50955]]]}},{type:"Feature",id:"CIV",properties:{name:"Ivory Coast"},geometry:{type:"Polygon",coordinates:["@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ"],encodeOffsets:[[-2924,5115]]}},{type:"Feature",id:"CMR",properties:{name:"Cameroon"},geometry:{type:"Polygon",coordinates:["@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗"],encodeOffsets:[[13390,2322]]}},{type:"Feature",id:"COD",properties:{name:"Democratic Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏"],encodeOffsets:[[31574,3594]]}},{type:"Feature",id:"COG",properties:{name:"Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ"],encodeOffsets:[[13308,-4895]]}},{type:"Feature",id:"COL",properties:{name:"Colombia"},geometry:{type:"Polygon",coordinates:["@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā"],encodeOffsets:[[-77182,-155]]}},{type:"Feature",id:"CRI",properties:{name:"Costa Rica"},geometry:{type:"Polygon",coordinates:["@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ"],encodeOffsets:[[-84956,8423]]}},{type:"Feature",id:"CUB",properties:{name:"Cuba"},geometry:{type:"Polygon",coordinates:["@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ"],encodeOffsets:[[-84242,23746]]}},{type:"Feature",id:"-99",properties:{name:"Northern Cyprus"},geometry:{type:"Polygon",coordinates:["@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬"],encodeOffsets:[[33518,35984]]}},{type:"Feature",id:"CYP",properties:{name:"Cyprus"},geometry:{type:"Polygon",coordinates:["@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇"],encodeOffsets:[[34789,35900]]}},{type:"Feature",id:"CZE",properties:{name:"Czech Republic"},geometry:{type:"Polygon",coordinates:["@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ"],encodeOffsets:[[17368,49764]]}},{type:"Feature",id:"DEU",properties:{name:"Germany"},geometry:{type:"Polygon",coordinates:["@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ"],encodeOffsets:[[10161,56303]]}},{type:"Feature",id:"DJI",properties:{name:"Djibouti"},geometry:{type:"Polygon",coordinates:["@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ"],encodeOffsets:[[44116,13005]]}},{type:"Feature",id:"DNK",properties:{name:"Denmark"},geometry:{type:"MultiPolygon",coordinates:[["@@ԋڹ࢟ӄŝΒ௼˨ˎу"],["@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ"]],encodeOffsets:[[[12995,56945]],[[11175,57814]]]}},{type:"Feature",id:"DOM",properties:{name:"Dominican Republic"},geometry:{type:"Polygon",coordinates:["@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ"],encodeOffsets:[[-73433,20188]]}},{type:"Feature",id:"DZA",properties:{name:"Algeria"},geometry:{type:"Polygon",coordinates:["@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ"],encodeOffsets:[[12288,24035]]}},{type:"Feature",id:"ECU",properties:{name:"Ecuador"},geometry:{type:"Polygon",coordinates:["@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ"],encodeOffsets:[[-82229,-3486]]}},{type:"Feature",id:"EGY",properties:{name:"Egypt"},geometry:{type:"Polygon",coordinates:["@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽"],encodeOffsets:[[35761,30210]]}},{type:"Feature",id:"ERI",properties:{name:"Eritrea"},geometry:{type:"Polygon",coordinates:["@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò"],encodeOffsets:[[43368,12844]]}},{type:"Feature",id:"ESP",properties:{name:"Spain"},geometry:{type:"Polygon",coordinates:["@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"EST",properties:{name:"Estonia"},geometry:{type:"Polygon",coordinates:["@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ"],encodeOffsets:[[24897,59181]]}},{type:"Feature",id:"ETH",properties:{name:"Ethiopia"},geometry:{type:"Polygon",coordinates:["@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ"],encodeOffsets:[[38816,15319]]}},{type:"Feature",id:"FIN",properties:{name:"Finland"},geometry:{type:"Polygon",coordinates:["@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ"],encodeOffsets:[[29279,70723]]}},{type:"Feature",id:"FJI",properties:{name:"Fiji"},geometry:{type:"MultiPolygon",coordinates:[["@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ"],["@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ"],["@@é­@ШǨžĽЗ"]],encodeOffsets:[[[182655,-17756]],[[183669,-17204]],[[-184235,-16897]]]}},{type:"Feature",id:"FLK",properties:{name:"Falkland Islands"},geometry:{type:"Polygon",coordinates:["@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ"],encodeOffsets:[[-62668,-53094]]}},{type:"Feature",id:"FRA",properties:{name:"France"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ"],["@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵"]],encodeOffsets:[[[9790,43165]],[[3675,51589]]]}},{type:"Feature",id:"GAB",properties:{name:"Gabon"},geometry:{type:"Polygon",coordinates:["@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ"],encodeOffsets:[[11361,-4074]]}},{type:"Feature",id:"GBR",properties:{name:"United Kingdom"},geometry:{type:"MultiPolygon",coordinates:[["@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ"],["@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:"Feature",id:"GEO",properties:{name:"Georgia"},geometry:{type:"Polygon",coordinates:["@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡"],encodeOffsets:[[42552,42533]]}},{type:"Feature",id:"GHA",properties:{name:"Ghana"},geometry:{type:"Polygon",coordinates:["@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍"],encodeOffsets:[[1086,6072]]}},{type:"Feature",id:"GIN",properties:{name:"Guinea"},geometry:{type:"Polygon",coordinates:["@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA"],encodeOffsets:[[-8641,7871]]}},{type:"Feature",id:"GMB",properties:{name:"Gambia"},geometry:{type:"Polygon",coordinates:["@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl"],encodeOffsets:[[-17245,13468]]}},{type:"Feature",id:"GNB",properties:{name:"Guinea Bissau"},geometry:{type:"Polygon",coordinates:["@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ"],encodeOffsets:[[-15493,11306]]}},{type:"Feature",id:"GNQ",properties:{name:"Equatorial Guinea"},geometry:{type:"Polygon",coordinates:["@@ƿŴ़̀െmPয়௡T˳µ"],encodeOffsets:[[9721,1035]]}},{type:"Feature",id:"GRC",properties:{name:"Greece"},geometry:{type:"MultiPolygon",coordinates:[["@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ"],["@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:"Feature",id:"GRL",properties:{name:"Greenland"},geometry:{type:"Polygon",coordinates:["@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή"],encodeOffsets:[[-47886,84612]]}},{type:"Feature",id:"GTM",properties:{name:"Guatemala"},geometry:{type:"Polygon",coordinates:["@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ"],encodeOffsets:[[-92257,14065]]}},{type:"Feature",id:"GUF",properties:{name:"French Guiana"},geometry:{type:"Polygon",coordinates:["@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ"],encodeOffsets:[[-53817,2565]]}},{type:"Feature",id:"GUY",properties:{name:"Guyana"},geometry:{type:"Polygon",coordinates:["@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ"],encodeOffsets:[[-61192,8568]]}},{type:"Feature",id:"HND",properties:{name:"Honduras"},geometry:{type:"Polygon",coordinates:["@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“"],encodeOffsets:[[-89412,13297]]}},{type:"Feature",id:"HRV",properties:{name:"Croatia"},geometry:{type:"Polygon",coordinates:["@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų"],encodeOffsets:[[19282,47011]]}},{type:"Feature",id:"HTI",properties:{name:"Haiti"},geometry:{type:"Polygon",coordinates:["@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ"],encodeOffsets:[[-74946,20394]]}},{type:"Feature",id:"HUN",properties:{name:"Hungary"},geometry:{type:"Polygon",coordinates:["@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV"],encodeOffsets:[[16592,47977]]}},{type:"Feature",id:"IDN",properties:{name:"Indonesia"},geometry:{type:"MultiPolygon",coordinates:[["@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ"],["@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع"],["@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖"],["@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮"],["@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗"],["@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ"],["@@̿˥ׅƸǏΰࡘ¢Ⱦˣ"],["@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ"],["@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹"],["@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ"],["@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃"],["@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ"],["@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ"]],encodeOffsets:[[[123613,-10485]],[[127423,-10383]],[[120730,-8289]],[[125854,-8288]],[[111231,-6940]],[[137959,-6363]],[[130304,-3542]],[[133603,-3168]],[[137363,-1179]],[[128247,1454]],[[131777,1160]],[[120705,1872]],[[108358,-5992]]]}},{type:"Feature",id:"IND",properties:{name:"India"},geometry:{type:"Polygon",coordinates:["@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸"],encodeOffsets:[[79706,36346]]}},{type:"Feature",id:"IRL",properties:{name:"Ireland"},geometry:{type:"Polygon",coordinates:["@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ"],encodeOffsets:[[-6346,55161]]}},{type:"Feature",id:"IRN",properties:{name:"Iran"},geometry:{type:"Polygon",coordinates:["@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ"],encodeOffsets:[[55216,38092]]}},{type:"Feature",id:"IRQ",properties:{name:"Iraq"},geometry:{type:"Polygon",coordinates:["@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉"],encodeOffsets:[[46511,36842]]}},{type:"Feature",id:"ISL",properties:{name:"Iceland"},geometry:{type:"Polygon",coordinates:["@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ"],encodeOffsets:[[-14856,68051]]}},{type:"Feature",id:"ISR",properties:{name:"Israel"},geometry:{type:"Polygon",coordinates:["@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM"],encodeOffsets:[[36578,33495]]}},{type:"Feature",id:"ITA",properties:{name:"Italy"},geometry:{type:"MultiPolygon",coordinates:[["@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò"],["@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ"],["@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉"]],encodeOffsets:[[[15893,39149]],[[9432,42200]],[[12674,47890]]]}},{type:"Feature",id:"JAM",properties:{name:"Jamaica"},geometry:{type:"Polygon",coordinates:["@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ"],encodeOffsets:[[-79431,18935]]}},{type:"Feature",id:"JOR",properties:{name:"Jordan"},geometry:{type:"Polygon",coordinates:["@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"JPN",properties:{name:"Japan"},geometry:{type:"MultiPolygon",coordinates:[["@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ"],["@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ"],["@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯"]],encodeOffsets:[[[137870,34969]],[[144360,38034]],[[147365,45235]]]}},{type:"Feature",id:"KAZ",properties:{name:"Kazakhstan"},geometry:{type:"Polygon",coordinates:["@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KEN",properties:{name:"Kenya"},geometry:{type:"Polygon",coordinates:["@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ"],encodeOffsets:[[41977,-878]]}},{type:"Feature",id:"KGZ",properties:{name:"Kyrgyzstan"},geometry:{type:"Polygon",coordinates:["@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KHM",properties:{name:"Cambodia"},geometry:{type:"Polygon",coordinates:["@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū"],encodeOffsets:[[105982,10888]]}},{type:"Feature",id:"KOR",properties:{name:"South Korea"},geometry:{type:"Polygon",coordinates:["@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ"],encodeOffsets:[[131431,39539]]}},{type:"Feature",id:"CS-KM",properties:{name:"Kosovo"},geometry:{type:"Polygon",coordinates:["@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ"],encodeOffsets:[[21261,43062]]}},{type:"Feature",id:"KWT",properties:{name:"Kuwait"},geometry:{type:"Polygon",coordinates:["@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é"],encodeOffsets:[[49126,30696]]}},{type:"Feature",id:"LAO",properties:{name:"Laos"},geometry:{type:"Polygon",coordinates:["@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢"],encodeOffsets:[[107745,14616]]}},{type:"Feature",id:"LBN",properties:{name:"Lebanon"},geometry:{type:"Polygon",coordinates:["@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ"],encodeOffsets:[[36681,34077]]}},{type:"Feature",id:"LBR",properties:{name:"Liberia"},geometry:{type:"Polygon",coordinates:["@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە"],encodeOffsets:[[-7897,4470]]}},{type:"Feature",id:"LBY",properties:{name:"Libya"},geometry:{type:"Polygon",coordinates:["@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ"],encodeOffsets:[[15208,23412]]}},{type:"Feature",id:"LKA",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:["@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓"],encodeOffsets:[[83751,7704]]}},{type:"Feature",id:"LSO",properties:{name:"Lesotho"},geometry:{type:"Polygon",coordinates:["@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ"],encodeOffsets:[[29674,-29650]]}},{type:"Feature",id:"LTU",properties:{name:"Lithuania"},geometry:{type:"Polygon",coordinates:["@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ"],encodeOffsets:[[23277,55632]]}},{type:"Feature",id:"LUX",properties:{name:"Luxembourg"},geometry:{type:"Polygon",coordinates:["@@ǘȏ³ρʍiȉòĞҼɖŽ"],encodeOffsets:[[6189,51332]]}},{type:"Feature",id:"LVA",properties:{name:"Latvia"},geometry:{type:"Polygon",coordinates:["@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ"],encodeOffsets:[[21562,57376]]}},{type:"Feature",id:"MAR",properties:{name:"Morocco"},geometry:{type:"Polygon",coordinates:["@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI"],encodeOffsets:[[-5318,36614]]}},{type:"Feature",id:"MDA",properties:{name:"Moldova"},geometry:{type:"Polygon",coordinates:["@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ"],encodeOffsets:[[27259,49379]]}},{type:"Feature",id:"MDG",properties:{name:"Madagascar"},geometry:{type:"Polygon",coordinates:["@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί"],encodeOffsets:[[50733,-12769]]}},{type:"Feature",id:"MEX",properties:{name:"Mexico"},geometry:{type:"Polygon",coordinates:["@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|"],encodeOffsets:[[-99471,26491]]}},{type:"Feature",id:"MKD",properties:{name:"Macedonia"},geometry:{type:"Polygon",coordinates:["@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"MLI",properties:{name:"Mali"},geometry:{type:"Polygon",coordinates:["@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:["@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ"],encodeOffsets:[[101933,20672]]}},{type:"Feature",id:"MNE",properties:{name:"Montenegro"},geometry:{type:"Polygon",coordinates:["@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó"],encodeOffsets:[[20277,43521]]}},{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:["@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז"],encodeOffsets:[[89858,50481]]}},{type:"Feature",id:"MOZ",properties:{name:"Mozambique"},geometry:{type:"Polygon",coordinates:["@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MRT",properties:{name:"Mauritania"},geometry:{type:"Polygon",coordinates:["@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MWI",properties:{name:"Malawi"},geometry:{type:"Polygon",coordinates:["@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MYS",properties:{name:"Malaysia"},geometry:{type:"MultiPolygon",coordinates:[["@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ"],["@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ"]],encodeOffsets:[[[103502,6354]],[[121466,4586]]]}},{type:"Feature",id:"NAM",properties:{name:"Namibia"},geometry:{type:"Polygon",coordinates:["@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг"],encodeOffsets:[[16738,-29262]]}},{type:"Feature",id:"NCL",properties:{name:"New Caledonia"},geometry:{type:"Polygon",coordinates:["@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ"],encodeOffsets:[[169759,-21585]]}},{type:"Feature",id:"NER",properties:{name:"Niger"},geometry:{type:"Polygon",coordinates:["@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ"],encodeOffsets:[[2207,12227]]}},{type:"Feature",id:"NGA",properties:{name:"Nigeria"},geometry:{type:"Polygon",coordinates:["@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש"],encodeOffsets:[[8705,4887]]}},{type:"Feature",id:"NIC",properties:{name:"Nicaragua"},geometry:{type:"Polygon",coordinates:["@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ"],encodeOffsets:[[-87769,11355]]}},{type:"Feature",id:"NLD",properties:{name:"Netherlands"},geometry:{type:"Polygon",coordinates:["@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ"],encodeOffsets:[[6220,54795]]}},{type:"Feature",id:"NOR",properties:{name:"Norway"},geometry:{type:"MultiPolygon",coordinates:[["@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ"],["@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ"],["@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋"],["@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ"]],encodeOffsets:[[[28842,72894]],[[25318,79723]],[[18690,81615]],[[26059,82338]]]}},{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:["@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć"],encodeOffsets:[[90236,28546]]}},{type:"Feature",id:"NZL",properties:{name:"New Zealand"},geometry:{type:"MultiPolygon",coordinates:[["@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ"],["@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ"]],encodeOffsets:[[[177173,-41901]],[[178803,-37024]]]}},{type:"Feature",id:"OMN",properties:{name:"Oman"},geometry:{type:"MultiPolygon",coordinates:[["@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ"],["@@ʼnƳDž˺ʔ˺ľñā΍"]],encodeOffsets:[[[60274,21621]],[[57745,26518]]]}},{type:"Feature",id:"PAK",properties:{name:"Pakistan"},geometry:{type:"Polygon",coordinates:["@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ"],encodeOffsets:[[76962,38025]]}},{type:"Feature",id:"PAN",properties:{name:"Panama"},geometry:{type:"Polygon",coordinates:["@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС"],encodeOffsets:[[-79750,7398]]}},{type:"Feature",id:"PER",properties:{name:"Peru"},geometry:{type:"Polygon",coordinates:["@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡"],encodeOffsets:[[-71260,-18001]]}},{type:"Feature",id:"PHL",properties:{name:"Philippines"},geometry:{type:"MultiPolygon",coordinates:[["@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱"],["@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ"],["@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ"],["@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА"],["@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻"],["@@ɟܩέоѓ٘ܚ‰̡̈"],["@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA"]],encodeOffsets:[[[129410,8617]],[[126959,10526]],[[121349,9540]],[[124809,12178]],[[128515,12455]],[[124445,13384]],[[124234,18949]]]}},{type:"Feature",id:"PNG",properties:{name:"Papua New Guinea"},geometry:{type:"MultiPolygon",coordinates:[["@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ"],["@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ"],["@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕"],["@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ"]],encodeOffsets:[[[159622,-6983]],[[155631,-5609]],[[150725,-7565]],[[156816,-4607]]]}},{type:"Feature",id:"POL",properties:{name:"Poland"},geometry:{type:"Polygon",coordinates:["@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔"],encodeOffsets:[[15378,52334]]}},{type:"Feature",id:"PRI",properties:{name:"Puerto Rico"},geometry:{type:"Polygon",coordinates:["@@јõưǕɋɃمLӫ‡·άŢŬیK"],encodeOffsets:[[-67873,18960]]}},{type:"Feature",id:"PRK",properties:{name:"North Korea"},geometry:{type:"Polygon",coordinates:["@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ"],encodeOffsets:[[133776,43413]]}},{type:"Feature",id:"PRT",properties:{name:"Portugal"},geometry:{type:"Polygon",coordinates:["@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"PRY",properties:{name:"Paraguay"},geometry:{type:"Polygon",coordinates:["@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ"],encodeOffsets:[[-64189,-22783]]}},{type:"Feature",id:"QAT",properties:{name:"Qatar"},geometry:{type:"Polygon",coordinates:["@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ"],encodeOffsets:[[52030,25349]]}},{type:"Feature",id:"ROU",properties:{name:"Romania"},geometry:{type:"Polygon",coordinates:["@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ"],encodeOffsets:[[23256,49032]]}},{type:"Feature",id:"RUS",properties:{name:"Russia"},geometry:{type:"MultiPolygon",coordinates:[["@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ"],["@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ"],["@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ"],["@@ः©ƭˌੲΖ@ַ"],["@@ળ»@ָň–܈E௒ʉïŗࡽȩ"],["@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə"],["@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ"],["@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ"],["@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ"],["@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ"],["@@ⵙ͕ໞીےĦقÃᒈӋʟͿ"],["@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ"],["@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ"]],encodeOffsets:[[[147096,51966]],[[23277,55632]],[[-179214,68183]],[[184320,72533]],[[-182982,72595]],[[147051,74970]],[[154350,76887]],[[148569,77377]],[[58917,72418]],[[109538,78822]],[[107598,80187]],[[52364,82481]],[[102339,80775]]]}},{type:"Feature",id:"RWA",properties:{name:"Rwanda"},geometry:{type:"Polygon",coordinates:["@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ"],encodeOffsets:[[31150,-1161]]}},{type:"Feature",id:"ESH",properties:{name:"Western Sahara"},geometry:{type:"Polygon",coordinates:["@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚"],encodeOffsets:[[-9005,27772]]}},{type:"Feature",id:"SAU",properties:{name:"Saudi Arabia"},geometry:{type:"Polygon",coordinates:["@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ"],encodeOffsets:[[43807,16741]]}},{type:"Feature",id:"SDN",properties:{name:"Sudan"},geometry:{type:"Polygon",coordinates:["@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SDS",properties:{name:"South Sudan"},geometry:{type:"Polygon",coordinates:["@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SEN",properties:{name:"Senegal"},geometry:{type:"Polygon",coordinates:["@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy"],encodeOffsets:[[-17114,13922]]}},{type:"Feature",id:"SLB",properties:{name:"Solomon Islands"},geometry:{type:"MultiPolygon",coordinates:[["@@ɾ˿חN͉ԬԈȯǜ‰"],["@@͝mԧĎǫżÀͮֈƁ˜ǭƎə"],["@@ųƹحܰǫԈ˺@̠ڥʹЗ"],["@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ"],["@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛"]],encodeOffsets:[[[166010,-10734]],[[164713,-10109]],[[165561,-9830]],[[163713,-8537]],[[161320,-7524]]]}},{type:"Feature",id:"SLE",properties:{name:"Sierra Leone"},geometry:{type:"Polygon",coordinates:["@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ"],encodeOffsets:[[-11713,6949]]}},{type:"Feature",id:"SLV",properties:{name:"El Salvador"},geometry:{type:"Polygon",coordinates:["@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ"],encodeOffsets:[[-89900,13706]]}},{type:"Feature",id:"-99",properties:{name:"Somaliland"},geometry:{type:"Polygon",coordinates:["@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ"], -encodeOffsets:[[50113,9679]]}},{type:"Feature",id:"SOM",properties:{name:"Somalia"},geometry:{type:"Polygon",coordinates:["@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ"],encodeOffsets:[[50923,11857]]}},{type:"Feature",id:"SRB",properties:{name:"Republic of Serbia"},geometry:{type:"Polygon",coordinates:["@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ"],encodeOffsets:[[21376,46507]]}},{type:"Feature",id:"SUR",properties:{name:"Suriname"},geometry:{type:"Polygon",coordinates:["@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ"],encodeOffsets:[[-58518,6117]]}},{type:"Feature",id:"SVK",properties:{name:"Slovakia"},geometry:{type:"Polygon",coordinates:["@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD"],encodeOffsets:[[19306,50685]]}},{type:"Feature",id:"SVN",properties:{name:"Slovenia"},geometry:{type:"Polygon",coordinates:["@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа"],encodeOffsets:[[14138,47626]]}},{type:"Feature",id:"SWE",properties:{name:"Sweden"},geometry:{type:"Polygon",coordinates:["@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ"],encodeOffsets:[[22716,67302]]}},{type:"Feature",id:"SWZ",properties:{name:"Swaziland"},geometry:{type:"Polygon",coordinates:["@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω"],encodeOffsets:[[32842,-27375]]}},{type:"Feature",id:"SYR",properties:{name:"Syria"},geometry:{type:"Polygon",coordinates:["@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓"],encodeOffsets:[[39724,34180]]}},{type:"Feature",id:"TCD",properties:{name:"Chad"},geometry:{type:"Polygon",coordinates:["@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ"],encodeOffsets:[[14844,13169]]}},{type:"Feature",id:"TGO",properties:{name:"Togo"},geometry:{type:"Polygon",coordinates:["@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ"],encodeOffsets:[[1911,6290]]}},{type:"Feature",id:"THA",properties:{name:"Thailand"},geometry:{type:"Polygon",coordinates:["@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১"],encodeOffsets:[[105047,12480]]}},{type:"Feature",id:"TJK",properties:{name:"Tajikistan"},geometry:{type:"Polygon",coordinates:["@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv"],encodeOffsets:[[72719,41211]]}},{type:"Feature",id:"TKM",properties:{name:"Turkmenistan"},geometry:{type:"Polygon",coordinates:["@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"TLS",properties:{name:"East Timor"},geometry:{type:"Polygon",coordinates:["@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ"],encodeOffsets:[[127968,-9106]]}},{type:"Feature",id:"TTO",properties:{name:"Trinidad and Tobago"},geometry:{type:"Polygon",coordinates:["@@ӚŊǮ‡‘صۭġƯúʒɲiͪ"],encodeOffsets:[[-63160,11019]]}},{type:"Feature",id:"TUN",properties:{name:"Tunisia"},geometry:{type:"Polygon",coordinates:["@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț"],encodeOffsets:[[9710,31035]]}},{type:"Feature",id:"TUR",properties:{name:"Turkey"},geometry:{type:"MultiPolygon",coordinates:[["@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף"],["@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ"]],encodeOffsets:[[[37800,42328]],[[27845,41668]]]}},{type:"Feature",id:"TZA",properties:{name:"United Republic of Tanzania"},geometry:{type:"Polygon",coordinates:["@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà"],encodeOffsets:[[34718,-972]]}},{type:"Feature",id:"UGA",properties:{name:"Uganda"},geometry:{type:"Polygon",coordinates:["@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß"],encodeOffsets:[[32631,-1052]]}},{type:"Feature",id:"UKR",properties:{name:"Ukraine"},geometry:{type:"Polygon",coordinates:["@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº"],encodeOffsets:[[32549,53353]]}},{type:"Feature",id:"URY",properties:{name:"Uruguay"},geometry:{type:"Polygon",coordinates:["@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ"],encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"USA",properties:{name:"United States of America"},geometry:{type:"MultiPolygon",coordinates:[["@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ"],["@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ"],["@@ĝ҉|Úĸа•"],["@@­µÓŻˆŃȒ’ɤŚêÃʐ˥"],["@@ıĉ˱ƴªÖŸĈȘijȝ"],["@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J"],["@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ"],["@@ԧŽսƾԛɮࠦƞښùĂ͑"],["@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́"],["@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ"]],encodeOffsets:[[[-159275,19542]],[[-159825,21140]],[[-160520,21686]],[[-161436,21834]],[[-163169,22510]],[[-97093,50575]],[[-156678,58487]],[[-169553,61348]],[[-175853,65314]],[[-158789,72856]]]}},{type:"Feature",id:"UZB",properties:{name:"Uzbekistan"},geometry:{type:"Polygon",coordinates:["@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN"],encodeOffsets:[[68116,38260]]}},{type:"Feature",id:"VEN",properties:{name:"Venezuela"},geometry:{type:"Polygon",coordinates:["@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ"],encodeOffsets:[[-73043,12059]]}},{type:"Feature",id:"VNM",properties:{name:"Vietnam"},geometry:{type:"Polygon",coordinates:["@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ"],encodeOffsets:[[110644,22070]]}},{type:"Feature",id:"VUT",properties:{name:"Vanuatu"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣō˭ςŒɤՆӗ"],["@@ƌڱɥŀǩ­ťɴi٢Дʵ"]],encodeOffsets:[[[171874,-16861]],[[171119,-15292]]]}},{type:"Feature",id:"PSE",properties:{name:"West Bank"},geometry:{type:"Polygon",coordinates:["@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"YEM",properties:{name:"Yemen"},geometry:{type:"Polygon",coordinates:["@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח"],encodeOffsets:[[54384,17051]]}},{type:"Feature",id:"ZAF",properties:{name:"South Africa"},geometry:{type:"Polygon",coordinates:["@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ","@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ"],encodeOffsets:[[32278,-29959],[29674,-29650]]}},{type:"Feature",id:"ZMB",properties:{name:"Zambia"},geometry:{type:"Polygon",coordinates:["@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ"],encodeOffsets:[[33546,-9452]]}},{type:"Feature",id:"ZWE",properties:{name:"Zimbabwe"},geometry:{type:"Polygon",coordinates:["@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓"],encodeOffsets:[[31941,-22785]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xiang_gang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8100",properties:{name:"香港",cp:[114.2784,22.3057],childNum:1},geometry:{type:"Polygon",coordinates:["@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën"],encodeOffsets:[[117078,22678]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xin_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6528",properties:{name:"巴音郭楞蒙古自治州",cp:[88.1653,39.6002],childNum:9},geometry:{type:"Polygon",coordinates:["@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚ĊaʊŁ±¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™wô™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉkğ°ƒk¥˜ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑŽ¯ôȯÞ¯Ȱ™ÆōèĉXǼó@ݚnºƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVŽ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪÈ°„ÞWĸÈŌmބškɲŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ"],encodeOffsets:[[86986,44534]]}},{type:"Feature",id:"6532",properties:{name:"和田地区",cp:[81.167,36.9855],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@уaŹ„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çÇ°Åw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„"],encodeOffsets:[[81293,39764]]}},{type:"Feature",id:"6522",properties:{name:"哈密地区",cp:[93.7793,42.9236],childNum:3},geometry:{type:"Polygon",coordinates:["@@WnŐÆĶLĢ¦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽŁƒéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmĖ`@ÇÜn„"],encodeOffsets:[[93387,44539]]}},{type:"Feature",id:"6529",properties:{name:"阿克苏地区",cp:[82.9797,41.0229],childNum:10},geometry:{type:"Polygon",coordinates:["@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèŌôWČ²ŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼","@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ"],encodeOffsets:[[80022,41294],[83914,41474]]}},{type:"Feature",id:"6543",properties:{name:"阿勒泰地区",cp:[88.2971,47.0929],childNum:7},geometry:{type:"Polygon",coordinates:["@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜƐóôVôôŽ²êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™n¯š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯"],encodeOffsets:[[92656,48460]]}},{type:"Feature",id:"6531",properties:{name:"喀什地区",cp:[77.168,37.8534],childNum:13},geometry:{type:"Polygon",coordinates:["@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKÝ°@¼ÈVºš@ÅĢšÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„Ž±ŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ","@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé"],encodeOffsets:[[76624,39196],[81507,40877]]}},{type:"Feature",id:"6542",properties:{name:"塔城地区",cp:[86.6272,45.8514],childNum:7},geometry:{type:"Polygon",coordinates:["@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUŰĢ°„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@","@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlźƒ¦"],encodeOffsets:[[87593,48184],[86884,45760]]}},{type:"Feature",id:"6523",properties:{name:"昌吉回族自治州",cp:[89.6814,44.4507],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@መL@È°ĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwŹƒŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅƃĸǫŎ„ĊmŎǬ՘"],["@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń"]],encodeOffsets:[[[90113,46080]],[[87638,44579]]]}},{type:"Feature",id:"6530",properties:{name:"克孜勒苏柯尔克孜自治州",cp:[74.6301,39.5233],childNum:4},geometry:{type:"Polygon",coordinates:["@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„k»ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸUĢ¦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb"],encodeOffsets:[[80269,42396]]}},{type:"Feature",id:"6521",properties:{name:"吐鲁番地区",cp:[89.6375,42.4127],childNum:3},geometry:{type:"Polygon",coordinates:["@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUÝ°˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ"],encodeOffsets:[[90248,44371]]}},{type:"Feature",id:"6540",properties:{name:"伊犁哈萨克自治州",cp:[82.5513,43.5498],childNum:10},geometry:{type:"MultiPolygon",coordinates:[["@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™l݃ŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDŽ¯£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ"],["@@ÞĀlźƒ¦¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ"]],encodeOffsets:[[[82722,44337]],[[86817,45456]]]}},{type:"Feature",id:"6527",properties:{name:"博尔塔拉蒙古自治州",cp:[81.8481,44.6979],childNum:3},geometry:{type:"Polygon",coordinates:["@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb"],encodeOffsets:[[84555,46311]]}},{type:"Feature",id:"6501",properties:{name:"乌鲁木齐市",cp:[87.9236,43.5883],childNum:4},geometry:{type:"Polygon",coordinates:["@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆŚ@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô"],encodeOffsets:[[88887,44146]]}},{type:"Feature",id:"6502",properties:{name:"克拉玛依市",cp:[85.2869,45.5054],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°"],["@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ"]],encodeOffsets:[[[87424,47245]],[[86817,45456]]]}},{type:"Feature",id:"659002",properties:{name:"阿拉尔市",cp:[81.2769,40.6549],childNum:1},geometry:{type:"Polygon",coordinates:["@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ"],encodeOffsets:[[83824,41929]]}},{type:"Feature",id:"659003",properties:{name:"图木舒克市",cp:[79.1345,39.8749],childNum:1},geometry:{type:"Polygon",coordinates:["@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ"],encodeOffsets:[[81496,40962]]}},{type:"Feature",id:"659004",properties:{name:"五家渠市",cp:[87.5391,44.3024],childNum:1},geometry:{type:"Polygon",coordinates:["@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ"],encodeOffsets:[[89674,45636]]}},{type:"Feature",id:"659001",properties:{name:"石河子市",cp:[86.0229,44.2914],childNum:1},geometry:{type:"Polygon",coordinates:["@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@"],encodeOffsets:[[88178,45529]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xi_zang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5424",properties:{name:"那曲地区",cp:[88.1982,33.3215],childNum:10},geometry:{type:"Polygon",coordinates:["@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃU¯‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅĢ¯mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„ĠĕˎŁ°óƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑklǁÅl™Ģ™VÑóƒ@°@„ÛĸƒV¯ƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒbĵ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒl£™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒwۄÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒkóŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™VôšŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5425",properties:{name:"阿里地区",cp:[82.3645,32.7667],childNum:7},geometry:{type:"Polygon",coordinates:["@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™U󚏃£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kīƯól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆŐmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉĶƒk@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„VĠƒV󍃎Ǔ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉĶ¯ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚lѢšŽ²Ėm¦°š@¤™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@Æ°XĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎbĢƒŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@ĢȂÑôÓĠĖʊšĊÔ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5423",properties:{name:"日喀则地区",cp:[86.2427,29.5093],childNum:18},geometry:{type:"Polygon",coordinates:["@@ĶĖXþš„ôƒl£šÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„lҙżVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽmīƒLkƒl¥™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ@Қ¼Æ°ºŐnmÆĸ¦UńƃV„óĶšLšèôkÅ°lĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚wĸšÈ¯@þÇUn¼Ý@™x„xÇńÞ¼ĊŽ²amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„XŎ™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™@ќa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ@ۘa@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkÝ°V°ó¼¯èWôÞĖ„ȎƒŽkĀƧĀówm¥¯JŹÝJݙōVVŁaݐƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDŽV¼¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼"],encodeOffsets:[[84117,30927]]}},{type:"Feature",id:"5426",properties:{name:"林芝地区",cp:[95.4602,29.1138],childNum:7},geometry:{type:"Polygon",coordinates:["@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔKĢ²Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWÑ°mÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠÑ°ġĸLÞ¯VÒƂ@Ābš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒU¯šçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°mĖ¯„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈƂ„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U"],encodeOffsets:[[94737,30809]]}},{type:"Feature",id:"5421",properties:{name:"昌都地区",cp:[97.0203,30.7068],childNum:11},geometry:{type:"Polygon",coordinates:["@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlŽÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„zǖl„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUĀ¯èţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑÝ°ķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówŹ¦ġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™b¯™Ý°UWéÛaƒxʉÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°"],encodeOffsets:[[97302,31917]]}},{type:"Feature",id:"5422",properties:{name:"山南地区",cp:[92.2083,28.3392],childNum:12},geometry:{type:"Polygon",coordinates:["@@°ÞUĖ°¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„Wȗ‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċŽ¯£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤"],encodeOffsets:[[92363,29672]]}},{type:"Feature",id:"5401",properties:{name:"拉萨市",cp:[91.1865,30.1465],childNum:8},geometry:{type:"Polygon",coordinates:["@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnČ¼ÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢÇ°bȂ™ÇŁUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V"],encodeOffsets:[[92059,30696]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/yun_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5308",properties:{name:"普洱市",cp:[100.7446,23.4229],childNum:10},geometry:{type:"Polygon",coordinates:["@@U‚ô²‚a@Ž²²Ķ¥œV°šĶ²bl¤kVxl‚@œ°‚Ś²@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@ĀœšmŽmXU°ÅÒm¼Þx°w„@°‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎmș`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£maķšƒKXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux"],encodeOffsets:[[101903,23637]]}},{type:"Feature",id:"5325",properties:{name:"红河哈尼族彝族自治州",cp:[103.0408,23.6041],childNum:13},geometry:{type:"Polygon",coordinates:["@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ƏÞUnn˜WÞĸĢƒšÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmŽV¦`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃV£—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™VçƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaVķÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmŽ¯„™Umǯa„™ƒ™ƒI@ykIƒVUŽ¯bƒIğŽƒ¼™¼ó¤mwkLÝÞ"],encodeOffsets:[[104243,23429]]}},{type:"Feature",id:"5326",properties:{name:"文山壮族苗族自治州",cp:[104.8865,23.5712],childNum:8},geometry:{type:"Polygon",coordinates:["@@šwô„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒl»„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏk¯ƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšVĀƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV"],encodeOffsets:[[106504,25037]]}},{type:"Feature",id:"5303",properties:{name:"曲靖市",cp:[103.9417,25.7025],childNum:9},geometry:{type:"Polygon",coordinates:["@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„KȄVmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑÇ°ka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™@óƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™lܐk‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„l¦„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b"],encodeOffsets:[[106099,27653]]}},{type:"Feature",id:"5323",properties:{name:"楚雄彝族自治州",cp:[101.6016,25.3619],childNum:10},geometry:{type:"Polygon",coordinates:["@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkř@±Žk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš@°„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl"],encodeOffsets:[[103433,26196]]}},{type:"Feature",id:"5329",properties:{name:"大理白族自治州",cp:[99.9536,25.6805],childNum:12},geometry:{type:"Polygon",coordinates:["@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„K°šš¼k„Uô‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôĶĀ²VVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄UçƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUŽ°KVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„šWĊ„Þ"],encodeOffsets:[[101408,26770]]}},{type:"Feature",id:"5309",properties:{name:"临沧市",cp:[99.613,24.0546],childNum:8},geometry:{type:"Polygon",coordinates:["@@‚xĢ„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„aÝȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒn»‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵŽ¯™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XŽ¯IólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„@Ǝ„¦kš"],encodeOffsets:[[101251,24734]]}},{type:"Feature",id:"5334",properties:{name:"迪庆藏族自治州",cp:[99.4592,27.9327],childNum:3},geometry:{type:"Polygon",coordinates:["@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUš@Ťƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnŽ°l@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯"],encodeOffsets:[[102702,28401]]}},{type:"Feature",id:"5306",properties:{name:"昭通市",cp:[104.0955,27.6031],childNum:11},geometry:{type:"Polygon",coordinates:["@@mƒnK@wmƒUř¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™XŎW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWŽIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšUĖ±ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™"],encodeOffsets:[[107787,28244]]}},{type:"Feature",id:"5301",properties:{name:"昆明市",cp:[102.9199,25.4663],childNum:11},geometry:{type:"Polygon",coordinates:["@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxUĖ°bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš"],encodeOffsets:[[104828,25999]]}},{type:"Feature",id:"5307",properties:{name:"丽江市",cp:[100.448,26.955],childNum:5},geometry:{type:"Polygon",coordinates:["@@l@™„@w°ÓUnƒÜÑ°w@mČóšÝlU»n°„„VÜUbVbm¼@Ž°xôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›XğÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™Ž@ĀƒbU‚„zUƂ°ÞVb@„Æbnššx"],encodeOffsets:[[101937,28227]]}},{type:"Feature",id:"5328",properties:{name:"西双版纳傣族自治州",cp:[100.8984,21.8628],childNum:3},geometry:{type:"Polygon",coordinates:["@@l²°ŽnÒlxÞ@„nWl„Lĸ™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„mƁbWôU@ÝÅōm™¯ƒaU™™mk™WWw—@±ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl"],encodeOffsets:[[102376,22579]]}},{type:"Feature",id:"5305",properties:{name:"保山市",cp:[99.0637,24.9884],childNum:5},geometry:{type:"Polygon",coordinates:["@@X°„Il‚@¦ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWÇ°LnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒk¯ƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°lĖƒô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@Ž¯Žm@ƒ¦"],encodeOffsets:[[100440,25943]]}},{type:"Feature",id:"5304",properties:{name:"玉溪市",cp:[101.9312,23.8898],childNum:9},geometry:{type:"Polygon",coordinates:["@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„K°„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇķ¯™@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—L±ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ"],encodeOffsets:[[103703,24874]]}},{type:"Feature",id:"5333",properties:{name:"怒江傈僳族自治州",cp:[99.1516,26.5594],childNum:4},geometry:{type:"Polygon",coordinates:["@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œm¤„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™aó„@n™KXwVKU¯V¥mUnkm¥ĉ@UxVĖƒ°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVÈ°ŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„Xƃ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUššL°‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n"],encodeOffsets:[[101071,28891]]}},{type:"Feature",id:"5331",properties:{name:"德宏傣族景颇族自治州",cp:[98.1299,24.5874],childNum:5},geometry:{type:"Polygon",coordinates:["@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™XݙnƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óŽ°¼šbn°ô¦lºƒz@xšŽ¯„™@UŽ°nƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx"],encodeOffsets:[[100440,25943]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/zhe_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3311",properties:{name:"丽水市",cp:[119.5642,28.1854],childNum:9},geometry:{type:"Polygon",coordinates:["@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@"],encodeOffsets:[[121546,28992]]}},{type:"Feature",id:"3301",properties:{name:"杭州市",cp:[119.5313,29.8773],childNum:6},geometry:{type:"Polygon",coordinates:["@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3303",properties:{name:"温州市",cp:[120.498,27.8119],childNum:9},geometry:{type:"Polygon",coordinates:["@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX"],encodeOffsets:[[122502,28334]]}},{type:"Feature",id:"3302",properties:{name:"宁波市",cp:[121.5967,29.6466],childNum:6},geometry:{type:"Polygon",coordinates:["@@Ċ¦ĸĀ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœU°ÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒLóŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è"],encodeOffsets:[[123784,30977]]}},{type:"Feature",id:"3309",properties:{name:"舟山市",cp:[122.2559,30.2234],childNum:3},geometry:{type:"Polygon",coordinates:["@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmŽ¯¼ŹĀ"], -encodeOffsets:[[124437,30983]]}},{type:"Feature",id:"3310",properties:{name:"台州市",cp:[121.1353,28.6688],childNum:7},geometry:{type:"Polygon",coordinates:["@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L"],encodeOffsets:[[123312,29526]]}},{type:"Feature",id:"3307",properties:{name:"金华市",cp:[120.0037,29.1028],childNum:8},geometry:{type:"Polygon",coordinates:["@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx"],encodeOffsets:[[122119,29948]]}},{type:"Feature",id:"3308",properties:{name:"衢州市",cp:[118.6853,28.8666],childNum:5},geometry:{type:"Polygon",coordinates:["@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3306",properties:{name:"绍兴市",cp:[120.564,29.7565],childNum:6},geometry:{type:"Polygon",coordinates:["@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx"],encodeOffsets:[[122997,30561]]}},{type:"Feature",id:"3304",properties:{name:"嘉兴市",cp:[120.9155,30.6354],childNum:6},geometry:{type:"Polygon",coordinates:["@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒIŋŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚"],encodeOffsets:[[123233,31382]]}},{type:"Feature",id:"3305",properties:{name:"湖州市",cp:[119.8608,30.7782],childNum:4},geometry:{type:"Polygon",coordinates:["@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„UҚ@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›"],encodeOffsets:[[123379,31500]]}}],UTF8Encoding:!0}}),i("echarts/chart/gauge",["require","./base","../util/shape/GaugePointer","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","zrender/shape/Circle","zrender/shape/Sector","../config","../util/ecData","../util/accMath","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/GaugePointer"),a=e("zrender/shape/Text"),o=e("zrender/shape/Line"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Circle"),l=e("zrender/shape/Sector"),h=e("../config");h.gauge={zlevel:0,z:2,center:["50%","50%"],clickable:!0,legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#228b22"],[.8,"#48b"],[1,"#ff4500"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,textStyle:{color:"auto"}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},pointer:{show:!0,length:"80%",width:8,color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}};var m=e("../util/ecData"),V=e("../util/accMath"),U=e("zrender/tool/util");return t.prototype={type:h.CHART_TYPE_GAUGE,_buildShape:function(){var e=this.series;this._paramsMap={},this.selectedMap={};for(var t=0,i=e.length;i>t;t++)e[t].type===h.CHART_TYPE_GAUGE&&(this.selectedMap[e[t].name]=!0,e[t]=this.reformOption(e[t]),this.legendHoverLink=e[t].legendHoverLink||this.legendHoverLink,this._buildSingleGauge(t),this.buildMark(t));this.addShapeList()},_buildSingleGauge:function(e){var t=this.series[e];this._paramsMap[e]={center:this.parseCenter(this.zr,t.center),radius:this.parseRadius(this.zr,t.radius),startAngle:t.startAngle.toFixed(2)-0,endAngle:t.endAngle.toFixed(2)-0},this._paramsMap[e].totalAngle=this._paramsMap[e].startAngle-this._paramsMap[e].endAngle,this._colorMap(e),this._buildAxisLine(e),this._buildSplitLine(e),this._buildAxisTick(e),this._buildAxisLabel(e),this._buildPointer(e),this._buildTitle(e),this._buildDetail(e)},_buildAxisLine:function(e){var t=this.series[e];if(t.axisLine.show)for(var i,n,a=t.min,o=t.max-a,r=this._paramsMap[e],s=r.center,l=r.startAngle,h=r.totalAngle,V=r.colorArray,U=t.axisLine.lineStyle,d=this.parsePercent(U.width,r.radius[1]),p=r.radius[1],c=p-d,u=l,y=0,g=V.length;g>y;y++)n=l-h*(V[y][0]-a)/o,i=this._getSector(s,c,p,n,u,V[y][1],U,t.zlevel,t.z),u=n,i._animationAdd="r",m.set(i,"seriesIndex",e),m.set(i,"dataIndex",y),this.shapeList.push(i)},_buildSplitLine:function(e){var t=this.series[e];if(t.splitLine.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.splitLine,V=this.parsePercent(m.length,r.radius[1]),U=m.lineStyle,d=U.color,p=r.center,c=r.startAngle*Math.PI/180,u=r.totalAngle*Math.PI/180,y=r.radius[1],g=y-V,b=0;s>=b;b++)i=c-u/s*b,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:p[0]+a*y,yStart:p[1]-n*y,xEnd:p[0]+a*g,yEnd:p[1]-n*g,strokeColor:"auto"===d?this._getColor(e,l+h/s*b):d,lineType:U.type,lineWidth:U.width,shadowColor:U.shadowColor,shadowBlur:U.shadowBlur,shadowOffsetX:U.shadowOffsetX,shadowOffsetY:U.shadowOffsetY}}))},_buildAxisTick:function(e){var t=this.series[e];if(t.axisTick.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisTick,V=m.splitNumber,U=this.parsePercent(m.length,r.radius[1]),d=m.lineStyle,p=d.color,c=r.center,u=r.startAngle*Math.PI/180,y=r.totalAngle*Math.PI/180,g=r.radius[1],b=g-U,f=0,k=s*V;k>=f;f++)f%V!==0&&(i=u-y/k*f,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:c[0]+a*g,yStart:c[1]-n*g,xEnd:c[0]+a*b,yEnd:c[1]-n*b,strokeColor:"auto"===p?this._getColor(e,l+h/k*f):p,lineType:d.type,lineWidth:d.width,shadowColor:d.shadowColor,shadowBlur:d.shadowBlur,shadowOffsetX:d.shadowOffsetX,shadowOffsetY:d.shadowOffsetY}})))},_buildAxisLabel:function(e){var t=this.series[e];if(t.axisLabel.show)for(var i,n,o,r,s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisLabel.textStyle,U=this.getFont(m),d=m.color,p=this._paramsMap[e],c=p.center,u=p.startAngle,y=p.totalAngle,g=p.radius[1]-this.parsePercent(t.splitLine.length,p.radius[1])-5,b=0;s>=b;b++)r=V.accAdd(l,V.accMul(V.accDiv(h,s),b)),i=u-y/s*b,n=Math.sin(i*Math.PI/180),o=Math.cos(i*Math.PI/180),i=(i+360)%360,this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{x:c[0]+o*g,y:c[1]-n*g,color:"auto"===d?this._getColor(e,r):d,text:this._getLabelText(t.axisLabel.formatter,r),textAlign:i>=110&&250>=i?"left":70>=i||i>=290?"right":"center",textBaseline:i>=10&&170>=i?"top":i>=190&&350>=i?"bottom":"middle",textFont:U,shadowColor:m.shadowColor,shadowBlur:m.shadowBlur,shadowOffsetX:m.shadowOffsetX,shadowOffsetY:m.shadowOffsetY}}))},_buildPointer:function(e){var t=this.series[e];if(t.pointer.show){var i=t.max-t.min,a=t.pointer,o=this._paramsMap[e],r=this.parsePercent(a.length,o.radius[1]),l=this.parsePercent(a.width,o.radius[1]),h=o.center,V=this._getValue(e);V=V2?2:l/2,color:"#fff"}});m.pack(p,this.series[e],e,this.series[e].data[0],0,this.series[e].data[0].name,V),this.shapeList.push(p),this.shapeList.push(new s({zlevel:t.zlevel,z:t.z+2,hoverable:!1,style:{x:h[0],y:h[1],r:a.width/2.5,color:"#fff"}}))}},_buildTitle:function(e){var t=this.series[e];if(t.title.show){var i=t.data[0],n=null!=i.name?i.name:"";if(""!==n){var o=t.title,r=o.offsetCenter,s=o.textStyle,l=s.color,h=this._paramsMap[e],m=h.center[0]+this.parsePercent(r[0],h.radius[1]),V=h.center[1]+this.parsePercent(r[1],h.radius[1]);this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+(Math.abs(m-h.center[0])+Math.abs(V-h.center[1])<2*s.fontSize?2:1),hoverable:!1,style:{x:m,y:V,color:"auto"===l?this._getColor(e):l,text:n,textAlign:"center",textFont:this.getFont(s),shadowColor:s.shadowColor,shadowBlur:s.shadowBlur,shadowOffsetX:s.shadowOffsetX,shadowOffsetY:s.shadowOffsetY}}))}}},_buildDetail:function(e){var t=this.series[e];if(t.detail.show){var i=t.detail,n=i.offsetCenter,a=i.backgroundColor,o=i.textStyle,s=o.color,l=this._paramsMap[e],h=this._getValue(e),m=l.center[0]-i.width/2+this.parsePercent(n[0],l.radius[1]),V=l.center[1]+this.parsePercent(n[1],l.radius[1]);this.shapeList.push(new r({zlevel:t.zlevel,z:t.z+(Math.abs(m+i.width/2-l.center[0])+Math.abs(V+i.height/2-l.center[1])r;r++)o.push([a[r][0]*n+i,a[r][1]]);this._paramsMap[e].colorArray=o},_getColor:function(e,t){null==t&&(t=this._getValue(e));for(var i=this._paramsMap[e].colorArray,n=0,a=i.length;a>n;n++)if(i[n][0]>=t)return i[n][1];return i[i.length-1][1]},_getSector:function(e,t,i,n,a,o,r,s,h){return new l({zlevel:s,z:h,hoverable:!1,style:{x:e[0],y:e[1],r0:t,r:i,startAngle:n,endAngle:a,brushType:"fill",color:o,shadowColor:r.shadowColor,shadowBlur:r.shadowBlur,shadowOffsetX:r.shadowOffsetX,shadowOffsetY:r.shadowOffsetY}})},_getLabelText:function(e,t){if(e){if("function"==typeof e)return e.call(this.myChart,t);if("string"==typeof e)return e.replace("{value}",t)}return t},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},U.inherits(t,i),e("../chart").define("gauge",t),t}),i("echarts/util/shape/GaugePointer",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"gauge-pointer",buildPath:function(e,t){var i=t.r,n=t.width,a=t.angle,o=t.x-Math.cos(a)*n*(n>=i/3?1:2),r=t.y+Math.sin(a)*n*(n>=i/3?1:2);a=t.angle-Math.PI/2,e.moveTo(o,r),e.lineTo(t.x+Math.cos(a)*n,t.y-Math.sin(a)*n),e.lineTo(t.x+Math.cos(t.angle)*i,t.y-Math.sin(t.angle)*i),e.lineTo(t.x-Math.cos(a)*n,t.y+Math.sin(a)*n),e.lineTo(o,r)},getRect:function(e){if(e.__rect)return e.__rect;var t=2*e.width,i=e.x,n=e.y,a=i+Math.cos(e.angle)*e.r,o=n-Math.sin(e.angle)*e.r;return e.__rect={x:Math.min(i,a)-t,y:Math.min(n,o)-t,width:Math.abs(i-a)+t,height:Math.abs(n-o)+t},e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("echarts/chart/funnel",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","../config","../util/ecData","../util/number","zrender/tool/util","zrender/tool/color","zrender/tool/area","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("../config");r.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var s=e("../util/ecData"),l=e("../util/number"),h=e("zrender/tool/util"),m=e("zrender/tool/color"),V=e("zrender/tool/area");return t.prototype={type:r.CHART_TYPE_FUNNEL,_buildShape:function(){var e=this.series,t=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,n=0,a=e.length;a>n;n++)if(e[n].type===r.CHART_TYPE_FUNNEL){if(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,i=e[n].name||"",this.selectedMap[i]=t?t.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(n),this.buildMark(n)}this.addShapeList()},_buildSingleFunnel:function(e){var t=this.component.legend,i=this.series[e],n=this._mapData(e),a=this._getLocation(e);this._paramsMap[e]={location:a,data:n};for(var o,r=0,s=[],h=0,m=n.length;m>h;h++)o=n[h].name,this.selectedMap[o]=t?t.isSelected(o):!0,this.selectedMap[o]&&!isNaN(n[h].value)&&(s.push(n[h]),r++);if(0!==r){for(var V,U,d,p,c=this._buildFunnelCase(e),u=i.funnelAlign,y=i.gap,g=r>1?(a.height-(r-1)*y)/r:a.height,b=a.y,f="descending"===i.sort?this._getItemWidth(e,s[0].value):l.parsePercent(i.minSize,a.width),k="descending"===i.sort?1:0,x=a.centerX,_=[],h=0,m=s.length;m>h;h++)if(o=s[h].name,this.selectedMap[o]&&!isNaN(s[h].value)){switch(V=m-2>=h?this._getItemWidth(e,s[h+k].value):"descending"===i.sort?l.parsePercent(i.minSize,a.width):l.parsePercent(i.maxSize,a.width),u){case"left":U=a.x;break;case"right":U=a.x+a.width-f;break;default:U=x-f/2}d=this._buildItem(e,s[h]._index,t?t.getColor(o):this.zr.getColor(s[h]._index),U,b,f,V,g,u),b+=g+y,p=d.style.pointList,_.unshift([p[0][0]-10,p[0][1]]),_.push([p[1][0]+10,p[1][1]]),0===h&&(0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]-="center"==u?10:15,1==m&&(p=d.style.pointList)):(_[_.length-1][1]-=5,_[0][1]-=5)),f=V}c&&(_.unshift([p[3][0]-10,p[3][1]]),_.push([p[2][0]+10,p[2][1]]),0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]+="center"==u?10:15):(_[_.length-1][1]+=5,_[0][1]+=5),c.style.pointList=_)}},_buildFunnelCase:function(e){var t=this.series[e];if(this.deepQuery([t,this.option],"calculable")){var i=this._paramsMap[e].location,n=10,a={hoverable:!1,style:{pointListd:[[i.x-n,i.y-n],[i.x+i.width+n,i.y-n],[i.x+i.width+n,i.y+i.height+n],[i.x-n,i.y+i.height+n]],brushType:"stroke",lineWidth:1,strokeColor:t.calculableHolderColor||this.ecTheme.calculableHolderColor||r.calculableHolderColor}};return s.pack(a,t,e,void 0,-1),this.setCalculable(a),a=new o(a),this.shapeList.push(a),a}},_getLocation:function(e){var t=this.series[e],i=this.zr.getWidth(),n=this.zr.getHeight(),a=this.parsePercent(t.x,i),o=this.parsePercent(t.y,n),r=null==t.width?i-a-this.parsePercent(t.x2,i):this.parsePercent(t.width,i);return{x:a,y:o,width:r,height:null==t.height?n-o-this.parsePercent(t.y2,n):this.parsePercent(t.height,n),centerX:a+r/2}},_mapData:function(e){function t(e,t){return"-"===e.value?1:"-"===t.value?-1:t.value-e.value}function i(e,i){return-t(e,i)}for(var n=this.series[e],a=h.clone(n.data),o=0,r=a.length;r>o;o++)a[o]._index=o;return"none"!=n.sort&&a.sort("descending"===n.sort?t:i),a},_buildItem:function(e,t,i,n,a,o,r,l,h){var m=this.series,V=m[e],U=V.data[t],d=this.getPolygon(e,t,i,n,a,o,r,l,h);s.pack(d,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(d);var p=this.getLabel(e,t,i,n,a,o,r,l,h);s.pack(p,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(p),this._needLabel(V,U,!1)||(p.invisible=!0);var c=this.getLabelLine(e,t,i,n,a,o,r,l,h);this.shapeList.push(c),this._needLabelLine(V,U,!1)||(c.invisible=!0);var u=[],y=[];return this._needLabelLine(V,U,!0)&&(u.push(c.id),y.push(c.id)),this._needLabel(V,U,!0)&&(u.push(p.id),y.push(d.id)),d.hoverConnect=u,p.hoverConnect=y,d},_getItemWidth:function(e,t){var i=this.series[e],n=this._paramsMap[e].location,a=i.min,o=i.max,r=l.parsePercent(i.minSize,n.width),s=l.parsePercent(i.maxSize,n.width);return(t-a)*(s-r)/(o-a)+r},getPolygon:function(e,t,i,n,a,r,s,l,h){var V,U=this.series[e],d=U.data[t],p=[d,U],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=this.getItemStyleColor(c.color,e,t,d)||i,g=this.getItemStyleColor(u.color,e,t,d)||("string"==typeof y?m.lift(y,-.2):y);switch(h){case"left":V=n;break;case"right":V=n+(r-s);break;default:V=n+(r-s)/2}var b={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(p,"clickable"),style:{pointList:[[n,a],[n+r,a],[V+s,a+l],[V,a+l]],brushType:"both",color:y,lineWidth:c.borderWidth,strokeColor:c.borderColor},highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(b),b.draggable=!0),new o(b)},getLabel:function(e,t,i,a,o,r,s,l,U){var d,p=this.series[e],c=p.data[t],u=this._paramsMap[e].location,y=h.merge(h.clone(c.itemStyle)||{},p.itemStyle),g="normal",b=y[g].label,f=b.textStyle||{},k=y[g].labelLine.length,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i;b.position=b.position||y.normal.label.position,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left";var W={zlevel:p.zlevel,z:p.z+1,style:{x:this._getLabelPoint(b.position,a,u,r,s,k,U),y:o+l/2,color:f.color||L,text:x,textAlign:f.align||d,textBaseline:f.baseline||"middle",textFont:_}};return g="emphasis",b=y[g].label||b,f=b.textStyle||f,k=y[g].labelLine.length||k,b.position=b.position||y.normal.label.position,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left",W.highlightStyle={x:this._getLabelPoint(b.position,a,u,r,s,k,U),color:f.color||L,text:x,textAlign:f.align||d,textFont:_,brushType:"fill"},new n(W)},getLabelText:function(e,t,i){var n=this.series,a=n[e],o=a.data[t],r=this.deepQuery([o,a],"itemStyle."+i+".label.formatter");return r?"function"==typeof r?r.call(this.myChart,{seriesIndex:e,seriesName:a.name||"",series:a,dataIndex:t,data:o,name:o.name,value:o.value}):"string"==typeof r?r=r.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",a.name).replace("{b0}",o.name).replace("{c0}",o.value):void 0:o.name},getLabelLine:function(e,t,i,n,o,r,s,l,m){var V=this.series[e],U=V.data[t],d=this._paramsMap[e].location,p=h.merge(h.clone(U.itemStyle)||{},V.itemStyle),c="normal",u=p[c].labelLine,y=p[c].labelLine.length,g=u.lineStyle||{},b=p[c].label;b.position=b.position||p.normal.label.position;var f={zlevel:V.zlevel,z:V.z+1,hoverable:!1,style:{xStart:this._getLabelLineStartPoint(n,d,r,s,m),yStart:o+l/2,xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),yEnd:o+l/2,strokeColor:g.color||i,lineType:g.type,lineWidth:g.width}};return c="emphasis",u=p[c].labelLine||u,y=p[c].labelLine.length||y,g=u.lineStyle||g,b=p[c].label||b,b.position=b.position,f.highlightStyle={xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),strokeColor:g.color||i,lineType:g.type,lineWidth:g.width},new a(f)},_getLabelPoint:function(e,t,i,n,a,o,r){switch(e="inner"===e||"inside"===e?"center":e){case"center":return"center"==r?t+n/2:"left"==r?t+10:t+n-10;case"left":return"auto"===o?i.x-10:"center"==r?i.centerX-Math.max(n,a)/2-o:"right"==r?t-(a>n?a-n:0)-o:i.x-o;default:return"auto"===o?i.x+i.width+10:"center"==r?i.centerX+Math.max(n,a)/2+o:"right"==r?i.x+i.width+o:t+Math.max(n,a)+o}},_getLabelLineStartPoint:function(e,t,i,n,a){return"center"==a?t.centerX:n>i?e+Math.min(i,n)/2:e+Math.max(i,n)/2},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},h.inherits(t,i),e("../chart").define("funnel",t),t}),i("echarts/chart/eventRiver",["require","./base","../layout/eventRiver","zrender/shape/Polygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","../util/date","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=function(){r.isDragend=!0},this.refresh(a)}var i=e("./base"),n=e("../layout/eventRiver"),a=e("zrender/shape/Polygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var o=e("../config");o.eventRiver={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"inside",formatter:"{b}"}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0}}}};var r=e("../util/ecData"),s=e("../util/date"),l=e("zrender/tool/util"),h=e("zrender/tool/color");return t.prototype={type:o.CHART_TYPE_EVENTRIVER,_buildShape:function(){var e=this.series;this.selectedMap={},this._dataPreprocessing();for(var t=this.component.legend,i=[],a=0;an;n++)if(i[n].type===this.type){e=this.component.xAxis.getAxis(i[n].xAxisIndex||0);for(var o=0,r=i[n].data.length;r>o;o++){t=i[n].data[o].evolution;for(var l=0,h=t.length;h>l;l++)t[l].timeScale=e.getCoord(s.getNewDate(t[l].time)-0),t[l].valueScale=Math.pow(t[l].value,.8)}}this._intervalX=Math.round(this.component.grid.getWidth()/40)},_drawEventRiver:function(){for(var e=this.series,t=0;ta)){for(var o=[],r=[],s=0;a>s;s++)o.push(n[s].timeScale),r.push(n[s].valueScale);var l=[];l.push([o[0],i]);var s=0;for(s=0;a-1>s;s++)l.push([(o[s]+o[s+1])/2,r[s]/-2+i]);for(l.push([(o[s]+(o[s]+t))/2,r[s]/-2+i]),l.push([o[s]+t,i]),l.push([(o[s]+(o[s]+t))/2,r[s]/2+i]),s=a-1;s>0;s--)l.push([(o[s]+o[s-1])/2,r[s-1]/2+i]);return l}},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1)},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},l.inherits(t,i),e("../chart").define("eventRiver",t),t}),i("echarts/layout/eventRiver",["require"],function(){function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;return i>n?-1:n>i?1:0}for(var s=4,l=0;l=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l.5?.5:1,r=t.y,s=(t.height-n)/i,l=0,h=e.length;h>l;l++){var m=e[l];m.y=r+s*m.y+m._offset*o,delete m.time,delete m.value,delete m.xpx,delete m.ypx,delete m._offset;for(var V=m.evolution,U=0,d=V.length;d>U;U++)V[U].valueScale*=s}}function i(e,t,i,n){if(e===i)throw new Error("x0 is equal with x1!!!");if(t===n)return function(){return t};var a=(t-n)/(e-i),o=(n*e-t*i)/(e-i);return function(e){return a*e+o}}function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,s=0,l=0,h=0,m=0,V=0;o>s;s++){l=~~e.time[s],m=e.value[s]/2,s===o-1?(h=l+a,V=0):(h=~~e.time[s+1],V=e.value[s+1]/2),r=i(l,m,h,V);for(var U=l;h>U;U++)e.xpx.push(U-n),e.ypx.push(r(U))}e.xpx.push(h-n),e.ypx.push(V)}function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Math.max(a,n+e[t.xpx[r]]);for(r=0;o>r;r++)n=i(t,r),e[t.xpx[r]]=a+n;return a}return e}),i("echarts/chart/venn",["require","./base","zrender/shape/Text","zrender/shape/Circle","zrender/shape/Path","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Circle"),o=e("zrender/shape/Path"),r=e("../config");r.venn={zlevel:0,z:1,calculable:!1};var s=e("../util/ecData"),l=e("zrender/tool/util");return t.prototype={type:r.CHART_TYPE_VENN,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._vennDataCounter=0;for(var e=this.series,t=this.component.legend,i=0;ia[1].value?(t=this.zr.getHeight()/3,i=t*Math.sqrt(a[1].value)/Math.sqrt(a[0].value)):(i=this.zr.getHeight()/3,t=i*Math.sqrt(a[0].value)/Math.sqrt(a[1].value));var o=this.zr.getWidth()/2-t,r=(t+i)/2*Math.sqrt(a[2].value)/Math.sqrt((a[0].value+a[1].value)/2),s=t+i;0!==a[2].value&&(s=this._getCoincideLength(a[0].value,a[1].value,a[2].value,t,i,r,Math.abs(t-i),t+i));var l=o+s,h=this.zr.getHeight()/2;if(this._buildItem(e,0,a[0],o,h,t),this._buildItem(e,1,a[1],l,h,i),0!==a[2].value&&a[2].value!==a[0].value&&a[2].value!==a[1].value){var m=(t*t-i*i)/(2*s)+s/2,V=s/2-(t*t-i*i)/(2*s),U=Math.sqrt(t*t-m*m),d=0,p=0;a[0].value>a[1].value&&o+m>l&&(p=1),a[0].valuel&&(d=1),this._buildCoincideItem(e,2,a[2],o+m,h-U,h+U,t,i,d,p)}},_getCoincideLength:function(e,t,i,n,a,o,r,s){var l=(n*n-a*a)/(2*o)+o/2,h=o/2-(n*n-a*a)/(2*o),m=Math.acos(l/n),V=Math.acos(h/a),U=n*n*Math.PI,d=m*n*n-l*n*Math.sin(m)+V*a*a-h*a*Math.sin(V),p=d/U,c=i/e,u=Math.abs(p/c);return u>.999&&1.001>u?o:.999>=u?(s=o,o=(o+r)/2,this._getCoincideLength(e,t,i,n,a,o,r,s)):(r=o,o=(o+s)/2,this._getCoincideLength(e,t,i,n,a,o,r,s))},_buildItem:function(e,t,i,n,a,o){var r=this.series,l=r[e],h=this.getCircle(e,t,i,n,a,o);if(s.pack(h,l,e,i,t,i.name),this.shapeList.push(h),l.itemStyle.normal.label.show){var m=this.getLabel(e,t,i,n,a,o);s.pack(m,l,e,l.data[t],t,l.data[t].name),this.shapeList.push(m)}},_buildCoincideItem:function(e,t,i,n,a,r,l,h,m,V){var U=this.series,d=U[e],p=[i,d],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=c.color||this.zr.getColor(t),g=u.color||this.zr.getColor(t),b="M"+n+","+a+"A"+l+","+l+",0,"+m+",1,"+n+","+r+"A"+h+","+h+",0,"+V+",1,"+n+","+a,f={color:y,path:b},k={zlevel:d.zlevel,z:d.z,style:f,highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};k=new o(k),k.buildPathArray&&(k.style.pathArray=k.buildPathArray(f.path)),s.pack(k,U[e],0,i,t,i.name),this.shapeList.push(k)},getCircle:function(e,t,i,n,o,r){var s=this.series[e],l=[i,s],h=this.deepMerge(l,"itemStyle.normal")||{},m=this.deepMerge(l,"itemStyle.emphasis")||{},V=h.color||this.zr.getColor(t),U=m.color||this.zr.getColor(t),d={zlevel:s.zlevel,z:s.z,clickable:!0,style:{x:n,y:o,r:r,brushType:"fill",opacity:1,color:V},highlightStyle:{color:U,lineWidth:m.borderWidth,strokeColor:m.borderColor}};return this.deepQuery([i,s,this.option],"calculable")&&(this.setCalculable(d),d.draggable=!0),new a(d)},getLabel:function(e,t,i,a,o,r){var s=this.series[e],l=s.itemStyle,h=[i,s],m=this.deepMerge(h,"itemStyle.normal")||{},V="normal",U=l[V].label,d=U.textStyle||{},p=this.getLabelText(t,i,V),c=this.getFont(d),u=m.color||this.zr.getColor(t),y=d.fontSize||12,g={zlevel:s.zlevel,z:s.z,style:{x:a,y:o-r-y,color:d.color||u,text:p,textFont:c,textAlign:"center"}};return new n(g)},getLabelText:function(e,t,i){var n=this.series,a=n[0],o=this.deepQuery([t,a],"itemStyle."+i+".label.formatter");return o?"function"==typeof o?o(a.name,t.name,t.value):"string"==typeof o?(o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),o=o.replace("{a0}",a.name).replace("{b0}",t.name).replace("{c0}",t.value)):void 0:t.name},refresh:function(e){e&&(this.option=e,this.series=e.series),this._buildShape()}},l.inherits(t,i),e("../chart").define("venn",t),t}),i("echarts/chart/treemap",["require","./base","zrender/tool/area","zrender/shape/Rectangle","zrender/shape/Text","zrender/shape/Line","../layout/TreeMap","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;r._onclick=function(e){return r.__onclick(e)},r.zr.on(V.EVENT.CLICK,r._onclick)}var i=e("./base"),n=e("zrender/tool/area"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Text"),r=e("zrender/shape/Line"),s=e("../layout/TreeMap"),l=e("../data/Tree"),h=e("../config");h.treemap={zlevel:0,z:1,calculable:!1,clickable:!0,center:["50%","50%"],size:["80%","80%"],root:"",itemStyle:{normal:{label:{ -show:!0,x:5,y:12,textStyle:{align:"left",color:"#000",fontFamily:"Arial",fontSize:13,fontStyle:"normal",fontWeight:"normal"}},breadcrumb:{show:!0,textStyle:{}},borderWidth:1,borderColor:"#ccc",childBorderWidth:1,childBorderColor:"#ccc"},emphasis:{}}};var m=e("../util/ecData"),V=e("zrender/config"),U=(e("zrender/tool/event"),e("zrender/tool/util")),d=e("zrender/tool/color");return t.prototype={type:h.CHART_TYPE_TREEMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series),this._treesMap={};for(var t=this.series,i=this.component.legend,n=0;nt.width||e.normal.label.y+U>t.height)&&(h=""):h="",e.emphasis.label.show?(s.x+u>t.width||s.y+y>t.height)&&(p=""):p="";var g={style:{textX:t.x+e.normal.label.x,textY:t.y+e.normal.label.y,text:h,textPosition:"specific",textColor:o.color,textFont:m},highlightStyle:{textX:t.x+e.emphasis.label.x,textY:t.y+e.emphasis.label.y,text:p,textColor:s.color,textPosition:"specific"}};return g},getLabelText:function(e,t,i){return i?"function"==typeof i?i.call(this.myChart,e,t):"string"==typeof i?(i=i.replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{b0}",e).replace("{c0}",t)):void 0:e},_buildChildrenTreemap:function(e,t,i,n){for(var a=i.width*i.height,o=0,r=[],l=0;l ":"")},V),clickable:!0,highlightStyle:p});m.set(u,"seriesIndex",t),m.set(u,"name",a[c]),i+=u.getRect(u.style).width,this.shapeList.push(u)}},__onclick:function(e){var t=e.target;if(t){var i=m.get(t,"seriesIndex"),n=m.get(t,"name"),a=this._treesMap[i],o=a.getNodeById(n);o&&o.children.length&&this._buildTreemap(o,i)}}},U.inherits(t,i),e("../chart").define("treemap",t),t}),i("echarts/layout/TreeMap",["require"],function(){function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height}return e.prototype.run=function(e){var t=[];return this._squarify(e,{x:this.x,y:this.y,width:this.width,height:this.height},t),t},e.prototype._squarify=function(e,t,i){var n="VERTICAL",a=t.width,o=t.height;t.widthl;l++)r[s].y+=r[l].height}var h={};if("VERTICAL"==n){for(var m=0;ml;l++){var h=i*e[l]/o;a.push({width:s,height:h})}return a},e.prototype._isFirstBetter=function(e,t){var i=e[0].height/e[0].width;i=i>1?1/i:i;var n=t[0].height/t[0].width;return n=n>1?1/n:n,Math.abs(i-1)<=Math.abs(n-1)?!0:!1},e}),i("echarts/data/Tree",["require","zrender/tool/util"],function(e){function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],this.parent=null,this.data=t||null}function i(e){this.root=new t(e)}var n=e("zrender/tool/util");return t.prototype.add=function(e){var t=this.children;e.parent!==this&&(t.push(e),e.parent=this)},t.prototype.remove=function(e){var t=this.children,i=n.indexOf(t,e);i>=0&&(t.splice(i,1),e.parent=null)},t.prototype.traverse=function(e,t){e.call(t,this);for(var i=0;it&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t0&&this._buildLink(i,e)},this);var n=e.roam===!0||"move"===e.roam,a=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:n,zoomable:a}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(m.EFFECT_ZLEVEL,{panable:n,zoomable:a}),this.addShapeList()},_buildItem:function(e,t,i){var n=[e.data,t],r=this.deepQuery(n,"symbol"),s=this.deepMerge(n,"itemStyle.normal")||{},l=this.deepMerge(n,"itemStyle.emphasis")||{},h=s.color||this.zr.getColor(),m=l.color||this.zr.getColor(),U=-e.layout.angle||0;e.id===this.tree.root.id&&(U=0);var d="right";Math.abs(U)>=Math.PI/2&&Math.abs(U)<3*Math.PI/2&&(U+=Math.PI,d="left");var p=[U,e.layout.position[0],e.layout.position[1]],c=new a({zlevel:this.getZlevelBase(),z:this.getZBase()+1,rotation:p,clickable:this.deepQuery(n,"clickable"),style:{x:e.layout.position[0]-.5*e.layout.width,y:e.layout.position[1]-.5*e.layout.height,width:e.layout.width,height:e.layout.height,iconType:r,color:h,brushType:"both",lineWidth:s.borderWidth,strokeColor:s.borderColor},highlightStyle:{color:m,lineWidth:l.borderWidth,strokeColor:l.borderColor}});c.style.iconType.match("image")&&(c.style.image=c.style.iconType.replace(new RegExp("^image:\\/\\/"),""),c=new o({rotation:p,style:c.style,highlightStyle:c.highlightStyle,clickable:c.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(n,"itemStyle.normal.label.show")&&(c.style.text=null==e.data.label?e.id:e.data.label,c.style.textPosition=this.deepQuery(n,"itemStyle.normal.label.position"),"radial"===t.orient&&"inside"!==c.style.textPosition&&(c.style.textPosition=d),c.style.textColor=this.deepQuery(n,"itemStyle.normal.label.textStyle.color"),c.style.textFont=this.getFont(this.deepQuery(n,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(n,"itemStyle.emphasis.label.show")&&(c.highlightStyle.textPosition=this.deepQuery(n,"itemStyle.emphasis.label.position"),c.highlightStyle.textColor=this.deepQuery(n,"itemStyle.emphasis.label.textStyle.color"),c.highlightStyle.textFont=this.getFont(this.deepQuery(n,"itemStyle.emphasis.label.textStyle")||{})),V.pack(c,t,i,e.data,0,e.id),this.shapeList.push(c)},_buildLink:function(e,t){var i=t.itemStyle.normal.lineStyle;if("broken"===i.type)return void this._buildBrokenLine(e,i,t);for(var n=0;nr&&(t=r),r>n&&(n=r)}e.layout.position[0]=e.children.length>0?(t+n)/2:0;var s=this._layerOffsets[e.depth]||0;if(s>e.layout.position[0]){var l=s-e.layout.position[0];this._shiftSubtree(e,l);for(var a=e.depth+1;ai;i++)this._buildTextShape(e[i],0,i);this.addShapeList()},_buildTextShape:function(e,t,i){var a=this.series,o=a[t],s=o.name||"",h=o.data[i],m=[h,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,h)||U,u=this.getItemStyleColor(p.color,t,i,h)||("string"==typeof c?l.lift(c,-.2):c),y=new n({zlevel:o.zlevel,z:o.z,hoverable:!0,clickable:this.deepQuery(m,"clickable"),style:{x:0,y:0,text:e.text,color:c,textFont:[e.style,e.weight,e.size+"px",e.font].join(" "),textBaseline:"alphabetic",textAlign:"center"},highlightStyle:{brushType:p.borderWidth?"both":"fill",color:u,lineWidth:p.borderWidth||0,strokeColor:p.borderColor},position:[e.x,e.y],rotation:[-e.rotate/180*Math.PI,0,0]});r.pack(y,o,t,h,i,h.name),this.shapeList.push(y)}},s.inherits(t,i),e("../chart").define("wordCloud",t),t}),i("echarts/layout/WordCloud",["require","../layout/WordCloudRectZero","zrender/tool/util"],function(e){function t(e){this._init(e)}var i=e("../layout/WordCloudRectZero"),n=e("zrender/tool/util");return t.prototype={start:function(){function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,a,o,U.autoSizeCal.minSize),V.timer&&clearInterval(V.timer),V.timer=setInterval(t,0),t()}function t(){for(var e,t=+new Date,i=m.length;+new Date-t>1,e.y=d[1]>>1,p._cloudSprite(e,m,s),e.hasText&&p._place(n,e,h)&&(l.push(e),e.x-=d[0]>>1,e.y-=d[1]>>1);s>=i&&(p.stop(),p._fixTagPosition(l),V.endcallback(l))}var n=null,a=0,o=0,r=0,s=-1,l=[],h=null,m=this.wordsdata,V=this.defaultOption,U=V.wordletype,d=V.size,p=this,c=new i({type:U.type,width:d[0],height:d[1]});return c.calculate(function(t){n=t.initarr,a=t.maxWit,o=t.maxHit,r=t.area,h=t.imgboard,e()},this),this},_fixTagPosition:function(e){for(var t=this.defaultOption.center,i=0,n=e.length;n>i;i++)e[i].x+=t[0],e[i].y+=t[1]},stop:function(){return this.defaultOption.timer&&(clearInterval(this.defaultOption.timer),this.defaultOption.timer=null),this},end:function(e){return e&&(this.defaultOption.endcallback=e),this},_init:function(e){this.defaultOption={},this._initProperty(e),this._initMethod(e),this._initCanvas(),this._initData(e.data)},_initData:function(e){var t=this,i=t.defaultOption;this.wordsdata=e.map(function(e,n){return e.text=i.text.call(t,e,n),e.font=i.font.call(t,e,n),e.style=i.fontStyle.call(t,e,n),e.weight=i.fontWeight.call(t,e,n),e.rotate=i.rotate.call(t,e,n),e.size=~~i.fontSize.call(t,e,n),e.padding=i.padding.call(t,e,n),e}).sort(function(e,t){return t.value-e.value})},_initMethod:function(e){function t(e){return e.name}function i(){return"sans-serif"}function n(){return"normal"}function a(e){return e.value}function o(){return 0}function r(e){return function(){return e[Math.round(Math.random()*(e.length-1))]}}function s(){return 0}function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.cos(e),e*Math.sin(e)]}}function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e?-1:1;switch(Math.sqrt(1+4*o*e)-o&3){case 0:n+=i;break;case 1:a+=t;break;case 2:n-=i;break;default:a-=t}return[n,a]}}function m(e){return"function"==typeof e?e:function(){return e}}var V=this.defaultOption;V.text=e.text?m(e.text):t,V.font=e.font?m(e.font):i,V.fontSize=e.fontSize?m(e.fontSize):a,V.fontStyle=e.fontStyle?m(e.fontStyle):n,V.fontWeight=e.fontWeight?m(e.fontWeight):n,V.rotate=e.rotate?r(e.rotate):o,V.padding=e.padding?m(e.padding):s,V.center=e.center,V.spiral=l,V.endcallback=function(){},V.rectangularSpiral=h,V.archimedeanSpiral=l},_initProperty:function(e){var t=this.defaultOption;t.size=e.size||[256,256],t.wordletype=e.wordletype,t.words=e.words||[],t.timeInterval=1/0,t.timer=null,t.spirals={archimedean:t.archimedeanSpiral,rectangular:t.rectangularSpiral},n.merge(t,{size:[256,256],wordletype:{type:"RECT",areaPresent:.058,autoSizeCal:{enable:!0,minSize:12}}})},_initCanvas:function(){var e,t=Math.PI/180,i=64,n=2048,a=1;"undefined"!=typeof document?(e=document.createElement("canvas"),e.width=1,e.height=1,a=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2),e.width=(i<<5)/a,e.height=n/a):e=new Canvas(i<<5,n);var o=e.getContext("2d");o.fillStyle=o.strokeStyle="red",o.textAlign="center",this.defaultOption.c=o,this.defaultOption.cw=i,this.defaultOption.ch=n,this.defaultOption.ratio=a,this.defaultOption.cloudRadians=t},_cloudSprite:function(e,t,i){if(!e.sprite){var n=this.defaultOption.cw,a=this.defaultOption.ch,o=this.defaultOption.c,r=this.defaultOption.ratio,s=this.defaultOption.cloudRadians;o.clearRect(0,0,(n<<5)/r,a/r);var l=0,h=0,m=0,V=t.length;for(--i;++i>5<<5,d=~~Math.max(Math.abs(y+g),Math.abs(y-g))}else U=U+31>>5<<5;if(d>m&&(m=d),l+U>=n<<5&&(l=0,h+=m,m=0),h+d>=a)break;o.translate((l+(U>>1))/r,(h+(d>>1))/r),e.rotate&&o.rotate(e.rotate*s),o.fillText(e.text,0,0),e.padding&&(o.lineWidth=2*e.padding,o.strokeText(e.text,0,0)),o.restore(),e.width=U,e.height=d,e.xoff=l,e.yoff=h,e.x1=U>>1,e.y1=d>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,l+=U}for(var f=o.getImageData(0,0,(n<<5)/r,a/r).data,k=[];--i>=0;)if(e=t[i],e.hasText){for(var U=e.width,x=U>>5,d=e.y1-e.y0,_=0;d*x>_;_++)k[_]=0;if(l=e.xoff,null==l)return;h=e.yoff;for(var L=0,W=-1,X=0;d>X;X++){for(var _=0;U>_;_++){var v=x*X+(_>>5),w=f[(h+X)*(n<<5)+(l+_)<<2]?1<<31-_%32:0;k[v]|=w,L|=w}L?W=X:(e.y0++,d--,X--,h++)}e.y1=e.y0+W,e.sprite=k.slice(0,(e.y1-e.y0)*x)}}},_place:function(e,t,i){function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s=127&r,l=32-s,h=e.y1-e.y0,m=(e.y+e.y0)*i+(r>>5),V=0;h>V;V++){n=0;for(var U=0;o>=U;U++)if((n<U?(n=a[V*o+U])>>>s:0))&t[m+U])return!0;m+=i}return!1}function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&&e.x<=t.row[e.y].end&&e.y>=t.cloumn[e.x].start&&e.y<=t.cloumn[e.x].end}for(var o,r,s,l=this.defaultOption.size,h=([{x:0,y:0},{x:l[0],y:l[1]}],t.x),m=t.y,V=Math.sqrt(l[0]*l[0]+l[1]*l[1]),U=this.defaultOption.spiral(l),d=Math.random()<.5?1:-1,p=-d;(o=U(p+=d))&&(r=~~o[0],s=~~o[1],!(Math.min(r,s)>V));)if(t.x=h+r,t.y=m+s,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>l[0]||t.y+t.y1>l[1])&&!n(t,e,l[0])&&a(t,i)){for(var c,u=t.sprite,y=t.width>>5,g=l[0]>>5,b=t.x-(y<<4),f=127&b,k=32-f,x=t.y1-t.y0,_=(t.y+t.y0)*g+(b>>5),L=0;x>L;L++){c=0;for(var W=0;y>=W;W++)e[_+W]|=c<W?(c=u[L*y+W])>>>f:0);_+=g}return delete t.sprite,!0}return!1},_autoCalTextSize:function(e,t,i,n,a){function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+" "+e.weight+" "+~~((e.size+1)/u)+"px "+e.font;var t=c.measureText(e.text+"m").width*u,r=e.size<<1;t=t+31>>5<<5,c.restore(),e.aw=t,e.ah=r;var s,l,h;if(e.rotate){var m=Math.sin(e.rotate*y),V=Math.cos(e.rotate*y),g=t*V,b=t*m,f=r*V,k=r*m;l=Math.max(Math.abs(g+k),Math.abs(g-k))+31>>5<<5,h=~~Math.max(Math.abs(b+f),Math.abs(b-f))}return e.size<=U||e.rotate&&t*r<=e.area&&i>=l&&n>=h||t*r<=e.area&&i>=t&&n>=r?void(e.area=t*r):(s=e.rotate&&l>i&&h>n?Math.min(i/l,n/h):t>i||r>n?Math.min(i/t,n/r):Math.sqrt(e.area/(e.aw*e.ah)),e.size=~~(s*e.size),e.sizel?l:V:l,s.area=t*s.areapre,s.totalarea=t,o(s)}},t}),i("echarts/layout/WordCloudRectZero",["require"],function(){function e(e){this.defaultOption={type:"RECT"},this._init(e)}return e.prototype={RECT:"_calculateRect",_init:function(e){this._initOption(e),this._initCanvas()},_initOption:function(e){for(k in e)this.defaultOption[k]=e[k]},_initCanvas:function(){var e=document.createElement("canvas");e.width=1,e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);if(e.width=this.defaultOption.width,e.height=this.defaultOption.height,e.getContext)var i=e.getContext("2d");this.canvas=e,this.ctx=i,this.ratio=t},calculate:function(e,t){var i=this.defaultOption.type,n=this[i];this[n].call(this,e,t)},_calculateReturn:function(e,t,i){t.call(i,e)},_calculateRect:function(e,t){var i={},n=this.defaultOption.width>>5<<5,a=this.defaultOption.height;i.initarr=this._rectZeroArray(n*a),i.area=n*a,i.maxHit=a,i.maxWit=n,i.imgboard=this._rectBoard(n,a),this._calculateReturn(i,e,t)},_rectBoard:function(e,t){for(var i=[],n=0;t>n;n++)i.push({y:n,start:0,end:e});for(var a=[],n=0;e>n;n++)a.push({x:n,start:0,end:t});return{row:i,cloumn:a}},_rectZeroArray:function(e){for(var t=[],i=e,n=-1;++ni;++i)if(e[i].type===a.CHART_TYPE_HEATMAP){e[i]=this.reformOption(e[i]);var o=new n(e[i]),s=o.getCanvas(e[i].data,this.zr.getWidth(),this.zr.getHeight()),l=new r({position:[0,0],scale:[1,1],hoverable:this.option.hoverable,style:{x:0,y:0,image:s,width:s.width,height:s.height}});this.shapeList.push(l)}this.addShapeList()}},o.inherits(t,i),e("../chart").define("heatmap",t),t});var n=t("zrender");n.tool={color:t("zrender/tool/color"),math:t("zrender/tool/math"),util:t("zrender/tool/util"),vector:t("zrender/tool/vector"),area:t("zrender/tool/area"),event:t("zrender/tool/event")},n.animation={Animation:t("zrender/animation/Animation"),Cip:t("zrender/animation/Clip"),easing:t("zrender/animation/easing")};var a=t("echarts");a.config=t("echarts/config"),a.util={mapData:{params:t("echarts/util/mapData/params")}},t("echarts/chart/line"),t("echarts/chart/bar"),t("echarts/chart/scatter"),t("echarts/chart/k"),t("echarts/chart/pie"),t("echarts/chart/radar"),t("echarts/chart/chord"),t("echarts/chart/force"),t("echarts/chart/map"),t("echarts/chart/gauge"),t("echarts/chart/funnel"),t("echarts/chart/eventRiver"),t("echarts/chart/venn"),t("echarts/chart/treemap"),t("echarts/chart/tree"),t("echarts/chart/wordCloud"),t("echarts/chart/heatmap"),e.echarts=a,e.zrender=n}(window); \ No newline at end of file diff --git a/static/js/echarts/echarts.js b/static/js/echarts/echarts.js deleted file mode 100644 index 5cb56605a..000000000 --- a/static/js/echarts/echarts.js +++ /dev/null @@ -1,20 +0,0 @@ -var define,require,esl;!function(e){function t(e){m(e,J)||(O[e]=1)}function i(e,t){function i(e){0===e.indexOf(".")&&a.push(e)}var a=[];if("string"==typeof e?i(e):C(e,function(e){i(e)}),a.length>0)throw new Error("[REQUIRE_FATAL]Relative ID is not allowed in global require: "+a.join(", "));var o=N.waitSeconds;return o&&e instanceof Array&&(E&&clearTimeout(E),E=setTimeout(n,1e3*o)),D(e,t)}function n(){function e(r,s){if(!o[r]&&!m(r,J)){o[r]=1,m(r,F)||n[r]||(n[r]=1,t.push(r));var l=z[r];l?s&&(n[r]||(n[r]=1,t.push(r)),C(l.depMs,function(t){e(t.absId,t.hard)})):a[r]||(a[r]=1,i.push(r))}}var t=[],i=[],n={},a={},o={};for(var r in O)e(r,1);if(t.length||i.length)throw new Error("[MODULE_TIMEOUT]Hang( "+(t.join(", ")||"none")+" ) Miss( "+(i.join(", ")||"none")+" )")}function a(e){C(B,function(t){s(e,t.deps,t.factory)}),B.length=0}function o(e,t,i){if(null==i&&(null==t?(i=e,e=null):(i=t,t=null,e instanceof Array&&(t=e,e=null))),null!=i){var n=window.opera;if(!e&&document.attachEvent&&(!n||"[object Opera]"!==n.toString())){var a=I();e=a&&a.getAttribute("data-require-id")}e?s(e,t,i):B[0]={deps:t,factory:i}}}function r(){var e=N.config[this.id];return e&&"object"==typeof e?e:{}}function s(e,t,i){z[e]||(z[e]={id:e,depsDec:t,deps:t||["require","exports","module"],factoryDeps:[],factory:i,exports:{},config:r,state:A,require:v(e),depMs:[],depMkv:{},depRs:[]})}function l(e){var t=z[e];if(t&&!m(e,M)){var i=t.deps,n=t.factory,a=0;"function"==typeof n&&(a=Math.min(n.length,i.length),!t.depsDec&&n.toString().replace(/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm,"").replace(/require\(\s*(['"'])([^'"]+)\1\s*\)/g,function(e,t,n){i.push(n)}));var o=[],r=[];C(i,function(i,n){var s,l,h=W(i),d=L(h.mod,e);d&&!P[d]?(h.res&&(l={id:i,mod:d,res:h.res},r.push(i),t.depRs.push(l)),s=t.depMkv[d],s||(s={id:h.mod,absId:d,hard:a>n},t.depMs.push(s),t.depMkv[d]=s,o.push(d))):s={absId:d},a>n&&t.factoryDeps.push(l||s)}),t.state=M,c(e),g(o),r.length&&t.require(r,function(){C(t.depRs,function(t){t.absId||(t.absId=L(t.id,e))}),h()})}}function h(){for(var e in O)l(e),d(e),p(e)}function d(e){function t(e){if(l(e),!m(e,M))return!1;if(m(e,F)||i[e])return!0;i[e]=1;var n=z[e],a=!0;return C(n.depMs,function(e){return a=t(e.absId)}),a&&C(n.depRs,function(e){return a=!!e.absId}),a&&(n.state=F),a}var i={};t(e)}function c(t){function i(){if(!n&&a.state===F){n=1;var i=1;if(C(a.factoryDeps,function(e){var t=e.absId;return P[t]?void 0:(p(t),i=m(t,J))}),i){try{var o=a.factory,r="function"==typeof o?o.apply(e,u(a.factoryDeps,{require:a.require,exports:a.exports,module:a})):o;null!=r&&(a.exports=r),a.invokeFactory=null}catch(s){if(/^\[MODULE_MISS\]"([^"]+)/.test(s.message)){var l=a.depMkv[RegExp.$1];return l&&(l.hard=1),void(n=0)}throw s}U(t)}}}var n,a=z[t];a.invokeFactory=i}function m(e,t){return z[e]&&z[e].state>=t}function p(e){var t=z[e];t&&t.invokeFactory&&t.invokeFactory()}function u(e,t){var i=[];return C(e,function(e,n){"object"==typeof e&&(e=e.absId),i[n]=t[e]||z[e].exports}),i}function V(e,t){if(m(e,J))return void t();var i=H[e];i||(i=H[e]=[]),i.push(t)}function U(e){var t=z[e];t.state=J,delete O[e];for(var i=H[e]||[],n=i.length;n--;)i[n]();i.length=0,H[e]=null}function g(t,i,n){function a(){if("function"==typeof i&&!o){var n=1;C(t,function(e){return P[e]?void 0:n=!!m(e,J)}),n&&(o=1,i.apply(e,u(t,P)))}}var o=0;C(t,function(e){P[e]||m(e,J)||(V(e,a),(e.indexOf("!")>0?y:f)(e,n))}),a()}function f(t){function i(){var e=Q[t];S(e||t,n)}function n(){if(r){var i;"function"==typeof r.init&&(i=r.init.apply(e,u(s,P))),null==i&&r.exports&&(i=e,C(r.exports.split("."),function(e){return i=i[e],!!i})),o(t,s,i||{})}else a(t);h()}if(!R[t]&&!z[t]){R[t]=1;var r=N.shim[t];r instanceof Array&&(N.shim[t]=r={deps:r});var s=r&&(r.deps||[]);s?(C(s,function(e){N.shim[e]||(N.shim[e]={})}),D(s,i)):i()}}function y(e,t){function i(t){l.exports=t||!0,U(e)}function n(n){var a=t?z[t].require:D;n.load(s.res,a,i,r.call({id:e}))}if(!z[e]){var o=Q[e];if(o)return void f(o);var s=W(e),l={id:e,state:M};z[e]=l,i.fromText=function(e,t){new Function(t)(),a(e)},n(D(s.mod))}}function b(e,t){var i=X(e,1,t);return i.sort(T),i}function _(){function e(e){Q[e]=t}N.baseUrl=N.baseUrl.replace(/\/$/,"")+"/",G=b(N.paths),Z=b(N.map,1),C(Z,function(e){e.v=b(e.v)}),Y=[],C(N.packages,function(e){var t=e;"string"==typeof e&&(t={name:e.split("/")[0],location:e,main:"main"}),t.location=t.location||t.name,t.main=(t.main||"main").replace(/\.js$/i,""),t.reg=K(t.name),Y.push(t)}),Y.sort(T),q=b(N.urlArgs,1),Q={};for(var t in N.bundles)C(N.bundles[t],e)}function x(e,t,i){C(t,function(t){return t.reg.test(e)?(i(t.v,t.k,t),!1):void 0})}function k(e){var t=/(\.[a-z0-9]+)$/i,i=/(\?[^#]*)$/,n="",a=e,o="";i.test(e)&&(o=RegExp.$1,e=e.replace(i,"")),t.test(e)&&(n=RegExp.$1,a=e.replace(t,""));var r,s=a;return x(a,G,function(e,t){s=s.replace(t,e),r=1}),r||x(a,Y,function(e,t,i){s=s.replace(i.name,i.location)}),/^([a-z]{2,10}:\/)?\//i.test(s)||(s=N.baseUrl+s),s+=n+o,x(a,q,function(e){s+=(s.indexOf("?")>0?"&":"?")+e}),s}function v(e){function i(i,a){if("string"==typeof i){if(!n[i]){var o=L(i,e);if(p(o),!m(o,J))throw new Error('[MODULE_MISS]"'+o+'" is not exists!');n[i]=z[o].exports}return n[i]}if(i instanceof Array){var r=[],s=[];C(i,function(i,n){var a=W(i),o=L(a.mod,e),l=a.res,h=o;if(l){var d=o+"!"+l;0!==l.indexOf(".")&&Q[d]?o=h=d:h=null}s[n]=h,t(o),r.push(o)}),g(r,function(){C(s,function(n,a){null==n&&(n=s[a]=L(i[a],e),t(n))}),g(s,a,e),h()},e),h()}}var n={};return i.toUrl=function(t){return k(L(t,e))},i}function L(e,t){if(!e)return"";t=t||"";var i=W(e);if(!i)return e;var n=i.res,a=w(i.mod,t);if(C(Y,function(e){var t=e.name;return t===a?(a=t+"/"+e.main,!1):void 0}),x(t,Z,function(e){x(a,e,function(e,t){a=a.replace(t,e)})}),n){var o=m(a,J)&&D(a);n=o&&o.normalize?o.normalize(n,function(e){return L(e,t)}):L(n,t),a+="!"+n}return a}function w(e,t){if(0===e.indexOf(".")){var i=t.split("/"),n=e.split("/"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++)switch(n[l]){case"..":if(!(a>r))break e;r++,s++;break;case".":s++;break;default:break e}return i.length=a-r,n=n.slice(s),i.concat(n).join("/")}return e}function W(e){var t=e.split("!");return t[0]?{mod:t[0],res:t[1]}:void 0}function X(e,t,i){var n=[];for(var a in e)if(e.hasOwnProperty(a)){var o={k:a,v:e[a]};n.push(o),t&&(o.reg="*"===a&&i?/^/:K(a))}return n}function I(){if(j)return j;if($&&"interactive"===$.readyState)return $;for(var e=document.getElementsByTagName("script"),t=e.length;t--;){var i=e[t];if("interactive"===i.readyState)return $=i,i}}function S(e,t){function i(){var e=n.readyState;("undefined"==typeof e||/^(loaded|complete)$/.test(e))&&(n.onload=n.onreadystatechange=null,n=null,t())}var n=document.createElement("script");n.setAttribute("data-require-id",e),n.src=k(e+".js"),n.async=!0,n.readyState?n.onreadystatechange=i:n.onload=i,j=n,te?ee.insertBefore(n,te):ee.appendChild(n),j=null}function K(e){return new RegExp("^"+e+"(/|$)")}function C(e,t){if(e instanceof Array)for(var i=0,n=e.length;n>i&&t(e[i],i)!==!1;i++);}function T(e,t){var i=e.k||e.name,n=t.k||t.name;return"*"===n?-1:"*"===i?1:n.length-i.length}var E,z={},A=1,M=2,F=3,J=4,O={},P={require:i,exports:1,module:1},D=v(),N={baseUrl:"./",paths:{},config:{},map:{},packages:[],shim:{},waitSeconds:0,bundles:{},urlArgs:{}};i.version="2.0.2",i.loader="esl",i.toUrl=D.toUrl;var B=[];o.amd={};var H={},R={};i.config=function(e){if(e){for(var t in N){var i=e[t],n=N[t];if(i)if("urlArgs"===t&&"string"==typeof i)N.urlArgs["*"]=i;else if(n instanceof Array)n.push.apply(n,i);else if("object"==typeof n)for(var a in i)n[a]=i[a];else N[t]=i}_()}},_();var G,Y,Z,Q,q,j,$,ee=document.getElementsByTagName("head")[0],te=document.getElementsByTagName("base")[0];te&&(ee=te.parentNode),define||(define=o,require||(require=i),esl=i)}(this),define("echarts",["echarts/echarts"],function(e){return e}),define("echarts/echarts",["require","./config","zrender/tool/util","zrender/tool/event","zrender/tool/env","zrender","zrender/config","./chart/island","./component/toolbox","./component","./component/title","./component/tooltip","./component/legend","./util/ecData","./chart","zrender/tool/color","./component/timeline","zrender/shape/Image","zrender/loadingEffect/Bar","zrender/loadingEffect/Bubble","zrender/loadingEffect/DynamicLine","zrender/loadingEffect/Ring","zrender/loadingEffect/Spin","zrender/loadingEffect/Whirling","./theme/macarons","./theme/infographic"],function(e){function t(){r.Dispatcher.call(this)}function i(e){e.innerHTML="",this._themeConfig={},this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];"function"==typeof s[t]&&s[t](i,n,a)}}var a=e("./config"),o=e("zrender/tool/util"),r=e("zrender/tool/event"),s={},l=e("zrender/tool/env").canvasSupported,h=new Date-0,d={},c="_echarts_instance_";s.version="2.2.7",s.dependencies={zrender:"2.1.1"},s.init=function(t,n){var a=e("zrender");a.version.replace(".","")-0r;r++){var l=p[r],h=m[l];o[h]="_on"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var d=e("./chart/island");this._island=new d(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var c=e("./component/toolbox");this._toolbox=new c(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var u=e("./component");u.define("title",e("./component/title")),u.define("tooltip",e("./component/tooltip")),u.define("legend",e("./component/legend")),(0===i.getWidth()||0===i.getHeight())&&console.error("Dom’s width & height should be ready before init.")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger("mousemove",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,"onclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,"ondblclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,"ondragstart",e)},_ondragenter:function(e){n(this,"ondragenter",e)},_ondragover:function(e){n(this,"ondragover",e)},_ondragleave:function(e){n(this,"ondragleave",e)},_ondrop:function(e){n(this,"ondrop",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,"ondragend",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,"onlegendSelected",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,"ondataZoom",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,"ondataRange",e,this._status),this._status.needRefresh&&this._zr.refreshNextFrame()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,"ontooltipHover",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e("./util/ecData"),n=i.get(t,"seriesIndex"),a=i.get(t,"dataIndex");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,"series")||{}).name,dataIndex:a,data:i.get(t,"data"),name:i.get(t,"name"),value:i.get(t,"value"),special:i.get(t,"special")}}},_noDataCheck:function(e){for(var t=e.series,i=0,n=t.length;n>i;i++)if(t[i].type==a.CHART_TYPE_MAP||t[i].data&&t[i].data.length>0||t[i].markPoint&&t[i].markPoint.data&&t[i].markPoint.data.length>0||t[i].markLine&&t[i].markLine.data&&t[i].markLine.data.length>0||t[i].nodes&&t[i].nodes.length>0||t[i].links&&t[i].links.length>0||t[i].matrix&&t[i].matrix.length>0||t[i].eventList&&t[i].eventList.length>0)return!1;var o=this._option&&this._option.noDataLoadingOption||this._themeConfig.noDataLoadingOption||a.noDataLoadingOption||{text:this._option&&this._option.noDataText||this._themeConfig.noDataText||a.noDataText,effect:this._option&&this._option.noDataEffect||this._themeConfig.noDataEffect||a.noDataEffect};return this.clear(),this.showLoading(o),!0},_render:function(t){if(this._mergeGlobalConifg(t),!this._noDataCheck(t)){var i=t.backgroundColor;if(i)if(l||-1==i.indexOf("rgba"))this.dom.style.backgroundColor=i;else{var n=i.split(",");this.dom.style.filter="alpha(opacity="+100*n[3].substring(0,n[3].lastIndexOf(")"))+")",n.length=3,n[0]=n[0].replace("a",""),this.dom.style.backgroundColor=n.join(",")+")"}this._zr.clearAnimation(),this._chartList=[];var o=e("./chart"),r=e("./component");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,d,c=["title","legend","tooltip","dataRange","roamController","grid","dataZoom","xAxis","yAxis","polar"],m=0,p=c.length;p>m;m++)h=c[m],d=this.component[h],t[h]?(d?d.refresh&&d.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?"axis":h),d=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=d),this._chartList.push(d)):d&&(d.dispose(),this.component[h]=null,delete this.component[h]);for(var u,V,U,g={},m=0,p=t.series.length;p>m;m++)V=t.series[m].type,V?g[V]||(g[V]=!0,u=o.get(V),u?(this.chart[V]?(U=this.chart[V],U.refresh(t)):U=new u(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(U),this.chart[V]=U):console.error(V+" has not been required.")):console.error("series["+m+"] chart type has not been defined.");for(V in this.chart)V==a.CHART_TYPE_ISLAND||g[V]||(this.chart[V].dispose(),this.chart[V]=null,delete this.chart[V]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var f="IMG"+this.id,y=document.getElementById(f);t.renderAsImage&&l?(y?y.src=this.getDataURL(t.renderAsImage):(y=this.getImage(t.renderAsImage),y.id=f,y.style.position="absolute",y.style.left=0,y.style.top=0,this.dom.firstChild.appendChild(y)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):y&&y.parentNode.removeChild(y),y=null,this._option=t}},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=["backgroundColor","calculable","calculableColor","calculableHolderColor","nameConnector","valueConnector","animation","animationThreshold","animationDuration","animationDurationUpdate","animationEasing","addDataAnimation","symbolList","DRAG_ENABLE_TIME"],n=i.length;n--;){var o=i[n];null==t[o]&&(t[o]=null!=this._themeConfig[o]?this._themeConfig[o]:a[o])}var r=t.color;r&&r.length||(r=this._themeConfig.color||a.color),this._zr.getColor=function(t){var i=e("zrender/tool/color");return i.getColor(t,r)},l||(t.animation=!1,t.addDataAnimation=!1)},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t,i){return!t&&this._option?this._option=o.merge(this.getOption(),o.clone(e),!0):(this._option=o.clone(e),!i&&this._timeline&&this._timeline.dispose()),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e("xAxis"),e("yAxis"),e("series"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e("./component/timeline"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){function s(){if(c._zr){c._zr.clearAnimation();for(var e=0,t=w.length;t>e;e++)w[e].motionlessOnce=h.addDataAnimation&&w[e].addDataAnimation;c._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:h},c)}}for(var l=e instanceof Array?e:[[e,t,i,n,r]],h=this.getOption(),d=this._optionRestore,c=this,m=0,p=l.length;p>m;m++){e=l[m][0],t=l[m][1],i=l[m][2],n=l[m][3],r=l[m][4];var u=d.series[e],V=i?"unshift":"push",U=i?"pop":"shift";if(u){var g=u.data,f=h.series[e].data;if(g[V](t),f[V](t),n||(g[U](),t=f[U]()),null!=r){var y,b;if(u.type===a.CHART_TYPE_PIE&&(y=d.legend)&&(b=y.data)){var _=h.legend.data;if(b[V](r),_[V](r),!n){var x=o.indexOf(b,t.name);-1!=x&&b.splice(x,1),x=o.indexOf(_,t.name),-1!=x&&_.splice(x,1)}}else if(null!=d.xAxis&&null!=d.yAxis){var k,v,L=u.xAxisIndex||0;(null==d.xAxis[L].type||"category"===d.xAxis[L].type)&&(k=d.xAxis[L].data,v=h.xAxis[L].data,k[V](r),v[V](r),n||(k[U](),v[U]())),L=u.yAxisIndex||0,"category"===d.yAxis[L].type&&(k=d.yAxis[L].data,v=h.yAxis[L].data,k[V](r),v[V](r),n||(k[U](),v[U]()))}}this._option.series[e].data=h.series[e].data}}this._zr.clearAnimation();for(var w=this._chartList,W=0,X=function(){W--,0===W&&s()},m=0,p=w.length;p>m;m++)h.addDataAnimation&&w[m].addDataAnimation&&(W++,w[m].addDataAnimation(l,X));return this.component.dataZoom&&this.component.dataZoom.syncOption(h),this._option=h,h.addDataAnimation||setTimeout(s,0),this},addMarkPoint:function(e,t){return this._addMark(e,t,"markPoint")},addMarkLine:function(e,t){return this._addMark(e,t,"markLine")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var d in t)"data"===d?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):"object"!=typeof t[d]||null==l[d]?l[d]=h[d]=t[d]:(o.merge(l[d],t[d],!0),o.merge(h[d],t[d],!0));var c=this.chart[n.type];c&&c.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,"markPoint")},delMarkLine:function(e,t){return this._delMark(e,t,"markLine")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(" > ");for(var s=-1,l=0,h=o.length;h>l;l++){var d=o[l];if(d instanceof Array){if(d[0].name===t[0]&&d[1].name===t[1]){s=l;break}}else if(d.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var c=this.chart[n.type];c&&c.delMark(e,t.join(" > "),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return"";if(0===this._chartList.length){var t="IMG"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case"jpeg":break;default:e="png"}var a=this._option.backgroundColor;return a&&"rgba(0,0,0,0)"===a.replace(" ","")&&(a="#fff"),this._zr.toDataURL("image/"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getDataURL(e),i.title=t&&t.text||"ECharts",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement("div");h.style.position="absolute",h.style.left="-4000px",h.style.width=r-a+"px",h.style.height=s-o+"px",document.body.appendChild(h);var d=e("zrender").init(h),c=e("zrender/shape/Image");for(var l in n)d.addShape(new c({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));d.render();var m=this._option.backgroundColor;m&&"rgba(0,0,0,0)"===m.replace(/ /g,"")&&(m="#fff");var p=d.toDataURL("image/png",m);return setTimeout(function(){d.dispose(),h.parentNode.removeChild(h),h=null},100),p},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||"ECharts",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e("zrender/loadingEffect/Bar"),bubble:e("zrender/loadingEffect/Bubble"),dynamicLine:e("zrender/loadingEffect/DynamicLine"),ring:e("zrender/loadingEffect/Ring"),spin:e("zrender/loadingEffect/Spin"),whirling:e("zrender/loadingEffect/Whirling")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var r=o.merge(o.merge(o.clone(n),this._themeConfig.textStyle),a.textStyle);n.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,n.text=t.text||this._option&&this._option.loadingText||this._themeConfig.loadingText||a.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var s=t.effect;return("string"==typeof s||null==s)&&(s=i[t.effect||this._option&&this._option.loadingEffect||this._themeConfig.loadingEffect||a.loadingEffect]||i.spin),this._zr.showLoading(new s(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if("string"==typeof t)switch(t){case"macarons":t=e("./theme/macarons");break;case"infographic":t=e("./theme/infographic");break;default:t={}}else t=t||{};this._themeConfig=t}if(!l){var i=this._themeConfig.textStyle;i&&i.fontFamily&&i.fontFamily2&&(i.fontFamily=i.fontFamily2),i=a.textStyle,i.fontFamily=i.fontFamily2}this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(c);e&&delete d[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),define("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_VENN:"venn",CHART_TYPE_TREEMAP:"treemap",CHART_TYPE_TREE:"tree",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",CHART_TYPE_GAUGE:"gauge",CHART_TYPE_FUNNEL:"funnel",CHART_TYPE_EVENTRIVER:"eventRiver",CHART_TYPE_WORDCLOUD:"wordCloud",CHART_TYPE_HEATMAP:"heatmap",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",COMPONENT_TYPE_TIMELINE:"timeline",COMPONENT_TYPE_ROAMCONTROLLER:"roamController",backgroundColor:"rgba(0,0,0,0)",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],markPoint:{clickable:!0,symbol:"pin",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,type:"scale",scaleSize:2,bounceDistance:10},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:["circle","arrow"],symbolSize:[2,4],smoothness:.2,precision:2,effect:{show:!1,loop:!0,period:15,scaleSize:2},bundling:{enable:!1,maxTurningAngle:45},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",HOVER:"hover",MOUSEOUT:"mouseout",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",DATA_RANGE_SELECTED:"dataRangeSelected",DATA_RANGE_HOVERLINK:"dataRangeHoverLink",LEGEND_SELECTED:"legendSelected",LEGEND_HOVERLINK:"legendHoverLink",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",TIMELINE_CHANGED:"timelineChanged",MAP_ROAM:"mapRoam",FORCE_LAYOUT_END:"forceLayoutEnd",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid",ROAMCONTROLLER:"roamController"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:10,effectBlendAlpha:.95,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingEffect:"spin",loadingText:"数据读取中...",noDataEffect:"bubble",noDataText:"暂无数据",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:": ",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationDurationUpdate:500,animationEasing:"ExponentialOut"};return e}),define("zrender/tool/util",["require","../dep/excanvas"],function(e){function t(e){return e&&1===e.nodeType&&"string"==typeof e.nodeName}function i(e){if("object"==typeof e&&null!==e){var n=e;if(e instanceof Array){n=[];for(var a=0,o=e.length;o>a;a++)n[a]=i(e[a])}else if(!g[f.call(e)]&&!t(e)){n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=i(e[r]))}return n}return e}function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];"object"!=typeof r||g[f.call(r)]||t(r)?!o&&n in e||(e[n]=i[n]):a(e[n],i[n],o)}}function a(e,t,i){for(var a in t)n(e,t,a,i);return e}function o(){if(!m)if(e("../dep/excanvas"),window.G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),m=G_vmlCanvasManager.initElement(t).getContext("2d"); - -}else m=document.createElement("canvas").getContext("2d");return m}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===u)e.forEach(t,i);else if(e.length===+e.length)for(var n=0,a=e.length;a>n;n++)t.call(i,e[n],n,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(i,e[o],o,e)}function h(e,t,i){if(e&&t){if(e.map&&e.map===V)return e.map(t,i);for(var n=[],a=0,o=e.length;o>a;a++)n.push(t.call(i,e[a],a,e));return n}}function d(e,t,i){if(e&&t){if(e.filter&&e.filter===U)return e.filter(t,i);for(var n=[],a=0,o=e.length;o>a;a++)t.call(i,e[a],a,e)&&n.push(e[a]);return n}}function c(e,t){return function(){e.apply(t,arguments)}}var m,p=Array.prototype,u=p.forEach,V=p.map,U=p.filter,g={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},f=Object.prototype.toString;return{inherits:s,clone:i,merge:a,getContext:o,indexOf:r,each:l,map:h,filter:d,bind:c}}),define("zrender/tool/event",["require","../mixin/Eventful"],function(e){"use strict";function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefined"!=typeof e.offsetX&&e.offsetX||"undefined"!=typeof e.layerX&&e.layerX||"undefined"!=typeof e.clientX&&e.clientX}function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefined"!=typeof e.offsetY&&e.offsetY||"undefined"!=typeof e.layerY&&e.layerY||"undefined"!=typeof e.clientY&&e.clientY}function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||"undefined"!=typeof e.wheelDelta&&e.wheelDelta||"undefined"!=typeof e.detail&&-e.detail}var a=e("../mixin/Eventful"),o="function"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),define("zrender/tool/env",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),o=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!o&&e.match(/(iPhone\sOS)\s([\d_]+)/),l=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),h=l&&e.match(/TouchPad/),d=e.match(/Kindle\/([\d.]+)/),c=e.match(/Silk\/([\d._]+)/),m=e.match(/(BlackBerry).*Version\/([\d.]+)/),p=e.match(/(BB10).*Version\/([\d.]+)/),u=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),V=e.match(/PlayBook/),U=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),g=e.match(/Firefox\/([\d.]+)/),f=e.match(/MSIE ([\d.]+)/),y=n&&e.match(/Mobile\//)&&!U,b=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!U,f=e.match(/MSIE\s([\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,".")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,"."):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),m&&(t.blackberry=!0,t.version=m[2]),p&&(t.bb10=!0,t.version=p[2]),u&&(t.rimtabletos=!0,t.version=u[2]),V&&(i.playbook=!0),d&&(t.kindle=!0,t.version=d[1]),c&&(i.silk=!0,i.version=c[1]),!c&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),U&&(i.chrome=!0,i.version=U[1]),g&&(i.firefox=!0,i.version=g[1]),f&&(i.ie=!0,i.version=f[1]),y&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),b&&(i.webview=!0),f&&(i.ie=!0,i.version=f[1]),t.tablet=!!(o||V||a&&!e.match(/Mobile/)||g&&e.match(/Tablet/)||f&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||m||p||U&&e.match(/Android/)||U&&e.match(/CriOS\/([\d.]+)/)||g&&e.match(/Mobile/)||f&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),define("zrender",["zrender/zrender"],function(e){return e}),define("zrender/zrender",["require","./dep/excanvas","./tool/util","./tool/log","./tool/guid","./Handler","./Painter","./Storage","./animation/Animation","./tool/env"],function(e){function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}e("./dep/excanvas");var i=e("./tool/util"),n=e("./tool/log"),a=e("./tool/guid"),o=e("./Handler"),r=e("./Painter"),s=e("./Storage"),l=e("./animation/Animation"),h={},d={};d.version="2.1.1",d.init=function(e){var t=new c(a(),e);return h[t.id]=t,t},d.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return d},d.getInstance=function(e){return h[e]},d.delInstance=function(e){return delete h[e],d};var c=function(i,n){this.id=i,this.env=e("./tool/env"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1;var a=this,h=this.storage,d=h.delFromMap;h.delFromMap=function(e){var t=h.get(e);a.stopAnimation(t),d.call(h,e)}};return c.prototype.getId=function(){return this.id},c.prototype.addShape=function(e){return this.addElement(e),this},c.prototype.addGroup=function(e){return this.addElement(e),this},c.prototype.delShape=function(e){return this.delElement(e),this},c.prototype.delGroup=function(e){return this.delElement(e),this},c.prototype.modShape=function(e,t){return this.modElement(e,t),this},c.prototype.modGroup=function(e,t){return this.modElement(e,t),this},c.prototype.addElement=function(e){return this.storage.addRoot(e),this._needsRefreshNextFrame=!0,this},c.prototype.delElement=function(e){return this.storage.delRoot(e),this._needsRefreshNextFrame=!0,this},c.prototype.modElement=function(e,t){return this.storage.mod(e,t),this._needsRefreshNextFrame=!0,this},c.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this._needsRefreshNextFrame=!0,this},c.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},c.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},c.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},c.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},c.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},c.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},c.prototype.resize=function(){return this.painter.resize(),this},c.prototype.animate=function(e,t,a){var o=this;if("string"==typeof e&&(e=this.storage.get(e)),e){var r;if(t){for(var s=t.split("."),l=e,h=0,d=s.length;d>h;h++)l&&(l=l[s[h]]);l&&(r=l)}else r=e;if(!r)return void n('Property "'+t+'" is not existed in element '+e.id);null==e.__animators&&(e.__animators=[]);var c=e.__animators,m=this.animation.animate(r,{loop:a}).during(function(){o.modShape(e)}).done(function(){var t=i.indexOf(e.__animators,m);t>=0&&c.splice(t,1)});return c.push(m),m}n("Element not existed")},c.prototype.stopAnimation=function(e){if(e.__animators){for(var t=e.__animators,i=t.length,n=0;i>n;n++)t[n].stop();t.length=0}return this},c.prototype.clearAnimation=function(){return this.animation.clear(),this},c.prototype.showLoading=function(e){return this.painter.showLoading(e),this},c.prototype.hideLoading=function(){return this.painter.hideLoading(),this},c.prototype.getWidth=function(){return this.painter.getWidth()},c.prototype.getHeight=function(){return this.painter.getHeight()},c.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},c.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},c.prototype.on=function(e,t,i){return this.handler.on(e,t,i),this},c.prototype.un=function(e,t){return this.handler.un(e,t),this},c.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},c.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},c.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,d.delInstance(this.id)},d}),define("zrender/config",[],function(){var e={EVENT:{RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300},elementClassName:"zr-element",catchBrushException:!1,debugMode:0,devicePixelRatio:Math.max(window.devicePixelRatio||1,1)};return e}),define("echarts/chart/island",["require","./base","zrender/shape/Circle","../config","../util/ecData","zrender/tool/util","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var l=this;l.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=s.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=o.get(t,"value"),r=a*l.option.island.calculateStep;a=r>1?Math.round(a-r*n):+(a-r*n).toFixed(2);var h=o.get(t,"name");t.style.text=h+":"+a,o.set(t,"value",a),o.set(t,"name",h),l.zr.modShape(t.id),l.zr.refreshNextFrame(),s.stop(i)}}var i=e("./base"),n=e("zrender/shape/Circle"),a=e("../config");a.island={zlevel:0,z:5,r:15,calculateStep:.1};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/event");return t.prototype={type:a.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e("zrender/tool/color"),a=e("../util/accMath"),r=a.accAdd(o.get(t,"value"),o.get(i,"value")),s=o.get(t,"name")+this._nameConnector+o.get(i,"name");t.style.text=s+this._valueConnector+r,o.set(t,"value",r),o.set(t,"name",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=o.get(e,"name"),i=o.get(e,"value"),a=null!=o.get(e,"series")?o.get(e,"series").name:"",r=this.getFont(this.option.island.textStyle),s=this.option.island,l={zlevel:s.zlevel,z:s.z,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:r},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:"island"};"#fff"===l.style.color&&(l.style.color=e.style.strokeColor),this.setCalculable(l),l.dragEnableTime=0,o.pack(l,{name:a},-1,i,-1,t),l=new n(l),this.shapeList.push(l),this.zr.addShape(l)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=s.getX(e.event),i.style.y=s.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},r.inherits(t,i),e("../chart").define("island",t),t}),define("echarts/component/toolbox",["require","./base","zrender/shape/Line","zrender/shape/Image","zrender/shape/Rectangle","../util/shape/Icon","../config","zrender/tool/util","zrender/config","zrender/tool/event","./dataView","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor="red",this._disableColor="#ccc",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e("./base"),n=e("zrender/shape/Line"),a=e("zrender/shape/Image"),o=e("zrender/shape/Rectangle"),r=e("../util/shape/Icon"),s=e("../config");s.toolbox={zlevel:0,z:6,show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],disableColor:"#ddd",effectiveColor:"red",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["数据视图","关闭","刷新"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆积",tiled:"平铺",force:"力导向布局图切换",chord:"和弦图切换",pie:"饼图切换",funnel:"漏斗图切换"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}};var l=e("zrender/tool/util"),h=e("zrender/config"),d=e("zrender/tool/event"),c="stack",m="tiled";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case"mark":i.push({key:n,name:"mark"}),i.push({key:n,name:"markUndo"}),i.push({key:n,name:"markClear"});break;case"magicType":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+"Chart"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+"Chart"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+"Chart"});break;case"dataZoom":i.push({key:n,name:"dataZoom"}),i.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":this.canvasSupported&&i.push({key:n,name:"saveAsImage"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,d=this._itemGroupLocation.y,c=s.itemSize,m=s.itemGap,p=s.color instanceof Array?s.color:[s.color],u=this.getFont(s.textStyle);"horizontal"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?"bottom":"top",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?"left":"right",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?"top":"bottom"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?"right":"left",this._iconShapeMap={};for(var V=this,U=0;l>U;U++){switch(t={type:"icon",zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:h,y:d,width:c,height:c,iconType:this._iconList[U],lineWidth:1,strokeColor:this._featureColor[this._iconList[U]]||p[U%p.length],brushType:"stroke"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[U]]:void 0,textFont:u,textPosition:i,strokeColor:this._featureColor[this._iconList[U]]||p[U%p.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[U]]&&(t.style.image=this._featureIcon[this._iconList[U]].replace(new RegExp("^image:\\/\\/"),""),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type="image"),"horizontal"===s.orient&&(0===U&&"left"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY="top"===o?d+c+10:d-10),U===l-1&&"right"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+c,t.highlightStyle.textY="top"===o?d+c+10:d-10)),this._iconList[U]){case"mark":t.onclick=V._onMark;break;case"markUndo":t.onclick=V._onMarkUndo;break;case"markClear":t.onclick=V._onMarkClear;break;case"dataZoom":t.onclick=V._onDataZoom;break;case"dataZoomReset":t.onclick=V._onDataZoomReset;break;case"dataView":if(!this._dataView){var g=e("./dataView");this._dataView=new g(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=V._onDataView;break;case"restore":t.onclick=V._onRestore;break;case"saveAsImage":t.onclick=V._onSaveAsImage;break;default:this._iconList[U].match("Chart")?(t._name=this._iconList[U].replace("Chart",""),t.onclick=V._onMagicType):t.onclick=V._onCustomHandler}"icon"===t.type?t=new r(t):"image"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[U]]=t,"horizontal"===s.orient?h+=c+m:d+=c+m}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;"horizontal"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case"center":s=Math.floor((l-o)/2);break;case"left":s=t[3]+e.borderWidth;break;case"right":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,d=this.zr.getHeight();switch(e.y){case"top":h=t[0]+e.borderWidth;break;case"bottom":h=d-r-t[2]-e.borderWidth;break;case"center":h=Math.floor((d-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=d.getX(e.event),this._markShape.style.yEnd=d.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=d.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=d.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor="crosshair",d.stop(e.event)),this._zoomStart&&"pointer"!=this.dom.style.cursor&&"move"!=this.dom.style.cursor&&(this.dom.style.cursor="crosshair")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=d.getX(e.event),i=d.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:t,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:"both"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refreshNextFrame();else if(this._markStart){this._marking=!0;var t=d.getX(e.event),i=d.getY(e.event);this._markShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,"toolbox.feature.mark.lineStyle.width"),strokeColor:this.query(this.option,"toolbox.feature.mark.lineStyle.color"),lineType:this.query(this.option,"toolbox.feature.mark.lineStyle.type")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refreshNextFrame();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refreshNextFrame(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refreshNextFrame()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refreshNextFrame(),this.dom.style.cursor="default";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor="crosshair"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||"png";"png"!=t&&"jpeg"!=t&&(t="png");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL("image/"+t,this.option.backgroundColor&&"rgba(0,0,0,0)"===this.option.backgroundColor.replace(" ","")?"#fff":this.option.backgroundColor);var n=document.createElement("div");n.id="__echarts_download_wrap__",n.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var a=document.createElement("a");a.href=i,a.setAttribute("download",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:"ECharts")+"."+t),a.innerHTML='图片另存为":e.lang?e.lang[0]:"点击保存")+'"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===c?this._magicType[m]=!1:t===m&&(this._magicType[c]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;"function"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,"toolbox.show")&&this.query(e,"toolbox.feature.magicType.show")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&"category"===(o.type||"category")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&"category"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[c]||this._magicMap[m])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,d=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>d&&(h+=d,d=h-d,h-=d),this._zoomQueue=[{start:h,end:d,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t;if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&"category"===(e.type||"category")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&"category"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[c]||this._magicType[m])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[c]?(this.option.series[n].stack="_ECHARTS_STACK_KENER_2014_",t=c):this._magicType[m]&&(this.option.series[n].stack=null,t=m),this._featureOption[t+"Chart"]&&l.merge(this.option.series[n],this._featureOption[t+"Chart"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+"Chart"]&&l.merge(this.option.series[i],this._featureOption[a+"Chart"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e("../component").define("toolbox",t),t}),define("echarts/component",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),define("echarts/component/title",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../config");o.title={zlevel:0,z:6,show:!0,text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}};var r=e("zrender/tool/util"),s=e("zrender/tool/area"),l=e("zrender/tool/color");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){if(this.titleOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),d=this._itemGroupLocation.x,c=this._itemGroupLocation.y,m=this._itemGroupLocation.width,p=this._itemGroupLocation.height,u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:c,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:"top"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:"fill"},hoverable:!1};t&&(u.hoverable=!0,u.clickable=!0,u.onclick=function(){i&&"self"==i?window.location=t:window.open(t)});var V={zlevel:this.getZlevelBase(),z:this.getZBase(), -style:{y:c+p,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:"bottom"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:"fill"},hoverable:!1};switch(o&&(V.hoverable=!0,V.clickable=!0,V.onclick=function(){r&&"self"==r?window.location=o:window.open(o)}),this.titleOption.x){case"center":u.style.x=V.style.x=d+m/2,u.style.textAlign=V.style.textAlign="center";break;case"left":u.style.x=V.style.x=d,u.style.textAlign=V.style.textAlign="left";break;case"right":u.style.x=V.style.x=d+m,u.style.textAlign=V.style.textAlign="right";break;default:d=this.titleOption.x-0,d=isNaN(d)?0:d,u.style.x=V.style.x=d}this.titleOption.textAlign&&(u.style.textAlign=V.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(u)),""!==a&&this.shapeList.push(new n(V))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?"fill":"both",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(""===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case"center":e=Math.floor((h-r)/2);break;case"left":e=t[3]+this.titleOption.borderWidth;break;case"right":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var d,c=this.zr.getHeight();switch(this.titleOption.y){case"top":d=t[0]+this.titleOption.borderWidth;break;case"bottom":d=c-l-t[2]-this.titleOption.borderWidth;break;case"center":d=Math.floor((c-l)/2);break;default:d=this.titleOption.y-0,d=isNaN(d)?0:d}return{x:e,y:d,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=this.getTextStyle(this.titleOption.textStyle),this.titleOption.subtextStyle=this.getTextStyle(this.titleOption.subtextStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e("../component").define("title",t),t}),define("echarts/component/tooltip",["require","./base","../util/shape/Cross","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/Base","../component"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement("div"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.className="echarts-tooltip",this._tDom.style.position="absolute",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:this.getZlevelBase(),z:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e("./base"),n=e("../util/shape/Cross"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=new o({}),s=e("../config");s.tooltip={zlevel:1,z:8,show:!0,showContent:!0,trigger:"item",islandFormatter:"{a}
{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},crossStyle:{color:"#1e90ff",width:1,type:"dashed"},shadowStyle:{color:"rgba(150,150,150,0.3)",width:"auto",type:"default"}},textStyle:{color:"#fff"}};var l=e("../util/ecData"),h=e("zrender/config"),d=e("zrender/tool/event"),c=e("zrender/tool/area"),m=e("zrender/tool/color"),p=e("zrender/tool/util"),u=e("zrender/shape/Base");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:"position:absolute;display:block;border-style:solid;white-space:nowrap;",_style:function(e){if(!e)return"";var t=[];if(e.transitionDuration){var i="left "+e.transitionDuration+"s,top "+e.transitionDuration+"s";t.push("transition:"+i),t.push("-moz-transition:"+i),t.push("-webkit-transition:"+i),t.push("-o-transition:"+i)}e.backgroundColor&&(t.push("background-Color:"+m.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),null!=e.borderWidth&&t.push("border-width:"+e.borderWidth+"px"),null!=e.borderColor&&t.push("border-color:"+e.borderColor),null!=e.borderRadius&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var n=e.textStyle;n&&(n.color&&t.push("color:"+n.color),n.decoration&&t.push("text-decoration:"+n.decoration),n.align&&t.push("text-align:"+n.align),n.fontFamily&&t.push("font-family:"+n.fontFamily),n.fontSize&&t.push("font-size:"+n.fontSize+"px"),n.fontSize&&t.push("line-height:"+Math.round(3*n.fontSize/2)+"px"),n.fontStyle&&t.push("font-style:"+n.fontStyle),n.fontWeight&&t.push("font-weight:"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push("padding:"+a[0]+"px "+a[1]+"px "+a[2]+"px "+a[3]+"px")),t=t.join(";")+";"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display="none");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0,this.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refreshNextFrame(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&("function"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:"")+"left:"+t+"px;top:"+i+"px;",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e="",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+="left:"+(this._zrWidth-i-20)+"px;"),this._tDom.offsetTop+t>this._zrHeight&&(e+="top:"+(this._zrHeight-t-10)+"px;"),""!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if("island"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,"series"),n=l.get(this._curTarget,"data");e=this.deepQuery([n,i,this.option],"tooltip.show"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],"tooltip.trigger"),"axis"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,"dataIndex")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if("axis"===this.deepQuery([i[n],this.option],"tooltip.trigger"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("x",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("y",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);"cross"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=d.getX(this._event),i=d.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=d.getX(this._event),a=d.getY(this._event);if("x"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,c,m=this.component.grid.getY(),l=t.getCoordByIndex(i);l>m&&(h=l,l>=a);)c=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=c-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],c=[],m="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var p,u,V=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"xAxis":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"yAxis":!1;if(V){var U="xAxis"==V?e:t;n=this.component[V].getAxis(U);for(var g=0,f=l.length;f>g;g++)this._isSelected(l[g].name)&&l[g][V+"Index"]===U&&"axis"===this.deepQuery([l[g],this.option],"tooltip.trigger")&&(r=this.query(l[g],"tooltip.showContent")||r,a=this.query(l[g],"tooltip.formatter")||a,o=this.query(l[g],"tooltip.position")||o,m+=this._style(this.query(l[g],"tooltip")),null!=l[g].stack&&"xAxis"==V?(h.unshift(l[g]),c.unshift(g)):(h.push(l[g]),c.push(g)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:c,dataIndex:i},this.myChart);var y;"xAxis"==V?(p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),u=d.getY(this._event),y=[p,this.component.grid.getY(),p,this.component.grid.getYend()]):(p=d.getX(this._event),u=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),y=[this.component.grid.getX(),u,this.component.grid.getXend(),u]),this._styleAxisPointer(h,y[0],y[1],y[2],y[3],n.getGap(),p,u)}else p=d.getX(this._event),u=d.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),u,this.component.grid.getXend(),u,0,p,u),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display="none");if(h.length>0){if(this._lastItemTriggerId=-1,this._lastDataIndex!=i||this._lastSeriesIndex!=c[0]){this._lastDataIndex=i,this._lastSeriesIndex=c[0];var b,_;if("function"==typeof a){for(var x=[],g=0,f=h.length;f>g;g++)b=h[g].data[i],_=this.getDataFromOption(b,"-"),x.push({seriesIndex:c[g],seriesName:h[g].name||"",series:h[g],dataIndex:i,data:b,name:n.getNameByIndex(i),value:_,0:h[g].name||"",1:n.getNameByIndex(i),2:_,3:b});this._curTicket="axis:"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if("string"==typeof a){this._curTicket=0/0,a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var g=0,f=h.length;f>g;g++)a=a.replace("{a"+g+"}",this._encodeHTML(h[g].name||"")),a=a.replace("{b"+g+"}",this._encodeHTML(n.getNameByIndex(i))),b=h[g].data[i],b=this.getDataFromOption(b,"-"),a=a.replace("{c"+g+"}",b instanceof Array?b:this.numAddCommas(b));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var g=0,f=h.length;f>g;g++)a+="
"+this._encodeHTML(h[g].name||"")+" : ",b=h[g].data[i],b=this.getDataFromOption(b,"-"),a+=b instanceof Array?b:this.numAddCommas(b);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,p+10,u+10,m)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,c=0,m=o.length;m>c;c++)this._isSelected(o[c].name)&&o[c].polarIndex===e&&"axis"===this.deepQuery([o[c],this.option],"tooltip.trigger")&&(a=this.query(o[c],"tooltip.showContent")||a,i=this.query(o[c],"tooltip.formatter")||i,n=this.query(o[c],"tooltip.position")||n,l+=this._style(this.query(o[c],"tooltip")),r.push(o[c]),s.push(c));if(r.length>0){for(var p,u,V,U=[],c=0,m=r.length;m>c;c++){p=r[c].data;for(var g=0,f=p.length;f>g;g++)u=p[g],this._isSelected(u.name)&&(u=null!=u?u:{name:"",value:{dataIndex:"-"}},V=this.getDataFromOption(u.value[t]),U.push({seriesIndex:s[c],seriesName:r[c].name||"",series:r[c],dataIndex:t,data:u,name:u.name,indicator:h,value:V,0:r[c].name||"",1:u.name,2:V,3:h}))}if(U.length<=0)return;if(this._lastItemTriggerId=-1,this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],"function"==typeof i)this._curTicket="axis:"+t,this._tDom.innerHTML=i.call(this.myChart,U,this._curTicket,this._setContent);else if("string"==typeof i){i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var c=0,m=U.length;m>c;c++)i=i.replace("{a"+c+"}",this._encodeHTML(U[c].seriesName)),i=i.replace("{b"+c+"}",this._encodeHTML(U[c].name)),i=i.replace("{c"+c+"}",this.numAddCommas(U[c].value)),i=i.replace("{d"+c+"}",this._encodeHTML(U[c].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(U[0].name)+"
"+this._encodeHTML(U[0].indicator)+" : "+this.numAddCommas(U[0].value);for(var c=1,m=U.length;m>c;c++)i+="
"+this._encodeHTML(U[c].name)+"
",i+=this._encodeHTML(U[c].indicator)+" : "+this.numAddCommas(U[c].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,d.getX(this._event),d.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,"series"),o=l.get(this._curTarget,"seriesIndex"),r=l.get(this._curTarget,"data"),h=l.get(this._curTarget,"dataIndex"),c=l.get(this._curTarget,"name"),m=l.get(this._curTarget,"value"),p=l.get(this._curTarget,"special"),u=l.get(this._curTarget,"special2"),V=[r,a,this.option],U="";if("island"!=this._curTarget._type){var g=e?"axis":"item";this.option.tooltip.trigger===g&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,"tooltip.trigger")===g&&(n=this.query(a,"tooltip.showContent")||n,t=this.query(a,"tooltip.formatter")||t,i=this.query(a,"tooltip.position")||i,U+=this._style(this.query(a,"tooltip"))),n=this.query(r,"tooltip.showContent")||n,t=this.query(r,"tooltip.formatter")||t,i=this.query(r,"tooltip.position")||i,U+=this._style(this.query(r,"tooltip"))}else this._lastItemTriggerId=0/0,n=this.deepQuery(V,"tooltip.showContent"),t=this.deepQuery(V,"tooltip.islandFormatter"),i=this.deepQuery(V,"tooltip.islandPosition");this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,"function"==typeof t?(this._curTicket=(a.name||"")+":"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||"",series:a,dataIndex:h,data:r,name:c,value:m,percent:p,indicator:p,value2:u,indicator2:u,0:a.name||"",1:c,2:m,3:p,4:u,5:r,6:o,7:h},this._curTicket,this._setContent)):"string"==typeof t?(this._curTicket=0/0,t=t.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),t=t.replace("{a0}",this._encodeHTML(a.name||"")).replace("{b0}",this._encodeHTML(c)).replace("{c0}",m instanceof Array?m:this.numAddCommas(m)),t=t.replace("{d}","{d0}").replace("{d0}",p||""),t=t.replace("{e}","{e0}").replace("{e0}",l.get(this._curTarget,"special2")||""),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&p?this._itemFormatter.radar.call(this,a,c,m,p):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,c,m,r):""+(null!=a.name?this._encodeHTML(a.name)+"
":"")+(""===c?"":this._encodeHTML(c)+" : ")+(m instanceof Array?m:this.numAddCommas(m))));var f=d.getX(this._event),y=d.getY(this._event);this.deepQuery(V,"tooltip.axisPointer.show")&&this.component.grid?this._styleAxisPointer([a],this.component.grid.getX(),y,this.component.grid.getXend(),y,0,f,y):this._hide(),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,f+20,y-20,U))}},_itemFormatter:{radar:function(e,t,i,n){var a="";a+=this._encodeHTML(""===t?e.name||"":t),a+=""===a?"":"
";for(var o=0;o";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+" ("+this.numAddCommas(i)+")";var o=this._encodeHTML(t),r=this._encodeHTML(n);return""+(null!=e.name?this._encodeHTML(e.name)+"
":"")+o+" -> "+r+" ("+this.numAddCommas(i)+")
"+r+" -> "+o+" ("+this.numAddCommas(a)+")"},eventRiver:function(e,t,i,n){var a="";a+=this._encodeHTML(""===e.name?"":e.name+" : "),a+=this._encodeHTML(t),a+=""===a?"":"
",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='
',n[o].detail&&(n[o].detail.img&&(a+=''),a+='
'+n[o].time+"
",a+='',a+=n[o].detail.text+"
",a+="
");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,d=this.option.tooltip.axisPointer,c=d.type,m={line:{},cross:{},shadow:{}};for(var p in m)m[p].color=d[p+"Style"].color,m[p].width=d[p+"Style"].width,m[p].type=d[p+"Style"].type;for(var u=0,V=e.length;V>u;u++)l=e[u],h=this.query(l,"tooltip.axisPointer.type"),c=h||c,h&&(m[h].color=this.query(l,"tooltip.axisPointer."+h+"Style.color")||m[h].color,m[h].width=this.query(l,"tooltip.axisPointer."+h+"Style.width")||m[h].width,m[h].type=this.query(l,"tooltip.axisPointer."+h+"Style.type")||m[h].type);if("line"===c){var U=m.line.width,g=t==n;this._axisLineShape.style={xStart:g?this.subPixelOptimize(t,U):t,yStart:g?i:this.subPixelOptimize(i,U),xEnd:g?this.subPixelOptimize(n,U):n,yEnd:g?a:this.subPixelOptimize(a,U),strokeColor:m.line.color,lineWidth:U,lineType:m.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)}else if("cross"===c){var f=m.cross.width;this._axisCrossShape.style={brushType:"stroke",rect:this.component.grid.getArea(),x:this.subPixelOptimize(r,f),y:this.subPixelOptimize(s,f),text:("( "+this.component.xAxis.getAxis(0).getValueFromCoord(r)+" , "+this.component.yAxis.getAxis(0).getValueFromCoord(s)+" )").replace(" , "," ").replace(" , "," "),textPosition:"specific",strokeColor:m.cross.color,lineWidth:f,lineType:m.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign="left",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign="right",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline="bottom",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline="top",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)}else"shadow"===c&&((null==m.shadow.width||"auto"===m.shadow.width||isNaN(m.shadow.width))&&(m.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(m.shadow.width/=2,t=n+=m.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(m.shadow.width/=2,t=n-=m.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(m.shadow.width/=2,i=a+=m.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(m.shadow.width/=2,i=a-=m.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:m.shadow.color,lineWidth:m.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id));this.zr.refreshNextFrame()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=d.getX(e.event),n=d.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&"axis"===this.deepQuery([o[l],this.option],"tooltip.trigger")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&c.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this.getZlevelBase(),t[i].z=this.getZBase(),t[i].style=u.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?p.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var d=this.myChart.chart[r.type],c="axis"===this.deepQuery([r,this.option],"tooltip.trigger");if(d)if(c){var m=e.dataIndex;switch(d.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=m)return;var p=r.polarIndex||0,u=this.component.polar.getVector(p,m,"max");this._event={zrenderX:u[0],zrenderY:u[1]},this._showPolarTrigger(p,m)}}else{var V,U,g=d.shapeList;switch(d.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_TREEMAP:case s.CHART_TYPE_SCATTER:for(var m=e.dataIndex,a=0,o=g.length;o>a;a++)if(null==g[a]._mark&&l.get(g[a],"seriesIndex")==t&&l.get(g[a],"dataIndex")==m){this._curTarget=g[a],V=g[a].style.x,U=d.type!=s.CHART_TYPE_K?g[a].style.y:g[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var m=e.dataIndex,a=0,o=g.length;o>a;a++)if("polygon"===g[a].type&&l.get(g[a],"seriesIndex")==t&&l.get(g[a],"dataIndex")==m){this._curTarget=g[a];var u=this.component.polar.getCenter(r.polarIndex||0);V=u[0],U=u[1];break}break;case s.CHART_TYPE_PIE:for(var f=e.name,a=0,o=g.length;o>a;a++)if("sector"===g[a].type&&l.get(g[a],"seriesIndex")==t&&l.get(g[a],"name")==f){this._curTarget=g[a];var y=this._curTarget.style,b=(y.startAngle+y.endAngle)/2*Math.PI/180;V=this._curTarget.style.x+Math.cos(b)*y.r/1.5,U=this._curTarget.style.y-Math.sin(b)*y.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var f=e.name,_=r.mapType,a=0,o=g.length;o>a;a++)if("text"===g[a].type&&g[a]._mapType===_&&g[a].style._name===f){this._curTarget=g[a],V=this._curTarget.style.x+this._curTarget.position[0],U=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var f=e.name,a=0,o=g.length;o>a;a++)if("sector"===g[a].type&&l.get(g[a],"name")==f){this._curTarget=g[a];var y=this._curTarget.style,b=(y.startAngle+y.endAngle)/2*Math.PI/180;return V=this._curTarget.style.x+Math.cos(b)*(y.r-2),U=this._curTarget.style.y-Math.sin(b)*(y.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:V,zrenderY:U})}break;case s.CHART_TYPE_FORCE:for(var f=e.name,a=0,o=g.length;o>a;a++)if("circle"===g[a].type&&l.get(g[a],"name")==f){this._curTarget=g[a],V=this._curTarget.position[0],U=this._curTarget.position[1];break}}null!=V&&null!=U&&(this._event={zrenderX:V,zrenderY:U},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=p.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,"axis"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if("axis"===this.query(t[i],"tooltip.trigger")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable,!this._enterable&&this._tDom.className.indexOf(h.elementClassName)<0&&(this._tDom.className+=" "+h.elementClassName)}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null},_encodeHTML:function(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}},p.inherits(t,i),e("../component").define("tooltip",t),t}),define("echarts/component/legend",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","zrender/shape/Sector","../util/shape/Icon","../util/shape/Candle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void console.error("option.legend.data has not been defined.");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Sector"),r=e("../util/shape/Icon"),s=e("../util/shape/Candle"),l=e("../config");l.legend={zlevel:0,z:4,show:!0,orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0};var h=e("zrender/tool/util"),d=e("zrender/tool/area");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,c,m=this.legendOption.data,p=m.length,u=this.legendOption.textStyle,V=this.zr.getWidth(),U=this.zr.getHeight(),g=this._itemGroupLocation.x,f=this._itemGroupLocation.y,y=this.legendOption.itemWidth,b=this.legendOption.itemHeight,_=this.legendOption.itemGap;"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(g=this._itemGroupLocation.x+this._itemGroupLocation.width-y);for(var x=0;p>x;x++)o=h.merge(m[x].textStyle||{},u),s=this.getFont(o),e=this._getName(m[x]),l=this._getFormatterName(e),""!==e?(t=m[x].icon||this._getSomethingByName(e).type,c=this.getColor(e),"horizontal"===this.legendOption.orient?200>V-g&&y+5+d.getTextWidth(l,s)+(x===p-1||""===m[x+1]?0:_)>=V-g&&(g=this._itemGroupLocation.x,f+=b+_):200>U-f&&b+(x===p-1||""===m[x+1]?0:_)>=U-f&&("right"===this.legendOption.x?g-=this._itemGroupLocation.maxWidth+_:g+=this._itemGroupLocation.maxWidth+_,f=this._itemGroupLocation.y),i=this._getItemShapeByType(g,f,y,b,this._selectedMap[e]&&this._hasDataMap[e]?c:"#ccc",t,c),i._name=e,i=new r(i),a={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:g+y+5,y:f+b/2,color:this._selectedMap[e]?"auto"===o.color?c:o.color:"#ccc",text:l,textFont:s,textBaseline:"middle"},highlightStyle:{color:c,brushType:"fill"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(a.style.x-=y+10,a.style.textAlign="right"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),"horizontal"===this.legendOption.orient?g+=y+5+d.getTextWidth(l,s)+_:f+=b+_):"horizontal"===this.legendOption.orient?(g=this._itemGroupLocation.x, -f+=b+_):("right"===this.legendOption.x?g-=this._itemGroupLocation.maxWidth+_:g+=this._itemGroupLocation.maxWidth+_,f=this._itemGroupLocation.y);"horizontal"===this.legendOption.orient&&"center"===this.legendOption.x&&f!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return"undefined"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t="function"==typeof i?i.call(this.myChart,e):"string"==typeof i?i.replace("{name}",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+d.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+d.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?"fill":"both",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,c=this.reformCssArray(this.legendOption.padding),m=this.zr.getWidth()-c[1]-c[3],p=this.zr.getHeight()-c[0]-c[2],u=0,V=0;if("horizontal"===this.legendOption.orient){l=a;for(var U=0;t>U;U++)if(""!==this._getName(e[U])){var g=d.getTextWidth(this._getFormatterNameFromData(e[U]),e[U].textStyle?this.getFont(h.merge(e[U].textStyle||{},o)):r);u+n+g+i>m?(u-=i,s=Math.max(s,u),l+=a+i,u=0):(u+=n+g+i,s=Math.max(s,u-i))}else u-=i,s=Math.max(s,u),l+=a+i,u=0}else{for(var U=0;t>U;U++)V=Math.max(V,d.getTextWidth(this._getFormatterNameFromData(e[U]),e[U].textStyle?this.getFont(h.merge(e[U].textStyle||{},o)):r));V+=n,s=V;for(var U=0;t>U;U++)""!==this._getName(e[U])?u+a+i>p?(s+=V+i,u-=i,l=Math.max(l,u),u=0):(u+=a+i,l=Math.max(l,u-i)):(s+=V+i,u-=i,l=Math.max(l,u),u=0)}m=this.zr.getWidth(),p=this.zr.getHeight();var f;switch(this.legendOption.x){case"center":f=Math.floor((m-s)/2);break;case"left":f=c[3]+this.legendOption.borderWidth;break;case"right":f=m-s-c[1]-c[3]-2*this.legendOption.borderWidth;break;default:f=this.parsePercent(this.legendOption.x,m)}var y;switch(this.legendOption.y){case"top":y=c[0]+this.legendOption.borderWidth;break;case"bottom":y=p-l-c[0]-c[2]-2*this.legendOption.borderWidth;break;case"center":y=Math.floor((p-l)/2);break;default:y=this.parsePercent(this.legendOption.y,p)}return{x:f,y:y,width:s,height:l,maxWidth:V}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL||i[n].type===l.CHART_TYPE_TREEMAP){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,h="#ccc"===a?r:a,d={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{iconType:"legendicon"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:h,strokeColor:h,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match("image")){var s=o.replace(new RegExp("^image:\\/\\/"),"");o="image"}switch(o){case"line":d.style.brushType="stroke",d.highlightStyle.lineWidth=3;break;case"radar":case"venn":case"tree":case"treemap":case"scatter":d.highlightStyle.lineWidth=3;break;case"k":d.style.brushType="both",d.highlightStyle.lineWidth=3,d.highlightStyle.color=d.style.color=this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.color")||"#fff",d.style.strokeColor="#ccc"!=a?this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.lineStyle.color")||"#ff3200":a;break;case"image":d.style.iconType="image",d.style.image=s,"#ccc"===a&&(d.style.opacity=.5)}return d},__legendSelected:function(e){var t=e.target._name;if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]="undefined"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),""!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&"-"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){for(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&"text"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&"text"!=i.type&&(this._selectedMap[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),this.zr.modShape(i.id,t))},isSelected:function(e){return"undefined"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var c={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var d=0,c=i-1;c>d;d++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};c.chord=c.pie,c.map=c.bar;for(var m in c)r.prototype.iconLibrary["legendicon"+m]=c[m];return h.inherits(t,i),e("../component").define("legend",t),t}),define("echarts/util/ecData",[],function(){function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":return i&&i["_"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":e._echartsData["_"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),define("echarts/chart",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),define("zrender/tool/color",["require","../tool/util"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){B=e}function o(){H=B}function r(){return B}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=u(e),t=u(t),e=S(e),t=S(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],d=e[1],m=e[2],p=e[3];i>l;l++)n[l]=c([T(Math.floor(h),[0,255]),T(Math.floor(d),[0,255]),T(Math.floor(m),[0,255]),p.toFixed(4)-0],"rgba"),h+=a,d+=o,m+=r,p+=s;return h=t[0],d=t[1],m=t[2],p=t[3],n[l]=c([h,d,m,p],"rgba"),n}function d(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function c(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=C(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf("hex")>-1)return"#"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf("hs")>-1){var i=C(e.slice(1,3),function(e){return e+"%"});e[1]=i[0],e[2]=i[1]}return t.indexOf("a")>-1?(3===e.length&&e.push(1),e[3]=T(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function m(e){e=v(e),e.indexOf("rgba")<0&&(e=u(e));var t=[],i=0;return e.replace(/[\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function p(e,t){if(!E(e))return e;var i=S(e),n=i[3];return"undefined"==typeof n&&(n=1),e.indexOf("hsb")>-1?i=z(i):e.indexOf("hsl")>-1&&(i=A(i)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?i=F(i):t.indexOf("hsl")>-1&&(i=J(i)),i[3]=n,c(i,t)}function u(e){return p(e,"rgba")}function V(e){return p(e,"rgb")}function U(e){return p(e,"hex")}function g(e){return p(e,"hsva")}function f(e){return p(e,"hsv")}function y(e){return p(e,"hsba")}function b(e){return p(e,"hsb")}function _(e){return p(e,"hsla")}function x(e){return p(e,"hsl")}function k(e){for(var t in G)if(U(G[t])===U(e))return t;return null}function v(e){return String(e).replace(/\s+/g,"")}function L(e){if(G[e]&&(e=G[e]),e=v(e),e=e.replace(/hsv/i,"hsb"),/^#[\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e="#"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function w(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=V(e);for(var n=S(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return"rgb("+n.join(",")+")"}function W(e){if(!E(e))return e;var t=S(u(e));return t=C(t,function(e){return 255-e}),c(t,"rgb")}function X(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5),i=1-T(i,[0,1]);for(var n=2*i-1,a=S(u(e)),o=S(u(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],d=0;3>d;d++)h[d]=a[d]*s+o[d]*l;var m=a[3]*i+o[3]*(1-i);return m=Math.max(0,Math.min(1,m)),1===a[3]&&1===o[3]?c(h,"rgb"):(h[3]=m,c(h,"rgba"))}function I(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}function S(e){e=L(e);var t=e.match(R);if(null===t)throw new Error("The color format error");var i,n,a,o=[];if(t[2])i=t[2].replace("#","").split(""),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=C(a,function(e){return T(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(",");n=r[3],a=r.slice(0,3),o=C(a,function(e){return e=Math.floor(e.indexOf("%")>0?2.55*parseInt(e,0):e),T(e,[0,255])}),"undefined"!=typeof n&&o.push(T(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(","),l=parseInt(s[0],0)/360,h=s[1],d=s[2];n=s[3],o=C([h,d],function(e){return T(parseFloat(e)/100,[0,1])}),o.unshift(l),"undefined"!=typeof n&&o.push(T(parseFloat(n),[0,1]))}return o}function K(e,t){if(!E(e))return e;null===t&&(t=1);var i=S(u(e));return i[3]=T(Number(t).toFixed(4),[0,1]),c(i,"rgba")}function C(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function T(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||"string"==typeof e}function z(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),d=r*(1-o*(s-l)),c=r*(1-o*(1-(s-l))),m=0,p=0,u=0;0===l?(m=r,p=c,u=h):1===l?(m=d,p=r,u=h):2===l?(m=h,p=r,u=c):3===l?(m=h,p=d,u=r):4===l?(m=c,p=h,u=r):(m=r,p=h,u=d),t=255*m,i=255*p,n=255*u}return[t,i,n]}function A(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*M(l,s,a+1/3),i=255*M(l,s,a),n=255*M(l,s,a-1/3)}return[t,i,n]}function M(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function F(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var d=((s-n)/6+l/2)/l,c=((s-a)/6+l/2)/l,m=((s-o)/6+l/2)/l;n===s?t=m-c:a===s?t=1/3+d-m:o===s&&(t=2/3+c-d),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function J(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var d=((s-n)/6+l/2)/l,c=((s-a)/6+l/2)/l,m=((s-o)/6+l/2)/l;n===s?t=m-c:a===s?t=1/3+d-m:o===s&&(t=2/3+c-d),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e("../tool/util"),D=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],N=D,B="rgba(255,255,0,0.5)",H=B,R=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:d,getStepColors:h,reverse:W,mix:X,lift:w,trim:v,random:I,toRGB:V,toRGBA:u,toHex:U,toHSL:x,toHSLA:_,toHSB:b,toHSBA:y,toHSV:f,toHSVA:g,toName:k,toColor:c,toArray:m,alpha:K,getData:S}}),define("echarts/component/timeline",["require","./base","zrender/shape/Rectangle","../util/shape/Icon","../util/shape/Chain","../config","zrender/tool/util","zrender/tool/area","zrender/tool/event","../component"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart._setOption(t,e.notMerge,!0),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},null!=this.ecTheme.animationDuration?this.ecTheme.animationDuration:s.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if("last"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("next"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("play"===l)if("stop"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h="both"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match("image")){var d="";d=l.replace(new RegExp("^image:\\/\\/"),""),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:d})}}var n=e("./base"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/Icon"),r=e("../util/shape/Chain"),s=e("../config");s.timeline={zlevel:0,z:4,show:!0,type:"time",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,controlPosition:"left",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:"#666",type:"dashed"},label:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#333"}},checkpointStyle:{symbol:"auto",symbolSize:"auto",color:"auto",borderColor:"auto",borderWidth:"auto",label:{show:!1,textStyle:{color:"auto"}}},controlStyle:{itemSize:15,itemGap:5,normal:{color:"#333"},emphasis:{color:"#1e90ff"}},symbol:"emptyDiamond",symbolSize:4,currentIndex:0};var l=e("zrender/tool/util"),h=e("zrender/tool/area"),d=e("zrender/tool/event");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&("function"==typeof n?i=n.call(this.myChart,i):"string"==typeof n&&(i=n.replace("{value}",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if("auto"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var d=i;o>d;d+=i){if(r=e[d].x-e[d-i].x,0!==t.label.rotate)s=n;else if(a[d].textStyle)s=h.getTextWidth(e[d].name,e[d].textFont);else{var c=e[d].name+"",m=(c.match(/\w/g)||"").length,p=c.length-m;s=m*n*2/3+p*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+""}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,d=this._location.x,c=this._location.y+this._location.height/4*3,m=this._location.x2-this._location.x,p=h.length,u=[];if(p>1){var V=m/p;if(V=V>50?50:20>V?5:V,m-=2*V,"number"===i.type)for(var U=0;p>U;U++)u.push(d+V+m/(p-1)*U);else{u[0]=new Date(e(0).replace(/-/g,"/")),u[p-1]=new Date(e(p-1).replace(/-/g,"/"))-u[0];for(var U=1;p>U;U++)u[U]=d+V+m*(new Date(e(U).replace(/-/g,"/"))-u[0])/u[p-1];u[0]=d+V}}else u.push(d+m/2);for(var g,f,y,b,_,x=[],U=0;p>U;U++)d=u[U],g=h[U].symbol&&h[U].symbol.toLowerCase()||n,g.match("empty")?(g=g.replace("empty",""),y=!0):y=!1,g.match("star")&&(f=g.replace("star","")-0||5,g="star"),t=h[U].textStyle?l.merge(h[U].textStyle||{},r):r,b=t.align||"center",o?(b=o>0?"right":"left",_=[o*Math.PI/180,d,c-5]):_=!1,x.push({x:d,n:f,isEmpty:y,symbol:g,symbolSize:h[U].symbolSize||a,color:h[U].color,borderColor:h[U].borderColor,borderWidth:h[U].borderWidth,name:this._getReformedLabel(U),textColor:t.color,textAlign:b,textBaseline:t.baseline||"middle",textX:d,textY:c-(o?5:0),textFont:h[U].textStyle?this.getFont(t):s,rotation:_,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||"rgba(0,0,0,0)"!=e.backgroundColor.replace(/\s/g,""))&&this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if("none"!==t.controlPosition){var a,r=n.itemSize,s=n.itemGap;"left"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,d={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{iconType:"timelineControl",symbol:"last",x:a,y:h,width:r,height:r,brushType:"stroke",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(d),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(d)),this._ctrPlayShape.style.brushType="fill",this._ctrPlayShape.style.symbol="play",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?"playing":"stop",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){"stop"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(d)),this._ctrNextShape.style.symbol="next",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:"both",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,hoverable:!1,draggable:!0,style:{iconType:"diamond",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:"both",textPosition:"specific",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:"center",textBaseline:"middle"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:"",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,"auto"===t.symbol?this._handleShape.style.iconType="none"!=i.symbol?i.symbol:"diamond":(this._handleShape.style.iconType=t.symbol,t.symbol.match("star")&&(this._handleShape.style.n=t.symbol.replace("star","")-0||5,this._handleShape.style.iconType="star"));var n;"auto"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color="auto"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor="auto"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor="auto"===t.borderColor?i.borderColor?i.borderColor:"#fff":t.borderColor,this._handleShape.style.lineWidth="auto"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,"style").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start("ExponentialOut")}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0), -this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&"playing"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="playing",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&"stop"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="stop",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=this.getTextStyle(this.timelineOption.label.textStyle),this.timelineOption.checkpointStyle.label.textStyle=this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e("../component").define("timeline",t),t}),define("zrender/shape/Image",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"image",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),"string"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if("IMG"==a.nodeName.toUpperCase())if(window.ActiveXObject){if("complete"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,d=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var c=n.sx||0,m=n.sy||0;e.drawImage(a,c,m,n.sWidth,n.sHeight,h,d,s,l)}else if(n.sx&&n.sy){var c=n.sx,m=n.sy,p=s-c,u=l-m;e.drawImage(a,c,m,p,u,h,d,s,l)}else e.drawImage(a,h,d,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e("../tool/util").inherits(i,t),i}),define("zrender/loadingEffect/Bar",["require","./Base","../tool/util","../tool/color","../shape/Rectangle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Rectangle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:"fill",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.widthV;V++){var U="random"==l.color?a.alpha(a.random(),.3):l.color;m[V]=new o({highlightStyle:{x:Math.ceil(Math.random()*p),y:Math.ceil(Math.random()*u),r:Math.ceil(40*Math.random()),brushType:d,color:U,strokeColor:U,lineWidth:c},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=m[i].highlightStyle;n.y-m[i].animationY+n.r<=0&&(m[i].highlightStyle.y=u+n.r,m[i].highlightStyle.x=Math.ceil(Math.random()*p)),m[i].highlightStyle.y-=m[i].animationY,e(m[i])}e(r),t()},l.timeInterval)},t}),define("zrender/loadingEffect/DynamicLine",["require","./Base","../tool/util","../tool/color","../shape/Line"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Line");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,d=l.lineWidth,c=[],m=this.canvasWidth,p=this.canvasHeight,u=0;h>u;u++){var V=-Math.ceil(1e3*Math.random()),U=Math.ceil(400*Math.random()),g=Math.ceil(Math.random()*p),f="random"==l.color?a.random():l.color;c[u]=new o({highlightStyle:{xStart:V,yStart:g,xEnd:V+U,yEnd:g,strokeColor:f,lineWidth:d},animationX:Math.ceil(100*Math.random()),len:U})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=c[i].highlightStyle;n.xStart>=m&&(c[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+c[i].len,n.yStart=Math.ceil(Math.random()*p),n.yEnd=n.yStart),n.xStart+=c[i].animationX,n.xEnd+=c[i].animationX,e(c[i])}e(r),t()},l.timeInterval)},t}),define("zrender/loadingEffect/Ring",["require","./Base","../tool/util","../tool/color","../shape/Ring","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Ring"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}}),s=i.effect,l=i.textStyle;null==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),d=this.createBackgroundShape(i.backgroundColor),c=s.x,m=s.y,p=s.r0+6,u=s.r-6,V=s.color,U=a.lift(V,.1),g=new o({highlightStyle:n.clone(s)}),f=[],y=a.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),b=15,_=240,x=0;16>x;x++)f.push(new r({highlightStyle:{x:c,y:m,r0:p,r:u,startAngle:_-b,endAngle:_,brushType:"fill",color:U},_color:a.getLinearGradient(c+p*Math.cos(_,!0),m-p*Math.sin(_,!0),c+p*Math.cos(_-b,!0),m-p*Math.sin(_-b,!0),[[0,y[2*x]],[1,y[2*x+1]]])})),_-=b;_=360;for(var x=0;4>x;x++)f.push(new r({highlightStyle:{x:c,y:m,r0:p,r:u,startAngle:_-b,endAngle:_,brushType:"fill",color:U},_color:a.getLinearGradient(c+p*Math.cos(_,!0),m-p*Math.sin(_,!0),c+p*Math.cos(_-b,!0),m-p*Math.sin(_-b,!0),[[0,y[2*x+32]],[1,y[2*x+33]]])})),_-=b;var k=0;if(null!=i.progress){e(d),k=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,g.highlightStyle.text=5*k+"%",e(g);for(var x=0;20>x;x++)f[x].highlightStyle.color=k>x?f[x]._color:U,e(f[x]);return e(h),void t()}return setInterval(function(){e(d),k+=k>=20?-20:1,e(g);for(var i=0;20>i;i++)f[i].highlightStyle.color=k>i?f[i]._color:U,e(f[i]);e(h),t()},s.timeInterval)},t}),define("zrender/loadingEffect/Spin",["require","./Base","../tool/util","../tool/color","../tool/area","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../tool/area"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#fff",textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),d=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),c=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:"#fff",timeInterval:100}),m=this.getLocation(this.options.textStyle,h+l+2*c.r,Math.max(2*c.r,d));c.x=m.x+c.r,c.y=s.highlightStyle.y=m.y+m.height/2,s.highlightStyle.x=c.x+c.r+l;for(var p=this.createBackgroundShape(i.backgroundColor),u=c.n,V=c.x,U=c.y,g=c.r0,f=c.r,y=c.color,b=[],_=Math.round(180/u),x=0;u>x;x++)b[x]=new r({highlightStyle:{x:V,y:U,r0:g,r:f,startAngle:_*x*2,endAngle:_*x*2+_,color:a.alpha(y,(x+1)/u),brushType:"fill"}});var k=[0,V,U];return setInterval(function(){e(p),k[0]-=.3;for(var i=0;u>i;i++)b[i].rotation=k,e(b[i]);e(s),t()},c.timeInterval)},t}),define("zrender/loadingEffect/Whirling",["require","./Base","../tool/util","../tool/area","../shape/Ring","../shape/Droplet","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/area"),o=e("../shape/Ring"),r=e("../shape/Droplet"),s=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888",textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"}),l=this.createTextShape(i.textStyle),h=10,d=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),c=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),m=n.merge(this.options.effect||{},{r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50}),p=this.getLocation(this.options.textStyle,d+h+2*m.r,Math.max(2*m.r,c));m.x=p.x+m.r,m.y=l.highlightStyle.y=p.y+p.height/2,l.highlightStyle.x=m.x+m.r+h;var u=this.createBackgroundShape(i.backgroundColor),V=new r({highlightStyle:{a:Math.round(m.r/2),b:Math.round(m.r-m.r/6),brushType:"fill",color:m.colorWhirl}}),U=new s({highlightStyle:{r:Math.round(m.r/6),brushType:"fill",color:m.colorIn}}),g=new o({highlightStyle:{r0:Math.round(m.r-m.r/3),r:m.r,brushType:"fill",color:m.colorOut}}),f=[0,m.x,m.y];return V.highlightStyle.x=U.highlightStyle.x=g.highlightStyle.x=f[1],V.highlightStyle.y=U.highlightStyle.y=g.highlightStyle.y=f[2],setInterval(function(){e(u),e(g),f[0]-=.3,V.rotation=f,e(V),e(U),e(l),t()},m.timeInterval)},t}),define("echarts/theme/macarons",[],function(){var e={color:["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],title:{textStyle:{fontWeight:"normal",color:"#008acd"}},dataRange:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{color:["#1e90ff","#1e90ff","#1e90ff","#1e90ff"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{normal:{color:"#008acd"},emphasis:{color:"#008acd"}},symbol:"emptyCircle",symbolSize:3},bar:{itemStyle:{normal:{barBorderRadius:5},emphasis:{barBorderRadius:5}}},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},k:{itemStyle:{normal:{color:"#d87a80",color0:"#2ec7c9",lineStyle:{color:"#d87a80",color0:"#2ec7c9"}}}},scatter:{symbol:"circle",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#d87a80"}}},emphasis:{areaStyle:{color:"#fe994e"}}}},force:{itemStyle:{normal:{linkStyle:{color:"#1e90ff"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),define("echarts/theme/infographic",[],function(){var e={color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD","#D7504B","#C6E579","#F4E001","#F0805A","#26C0C0"],title:{textStyle:{fontWeight:"normal",color:"#27727B"}},dataRange:{x:"right",y:"center",itemWidth:5,itemHeight:25,color:["#C1232B","#FCCE10"]},toolbox:{color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#27727B",type:"dashed"},crossStyle:{color:"#27727B"},shadowStyle:{color:"rgba(200,200,200,0.3)"}}},dataZoom:{dataBackgroundColor:"rgba(181,195,52,0.3)",fillerColor:"rgba(181,195,52,0.2)",handleColor:"#27727B"},grid:{borderWidth:0},categoryAxis:{axisLine:{lineStyle:{color:"#27727B"}},splitLine:{show:!1}},valueAxis:{axisLine:{show:!1},splitArea:{show:!1},splitLine:{lineStyle:{color:["#ccc"],type:"dashed"}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#27727B"},controlStyle:{normal:{color:"#27727B"},emphasis:{color:"#27727B"}},symbol:"emptyCircle",symbolSize:3},line:{itemStyle:{normal:{borderWidth:2,borderColor:"#fff",lineStyle:{width:3}},emphasis:{borderWidth:0}},symbol:"circle",symbolSize:3.5},k:{itemStyle:{normal:{color:"#C1232B",color0:"#B5C334",lineStyle:{width:1,color:"#C1232B",color0:"#B5C334"}}}},scatter:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(200,200,200,0.5)"},emphasis:{borderWidth:0}},symbol:"star4",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#C1232B"}}},emphasis:{areaStyle:{color:"#fe994e"},label:{textStyle:{color:"rgb(100,0,0)"}}}}},force:{itemStyle:{normal:{linkStyle:{color:"#27727B"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{center:["50%","80%"],radius:"100%",startAngle:180,endAngle:0,axisLine:{show:!0,lineStyle:{color:[[.2,"#B5C334"],[.8,"#27727B"],[1,"#C1232B"]],width:"40%"}},axisTick:{splitNumber:2,length:5,lineStyle:{color:"#fff"}},axisLabel:{textStyle:{color:"#fff",fontWeight:"bolder"}},splitLine:{length:"5%",lineStyle:{color:"#fff"}},pointer:{width:"40%",length:"80%",color:"#fff"},title:{offsetCenter:[0,-20],textStyle:{color:"auto",fontSize:20}},detail:{offsetCenter:[0,0],textStyle:{color:"auto",fontSize:40}}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),define("zrender/dep/excanvas",["require"],function(){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new b(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,"&").replace(/"/g,""")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_","urn:schemas-microsoft-com:office:office"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function d(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(t+1,i).split(",");return(4!=n.length||"a"!=e.charAt(3))&&(n[3]=1),n}function c(e){return parseFloat(e)/100}function m(e,t,i){return Math.min(i,Math.max(t,e))}function p(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=m(c(e[1]),0,1),r=m(c(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=u(l,s,a+1/3),i=u(l,s,a),n=u(l,s,a-1/3)}return"#"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function u(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function V(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=d(e),t="#",o=0;3>o;o++)n=-1!=a[o].indexOf("%")?Math.floor(255*c(a[o])):+a[o],t+=D[m(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=d(e);t=p(a),i=a[3]}else t=H[e]||e;return R[e]={color:t,alpha:i}}function U(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),n=i.style;try{n.font=e,t=n.fontFamily.split(",")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function g(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size="number"==typeof e.size?e.size:-1!=e.size.indexOf("px")?o:-1!=e.size.indexOf("em")?a*o:-1!=e.size.indexOf("%")?a/100*o:-1!=e.size.indexOf("pt")?o/.75:a,i}function f(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function y(e){return Z[e]||"square"}function b(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=1*F,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",i=e.ownerDocument.createElement("div");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor="#fff",n.style.filter="alpha(opacity=0)",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function _(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=V(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push("')}function k(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof W){var h=0,d={x:0,y:0},c=0,m=1;if("gradient"==a.type_){var p=a.x0_/o,u=a.y0_/r,U=a.x1_/o,g=a.y1_/r,f=v(e,p,u),y=v(e,U,g),b=y.x-f.x,_=y.y-f.y;h=180*Math.atan2(b,_)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var f=v(e,a.x0_,a.y0_);d={x:(f.x-i.x)/s,y:(f.y-i.y)/l},s/=o*F,l/=r*F;var x=C.max(s,l);c=2*a.r0_/x,m=2*a.r1_/x-c}var k=a.colors_;k.sort(function(e,t){return e.offset-t.offset});for(var L=k.length,w=k[0].color,I=k[L-1].color,S=k[0].alpha*e.globalAlpha,K=k[L-1].alpha*e.globalAlpha,T=[],E=0;L>E;E++){var z=k[E];T.push(z.offset*m+c+" "+z.color)}t.push('')}else if(a instanceof X){if(s&&l){var A=-i.x,M=-i.y;t.push("')}}else{var J=V(e.fillStyle),O=J.color,P=J.alpha*e.globalAlpha;t.push('')}}function v(e,t,i){var n=e.m_;return{x:F*(t*n[0][0]+i*n[1][0]+n[2][0])-J,y:F*(t*n[0][1]+i*n[1][1]+n[2][1])-J}}function L(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function w(e,t,i){if(L(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=M(A(n))}}function W(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function X(e,t){switch(S(e),t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:I("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function I(e){throw new K(e)}function S(e){e&&1==e.nodeType&&"IMG"==e.tagName||I("TYPE_MISMATCH_ERR"),"complete"!=e.readyState&&I("INVALID_STATE_ERR")}function K(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var C=Math,T=C.round,E=C.sin,z=C.cos,A=C.abs,M=C.sqrt,F=10,J=F/2,O=(+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement("canvas"),i.attachEvent("onreadystatechange",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName("canvas"),i=0;iN;N++)for(var B=0;16>B;B++)D[16*N+B]=N.toString(16)+B.toString(16);var H={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},R={},G={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},Y={},Z={butt:"flat",round:"round"},Q=b.prototype;Q.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},Q.beginPath=function(){this.currentPath_=[]},Q.moveTo=function(e,t){var i=v(this,e,t);this.currentPath_.push({type:"moveTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Q.lineTo=function(e,t){var i=v(this,e,t);this.currentPath_.push({type:"lineTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Q.bezierCurveTo=function(e,t,i,n,a,o){var r=v(this,a,o),s=v(this,e,t),l=v(this,i,n);_(this,s,l,r)},Q.quadraticCurveTo=function(e,t,i,n){var a=v(this,e,t),o=v(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};_(this,r,s,o)},Q.arc=function(e,t,i,n,a,o){i*=F;var r=o?"at":"wa",s=e+z(n)*i-J,l=t+E(n)*i-J,h=e+z(a)*i-J,d=t+E(a)*i-J;s!=h||o||(s+=.125);var c=v(this,e,t),m=v(this,s,l),p=v(this,h,d);this.currentPath_.push({type:r,x:c.x,y:c.y,radius:i,xStart:m.x,yStart:m.y,xEnd:p.x,yEnd:p.y})},Q.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},Q.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},Q.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},Q.createLinearGradient=function(e,t,i,n){var a=new W("gradient");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},Q.createRadialGradient=function(e,t,i,n,a,o){var r=new W("gradientradial");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},Q.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,d=e.runtimeStyle.height;e.runtimeStyle.width="auto",e.runtimeStyle.height="auto";var c=e.width,m=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=d,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=c,l=a=m;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=c,l=m;else{if(9!=arguments.length)throw Error("Invalid number of arguments");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var p=v(this,t,i),u=[],V=10,U=10,g=y=1;if(u.push(" '),(o||r)&&u.push('
'),u.push('
'),(o||r)&&u.push("
"),u.push("
"),this.element_.insertAdjacentHTML("BeforeEnd",u.join(""))},Q.stroke=function(e){var t=[],i=10,n=10;t.push("o.x)&&(o.x=l.x),(null==a.y||l.yo.y)&&(o.y=l.y))}t.push(' ">'),e?k(this,t,a,o):x(this,t),t.push(""),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},Q.fill=function(){this.stroke(!0)},Q.closePath=function(){this.currentPath_.push({type:"close"})},Q.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Q.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Q.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];w(this,l(i,this.m_),!1)},Q.rotate=function(e){var t=z(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];w(this,l(n,this.m_),!1)},Q.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];w(this,l(i,this.m_),!0)},Q.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];w(this,l(r,this.m_),!0)},Q.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];w(this,r,!0)},Q.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,d={x:0,y:0},c=[],m=g(U(this.font),this.element_),p=f(m),u=this.element_.currentStyle,V=this.textAlign.toLowerCase(); - -switch(V){case"left":case"center":case"right":break;case"end":V="ltr"==u.direction?"right":"left";break;case"start":V="rtl"==u.direction?"right":"left";break;default:V="left"}switch(this.textBaseline){case"hanging":case"top":d.y=m.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":d.y=-m.size/2.25}switch(V){case"right":l=s,h=.05;break;case"center":l=h=s/2}var y=v(this,t+d.x,n+d.y);c.push(''),o?x(this,c):k(this,c,{x:-l,y:0},{x:h,y:m.size});var b=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",_=T(y.x/F)+","+T(y.y/F);c.push('','',''),this.element_.insertAdjacentHTML("beforeEnd",c.join(""))},Q.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Q.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Q.measureText=function(e){if(!this.textMeasureEl_){var t='';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Q.clip=function(){},Q.arcTo=function(){},Q.createPattern=function(e,t){return new X(e,t)},W.prototype.addColorStop=function(e,t){t=V(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=K.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=b,CanvasGradient=W,CanvasPattern=X,DOMException=K}(),G_vmlCanvasManager}),define("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),define("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),define("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),define("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=p.length;i--;){var n=p[i];e["_"+n+"Handler"]=t(V[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),d=e("./tool/matrix"),c=o.EVENT,m=e("./mixin/Eventful"),p=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],u=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},V={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(c.RESIZE,e)},click:function(e,t){if(u(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,c.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(u(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,c.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(u(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,c.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((u(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e),this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a="move",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a="move":this._hasfound&&this._lastHover.clickable&&(a="pointer"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,c.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(u(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(c.GLOBALOUT,e)}},mousedown:function(e,t){if(u(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,c.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(u(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,c.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(u(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(u(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(u(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(d.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var g=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return U.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&ts;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r("ZLevel "+n+" has been used by unkown layer "+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(d){r(d,"brush error of "+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r("ZLevel "+e+" has been used already");if(!n(t))return void r("Layer of zlevel "+e+" is not valid");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;in;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l("image",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||"#fff",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:"up",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d");r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),d=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(d.position=i.position=l.position),null!=l.rotation&&(d.rotation=i.rotation=l.rotation),null!=l.scale&&(d.scale=i.scale=l.scale),d},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),define("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),"group"==e.type){for(var i=0;i0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;tt;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),define("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var d=e.length;if(1==h)for(var c=0;d>c;c++)l[c]=s(e[c],t[c],i[c],n[c],a,o,r);else for(var m=e[0].length,c=0;d>c;c++)for(var p=0;m>p;p++)l[c][p]=s(e[c][p],t[c][p],i[c][p],n[c][p],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(V.call(e[n]));return i}return V.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var d=e("./Clip"),c=e("../tool/color"),m=e("../tool/util"),p=e("../tool/event").Dispatcher,u=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},V=Array.prototype.slice,U=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,p.call(this)};U.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=m.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(u(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),u(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new g(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:U},m.merge(U.prototype,p.prototype,!0);var g=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return g.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,m="spline"===e,p=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},u=function(u,V){var U=u.length;if(U){var g=u[0].value,f=o(g),y=!1,b=f&&o(g[0])?2:1;u.sort(function(e,t){return e.time-t.time});var _;if(U){_=u[U-1].time;for(var x=[],k=[],v=0;U>v;v++){x.push(u[v].time/_);var L=u[v].value;"string"==typeof L&&(L=c.toArray(L),0===L.length&&(L[0]=L[1]=L[2]=0,L[3]=1),y=!0),k.push(L)}var w,v,W,X,I,S,K,C=0,T=0;if(y)var E=[0,0,0,0];var z=function(e,o){if(T>o){for(w=Math.min(C+1,U-1),v=w;v>=0&&!(x[v]<=o);v--);v=Math.min(v,U-2)}else{for(v=C;U>v&&!(x[v]>o);v++);v=Math.min(v-1,U-2)}C=v,T=o;var d=x[v+1]-x[v];if(0!==d){if(W=(o-x[v])/d,m)if(I=k[v],X=k[0===v?v:v-1],S=k[v>U-2?U-1:v+1],K=k[v>U-3?U-1:v+2],f)r(X,I,S,K,W,W*W,W*W*W,l(e,V),b);else{var c;y?(c=r(X,I,S,K,W,W*W,W*W*W,E,1),c=h(E)):c=s(X,I,S,K,W,W*W,W*W*W),i(e,V,c)}else if(f)a(k[v],k[v+1],W,l(e,V),b);else{var c;y?(a(k[v],k[v+1],W,E,1),c=h(E)):c=n(k[v],k[v+1],W),i(e,V,c)}for(v=0;v=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),define("zrender/Layer",["require","./mixin/Transformable","./tool/util","./config"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=a+"px",n.style.height=o+"px",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute("data-zr-dom-id",e),n}var n=e("./mixin/Transformable"),a=e("./tool/util"),o=window.G_vmlCanvasManager,r=e("./config"),s=function(e,a){this.id=e,this.dom=i(e,"canvas",a),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",this.dom.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*i),this.dom.setAttribute("height",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute("width",e*i),this.domBack.setAttribute("height",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var d=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(d,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),define("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,d=o.length;d>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),define("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,d=t.radius;"number"==typeof d?i=n=a=o=d:d instanceof Array?1===d.length?i=n=a=o=d[0]:2===d.length?(i=a=d[0],n=o=d[1]):3===d.length?(i=d[0],n=o=d[1],a=d[2]):(i=d[0],n=d[1],a=d[2],o=d[3]):i=n=a=o=0;var c;i+n>l&&(c=i+n,i*=l/c,n*=l/c),a+o>l&&(c=a+o,a*=l/c,o*=l/c),n+a>h&&(c=n+a,n*=h/c,a*=h/c),i+o>h&&(c=i+o,i*=h/c,o*=h/c),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;v=v||L.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&v.isPointInPath)return a(e,v,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return p(t,i,o,l);case"rose":return p(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"polyline":return d(t.pointList,t.lineWidth,i,n);case"ring":return c(t.x,t.y,t.r0,t.r,i,n);case"circle":return p(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),u(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return t.pathArray&&_(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return V(t.pointList,i,n);case"text":var U=t.__rect||e.getRect(t);return m(U.x,U.y,U.width,U.height,i,n);case"rectangle":case"image":return m(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var d=l*o-r+h,c=d*d/(l*l+1);return s/2*s/2>=c}function s(e,t,i,n,a,o,r,s,l,h,d){if(0===l)return!1;var c=Math.max(l,5);if(d>t+c&&d>n+c&&d>o+c&&d>s+c||t-c>d&&n-c>d&&o-c>d&&s-c>d||h>e+c&&h>i+c&&h>a+c&&h>r+c||e-c>h&&i-c>h&&a-c>h&&r-c>h)return!1;var m=w.cubicProjectPoint(e,t,i,n,a,o,r,s,h,d,null);return c/2>=m}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var d=w.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=d}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var d=Math.max(s,5);l-=e,h-=i;var c=Math.sqrt(l*l+h*h);if(c-d>n||n>c+d)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var m=a;a=t(o),o=t(m)}else a=t(a),o=t(o);a>o&&(o+=C);var p=Math.atan2(h,l);return 0>p&&(p+=C),p>=a&&o>=p||p+C>=a&&o>=p+C}function d(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],d=e[a+1][1];if(r(s,l,h,d,t,i,n))return!0}return!1}function c(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function m(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function p(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function u(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function V(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],d=e[o][1];a+=U(s,l,h,d,t,i),r=o}return 0!==a}function U(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function g(){var e=E[0];E[0]=E[1],E[1]=e}function f(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var d=w.cubicRootAt(t,n,o,s,h,T);if(0===d)return 0;for(var c,m,p=0,u=-1,V=0;d>V;V++){var U=T[V],f=w.cubicAt(e,i,a,r,U);l>f||(0>u&&(u=w.cubicExtrema(t,n,o,s,E),E[1]1&&g(),c=w.cubicAt(t,n,o,s,E[0]),u>1&&(m=w.cubicAt(t,n,o,s,E[1]))),p+=2==u?Uc?1:-1:Um?1:-1:m>s?1:-1:Uc?1:-1:c>s?1:-1)}return p}function y(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=w.quadraticRootAt(t,n,o,s,T);if(0===l)return 0;var h=w.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var d=0,c=w.quadraticAt(t,n,o,h),m=0;l>m;m++){var p=w.quadraticAt(e,i,a,T[m]);r>p||(d+=T[m]c?1:-1:c>o?1:-1)}return d}var p=w.quadraticAt(e,i,a,T[0]);return r>p?0:t>o?1:-1}function b(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(T[0]=-h,T[1]=h,Math.abs(a-o)>=C){a=0,o=C;var d=r?1:-1;return s>=T[0]+e&&s<=T[1]+e?d:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var c=0,m=0;2>m;m++){var p=T[m];if(p+e>s){var u=Math.atan2(l,p),d=r?1:-1;0>u&&(u=C+u),(u>=a&&o>=u||u+C>=a&&o>=u+C)&&(u>Math.PI/2&&u<1.5*Math.PI&&(d=-d),c+=d)}}return c}function _(e,t,i,n,a){var o=0,d=0,c=0,m=0,p=0,u=!0,V=!0;i=i||"fill";for(var g="stroke"===i||"both"===i,_="fill"===i||"both"===i,x=0;x0&&(_&&(o+=U(d,c,m,p,n,a)),0!==o))return!0;m=v[v.length-2],p=v[v.length-1],u=!1,V&&"A"!==k.command&&(V=!1,d=m,c=p)}switch(k.command){case"M":d=v[0],c=v[1];break;case"L":if(g&&r(d,c,v[0],v[1],t,n,a))return!0;_&&(o+=U(d,c,v[0],v[1],n,a)),d=v[0],c=v[1];break;case"C":if(g&&s(d,c,v[0],v[1],v[2],v[3],v[4],v[5],t,n,a))return!0;_&&(o+=f(d,c,v[0],v[1],v[2],v[3],v[4],v[5],n,a)),d=v[4],c=v[5];break;case"Q":if(g&&l(d,c,v[0],v[1],v[2],v[3],t,n,a))return!0;_&&(o+=y(d,c,v[0],v[1],v[2],v[3],n,a)),d=v[2],c=v[3];break;case"A":var L=v[0],w=v[1],W=v[2],X=v[3],I=v[4],S=v[5],K=Math.cos(I)*W+L,C=Math.sin(I)*X+w;V?(V=!1,m=K,p=C):o+=U(d,c,K,C);var T=(n-L)*X/W+L;if(g&&h(L,w,X,I,I+S,1-v[7],t,T,a))return!0;_&&(o+=b(L,w,X,I,I+S,1-v[7],T,a)),d=Math.cos(I+S)*W+L,c=Math.sin(I+S)*X+w;break;case"z":if(g&&r(d,c,m,p,t,n,a))return!0;u=!0}}return _&&(o+=U(d,c,m,p,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(W[i])return W[i];v=v||L.getContext(),v.save(),t&&(v.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(v.measureText(e[a]).width,n);return v.restore(),W[i]=n,++I>K&&(I=0,W={}),n}function k(e,t){var i=e+":"+t;if(X[i])return X[i];v=v||L.getContext(),v.save(),t&&(v.font=t),e=(e+"").split("\n");var n=(v.measureText("国").width+2)*e.length;return v.restore(),X[i]=n,++S>K&&(S=0,X={}),n}var v,L=e("./util"),w=e("./curve"),W={},X={},I=0,S=0,K=5e3,C=2*Math.PI,T=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:k,isInsidePath:_,isInsidePolygon:V,isInsideSector:u,isInsideCircle:p,isInsideLine:r,isInsideRect:m,isInsidePolyline:d,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),define("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var d=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+d;break;default:o=h.y+d/2}for(var c=0,m=n.length;m>c;c++)t.fillText(n[c],a,o),o+=d}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),d=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};d.prototype.invisible=!1,d.prototype.ignore=!1,d.prototype.zlevel=0,d.prototype.draggable=!1,d.prototype.clickable=!1,d.prototype.hoverable=!0,d.prototype.z=0,d.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},d.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},d.prototype.afterBrush=function(e){e.restore()};var c=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];d.prototype.setContext=function(e,t){for(var i=0,n=c.length;n>i;i++){var a=c[i][0],o=t[a],r=c[i][1];"undefined"!=typeof o&&(e[r]=o)}};var m=a.create();return d.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},d.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,d=i.textPosition||this.textPosition||"top";switch(d){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var c=(n||i).__rect||this.getRect(n||i);switch(d){case"inside":s=c.x+c.width/2,l=c.y+c.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=c.x-h,l=c.y+c.height/2,o="end",r="middle";break;case"right":s=c.x+c.width+h,l=c.y+c.height/2,o="start",r="middle";break;case"top":s=c.x+c.width/2,l=c.y-h,o="center",r="bottom";break;case"bottom":s=c.x+c.width/2,l=c.y+c.height+h,o="center",r="top"}}break;case"start":case"end":var m=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],p=m.length;if(2>p)return;var u,V,U,g;switch(d){case"start":u=m[1][0],V=m[0][0],U=m[1][1],g=m[0][1];break;case"end":u=m[p-2][0],V=m[p-1][0],U=m[p-2][1],g=m[p-1][1]}s=V,l=g;var f=Math.atan((U-g)/(V-u))/Math.PI*180;0>V-u?f+=180:0>U-g&&(f+=360),h=5,f>=30&&150>=f?(o="center",r="bottom",l-=h):f>150&&210>f?(o="right",r="middle",s-=h):f>=210&&330>=f?(o="center",r="top",l+=h):(o="left",r="middle",s+=h);break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},d.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},d.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(d.prototype,l.prototype,!0),r.merge(d.prototype,h.prototype,!0),d}),define("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-U&&U>e}function i(e){return e>U||-U>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),d=e-o,c=l*l-3*s*h,m=l*h-9*s*d,p=h*h-3*l*d,u=0;if(t(c)&&t(m))if(t(l))r[0]=0;else{var V=-h/l;V>=0&&1>=V&&(r[u++]=V)}else{var U=m*m-4*c*p;if(t(U)){var y=m/c,V=-l/s+y,b=-y/2;V>=0&&1>=V&&(r[u++]=V),b>=0&&1>=b&&(r[u++]=b)}else if(U>0){var _=Math.sqrt(U),x=c*l+1.5*s*(-m+_),k=c*l+1.5*s*(-m-_);x=0>x?-Math.pow(-x,f):Math.pow(x,f),k=0>k?-Math.pow(-k,f):Math.pow(k,f);var V=(-l-(x+k))/(3*s);V>=0&&1>=V&&(r[u++]=V)}else{var v=(2*c*l-3*s*m)/(2*Math.sqrt(c*c*c)),L=Math.acos(v)/3,w=Math.sqrt(c),W=Math.cos(L),V=(-l-2*w*W)/(3*s),b=(-l+w*(W+g*Math.sin(L)))/(3*s),X=(-l+w*(W-g*Math.sin(L)))/(3*s);V>=0&&1>=V&&(r[u++]=V),b>=0&&1>=b&&(r[u++]=b),X>=0&&1>=X&&(r[u++]=X)}}return u}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,d=0;if(t(l)){if(i(s)){var c=-h/s;c>=0&&1>=c&&(r[d++]=c)}}else{var m=s*s-4*l*h;if(t(m))r[0]=-s/(2*l);else if(m>0){var p=Math.sqrt(m),c=(-s+p)/(2*l),u=(-s-p)/(2*l);c>=0&&1>=c&&(r[d++]=c),u>=0&&1>=u&&(r[d++]=u)}}return d}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,d=(l-s)*a+s,c=(d-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=c,o[4]=c,o[5]=d,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,d,c){var m,p=.005,u=1/0;y[0]=h,y[1]=d;for(var g=0;1>g;g+=.05){b[0]=n(e,i,o,s,g),b[1]=n(t,a,r,l,g);var f=V.distSquare(y,b);u>f&&(m=g,u=f)}u=1/0;for(var x=0;32>x&&!(U>p);x++){var k=m-p,v=m+p;b[0]=n(e,i,o,s,k),b[1]=n(t,a,r,l,k);var f=V.distSquare(b,y);if(k>=0&&u>f)m=k,u=f;else{_[0]=n(e,i,o,s,v),_[1]=n(t,a,r,l,v);var L=V.distSquare(_,y);1>=v&&u>L?(m=v,u=L):p*=.5}}return c&&(c[0]=n(e,i,o,s,m),c[1]=n(t,a,r,l,m)),Math.sqrt(u)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function d(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function c(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,d=0;if(t(s)){if(i(l)){var c=-h/l;c>=0&&1>=c&&(r[d++]=c)}}else{var m=l*l-4*s*h;if(t(m)){var c=-l/(2*s);c>=0&&1>=c&&(r[d++]=c)}else if(m>0){var p=Math.sqrt(m),c=(-l+p)/(2*s),u=(-l-p)/(2*s);c>=0&&1>=c&&(r[d++]=c),u>=0&&1>=u&&(r[d++]=u)}}return d}function m(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function p(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function u(e,t,i,n,a,o,r,s,l){var d,c=.005,m=1/0;y[0]=r,y[1]=s;for(var p=0;1>p;p+=.05){b[0]=h(e,i,a,p),b[1]=h(t,n,o,p);var u=V.distSquare(y,b);m>u&&(d=p,m=u)}m=1/0;for(var g=0;32>g&&!(U>c);g++){var f=d-c,x=d+c;b[0]=h(e,i,a,f),b[1]=h(t,n,o,f);var u=V.distSquare(b,y);if(f>=0&&m>u)d=f,m=u;else{_[0]=h(e,i,a,x),_[1]=h(t,n,o,x);var k=V.distSquare(_,y);1>=x&&m>k?(d=x,m=k):c*=.5}}return l&&(l[0]=h(e,i,a,d),l[1]=h(t,n,o,d)),Math.sqrt(m)}var V=e("./vector"),U=1e-4,g=Math.sqrt(3),f=1/3,y=V.create(),b=V.create(),_=V.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:d,quadraticRootAt:c,quadraticExtremum:m,quadraticSubdivide:p,quadraticProjectPoint:u}}),define("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),define("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;et)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this.__needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),define("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1); - -},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),define("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","zrender/shape/Polyline","zrender/shape/ShapeBundle","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","../component/base","../layout/EdgeBundling","zrender/tool/util","zrender/tool/area"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){u.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType="stroke",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth="icon"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=d.get(e.dragged,"data")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e("zrender/shape/Image"),a=e("../util/shape/Icon"),o=e("../util/shape/MarkLine"),r=e("../util/shape/Symbol"),s=e("zrender/shape/Polyline"),l=e("zrender/shape/ShapeBundle"),h=e("../config"),d=e("../util/ecData"),c=e("../util/ecAnimation"),m=e("../util/ecEffect"),p=e("../util/accMath"),u=e("../component/base"),V=e("../layout/EdgeBundling"),U=e("zrender/tool/util"),g=e("zrender/tool/area");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=d.get(n,"seriesIndex"),r=d.get(n,"dataIndex"),s=this.series,l=this.component.legend;if(-1===r){if(d.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:d.get(a,"value"),name:d.get(a,"name")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var c=!1,m=s[o].data,u=0,V=m.length;V>u;u++)m[u].name===i.name&&"-"===m[u].value&&(s[o].data[u].value=i.value,c=!0);!c&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||"-",null!=i.value?(s[o].data[r].value="-"!=i.value?p.accAdd(s[o].data[r].value,d.get(a,"value")):d.get(a,"value"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+d.get(a,"name"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]="-"!=i?p.accAdd(s[o].data[r],d.get(a,"value")):d.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var U=this;setTimeout(function(){U.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=d.get(i,"seriesIndex"),a=d.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l="__kener__stack__",d=this.component.legend,c=[],m=0,p=0,u=e.length;u>p;p++){if(t=o[e[p]],n=t.name,this._sIndex2ShapeMap[e[p]]=this._sIndex2ShapeMap[e[p]]||this.query(t,"symbol")||this._symbol[p%this._symbol.length],d){if(this.selectedMap[n]=d.isSelected(n),this._sIndex2ColorMap[e[p]]=d.getColor(n),a=d.getItemShape(n)){var V=a.style;if(this.type==h.CHART_TYPE_LINE)V.iconType="legendLineIcon",V.symbol=this._sIndex2ShapeMap[e[p]];else if(t.itemStyle.normal.barBorderWidth>0){var U=a.highlightStyle;V.brushType="both",V.x+=1,V.y+=1,V.width-=2,V.height-=2,V.strokeColor=U.strokeColor=t.itemStyle.normal.barBorderColor,U.lineWidth=3}d.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[p]]=this.zr.getColor(e[p]);this.selectedMap[n]&&(i=t.stack||l+e[p],null==s[i]?(s[i]=r,c[r]=[e[p]],r++):c[s[i]].push(e[p])),m=Math.max(m,t.data.length)}return{locationMap:c,maxDataLength:m}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"",d=this.component.grid,c=e[l];if("-1"!=i.indexOf("x")){c["counter"+h]>0&&(c["average"+h]=c["sum"+h]/c["counter"+h]);var m=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(c["average"+h]);c["averageLine"+h]=[[m,d.getYend()],[m,d.getY()]],c["minLine"+h]=[[c["minX"+h],d.getYend()],[c["minX"+h],d.getY()]],c["maxLine"+h]=[[c["maxX"+h],d.getYend()],[c["maxX"+h],d.getY()]],c.isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){c["counter"+h]>0&&(c["average"+h]=c["sum"+h]/c["counter"+h]);var p=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(c["average"+h]);c["averageLine"+h]=[[d.getX(),p],[d.getXend(),p]],c["minLine"+h]=[[d.getX(),c["minY"+h]],[d.getXend(),c["minY"+h]]],c["maxLine"+h]=[[d.getX(),c["maxY"+h]],[d.getXend(),c["maxY"+h]]],c.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{};if(r.show){var d=e.style;d.text=this._getLabelText(t,i,n,"normal"),d.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,d.textColor=l.color,d.textFont=this.getFont(l),d.textAlign=l.align,d.textBaseline=l.baseline}if(s.show){var c=e.highlightStyle;c.text=this._getLabelText(t,i,n,"emphasis"),c.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,c.textColor=h.color,c.textFont=this.getFont(h),c.textAlign=h.align,c.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=this.getDataFromOption(t,"-");return a?"function"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):"string"==typeof a?a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+" , "+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=U.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||g.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var d=l[r];d.zlevel=a.zlevel,d.z=a.z+1;for(var c in n)d[c]=U.clone(n[c]);this.shapeList.push(d)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=U.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||"max"!==s.type&&"min"!==s.type&&"average"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[U.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value="average"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],"markLine.precision")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var d=this._markLine(e,a),c=a.large;if(c){var m=new l({style:{shapeList:d}}),p=d[0];if(p){U.merge(m.style,p.style),U.merge(m.highlightStyle={},p.highlightStyle),m.style.brushType="stroke",m.zlevel=n.zlevel,m.z=n.z+1,m.hoverable=!1;for(var u in i)m[u]=U.clone(i[u])}this.shapeList.push(m),this.zr.addShape(m),m._mark="largeLine";var V=a.effect;V.show&&(m.effect=V)}else{for(var o=0,r=d.length;r>o;o++){var g=d[o];g.zlevel=n.zlevel,g.z=n.z+1;for(var u in i)g[u]=U.clone(i[u]);this.shapeList.push(g)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=d.length;r>o;o++)this.zr.addShape(d[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;U.merge(U.merge(t,U.clone(this.ecTheme.markPoint||{})),U.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,c,m,p=[],u=t.data,V=n.dataRange,g=n.legend,f=this.zr.getWidth(),y=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark="largePoint",a&&p.push(a);else for(var b=0,_=u.length;_>b;b++)null!=u[b].x&&null!=u[b].y&&(r=null!=u[b].value?u[b].value:"",g&&(o=g.getColor(i.name)),V&&(o=isNaN(r)?o:V.getColor(r),s=[u[b],t],l=this.deepQuery(s,"itemStyle.normal.color")||o,c=this.deepQuery(s,"itemStyle.emphasis.color")||l,null==l&&null==c)||(o=null==o?this.zr.getColor(e):o,u[b].tooltip=u[b].tooltip||t.tooltip||{trigger:"item"},u[b].name=null!=u[b].name?u[b].name:"",u[b].value=r,a=this.getSymbolShape(t,e,u[b],b,u[b].name,this.parsePercent(u[b].x,f),this.parsePercent(u[b].y,y),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",m=this.deepMerge([u[b],t],"effect"),m.show&&(a.effect=m),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(u[b])),d.pack(a,i,e,u[b],b,u[b].name,r),p.push(a)));return p},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;U.merge(U.merge(n,U.clone(this.ecTheme.markLine||{})),U.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,"symbol"),e(n,"symbolSize"),e(n,"symbolRotate");for(var c=n.data,m=[],p=this.zr.getWidth(),u=this.zr.getHeight(),g=0;gg;g++){var I=m[g],S=I.rawEdge||I,f=S.rawData,x=null!=f.value?f.value:"",K=this.getMarkLineShape(n,i,f,g,I.points,L,S.color);K._mark="line";var C=this.deepMerge([f[0],f[1],n],"effect");C.show&&(K.effect=C,K.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(K._geo=[this.getMarkGeo(f[0]),this.getMarkGeo(f[1])]),d.pack(K,a,i,f[0],g,f[0].name+(""!==f[1].name?" > "+f[1].name:""),x),W.push(K)}return W}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,c,m,p){var u=[i,e],V=this.getDataFromOption(i,"-");h=this.deepQuery(u,"symbol")||h;var U=this.deepQuery(u,"symbolSize");U="function"==typeof U?U(V):U,"number"==typeof U&&(U=[U,U]);var g=this.deepQuery(u,"symbolRotate"),f=this.deepMerge(u,"itemStyle.normal"),y=this.deepMerge(u,"itemStyle.emphasis"),b=null!=f.borderWidth?f.borderWidth:f.lineStyle&&f.lineStyle.width;null==b&&(b=h.match("empty")?2:0);var _=null!=y.borderWidth?y.borderWidth:y.lineStyle&&y.lineStyle.width;null==_&&(_=b+2);var x=this.getItemStyleColor(f.color,t,o,i),k=this.getItemStyleColor(y.color,t,o,i),v=U[0],L=U[1],w=new a({style:{iconType:h.replace("empty","").toLowerCase(),x:s-v,y:l-L,width:2*v,height:2*L,brushType:"both",color:h.match("empty")?m:x||c,strokeColor:f.borderColor||x||c,lineWidth:b},highlightStyle:{color:h.match("empty")?m:k||x||c,strokeColor:y.borderColor||f.borderColor||k||x||c,lineWidth:_},clickable:this.deepQuery(u,"clickable")});return h.match("image")&&(w.style.image=h.replace(new RegExp("^image:\\/\\/"),""),w=new n({style:w.style,highlightStyle:w.highlightStyle,clickable:this.deepQuery(u,"clickable")})),null!=g&&(w.rotation=[g*Math.PI/180,s,l]),h.match("star")&&(w.style.iconType="star",w.style.n=h.replace("empty","").replace("star","")-0||5),"none"===h&&(w.invisible=!0,w.hoverable=!1),w=this.addLabel(w,e,i,r,p),h.match("empty")&&(null==w.style.textColor&&(w.style.textColor=w.style.strokeColor),null==w.highlightStyle.textColor&&(w.highlightStyle.textColor=w.highlightStyle.strokeColor)),d.pack(w,e,t,i,o,r),w._x=s,w._y=l,w._dataIndex=o,w._seriesIndex=t,w},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:"-",d=null!=i[1].value?i[1].value:"-",c=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],m=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];m[0]="function"==typeof m[0]?m[0](h):m[0],m[1]="function"==typeof m[1]?m[1](d):m[1];var p=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],u=[i[0],i[1],e],V=this.deepMerge(u,"itemStyle.normal");V.color=this.getItemStyleColor(V.color,t,n,i);var U=this.deepMerge(u,"itemStyle.emphasis");U.color=this.getItemStyleColor(U.color,t,n,i);var g=V.lineStyle,f=U.lineStyle,y=g.width;null==y&&(y=V.borderWidth);var b=f.width;null==b&&(b=null!=U.borderWidth?U.borderWidth:y+2);var _=this.deepQuery(u,"smoothness");this.deepQuery(u,"smooth")||(_=0);var x=r?s:o,k=new x({style:{symbol:c,symbolSize:m,symbolRotate:p,brushType:"both",lineType:g.type,shadowColor:g.shadowColor||g.color||V.borderColor||V.color||l,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:V.color||l,strokeColor:g.color||V.borderColor||V.color||l,lineWidth:y,symbolBorderColor:V.borderColor||V.color||l,symbolBorder:V.borderWidth},highlightStyle:{shadowColor:f.shadowColor,shadowBlur:f.shadowBlur,shadowOffsetX:f.shadowOffsetX,shadowOffsetY:f.shadowOffsetY,color:U.color||V.color||l,strokeColor:f.color||g.color||U.borderColor||V.borderColor||U.color||V.color||l,lineWidth:b,symbolBorderColor:U.borderColor||V.borderColor||U.color||V.color||l,symbolBorder:null==U.borderWidth?V.borderWidth+2:U.borderWidth},clickable:this.deepQuery(u,"clickable")}),v=k.style;return r?(v.pointList=a,v.smooth=_):(v.xStart=a[0][0],v.yStart=a[0][1],v.xEnd=a[1][0],v.yEnd=a[1][1],v.curveness=_,k.updatePoints(k.style)),k=this.addLabel(k,e,i[0],i[0].name+" : "+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],d=this.component,c=t.data,m=d.dataRange,p=d.legend,u=[c[0],t];if(p&&(n=p.getColor(h.name)),!m||(a=null!=c[0].value?c[0].value:"",n=isNaN(a)?n:m.getColor(a),o=this.deepQuery(u,"itemStyle.normal.color")||n,s=this.deepQuery(u,"itemStyle.emphasis.color")||o,null!=o||null!=s)){n=this.deepMerge(u,"itemStyle.normal").color||n;var V=this.deepQuery(u,"symbol")||"circle";V=V.replace("empty","").replace(/\d/g,""),l=this.deepMerge([c[0],t],"effect");var U=window.devicePixelRatio||1;return i=new r({style:{pointList:c,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*U,size:this.deepQuery(u,"symbolSize"),iconType:V,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,"animationDurationUpdate"):this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},d={};if(this.option.animation&&!this.option.renderAsImage&&a.lengthc;c++)t=this._getAnimationKey(n[c]),t.match("undefined")?this.zr.delShape(n[c].id):(t+=n[c].type,l[t]?this.zr.delShape(n[c].id):l[t]=n[c]);for(var c=0,m=a.length;m>c;c++)t=this._getAnimationKey(a[c]),t.match("undefined")?this.zr.addShape(a[c]):(t+=a[c].type,d[t]=a[c]);for(t in l)d[t]||this.zr.delShape(l[t].id);for(t in d)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],d[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:r/2,this._animateMod(!1,d[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var c=0,m=a.length;m>c;c++)this.zr.addShape(a[c])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?d.get(e,"seriesIndex")+"_"+d.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===h.CHART_TYPE_RADAR?d.get(e,"special"):""):d.get(e,"seriesIndex")+"_"+d.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case"polyline":case"half-smooth-polygon":c.pointList(this.zr,e,t,i,n);break;case"rectangle":c.rectangle(this.zr,e,t,i,n);break;case"image":case"icon":c.icon(this.zr,e,t,i,n,a);break;case"candle":o?this.zr.addShape(t):c.candle(this.zr,e,t,i,n);break;case"ring":case"sector":case"circle":o?"sector"===t.type?c.sector(this.zr,e,t,i,n):this.zr.addShape(t):c.ring(this.zr,e,t,i+(d.get(t,"dataIndex")||0)%20*100,n);break;case"text":c.text(this.zr,e,t,i,n);break;case"polygon":o?c.pointList(this.zr,e,t,i,n):c.polygon(this.zr,e,t,i,n);break;case"ribbon":c.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":c.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":c.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":c.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&m[i._mark]&&(m[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;il;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&d.get(o[r][s],"seriesIndex")==e&&d.get(o[r][s],"name")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},U.inherits(i,u),i}),define("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),define("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function d(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function c(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function u(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function V(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function U(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function g(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function f(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function y(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function b(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function _(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function k(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function v(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function L(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function w(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function W(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function X(e){S.call(this,e)}var I=e("zrender/tool/util"),S=e("zrender/shape/Base");return X.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:d,forceChart:c,chordChart:m,stackChart:p,tiledChart:u,dataView:V,saveAsImage:U,cross:g,circle:f,rectangle:y,triangle:b,diamond:_,arrow:x,star:k,heart:v,droplet:L,pin:w,image:W},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*("pin"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},I.inherits(X,S),X}),define("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BezierCurve","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/curve"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BezierCurve"),s=new r({}),l=e("zrender/tool/area"),h=e("zrender/shape/util/dashedLineTo"),d=e("zrender/tool/util"),c=e("zrender/tool/curve");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||"solid"; - -if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case"dashed":n=[5,5];break;case"dotted":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if("solid"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*("dashed"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace("empty","").toLowerCase();t.symbol[i].match("empty")&&(e.fillStyle="#fff");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,d=0===i?r:l,m=t.curveness||0,p=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(p=p/180*Math.PI,"arrow"==a&&0===p)if(0===m){var u=0===i?-1:1;p=Math.PI/2+Math.atan2(u*(l-r),u*(s-o))}else{var V=t.cpX1,U=t.cpY1,g=c.quadraticDerivativeAt,f=g(o,V,s,i),y=g(r,U,l,i);p=Math.PI/2+Math.atan2(y,f)}e.translate(h,d),0!==p&&e.rotate(p);var b=t.symbolSize[i];n.prototype.buildPath(e,{x:-b,y:-b,width:2*b,height:2*b,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},d.inherits(t,i),t}),define("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,d=Math.ceil(n/h),c=i[0]instanceof Array,m=t.size?t.size:2,p=m,u=m/2,V=2*Math.PI,U=0;d>U;U++){e.beginPath(),a=U*h,o=a+h,o=o>n?n:o;for(var g=a;o>g;g++)if(t.random&&(r=t["randomMap"+g%20]/100,p=m*r*r,u=p/2),c?(s=i[g][0],l=i[g][1]):(s=i[g].x,l=i[g].y),3>p)e.rect(s-u,l-u,p,p);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,u,0,V,!0);break;case"diamond":e.moveTo(s,l-u),e.lineTo(s+u/3,l-u/3),e.lineTo(s+u,l),e.lineTo(s+u/3,l+u/3),e.lineTo(s,l+u),e.lineTo(s-u/3,l+u/3),e.lineTo(s-u,l),e.lineTo(s-u/3,l-u/3),e.lineTo(s,l-u);break;default:e.rect(s-u,l-u,p,p)}if(e.closePath(),d-1>U)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),define("zrender/shape/Polyline",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"polyline",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,d=0;o-1>d;d++)s=r[2*d],l=r[2*d+1],h=n[d+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(n=i(n),o=n.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var c=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var d=1;o>d;d++)a(e,n[d-1][0],n[d-1][1],n[d][0],n[d][1],c)}}else{e.moveTo(n[0][0],n[0][1]);for(var d=1;o>d;d++)e.lineTo(n[d][0],n[d][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),define("zrender/shape/ShapeBundle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:"shape-bundle",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;oh;h++)o[h]=[r[h][0],l];else for(var d=r[0][0],h=0;s>h;h++)o[h]=[d,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=u.clone(r[s-1]),o[s-2]=u.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var c=o.length;i.style.pointList=c==s?o:s>c?o.concat(r.slice(c)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,d=r.height,c=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(c[0]!=t.position[0]||c[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:c}).start(o),n.__animating=!0,e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:d}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,"").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function c(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||"QuinticOut")}}function m(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function p(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,d=o.yEnd;if(o.curveness>0){i.updatePoints(o);var c={p:0},m=o.cpX1,p=o.cpY1,u=[],U=[],g=V.quadraticSubdivide;e.animation.animate(c).when(n,{p:1}).during(function(){g(s,m,h,c.p,u),g(l,p,d,c.p,U),o.cpX1=u[1],o.cpY1=U[1],o.xEnd=u[2],o.yEnd=U[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,"style").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:d}).done(r).start(a)}var u=e("zrender/tool/util"),V=e("zrender/tool/curve");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:d,icon:c,line:m,markline:p}}),define("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","zrender/tool/curve","../util/shape/Icon","../util/shape/Symbol","zrender/shape/ShapeBundle","zrender/shape/Polyline","zrender/tool/vector","zrender/tool/env"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,d=r.shadowColor||l,c=r.scaleSize,m=r.bounceDistance,p="undefined"!=typeof r.shadowBlur?r.shadowBlur:c;"image"!==i.type?(a=new h({zlevel:n,style:{brushType:"stroke",iconType:"droplet"!=i.style.iconType?i.style.iconType:"circle",x:p+1,y:p+1,n:i.style.n,width:i.style._width*c,height:i.style._height*c,lineWidth:1,strokeColor:l,shadowColor:d,shadowBlur:p},draggable:!1,hoverable:!1}),"pin"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),u&&(a.style.image=e.shapeToImage(a,a.style.width+2*p+2,a.style.height+2*p+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var V="image"!==i.type?window.devicePixelRatio||1:1,U=(a.style.width/V-i.style._width)/2;a.style.x=i.style._x-U,a.style.y=i.style._y-U,"pin"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var g=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var f=a.style.x+a.style.width/2/V,y=a.style.y+a.style.height/2/V;"scale"===r.type?(e.modShape(a.id,{scale:[.1,.1,f,y]}),e.animate(a.id,"",r.loop).when(g,{scale:[1,1,f,y]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,"style",r.loop).when(g,{y:a.style.y-m}).when(2*g,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,c=new d({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(c),e.addShape(c),e.modShape(i.id,{invisible:!0});for(var m=Math.round(100*a.period),p={},u={},V=0;20>V;V++)c.style["randomMap"+V]=0,p={},p["randomMap"+V]=100,u={},u["randomMap"+V]=0,c.style["randomMap"+V]=100*Math.random(),e.animate(c.id,"style",!0).when(m,p).when(2*m,u).when(3*m,p).when(4*m,p).delay(Math.random()*m*V).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,d=s.color||h.strokeColor||h.color,c=s.shadowColor||h.strokeColor||d,V=h.lineWidth*s.scaleSize,U="undefined"!=typeof s.shadowBlur?s.shadowBlur:V,g=new r({zlevel:n,style:{x:U,y:U,r:V,color:d,shadowColor:c,shadowBlur:U},hoverable:!1}),f=0;if(u&&!a){var n=g.zlevel;g=e.shapeToImage(g,2*(V+U),2*(V+U)),g.zlevel=n,g.hoverable=!1,f=U}a||(o.clone(i,g),g.position=i.position,t.push(g),e.addShape(g));var y=function(){a||(i.effect.show=!1,e.delShape(g.id)),g.effectAnimator=null};if(i instanceof m){for(var b=[0],_=0,x=h.pointList,k=h.controlPointList,v=1;v0){var z=h.cpX1-f,A=h.cpY1-f;g.effectAnimator=e.animation.animate(g,{loop:s.loop}).when(E,{p:1}).during(function(t,i){g.style.x=l.quadraticAt(I,z,K,i),g.style.y=l.quadraticAt(S,A,C,i),a||e.modShape(g)}).done(y).start()}else g.effectAnimator=e.animation.animate(g.style,{loop:s.loop}).when(E,{x:K,y:C}).during(function(){a||e.modShape(g)}).done(y).start();g.effectAnimator.duration=E}return g}function a(e,t,i,a){var o=new c({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],d=0;dl&&(l=p.duration),0===d&&(o.style.color=m.style.color,o.style.shadowBlur=m.style.shadowBlur,o.style.shadowColor=m.style.shadowColor),h.push(p)}t.push(o),e.addShape(o);var u=function(){for(var e=0;e=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ("zlevel")},getZBase:function(){return this._getZ("z")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),define("echarts/layout/EdgeBundling",["require","../data/KDTree","zrender/tool/vector"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]0&&t(e[o],n[a-1])||(n[a++]=m(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++b&&(b=L,_=v,c(f,V),c(g,u),y=U)}if(_){s+=b;var w;_.group||(w=new a,o.push(w),w.addEdge(_)),w=_.group,c(w.mp0,g),c(w.mp1,f),w.ink=y,_.group.addEdge(d)}else{var w=new a;o.push(w),c(w.mp0,d.getStartPoint()),c(w.mp1,d.getEndPoint()),w.ink=d.ink,w.addEdge(d)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=d(e[0],a)+d(a,o)+d(o,t[0])+d(e[1],a)+d(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;rl;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var c=Math.cos(this.maxTurningAngle),m=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var p=0,u=0;ug){s.scaleAndAdd(i,o,e,U*g);var f=d(i,V),y=f/m;s.scaleAndAdd(n,i,e,-y);var b=h(n,o);b>p&&(p=b,s.copy(l,n))}}}}()},o}),define("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var d=a/o,c=-a/2,m=r+l*n(c),p=s+l*i(c);c+=d;var u=t.pointList=[];u.push([m,p]);for(var V,U=0,g=2*o-1;g>U;U++)V=U%2===0?h:l,u.push([r+V*n(c),s+V*i(c)]),c+=d;u.push([m,p]),e.moveTo(u[0][0],u[0][1]);for(var U=0;Ur;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],d=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-d),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+d)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),define("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),define("zrender/shape/BezierCurve",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return i.prototype={type:"bezier-curve",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),"undefined"!=typeof t.cpX2&&"undefined"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;"undefined"!=typeof o&&"undefined"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e("../tool/util").inherits(i,t),i}),define("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var d=!0,c=0;h>c;++c)d?t.moveTo(i,n):t.lineTo(i,n),d=!d,i+=s,n+=l;t.lineTo(a,o)}}),define("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,d=o.length,c=0;d>c;c++)s=r[2*c],l=r[2*c+1],h=o[(c+1)%d],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var m=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=m,e.moveTo(o[0][0],o[0][1]);for(var c=1,p=o.length;p>c;c++)a(e,o[c-1][0],o[c-1][1],o[c][0],o[c][1],m);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],m)}}else{e.moveTo(o[0][0],o[0][1]);for(var c=1,p=o.length;p>c;c++)e.lineTo(o[c][0],o[c][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]i&&(i=o[r][0]),o[r][1]a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),define("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),define("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,d,c,m=s/(l-1)*(n?a:a-1),p=Math.floor(m),u=m-p,V=e[p%a];n?(h=e[(p-1+a)%a],d=e[(p+1)%a],c=e[(p+2)%a]):(h=e[0===p?p:p-1],d=e[p>a-2?a-1:p+1],c=e[p>a-3?a-1:p+2]);var U=u*u,g=u*U;o.push([t(h[0],V[0],d[0],c[0],u,U,g),t(h[1],V[1],d[1],c[1],u,U,g)])}return o}}),define("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],d=[],c=[],m=[],p=!!a;if(p){s=[1/0,1/0],l=[-(1/0),-(1/0)]; - -for(var u=0,V=e.length;V>u;u++)t.min(s,s,e[u]),t.max(l,l,e[u]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var u=0,V=e.length;V>u;u++){var o,r,U=e[u];if(n)o=e[u?u-1:V-1],r=e[(u+1)%V];else{if(0===u||u===V-1){h.push(t.clone(e[u]));continue}o=e[u-1],r=e[u+1]}t.sub(d,r,o),t.scale(d,d,i);var g=t.distance(U,o),f=t.distance(U,r),y=g+f;0!==y&&(g/=y,f/=y),t.scale(c,d,-g),t.scale(m,d,f);var b=t.add([],U,c),_=t.add([],U,m);p&&(t.max(b,b,s),t.min(b,b,l),t.max(_,_,s),t.min(_,_,l)),h.push(b),h.push(_)}return n&&h.push(t.clone(h.shift())),h}}),define("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),define("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),define("echarts/data/KDTree",["require","./quickSelect"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e("./quickSelect"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),d=0;for(a.data!==e&&(d++,this._addNearest(d,h,a)),e.array[a.axis]h,m=!1;h*=h,(t>d||hd||hd&&d++,this._addNearest(d,h,a)),m=!0),c?(m&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(m&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;d>l;l++)n[l]=s[l].node.data;return n.length=d,n},n}),define("echarts/data/quickSelect",["require"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),define("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonRefresh.setAttribute("type","button"),this._buttonClose=document.createElement("button"),this._buttonClose.setAttribute("type","button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='

'+(t[0]||this._lang[0])+"

";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");"function"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement("div"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._buttonRefresh.style.cssText="display:none",this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}var h,d=this.option.series;for(e=0,a=d.length;a>e;e++){for(r=[],t=0,i=d[e].data.length;i>t;t++)o=d[e].data[t],h=d[e].type==n.CHART_TYPE_PIE||d[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",d[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(", ")),r.push(h+this.getDataFromOption(o));l+=(d[e].name||"-")+" : \n",l+=r.join(d[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof e){for(var t=this._textArea.value.split("\n"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),""!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],d=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[d].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;d++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[d].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;d++}var c=this.option.series;for(t=0,o=c.length;o>t;t++)if(d++,c[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=c[t].data.length;a>i;i++)s=e[d],l=s.replace(" ","").split(","),"undefined"!=typeof c[t].data[i].value?c[t].data[i].value=l:c[t].data[i]=l,d++;else{s=e[d].split(",");for(var i=0,a=c[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof c[t].data[i].value?c[t].data[i].value=l:c[t].data[i]=l;d++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),define("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),define("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var d=t.cos(s),c=t.sin(s);e.moveTo(d*o+n,c*o+a),e.lineTo(d*r+n,c*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,d=e.r0||0,c=e.r,m=t.degreeToRadian(e.startAngle),p=t.degreeToRadian(e.endAngle),u=e.clockWise;return u||(m=-m,p=-p),d>1?i.arc(a,h,d,m,p,!u,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,c,m,p,!u,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),define("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),define("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;sa&&(a=l[0]),l[1]r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l=2*Math.PI)return d[0]=e-i,d[1]=t-i,c[0]=e+i,void(c[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(d,r,s),a.max(c,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var m=o;o=n,n=m}for(var p=0;o>p;p+=Math.PI/2)p>n&&(l[0]=Math.cos(p)*i+e,l[1]=Math.sin(p)*i+t,a.min(d,l,d),a.max(c,l,c))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),define("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),define("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case"left":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:"round"};break;case"right":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:"round"}}var o=i.style;""!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),define("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"};var o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),define("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config");r.dataZoom={zlevel:0,z:4,show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",handleSize:8,showDetail:!0,realtime:!0};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var d,l=0,h=e.length;h>l;l++)if(d=e[l],d.type==r.CHART_TYPE_LINE||d.type==r.CHART_TYPE_BAR||d.type==r.CHART_TYPE_SCATTER||d.type==r.CHART_TYPE_K){for(var c=0,m=n.length;m>c;c++)if(n[c]==(d.xAxisIndex||0)){o.push(l);break}for(var c=0,m=a.length;m>c;c++)if(a[c]==(d.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&d.data&&this.getDataFromOption(d.data[0])instanceof Array&&(d.type==r.CHART_TYPE_SCATTER||d.type==r.CHART_TYPE_LINE||d.type==r.CHART_TYPE_BAR)&&o.push(l)}var p=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,u=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;p>u&&(p+=u,u=p-u,p-=u);var V=Math.round((u-p)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:p,end:u,start2:0,end2:100,size:V,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var d=this._originalData.yAxis,c=this._zoom.yAxisIndex,l=0,h=c.length;h>l;l++)i=Math.max(i,d[c[l]].length);for(var m,p=this._zoom.seriesIndex[0],u=this._originalData.series[p],V=Number.MIN_VALUE,U=Number.MAX_VALUE,l=0,h=u.length;h>l;l++)m=this.getDataFromOption(u[l],0),this.option.series[p].type==r.CHART_TYPE_K&&(m=m[1]),isNaN(m)&&(m=0),V=Math.max(V,m),U=Math.min(U,m);var g=V-U,f=[],y=e/(i-(i>1?1:0)),b=t/(i-(i>1?1:0)),_=1;"horizontal"==this.zoomOption.orient&&1>y?_=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>b&&(_=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=_)m=this.getDataFromOption(u[l],0),this.option.series[p].type==r.CHART_TYPE_K&&(m=m[1]),isNaN(m)&&(m=0),f.push("horizontal"==this.zoomOption.orient?[this._location.x+y*l,this._location.y+t-1-Math.round((m-U)/g*(t-10))]:[this._location.x+1+Math.round((m-U)/g*(e-10)),this._location.y+b*(h-l-1)]); - -"horizontal"==this.zoomOption.orient?(f.push([this._location.x+e,this._location.y+t]),f.push([this._location.x,this._location.y+t])):(f.push([this._location.x,this._location.y]),f.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:f,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:"",end:""};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:e.start,brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition="bottom",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="top"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e];"horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var d,c=0,m=t.length;m>c;c++)d=t[c].value||t[c],d[0]>=n&&d[0]<=a&&d[1]>=o&&d[1]<=r&&s.push(t[c]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=["xAxis","yAxis"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis";var d=this._zoom.seriesIndex[0],c=this.option.series[d][e+"Index"]||0,m=this.option[e][c].type,p=this._zoom.scatterMap[d][e.charAt(0)].min,u=this._zoom.scatterMap[d][e.charAt(0)].max,V=u-p;if("value"==m)return{start:p+V*this._zoom.start/100,end:p+V*this._zoom.end/100};if("time"==m){u=p+V*this._zoom.end/100,p+=V*this._zoom.start/100;var U=s.getAutoFormatter(p,u).formatter;return{start:s.format(U,p),end:s.format(U,u)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.xt.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),define("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.categoryAxis={zlevel:0,z:0,show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,d=Math.floor(.5/r);for(d=1>d?1:d,e=Math.floor(15/r);!h&&n>e;){e+=d,h=!0,a=Math.floor(r*e);for(var c=Math.floor((n-1)/e)*e;c>=0;c-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[c].textStyle)o=l.getTextWidth(this._getReformedLabel(c),this.getFont(s.merge(i[c].textStyle,this.option.axisLabel.textStyle)));else{var m=this._getReformedLabel(c)+"",p=(m.match(/\w/g)||"").length,u=m.length-p;o=p*t*2/3+u*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e="function"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l="function"==typeof n.interval?n.interval:"auto"==n.interval&&"function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:"auto"==n.interval?this._interval:n.interval-0+1,d=n.onGap,c=d?this.getGap()/2:"undefined"==typeof d&&this.option.boundaryGap?this.getGap()/2:0,m=c>0?-h:0;if(this.isHorizontal())for(var p,u="bottom"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,V=m;i>V;V+=h)(!l||l(V,t[V]))&&(p=this.subPixelOptimize(this.getCoordByIndex(V)+(V>=0?c:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:u,xEnd:p,yEnd:u+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var U,g="left"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,V=m;i>V;V+=h)(!l||l(V,t[V]))&&(U=this.subPixelOptimize(this.getCoordByIndex(V)-(V>=0?c:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:g,yStart:U,xEnd:g+o,yEnd:U,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,d=o.textStyle,c="function"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var m,p;"bottom"==this.option.position?(m=this.grid.getYend()+l,p="top"):(m=this.grid.getY()-l,p="bottom");for(var u=0;a>u;u+=this._interval)c&&!c(u,i[u])||""===this._getReformedLabel(u)||(t=s.merge(i[u].textStyle||{},d),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(u),y:m,color:t.color,text:this._getReformedLabel(u),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||p}},r&&(e.style.textAlign=r>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var V,U;"left"==this.option.position?(V=this.grid.getX()-l,U="right"):(V=this.grid.getXend()+l,U="left");for(var u=0;a>u;u+=this._interval)c&&!c(u,i[u])||""===this._getReformedLabel(u)||(t=s.merge(i[u].textStyle||{},d),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoordByIndex(u),color:t.color,text:this._getReformedLabel(u),textFont:this.getFont(t),textAlign:t.align||U,textBaseline:t.baseline||0===u&&""!==this.option.name?"bottom":u==a-1&&""!==this.option.name?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,d=n.onGap,c=d?this.getGap()/2:"undefined"==typeof d&&this.option.boundaryGap?this.getGap()/2:0;if(i-=d||"undefined"==typeof d&&this.option.boundaryGap?1:0,this.isHorizontal())for(var m,p=this.grid.getY(),u=this.grid.getYend(),V=0;i>V;V+=this._interval)(!h||h(V,t[V]))&&(m=this.subPixelOptimize(this.getCoordByIndex(V)+c,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:m,yStart:p,xEnd:m,yEnd:u,strokeColor:s[V/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var U,g=this.grid.getX(),f=this.grid.getXend(),V=0;i>V;V+=this._interval)(!h||h(V,t[V]))&&(U=this.subPixelOptimize(this.getCoordByIndex(V)-c,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:g,yStart:U,xEnd:f,yEnd:U,strokeColor:s[V/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var d,c=this.grid.getY(),m=this.grid.getHeight(),p=this.grid.getX(),u=0;r>=u;u+=this._interval)s&&!s(u,t[u])&&r>u||(d=r>u?this.getCoordByIndex(u)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:p,y:c,width:d-p,height:m,color:n[u/this._interval%a]}},this.shapeList.push(new o(e)),p=d);else for(var V,U=this.grid.getX(),g=this.grid.getWidth(),f=this.grid.getYend(),u=0;r>=u;u+=this._interval)s&&!s(u,t[u])&&r>u||(V=r>u?this.getCoordByIndex(u)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:g,height:f-V,color:n[u/this._interval%a]}},this.shapeList.push(new o(e)),f=V)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),define("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../util/smartLogSteps","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.valueAxis={zlevel:0,z:0,show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,d=0;i>d;d++)l=this.subPixelOptimize(this.getCoord(t[d]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var c,m="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,d=0;i>d;d++)c=this.subPixelOptimize(this.getCoord(t[d]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:m,yStart:c,xEnd:m+o,yEnd:c,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var d=0;i>d;d++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[d]),y:l,color:"function"==typeof s.color?s.color(t[d]):s.color,text:this._valueLabel[d],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var c,m;"left"===this.option.position?(c=this.grid.getX()-o,m="right"):(c=this.grid.getXend()+o,m="left");for(var d=0;i>d;d++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoord(t[d]),color:"function"==typeof s.color?s.color(t[d]):s.color,text:this._valueLabel[d],textFont:this.getFont(s),textAlign:s.align||m,textBaseline:s.baseline||(0===d&&""!==this.option.name?"bottom":d===i-1&&""!==this.option.name?"top":"middle")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,d=this.grid.getY(),c=this.grid.getYend(),m=0;i>m;m++)h=this.subPixelOptimize(this.getCoord(t[m]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:d,xEnd:h,yEnd:c,strokeColor:s[m%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var p,u=this.grid.getX(),V=this.grid.getXend(),m=0;i>m;m++)p=this.subPixelOptimize(this.getCoord(t[m]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:u,yStart:p,xEnd:V,yEnd:p,strokeColor:s[m%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),d=0;a>=d;d++)r=a>d?this.getCoord(n[d]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[d%i]}},this.shapeList.push(new o(e)),h=r;else for(var c,m=this.grid.getX(),p=this.grid.getWidth(),u=this.grid.getYend(),d=0;a>=d;d++)c=a>d?this.getCoord(n[d]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:m,y:c,width:p,height:u-c,color:t[d%i]}},this.shapeList.push(new o(e)),u=c}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var d="log"!==this.option.type?this.option.boundaryGap:[0,0],c=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(c*d[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(c*d[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,d=n.length;d>h;h++)i=this.getDataFromOption(n[h]),"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,d=n.length;d>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,d=n.length;d>h;h++)for(var c=n[h].evolution,m=0,p=c.length;p>m;m++)e[a].push(s.getNewDate(c[m].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e("../util/smartLogSteps")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=ethis._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=ethis.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=ethis.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),define("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=d.length;l>s;s++)if(n=d[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=d[s].formatter,r=d[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),d=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(d)),e=e.replace("s",d)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var d=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),define("echarts/util/smartSteps",[],function(){function e(e){return w.log(S(e))/w.LN10}function t(e){return w.pow(10,e)}function i(e){return e===X(e)}function n(e,t,n,a){y=a||{},b=y.steps||v,_=y.secs||L,n=W(+n||0)%99,e=+e||0,t=+t||0,x=k=0,"min"in y&&(e=+y.min||0,x=1),"max"in y&&(t=+y.max||0,k=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&k)return f(e,t,n);if((n||5)>o){if(i(e)&&i(t))return p(e,t,n);if(0===o)return u(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),d=w.min(s.e,l.e,h.e);0===l.c?d=w.min(s.e,h.e):0===h.c&&(d=w.min(s.e,l.e)),r(s,{c:0,e:d}),r(l,s,1),r(h,s),a+=d,e=l.c,i=h.c;for(var c=(i-e)/n,m=t(a),p=0,u=[],V=n+1;V--;)u[V]=(e+c*V)*m;if(0>a){p=U(m),c=+(c*m).toFixed(p),e=+(e*m).toFixed(p),i=+(i*m).toFixed(p);for(var V=u.length;V--;)u[V]=u[V].toFixed(p),0===+u[V]&&(u[V]="0")}else e*=m,i*=m,c*=m;return _=0,b=0,y=0,{min:e,max:i,secs:n,step:c,fix:p,exp:a,pnts:u}}function o(n,a,o){a=W(a%10)||2,0>a&&(i(n)?a=(""+S(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=X(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?X(s):I(s),!s&&(r=0),(""+S(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?X(e.c):I(e.c))}function s(e,t,i){e.et[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+_.slice(-1),u=l((t-e)/h,b),U=o(t-e),f=o(e,-1,1),y=o(t,-1);if(r(U,u),r(f,u,1),r(y,u),n?s=c(f,y,h):h=d(f,y),i(e)&&i(t)&&e*t>=0){if(h>t-e)return p(e,t,h);h=m(e,t,n,f,y,h)}var v=V(e,t,f.c,y.c);return f.c=v[0],y.c=v[1],(x||k)&&g(e,t,f,y),a(f.c,y.c,h,y.e)}function d(e,i){for(var n,a,o,r,s=[],h=_.length;h--;)n=_[h],a=l((i.c-e.c)/n,b),a=a.c*t(a.e),o=X(e.c/a)*a,r=I(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function c(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,b),s=s.c*t(s.e),a=s*n,o=I(i.c/s)*s,r=o-a;var h=e.c-r,d=o-i.c,c=h-d;return c>1.1*s&&(c=W(c/s/2)*s,r+=c,o+=c),e.c=r,i.c=o,s}function m(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=X(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var d=l-(n-e);o.c=W(e-d/2),r.c=W(n+d/2),o.e=0,r.e=0}return s}function p(e,t,i){if(i=i||5,x)t=e+i;else if(k)e=t-i;else{var n=i-(t-e),o=W(e-n/2),r=W(t+n/2),s=V(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function u(e,t,i){i=i||5;var n=w.min(S(t/i),i)/2.1;return x?t=e+n:k?e=t-n:(e-=n,t+=n),h(e,t,i)}function V(e,t,i,n){return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function U(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function g(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(k){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function f(e,t,i){var n=i?[i]:_,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=W(t.c+i/2),a(t.c-i,t.c,i,t.e);S(t/s)<1e-6&&(t=0),S(e/s)<1e-6&&(e=0);var l,h,d,c=[[5,10],[10,2],[50,10],[100,2]],m=[],p=[],u=o(t-e,3),V=o(e,-1,1),U=o(t,-1);r(V,u,1),r(U,u),s=U.c-V.c,u.c=s;for(var g=n.length;g--;){i=n[g],l=I(s/i),h=l*i-s,d=3*(h+3),d+=2*(i-n[0]+2),i%5===0&&(d-=10);for(var f=c.length;f--;)l%c[f][0]===0&&(d/=c[f][1]);p[g]=[i,l,h,d].join(),m[g]={secs:i,step:l,delta:h,score:d}}return m.sort(function(e,t){return e.score-t.score}),m=m[0],V.c=W(V.c-m.delta/2),U.c=W(U.c+m.delta/2),a(V.c,U.c,m.secs,u.e)}var y,b,_,x,k,v=[10,20,25,50],L=[4,5,6],w=Math,W=w.round,X=w.floor,I=w.ceil,S=w.abs;return n}),define("echarts/util/smartLogSteps",["require","./number"],function(e){function t(e){return i(),U=e||{},n(),a(),[o(),i()][0]}function i(){m=U=f=V=y=b=g=_=p=u=null}function n(){p=U.logLabelBase,null==p?(u="plain",p=10,V=S):(p=+p,1>p&&(p=10),u="exponent",V=v(p)),g=U.splitNumber,null==g&&(g=E);var e=parseFloat(U.dataMin),t=parseFloat(U.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,m=U.logPositive,null==m&&(m=t>0||0===e),y=m?e:-t,b=m?t:-e,T>y&&(y=T),T>b&&(b=T)}function a(){function e(){g>d&&(g=d);var e=X(l(d/g)),t=W(l(d/e)),i=e*t,n=(i-m)/2,a=X(l(r-n));c(a-r)&&(a-=1),f=-a*V;for(var s=a;o>=s-e;s+=e)_.push(L(p,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*Ct&&a(l-1)+n(l-1)*C>o;)l--;f=-(a(e)*S+n(e)*K);for(var d=e;l>=d;d++){var c=a(d),m=n(d);_.push(L(10,c)*L(2,m))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return X(l(e/3))}_=[];var o=l(v(b)/V),r=l(v(y)/V),s=W(o),h=X(r),d=s-h,m=o-r;"exponent"===u?e():z>=d&&g>z?t():e()}function o(){for(var e=[],t=0,i=_.length;i>t;t++)e[t]=(m?1:-1)*_[t];!m&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:m,labelFormatter:r(),dataMappingMethods:n}}function r(){if("exponent"===u){var e=p,t=V;return function(i){if(!isFinite(parseFloat(i)))return"";var n="";return 0>i&&(i=-i,n="-"),n+e+d(v(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):""}}function s(){var e=m,t=f;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&T>i?i=T:!e&&i>-T&&(i=-T):i=T,i=w(i),(e?1:-1)*(v(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=T),e?L(I,i-t):-L(I,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}function d(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(A[a]||"")}return t.join("")}function c(e){return e>-T&&T>e}var m,p,u,V,U,g,f,y,b,_,x=e("./number"),k=Math,v=k.log,L=k.pow,w=k.abs,W=k.ceil,X=k.floor,I=k.E,S=k.LN10,K=k.LN2,C=K/S,T=1e-9,E=5,z=2,A={0:"⁰",1:"¹",2:"²",3:"³",4:"⁴",5:"⁵",6:"⁶",7:"⁷",8:"⁸",9:"⁹","-":"⁻"};return t}); \ No newline at end of file diff --git a/static/js/highcharts/adapters/standalone-framework.js b/static/js/highcharts/adapters/standalone-framework.js deleted file mode 100644 index 0d2d45768..000000000 --- a/static/js/highcharts/adapters/standalone-framework.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - Highcharts JS v4.0.1 (2014-04-24) - - Standalone Highcharts Framework - - License: MIT License -*/ -var HighchartsAdapter=function(){function o(c){function b(b,a,d){b.removeEventListener(a,d,!1)}function d(b,a,d){d=b.HCProxiedMethods[d.toString()];b.detachEvent("on"+a,d)}function a(a,c){var f=a.HCEvents,i,g,k,j;if(a.removeEventListener)i=b;else if(a.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(a,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b, -a,!1);else if(d.attachEvent){g=function(b){b.target=b.srcElement||window;a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent("on"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?b(this,c,h):this.attachEvent&&d(this,c,h)):(a(this,c),this.HCEvents[c]=[])):(a(this),this.HCEvents={})},trigger:function(b, -a){var d=this.HCEvents[b]||[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g=a.duration+this.startTime){this.now=this.end; -this.pos=this.state=1;this.update();b=this.options.curAnim[this.prop]=!0;for(h in a.curAnim)a.curAnim[h]!==!0&&(b=!1);b&&a.complete&&a.complete.call(e);a=!1}else e=c-this.startTime,this.state=e/a.duration,this.pos=a.easing(e,0,1,a.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),a=!0;return a}};this.animate=function(b,d,a){var e,h="",f,i,g;b.stopAnimation=!1;if(typeof a!=="object"||a===null)e=arguments,a={duration:e[2],easing:e[3],complete:e[4]};if(typeof a.duration!=="number")a.duration= -400;a.easing=Math[a.easing]||Math.easeInOutSine;a.curAnim=Highcharts.extend({},d);for(g in d)i=new n(b,a,g),f=null,g==="d"?(i.paths=c.init(b,b.d,d.d),i.toD=d.d,e=0,f=1):b.attr?e=b.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(b,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,b){return window.getComputedStyle(c,void 0).getPropertyValue(b)},getScript:function(c,b){var d=l.getElementsByTagName("head")[0],a=l.createElement("script");a.type="text/javascript"; -a.src=c;a.onload=b;d.appendChild(a)},inArray:function(c,b){return b.indexOf?b.indexOf(c):p.indexOf.call(b,c)},adapterRun:function(c,b){return parseInt(HighchartsAdapter._getStyle(c,b),10)},grep:function(c,b){return p.filter.call(c,b)},map:function(c,b){for(var d=[],a=0,e=c.length;a -1) { - events.splice(index, 1); - this.HCEvents[name] = events; - } - if (this.removeEventListener) { - removeOneEvent(this, name, fn); - } else if (this.attachEvent) { - IERemoveOneEvent(this, name, fn); - } - } else { - removeAllEvents(this, name); - this.HCEvents[name] = []; - } - } else { - removeAllEvents(this); - this.HCEvents = {}; - } - }, - - trigger: function (name, args) { - var events = this.HCEvents[name] || [], - target = this, - len = events.length, - i, - preventDefault, - fn; - - // Attach a simple preventDefault function to skip default handler if called - preventDefault = function () { - args.defaultPrevented = true; - }; - - for (i = 0; i < len; i++) { - fn = events[i]; - - // args is never null here - if (args.stopped) { - return; - } - - args.preventDefault = preventDefault; - args.target = target; - - // If the type is not set, we're running a custom event (#2297). If it is set, - // we're running a browser event, and setting it will cause en error in - // IE8 (#2465). - if (!args.type) { - args.type = name; - } - - - - // If the event handler return false, prevent the default handler from executing - if (fn.call(this, args) === false) { - args.preventDefault(); - } - } - } - }); - } - - return obj; -} - - -return { - /** - * Initialize the adapter. This is run once as Highcharts is first run. - */ - init: function (pathAnim) { - - /** - * Compatibility section to add support for legacy IE. This can be removed if old IE - * support is not needed. - */ - if (!doc.defaultView) { - this._getStyle = function (el, prop) { - var val; - if (el.style[prop]) { - return el.style[prop]; - } else { - if (prop === 'opacity') { - prop = 'filter'; - } - /*jslint unparam: true*/ - val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })]; - if (prop === 'filter') { - val = val.replace( - /alpha\(opacity=([0-9]+)\)/, - function (a, b) { - return b / 100; - } - ); - } - /*jslint unparam: false*/ - return val === '' ? 1 : val; - } - }; - this.adapterRun = function (elem, method) { - var alias = { width: 'clientWidth', height: 'clientHeight' }[method]; - - if (alias) { - elem.style.zoom = 1; - return elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10); - } - }; - } - - if (!Array.prototype.forEach) { - this.each = function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - } - - if (!Array.prototype.indexOf) { - this.inArray = function (item, arr) { - var len, - i = 0; - - if (arr) { - len = arr.length; - - for (; i < len; i++) { - if (arr[i] === item) { - return i; - } - } - } - - return -1; - }; - } - - if (!Array.prototype.filter) { - this.grep = function (elements, callback) { - var ret = [], - i = 0, - length = elements.length; - - for (; i < length; i++) { - if (!!callback(elements[i], i)) { - ret.push(elements[i]); - } - } - - return ret; - }; - } - - //--- End compatibility section --- - - - /** - * Start of animation specific code - */ - Fx = function (elem, options, prop) { - this.options = options; - this.elem = elem; - this.prop = prop; - }; - Fx.prototype = { - - update: function () { - var styles, - paths = this.paths, - elem = this.elem, - elemelem = elem.element; // if destroyed, it is null - - // Animating a path definition on SVGElement - if (paths && elemelem) { - elem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD)); - - // Other animations on SVGElement - } else if (elem.attr) { - if (elemelem) { - elem.attr(this.prop, this.now); - } - - // HTML styles - } else { - styles = {}; - styles[this.prop] = this.now + this.unit; - Highcharts.css(elem, styles); - } - - if (this.options.step) { - this.options.step.call(this.elem, this.now, this); - } - - }, - custom: function (from, to, unit) { - var self = this, - t = function (gotoEnd) { - return self.step(gotoEnd); - }, - i; - - this.startTime = +new Date(); - this.start = from; - this.end = to; - this.unit = unit; - this.now = this.start; - this.pos = this.state = 0; - - t.elem = this.elem; - - if (t() && timers.push(t) === 1) { - timerId = setInterval(function () { - - for (i = 0; i < timers.length; i++) { - if (!timers[i]()) { - timers.splice(i--, 1); - } - } - - if (!timers.length) { - clearInterval(timerId); - } - }, 13); - } - }, - - step: function (gotoEnd) { - var t = +new Date(), - ret, - done, - options = this.options, - elem = this.elem, - i; - - if (elem.stopAnimation || (elem.attr && !elem.element)) { // #2616, element including flag is destroyed - ret = false; - - } else if (gotoEnd || t >= options.duration + this.startTime) { - this.now = this.end; - this.pos = this.state = 1; - this.update(); - - this.options.curAnim[this.prop] = true; - - done = true; - for (i in options.curAnim) { - if (options.curAnim[i] !== true) { - done = false; - } - } - - if (done) { - if (options.complete) { - options.complete.call(elem); - } - } - ret = false; - - } else { - var n = t - this.startTime; - this.state = n / options.duration; - this.pos = options.easing(n, 0, 1, options.duration); - this.now = this.start + ((this.end - this.start) * this.pos); - this.update(); - ret = true; - } - return ret; - } - }; - - /** - * The adapter animate method - */ - this.animate = function (el, prop, opt) { - var start, - unit = '', - end, - fx, - args, - name; - - el.stopAnimation = false; // ready for new - - if (typeof opt !== 'object' || opt === null) { - args = arguments; - opt = { - duration: args[2], - easing: args[3], - complete: args[4] - }; - } - if (typeof opt.duration !== 'number') { - opt.duration = 400; - } - opt.easing = Math[opt.easing] || Math.easeInOutSine; - opt.curAnim = Highcharts.extend({}, prop); - - for (name in prop) { - fx = new Fx(el, opt, name); - end = null; - - if (name === 'd') { - fx.paths = pathAnim.init( - el, - el.d, - prop.d - ); - fx.toD = prop.d; - start = 0; - end = 1; - } else if (el.attr) { - start = el.attr(name); - } else { - start = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0; - if (name !== 'opacity') { - unit = 'px'; - } - } - - if (!end) { - end = parseFloat(prop[name]); - } - fx.custom(start, end, unit); - } - }; - }, - - /** - * Internal method to return CSS value for given element and property - */ - _getStyle: function (el, prop) { - return window.getComputedStyle(el, undefined).getPropertyValue(prop); - }, - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: function (scriptLocation, callback) { - // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script. - var head = doc.getElementsByTagName('head')[0], - script = doc.createElement('script'); - - script.type = 'text/javascript'; - script.src = scriptLocation; - script.onload = callback; - - head.appendChild(script); - }, - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray: function (item, arr) { - return arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item); - }, - - - /** - * A direct link to adapter methods - */ - adapterRun: function (elem, method) { - return parseInt(HighchartsAdapter._getStyle(elem, method), 10); - }, - - /** - * Filter an array - */ - grep: function (elements, callback) { - return emptyArray.filter.call(elements, callback); - }, - - /** - * Map an array - */ - map: function (arr, fn) { - var results = [], i = 0, len = arr.length; - - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - - return results; - }, - - /** - * Get the element's offset position, corrected by overflow:auto. Loosely based on jQuery's offset method. - */ - offset: function (el) { - var docElem = document.documentElement, - box = el.getBoundingClientRect(); - - return { - top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - }, - - /** - * Add an event listener - */ - addEvent: function (el, type, fn) { - augment(el).bind(type, fn); - }, - - /** - * Remove event added with addEvent - */ - removeEvent: function (el, type, fn) { - augment(el).unbind(type, fn); - }, - - /** - * Fire an event on a custom object - */ - fireEvent: function (el, type, eventArguments, defaultFunction) { - var e; - - if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) { - e = doc.createEvent('Events'); - e.initEvent(type, true, true); - e.target = el; - - Highcharts.extend(e, eventArguments); - - if (el.dispatchEvent) { - el.dispatchEvent(e); - } else { - el.fireEvent(type, e); - } - - } else if (el.HCExtended === true) { - eventArguments = eventArguments || {}; - el.trigger(type, eventArguments); - } - - if (eventArguments && eventArguments.defaultPrevented) { - defaultFunction = null; - } - - if (defaultFunction) { - defaultFunction(eventArguments); - } - }, - - washMouseEvent: function (e) { - return e; - }, - - - /** - * Stop running animation - */ - stop: function (el) { - el.stopAnimation = true; - }, - - /** - * Utility for iterating over an array. Parameters are reversed compared to jQuery. - * @param {Array} arr - * @param {Function} fn - */ - each: function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - } -}; -}()); diff --git a/static/js/highcharts/highcharts-3d.js b/static/js/highcharts/highcharts-3d.js deleted file mode 100644 index c797c3a7c..000000000 --- a/static/js/highcharts/highcharts-3d.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - Highcharts JS v4.0.1 (2014-04-24) - - (c) 2009-2013 Torstein Hønsi - - License: www.highcharts.com/license -*/ -(function(c){function x(e,a,b,d){var f,g,h;b*=n;a*=n;var i=[],j,o,t;b*=-1;j=d.x;o=d.y;t=(d.z===0?1.0E-4:d.z)*(d.vd||25);var y=k(b),v=l(b),m=k(a),q=l(a),r,u,s;c.each(e,function(a){r=a.x-j;u=a.y-o;s=a.z||0;f=v*r-y*s;g=-y*m*r-v*m*s+q*u;h=y*q*r+v*q*s+m*u;f=f*((t-h)/t)+j;g=g*((t-h)/t)+o;i.push({x:C(f),y:C(g),z:C(h)})});return i}function z(e,a,b,d,f,c,h,i){var j=[];return c>f&&c-f>m/2+1.0E-4?(j=j.concat(z(e,a,b,d,f,f+m/2,h,i)),j=j.concat(z(e,a,b,d,f+m/2,c,h,i))):cm/2+1.0E-4?(j=j.concat(z(e,a,b, -d,f,f-m/2,h,i)),j=j.concat(z(e,a,b,d,f-m/2,c,h,i))):(j=c-f,["C",e+b*l(f)-b*D*j*k(f)+h,a+d*k(f)+d*D*j*l(f)+i,e+b*l(c)+b*D*j*k(c)+h,a+d*k(c)-d*D*j*l(c)+i,e+b*l(c)+h,a+d*k(c)+i])}function F(e){if(this.chart.is3d()){var a=this.chart.options.plotOptions.column.grouping;a!==void 0&&!a&&this.group.zIndex!==void 0&&this.group.attr({zIndex:this.group.zIndex*10});if(this.userOptions.borderColor===void 0)this.options.borderColor=this.color;c.each(this.data,function(a){var d=a.options.borderColor||a.color||a.series.userOptions.borderColor; -a.options.borderColor=d;a.borderColor=d;a.pointAttr[""].stroke=d;a.pointAttr.hover.stroke=d;a.pointAttr.select.stroke=d})}e.apply(this,[].slice.call(arguments,1))}var m=Math.PI,n=m/180,k=Math.sin,l=Math.cos,C=Math.round,D=4*(Math.sqrt(2)-1)/3/(m/2);c.SVGRenderer.prototype.toLinePath=function(e,a){var b=[];c.each(e,function(a){b.push("L",a.x,a.y)});b[0]="M";a&&b.push("Z");return b};c.SVGRenderer.prototype.cuboid=function(e){var a=this.g(),e=this.cuboidPath(e);a.front=this.path(e[0]).attr({zIndex:e[3], -"stroke-linejoin":"round"}).add(a);a.top=this.path(e[1]).attr({zIndex:e[4],"stroke-linejoin":"round"}).add(a);a.side=this.path(e[2]).attr({zIndex:e[5],"stroke-linejoin":"round"}).add(a);a.fillSetter=function(a){var d=c.Color(a).brighten(0.1).get(),e=c.Color(a).brighten(-0.1).get();this.front.attr({fill:a});this.top.attr({fill:d});this.side.attr({fill:e});this.color=a;return this};a.opacitySetter=function(a){this.front.attr({opacity:a});this.top.attr({opacity:a});this.side.attr({opacity:a});return this}; -a.attr=function(a){a.shapeArgs||a.x?(a=this.renderer.cuboidPath(a.shapeArgs||a),this.front.attr({d:a[0],zIndex:a[3]}),this.top.attr({d:a[1],zIndex:a[4]}),this.side.attr({d:a[2],zIndex:a[5]})):c.SVGElement.prototype.attr.call(this,a);return this};a.animate=function(a,d,e){a.x&&a.y?(a=this.renderer.cuboidPath(a),this.front.attr({zIndex:a[3]}).animate({d:a[0]},d,e),this.top.attr({zIndex:a[4]}).animate({d:a[1]},d,e),this.side.attr({zIndex:a[5]}).animate({d:a[2]},d,e)):a.opacity?(this.front.animate(a, -d,e),this.top.animate(a,d,e),this.side.animate(a,d,e)):c.SVGElement.prototype.animate.call(this,a,d,e);return this};a.destroy=function(){this.front.destroy();this.top.destroy();this.side.destroy();return null};a.attr({zIndex:-e[3]});return a};c.SVGRenderer.prototype.cuboidPath=function(e){var a=e.x,b=e.y,d=e.z,c=e.height,g=e.width,h=e.depth,i=e.alpha,j=e.beta,a=[{x:a,y:b,z:d},{x:a+g,y:b,z:d},{x:a+g,y:b+c,z:d},{x:a,y:b+c,z:d},{x:a,y:b+c,z:d+h},{x:a+g,y:b+c,z:d+h},{x:a+g,y:b,z:d+h},{x:a,y:b,z:d+h}], -a=x(a,i,j,e.origin),e=["M",a[0].x,a[0].y,"L",a[7].x,a[7].y,"L",a[6].x,a[6].y,"L",a[1].x,a[1].y,"Z"],b=["M",a[3].x,a[3].y,"L",a[2].x,a[2].y,"L",a[5].x,a[5].y,"L",a[4].x,a[4].y,"Z"],d=["M",a[1].x,a[1].y,"L",a[2].x,a[2].y,"L",a[5].x,a[5].y,"L",a[6].x,a[6].y,"Z"],c=["M",a[0].x,a[0].y,"L",a[7].x,a[7].y,"L",a[4].x,a[4].y,"L",a[3].x,a[3].y,"Z"];return[["M",a[0].x,a[0].y,"L",a[1].x,a[1].y,"L",a[2].x,a[2].y,"L",a[3].x,a[3].y,"Z"],a[7].ya[2].y?b:[],a[6].x>a[1].x?d:a[7].x0?(a[0].z+a[7].z+a[6].z+a[1].z)/4:(a[3].z+a[2].z+a[5].z+a[4].z)/4,i>0?(a[1].z+a[2].z+a[5].z+a[6].z)/4:(a[0].z+a[7].z+a[4].z+a[3].z)/4]};c.SVGRenderer.prototype.arc3d=function(e){e.alpha*=n;e.beta*=n;var a=this.g(),b=this.arc3dPath(e),d=a.renderer,f=b.zAll*100;a.shapeArgs=e;a.side1=d.path(b.side2).attr({zIndex:b.zSide2}).add(a);a.side2=d.path(b.side1).attr({zIndex:b.zSide1}).add(a);a.inn=d.path(b.inn).attr({zIndex:b.zInn}).add(a);a.out=d.path(b.out).attr({zIndex:b.zOut}).add(a); -a.top=d.path(b.top).attr({zIndex:b.zTop}).add(a);a.fillSetter=function(a){this.color=a;var b=c.Color(a).brighten(-0.1).get();this.side1.attr({fill:b});this.side2.attr({fill:b});this.inn.attr({fill:b});this.out.attr({fill:b});this.top.attr({fill:a});return this};a.animate=function(a,b,d){c.SVGElement.prototype.animate.call(this,a,b,d);if(a.x&&a.y)b=this.renderer,a=c.splat(a)[0],a.alpha*=n,a.beta*=n,b=b.arc3dPath(a),this.shapeArgs=a,this.inn.attr({d:b.inn,zIndex:b.zInn}),this.out.attr({d:b.out,zIndex:b.zOut}), -this.side1.attr({d:b.side1,zIndex:b.zSide2}),this.side2.attr({d:b.side2,zIndex:b.zSide1}),this.top.attr({d:b.top,zIndex:b.zTop}),this.attr({fill:this.color}),this.attr({zIndex:b.zAll*100});return this};a.zIndex=f;a.attr({zIndex:f});return a};c.SVGRenderer.prototype.arc3dPath=function(e){var a=e.x,b=e.y,d=e.start,c=e.end-1.0E-5,g=e.r,h=e.innerR,i=e.depth,j=e.alpha,o=e.beta,t=l(d),y=k(d),v=l(c),n=k(c),q=g*l(o),r=g*l(j),u=h*l(o),s=h*l(j),A=i*k(o),B=i*k(j),i=["M",a+q*t,b+r*y],i=i.concat(z(a,b,q,r,d,c, -0,0)),i=i.concat(["L",a+u*v,b+s*n]),i=i.concat(z(a,b,u,s,c,d,0,0)),i=i.concat(["Z"]),e=(e.start+e.end)/2,e=k(o)*l(e)+k(-j)*k(-e),p=o>0?m/2:0,w=j>0?0:m/2,p=d>-p?d:c>-p?-p:d,x=c0?4:-1}).css({stroke:i.color}).add(); -else{var q={x:m,y:n,z:o+1,width:l,height:k+i.size,depth:j.size,alpha:f,beta:g,origin:d};this.backFrame?this.backFrame.animate(q):this.backFrame=b.cuboid(q).attr({fill:j.color,zIndex:-3}).css({stroke:j.color}).add();this.axisLine&&this.axisLine.hide();a={x:(a.yAxis[0].opposite?l:0)+m-h.size,y:n,z:0,width:h.size,height:k+i.size,depth:o+j.size,alpha:f,beta:g,origin:d};this.sideFrame?this.sideFrame.animate(a):this.sideFrame=b.cuboid(a).attr({fill:h.color,zIndex:-2}).css({stroke:h.color}).add()}}});c.wrap(c.Axis.prototype, -"getPlotLinePath",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.chart.is3d())return a;if(a===null)return a;var b=this.chart,d=b.options.chart.options3d,f=d.depth;d.origin={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:f,vd:d.viewDistance};var a=[{x:a[1],y:a[2],z:this.horiz||this.opposite?f:0},{x:a[1],y:a[2],z:f},{x:a[4],y:a[5],z:f},{x:a[4],y:a[5],z:this.horiz||this.opposite?0:f}],f=b.options.inverted?d.beta:d.alpha,g=b.options.inverted?d.alpha:d.beta;g*=b.yAxis[0].opposite? --1:1;a=x(a,f,g,d.origin);return a=this.chart.renderer.toLinePath(a,!1)});c.wrap(c.Tick.prototype,"getMarkPath",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return a;var b=this.axis.chart,d=b.options.chart.options3d,f={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:d.depth,vd:d.viewDistance},a=[{x:a[1],y:a[2],z:0},{x:a[4],y:a[5],z:0}],g=b.inverted?d.beta:d.alpha,d=b.inverted?d.alpha:d.beta;d*=b.yAxis[0].opposite?-1:1;a=x(a,g,d,f);return a=["M",a[0].x, -a[0].y,"L",a[1].x,a[1].y]});c.wrap(c.Tick.prototype,"getLabelPosition",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return a;var b=this.axis.chart,d=b.options.chart.options3d,f={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:d.depth,vd:d.viewDistance},g=b.inverted?d.beta:d.alpha,d=b.inverted?d.alpha:d.beta;d*=b.yAxis[0].opposite?-1:1;return a=x([{x:a.x,y:a.y,z:0}],g,d,f)[0]});c.wrap(c.Axis.prototype,"drawCrosshair",function(c){var a=arguments;this.chart.is3d()&& -a[2]&&(a[2]={plotX:a[2].plotXold||a[2].plotX,plotY:a[2].plotYold||a[2].plotY});c.apply(this,[].slice.call(a,1))});c.wrap(c.seriesTypes.column.prototype,"translate",function(e){e.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart,b=a.options,d=b.plotOptions[this.chart.options.chart.type],b=b.chart.options3d,f=d.depth||25,g={x:a.plotWidth/2,y:a.plotHeight/2,z:b.depth,vd:b.viewDistance},h=b.alpha,i=b.beta*(a.yAxis[0].opposite?-1:1),j=(d.stacking?this.options.stack||0:this._i)* -(f+(d.groupZPadding||1));d.grouping!==!1&&(j=0);j+=d.groupZPadding||1;c.each(this.data,function(a){var b=a.shapeArgs,c=a.tooltipPos;a.shapeType="cuboid";b.alpha=h;b.beta=i;b.z=j;b.origin=g;b.depth=f;c=x([{x:c[0],y:c[1],z:j}],h,i,g)[0];a.tooltipPos=[c.x,c.y]})}});c.wrap(c.seriesTypes.column.prototype,"animate",function(e){if(this.chart.is3d()){var a=arguments[1],b=this.yAxis,d=this,f=this.yAxis.reversed;if(c.svg)a?c.each(d.data,function(a){a.height=a.shapeArgs.height;a.shapeArgs.height=1;if(!f)a.shapeArgs.y= -a.stackY?a.plotY+b.translate(a.stackY):a.plotY+(a.negative?-a.height:a.height)}):(c.each(d.data,function(a){a.shapeArgs.height=a.height;if(!f)a.shapeArgs.y=a.plotY-(a.negative?a.height:0);a.graphic&&a.graphic.animate(a.shapeArgs,d.options.animation)}),d.animate=null)}else e.apply(this,[].slice.call(arguments,1))});c.wrap(c.seriesTypes.column.prototype,"init",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart.options.plotOptions.column.grouping,b=this.chart.options.plotOptions.column.stacking, -d=this.options.zIndex;if(!d&&(a===void 0||a)&&b){a=this.chart.retrieveStacks();b=this.options.stack||0;for(d=0;d0?k(h)*e:0),-c*(1-l(g))*k(b)+(k(b)>0?k(g)*e:0));a.dataLabel&&a.dataLabel.attr({x:a.dataLabel.connX+-c*(1-l(h))*l(b)+(l(b)>0?l(h)*e:0)-a.dataLabel.width/2,y:a.dataLabel.connY+-c*(1-l(g))*k(b)+(k(b)>0?k(g)*e:0)-a.dataLabel.height/2})})});c.wrap(c.seriesTypes.pie.prototype,"addPoint",function(c){c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&this.update()});c.wrap(c.seriesTypes.pie.prototype,"animate",function(e){if(this.chart.is3d()){var a=arguments[1],b=this.options.animation,d= -this.center,f=this.group,g=this.markerGroup;if(c.svg)if(b===!0&&(b={}),a){if(this.oldtranslateX=f.translateX,this.oldtranslateY=f.translateY,a={translateX:d[0],translateY:d[1],scaleX:0.001,scaleY:0.001},f.attr(a),g)g.attrSetters=f.attrSetters,g.attr(a)}else a={translateX:this.oldtranslateX,translateY:this.oldtranslateY,scaleX:1,scaleY:1},f.animate(a,b),g&&g.animate(a,b),this.animate=null}else e.apply(this,[].slice.call(arguments,1))});c.wrap(c.seriesTypes.scatter.prototype,"translate",function(e){e.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart,b=this.chart.options.chart.options3d,d=b.alpha,f=b.beta,g={x:a.inverted?a.plotHeight/2:a.plotWidth/2,y:a.inverted?a.plotWidth/2:a.plotHeight/2,z:b.depth,vd:b.viewDistance},b=b.depth,h=a.options.zAxis||{min:0,max:b},i=b/(h.max-h.min);c.each(this.data,function(a){var b={x:a.plotX,y:a.plotY,z:(a.z-h.min)*i},b=x([b],d,f,g)[0];a.plotXold=a.plotX;a.plotYold=a.plotY;a.plotX=b.x;a.plotY=b.y;a.plotZ=b.z})}});c.wrap(c.seriesTypes.scatter.prototype, -"init",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d())this.pointArrayMap=["x","y","z"],this.tooltipOptions.pointFormat=this.userOptions.tooltip?this.userOptions.tooltip.pointFormat||"x: {point.x}
y: {point.y}
z: {point.z}
":"x: {point.x}
y: {point.y}
z: {point.z}
";return a});if(c.VMLRenderer)c.setOptions({animate:!1}),c.VMLRenderer.prototype.cuboid=c.SVGRenderer.prototype.cuboid,c.VMLRenderer.prototype.cuboidPath= -c.SVGRenderer.prototype.cuboidPath,c.VMLRenderer.prototype.toLinePath=c.SVGRenderer.prototype.toLinePath,c.VMLRenderer.prototype.createElement3D=c.SVGRenderer.prototype.createElement3D,c.VMLRenderer.prototype.arc3d=function(e){e=c.SVGRenderer.prototype.arc3d.call(this,e);e.css({zIndex:e.zIndex});return e},c.VMLRenderer.prototype.arc3dPath=c.SVGRenderer.prototype.arc3dPath,c.Chart.prototype.renderSeries=function(){for(var c,a=this.series.length;a--;)c=this.series[a],c.translate(),c.setTooltipPoints&& -c.setTooltipPoints(),c.render()},c.wrap(c.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));this.sideFrame&&(this.sideFrame.css({zIndex:0}),this.sideFrame.front.attr({fill:this.sideFrame.color}));this.bottomFrame&&(this.bottomFrame.css({zIndex:1}),this.bottomFrame.front.attr({fill:this.bottomFrame.color}));this.backFrame&&(this.backFrame.css({zIndex:0}),this.backFrame.front.attr({fill:this.backFrame.color}))})})(Highcharts); diff --git a/static/js/highcharts/highcharts-3d.src.js b/static/js/highcharts/highcharts-3d.src.js deleted file mode 100644 index 9ddb7b537..000000000 --- a/static/js/highcharts/highcharts-3d.src.js +++ /dev/null @@ -1,1248 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.0.1 (2014-04-24) - * - * (c) 2009-2013 Torstein Hønsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */ - -(function (Highcharts) { - /** - Shorthands for often used function -*/ -/** - * Mathematical Functionility - */ -var PI = Math.PI, - deg2rad = (PI / 180), // degrees to radians - sin = Math.sin, - cos = Math.cos, - - round = Math.round; - -function perspective(points, angle2, angle1, origin) { - angle1 *= deg2rad; - angle2 *= deg2rad; - - var result = [], - xe, - ye, - ze; - - angle1 *= -1; - - xe = origin.x; - ye = origin.y; - ze = (origin.z === 0 ? 0.0001 : origin.z) * (origin.vd || 25); - - // some kind of minimum? - - var s1 = sin(angle1), - c1 = cos(angle1), - s2 = sin(angle2), - c2 = cos(angle2); - - var x, y, z, p; - - Highcharts.each(points, function (point) { - x = point.x - xe; - y = point.y - ye; - z = point.z || 0; - - p = { - x: c1 * x - s1 * z, - y: -s1 * s2 * x - c1 * s2 * z + c2 * y, - z: s1 * c2 * x + c1 * c2 * z + s2 * y - }; - - p.x = p.x * ((ze - p.z) / ze) + xe; - p.y = p.y * ((ze - p.z) / ze) + ye; - - result.push({x: round(p.x), y: round(p.y), z: round(p.z)}); - }); - return result; -} -/*** - EXTENSION TO THE SVG-RENDERER TO ENABLE 3D SHAPES - ***/ -////// HELPER METHODS ////// -var dFactor = (4 * (Math.sqrt(2) - 1) / 3) / (PI / 2); - -function curveTo(cx, cy, rx, ry, start, end, dx, dy) { - var result = []; - if ((end > start) && (end - start > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start + (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start + (PI / 2), end, dx, dy)); - return result; - } else if ((end < start) && (start - end > PI / 2 + 0.0001)) { - result = result.concat(curveTo(cx, cy, rx, ry, start, start - (PI / 2), dx, dy)); - result = result.concat(curveTo(cx, cy, rx, ry, start - (PI / 2), end, dx, dy)); - return result; - } else { - var arcAngle = end - start; - return [ - 'C', - cx + (rx * cos(start)) - ((rx * dFactor * arcAngle) * sin(start)) + dx, - cy + (ry * sin(start)) + ((ry * dFactor * arcAngle) * cos(start)) + dy, - cx + (rx * cos(end)) + ((rx * dFactor * arcAngle) * sin(end)) + dx, - cy + (ry * sin(end)) - ((ry * dFactor * arcAngle) * cos(end)) + dy, - - cx + (rx * cos(end)) + dx, - cy + (ry * sin(end)) + dy - ]; - } -} - -Highcharts.SVGRenderer.prototype.toLinePath = function (points, closed) { - var result = []; - - // Put "L x y" for each point - Highcharts.each(points, function (point) { - result.push('L', point.x, point.y); - }); - - // Set the first element to M - result[0] = 'M'; - - // If it is a closed line, add Z - if (closed) { - result.push('Z'); - } - - return result; -}; - -////// CUBOIDS ////// -Highcharts.SVGRenderer.prototype.cuboid = function (shapeArgs) { - - var result = this.g(), - paths = this.cuboidPath(shapeArgs); - - result.front = this.path(paths[0]).attr({zIndex: paths[3], 'stroke-linejoin': 'round'}).add(result); - result.top = this.path(paths[1]).attr({zIndex: paths[4], 'stroke-linejoin': 'round'}).add(result); - result.side = this.path(paths[2]).attr({zIndex: paths[5], 'stroke-linejoin': 'round'}).add(result); - - result.fillSetter = function (color) { - var c0 = color, - c1 = Highcharts.Color(color).brighten(0.1).get(), - c2 = Highcharts.Color(color).brighten(-0.1).get(); - - this.front.attr({fill: c0}); - this.top.attr({fill: c1}); - this.side.attr({fill: c2}); - - this.color = color; - return this; - }; - - result.opacitySetter = function (opacity) { - this.front.attr({opacity: opacity}); - this.top.attr({opacity: opacity}); - this.side.attr({opacity: opacity}); - return this; - }; - - result.attr = function (args) { - if (args.shapeArgs || args.x) { - var shapeArgs = args.shapeArgs || args; - var paths = this.renderer.cuboidPath(shapeArgs); - this.front.attr({d: paths[0], zIndex: paths[3]}); - this.top.attr({d: paths[1], zIndex: paths[4]}); - this.side.attr({d: paths[2], zIndex: paths[5]}); - } else { - Highcharts.SVGElement.prototype.attr.call(this, args); - } - - return this; - }; - - result.animate = function (args, duration, complete) { - if (args.x && args.y) { - var paths = this.renderer.cuboidPath(args); - this.front.attr({zIndex: paths[3]}).animate({d: paths[0]}, duration, complete); - this.top.attr({zIndex: paths[4]}).animate({d: paths[1]}, duration, complete); - this.side.attr({zIndex: paths[5]}).animate({d: paths[2]}, duration, complete); - } else if (args.opacity) { - this.front.animate(args, duration, complete); - this.top.animate(args, duration, complete); - this.side.animate(args, duration, complete); - } else { - Highcharts.SVGElement.prototype.animate.call(this, args, duration, complete); - } - return this; - }; - - result.destroy = function () { - this.front.destroy(); - this.top.destroy(); - this.side.destroy(); - - return null; - }; - - // Apply the Z index to the cuboid group - result.attr({ zIndex: -paths[3] }); - - return result; -}; - - -Highcharts.SVGRenderer.prototype.cuboidPath = function (shapeArgs) { - var x = shapeArgs.x, - y = shapeArgs.y, - z = shapeArgs.z, - h = shapeArgs.height, - w = shapeArgs.width, - d = shapeArgs.depth, - alpha = shapeArgs.alpha, - beta = shapeArgs.beta, - origin = shapeArgs.origin; - - var pArr = [ - {x: x, y: y, z: z}, - {x: x + w, y: y, z: z}, - {x: x + w, y: y + h, z: z}, - {x: x, y: y + h, z: z}, - {x: x, y: y + h, z: z + d}, - {x: x + w, y: y + h, z: z + d}, - {x: x + w, y: y, z: z + d}, - {x: x, y: y, z: z + d} - ]; - - pArr = perspective(pArr, alpha, beta, origin); - - var path1, // FRONT - path2, // TOP OR BOTTOM - path3; // LEFT OR RIGHT - - // front - path1 = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[1].x, pArr[1].y, - 'L', pArr[2].x, pArr[2].y, - 'L', pArr[3].x, pArr[3].y, - 'Z' - ]; - var z1 = (pArr[0].z + pArr[1].z + pArr[2].z + pArr[3].z) / 4; - - // top or bottom - var top = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[7].x, pArr[7].y, - 'L', pArr[6].x, pArr[6].y, - 'L', pArr[1].x, pArr[1].y, - 'Z' - ]; - var bottom = [ - 'M', pArr[3].x, pArr[3].y, - 'L', pArr[2].x, pArr[2].y, - 'L', pArr[5].x, pArr[5].y, - 'L', pArr[4].x, pArr[4].y, - 'Z' - ]; - if (pArr[7].y < pArr[1].y) { - path2 = top; - } else if (pArr[4].y > pArr[2].y) { - path2 = bottom; - } else { - path2 = []; - } - var z2 = (beta > 0 ? (pArr[0].z + pArr[7].z + pArr[6].z + pArr[1].z) / 4 : (pArr[3].z + pArr[2].z + pArr[5].z + pArr[4].z) / 4); - - // side - var right = [ - 'M', pArr[1].x, pArr[1].y, - 'L', pArr[2].x, pArr[2].y, - 'L', pArr[5].x, pArr[5].y, - 'L', pArr[6].x, pArr[6].y, - 'Z' - ]; - var left = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[7].x, pArr[7].y, - 'L', pArr[4].x, pArr[4].y, - 'L', pArr[3].x, pArr[3].y, - 'Z' - ]; - if (pArr[6].x > pArr[1].x) { - path3 = right; - } else if (pArr[7].x < pArr[0].x) { - path3 = left; - } else { - path3 = []; - } - var z3 = (alpha > 0 ? (pArr[1].z + pArr[2].z + pArr[5].z + pArr[6].z) / 4 : (pArr[0].z + pArr[7].z + pArr[4].z + pArr[3].z) / 4); - - return [path1, path2, path3, z1, z2, z3]; -}; - -////// SECTORS ////// -Highcharts.SVGRenderer.prototype.arc3d = function (shapeArgs) { - - shapeArgs.alpha *= deg2rad; - shapeArgs.beta *= deg2rad; - var result = this.g(), - paths = this.arc3dPath(shapeArgs), - renderer = result.renderer; - - var zIndex = paths.zAll * 100; - - result.shapeArgs = shapeArgs; // Store for later use - - result.side1 = renderer.path(paths.side2).attr({zIndex: paths.zSide2}).add(result); - result.side2 = renderer.path(paths.side1).attr({zIndex: paths.zSide1}).add(result); - result.inn = renderer.path(paths.inn).attr({zIndex: paths.zInn}).add(result); - result.out = renderer.path(paths.out).attr({zIndex: paths.zOut}).add(result); - result.top = renderer.path(paths.top).attr({zIndex: paths.zTop}).add(result); - - result.fillSetter = function (color) { - this.color = color; - - var c0 = color, - c2 = Highcharts.Color(color).brighten(-0.1).get(); - - this.side1.attr({fill: c2}); - this.side2.attr({fill: c2}); - this.inn.attr({fill: c2}); - this.out.attr({fill: c2}); - this.top.attr({fill: c0}); - return this; - }; - - result.animate = function (args, duration, complete) { - Highcharts.SVGElement.prototype.animate.call(this, args, duration, complete); - - if (args.x && args.y) { - - // Recreate - var result = this, - renderer = this.renderer, - shapeArgs = Highcharts.splat(args)[0]; - - shapeArgs.alpha *= deg2rad; - shapeArgs.beta *= deg2rad; - - var paths = renderer.arc3dPath(shapeArgs); - - result.shapeArgs = shapeArgs; // Store for later use - - result.inn.attr({d: paths.inn, zIndex: paths.zInn}); - result.out.attr({d: paths.out, zIndex: paths.zOut}); - result.side1.attr({d: paths.side1, zIndex: paths.zSide2}); - result.side2.attr({d: paths.side2, zIndex: paths.zSide1}); - result.top.attr({d: paths.top, zIndex: paths.zTop}); - - result.attr({fill: result.color}); - result.attr({zIndex: paths.zAll * 100}); - } - - return this; - }; - - result.zIndex = zIndex; - result.attr({zIndex: zIndex}); - return result; -}; - - -Highcharts.SVGRenderer.prototype.arc3dPath = function (shapeArgs) { - var cx = shapeArgs.x, - cy = shapeArgs.y, - start = shapeArgs.start, - end = shapeArgs.end - 0.00001, - r = shapeArgs.r, - ir = shapeArgs.innerR, - d = shapeArgs.depth, - alpha = shapeArgs.alpha, - beta = shapeArgs.beta; - - // Some Variables - var cs = cos(start), - ss = sin(start), - ce = cos(end), - se = sin(end), - rx = r * cos(beta), - ry = r * cos(alpha), - irx = ir * cos(beta), - iry = ir * cos(alpha), - dx = d * sin(beta), - dy = d * sin(alpha); - - // TOP - var top = ['M', cx + (rx * cs), cy + (ry * ss)]; - top = top.concat(curveTo(cx, cy, rx, ry, start, end, 0, 0)); - top = top.concat([ - 'L', cx + (irx * ce), cy + (iry * se) - ]); - top = top.concat(curveTo(cx, cy, irx, iry, end, start, 0, 0)); - top = top.concat(['Z']); - - var midAngle = ((shapeArgs.start + shapeArgs.end) / 2); - var zIndex = ((sin(beta) * cos(midAngle)) + (sin(-alpha) * sin(-midAngle))); - - // OUTSIDE - var b = (beta > 0 ? PI / 2 : 0), - a = (alpha > 0 ? 0 : PI / 2); - - var start2 = start > -b ? start : (end > -b ? -b : start), - end2 = end < PI - a ? end : (start < PI - a ? PI - a : end); - - var out = ['M', cx + (rx * cos(start2)), cy + (ry * sin(start2))]; - out = out.concat(curveTo(cx, cy, rx, ry, start2, end2, 0, 0)); - out = out.concat([ - 'L', cx + (rx * cos(end2)) + dx, cy + (ry * sin(end2)) + dy - ]); - out = out.concat(curveTo(cx, cy, rx, ry, end2, start2, dx, dy)); - out = out.concat(['Z']); - - // INSIDE - var inn = ['M', cx + (irx * cs), cy + (iry * ss)]; - inn = inn.concat(curveTo(cx, cy, irx, iry, start, end, 0, 0)); - inn = inn.concat([ - 'L', cx + (irx * cos(end)) + dx, cy + (iry * sin(end)) + dy - ]); - inn = inn.concat(curveTo(cx, cy, irx, iry, end, start, dx, dy)); - inn = inn.concat(['Z']); - - // SIDES - var side1 = [ - 'M', cx + (rx * cs), cy + (ry * ss), - 'L', cx + (rx * cs) + dx, cy + (ry * ss) + dy, - 'L', cx + (irx * cs) + dx, cy + (iry * ss) + dy, - 'L', cx + (irx * cs), cy + (iry * ss), - 'Z' - ]; - var side2 = [ - 'M', cx + (rx * ce), cy + (ry * se), - 'L', cx + (rx * ce) + dx, cy + (ry * se) + dy, - 'L', cx + (irx * ce) + dx, cy + (iry * se) + dy, - 'L', cx + (irx * ce), cy + (iry * se), - 'Z' - ]; - - var mr = ir + ((r - ir) / 2); - - var zTop = Math.abs(zIndex * 2 * mr), - zOut = zIndex * r, - zInn = zIndex * ir, - zSide1 = ((sin(beta) * cos(start)) + (sin(-alpha) * sin(-start))) * mr, - zSide2 = ((sin(beta) * cos(end)) + (sin(-alpha) * sin(-end))) * mr; - - return { - top: top, - zTop: zTop * 100, - out: out, - zOut: zOut * 100, - inn: inn, - zInn: zInn * 100, - side1: side1, - zSide1: zSide1 * 100, - side2: side2, - zSide2: zSide2 * 100, - zAll: zIndex - }; -}; -/*** - EXTENSION FOR 3D CHARTS -***/ -// Shorthand to check the is3d flag -Highcharts.Chart.prototype.is3d = function () { - return this.options.chart.options3d && this.options.chart.options3d.enabled; -}; - -Highcharts.wrap(Highcharts.Chart.prototype, 'isInsidePlot', function (proceed) { - if (this.is3d()) { - return true; - } else { - return proceed.apply(this, [].slice.call(arguments, 1)); - } -}); - -Highcharts.wrap(Highcharts.Chart.prototype, 'init', function (proceed) { - var args = arguments; - args[1] = Highcharts.merge({ - chart: { - options3d: { - enabled: false, - alpha: 0, - beta: 0, - depth: 100, - viewDistance: 25, - - frame: { - bottom: { size: 1, color: 'rgba(255,255,255,0)' }, - side: { size: 1, color: 'rgba(255,255,255,0)' }, - back: { size: 1, color: 'rgba(255,255,255,0)' } - } - } - } - }, args[1]); - - proceed.apply(this, [].slice.call(args, 1)); -}); - -Highcharts.wrap(Highcharts.Chart.prototype, 'setChartSize', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.is3d()) { - var inverted = this.inverted, - clipBox = this.clipBox, - margin = this.margin, - x = inverted ? 'y' : 'x', - y = inverted ? 'x' : 'y', - w = inverted ? 'height' : 'width', - h = inverted ? 'width' : 'height'; - - clipBox[x] = -(margin[3] || 0); - clipBox[y] = -(margin[0] || 0); - clipBox[w] = this.chartWidth + (margin[3] || 0) + (margin[1] || 0); - clipBox[h] = this.chartHeight + (margin[0] || 0) + (margin[2] || 0); - } -}); - -Highcharts.wrap(Highcharts.Chart.prototype, 'redraw', function (proceed) { - if (this.is3d()) { - // Set to force a redraw of all elements - this.isDirtyBox = true; - } - proceed.apply(this, [].slice.call(arguments, 1)); -}); - -Highcharts.Chart.prototype.retrieveStacks = function () { - var stacks = {}, - type = this.options.chart.type, - typeOptions = this.options.plotOptions[type], - stacking = typeOptions.stacking, - grouping = typeOptions.grouping, - i = 1; - - if (grouping || !stacking) { return this.series; } - - Highcharts.each(this.series, function (S) { - if (!stacks[S.options.stack || 0]) { - stacks[S.options.stack || 0] = { series: [S], position: i}; - i++; - } else { - stacks[S.options.stack || 0].series.push(S); - } - }); - stacks.totalStacks = i + 1; - return stacks; -}; - -/*** - EXTENSION TO THE AXIS -***/ -Highcharts.wrap(Highcharts.Axis.prototype, 'init', function (proceed) { - var args = arguments; - if (args[1].is3d()) { - args[2].tickWidth = Highcharts.pick(args[2].tickWidth, 0); - args[2].gridLineWidth = Highcharts.pick(args[2].gridLineWidth, 1); - } - - proceed.apply(this, [].slice.call(arguments, 1)); -}); -Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var chart = this.chart, - renderer = chart.renderer, - options3d = chart.options.chart.options3d, - alpha = options3d.alpha, - beta = options3d.beta * (chart.yAxis[0].opposite ? -1 : 1), - frame = options3d.frame, - fbottom = frame.bottom, - fback = frame.back, - fside = frame.side, - depth = options3d.depth, - height = this.height, - width = this.width, - left = this.left, - top = this.top; - - var origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: depth, - vd: options3d.viewDistance - }; - if (this.horiz) { - /// BOTTOM - if (this.axisLine) { - this.axisLine.hide(); - } - var bottomShape = { - x: left, - y: top + (chart.yAxis[0].reversed ? -fbottom.size : height), - z: 0, - width: width, - height: fbottom.size, - depth: depth, - alpha: alpha, - beta: beta, - origin: origin - }; - if (!this.bottomFrame) { - this.bottomFrame = renderer.cuboid(bottomShape).attr({fill: fbottom.color, zIndex: (chart.yAxis[0].reversed && alpha > 0 ? 4 : -1)}).css({stroke: fbottom.color}).add(); - } else { - this.bottomFrame.animate(bottomShape); - } - } else { - // BACK - var backShape = { - x: left, - y: top, - z: depth + 1, - width: width, - height: height + fbottom.size, - depth: fback.size, - alpha: alpha, - beta: beta, - origin: origin - }; - if (!this.backFrame) { - this.backFrame = renderer.cuboid(backShape).attr({fill: fback.color, zIndex: -3}).css({stroke: fback.color}).add(); - } else { - this.backFrame.animate(backShape); - } - // SIDE - if (this.axisLine) { - this.axisLine.hide(); - } - var sideShape = { - x: (chart.yAxis[0].opposite ? width : 0) + left - fside.size, - y: top, - z: 0, - width: fside.size, - height: height + fbottom.size, - depth: depth + fback.size, - alpha: alpha, - beta: beta, - origin: origin - }; - if (!this.sideFrame) { - this.sideFrame = renderer.cuboid(sideShape).attr({fill: fside.color, zIndex: -2}).css({stroke: fside.color}).add(); - } else { - this.sideFrame.animate(sideShape); - } - } -}); - -Highcharts.wrap(Highcharts.Axis.prototype, 'getPlotLinePath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return path; - } - - if (path === null) { return path; } - - var chart = this.chart, - options3d = chart.options.chart.options3d; - - var d = options3d.depth; - - options3d.origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: d, - vd: options3d.viewDistance - }; - - var pArr = [ - { x: path[1], y: path[2], z : (this.horiz || this.opposite ? d : 0)}, - { x: path[1], y: path[2], z : d }, - { x: path[4], y: path[5], z : d }, - { x: path[4], y: path[5], z : (this.horiz || this.opposite ? 0 : d)} - ]; - - var alpha = chart.options.inverted ? options3d.beta : options3d.alpha, - beta = chart.options.inverted ? options3d.alpha : options3d.beta; - - beta *= (chart.yAxis[0].opposite ? -1 : 1); - - pArr = perspective(pArr, alpha, beta, options3d.origin); - path = this.chart.renderer.toLinePath(pArr, false); - - return path; -}); - -/*** - EXTENSION TO THE TICKS -***/ - -Highcharts.wrap(Highcharts.Tick.prototype, 'getMarkPath', function (proceed) { - var path = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return path; - } - - var chart = this.axis.chart, - options3d = chart.options.chart.options3d; - - var origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: options3d.depth, - vd: options3d.viewDistance - }; - - var pArr = [ - {x: path[1], y: path[2], z: 0}, - {x: path[4], y: path[5], z: 0} - ]; - - var alpha = chart.inverted ? options3d.beta : options3d.alpha, - beta = chart.inverted ? options3d.alpha : options3d.beta; - - beta *= (chart.yAxis[0].opposite ? -1 : 1); - - pArr = perspective(pArr, alpha, beta, origin); - path = [ - 'M', pArr[0].x, pArr[0].y, - 'L', pArr[1].x, pArr[1].y - ]; - return path; -}); - -Highcharts.wrap(Highcharts.Tick.prototype, 'getLabelPosition', function (proceed) { - var pos = proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.axis.chart.is3d()) { - return pos; - } - - var chart = this.axis.chart, - options3d = chart.options.chart.options3d; - - var origin = { - x: chart.plotLeft + (chart.plotWidth / 2), - y: chart.plotTop + (chart.plotHeight / 2), - z: options3d.depth, - vd: options3d.viewDistance - }; - - var alpha = chart.inverted ? options3d.beta : options3d.alpha, - beta = chart.inverted ? options3d.alpha : options3d.beta; - - beta *= (chart.yAxis[0].opposite ? -1 : 1); - - pos = perspective([{x: pos.x, y: pos.y, z: 0}], alpha, beta, origin)[0]; - return pos; -}); - -Highcharts.wrap(Highcharts.Axis.prototype, 'drawCrosshair', function (proceed) { - var args = arguments; - if (this.chart.is3d()) { - if (args[2]) { - args[2] = { - plotX: args[2].plotXold || args[2].plotX, - plotY: args[2].plotYold || args[2].plotY - }; - } - } - proceed.apply(this, [].slice.call(args, 1)); -});/*** - EXTENSION FOR 3D COLUMNS -***/ -Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var type = this.chart.options.chart.type, - series = this, - chart = series.chart, - options = chart.options, - typeOptions = options.plotOptions[type], - options3d = options.chart.options3d, - - depth = typeOptions.depth || 25, - origin = { - x: chart.plotWidth / 2, - y: chart.plotHeight / 2, - z: options3d.depth, - vd: options3d.viewDistance - }, - alpha = options3d.alpha, - beta = options3d.beta * (chart.yAxis[0].opposite ? -1 : 1); - - var stack = typeOptions.stacking ? (this.options.stack || 0) : series._i; - var z = stack * (depth + (typeOptions.groupZPadding || 1)); - - if (typeOptions.grouping !== false) { z = 0; } - - z += (typeOptions.groupZPadding || 1); - - Highcharts.each(series.data, function (point) { - var shapeArgs = point.shapeArgs, - tooltipPos = point.tooltipPos; - - point.shapeType = 'cuboid'; - shapeArgs.alpha = alpha; - shapeArgs.beta = beta; - shapeArgs.z = z; - shapeArgs.origin = origin; - shapeArgs.depth = depth; - - // Translate the tooltip position in 3d space - tooltipPos = perspective([{ x: tooltipPos[0], y: tooltipPos[1], z: z }], alpha, beta, origin)[0]; - point.tooltipPos = [tooltipPos.x, tooltipPos.y]; - - }); -}); - -Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - yAxis = this.yAxis, - series = this, - reversed = this.yAxis.reversed; - - if (Highcharts.svg) { // VML is too slow anyway - if (init) { - Highcharts.each(series.data, function (point) { - point.height = point.shapeArgs.height; - point.shapeArgs.height = 1; - if (!reversed) { - if (point.stackY) { - point.shapeArgs.y = point.plotY + yAxis.translate(point.stackY); - } else { - point.shapeArgs.y = point.plotY + (point.negative ? -point.height : point.height); - } - } - }); - - } else { // run the animation - Highcharts.each(series.data, function (point) { - point.shapeArgs.height = point.height; - if (!reversed) { - point.shapeArgs.y = point.plotY - (point.negative ? point.height : 0); - } - // null value do not have a graphic - if (point.graphic) { - point.graphic.animate(point.shapeArgs, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - } - } -}); - - -Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'init', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - var grouping = this.chart.options.plotOptions.column.grouping, - stacking = this.chart.options.plotOptions.column.stacking, - z = this.options.zIndex; - if (!z) { - if (!(grouping !== undefined && !grouping) && stacking) { - var stacks = this.chart.retrieveStacks(), - stack = this.options.stack || 0, - i; // position within the stack - for (i = 0; i < stacks[stack].series.length; i++) { - if (stacks[stack].series[i] === this) { - break; - } - } - z = (stacks.totalStacks * 10) - (10 * (stacks.totalStacks - stacks[stack].position)) - i; - - this.options.zIndex = z; - } - } - } -}); -function draw3DPoints(proceed) { - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - var grouping = this.chart.options.plotOptions.column.grouping; - if (grouping !== undefined && !grouping && this.group.zIndex !== undefined) { - this.group.attr({zIndex : (this.group.zIndex * 10)}); - } - if (this.userOptions.borderColor === undefined) { - this.options.borderColor = this.color; - } - - // Set the border color to the fill color to provide a smooth edge - Highcharts.each(this.data, function (point) { - var c = point.options.borderColor || point.color || point.series.userOptions.borderColor; - point.options.borderColor = c; - point.borderColor = c; - point.pointAttr[''].stroke = c; - // same bordercolor on hover and select - point.pointAttr.hover.stroke = c; - point.pointAttr.select.stroke = c; - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); -} - -if (Highcharts.seriesTypes.columnrange) { - Highcharts.wrap(Highcharts.seriesTypes.columnrange.prototype, 'drawPoints', draw3DPoints); -} - -Highcharts.wrap(Highcharts.seriesTypes.column.prototype, 'drawPoints', draw3DPoints); - -/*** - EXTENSION FOR 3D CYLINDRICAL COLUMNS - Not supported -***/ -var defaultOptions = Highcharts.getOptions(); -defaultOptions.plotOptions.cylinder = Highcharts.merge(defaultOptions.plotOptions.column); -var CylinderSeries = Highcharts.extendClass(Highcharts.seriesTypes.column, { - type: 'cylinder' -}); -Highcharts.seriesTypes.cylinder = CylinderSeries; - -Highcharts.wrap(Highcharts.seriesTypes.cylinder.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - cylOptions = options.plotOptions.cylinder, - options3d = options.chart.options3d, - depth = cylOptions.depth || 0, - origin = { - x: chart.inverted ? chart.plotHeight / 2 : chart.plotWidth / 2, - y: chart.inverted ? chart.plotWidth / 2 : chart.plotHeight / 2, - z: options3d.depth, - vd: options3d.viewDistance - }, - alpha = options3d.alpha; - - var z = cylOptions.stacking ? (this.options.stack || 0) * depth : series._i * depth; - z += depth / 2; - - if (cylOptions.grouping !== false) { z = 0; } - - Highcharts.each(series.data, function (point) { - var shapeArgs = point.shapeArgs; - point.shapeType = 'arc3d'; - shapeArgs.x += depth / 2; - shapeArgs.z = z; - shapeArgs.start = 0; - shapeArgs.end = 2 * PI; - shapeArgs.r = depth * 0.95; - shapeArgs.innerR = 0; - shapeArgs.depth = shapeArgs.height * (1 / sin((90 - alpha) * deg2rad)) - z; - shapeArgs.alpha = 90 - alpha; - shapeArgs.beta = 0; - shapeArgs.origin = origin; - }); -}); -/*** - EXTENSION FOR 3D PIES -***/ - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'translate', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options = chart.options, - pieOptions = options.plotOptions.pie, - depth = pieOptions.depth || 0, - options3d = options.chart.options3d, - origin = { - x: chart.plotWidth / 2, - y: chart.plotHeight / 2, - z: options3d.depth - }, - alpha = options3d.alpha, - beta = options3d.beta; - - var z = pieOptions.stacking ? (this.options.stack || 0) * depth : series._i * depth; - z += depth / 2; - - if (pieOptions.grouping !== false) { z = 0; } - - Highcharts.each(series.data, function (point) { - point.shapeType = 'arc3d'; - var shapeArgs = point.shapeArgs; - - shapeArgs.z = z; - shapeArgs.depth = depth * 0.75; - shapeArgs.origin = origin; - shapeArgs.alpha = alpha; - shapeArgs.beta = beta; - - var angle = (shapeArgs.end + shapeArgs.start) / 2; - - point.slicedTranslation = { - translateX : round(cos(angle) * series.options.slicedOffset * cos(alpha * deg2rad)), - translateY : round(sin(angle) * series.options.slicedOffset * cos(alpha * deg2rad)) - }; - }); -}); - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype.pointClass.prototype, 'haloPath', function (proceed) { - return this.series.chart.is3d() ? [] : proceed.call(this); -}); - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawPoints', function (proceed) { - // Do not do this if the chart is not 3D - if (this.chart.is3d()) { - // Set the border color to the fill color to provide a smooth edge - Highcharts.each(this.data, function (point) { - var c = point.options.borderColor || point.color || point.series.userOptions.borderColor || point.series.color; - point.options.borderColor = c; - point.borderColor = c; - point.pointAttr[''].stroke = c; - // same bordercolor on hover and select - point.pointAttr.hover.stroke = c; - point.pointAttr.select.stroke = c; - }); - } - - proceed.apply(this, [].slice.call(arguments, 1)); -}); - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'drawDataLabels', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - // Do not do this if the chart is not 3D - if (!this.chart.is3d()) { - return; - } - - var series = this; - Highcharts.each(series.data, function (point) { - var shapeArgs = point.shapeArgs; - var r = shapeArgs.r, - d = shapeArgs.depth, - a1 = shapeArgs.alpha * deg2rad, - b1 = shapeArgs.beta * deg2rad, - a2 = (shapeArgs.start + shapeArgs.end) / 2; - - if (point.connector) { - point.connector.translate( - (-r * (1 - cos(b1)) * cos(a2)) + (cos(a2) > 0 ? sin(b1) * d : 0), - (-r * (1 - cos(a1)) * sin(a2)) + (sin(a2) > 0 ? sin(a1) * d : 0) - ); - } - if (point.dataLabel) { - point.dataLabel.attr({ - x: point.dataLabel.connX + (-r * (1 - cos(b1)) * cos(a2)) + (cos(a2) > 0 ? cos(b1) * d : 0) - (point.dataLabel.width / 2), - y: point.dataLabel.connY + (-r * (1 - cos(a1)) * sin(a2)) + (sin(a2) > 0 ? sin(a1) * d : 0) - (point.dataLabel.height / 2) - }); - } - }); -}); - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'addPoint', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - if (this.chart.is3d()) { - // destroy (and rebuild) everything!!! - this.update(); - } -}); - -Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'animate', function (proceed) { - if (!this.chart.is3d()) { - proceed.apply(this, [].slice.call(arguments, 1)); - } else { - var args = arguments, - init = args[1], - animation = this.options.animation, - attribs, - center = this.center, - group = this.group, - markerGroup = this.markerGroup; - - if (Highcharts.svg) { // VML is too slow anyway - - if (animation === true) { - animation = {}; - } - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - this.oldtranslateX = group.translateX; - this.oldtranslateY = group.translateY; - attribs = { - translateX: center[0], - translateY: center[1], - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: this.oldtranslateX, - translateY: this.oldtranslateY, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - - } - } -});/*** - EXTENSION FOR 3D SCATTER CHART -***/ -Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'translate', function (proceed) { -//function translate3d(proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - - if (!this.chart.is3d()) { - return; - } - - var series = this, - chart = series.chart, - options3d = series.chart.options.chart.options3d, - alpha = options3d.alpha, - beta = options3d.beta, - origin = { - x: chart.inverted ? chart.plotHeight / 2 : chart.plotWidth / 2, - y: chart.inverted ? chart.plotWidth / 2 : chart.plotHeight / 2, - z: options3d.depth, - vd: options3d.viewDistance - }, - depth = options3d.depth, - zAxis = chart.options.zAxis || { min : 0, max: depth }; - - var rangeModifier = depth / (zAxis.max - zAxis.min); - - Highcharts.each(series.data, function (point) { - var pCo = { - x: point.plotX, - y: point.plotY, - z: (point.z - zAxis.min) * rangeModifier - }; - - pCo = perspective([pCo], alpha, beta, origin)[0]; - - point.plotXold = point.plotX; - point.plotYold = point.plotY; - - point.plotX = pCo.x; - point.plotY = pCo.y; - point.plotZ = pCo.z; - }); -}); - -Highcharts.wrap(Highcharts.seriesTypes.scatter.prototype, 'init', function (proceed) { - var result = proceed.apply(this, [].slice.call(arguments, 1)); - - if (this.chart.is3d()) { - // Add a third coordinate - this.pointArrayMap = ['x', 'y', 'z']; - - // Set a new default tooltip formatter - var default3dScatterTooltip = 'x: {point.x}
y: {point.y}
z: {point.z}
'; - if (this.userOptions.tooltip) { - this.tooltipOptions.pointFormat = this.userOptions.tooltip.pointFormat || default3dScatterTooltip; - } else { - this.tooltipOptions.pointFormat = default3dScatterTooltip; - } - } - return result; -});/** - * Extension to the VML Renderer - */ -if (Highcharts.VMLRenderer) { - -Highcharts.setOptions({animate: false}); - -Highcharts.VMLRenderer.prototype.cuboid = Highcharts.SVGRenderer.prototype.cuboid; -Highcharts.VMLRenderer.prototype.cuboidPath = Highcharts.SVGRenderer.prototype.cuboidPath; - -Highcharts.VMLRenderer.prototype.toLinePath = Highcharts.SVGRenderer.prototype.toLinePath; - -Highcharts.VMLRenderer.prototype.createElement3D = Highcharts.SVGRenderer.prototype.createElement3D; - -Highcharts.VMLRenderer.prototype.arc3d = function (shapeArgs) { - var result = Highcharts.SVGRenderer.prototype.arc3d.call(this, shapeArgs); - result.css({zIndex: result.zIndex}); - return result; -}; - -Highcharts.VMLRenderer.prototype.arc3dPath = Highcharts.SVGRenderer.prototype.arc3dPath; - -// Draw the series in the reverse order -Highcharts.Chart.prototype.renderSeries = function () { - var serie, - i = this.series.length; - while (i--) { - serie = this.series[i]; - serie.translate(); - if (serie.setTooltipPoints) { - serie.setTooltipPoints(); - } - serie.render(); - } -}; - -Highcharts.wrap(Highcharts.Axis.prototype, 'render', function (proceed) { - proceed.apply(this, [].slice.call(arguments, 1)); - // VML doesn't support a negative z-index - if (this.sideFrame) { - this.sideFrame.css({zIndex: 0}); - this.sideFrame.front.attr({fill: this.sideFrame.color}); - } - if (this.bottomFrame) { - this.bottomFrame.css({zIndex: 1}); - this.bottomFrame.front.attr({fill: this.bottomFrame.color}); - } - if (this.backFrame) { - this.backFrame.css({zIndex: 0}); - this.backFrame.front.attr({fill: this.backFrame.color}); - } -}); - -} - -}(Highcharts)); diff --git a/static/js/highcharts/highcharts-all.js b/static/js/highcharts/highcharts-all.js deleted file mode 100644 index 69a8da6ee..000000000 --- a/static/js/highcharts/highcharts-all.js +++ /dev/null @@ -1,453 +0,0 @@ -/* - Highcharts JS v4.0.1 (2014-04-24) - - Standalone Highcharts Framework - - License: MIT License -*/ -var HighchartsAdapter=function(){function o(c){function b(b,a,d){b.removeEventListener(a,d,!1)}function d(b,a,d){d=b.HCProxiedMethods[d.toString()];b.detachEvent("on"+a,d)}function a(a,c){var f=a.HCEvents,i,g,k,j;if(a.removeEventListener)i=b;else if(a.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(a,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b, -a,!1);else if(d.attachEvent){g=function(b){b.target=b.srcElement||window;a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent("on"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?b(this,c,h):this.attachEvent&&d(this,c,h)):(a(this,c),this.HCEvents[c]=[])):(a(this),this.HCEvents={})},trigger:function(b, -a){var d=this.HCEvents[b]||[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g=a.duration+this.startTime){this.now=this.end; -this.pos=this.state=1;this.update();b=this.options.curAnim[this.prop]=!0;for(h in a.curAnim)a.curAnim[h]!==!0&&(b=!1);b&&a.complete&&a.complete.call(e);a=!1}else e=c-this.startTime,this.state=e/a.duration,this.pos=a.easing(e,0,1,a.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),a=!0;return a}};this.animate=function(b,d,a){var e,h="",f,i,g;b.stopAnimation=!1;if(typeof a!=="object"||a===null)e=arguments,a={duration:e[2],easing:e[3],complete:e[4]};if(typeof a.duration!=="number")a.duration= -400;a.easing=Math[a.easing]||Math.easeInOutSine;a.curAnim=Highcharts.extend({},d);for(g in d)i=new n(b,a,g),f=null,g==="d"?(i.paths=c.init(b,b.d,d.d),i.toD=d.d,e=0,f=1):b.attr?e=b.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(b,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,b){return window.getComputedStyle(c,void 0).getPropertyValue(b)},getScript:function(c,b){var d=l.getElementsByTagName("head")[0],a=l.createElement("script");a.type="text/javascript"; -a.src=c;a.onload=b;d.appendChild(a)},inArray:function(c,b){return b.indexOf?b.indexOf(c):p.indexOf.call(b,c)},adapterRun:function(c,b){return parseInt(HighchartsAdapter._getStyle(c,b),10)},grep:function(c,b){return p.filter.call(c,b)},map:function(c,b){for(var d=[],a=0,e=c.length;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments); -a.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h-1?h.thousandsSep:""))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return U.pow(10,T(U.log(a)/ -U.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;dc&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=""}function ra(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Ra=(a&&E.global.timezoneOffset|| -0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Xa=b+"Date";fb=b+"Month";gb=b+"FullYear";Db=c+"Minutes";Eb=c+"Hours";sb=c+"Date";Fb=c+"Month";Gb=c+"FullYear"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted; -this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&& -!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa="http://www.w3.org/2000/svg",aa=!!y.createElementNS&&!!y.createElementNS(xa,"svg").createSVGRect,Nb=Ta&&parseInt(wa.split("Firefox/")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement("canvas").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja="div",Q="none",Ob=/^[0-9]+$/,Pb="stroke-width",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16, -!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return"Invalid date";var a=m(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]=== -"function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c), -h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
',pointFormat:' {series.name}: {point.y}
',shadow:!0,snap:Jb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px", -whiteSpace:"nowrap"}},credits:{enabled:0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ya=function(a){var b=[],c, -d;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d, -function(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b==="span"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient? -f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:"userSpaceOnUse"}));for(n in g)n!=="id"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(",");h[s]?a=h[s].attr("id"):(g.id=a="highcharts-"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs), -i.stops=[],p(j,function(a){a[1].indexOf("rgba")===0?(e=ya(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)}));c.setAttribute(b,"url("+d.url+"#"+a+")")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a==="string"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&& -(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c==="x"||c==="y"))this.doTransform=!0;h||(this[c+"Setter"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a==="height"?v(b-(c[d].cutHeight||0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element, -c=H(b,"class")||"";c.indexOf(a)===-1&&H(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;d=u(e)%2/2;a.x=T(a.x||this.x|| -0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element, -a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";H(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf("Android")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference= -a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")"); -(r(c)||r(d))&&a.push("scale("+m(c,1)+" "+m(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||"renderer",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x|| -0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=u(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=u(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===""||Ob.test(d))h="num."+d.toString().length+ -(f?"|"+f.fontSize+"|"+f.fontFamily:"");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize==="11px"&&d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI=== -xa?(this.element.removeAttribute("visibility"),this):this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes; -for(g=0;gf||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f= -0;f/,i=/<.*href="(http[^"]+)".*>/,l&&!a.added&&this.box.appendChild(b), -e=f?e.replace(/<(b|strong)>/g,'').replace(/<(i|em)>/g,'').replace(//g,"").split(//g):[e],e[e.length-1]===""&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(//g,"|||");g=e.split("|||");p(g,function(e){if(e!==""||g.length===1){var o={},m=y.createElementNS(xa,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"), -H(m,"style",p));i.test(e)&&!d&&(H(m,"onclick",'location.href="'+e.match(i)[1]+'"'),G(m,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:"block"}),H(m,"dy",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),o=e.length>1&&k.whiteSpace!=="nowrap",$,r,B=a._clipHeight,q=[],v=s(),t= -1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=["..."],a.attr("title",a.textStr)):(m=y.createElementNS(xa,"tspan"),H(m,{dy:v,x:j}),p&&H(m,"style",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a, -b,c,i,null,null,null,null,"button"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style; -K(j.element,Aa?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b= -{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r: -e,g=this.createElement("rect"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return r(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f= -{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}), -a.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y("img",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L", -a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-fc&&i>b+g&&ib+g&&id&&h>a+g&&ha+g&&hl&&/[ \-]/.test(b.textContent||b.innerText))G(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(ib)k=b.offsetHeight; -this.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?"-ms-transform":ib?"-webkit-transform":Ta?"MozTransform":Ib?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Ta?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox; -e.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element, -"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute", -";"],e=b===Ja;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform, -setSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-= -h*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?"inherit":"rect(auto)"}); -return b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path, -l,o,n,s;k&&typeof k.value!=="string"&&(k="x");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=[''];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=[''];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h): -f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||Y(this.renderer.prepVML([""]),null,null,c))[b]=a||"solid";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff? -this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!==Q,this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+"px";c.top=u(Z(a*Ca))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+="px"); -this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName==="DIV"&&(a=a==="hidden"?"-999em":0,hb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter= -X.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf("MSIE 8.0")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+u(a?e:d)+"px,"+u(a? -f:b)+"px,"+u(a?b:f)+"px,"+u(a?d:e)+"px)"};!a&&hb&&c==="DIV"&&q(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x="",a=a.stops,r,v=[],q=function(){h=['']; -Y(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);v.push(a[0]*100+"% "+k);b?(m=l,J=k):(s=l,L=k)});if(c==="fill")if(i==="gradient")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle="'+(90-U.atan((o-a)/(n-c))*180/ma)+'"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width- -0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src="'+E.global.VMLRadialGradientURL+'" size="'+t+","+u+'" origin="0.5,0.5" position="'+y+","+B+'" color2="'+L+'" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ya(a),h=["<",c,' opacity="',f.get("a"),'"/>'],Y(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b? -(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;G(a,{flip:"x",left:z(d.width)-(e?z(e.top): -1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ -c,b+d/2,"e"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa="http://www.w3.org/1999/xhtml"},X.prototype.symbols={},Lb=function(){function a(){var a= -b.length,d;for(d=0;dl[s]?l[s]= -g+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+kd&&(c=!1)):g+j>o&&(g=o-j,n&&g+k0&&b.height>0){f=w({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1], -s[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:N,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01, -maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0, -tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite= -b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement=== -"between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this)); -this.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a= -this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMaxg+this.width)o=!0}else if(a=g,c=l-this.right,ih+this.height)o=!0;return o&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a, -b,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||hc&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j==="on"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding, -k=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range= -null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval= -b.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.lenv(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange, -!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join("-");if(!this.isLinked&& -!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop); -this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines= -a.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:s.zIndex||7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation|| -0,align:n.textAlign||{low:"left",middle:"center",high:"right"}[n.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?"show":"hide"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?"y":"x"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite, -d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)* -this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!== -!1,z;a.labelEdge.length=0;a.justifyToPlot=w==="justify";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,"minor"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c, -!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d= -i.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d=0.5)a=u(a),g=this.getLinearTickPositions(a, -b,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?"minorTickInterval":"tickInterval"],a=m(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval= -a;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared}, -destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a= -this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow? -(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=["y",d.chartHeight,b,c.plotY+d.plotTop],i=["x",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=cb-e)return!1;else f[a]=db-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))}); -d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category, -y:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart, -c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type==="datetime"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace("{point.key}","{point.key:"+ -e+"}"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip), -this.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis": -"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;jk&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove= -function(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,"mousemove",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null; -p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY}, -drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;dh+j&&(d=h+j);ei+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill|| -"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr("x"):a.x,f=a.attr?a.attr("y"):a.y,g=a.attr?a.attr("width"): -a.width,h=a.attr?a.attr("height"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,"selection",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched= -!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition= -null},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget|| -a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(D(c.series,"click",q(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,"click",a)))},setDOMEvents:function(){var a= -this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,"mouseleave",a.onContainerMouseLeave);ab===1&&K(y,"mouseup",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,"mouseleave",this.onContainerMouseLeave); -ab||(W(y,"mouseup",this.onDocumentMouseUp),W(y,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,o=a?"width":"height",n=i["plot"+(a? -"Left":"Top")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?"h":"v"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i["plot"+(a?"Width":"Height")]/p};c();b=m;bx.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown, -e=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding, -e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()): -a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType==="touch"|| -a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,"onContainerTouchStart","touchstart",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,"onContainerTouchMove","touchmove",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})}, -onDocumentPointerUp:function(a){Ab(a,"onContainerTouchEnd","touchend",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,zb?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(y,zb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});Ma(Wa.prototype,"init",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{"-ms-touch-action":Q,"touch-action":Q})}); -Ma(Wa.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,"destroy",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY= -e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g), -g)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()}, -positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+"px",top:g+"px",display:g>c-6&&g(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a= -[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup); -a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor, -"stroke-width":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages, -s,q=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav= -o=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(o),this.pager=d.text("",15,10).css(j.style).add(o),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation, -h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}}; -N=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine= -e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\/7\.0/.test(wa)||Ta)&&Ma(lb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing", -d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,"load",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this, -a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&& -(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,"afterSetExtremes", -q(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,"redraw");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container; -a?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a); -a||ra(13,!0);c=z(H(a,"data-highcharts-chart"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,"data-highcharts-chart",this.index);a.innerHTML="";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},q({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"}, -b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!r(d[1]))this.marginRight= -v(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])|| -(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,"width"),f=c.height||jb(d,"height"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth= -e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,"resize",b);K(a,"destroy",function(){W(I,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,"endResize",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+"px",height:f+"px"},va);d.setChartSize(!0);d.renderer.setSize(e, -f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,"resize");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth= -k=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize(); -a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage, -o=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow); -if(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,"stroke-width":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g]; -for(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f= -d.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top; -c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,"destroy");V[a.index]=t;ab--;a.renderTo.removeAttribute("data-highcharts-chart");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy(); -p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!=="complete"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange", -function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,"init");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,"beforeRender");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0); -D(a,"load")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+"Top"],c[0]),m(b[a+"Right"],c[1]),m(b[a+"Bottom"],c[2]),m(b[a+"Left"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],"50%"),m(b[1],"50%"),a.size||"100%",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100: -a)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x=== -t&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;ga+1&&b.push(d.slice(a+ -1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters, -e;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker, -setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+"Data"].length=0});if(s&&h>s){for(c=0;k===null&&cj||this.forceCrop))if(o=h.min,n=h.max,b[d-1]n)b=[],c=[];else if(b[0]n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData, -e=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]0&&(g===t||a=c){f=v(0,i-h);break}for(;id){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f, -g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData|| -this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||ha(i),k=a.threshold,a=0;a0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a, -b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color= -e.color||ya(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,f);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;g=h.length;if(!i||g1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(), -h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]=l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j= -b.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}}, -invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,"resize",a),K(b,"destroy",function(){W(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis; -if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?"visible":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group","series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(), -a.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth, -height:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,"updatedData")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign, -rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};la.prototype.buildStacks=function(){var a= -this.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;cg;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d, -h);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving= -!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox= -!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:"area",getSegments:function(){var a= -[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o=0;d--)g=m(a[d].yBottom,f),da&&i>e?(i=v(a,e),k=2*e-i):ig&&k>e?(k=v(g,e),i=2*e-k):k0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+ -999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType="rect";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit|| -250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=i.pointAttr[i.selected?"select":""]||a.pointAttr[""],k?(bb(k),k.attr(h)[b.pointCount {series.name}
', -pointFormat:"x: {point.x}
y: {point.y}
"},stickyTracking:!1});pa=ka(O,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0, -legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:"pie",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};K(a,"select",b);K(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible= -a=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a); -this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d= -b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/ -2+l)};for(o=0;o1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0? -"center":p.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select": -""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup("dataLabelsGroup", -"data-labels","hidden",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,"afterAnimate",function(){a.dataLabelsGroup.show()[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color, -a.color,"black");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?"text":"label"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel= -function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,"justify")==="justify"?this.justifyDataLabel(b, -c,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight- -j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)}); -for(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||ch-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]= -v(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?["M",A+(x[6]==="left"?5:-5),C,"C",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],"L",x[4],x[5]]:["M",A+(x[6]==="left"?5:-5),C,"L",x[2],x[3],"L",x[4],x[5]],i?(i.animate({d:j}),i.attr("visibility",G)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g, -stroke:e.connectorColor||b.color||"#606060",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]- -a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);em(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&& -(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?"center":i?"right":"left");c.verticalAlign=m(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver(); -for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath: -a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q="rgba(192,192,192,"+(aa?1.0E-4:0.002)+")";if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;mC(k.dataMin,k.min)&&i=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+ -(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?"select":"unselect")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E}, -hasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:"Highcharts",version:"4.0.1"})})(); -/* - Highcharts JS v4.0.1 (2014-04-24) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(m,C){function K(a,b,c){this.init.call(this,a,b,c)}var O=m.arrayMin,P=m.arrayMax,s=m.each,F=m.extend,o=m.merge,Q=m.map,q=m.pick,x=m.pInt,p=m.getOptions().plotOptions,h=m.seriesTypes,u=m.extendClass,L=m.splat,r=m.wrap,M=m.Axis,y=m.Tick,H=m.Point,R=m.Pointer,S=m.CenteredSeriesMixin,z=m.TrackerMixin,t=m.Series,v=Math,D=v.round,A=v.floor,T=v.max,U=m.Color,w=function(){};F(K.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;if(b.angular)e.background={};d.options=a=o(e,a); -(a=a.background)&&s([].concat(L(a)).reverse(),function(a){var g=a.backgroundColor,a=o(d.defaultBackgroundOptions,a);if(g)a.backgroundColor=g;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}); -var G=M.prototype,y=y.prototype,V={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},N={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15,x:0,y:null}, -maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){a=this.options=o(this.defaultOptions,this.defaultRadialOptions,a);if(!a.plotBands)a.plotBands=[]},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=S.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center,b=q(b, -c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset:0},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&& -1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial){this.center=this.pane.center=m.CenteredSeriesMixin.getCenter.call(this.pane);if(this.isCircular)this.sector=this.endAngleRad-this.startAngleRad;this.len=this.width=this.height=this.center[2]*q(this.sector,1)/2}},getPosition:function(a,b){return this.postTranslate(this.isCircular?this.translate(a):0,q(this.isCircular?b:this.translate(a),this.center[2]/2)-this.offset)},postTranslate:function(a, -b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,f=d[2]/2,g=[q(c.outerRadius,"100%"),c.innerRadius,q(c.thickness,10)],k=/%$/,l,n=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(n||(g[0]=this.translate(a),g[1]=this.translate(b)),g=Q(g,function(a){k.test(a)&&(a=x(a,10)*f/100); -return a}),c.shape==="circle"||!n?(a=-Math.PI/2,b=Math.PI*1.5,l=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],g[0],g[0],{start:a,end:b,innerR:q(g[1],g[0]-g[2]),open:l}));return d},getPlotLinePath:function(a,b){var c=this,d=c.center,e=c.chart,f=c.getPosition(a),g,k,l;c.isCircular?l=["M",d[0]+e.plotLeft,d[1]+e.plotTop,"L",f.x,f.y]:c.options.gridLineInterpolation==="circle"?(a=c.translate(a))&&(l=c.getLinePath(0,a)):(s(e.xAxis,function(a){a.pane=== -c.pane&&(g=a)}),l=[],a=c.translate(a),d=g.tickPositions,g.autoConnect&&(d=d.concat([d[0]])),b&&(d=[].concat(d).reverse()),s(d,function(f,c){k=g.getPosition(f,a);l.push(c?"L":"M",k.x,k.y)}));return l},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};r(G,"init",function(a,b,c){var i;var d=b.angular,e=b.polar,f=c.isX,g=d&&f,k,l;l=b.options;var n=c.pane||0;if(d){if(F(this, -g?V:N),k=!f)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)F(this,N),this.defaultRadialOptions=(k=f)?this.defaultRadialXOptions:o(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!g&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(i=b.panes[n]=b.panes[n]||new K(L(l.pane)[n],b,this),n=i);n=n.options;b.inverted=!1;l.chart.zoomType=null;this.startAngleRad=b=(n.startAngle-90)*Math.PI/180;this.endAngleRad=l=(q(n.endAngle,n.startAngle+360)-90)*Math.PI/ -180;this.offset=a.offset||0;if((this.isCircular=k)&&c.max===C&&l-b===2*Math.PI)this.autoConnect=!0}});r(y,"getPosition",function(a,b,c,d,e){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,e)});r(y,"getLabelPosition",function(a,b,c,d,e,f,g,k,l){var n=this.axis,j=f.y,i=f.align,h=(n.translate(this.pos)+n.startAngleRad+Math.PI/2)/Math.PI*180%360;n.isRadial?(a=n.getPosition(this.pos,n.center[2]/2+q(f.distance,-25)),f.rotation==="auto"?d.attr({rotation:h}):j===null&&(j=n.chart.renderer.fontMetrics(d.styles.fontSize).b- -d.getBBox().height/2),i===null&&(i=n.isCircular?h>20&&h<160?"left":h>200&&h<340?"right":"center":"center",d.attr({align:i})),a.x+=f.x,a.y+=j):a=a.call(this,b,c,d,e,f,g,k,l);return a});r(y,"getMarkPath",function(a,b,c,d,e,f,g){var k=this.axis;k.isRadial?(a=k.getPosition(this.pos,k.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,f,g);return b});p.arearange=o(p.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:' {series.name}: {point.low} - {point.high}
'}, -trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0},states:{hover:{halo:!1}}});h.arearange=u(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});t.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this); -s(this.points,function(b){var c=b.low,d=b.high,e=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=e,b.plotHigh=null):(b.plotLow=e,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,e=t.prototype.getSegmentPath,f,g;g=this.options;var k=g.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=e.call(this, -b);if(k)k===!0&&(k="left"),g.step={left:"right",center:"center",right:"left"}[k];c=e.call(this,c);g.step=k;g=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return g},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=t.prototype,f=this.options.dataLabels,g,k=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)g=a[c],g.y=g.high,g._plotY=g.plotY,g.plotY=g.plotHigh,d[c]=g.dataLabel,g.dataLabel=g.dataLabelUpper,g.below=!1,k?(f.align="left",f.x=f.xHigh):f.y= -f.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(c=b;c--;)g=a[c],g.dataLabelUpper=g.dataLabel,g.dataLabel=d[c],g.y=g.low,g.plotY=g._plotY,g.below=!0,k?(f.align="right",f.x=f.xLow):f.y=f.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},getSymbol:h.column.prototype.getSymbol,drawPoints:w});p.areasplinerange=o(p.arearange);h.areasplinerange=u(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline}); -(function(){var a=h.column.prototype;p.columnrange=o(p.column,p.arearange,{lineWidth:1,pointRange:null});h.columnrange=u(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);s(b.points,function(a){var f=a.shapeArgs,g=b.options.minPointLength,k;a.tooltipPos=null;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;k=d;a=a.plotY-d;a {series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
'}, -whiskerLength:"50%",whiskerWidth:2});h.boxplot=u(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a= -this,b=a.points,c=a.options,d=a.chart.renderer,e,f,g,k,l,n,j,i,h,m,p,I,r,o,J,u,w,t,v,x,z,y,E=a.doQuartiles!==!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){h=b.graphic;z=b.shapeArgs;p={};o={};u={};y=b.color||a.color;if(b.plotY!==C)if(e=b.pointAttr[b.selected?"selected":""],w=z.width,t=A(z.x),v=t+w,x=D(w/2),f=A(E?b.q1Plot:b.lowPlot),g=A(E?b.q3Plot:b.lowPlot),k=A(b.highPlot),l=A(b.lowPlot),p.stroke=b.stemColor||c.stemColor||y,p["stroke-width"]=q(b.stemWidth,c.stemWidth,c.lineWidth),p.dashstyle= -b.stemDashStyle||c.stemDashStyle,o.stroke=b.whiskerColor||c.whiskerColor||y,o["stroke-width"]=q(b.whiskerWidth,c.whiskerWidth,c.lineWidth),u.stroke=b.medianColor||c.medianColor||y,u["stroke-width"]=q(b.medianWidth,c.medianWidth,c.lineWidth),u["stroke-linecap"]="round",j=p["stroke-width"]%2/2,i=t+x+j,m=["M",i,g,"L",i,k,"M",i,f,"L",i,l],E&&(j=e["stroke-width"]%2/2,i=A(i)+j,f=A(f)+j,g=A(g)+j,t+=j,v+=j,I=["M",t,g,"L",t,f,"L",v,f,"L",v,g,"L",t,g,"z"]),B&&(j=o["stroke-width"]%2/2,k+=j,l+=j,r=["M",i-x*B, -k,"L",i+x*B,k,"M",i-x*B,l,"L",i+x*B,l]),j=u["stroke-width"]%2/2,n=D(b.medianPlot)+j,J=["M",t,n,"L",v,n],h)b.stem.animate({d:m}),B&&b.whiskers.animate({d:r}),E&&b.box.animate({d:I}),b.medianShape.animate({d:J});else{b.graphic=h=d.g().add(a.group);b.stem=d.path(m).attr(p).add(h);if(B)b.whiskers=d.path(r).attr(o).add(h);if(E)b.box=d.path(I).attr(e).add(h);b.medianShape=d.path(J).attr(u).add(h)}})}});p.errorbar=o(p.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:' {series.name}: {point.low} - {point.high}
'}, -whiskerWidth:null});h.errorbar=u(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:h.arearange?h.arearange.prototype.drawDataLabels:w,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});p.waterfall=o(p.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=u(h.column,{type:"waterfall",upColorProp:"fill", -pointArrayMap:["low","y"],pointValKey:"y",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.yAxis,b,c,d,e,f,g,k,l,n;b=this.options.threshold;h.column.prototype.translate.apply(this);l=b;d=this.points;for(c=0,b=d.length;c0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length, -c=D(this.options.lineWidth+this.borderWidth)%2/2,d=[],e,f,g;for(g=1;g0?(k[f]-a)/(b- -a):0.5,n&&g>=0&&(g=Math.sqrt(g)),l.push(v.ceil(c+g*(d-c))/2);this.radii=l},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=e?e[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY, -r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=x(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});M.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,f=this.isXAxis,g=f?"xData":"yData",k=this.min,l={}, -n=v.min(c.plotWidth,c.plotHeight),j=Number.MAX_VALUE,i=-Number.MAX_VALUE,h=this.max-k,m=b/h,p=[];this.tickPositions&&(s(this.series,function(b){var g=b.options;if(b.bubblePadding&&(b.visible||!c.options.chart.ignoreHiddenSeries))if(a.allowZoomOutside=!0,p.push(b),f)s(["minSize","maxSize"],function(a){var b=g[a],f=/%$/.test(b),b=x(b);l[a]=f?n*b/100:b}),b.minPxSize=l.minSize,b=b.zData,b.length&&(j=v.min(j,v.max(O(b),g.displayNegative===!1?g.zThreshold:-Number.MAX_VALUE)),i=v.max(i,P(b)))}),s(p,function(a){var b= -a[g],c=b.length,n;f&&a.getRadii(j,i,l.minSize,l.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(n=a.radii[c],d=Math.min((b[c]-k)*m-n,d),e=Math.max((b[c]-k)*m+n,e))}),p.length&&h>0&&q(this.options.min,this.userMin)===C&&q(this.options.max,this.userMax)===C&&(e-=b,m*=(b+d-e)/b,this.min+=d/m,this.max+=e/m))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b=this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,b){var c=this.chart, -d=this.options.animation,e=this.group,j=this.markerGroup,i=this.xAxis.center,h=c.plotLeft,m=c.plotTop;if(c.polar){if(c.renderer.isSVG)d===!0&&(d={}),b?(c={translateX:i[0]+h,translateY:i[1]+m,scaleX:0.001,scaleY:0.001},e.attr(c),j&&j.attr(c)):(c={translateX:h,translateY:m,scaleX:1,scaleY:1},e.animate(c,d),j&&j.animate(c,d),this.animate=null)}else a.call(this,b)}var c=t.prototype,d=R.prototype,e;c.toXY=function(a){var b,c=this.chart,d=a.plotX;b=a.plotY;a.rectPlotX=d;a.rectPlotY=b;d=(d/Math.PI*180+this.xAxis.pane.options.startAngle)% -360;d<0&&(d+=360);a.clientX=d;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-b);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};c.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,b){return a.clientX-b.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};h.area&&r(h.area.prototype,"init",a);h.areaspline&&r(h.areaspline.prototype,"init",a);h.spline&&r(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,j,i,h,m,p,o;if(this.chart.polar){e= -c.plotX;j=c.plotY;a=b[d-1];i=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),i||(i=b[1]));if(a&&i)h=a.plotX,m=a.plotY,b=i.plotX,p=i.plotY,h=(1.5*e+h)/2.5,m=(1.5*j+m)/2.5,i=(1.5*e+b)/2.5,o=(1.5*j+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(m-j,2)),p=Math.sqrt(Math.pow(i-e,2)+Math.pow(o-j,2)),h=Math.atan2(m-j,h-e),m=Math.atan2(o-j,i-e),o=Math.PI/2+(h+m)/2,Math.abs(h-o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,m=j+Math.sin(o)*b,i=e+Math.cos(Math.PI+o)*p,o=j+Math.sin(Math.PI+o)*p,c.rightContX=i,c.rightContY= -o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,m||j,e,j],a.rightContX=a.rightContY=null):c=["M",e,j]}else c=a.call(this,b,c,d);return c});r(c,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});r(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this, -b)});r(c,"animate",b);r(c,"setTooltipPoints",function(a,b){this.chart.polar&&F(this.xAxis,{tooltipLen:360});return a.call(this,b)});if(h.column)e=h.column.prototype,r(e,"animate",b),r(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,h=this.chart.renderer,i,m;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(m=b.length;m--;)i=b[m],a=i.barX+e,i.shapeType="path",i.shapeArgs={d:h.symbols.arc(d[0],d[1],c-i.plotY,null,{start:a,end:a+i.pointWidth, -innerR:c-q(i.yBottom,c)})},this.toXY(i),i.tooltipPos=[i.plotX,i.plotY],i.ttBelow=i.plotY>d[1]}}),r(e,"alignDataLabel",function(a,b,d,e,h,j){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,j)}else a.call(this,b,d,e,h,j)});r(d,"getIndex",function(a,b){var c,d=this.chart,e;d.polar?(e=d.xAxis[0].center,c= -b.chartX-e[0]-d.plotLeft,d=b.chartY-e[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});r(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var e=a.isXAxis,f=a.center,h=b.chartX-f[0]-c.plotLeft,f=b.chartY-f[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,f):Math.sqrt(Math.pow(h,2)+Math.pow(f,2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts); -/* - Highcharts JS v4.0.1 (2014-04-24) - - (c) 2009-2013 Torstein Hønsi - - License: www.highcharts.com/license -*/ -(function(c){function x(e,a,b,d){var f,g,h;b*=n;a*=n;var i=[],j,o,t;b*=-1;j=d.x;o=d.y;t=(d.z===0?1.0E-4:d.z)*(d.vd||25);var y=k(b),v=l(b),m=k(a),q=l(a),r,u,s;c.each(e,function(a){r=a.x-j;u=a.y-o;s=a.z||0;f=v*r-y*s;g=-y*m*r-v*m*s+q*u;h=y*q*r+v*q*s+m*u;f=f*((t-h)/t)+j;g=g*((t-h)/t)+o;i.push({x:C(f),y:C(g),z:C(h)})});return i}function z(e,a,b,d,f,c,h,i){var j=[];return c>f&&c-f>m/2+1.0E-4?(j=j.concat(z(e,a,b,d,f,f+m/2,h,i)),j=j.concat(z(e,a,b,d,f+m/2,c,h,i))):cm/2+1.0E-4?(j=j.concat(z(e,a,b, -d,f,f-m/2,h,i)),j=j.concat(z(e,a,b,d,f-m/2,c,h,i))):(j=c-f,["C",e+b*l(f)-b*D*j*k(f)+h,a+d*k(f)+d*D*j*l(f)+i,e+b*l(c)+b*D*j*k(c)+h,a+d*k(c)-d*D*j*l(c)+i,e+b*l(c)+h,a+d*k(c)+i])}function F(e){if(this.chart.is3d()){var a=this.chart.options.plotOptions.column.grouping;a!==void 0&&!a&&this.group.zIndex!==void 0&&this.group.attr({zIndex:this.group.zIndex*10});if(this.userOptions.borderColor===void 0)this.options.borderColor=this.color;c.each(this.data,function(a){var d=a.options.borderColor||a.color||a.series.userOptions.borderColor; -a.options.borderColor=d;a.borderColor=d;a.pointAttr[""].stroke=d;a.pointAttr.hover.stroke=d;a.pointAttr.select.stroke=d})}e.apply(this,[].slice.call(arguments,1))}var m=Math.PI,n=m/180,k=Math.sin,l=Math.cos,C=Math.round,D=4*(Math.sqrt(2)-1)/3/(m/2);c.SVGRenderer.prototype.toLinePath=function(e,a){var b=[];c.each(e,function(a){b.push("L",a.x,a.y)});b[0]="M";a&&b.push("Z");return b};c.SVGRenderer.prototype.cuboid=function(e){var a=this.g(),e=this.cuboidPath(e);a.front=this.path(e[0]).attr({zIndex:e[3], -"stroke-linejoin":"round"}).add(a);a.top=this.path(e[1]).attr({zIndex:e[4],"stroke-linejoin":"round"}).add(a);a.side=this.path(e[2]).attr({zIndex:e[5],"stroke-linejoin":"round"}).add(a);a.fillSetter=function(a){var d=c.Color(a).brighten(0.1).get(),e=c.Color(a).brighten(-0.1).get();this.front.attr({fill:a});this.top.attr({fill:d});this.side.attr({fill:e});this.color=a;return this};a.opacitySetter=function(a){this.front.attr({opacity:a});this.top.attr({opacity:a});this.side.attr({opacity:a});return this}; -a.attr=function(a){a.shapeArgs||a.x?(a=this.renderer.cuboidPath(a.shapeArgs||a),this.front.attr({d:a[0],zIndex:a[3]}),this.top.attr({d:a[1],zIndex:a[4]}),this.side.attr({d:a[2],zIndex:a[5]})):c.SVGElement.prototype.attr.call(this,a);return this};a.animate=function(a,d,e){a.x&&a.y?(a=this.renderer.cuboidPath(a),this.front.attr({zIndex:a[3]}).animate({d:a[0]},d,e),this.top.attr({zIndex:a[4]}).animate({d:a[1]},d,e),this.side.attr({zIndex:a[5]}).animate({d:a[2]},d,e)):a.opacity?(this.front.animate(a, -d,e),this.top.animate(a,d,e),this.side.animate(a,d,e)):c.SVGElement.prototype.animate.call(this,a,d,e);return this};a.destroy=function(){this.front.destroy();this.top.destroy();this.side.destroy();return null};a.attr({zIndex:-e[3]});return a};c.SVGRenderer.prototype.cuboidPath=function(e){var a=e.x,b=e.y,d=e.z,c=e.height,g=e.width,h=e.depth,i=e.alpha,j=e.beta,a=[{x:a,y:b,z:d},{x:a+g,y:b,z:d},{x:a+g,y:b+c,z:d},{x:a,y:b+c,z:d},{x:a,y:b+c,z:d+h},{x:a+g,y:b+c,z:d+h},{x:a+g,y:b,z:d+h},{x:a,y:b,z:d+h}], -a=x(a,i,j,e.origin),e=["M",a[0].x,a[0].y,"L",a[7].x,a[7].y,"L",a[6].x,a[6].y,"L",a[1].x,a[1].y,"Z"],b=["M",a[3].x,a[3].y,"L",a[2].x,a[2].y,"L",a[5].x,a[5].y,"L",a[4].x,a[4].y,"Z"],d=["M",a[1].x,a[1].y,"L",a[2].x,a[2].y,"L",a[5].x,a[5].y,"L",a[6].x,a[6].y,"Z"],c=["M",a[0].x,a[0].y,"L",a[7].x,a[7].y,"L",a[4].x,a[4].y,"L",a[3].x,a[3].y,"Z"];return[["M",a[0].x,a[0].y,"L",a[1].x,a[1].y,"L",a[2].x,a[2].y,"L",a[3].x,a[3].y,"Z"],a[7].ya[2].y?b:[],a[6].x>a[1].x?d:a[7].x0?(a[0].z+a[7].z+a[6].z+a[1].z)/4:(a[3].z+a[2].z+a[5].z+a[4].z)/4,i>0?(a[1].z+a[2].z+a[5].z+a[6].z)/4:(a[0].z+a[7].z+a[4].z+a[3].z)/4]};c.SVGRenderer.prototype.arc3d=function(e){e.alpha*=n;e.beta*=n;var a=this.g(),b=this.arc3dPath(e),d=a.renderer,f=b.zAll*100;a.shapeArgs=e;a.side1=d.path(b.side2).attr({zIndex:b.zSide2}).add(a);a.side2=d.path(b.side1).attr({zIndex:b.zSide1}).add(a);a.inn=d.path(b.inn).attr({zIndex:b.zInn}).add(a);a.out=d.path(b.out).attr({zIndex:b.zOut}).add(a); -a.top=d.path(b.top).attr({zIndex:b.zTop}).add(a);a.fillSetter=function(a){this.color=a;var b=c.Color(a).brighten(-0.1).get();this.side1.attr({fill:b});this.side2.attr({fill:b});this.inn.attr({fill:b});this.out.attr({fill:b});this.top.attr({fill:a});return this};a.animate=function(a,b,d){c.SVGElement.prototype.animate.call(this,a,b,d);if(a.x&&a.y)b=this.renderer,a=c.splat(a)[0],a.alpha*=n,a.beta*=n,b=b.arc3dPath(a),this.shapeArgs=a,this.inn.attr({d:b.inn,zIndex:b.zInn}),this.out.attr({d:b.out,zIndex:b.zOut}), -this.side1.attr({d:b.side1,zIndex:b.zSide2}),this.side2.attr({d:b.side2,zIndex:b.zSide1}),this.top.attr({d:b.top,zIndex:b.zTop}),this.attr({fill:this.color}),this.attr({zIndex:b.zAll*100});return this};a.zIndex=f;a.attr({zIndex:f});return a};c.SVGRenderer.prototype.arc3dPath=function(e){var a=e.x,b=e.y,d=e.start,c=e.end-1.0E-5,g=e.r,h=e.innerR,i=e.depth,j=e.alpha,o=e.beta,t=l(d),y=k(d),v=l(c),n=k(c),q=g*l(o),r=g*l(j),u=h*l(o),s=h*l(j),A=i*k(o),B=i*k(j),i=["M",a+q*t,b+r*y],i=i.concat(z(a,b,q,r,d,c, -0,0)),i=i.concat(["L",a+u*v,b+s*n]),i=i.concat(z(a,b,u,s,c,d,0,0)),i=i.concat(["Z"]),e=(e.start+e.end)/2,e=k(o)*l(e)+k(-j)*k(-e),p=o>0?m/2:0,w=j>0?0:m/2,p=d>-p?d:c>-p?-p:d,x=c0?4:-1}).css({stroke:i.color}).add(); -else{var q={x:m,y:n,z:o+1,width:l,height:k+i.size,depth:j.size,alpha:f,beta:g,origin:d};this.backFrame?this.backFrame.animate(q):this.backFrame=b.cuboid(q).attr({fill:j.color,zIndex:-3}).css({stroke:j.color}).add();this.axisLine&&this.axisLine.hide();a={x:(a.yAxis[0].opposite?l:0)+m-h.size,y:n,z:0,width:h.size,height:k+i.size,depth:o+j.size,alpha:f,beta:g,origin:d};this.sideFrame?this.sideFrame.animate(a):this.sideFrame=b.cuboid(a).attr({fill:h.color,zIndex:-2}).css({stroke:h.color}).add()}}});c.wrap(c.Axis.prototype, -"getPlotLinePath",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.chart.is3d())return a;if(a===null)return a;var b=this.chart,d=b.options.chart.options3d,f=d.depth;d.origin={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:f,vd:d.viewDistance};var a=[{x:a[1],y:a[2],z:this.horiz||this.opposite?f:0},{x:a[1],y:a[2],z:f},{x:a[4],y:a[5],z:f},{x:a[4],y:a[5],z:this.horiz||this.opposite?0:f}],f=b.options.inverted?d.beta:d.alpha,g=b.options.inverted?d.alpha:d.beta;g*=b.yAxis[0].opposite? --1:1;a=x(a,f,g,d.origin);return a=this.chart.renderer.toLinePath(a,!1)});c.wrap(c.Tick.prototype,"getMarkPath",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return a;var b=this.axis.chart,d=b.options.chart.options3d,f={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:d.depth,vd:d.viewDistance},a=[{x:a[1],y:a[2],z:0},{x:a[4],y:a[5],z:0}],g=b.inverted?d.beta:d.alpha,d=b.inverted?d.alpha:d.beta;d*=b.yAxis[0].opposite?-1:1;a=x(a,g,d,f);return a=["M",a[0].x, -a[0].y,"L",a[1].x,a[1].y]});c.wrap(c.Tick.prototype,"getLabelPosition",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(!this.axis.chart.is3d())return a;var b=this.axis.chart,d=b.options.chart.options3d,f={x:b.plotLeft+b.plotWidth/2,y:b.plotTop+b.plotHeight/2,z:d.depth,vd:d.viewDistance},g=b.inverted?d.beta:d.alpha,d=b.inverted?d.alpha:d.beta;d*=b.yAxis[0].opposite?-1:1;return a=x([{x:a.x,y:a.y,z:0}],g,d,f)[0]});c.wrap(c.Axis.prototype,"drawCrosshair",function(c){var a=arguments;this.chart.is3d()&& -a[2]&&(a[2]={plotX:a[2].plotXold||a[2].plotX,plotY:a[2].plotYold||a[2].plotY});c.apply(this,[].slice.call(a,1))});c.wrap(c.seriesTypes.column.prototype,"translate",function(e){e.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart,b=a.options,d=b.plotOptions[this.chart.options.chart.type],b=b.chart.options3d,f=d.depth||25,g={x:a.plotWidth/2,y:a.plotHeight/2,z:b.depth,vd:b.viewDistance},h=b.alpha,i=b.beta*(a.yAxis[0].opposite?-1:1),j=(d.stacking?this.options.stack||0:this._i)* -(f+(d.groupZPadding||1));d.grouping!==!1&&(j=0);j+=d.groupZPadding||1;c.each(this.data,function(a){var b=a.shapeArgs,c=a.tooltipPos;a.shapeType="cuboid";b.alpha=h;b.beta=i;b.z=j;b.origin=g;b.depth=f;c=x([{x:c[0],y:c[1],z:j}],h,i,g)[0];a.tooltipPos=[c.x,c.y]})}});c.wrap(c.seriesTypes.column.prototype,"animate",function(e){if(this.chart.is3d()){var a=arguments[1],b=this.yAxis,d=this,f=this.yAxis.reversed;if(c.svg)a?c.each(d.data,function(a){a.height=a.shapeArgs.height;a.shapeArgs.height=1;if(!f)a.shapeArgs.y= -a.stackY?a.plotY+b.translate(a.stackY):a.plotY+(a.negative?-a.height:a.height)}):(c.each(d.data,function(a){a.shapeArgs.height=a.height;if(!f)a.shapeArgs.y=a.plotY-(a.negative?a.height:0);a.graphic&&a.graphic.animate(a.shapeArgs,d.options.animation)}),d.animate=null)}else e.apply(this,[].slice.call(arguments,1))});c.wrap(c.seriesTypes.column.prototype,"init",function(c){c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart.options.plotOptions.column.grouping,b=this.chart.options.plotOptions.column.stacking, -d=this.options.zIndex;if(!d&&(a===void 0||a)&&b){a=this.chart.retrieveStacks();b=this.options.stack||0;for(d=0;d0?k(h)*e:0),-c*(1-l(g))*k(b)+(k(b)>0?k(g)*e:0));a.dataLabel&&a.dataLabel.attr({x:a.dataLabel.connX+-c*(1-l(h))*l(b)+(l(b)>0?l(h)*e:0)-a.dataLabel.width/2,y:a.dataLabel.connY+-c*(1-l(g))*k(b)+(k(b)>0?k(g)*e:0)-a.dataLabel.height/2})})});c.wrap(c.seriesTypes.pie.prototype,"addPoint",function(c){c.apply(this,[].slice.call(arguments,1));this.chart.is3d()&&this.update()});c.wrap(c.seriesTypes.pie.prototype,"animate",function(e){if(this.chart.is3d()){var a=arguments[1],b=this.options.animation,d= -this.center,f=this.group,g=this.markerGroup;if(c.svg)if(b===!0&&(b={}),a){if(this.oldtranslateX=f.translateX,this.oldtranslateY=f.translateY,a={translateX:d[0],translateY:d[1],scaleX:0.001,scaleY:0.001},f.attr(a),g)g.attrSetters=f.attrSetters,g.attr(a)}else a={translateX:this.oldtranslateX,translateY:this.oldtranslateY,scaleX:1,scaleY:1},f.animate(a,b),g&&g.animate(a,b),this.animate=null}else e.apply(this,[].slice.call(arguments,1))});c.wrap(c.seriesTypes.scatter.prototype,"translate",function(e){e.apply(this, -[].slice.call(arguments,1));if(this.chart.is3d()){var a=this.chart,b=this.chart.options.chart.options3d,d=b.alpha,f=b.beta,g={x:a.inverted?a.plotHeight/2:a.plotWidth/2,y:a.inverted?a.plotWidth/2:a.plotHeight/2,z:b.depth,vd:b.viewDistance},b=b.depth,h=a.options.zAxis||{min:0,max:b},i=b/(h.max-h.min);c.each(this.data,function(a){var b={x:a.plotX,y:a.plotY,z:(a.z-h.min)*i},b=x([b],d,f,g)[0];a.plotXold=a.plotX;a.plotYold=a.plotY;a.plotX=b.x;a.plotY=b.y;a.plotZ=b.z})}});c.wrap(c.seriesTypes.scatter.prototype, -"init",function(c){var a=c.apply(this,[].slice.call(arguments,1));if(this.chart.is3d())this.pointArrayMap=["x","y","z"],this.tooltipOptions.pointFormat=this.userOptions.tooltip?this.userOptions.tooltip.pointFormat||"x: {point.x}
y: {point.y}
z: {point.z}
":"x: {point.x}
y: {point.y}
z: {point.z}
";return a});if(c.VMLRenderer)c.setOptions({animate:!1}),c.VMLRenderer.prototype.cuboid=c.SVGRenderer.prototype.cuboid,c.VMLRenderer.prototype.cuboidPath= -c.SVGRenderer.prototype.cuboidPath,c.VMLRenderer.prototype.toLinePath=c.SVGRenderer.prototype.toLinePath,c.VMLRenderer.prototype.createElement3D=c.SVGRenderer.prototype.createElement3D,c.VMLRenderer.prototype.arc3d=function(e){e=c.SVGRenderer.prototype.arc3d.call(this,e);e.css({zIndex:e.zIndex});return e},c.VMLRenderer.prototype.arc3dPath=c.SVGRenderer.prototype.arc3dPath,c.Chart.prototype.renderSeries=function(){for(var c,a=this.series.length;a--;)c=this.series[a],c.translate(),c.setTooltipPoints&& -c.setTooltipPoints(),c.render()},c.wrap(c.Axis.prototype,"render",function(c){c.apply(this,[].slice.call(arguments,1));this.sideFrame&&(this.sideFrame.css({zIndex:0}),this.sideFrame.front.attr({fill:this.sideFrame.color}));this.bottomFrame&&(this.bottomFrame.css({zIndex:1}),this.bottomFrame.front.attr({fill:this.bottomFrame.color}));this.backFrame&&(this.backFrame.css({zIndex:0}),this.backFrame.front.attr({fill:this.backFrame.color}))})})(Highcharts); -/* - Highcharts JS v4.0.1 (2014-04-24) - Exporting module - - (c) 2010-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(f){var A=f.Chart,t=f.addEvent,B=f.removeEvent,l=f.createElement,o=f.discardElement,v=f.css,k=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,C=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,s=f.getOptions(),y;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0", -background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu", -symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(b,a,d){var c,b=l("form",k({method:"post", -action:b,enctype:"multipart/form-data"},d),{display:"none"},j.body);for(c in a)l("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();o(b)};p(A.prototype,{getSVG:function(b){var a=this,d,c,z,h,g=k(a.options,b);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};b=l("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);c=a.renderTo.style.width;h=a.renderTo.style.height;c=g.exporting.sourceWidth||g.chart.width|| -/px$/.test(c)&&parseInt(c,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:b,forExport:!0,width:c,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&& -g.setExtremes(h,f,!0,!1)})});c=d.container.innerHTML;g=null;d.destroy();o(b);c=c.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/.*?$/,"").replace(/ /g," ").replace(/­/g,"­").replace(//g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return c=c.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(b,a){var b=b||{},d=this.options.exporting,d=this.getSVG(k({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:b.sourceWidth|| -d.sourceWidth,sourceHeight:b.sourceHeight||d.sourceHeight}})),b=k(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:d},b.formAttributes)},print:function(){var b=this,a=b.container,d=[],c=a.parentNode,f=j.body,h=f.childNodes;if(!b.isPrinting)b.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);r(h,function(a,b){if(a.nodeType=== -1)a.style.display=d[b]});b.isPrinting=!1},1E3)},contextMenu:function(b,a,d,c,f,h,g){var e=this,k=e.options.navigation,q=k.menuItemStyle,m=e.chartWidth,n=e.chartHeight,j="cache-"+b,i=e[j],u=D(f,h),w,x,o,s=function(a){e.pointer.inClass(a.target,b)||x()};if(!i)e[j]=i=l("div",{className:b},{position:"absolute",zIndex:1E3,padding:u+"px"},e.container),w=l("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},k.menuStyle),i),x=function(){v(i,{display:"none"}); -g&&g.setState(0);e.openMenu=!1},t(i,"mouseleave",function(){o=setTimeout(x,500)}),t(i,"mouseenter",function(){clearTimeout(o)}),t(document,"mouseup",s),t(e,"destroy",function(){B(document,"mouseup",s)}),r(a,function(a){if(a){var b=a.separator?l("hr",null,null,w):l("div",{onmouseover:function(){v(this,k.menuItemHoverStyle)},onmouseout:function(){v(this,q)},onclick:function(){x();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),w);e.exportDivElements.push(b)}}), -e.exportDivElements.push(w,i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>m?a.right=m-d-f-u+"px":a.left=d-u+"px";c+h+e.exportMenuHeight>n&&g.alignOptions.verticalAlign!=="top"?a.bottom=n-c-u+"px":a.top=c+h-u+"px";v(i,a);e.openMenu=!0},addButton:function(b){var a=this,d=a.renderer,c=k(a.options.navigation.buttonOptions,b),j=c.onclick,h=c.menuItems,g,e,l={stroke:c.symbolStroke,fill:c.symbolFill},q=c.symbolSize||12;if(!a.btnCount)a.btnCount= -0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var m=c.theme,n=m.states,o=n&&n.hover,n=n&&n.select,i;delete m.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});c.text&&c.symbol?m.paddingLeft=f.pick(m.paddingLeft,25):c.text||p(m,{width:c.width,height:c.height,padding:0});e=d.button(c.text,0,0,i,m,o,n).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"}); -e.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(g=d.symbol(c.symbol,c.symbolX-q/2,c.symbolY-q/2,q,q).attr(p(l,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(c,{width:e.width,x:f.pick(c.x,y)}),!0,"spacingBox");y+=(e.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(b){var b=b.target,a,d;for(a=0;a=e&&c<=h&&!j&&k!==""&&(k=b.split(f),m(k,function(b,a){a>=i&&a<=g&&(d[a-i]||(d[a-i]=[]),d[a-i][o]=b)}),o+=1)}),this.dataFound())},parseTable:function(){var a=this.options,b=a.table,c=this.columns,d=a.startRow||0,e=a.endRow||Number.MAX_VALUE,h=a.startColumn||0,i=a.endColumn||Number.MAX_VALUE;b&&(typeof b==="string"&&(b=document.getElementById(b)),m(b.getElementsByTagName("tr"),function(a, -b){b>=d&&b<=e&&m(a.children,function(a,e){if((a.tagName==="TD"||a.tagName==="TH")&&e>=h&&e<=i)c[e-h]||(c[e-h]=[]),c[e-h][b-d]=a.innerHTML})}),this.dataFound())},parseGoogleSpreadsheet:function(){var a=this,b=this.options,c=b.googleSpreadsheetKey,d=this.columns,e=b.startRow||0,h=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,g=b.endColumn||Number.MAX_VALUE,f,k;c&&jQuery.ajax({dataType:"json",url:"https://spreadsheets.google.com/feeds/cells/"+c+"/"+(b.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?", -error:b.error,success:function(b){var b=b.feed.entry,c,j=b.length,m=0,n=0,l;for(l=0;l=i&&l<=g)d[l-i]=[],d[l-i].length=Math.min(n,h-e);for(l=0;l=i&&k<=g&&f>=e&&f<=h)d[k-i][f-e]=c.content.$t;a.dataFound()}})},findHeaderRow:function(){m(this.columns,function(){});this.headerRow=0},trim:function(a){return typeof a==="string"?a.replace(/^\s+|\s+$/g,""):a},parseTypes:function(){for(var a= -this.columns,b=a.length,c,d,e,h;b--;)for(c=a[b].length;c--;)d=a[b][c],e=parseFloat(d),h=this.trim(d),h==e?(a[b][c]=e,e>31536E6?a[b].isDatetime=!0:a[b].isNumeric=!0):(d=this.parseDate(d),b===0&&typeof d==="number"&&!isNaN(d)?(a[b][c]=d,a[b].isDatetime=!0):a[b][c]=h===""?null:h)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(a){return Date.UTC(+a[1],a[2]-1,+a[3])}}},parseDate:function(a){var b=this.options.parseDate,c,d,e;b&&(c=b(a));if(typeof a==="string")for(d in this.dateFormats)b= -this.dateFormats[d],(e=a.match(b.regex))&&(c=b.parser(e));return c},rowsToColumns:function(a){var b,c,d,e,h;if(a){h=[];c=a.length;for(b=0;b1&&(b=a.shift(),this.headerRow===0&&b.shift(),b.isDatetime?c="datetime":b.isNumeric|| -(c="category"));for(g=0;g1&&i[f].push(a[g+1][f]!==void 0?a[g+1][f]:null),e>2&&i[f].push(a[g+2][f]!==void 0?a[g+2][f]:null),e>3&&i[f].push(a[g+3][f]!==void 0?a[g+3][f]:null),e>4&&i[f].push(a[g+4][f]!==void 0?a[g+4][f]:null);h[k]={name:a[g].name,data:i};g+= -e}d.complete({xAxis:{type:c},series:h})}}});j.Data=n;j.data=function(a,b){return new n(a,b)};j.wrap(j.Chart.prototype,"init",function(a,b,c){var d=this;b&&b.data?j.data(j.extend(b.data,{complete:function(e){b.hasOwnProperty("series")&&(typeof b.series==="object"?m(b.series,function(a,c){b.series[c]=j.merge(a,e.series[c])}):delete b.series);b=j.merge(e,b);a.call(d,b,c)}}),b):a.call(d,b,c)})})(Highcharts); diff --git a/static/js/highcharts/highcharts-more.js b/static/js/highcharts/highcharts-more.js deleted file mode 100644 index 3cc51350f..000000000 --- a/static/js/highcharts/highcharts-more.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - Highcharts JS v4.0.1 (2014-04-24) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(m,C){function K(a,b,c){this.init.call(this,a,b,c)}var O=m.arrayMin,P=m.arrayMax,s=m.each,F=m.extend,o=m.merge,Q=m.map,q=m.pick,x=m.pInt,p=m.getOptions().plotOptions,h=m.seriesTypes,u=m.extendClass,L=m.splat,r=m.wrap,M=m.Axis,y=m.Tick,H=m.Point,R=m.Pointer,S=m.CenteredSeriesMixin,z=m.TrackerMixin,t=m.Series,v=Math,D=v.round,A=v.floor,T=v.max,U=m.Color,w=function(){};F(K.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;if(b.angular)e.background={};d.options=a=o(e,a); -(a=a.background)&&s([].concat(L(a)).reverse(),function(a){var g=a.backgroundColor,a=o(d.defaultBackgroundOptions,a);if(g)a.backgroundColor=g;a.color=a.backgroundColor;c.options.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:Number.MIN_VALUE,innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}}); -var G=M.prototype,y=y.prototype,V={getOffset:w,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:w,setCategories:w,setTitle:w},N={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,labels:{align:null,distance:15,x:0,y:null}, -maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){a=this.options=o(this.defaultOptions,this.defaultRadialOptions,a);if(!a.plotBands)a.plotBands=[]},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=S.getCenter.call(this.pane)},getLinePath:function(a,b){var c=this.center,b=q(b, -c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset:0},beforeSetTickPositions:function(){this.autoConnect&&(this.max+=this.categories&& -1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial){this.center=this.pane.center=m.CenteredSeriesMixin.getCenter.call(this.pane);if(this.isCircular)this.sector=this.endAngleRad-this.startAngleRad;this.len=this.width=this.height=this.center[2]*q(this.sector,1)/2}},getPosition:function(a,b){return this.postTranslate(this.isCircular?this.translate(a):0,q(this.isCircular?b:this.translate(a),this.center[2]/2)-this.offset)},postTranslate:function(a, -b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,f=d[2]/2,g=[q(c.outerRadius,"100%"),c.innerRadius,q(c.thickness,10)],k=/%$/,l,n=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(n||(g[0]=this.translate(a),g[1]=this.translate(b)),g=Q(g,function(a){k.test(a)&&(a=x(a,10)*f/100); -return a}),c.shape==="circle"||!n?(a=-Math.PI/2,b=Math.PI*1.5,l=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],g[0],g[0],{start:a,end:b,innerR:q(g[1],g[0]-g[2]),open:l}));return d},getPlotLinePath:function(a,b){var c=this,d=c.center,e=c.chart,f=c.getPosition(a),g,k,l;c.isCircular?l=["M",d[0]+e.plotLeft,d[1]+e.plotTop,"L",f.x,f.y]:c.options.gridLineInterpolation==="circle"?(a=c.translate(a))&&(l=c.getLinePath(0,a)):(s(e.xAxis,function(a){a.pane=== -c.pane&&(g=a)}),l=[],a=c.translate(a),d=g.tickPositions,g.autoConnect&&(d=d.concat([d[0]])),b&&(d=[].concat(d).reverse()),s(d,function(f,c){k=g.getPosition(f,a);l.push(c?"L":"M",k.x,k.y)}));return l},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};r(G,"init",function(a,b,c){var i;var d=b.angular,e=b.polar,f=c.isX,g=d&&f,k,l;l=b.options;var n=c.pane||0;if(d){if(F(this, -g?V:N),k=!f)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)F(this,N),this.defaultRadialOptions=(k=f)?this.defaultRadialXOptions:o(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!g&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(i=b.panes[n]=b.panes[n]||new K(L(l.pane)[n],b,this),n=i);n=n.options;b.inverted=!1;l.chart.zoomType=null;this.startAngleRad=b=(n.startAngle-90)*Math.PI/180;this.endAngleRad=l=(q(n.endAngle,n.startAngle+360)-90)*Math.PI/ -180;this.offset=a.offset||0;if((this.isCircular=k)&&c.max===C&&l-b===2*Math.PI)this.autoConnect=!0}});r(y,"getPosition",function(a,b,c,d,e){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,e)});r(y,"getLabelPosition",function(a,b,c,d,e,f,g,k,l){var n=this.axis,j=f.y,i=f.align,h=(n.translate(this.pos)+n.startAngleRad+Math.PI/2)/Math.PI*180%360;n.isRadial?(a=n.getPosition(this.pos,n.center[2]/2+q(f.distance,-25)),f.rotation==="auto"?d.attr({rotation:h}):j===null&&(j=n.chart.renderer.fontMetrics(d.styles.fontSize).b- -d.getBBox().height/2),i===null&&(i=n.isCircular?h>20&&h<160?"left":h>200&&h<340?"right":"center":"center",d.attr({align:i})),a.x+=f.x,a.y+=j):a=a.call(this,b,c,d,e,f,g,k,l);return a});r(y,"getMarkPath",function(a,b,c,d,e,f,g){var k=this.axis;k.isRadial?(a=k.getPosition(this.pos,k.center[2]/2+d),b=["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,f,g);return b});p.arearange=o(p.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:' {series.name}: {point.low} - {point.high}
'}, -trackByArea:!0,dataLabels:{verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0},states:{hover:{halo:!1}}});h.arearange=u(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",getSegments:function(){var a=this;s(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});t.prototype.getSegments.call(this)},translate:function(){var a=this.yAxis;h.area.prototype.translate.apply(this); -s(this.points,function(b){var c=b.low,d=b.high,e=b.plotY;d===null&&c===null?b.y=null:c===null?(b.plotLow=b.plotY=null,b.plotHigh=a.translate(d,0,1,0,1)):d===null?(b.plotLow=e,b.plotHigh=null):(b.plotLow=e,b.plotHigh=a.translate(d,0,1,0,1))})},getSegmentPath:function(a){var b,c=[],d=a.length,e=t.prototype.getSegmentPath,f,g;g=this.options;var k=g.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotX,plotY:f.plotHigh});a=e.call(this, -b);if(k)k===!0&&(k="left"),g.step={left:"right",center:"center",right:"left"}[k];c=e.call(this,c);g.step=k;g=[].concat(a,c);c[0]="L";this.areaPath=this.areaPath.concat(a,c);return g},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=t.prototype,f=this.options.dataLabels,g,k=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)g=a[c],g.y=g.high,g._plotY=g.plotY,g.plotY=g.plotHigh,d[c]=g.dataLabel,g.dataLabel=g.dataLabelUpper,g.below=!1,k?(f.align="left",f.x=f.xHigh):f.y= -f.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(c=b;c--;)g=a[c],g.dataLabelUpper=g.dataLabel,g.dataLabel=d[c],g.y=g.low,g.plotY=g._plotY,g.below=!0,k?(f.align="right",f.x=f.xLow):f.y=f.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},getSymbol:h.column.prototype.getSymbol,drawPoints:w});p.areasplinerange=o(p.arearange);h.areasplinerange=u(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline}); -(function(){var a=h.column.prototype;p.columnrange=o(p.column,p.arearange,{lineWidth:1,pointRange:null});h.columnrange=u(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);s(b.points,function(a){var f=a.shapeArgs,g=b.options.minPointLength,k;a.tooltipPos=null;a.plotHigh=d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;k=d;a=a.plotY-d;a {series.name}
Maximum: {point.high}
Upper quartile: {point.q3}
Median: {point.median}
Lower quartile: {point.q1}
Minimum: {point.low}
'}, -whiskerLength:"50%",whiskerWidth:2});h.boxplot=u(h.column,{type:"boxplot",pointArrayMap:["low","q1","median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:w,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);s(this.points,function(c){s(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a= -this,b=a.points,c=a.options,d=a.chart.renderer,e,f,g,k,l,n,j,i,h,m,p,I,r,o,J,u,w,t,v,x,z,y,E=a.doQuartiles!==!1,B=parseInt(a.options.whiskerLength,10)/100;s(b,function(b){h=b.graphic;z=b.shapeArgs;p={};o={};u={};y=b.color||a.color;if(b.plotY!==C)if(e=b.pointAttr[b.selected?"selected":""],w=z.width,t=A(z.x),v=t+w,x=D(w/2),f=A(E?b.q1Plot:b.lowPlot),g=A(E?b.q3Plot:b.lowPlot),k=A(b.highPlot),l=A(b.lowPlot),p.stroke=b.stemColor||c.stemColor||y,p["stroke-width"]=q(b.stemWidth,c.stemWidth,c.lineWidth),p.dashstyle= -b.stemDashStyle||c.stemDashStyle,o.stroke=b.whiskerColor||c.whiskerColor||y,o["stroke-width"]=q(b.whiskerWidth,c.whiskerWidth,c.lineWidth),u.stroke=b.medianColor||c.medianColor||y,u["stroke-width"]=q(b.medianWidth,c.medianWidth,c.lineWidth),u["stroke-linecap"]="round",j=p["stroke-width"]%2/2,i=t+x+j,m=["M",i,g,"L",i,k,"M",i,f,"L",i,l],E&&(j=e["stroke-width"]%2/2,i=A(i)+j,f=A(f)+j,g=A(g)+j,t+=j,v+=j,I=["M",t,g,"L",t,f,"L",v,f,"L",v,g,"L",t,g,"z"]),B&&(j=o["stroke-width"]%2/2,k+=j,l+=j,r=["M",i-x*B, -k,"L",i+x*B,k,"M",i-x*B,l,"L",i+x*B,l]),j=u["stroke-width"]%2/2,n=D(b.medianPlot)+j,J=["M",t,n,"L",v,n],h)b.stem.animate({d:m}),B&&b.whiskers.animate({d:r}),E&&b.box.animate({d:I}),b.medianShape.animate({d:J});else{b.graphic=h=d.g().add(a.group);b.stem=d.path(m).attr(p).add(h);if(B)b.whiskers=d.path(r).attr(o).add(h);if(E)b.box=d.path(I).attr(e).add(h);b.medianShape=d.path(J).attr(u).add(h)}})}});p.errorbar=o(p.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:' {series.name}: {point.low} - {point.high}
'}, -whiskerWidth:null});h.errorbar=u(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:h.arearange?h.arearange.prototype.drawDataLabels:w,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});p.waterfall=o(p.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333"});h.waterfall=u(h.column,{type:"waterfall",upColorProp:"fill", -pointArrayMap:["low","y"],pointValKey:"y",init:function(a,b){b.stacking=!0;h.column.prototype.init.call(this,a,b)},translate:function(){var a=this.yAxis,b,c,d,e,f,g,k,l,n;b=this.options.threshold;h.column.prototype.translate.apply(this);l=b;d=this.points;for(c=0,b=d.length;c0&&!a.color)a.pointAttr=d,a.color=c})},getGraphPath:function(){var a=this.data,b=a.length, -c=D(this.options.lineWidth+this.borderWidth)%2/2,d=[],e,f,g;for(g=1;g0?(k[f]-a)/(b- -a):0.5,n&&g>=0&&(g=Math.sqrt(g)),l.push(v.ceil(c+g*(d-c))/2);this.radii=l},animate:function(a){var b=this.options.animation;if(!a)s(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=e?e[a]:0,c.negative=c.z<(this.options.zThreshold||0),d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY, -r:d},c.dlBox={x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=C},drawLegendSymbol:function(a,b){var c=x(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel});M.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,f=this.isXAxis,g=f?"xData":"yData",k=this.min,l={}, -n=v.min(c.plotWidth,c.plotHeight),j=Number.MAX_VALUE,i=-Number.MAX_VALUE,h=this.max-k,m=b/h,p=[];this.tickPositions&&(s(this.series,function(b){var g=b.options;if(b.bubblePadding&&(b.visible||!c.options.chart.ignoreHiddenSeries))if(a.allowZoomOutside=!0,p.push(b),f)s(["minSize","maxSize"],function(a){var b=g[a],f=/%$/.test(b),b=x(b);l[a]=f?n*b/100:b}),b.minPxSize=l.minSize,b=b.zData,b.length&&(j=v.min(j,v.max(O(b),g.displayNegative===!1?g.zThreshold:-Number.MAX_VALUE)),i=v.max(i,P(b)))}),s(p,function(a){var b= -a[g],c=b.length,n;f&&a.getRadii(j,i,l.minSize,l.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(n=a.radii[c],d=Math.min((b[c]-k)*m-n,d),e=Math.max((b[c]-k)*m+n,e))}),p.length&&h>0&&q(this.options.min,this.userMin)===C&&q(this.options.max,this.userMax)===C&&(e-=b,m*=(b+d-e)/b,this.min+=d/m,this.max+=e/m))};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b=this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,b){var c=this.chart, -d=this.options.animation,e=this.group,j=this.markerGroup,i=this.xAxis.center,h=c.plotLeft,m=c.plotTop;if(c.polar){if(c.renderer.isSVG)d===!0&&(d={}),b?(c={translateX:i[0]+h,translateY:i[1]+m,scaleX:0.001,scaleY:0.001},e.attr(c),j&&j.attr(c)):(c={translateX:h,translateY:m,scaleX:1,scaleY:1},e.animate(c,d),j&&j.animate(c,d),this.animate=null)}else a.call(this,b)}var c=t.prototype,d=R.prototype,e;c.toXY=function(a){var b,c=this.chart,d=a.plotX;b=a.plotY;a.rectPlotX=d;a.rectPlotY=b;d=(d/Math.PI*180+this.xAxis.pane.options.startAngle)% -360;d<0&&(d+=360);a.clientX=d;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-b);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop};c.orderTooltipPoints=function(a){if(this.chart.polar&&(a.sort(function(a,b){return a.clientX-b.clientX}),a[0]))a[0].wrappedClientX=a[0].clientX+360,a.push(a[0])};h.area&&r(h.area.prototype,"init",a);h.areaspline&&r(h.areaspline.prototype,"init",a);h.spline&&r(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,j,i,h,m,p,o;if(this.chart.polar){e= -c.plotX;j=c.plotY;a=b[d-1];i=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),i||(i=b[1]));if(a&&i)h=a.plotX,m=a.plotY,b=i.plotX,p=i.plotY,h=(1.5*e+h)/2.5,m=(1.5*j+m)/2.5,i=(1.5*e+b)/2.5,o=(1.5*j+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(m-j,2)),p=Math.sqrt(Math.pow(i-e,2)+Math.pow(o-j,2)),h=Math.atan2(m-j,h-e),m=Math.atan2(o-j,i-e),o=Math.PI/2+(h+m)/2,Math.abs(h-o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,m=j+Math.sin(o)*b,i=e+Math.cos(Math.PI+o)*p,o=j+Math.sin(Math.PI+o)*p,c.rightContX=i,c.rightContY= -o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,m||j,e,j],a.rightContX=a.rightContY=null):c=["M",e,j]}else c=a.call(this,b,c,d);return c});r(c,"translate",function(a){a.call(this);if(this.chart.polar&&!this.preventPostTranslate)for(var a=this.points,b=a.length;b--;)this.toXY(a[b])});r(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this, -b)});r(c,"animate",b);r(c,"setTooltipPoints",function(a,b){this.chart.polar&&F(this.xAxis,{tooltipLen:360});return a.call(this,b)});if(h.column)e=h.column.prototype,r(e,"animate",b),r(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,h=this.chart.renderer,i,m;this.preventPostTranslate=!0;a.call(this);if(b.isRadial){b=this.points;for(m=b.length;m--;)i=b[m],a=i.barX+e,i.shapeType="path",i.shapeArgs={d:h.symbols.arc(d[0],d[1],c-i.plotY,null,{start:a,end:a+i.pointWidth, -innerR:c-q(i.yBottom,c)})},this.toXY(i),i.tooltipPos=[i.plotX,i.plotY],i.ttBelow=i.plotY>d[1]}}),r(e,"alignDataLabel",function(a,b,d,e,h,j){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,j)}else a.call(this,b,d,e,h,j)});r(d,"getIndex",function(a,b){var c,d=this.chart,e;d.polar?(e=d.xAxis[0].center,c= -b.chartX-e[0]-d.plotLeft,d=b.chartY-e[1]-d.plotTop,c=180-Math.round(Math.atan2(c,d)/Math.PI*180)):c=a.call(this,b);return c});r(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?s(c.axes,function(a){var e=a.isXAxis,f=a.center,h=b.chartX-f[0]-c.plotLeft,f=b.chartY-f[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,f):Math.sqrt(Math.pow(h,2)+Math.pow(f,2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts); diff --git a/static/js/highcharts/highcharts-more.src.js b/static/js/highcharts/highcharts-more.src.js deleted file mode 100644 index 3db8ab419..000000000 --- a/static/js/highcharts/highcharts-more.src.js +++ /dev/null @@ -1,2546 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.0.1 (2014-04-24) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, HighchartsAdapter, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console */ - -(function (Highcharts, UNDEFINED) { -var arrayMin = Highcharts.arrayMin, - arrayMax = Highcharts.arrayMax, - each = Highcharts.each, - extend = Highcharts.extend, - merge = Highcharts.merge, - map = Highcharts.map, - pick = Highcharts.pick, - pInt = Highcharts.pInt, - defaultPlotOptions = Highcharts.getOptions().plotOptions, - seriesTypes = Highcharts.seriesTypes, - extendClass = Highcharts.extendClass, - splat = Highcharts.splat, - wrap = Highcharts.wrap, - Axis = Highcharts.Axis, - Tick = Highcharts.Tick, - Point = Highcharts.Point, - Pointer = Highcharts.Pointer, - CenteredSeriesMixin = Highcharts.CenteredSeriesMixin, - TrackerMixin = Highcharts.TrackerMixin, - Series = Highcharts.Series, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathMax = math.max, - Color = Highcharts.Color, - noop = function () {};/** - * The Pane object allows options that are common to a set of X and Y axes. - * - * In the future, this can be extended to basic Highcharts and Highstock. - */ -function Pane(options, chart, firstAxis) { - this.init.call(this, options, chart, firstAxis); -} - -// Extend the Pane prototype -extend(Pane.prototype, { - - /** - * Initiate the Pane object - */ - init: function (options, chart, firstAxis) { - var pane = this, - backgroundOption, - defaultOptions = pane.defaultOptions; - - pane.chart = chart; - - // Set options - if (chart.angular) { // gauges - defaultOptions.background = {}; // gets extended by this.defaultBackgroundOptions - } - pane.options = options = merge(defaultOptions, options); - - backgroundOption = options.background; - - // To avoid having weighty logic to place, update and remove the backgrounds, - // push them to the first axis' plot bands and borrow the existing logic there. - if (backgroundOption) { - each([].concat(splat(backgroundOption)).reverse(), function (config) { - var backgroundColor = config.backgroundColor; // if defined, replace the old one (specific for gradients) - config = merge(pane.defaultBackgroundOptions, config); - if (backgroundColor) { - config.backgroundColor = backgroundColor; - } - config.color = config.backgroundColor; // due to naming in plotBands - firstAxis.options.plotBands.unshift(config); - }); - } - }, - - /** - * The default options object - */ - defaultOptions: { - // background: {conditional}, - center: ['50%', '50%'], - size: '85%', - startAngle: 0 - //endAngle: startAngle + 360 - }, - - /** - * The default background options - */ - defaultBackgroundOptions: { - shape: 'circle', - borderWidth: 1, - borderColor: 'silver', - backgroundColor: { - linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, - stops: [ - [0, '#FFF'], - [1, '#DDD'] - ] - }, - from: Number.MIN_VALUE, // corrected to axis min - innerRadius: 0, - to: Number.MAX_VALUE, // corrected to axis max - outerRadius: '105%' - } - -}); -var axisProto = Axis.prototype, - tickProto = Tick.prototype; - -/** - * Augmented methods for the x axis in order to hide it completely, used for the X axis in gauges - */ -var hiddenAxisMixin = { - getOffset: noop, - redraw: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - render: function () { - this.isDirty = false; // prevent setting Y axis dirty - }, - setScale: noop, - setCategories: noop, - setTitle: noop -}; - -/** - * Augmented methods for the value axis - */ -/*jslint unparam: true*/ -var radialAxisMixin = { - isRadial: true, - - /** - * The default options extend defaultYAxisOptions - */ - defaultRadialGaugeOptions: { - labels: { - align: 'center', - x: 0, - y: null // auto - }, - minorGridLineWidth: 0, - minorTickInterval: 'auto', - minorTickLength: 10, - minorTickPosition: 'inside', - minorTickWidth: 1, - tickLength: 10, - tickPosition: 'inside', - tickWidth: 2, - title: { - rotation: 0 - }, - zIndex: 2 // behind dials, points in the series group - }, - - // Circular axis around the perimeter of a polar chart - defaultRadialXOptions: { - gridLineWidth: 1, // spokes - labels: { - align: null, // auto - distance: 15, - x: 0, - y: null // auto - }, - maxPadding: 0, - minPadding: 0, - showLastLabel: false, - tickLength: 0 - }, - - // Radial axis, like a spoke in a polar chart - defaultRadialYOptions: { - gridLineInterpolation: 'circle', - labels: { - align: 'right', - x: -3, - y: -2 - }, - showLastLabel: false, - title: { - x: 4, - text: null, - rotation: 90 - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - - var options = this.options = merge( - this.defaultOptions, - this.defaultRadialOptions, - userOptions - ); - - // Make sure the plotBands array is instanciated for each Axis (#2649) - if (!options.plotBands) { - options.plotBands = []; - } - - }, - - /** - * Wrap the getOffset method to return zero offset for title or labels in a radial - * axis - */ - getOffset: function () { - // Call the Axis prototype method (the method we're in now is on the instance) - axisProto.getOffset.call(this); - - // Title or label offsets are not counted - this.chart.axisOffset[this.side] = 0; - - // Set the center array - this.center = this.pane.center = CenteredSeriesMixin.getCenter.call(this.pane); - }, - - - /** - * Get the path for the axis line. This method is also referenced in the getPlotLinePath - * method. - */ - getLinePath: function (lineWidth, radius) { - var center = this.center; - radius = pick(radius, center[2] / 2 - this.offset); - - return this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radius, - radius, - { - start: this.startAngleRad, - end: this.endAngleRad, - open: true, - innerR: 0 - } - ); - }, - - /** - * Override setAxisTranslation by setting the translation to the difference - * in rotation. This allows the translate method to return angle for - * any given value. - */ - setAxisTranslation: function () { - - // Call uber method - axisProto.setAxisTranslation.call(this); - - // Set transA and minPixelPadding - if (this.center) { // it's not defined the first time - if (this.isCircular) { - - this.transA = (this.endAngleRad - this.startAngleRad) / - ((this.max - this.min) || 1); - - - } else { - this.transA = (this.center[2] / 2) / ((this.max - this.min) || 1); - } - - if (this.isXAxis) { - this.minPixelPadding = this.transA * this.minPointOffset; - } else { - // This is a workaround for regression #2593, but categories still don't position correctly. - // TODO: Implement true handling of Y axis categories on gauges. - this.minPixelPadding = 0; - } - } - }, - - /** - * In case of auto connect, add one closestPointRange to the max value right before - * tickPositions are computed, so that ticks will extend passed the real max. - */ - beforeSetTickPositions: function () { - if (this.autoConnect) { - this.max += (this.categories && 1) || this.pointRange || this.closestPointRange || 0; // #1197, #2260 - } - }, - - /** - * Override the setAxisSize method to use the arc's circumference as length. This - * allows tickPixelInterval to apply to pixel lengths along the perimeter - */ - setAxisSize: function () { - - axisProto.setAxisSize.call(this); - - if (this.isRadial) { - - // Set the center array - this.center = this.pane.center = Highcharts.CenteredSeriesMixin.getCenter.call(this.pane); - - // The sector is used in Axis.translate to compute the translation of reversed axis points (#2570) - if (this.isCircular) { - this.sector = this.endAngleRad - this.startAngleRad; - } - - // Axis len is used to lay out the ticks - this.len = this.width = this.height = this.center[2] * pick(this.sector, 1) / 2; - - - } - }, - - /** - * Returns the x, y coordinate of a point given by a value and a pixel distance - * from center - */ - getPosition: function (value, length) { - return this.postTranslate( - this.isCircular ? this.translate(value) : 0, // #2848 - pick(this.isCircular ? length : this.translate(value), this.center[2] / 2) - this.offset - ); - }, - - /** - * Translate from intermediate plotX (angle), plotY (axis.len - radius) to final chart coordinates. - */ - postTranslate: function (angle, radius) { - - var chart = this.chart, - center = this.center; - - angle = this.startAngleRad + angle; - - return { - x: chart.plotLeft + center[0] + Math.cos(angle) * radius, - y: chart.plotTop + center[1] + Math.sin(angle) * radius - }; - - }, - - /** - * Find the path for plot bands along the radial axis - */ - getPlotBandPath: function (from, to, options) { - var center = this.center, - startAngleRad = this.startAngleRad, - fullRadius = center[2] / 2, - radii = [ - pick(options.outerRadius, '100%'), - options.innerRadius, - pick(options.thickness, 10) - ], - percentRegex = /%$/, - start, - end, - open, - isCircular = this.isCircular, // X axis in a polar chart - ret; - - // Polygonal plot bands - if (this.options.gridLineInterpolation === 'polygon') { - ret = this.getPlotLinePath(from).concat(this.getPlotLinePath(to, true)); - - // Circular grid bands - } else { - - // Plot bands on Y axis (radial axis) - inner and outer radius depend on to and from - if (!isCircular) { - radii[0] = this.translate(from); - radii[1] = this.translate(to); - } - - // Convert percentages to pixel values - radii = map(radii, function (radius) { - if (percentRegex.test(radius)) { - radius = (pInt(radius, 10) * fullRadius) / 100; - } - return radius; - }); - - // Handle full circle - if (options.shape === 'circle' || !isCircular) { - start = -Math.PI / 2; - end = Math.PI * 1.5; - open = true; - } else { - start = startAngleRad + this.translate(from); - end = startAngleRad + this.translate(to); - } - - - ret = this.chart.renderer.symbols.arc( - this.left + center[0], - this.top + center[1], - radii[0], - radii[0], - { - start: start, - end: end, - innerR: pick(radii[1], radii[0] - radii[2]), - open: open - } - ); - } - - return ret; - }, - - /** - * Find the path for plot lines perpendicular to the radial axis. - */ - getPlotLinePath: function (value, reverse) { - var axis = this, - center = axis.center, - chart = axis.chart, - end = axis.getPosition(value), - xAxis, - xy, - tickPositions, - ret; - - // Spokes - if (axis.isCircular) { - ret = ['M', center[0] + chart.plotLeft, center[1] + chart.plotTop, 'L', end.x, end.y]; - - // Concentric circles - } else if (axis.options.gridLineInterpolation === 'circle') { - value = axis.translate(value); - if (value) { // a value of 0 is in the center - ret = axis.getLinePath(0, value); - } - // Concentric polygons - } else { - // Find the X axis in the same pane - each(chart.xAxis, function (a) { - if (a.pane === axis.pane) { - xAxis = a; - } - }); - ret = []; - value = axis.translate(value); - tickPositions = xAxis.tickPositions; - if (xAxis.autoConnect) { - tickPositions = tickPositions.concat([tickPositions[0]]); - } - // Reverse the positions for concatenation of polygonal plot bands - if (reverse) { - tickPositions = [].concat(tickPositions).reverse(); - } - - each(tickPositions, function (pos, i) { - xy = xAxis.getPosition(pos, value); - ret.push(i ? 'L' : 'M', xy.x, xy.y); - }); - - } - return ret; - }, - - /** - * Find the position for the axis title, by default inside the gauge - */ - getTitlePosition: function () { - var center = this.center, - chart = this.chart, - titleOptions = this.options.title; - - return { - x: chart.plotLeft + center[0] + (titleOptions.x || 0), - y: chart.plotTop + center[1] - ({ high: 0.5, middle: 0.25, low: 0 }[titleOptions.align] * - center[2]) + (titleOptions.y || 0) - }; - } - -}; -/*jslint unparam: false*/ - -/** - * Override axisProto.init to mix in special axis instance functions and function overrides - */ -wrap(axisProto, 'init', function (proceed, chart, userOptions) { - var axis = this, - angular = chart.angular, - polar = chart.polar, - isX = userOptions.isX, - isHidden = angular && isX, - isCircular, - startAngleRad, - endAngleRad, - options, - chartOptions = chart.options, - paneIndex = userOptions.pane || 0, - pane, - paneOptions; - - // Before prototype.init - if (angular) { - extend(this, isHidden ? hiddenAxisMixin : radialAxisMixin); - isCircular = !isX; - if (isCircular) { - this.defaultRadialOptions = this.defaultRadialGaugeOptions; - } - - } else if (polar) { - //extend(this, userOptions.isX ? radialAxisMixin : radialAxisMixin); - extend(this, radialAxisMixin); - isCircular = isX; - this.defaultRadialOptions = isX ? this.defaultRadialXOptions : merge(this.defaultYAxisOptions, this.defaultRadialYOptions); - - } - - // Run prototype.init - proceed.call(this, chart, userOptions); - - if (!isHidden && (angular || polar)) { - options = this.options; - - // Create the pane and set the pane options. - if (!chart.panes) { - chart.panes = []; - } - this.pane = pane = chart.panes[paneIndex] = chart.panes[paneIndex] || new Pane( - splat(chartOptions.pane)[paneIndex], - chart, - axis - ); - paneOptions = pane.options; - - - // Disable certain features on angular and polar axes - chart.inverted = false; - chartOptions.chart.zoomType = null; - - // Start and end angle options are - // given in degrees relative to top, while internal computations are - // in radians relative to right (like SVG). - this.startAngleRad = startAngleRad = (paneOptions.startAngle - 90) * Math.PI / 180; - this.endAngleRad = endAngleRad = (pick(paneOptions.endAngle, paneOptions.startAngle + 360) - 90) * Math.PI / 180; - this.offset = options.offset || 0; - - this.isCircular = isCircular; - - // Automatically connect grid lines? - if (isCircular && userOptions.max === UNDEFINED && endAngleRad - startAngleRad === 2 * Math.PI) { - this.autoConnect = true; - } - } - -}); - -/** - * Add special cases within the Tick class' methods for radial axes. - */ -wrap(tickProto, 'getPosition', function (proceed, horiz, pos, tickmarkOffset, old) { - var axis = this.axis; - - return axis.getPosition ? - axis.getPosition(pos) : - proceed.call(this, horiz, pos, tickmarkOffset, old); -}); - -/** - * Wrap the getLabelPosition function to find the center position of the label - * based on the distance option - */ -wrap(tickProto, 'getLabelPosition', function (proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - optionsY = labelOptions.y, - ret, - align = labelOptions.align, - angle = ((axis.translate(this.pos) + axis.startAngleRad + Math.PI / 2) / Math.PI * 180) % 360; - - if (axis.isRadial) { - ret = axis.getPosition(this.pos, (axis.center[2] / 2) + pick(labelOptions.distance, -25)); - - // Automatically rotated - if (labelOptions.rotation === 'auto') { - label.attr({ - rotation: angle - }); - - // Vertically centered - } else if (optionsY === null) { - optionsY = axis.chart.renderer.fontMetrics(label.styles.fontSize).b - label.getBBox().height / 2; - } - - // Automatic alignment - if (align === null) { - if (axis.isCircular) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - } else { - align = 'center'; - } - label.attr({ - align: align - }); - } - - ret.x += labelOptions.x; - ret.y += optionsY; - - } else { - ret = proceed.call(this, x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - } - return ret; -}); - -/** - * Wrap the getMarkPath function to return the path of the radial marker - */ -wrap(tickProto, 'getMarkPath', function (proceed, x, y, tickLength, tickWidth, horiz, renderer) { - var axis = this.axis, - endPoint, - ret; - - if (axis.isRadial) { - endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength); - ret = [ - 'M', - x, - y, - 'L', - endPoint.x, - endPoint.y - ]; - } else { - ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer); - } - return ret; -});/* - * The AreaRangeSeries class - * - */ - -/** - * Extend the default options with map options - */ -defaultPlotOptions.arearange = merge(defaultPlotOptions.area, { - lineWidth: 1, - marker: null, - threshold: null, - tooltip: { - pointFormat: '\u25CF {series.name}: {point.low} - {point.high}
' - }, - trackByArea: true, - dataLabels: { - verticalAlign: null, - xLow: 0, - xHigh: 0, - yLow: 0, - yHigh: 0 - }, - states: { - hover: { - halo: false - } - } -}); - -/** - * Add the series type - */ -seriesTypes.arearange = extendClass(seriesTypes.area, { - type: 'arearange', - pointArrayMap: ['low', 'high'], - toYData: function (point) { - return [point.low, point.high]; - }, - pointValKey: 'low', - - /** - * Extend getSegments to force null points if the higher value is null. #1703. - */ - getSegments: function () { - var series = this; - - each(series.points, function (point) { - if (!series.options.connectNulls && (point.low === null || point.high === null)) { - point.y = null; - } else if (point.low === null && point.high !== null) { - point.y = point.high; - } - }); - Series.prototype.getSegments.call(this); - }, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis; - - seriesTypes.area.prototype.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - - var low = point.low, - high = point.high, - plotY = point.plotY; - - if (high === null && low === null) { - point.y = null; - } else if (low === null) { - point.plotLow = point.plotY = null; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } else if (high === null) { - point.plotLow = plotY; - point.plotHigh = null; - } else { - point.plotLow = plotY; - point.plotHigh = yAxis.translate(high, 0, 1, 0, 1); - } - }); - }, - - /** - * Extend the line series' getSegmentPath method by applying the segment - * path to both lower and higher values of the range - */ - getSegmentPath: function (segment) { - - var lowSegment, - highSegment = [], - i = segment.length, - baseGetSegmentPath = Series.prototype.getSegmentPath, - point, - linePath, - lowerPath, - options = this.options, - step = options.step, - higherPath; - - // Remove nulls from low segment - lowSegment = HighchartsAdapter.grep(segment, function (point) { - return point.plotLow !== null; - }); - - // Make a segment with plotX and plotY for the top values - while (i--) { - point = segment[i]; - if (point.plotHigh !== null) { - highSegment.push({ - plotX: point.plotX, - plotY: point.plotHigh - }); - } - } - - // Get the paths - lowerPath = baseGetSegmentPath.call(this, lowSegment); - if (step) { - if (step === true) { - step = 'left'; - } - options.step = { left: 'right', center: 'center', right: 'left' }[step]; // swap for reading in getSegmentPath - } - higherPath = baseGetSegmentPath.call(this, highSegment); - options.step = step; - - // Create a line on both top and bottom of the range - linePath = [].concat(lowerPath, higherPath); - - // For the area path, we need to change the 'move' statement into 'lineTo' or 'curveTo' - higherPath[0] = 'L'; // this probably doesn't work for spline - this.areaPath = this.areaPath.concat(lowerPath, higherPath); - - return linePath; - }, - - /** - * Extend the basic drawDataLabels method by running it for both lower and higher - * values. - */ - drawDataLabels: function () { - - var data = this.data, - length = data.length, - i, - originalDataLabels = [], - seriesProto = Series.prototype, - dataLabelOptions = this.options.dataLabels, - point, - inverted = this.chart.inverted; - - if (dataLabelOptions.enabled || this._hasPointLabels) { - - // Step 1: set preliminary values for plotY and dataLabel and draw the upper labels - i = length; - while (i--) { - point = data[i]; - - // Set preliminary values - point.y = point.high; - point._plotY = point.plotY; - point.plotY = point.plotHigh; - - // Store original data labels and set preliminary label objects to be picked up - // in the uber method - originalDataLabels[i] = point.dataLabel; - point.dataLabel = point.dataLabelUpper; - - // Set the default offset - point.below = false; - if (inverted) { - dataLabelOptions.align = 'left'; - dataLabelOptions.x = dataLabelOptions.xHigh; - } else { - dataLabelOptions.y = dataLabelOptions.yHigh; - } - } - - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); // #1209 - } - - // Step 2: reorganize and handle data labels for the lower values - i = length; - while (i--) { - point = data[i]; - - // Move the generated labels from step 1, and reassign the original data labels - point.dataLabelUpper = point.dataLabel; - point.dataLabel = originalDataLabels[i]; - - // Reset values - point.y = point.low; - point.plotY = point._plotY; - - // Set the default offset - point.below = true; - if (inverted) { - dataLabelOptions.align = 'right'; - dataLabelOptions.x = dataLabelOptions.xLow; - } else { - dataLabelOptions.y = dataLabelOptions.yLow; - } - } - if (seriesProto.drawDataLabels) { - seriesProto.drawDataLabels.apply(this, arguments); - } - } - - }, - - alignDataLabel: function () { - seriesTypes.column.prototype.alignDataLabel.apply(this, arguments); - }, - - getSymbol: seriesTypes.column.prototype.getSymbol, - - drawPoints: noop -});/** - * The AreaSplineRangeSeries class - */ - -defaultPlotOptions.areasplinerange = merge(defaultPlotOptions.arearange); - -/** - * AreaSplineRangeSeries object - */ -seriesTypes.areasplinerange = extendClass(seriesTypes.arearange, { - type: 'areasplinerange', - getPointSpline: seriesTypes.spline.prototype.getPointSpline -}); - -(function () { - - var colProto = seriesTypes.column.prototype; - - /** - * The ColumnRangeSeries class - */ - defaultPlotOptions.columnrange = merge(defaultPlotOptions.column, defaultPlotOptions.arearange, { - lineWidth: 1, - pointRange: null - }); - - /** - * ColumnRangeSeries object - */ - seriesTypes.columnrange = extendClass(seriesTypes.arearange, { - type: 'columnrange', - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - plotHigh; - - colProto.translate.apply(series); - - // Set plotLow and plotHigh - each(series.points, function (point) { - var shapeArgs = point.shapeArgs, - minPointLength = series.options.minPointLength, - heightDifference, - height, - y; - - point.tooltipPos = null; // don't inherit from column - point.plotHigh = plotHigh = yAxis.translate(point.high, 0, 1, 0, 1); - point.plotLow = point.plotY; - - // adjust shape - y = plotHigh; - height = point.plotY - plotHigh; - - if (height < minPointLength) { - heightDifference = (minPointLength - height); - height += heightDifference; - y -= heightDifference / 2; - } - shapeArgs.height = height; - shapeArgs.y = y; - }); - }, - trackerGroups: ['group', 'dataLabels'], - drawGraph: noop, - pointAttrToOptions: colProto.pointAttrToOptions, - drawPoints: colProto.drawPoints, - drawTracker: colProto.drawTracker, - animate: colProto.animate, - getColumnMetrics: colProto.getColumnMetrics - }); -}()); - -/* - * The GaugeSeries class - */ - - - -/** - * Extend the default options - */ -defaultPlotOptions.gauge = merge(defaultPlotOptions.line, { - dataLabels: { - enabled: true, - defer: false, - y: 15, - borderWidth: 1, - borderColor: 'silver', - borderRadius: 3, - crop: false, - style: { - fontWeight: 'bold' - }, - verticalAlign: 'top', - zIndex: 2 - }, - dial: { - // radius: '80%', - // backgroundColor: 'black', - // borderColor: 'silver', - // borderWidth: 0, - // baseWidth: 3, - // topWidth: 1, - // baseLength: '70%' // of radius - // rearLength: '10%' - }, - pivot: { - //radius: 5, - //borderWidth: 0 - //borderColor: 'silver', - //backgroundColor: 'black' - }, - tooltip: { - headerFormat: '' - }, - showInLegend: false -}); - -/** - * Extend the point object - */ -var GaugePoint = extendClass(Point, { - /** - * Don't do any hover colors or anything - */ - setState: function (state) { - this.state = state; - } -}); - - -/** - * Add the series type - */ -var GaugeSeries = { - type: 'gauge', - pointClass: GaugePoint, - - // chart.angular will be set to true when a gauge series is present, and this will - // be used on the axes - angular: true, - drawGraph: noop, - fixedBox: true, - forceDL: true, - trackerGroups: ['group', 'dataLabels'], - - /** - * Calculate paths etc - */ - translate: function () { - - var series = this, - yAxis = series.yAxis, - options = series.options, - center = yAxis.center; - - series.generatePoints(); - - each(series.points, function (point) { - - var dialOptions = merge(options.dial, point.dial), - radius = (pInt(pick(dialOptions.radius, 80)) * center[2]) / 200, - baseLength = (pInt(pick(dialOptions.baseLength, 70)) * radius) / 100, - rearLength = (pInt(pick(dialOptions.rearLength, 10)) * radius) / 100, - baseWidth = dialOptions.baseWidth || 3, - topWidth = dialOptions.topWidth || 1, - overshoot = options.overshoot, - rotation = yAxis.startAngleRad + yAxis.translate(point.y, null, null, null, true); - - // Handle the wrap and overshoot options - if (overshoot && typeof overshoot === 'number') { - overshoot = overshoot / 180 * Math.PI; - rotation = Math.max(yAxis.startAngleRad - overshoot, Math.min(yAxis.endAngleRad + overshoot, rotation)); - - } else if (options.wrap === false) { - rotation = Math.max(yAxis.startAngleRad, Math.min(yAxis.endAngleRad, rotation)); - } - - rotation = rotation * 180 / Math.PI; - - point.shapeType = 'path'; - point.shapeArgs = { - d: dialOptions.path || [ - 'M', - -rearLength, -baseWidth / 2, - 'L', - baseLength, -baseWidth / 2, - radius, -topWidth / 2, - radius, topWidth / 2, - baseLength, baseWidth / 2, - -rearLength, baseWidth / 2, - 'z' - ], - translateX: center[0], - translateY: center[1], - rotation: rotation - }; - - // Positions for data label - point.plotX = center[0]; - point.plotY = center[1]; - }); - }, - - /** - * Draw the points where each point is one needle - */ - drawPoints: function () { - - var series = this, - center = series.yAxis.center, - pivot = series.pivot, - options = series.options, - pivotOptions = options.pivot, - renderer = series.chart.renderer; - - each(series.points, function (point) { - - var graphic = point.graphic, - shapeArgs = point.shapeArgs, - d = shapeArgs.d, - dialOptions = merge(options.dial, point.dial); // #1233 - - if (graphic) { - graphic.animate(shapeArgs); - shapeArgs.d = d; // animate alters it - } else { - point.graphic = renderer[point.shapeType](shapeArgs) - .attr({ - stroke: dialOptions.borderColor || 'none', - 'stroke-width': dialOptions.borderWidth || 0, - fill: dialOptions.backgroundColor || 'black', - rotation: shapeArgs.rotation // required by VML when animation is false - }) - .add(series.group); - } - }); - - // Add or move the pivot - if (pivot) { - pivot.animate({ // #1235 - translateX: center[0], - translateY: center[1] - }); - } else { - series.pivot = renderer.circle(0, 0, pick(pivotOptions.radius, 5)) - .attr({ - 'stroke-width': pivotOptions.borderWidth || 0, - stroke: pivotOptions.borderColor || 'silver', - fill: pivotOptions.backgroundColor || 'black' - }) - .translate(center[0], center[1]) - .add(series.group); - } - }, - - /** - * Animate the arrow up from startAngle - */ - animate: function (init) { - var series = this; - - if (!init) { - each(series.points, function (point) { - var graphic = point.graphic; - - if (graphic) { - // start value - graphic.attr({ - rotation: series.yAxis.startAngleRad * 180 / Math.PI - }); - - // animate - graphic.animate({ - rotation: point.shapeArgs.rotation - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - render: function () { - this.group = this.plotGroup( - 'group', - 'series', - this.visible ? 'visible' : 'hidden', - this.options.zIndex, - this.chart.seriesGroup - ); - Series.prototype.render.call(this); - this.group.clip(this.chart.clipRect); - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw) { - Series.prototype.setData.call(this, data, false); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(); - } - }, - - /** - * If the tracking module is loaded, add the point tracker - */ - drawTracker: TrackerMixin && TrackerMixin.drawTrackerPoint -}; -seriesTypes.gauge = extendClass(seriesTypes.line, GaugeSeries); - -/* **************************************************************************** - * Start Box plot series code * - *****************************************************************************/ - -// Set default options -defaultPlotOptions.boxplot = merge(defaultPlotOptions.column, { - fillColor: '#FFFFFF', - lineWidth: 1, - //medianColor: null, - medianWidth: 2, - states: { - hover: { - brightness: -0.3 - } - }, - //stemColor: null, - //stemDashStyle: 'solid' - //stemWidth: null, - threshold: null, - tooltip: { - pointFormat: '\u25CF {series.name}
' + - 'Maximum: {point.high}
' + - 'Upper quartile: {point.q3}
' + - 'Median: {point.median}
' + - 'Lower quartile: {point.q1}
' + - 'Minimum: {point.low}
' - - }, - //whiskerColor: null, - whiskerLength: '50%', - whiskerWidth: 2 -}); - -// Create the series object -seriesTypes.boxplot = extendClass(seriesTypes.column, { - type: 'boxplot', - pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.q1, point.median, point.q3, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - - /** - * One-to-one mapping from options to SVG attributes - */ - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - fill: 'fillColor', - stroke: 'color', - 'stroke-width': 'lineWidth' - }, - - /** - * Disable data labels for box plot - */ - drawDataLabels: noop, - - /** - * Translate data points from raw values x and y to plotX and plotY - */ - translate: function () { - var series = this, - yAxis = series.yAxis, - pointArrayMap = series.pointArrayMap; - - seriesTypes.column.prototype.translate.apply(series); - - // do the translation on each point dimension - each(series.points, function (point) { - each(pointArrayMap, function (key) { - if (point[key] !== null) { - point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1); - } - }); - }); - }, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, //state = series.state, - points = series.points, - options = series.options, - chart = series.chart, - renderer = chart.renderer, - pointAttr, - q1Plot, - q3Plot, - highPlot, - lowPlot, - medianPlot, - crispCorr, - crispX, - graphic, - stemPath, - stemAttr, - boxPath, - whiskersPath, - whiskersAttr, - medianPath, - medianAttr, - width, - left, - right, - halfWidth, - shapeArgs, - color, - doQuartiles = series.doQuartiles !== false, // error bar inherits this series type but doesn't do quartiles - whiskerLength = parseInt(series.options.whiskerLength, 10) / 100; - - - each(points, function (point) { - - graphic = point.graphic; - shapeArgs = point.shapeArgs; // the box - stemAttr = {}; - whiskersAttr = {}; - medianAttr = {}; - color = point.color || series.color; - - if (point.plotY !== UNDEFINED) { - - pointAttr = point.pointAttr[point.selected ? 'selected' : '']; - - // crisp vector coordinates - width = shapeArgs.width; - left = mathFloor(shapeArgs.x); - right = left + width; - halfWidth = mathRound(width / 2); - //crispX = mathRound(left + halfWidth) + crispCorr; - q1Plot = mathFloor(doQuartiles ? point.q1Plot : point.lowPlot);// + crispCorr; - q3Plot = mathFloor(doQuartiles ? point.q3Plot : point.lowPlot);// + crispCorr; - highPlot = mathFloor(point.highPlot);// + crispCorr; - lowPlot = mathFloor(point.lowPlot);// + crispCorr; - - // Stem attributes - stemAttr.stroke = point.stemColor || options.stemColor || color; - stemAttr['stroke-width'] = pick(point.stemWidth, options.stemWidth, options.lineWidth); - stemAttr.dashstyle = point.stemDashStyle || options.stemDashStyle; - - // Whiskers attributes - whiskersAttr.stroke = point.whiskerColor || options.whiskerColor || color; - whiskersAttr['stroke-width'] = pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth); - - // Median attributes - medianAttr.stroke = point.medianColor || options.medianColor || color; - medianAttr['stroke-width'] = pick(point.medianWidth, options.medianWidth, options.lineWidth); - medianAttr['stroke-linecap'] = 'round'; // #1638 - - - // The stem - crispCorr = (stemAttr['stroke-width'] % 2) / 2; - crispX = left + halfWidth + crispCorr; - stemPath = [ - // stem up - 'M', - crispX, q3Plot, - 'L', - crispX, highPlot, - - // stem down - 'M', - crispX, q1Plot, - 'L', - crispX, lowPlot - ]; - - // The box - if (doQuartiles) { - crispCorr = (pointAttr['stroke-width'] % 2) / 2; - crispX = mathFloor(crispX) + crispCorr; - q1Plot = mathFloor(q1Plot) + crispCorr; - q3Plot = mathFloor(q3Plot) + crispCorr; - left += crispCorr; - right += crispCorr; - boxPath = [ - 'M', - left, q3Plot, - 'L', - left, q1Plot, - 'L', - right, q1Plot, - 'L', - right, q3Plot, - 'L', - left, q3Plot, - 'z' - ]; - } - - // The whiskers - if (whiskerLength) { - crispCorr = (whiskersAttr['stroke-width'] % 2) / 2; - highPlot = highPlot + crispCorr; - lowPlot = lowPlot + crispCorr; - whiskersPath = [ - // High whisker - 'M', - crispX - halfWidth * whiskerLength, - highPlot, - 'L', - crispX + halfWidth * whiskerLength, - highPlot, - - // Low whisker - 'M', - crispX - halfWidth * whiskerLength, - lowPlot, - 'L', - crispX + halfWidth * whiskerLength, - lowPlot - ]; - } - - // The median - crispCorr = (medianAttr['stroke-width'] % 2) / 2; - medianPlot = mathRound(point.medianPlot) + crispCorr; - medianPath = [ - 'M', - left, - medianPlot, - 'L', - right, - medianPlot - ]; - - // Create or update the graphics - if (graphic) { // update - - point.stem.animate({ d: stemPath }); - if (whiskerLength) { - point.whiskers.animate({ d: whiskersPath }); - } - if (doQuartiles) { - point.box.animate({ d: boxPath }); - } - point.medianShape.animate({ d: medianPath }); - - } else { // create new - point.graphic = graphic = renderer.g() - .add(series.group); - - point.stem = renderer.path(stemPath) - .attr(stemAttr) - .add(graphic); - - if (whiskerLength) { - point.whiskers = renderer.path(whiskersPath) - .attr(whiskersAttr) - .add(graphic); - } - if (doQuartiles) { - point.box = renderer.path(boxPath) - .attr(pointAttr) - .add(graphic); - } - point.medianShape = renderer.path(medianPath) - .attr(medianAttr) - .add(graphic); - } - } - }); - - } - - -}); - -/* **************************************************************************** - * End Box plot series code * - *****************************************************************************/ -/* **************************************************************************** - * Start error bar series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.errorbar = merge(defaultPlotOptions.boxplot, { - color: '#000000', - grouping: false, - linkedTo: ':previous', - tooltip: { - pointFormat: '\u25CF {series.name}: {point.low} - {point.high}
' - }, - whiskerWidth: null -}); - -// 2 - Create the series object -seriesTypes.errorbar = extendClass(seriesTypes.boxplot, { - type: 'errorbar', - pointArrayMap: ['low', 'high'], // array point configs are mapped to this - toYData: function (point) { // return a plain array for speedy calculation - return [point.low, point.high]; - }, - pointValKey: 'high', // defines the top of the tracker - doQuartiles: false, - drawDataLabels: seriesTypes.arearange ? seriesTypes.arearange.prototype.drawDataLabels : noop, - - /** - * Get the width and X offset, either on top of the linked series column - * or standalone - */ - getColumnMetrics: function () { - return (this.linkedParent && this.linkedParent.columnMetrics) || - seriesTypes.column.prototype.getColumnMetrics.call(this); - } -}); - -/* **************************************************************************** - * End error bar series code * - *****************************************************************************/ -/* **************************************************************************** - * Start Waterfall series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.waterfall = merge(defaultPlotOptions.column, { - lineWidth: 1, - lineColor: '#333', - dashStyle: 'dot', - borderColor: '#333' -}); - - -// 2 - Create the series object -seriesTypes.waterfall = extendClass(seriesTypes.column, { - type: 'waterfall', - - upColorProp: 'fill', - - pointArrayMap: ['low', 'y'], - - pointValKey: 'y', - - /** - * Init waterfall series, force stacking - */ - init: function (chart, options) { - // force stacking - options.stacking = true; - - seriesTypes.column.prototype.init.call(this, chart, options); - }, - - - /** - * Translate data points from raw values - */ - translate: function () { - var series = this, - options = series.options, - axis = series.yAxis, - len, - i, - points, - point, - shapeArgs, - stack, - y, - previousY, - stackPoint, - threshold = options.threshold; - - // run column series translate - seriesTypes.column.prototype.translate.apply(this); - - previousY = threshold; - points = series.points; - - for (i = 0, len = points.length; i < len; i++) { - // cache current point object - point = points[i]; - shapeArgs = point.shapeArgs; - - // get current stack - stack = series.getStack(i); - stackPoint = stack.points[series.index + ',' + i]; - - // override point value for sums - if (isNaN(point.y)) { - point.y = series.yData[i]; - } - - // up points - y = mathMax(previousY, previousY + point.y) + stackPoint[0]; - shapeArgs.y = axis.translate(y, 0, 1); - - - // sum points - if (point.isSum || point.isIntermediateSum) { - shapeArgs.y = axis.translate(stackPoint[1], 0, 1); - shapeArgs.height = axis.translate(stackPoint[0], 0, 1) - shapeArgs.y; - - // if it's not the sum point, update previous stack end position - } else { - previousY += stack.total; - } - - // negative points - if (shapeArgs.height < 0) { - shapeArgs.y += shapeArgs.height; - shapeArgs.height *= -1; - } - - point.plotY = shapeArgs.y = mathRound(shapeArgs.y) - (series.borderWidth % 2) / 2; - shapeArgs.height = mathRound(shapeArgs.height); - point.yBottom = shapeArgs.y + shapeArgs.height; - } - }, - - /** - * Call default processData then override yData to reflect waterfall's extremes on yAxis - */ - processData: function (force) { - var series = this, - options = series.options, - yData = series.yData, - points = series.points, - point, - dataLength = yData.length, - threshold = options.threshold || 0, - subSum, - sum, - dataMin, - dataMax, - y, - i; - - sum = subSum = dataMin = dataMax = threshold; - - for (i = 0; i < dataLength; i++) { - y = yData[i]; - point = points && points[i] ? points[i] : {}; - - if (y === "sum" || point.isSum) { - yData[i] = sum; - } else if (y === "intermediateSum" || point.isIntermediateSum) { - yData[i] = subSum; - subSum = threshold; - } else { - sum += y; - subSum += y; - } - dataMin = Math.min(sum, dataMin); - dataMax = Math.max(sum, dataMax); - } - - Series.prototype.processData.call(this, force); - - // Record extremes - series.dataMin = dataMin; - series.dataMax = dataMax; - }, - - /** - * Return y value or string if point is sum - */ - toYData: function (pt) { - if (pt.isSum) { - return "sum"; - } else if (pt.isIntermediateSum) { - return "intermediateSum"; - } - - return pt.y; - }, - - /** - * Postprocess mapping between options and SVG attributes - */ - getAttribs: function () { - seriesTypes.column.prototype.getAttribs.apply(this, arguments); - - var series = this, - options = series.options, - stateOptions = options.states, - upColor = options.upColor || series.color, - hoverColor = Highcharts.Color(upColor).brighten(0.1).get(), - seriesDownPointAttr = merge(series.pointAttr), - upColorProp = series.upColorProp; - - seriesDownPointAttr[''][upColorProp] = upColor; - seriesDownPointAttr.hover[upColorProp] = stateOptions.hover.upColor || hoverColor; - seriesDownPointAttr.select[upColorProp] = stateOptions.select.upColor || upColor; - - each(series.points, function (point) { - if (point.y > 0 && !point.color) { - point.pointAttr = seriesDownPointAttr; - point.color = upColor; - } - }); - }, - - /** - * Draw columns' connector lines - */ - getGraphPath: function () { - - var data = this.data, - length = data.length, - lineWidth = this.options.lineWidth + this.borderWidth, - normalizer = mathRound(lineWidth) % 2 / 2, - path = [], - M = 'M', - L = 'L', - prevArgs, - pointArgs, - i, - d; - - for (i = 1; i < length; i++) { - pointArgs = data[i].shapeArgs; - prevArgs = data[i - 1].shapeArgs; - - d = [ - M, - prevArgs.x + prevArgs.width, prevArgs.y + normalizer, - L, - pointArgs.x, prevArgs.y + normalizer - ]; - - if (data[i - 1].y < 0) { - d[2] += prevArgs.height; - d[5] += prevArgs.height; - } - - path = path.concat(d); - } - - return path; - }, - - /** - * Extremes are recorded in processData - */ - getExtremes: noop, - - /** - * Return stack for given index - */ - getStack: function (i) { - var axis = this.yAxis, - stacks = axis.stacks, - key = this.stackKey; - - if (this.processedYData[i] < this.options.threshold) { - key = '-' + key; - } - - return stacks[key][i]; - }, - - drawGraph: Series.prototype.drawGraph -}); - -/* **************************************************************************** - * End Waterfall series code * - *****************************************************************************/ -/* **************************************************************************** - * Start Bubble series code * - *****************************************************************************/ - -// 1 - set default options -defaultPlotOptions.bubble = merge(defaultPlotOptions.scatter, { - dataLabels: { - format: '{point.z}', - inside: true, - style: { - color: 'white', - textShadow: '0px 0px 3px black' - }, - verticalAlign: 'middle' - }, - // displayNegative: true, - marker: { - // fillOpacity: 0.5, - lineColor: null, // inherit from series.color - lineWidth: 1 - }, - minSize: 8, - maxSize: '20%', - // negativeColor: null, - // sizeBy: 'area' - states: { - hover: { - halo: { - size: 5 - } - } - }, - tooltip: { - pointFormat: '({point.x}, {point.y}), Size: {point.z}' - }, - turboThreshold: 0, - zThreshold: 0 -}); - -var BubblePoint = extendClass(Point, { - haloPath: function () { - return Point.prototype.haloPath.call(this, this.shapeArgs.r + this.series.options.states.hover.halo.size); - } -}); - -// 2 - Create the series object -seriesTypes.bubble = extendClass(seriesTypes.scatter, { - type: 'bubble', - pointClass: BubblePoint, - pointArrayMap: ['y', 'z'], - parallelArrays: ['x', 'y', 'z'], - trackerGroups: ['group', 'dataLabelsGroup'], - bubblePadding: true, - - /** - * Mapping between SVG attributes and the corresponding options - */ - pointAttrToOptions: { - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor' - }, - - /** - * Apply the fillOpacity to all fill positions - */ - applyOpacity: function (fill) { - var markerOptions = this.options.marker, - fillOpacity = pick(markerOptions.fillOpacity, 0.5); - - // When called from Legend.colorizeItem, the fill isn't predefined - fill = fill || markerOptions.fillColor || this.color; - - if (fillOpacity !== 1) { - fill = Color(fill).setOpacity(fillOpacity).get('rgba'); - } - return fill; - }, - - /** - * Extend the convertAttribs method by applying opacity to the fill - */ - convertAttribs: function () { - var obj = Series.prototype.convertAttribs.apply(this, arguments); - - obj.fill = this.applyOpacity(obj.fill); - - return obj; - }, - - /** - * Get the radius for each point based on the minSize, maxSize and each point's Z value. This - * must be done prior to Series.translate because the axis needs to add padding in - * accordance with the point sizes. - */ - getRadii: function (zMin, zMax, minSize, maxSize) { - var len, - i, - pos, - zData = this.zData, - radii = [], - sizeByArea = this.options.sizeBy !== 'width', - zRange; - - // Set the shape type and arguments to be picked up in drawPoints - for (i = 0, len = zData.length; i < len; i++) { - zRange = zMax - zMin; - pos = zRange > 0 ? // relative size, a number between 0 and 1 - (zData[i] - zMin) / (zMax - zMin) : - 0.5; - if (sizeByArea && pos >= 0) { - pos = Math.sqrt(pos); - } - radii.push(math.ceil(minSize + pos * (maxSize - minSize)) / 2); - } - this.radii = radii; - }, - - /** - * Perform animation on the bubbles - */ - animate: function (init) { - var animation = this.options.animation; - - if (!init) { // run the animation - each(this.points, function (point) { - var graphic = point.graphic, - shapeArgs = point.shapeArgs; - - if (graphic && shapeArgs) { - // start values - graphic.attr('r', 1); - - // animate - graphic.animate({ - r: shapeArgs.r - }, animation); - } - }); - - // delete this function to allow it only once - this.animate = null; - } - }, - - /** - * Extend the base translate method to handle bubble size - */ - translate: function () { - - var i, - data = this.data, - point, - radius, - radii = this.radii; - - // Run the parent method - seriesTypes.scatter.prototype.translate.call(this); - - // Set the shape type and arguments to be picked up in drawPoints - i = data.length; - - while (i--) { - point = data[i]; - radius = radii ? radii[i] : 0; // #1737 - - // Flag for negativeColor to be applied in Series.js - point.negative = point.z < (this.options.zThreshold || 0); - - if (radius >= this.minPxSize / 2) { - // Shape arguments - point.shapeType = 'circle'; - point.shapeArgs = { - x: point.plotX, - y: point.plotY, - r: radius - }; - - // Alignment box for the data label - point.dlBox = { - x: point.plotX - radius, - y: point.plotY - radius, - width: 2 * radius, - height: 2 * radius - }; - } else { // below zThreshold - point.shapeArgs = point.plotY = point.dlBox = UNDEFINED; // #1691 - } - } - }, - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawLegendSymbol: function (legend, item) { - var radius = pInt(legend.itemStyle.fontSize) / 2; - - item.legendSymbol = this.chart.renderer.circle( - radius, - legend.baseline - radius, - radius - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - item.legendSymbol.isMarker = true; - - }, - - drawPoints: seriesTypes.column.prototype.drawPoints, - alignDataLabel: seriesTypes.column.prototype.alignDataLabel -}); - -/** - * Add logic to pad each axis with the amount of pixels - * necessary to avoid the bubbles to overflow. - */ -Axis.prototype.beforePadding = function () { - var axis = this, - axisLength = this.len, - chart = this.chart, - pxMin = 0, - pxMax = axisLength, - isXAxis = this.isXAxis, - dataKey = isXAxis ? 'xData' : 'yData', - min = this.min, - extremes = {}, - smallestSize = math.min(chart.plotWidth, chart.plotHeight), - zMin = Number.MAX_VALUE, - zMax = -Number.MAX_VALUE, - range = this.max - min, - transA = axisLength / range, - activeSeries = []; - - // Handle padding on the second pass, or on redraw - if (this.tickPositions) { - each(this.series, function (series) { - - var seriesOptions = series.options, - zData; - - if (series.bubblePadding && (series.visible || !chart.options.chart.ignoreHiddenSeries)) { - - // Correction for #1673 - axis.allowZoomOutside = true; - - // Cache it - activeSeries.push(series); - - if (isXAxis) { // because X axis is evaluated first - - // For each series, translate the size extremes to pixel values - each(['minSize', 'maxSize'], function (prop) { - var length = seriesOptions[prop], - isPercent = /%$/.test(length); - - length = pInt(length); - extremes[prop] = isPercent ? - smallestSize * length / 100 : - length; - - }); - series.minPxSize = extremes.minSize; - - // Find the min and max Z - zData = series.zData; - if (zData.length) { // #1735 - zMin = math.min( - zMin, - math.max( - arrayMin(zData), - seriesOptions.displayNegative === false ? seriesOptions.zThreshold : -Number.MAX_VALUE - ) - ); - zMax = math.max(zMax, arrayMax(zData)); - } - } - } - }); - - each(activeSeries, function (series) { - - var data = series[dataKey], - i = data.length, - radius; - - if (isXAxis) { - series.getRadii(zMin, zMax, extremes.minSize, extremes.maxSize); - } - - if (range > 0) { - while (i--) { - if (typeof data[i] === 'number') { - radius = series.radii[i]; - pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin); - pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax); - } - } - } - }); - - if (activeSeries.length && range > 0 && pick(this.options.min, this.userMin) === UNDEFINED && pick(this.options.max, this.userMax) === UNDEFINED) { - pxMax -= axisLength; - transA *= (axisLength + pxMin - pxMax) / axisLength; - this.min += pxMin / transA; - this.max += pxMax / transA; - } - } -}; - -/* **************************************************************************** - * End Bubble series code * - *****************************************************************************/ - -(function () { - - /** - * Extensions for polar charts. Additionally, much of the geometry required for polar charts is - * gathered in RadialAxes.js. - * - */ - - var seriesProto = Series.prototype, - pointerProto = Pointer.prototype, - colProto; - - /** - * Translate a point's plotX and plotY from the internal angle and radius measures to - * true plotX, plotY coordinates - */ - seriesProto.toXY = function (point) { - var xy, - chart = this.chart, - plotX = point.plotX, - plotY = point.plotY, - clientX; - - // Save rectangular plotX, plotY for later computation - point.rectPlotX = plotX; - point.rectPlotY = plotY; - - // Record the angle in degrees for use in tooltip - clientX = ((plotX / Math.PI * 180) + this.xAxis.pane.options.startAngle) % 360; - if (clientX < 0) { // #2665 - clientX += 360; - } - point.clientX = clientX; - - - // Find the polar plotX and plotY - xy = this.xAxis.postTranslate(point.plotX, this.yAxis.len - plotY); - point.plotX = point.polarPlotX = xy.x - chart.plotLeft; - point.plotY = point.polarPlotY = xy.y - chart.plotTop; - }; - - /** - * Order the tooltip points to get the mouse capture ranges correct. #1915. - */ - seriesProto.orderTooltipPoints = function (points) { - if (this.chart.polar) { - points.sort(function (a, b) { - return a.clientX - b.clientX; - }); - - // Wrap mouse tracking around to capture movement on the segment to the left - // of the north point (#1469, #2093). - if (points[0]) { - points[0].wrappedClientX = points[0].clientX + 360; - points.push(points[0]); - } - } - }; - - - /** - * Add some special init logic to areas and areasplines - */ - function initArea(proceed, chart, options) { - proceed.call(this, chart, options); - if (this.chart.polar) { - - /** - * Overridden method to close a segment path. While in a cartesian plane the area - * goes down to the threshold, in the polar chart it goes to the center. - */ - this.closeSegment = function (path) { - var center = this.xAxis.center; - path.push( - 'L', - center[0], - center[1] - ); - }; - - // Instead of complicated logic to draw an area around the inner area in a stack, - // just draw it behind - this.closedStacks = true; - } - } - - if (seriesTypes.area) { - wrap(seriesTypes.area.prototype, 'init', initArea); - } - if (seriesTypes.areaspline) { - wrap(seriesTypes.areaspline.prototype, 'init', initArea); - } - - if (seriesTypes.spline) { - /** - * Overridden method for calculating a spline from one point to the next - */ - wrap(seriesTypes.spline.prototype, 'getPointSpline', function (proceed, segment, point, i) { - - var ret, - smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc; - denom = smoothing + 1, - plotX, - plotY, - lastPoint, - nextPoint, - lastX, - lastY, - nextX, - nextY, - leftContX, - leftContY, - rightContX, - rightContY, - distanceLeftControlPoint, - distanceRightControlPoint, - leftContAngle, - rightContAngle, - jointAngle; - - - if (this.chart.polar) { - - plotX = point.plotX; - plotY = point.plotY; - lastPoint = segment[i - 1]; - nextPoint = segment[i + 1]; - - // Connect ends - if (this.connectEnds) { - if (!lastPoint) { - lastPoint = segment[segment.length - 2]; // not the last but the second last, because the segment is already connected - } - if (!nextPoint) { - nextPoint = segment[1]; - } - } - - // find control points - if (lastPoint && nextPoint) { - - lastX = lastPoint.plotX; - lastY = lastPoint.plotY; - nextX = nextPoint.plotX; - nextY = nextPoint.plotY; - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - distanceLeftControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)); - distanceRightControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)); - leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX); - rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX); - jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2); - - - // Ensure the right direction, jointAngle should be in the same quadrant as leftContAngle - if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) { - jointAngle -= Math.PI; - } - - // Find the corrected control points for a spline straight through the point - leftContX = plotX + Math.cos(jointAngle) * distanceLeftControlPoint; - leftContY = plotY + Math.sin(jointAngle) * distanceLeftControlPoint; - rightContX = plotX + Math.cos(Math.PI + jointAngle) * distanceRightControlPoint; - rightContY = plotY + Math.sin(Math.PI + jointAngle) * distanceRightControlPoint; - - // Record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - - // moveTo or lineTo - if (!i) { - ret = ['M', plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - - - } else { - ret = proceed.call(this, segment, point, i); - } - return ret; - }); - } - - /** - * Extend translate. The plotX and plotY values are computed as if the polar chart were a - * cartesian plane, where plotX denotes the angle in radians and (yAxis.len - plotY) is the pixel distance from - * center. - */ - wrap(seriesProto, 'translate', function (proceed) { - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (this.chart.polar && !this.preventPostTranslate) { - var points = this.points, - i = points.length; - while (i--) { - // Translate plotX, plotY from angle and radius to true plot coordinates - this.toXY(points[i]); - } - } - }); - - /** - * Extend getSegmentPath to allow connecting ends across 0 to provide a closed circle in - * line-like series. - */ - wrap(seriesProto, 'getSegmentPath', function (proceed, segment) { - - var points = this.points; - - // Connect the path - if (this.chart.polar && this.options.connectEnds !== false && - segment[segment.length - 1] === points[points.length - 1] && points[0].y !== null) { - this.connectEnds = true; // re-used in splines - segment = [].concat(segment, [points[0]]); - } - - // Run uber method - return proceed.call(this, segment); - - }); - - - function polarAnimate(proceed, init) { - var chart = this.chart, - animation = this.options.animation, - group = this.group, - markerGroup = this.markerGroup, - center = this.xAxis.center, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - attribs; - - // Specific animation for polar charts - if (chart.polar) { - - // Enable animation on polar charts only in SVG. In VML, the scaling is different, plus animation - // would be so slow it would't matter. - if (chart.renderer.isSVG) { - - if (animation === true) { - animation = {}; - } - - // Initialize the animation - if (init) { - - // Scale down the group and place it in the center - attribs = { - translateX: center[0] + plotLeft, - translateY: center[1] + plotTop, - scaleX: 0.001, // #1499 - scaleY: 0.001 - }; - - group.attr(attribs); - if (markerGroup) { - //markerGroup.attrSetters = group.attrSetters; - markerGroup.attr(attribs); - } - - // Run the animation - } else { - attribs = { - translateX: plotLeft, - translateY: plotTop, - scaleX: 1, - scaleY: 1 - }; - group.animate(attribs, animation); - if (markerGroup) { - markerGroup.animate(attribs, animation); - } - - // Delete this function to allow it only once - this.animate = null; - } - } - - // For non-polar charts, revert to the basic animation - } else { - proceed.call(this, init); - } - } - - // Define the animate method for regular series - wrap(seriesProto, 'animate', polarAnimate); - - /** - * Throw in a couple of properties to let setTooltipPoints know we're indexing the points - * in degrees (0-360), not plot pixel width. - */ - wrap(seriesProto, 'setTooltipPoints', function (proceed, renew) { - - if (this.chart.polar) { - extend(this.xAxis, { - tooltipLen: 360 // degrees are the resolution unit of the tooltipPoints array - }); - } - // Run uber method - return proceed.call(this, renew); - }); - - - if (seriesTypes.column) { - - colProto = seriesTypes.column.prototype; - /** - * Define the animate method for columnseries - */ - wrap(colProto, 'animate', polarAnimate); - - - /** - * Extend the column prototype's translate method - */ - wrap(colProto, 'translate', function (proceed) { - - var xAxis = this.xAxis, - len = this.yAxis.len, - center = xAxis.center, - startAngleRad = xAxis.startAngleRad, - renderer = this.chart.renderer, - start, - points, - point, - i; - - this.preventPostTranslate = true; - - // Run uber method - proceed.call(this); - - // Postprocess plot coordinates - if (xAxis.isRadial) { - points = this.points; - i = points.length; - while (i--) { - point = points[i]; - start = point.barX + startAngleRad; - point.shapeType = 'path'; - point.shapeArgs = { - d: renderer.symbols.arc( - center[0], - center[1], - len - point.plotY, - null, - { - start: start, - end: start + point.pointWidth, - innerR: len - pick(point.yBottom, len) - } - ) - }; - // Provide correct plotX, plotY for tooltip - this.toXY(point); - point.tooltipPos = [point.plotX, point.plotY]; - point.ttBelow = point.plotY > center[1]; - } - } - }); - - - /** - * Align column data labels outside the columns. #1199. - */ - wrap(colProto, 'alignDataLabel', function (proceed, point, dataLabel, options, alignTo, isNew) { - - if (this.chart.polar) { - var angle = point.rectPlotX / Math.PI * 180, - align, - verticalAlign; - - // Align nicely outside the perimeter of the columns - if (options.align === null) { - if (angle > 20 && angle < 160) { - align = 'left'; // right hemisphere - } else if (angle > 200 && angle < 340) { - align = 'right'; // left hemisphere - } else { - align = 'center'; // top or bottom - } - options.align = align; - } - if (options.verticalAlign === null) { - if (angle < 45 || angle > 315) { - verticalAlign = 'bottom'; // top part - } else if (angle > 135 && angle < 225) { - verticalAlign = 'top'; // bottom part - } else { - verticalAlign = 'middle'; // left or right - } - options.verticalAlign = verticalAlign; - } - - seriesProto.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - } else { - proceed.call(this, point, dataLabel, options, alignTo, isNew); - } - - }); - } - - - /** - * Extend the mouse tracker to return the tooltip position index in terms of - * degrees rather than pixels - */ - wrap(pointerProto, 'getIndex', function (proceed, e) { - var ret, - chart = this.chart, - center, - x, - y; - - if (chart.polar) { - center = chart.xAxis[0].center; - x = e.chartX - center[0] - chart.plotLeft; - y = e.chartY - center[1] - chart.plotTop; - - ret = 180 - Math.round(Math.atan2(x, y) / Math.PI * 180); - - } else { - - // Run uber method - ret = proceed.call(this, e); - } - return ret; - }); - - /** - * Extend getCoordinates to prepare for polar axis values - */ - wrap(pointerProto, 'getCoordinates', function (proceed, e) { - var chart = this.chart, - ret = { - xAxis: [], - yAxis: [] - }; - - if (chart.polar) { - - each(chart.axes, function (axis) { - var isXAxis = axis.isXAxis, - center = axis.center, - x = e.chartX - center[0] - chart.plotLeft, - y = e.chartY - center[1] - chart.plotTop; - - ret[isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.translate( - isXAxis ? - Math.PI - Math.atan2(x, y) : // angle - Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), // distance from center - true - ) - }); - }); - - } else { - ret = proceed.call(this, e); - } - - return ret; - }); - -}()); - -}(Highcharts)); diff --git a/static/js/highcharts/highcharts.js b/static/js/highcharts/highcharts.js deleted file mode 100644 index 0f4336dbb..000000000 --- a/static/js/highcharts/highcharts.js +++ /dev/null @@ -1,305 +0,0 @@ -/* - Highcharts JS v4.0.1 (2014-04-24) - - (c) 2009-2014 Torstein Honsi - - License: www.highcharts.com/license -*/ -(function(){function q(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function w(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+M(a-c).toFixed(f).slice(2):"")}function Ha(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ma(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments); -a.unshift(d);return c.apply(this,a)}}function Ia(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h-1?h.thousandsSep:""))):e=cb(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function mb(a){return U.pow(10,T(U.log(a)/ -U.LN10))}function nb(a,b,c,d){var e,c=m(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;dc&&(c=a[b]);return c}function Oa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Pa(a){db||(db=Y(Ja));a&&db.appendChild(a);db.innerHTML=""}function ra(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else I.console&&console.log(c)}function da(a){return parseFloat(a.toPrecision(14))}function Qa(a,b){va=m(a,b.animation)}function Cb(){var a=E.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Ra=(a&&E.global.timezoneOffset|| -0)*6E4;eb=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,m(c,1),m(g,0),m(h,0),m(i,0))).getTime()};pb=b+"Minutes";qb=b+"Hours";rb=b+"Day";Xa=b+"Date";fb=b+"Month";gb=b+"FullYear";Db=c+"Minutes";Eb=c+"Hours";sb=c+"Date";Fb=c+"Month";Gb=c+"FullYear"}function P(){}function Sa(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function la(){this.init.apply(this,arguments)}function Ya(){this.init.apply(this,arguments)}function Hb(a,b,c,d,e){var f=a.chart.inverted; -this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:m(b.y,f?4:c?14:-6),x:m(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var t,y=document,I=window,U=Math,u=U.round,T=U.floor,Ka=U.ceil,v=U.max,C=U.min,M=U.abs,Z=U.cos,ea=U.sin,ma=U.PI,Ca=ma*2/360,wa=navigator.userAgent,Ib=I.opera,Aa=/msie/i.test(wa)&& -!Ib,hb=y.documentMode===8,ib=/AppleWebKit/.test(wa),Ta=/Firefox/.test(wa),Jb=/(Mobile|Android|Windows Phone)/.test(wa),xa="http://www.w3.org/2000/svg",aa=!!y.createElementNS&&!!y.createElementNS(xa,"svg").createSVGRect,Nb=Ta&&parseInt(wa.split("Firefox/")[1],10)<4,fa=!aa&&!Aa&&!!y.createElement("canvas").getContext,Za,$a,Kb={},tb=0,db,E,cb,va,ub,A,sa=function(){},V=[],ab=0,Ja="div",Q="none",Ob=/^[0-9]+$/,Pb="stroke-width",eb,Ra,pb,qb,rb,Xa,fb,gb,Db,Eb,sb,Fb,Gb,F={},R=I.Highcharts=I.Highcharts?ra(16, -!0):{};cb=function(a,b,c){if(!r(b)||isNaN(b))return"Invalid date";var a=m(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b-Ra),e,f=d[qb](),g=d[rb](),h=d[Xa](),i=d[fb](),j=d[gb](),k=E.lang,l=k.weekdays,d=q({a:l[g].substr(0,3),A:l[g],d:Ha(h),e:h,b:k.shortMonths[i],B:k.months[i],m:Ha(i+1),y:j.toString().substr(2,2),Y:j,H:Ha(f),I:Ha(f%12||12),l:f%12||12,M:Ha(d[pb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ha(d.getSeconds()),L:Ha(u(b%1E3),3)},R.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]=== -"function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Bb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};A=function(){for(var a=0,b=arguments,c=b.length,d={};a-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c), -h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length{point.key}
',pointFormat:' {series.name}: {point.y}
',shadow:!0,snap:Jb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px", -whiteSpace:"nowrap"}},credits:{enabled:0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var ba=E.plotOptions,S=ba.line;Cb();var Tb=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,Ub=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,Vb=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,ya=function(a){var b=[],c, -d;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return ya(a[1])}):(c=Tb.exec(a))?b=[z(c[1]),z(c[2]),z(c[3]),parseFloat(c[4],10)]:(c=Ub.exec(a))?b=[z(c[1],16),z(c[2],16),z(c[3],16),1]:(c=Vb.exec(a))&&(b=[z(c[1]),z(c[2]),z(c[3]),1])})(a);return{get:function(c){var f;d?(f=w(a),f.stops=[].concat(f.stops),p(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)p(d, -function(b){b.brighten(a)});else if(ha(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=z(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};P.prototype={init:function(a,b){this.element=b==="span"?Y(b):y.createElementNS(xa,b);this.renderer=a},opacity:1,animate:function(a,b,c){b=m(b,va,!0);bb(this);if(b){b=w(b,{});if(c)b.complete=c;kb(this,a,b)}else this.attr(a),c&&c()},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,o,n,s=[];a.linearGradient? -f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];h=d.gradients;j=a.stops;o=c.radialReference;La(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&o&&!r(g.gradientUnits)&&(g=w(g,{cx:o[0]-o[2]/2+g.cx*o[2],cy:o[1]-o[2]/2+g.cy*o[2],r:g.r*o[2],gradientUnits:"userSpaceOnUse"}));for(n in g)n!=="id"&&s.push(n,g[n]);for(n in j)s.push(j[n]);s=s.join(",");h[s]?a=h[s].attr("id"):(g.id=a="highcharts-"+tb++,h[s]=i=d.createElement(f).attr(g).add(d.defs), -i.stops=[],p(j,function(a){a[1].indexOf("rgba")===0?(e=ya(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)}));c.setAttribute(b,"url("+d.url+"#"+a+")")}},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a==="string"&&b!==t&&(c=a,a={},a[c]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&& -(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c==="x"||c==="y"))this.doTransform=!0;h||(this[c+"Setter"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a==="height"?v(b-(c[d].cutHeight||0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element, -c=H(b,"class")||"";c.indexOf(a)===-1&&H(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;p("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=m(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":Q)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||this.attr&&this.attr("stroke-width")||0;d=u(e)%2/2;a.x=T(a.x||this.x|| -0)+d;a.y=T(a.y||this.y||0)+d;a.width=T((a.width||this.width||0)-2*d);a.height=T((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&z(a.width);b&&(a=q(b,c));this.styles=a;e&&(fa||!aa&&this.renderer.forExport)&&delete a.width;if(Aa&&!aa)G(this.element, -a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";H(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;$a&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=Date.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(wa.indexOf("Android")===-1||Date.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference= -a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")"); -(r(c)||r(d))&&a.push("scale("+m(c,1)+" "+m(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Fa(c))this.alignTo=d=c||"renderer",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=m(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x|| -0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=u(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=u(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(){var a=this.bBox,b=this.renderer,c,d,e=this.rotation;c=this.element;var f=this.styles,g=e*Ca;d=this.textStr;var h;if(d===""||Ob.test(d))h="num."+d.toString().length+ -(f?"|"+f.fontSize+"|"+f.fontFamily:"");h&&(a=b.cache[h]);if(!a){if(c.namespaceURI===xa||b.forExport){try{a=c.getBBox?q({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight}}catch(i){}if(!a||a.width<0)a={width:0,height:0}}else a=this.htmlGetBBox();if(b.isSVG){c=a.width;d=a.height;if(Aa&&f&&f.fontSize==="11px"&&d.toPrecision(3)==="16.9")a.height=d=14;if(e)a.width=M(d*ea(g))+M(c*Z(g)),a.height=M(d*Z(g))+M(c*ea(g))}this.bBox=a;h&&(b.cache[h]=a)}return a},show:function(a){return a&&this.element.namespaceURI=== -xa?(this.element.removeAttribute("visibility"),this):this.attr({visibility:a?"inherit":"visible"})},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.hide()}})},add:function(a){var b=this.renderer,c=a||b,d=c.element||b.box,e=this.element,f=this.zIndex,g,h;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);if(f)c.handleZ=!0,f=z(f);if(c.handleZ){a=d.childNodes; -for(g=0;gf||!r(f)&&r(c))){d.insertBefore(e,b);h=!0;break}}h||d.appendChild(e);this.added=!0;if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;bb(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f= -0;f/,i=/<.*href="(http[^"]+)".*>/,l&&!a.added&&this.box.appendChild(b), -e=f?e.replace(/<(b|strong)>/g,'').replace(/<(i|em)>/g,'').replace(/
/g,"").split(//g):[e],e[e.length-1]===""&&e.pop(),p(e,function(e,f){var g,n=0,e=e.replace(//g,"|||");g=e.split("|||");p(g,function(e){if(e!==""||g.length===1){var o={},m=y.createElementNS(xa,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"), -H(m,"style",p));i.test(e)&&!d&&(H(m,"onclick",'location.href="'+e.match(i)[1]+'"'),G(m,{cursor:"pointer"}));e=(e.replace(/<(.|\n)*?>/g,"")||" ").replace(/</g,"<").replace(/>/g,">");if(e!==" "){m.appendChild(y.createTextNode(e));if(n)o.dx=0;else if(f&&j!==null)o.x=j;H(m,o);!n&&f&&(!aa&&d&&G(m,{display:"block"}),H(m,"dy",s(m),ib&&m.offsetHeight));b.appendChild(m);n++;if(l)for(var e=e.replace(/([^\^])-/g,"$1- ").split(" "),o=e.length>1&&k.whiteSpace!=="nowrap",$,r,B=a._clipHeight,q=[],v=s(),t= -1;o&&(e.length||q.length);)delete a.bBox,$=a.getBBox(),r=$.width,!aa&&c.forExport&&(r=c.measureSpanWidth(m.firstChild.data,a.styles)),$=r>l,!$||e.length===1?(e=q,q=[],e.length&&(t++,B&&t*v>B?(e=["..."],a.attr("title",a.textStr)):(m=y.createElementNS(xa,"tspan"),H(m,{dy:v,x:j}),p&&H(m,"style",p),b.appendChild(m),r>l&&(l=r)))):(m.removeChild(m.firstChild),q.unshift(e.pop())),e.length&&m.appendChild(y.createTextNode(e.join(" ").replace(/- /g,"-")))}}})}))},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a, -b,c,i,null,null,null,null,"button"),k=0,l,o,n,s,m,p,a={x1:0,y1:0,x2:0,y2:1},e=w({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);s=f.style;delete f.style;g=w(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);m=g.style;delete g.style;h=w(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style; -K(j.element,Aa?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(s)});K(j.element,Aa?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],o=[n,s,m][k],j.attr(l).css(o))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(m):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(q({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=u(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=u(a[2])+b%2/2);return a},path:function(a){var b= -{fill:Q};La(a)?b.d=a:ca(a)&&q(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=ca(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(ca(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=ca(a)?a.r: -e,g=this.createElement("rect"),a=ca(a)?a:a===t?{}:{x:a,y:b,width:v(c,0),height:v(d,0)};if(f!==t)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){H(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[m(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");return r(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f= -{preserveAspectRatio:Q};arguments.length>1&&q(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(u(b),u(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),q(g,{symbolName:a,x:b,y:c,width:d,height:e}),f&&q(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}), -a.alignByTranslate||a.translate(u((d-b[0])/2),u((e-b[1])/2)))},j=a.match(i)[1],a=Kb[j],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),Y("img",{onload:function(){k(g,Kb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L", -a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=Z(f),j=ea(f),k=Z(g),g=ea(g),e=e.end-fc&&i>b+g&&ib+g&&id&&h>a+g&&ha+g&&hl&&/[ \-]/.test(b.textContent||b.innerText))G(b,{width:l+"px",display:"block",whiteSpace:"normal"}),i=l;this.getSpanCorrection(i,k,h,j,g)}G(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(ib)k=b.offsetHeight; -this.cTT=o}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=Aa?"-ms-transform":ib?"-webkit-transform":Ta?"MozTransform":Ib?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";d[e+(Ta?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";G(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});q(ta.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox; -e.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:u(b),y:u(c)}).css({position:"absolute",whiteSpace:"nowrap",fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;p(j.reverse(),function(a){var d;b=a.div=a.div||Y(Ja,{className:H(a.element, -"class")},{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;q(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});var X;if(!aa&&!fa){R.VMLElement=X={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute", -";"],e=b===Ja;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?c.join(""):a.prepVML(c),this.element=Y(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:P.prototype.htmlUpdateTransform, -setSpanRotation:function(){var a=this.rotation,b=Z(a*Ca),c=ea(a*Ca);G(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):Q})},getSpanCorrection:function(a,b,c,d,e){var f=d?Z(d*Ca):1,g=d?ea(d*Ca):0,h=m(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-= -h*c*(g<0?-1:1)),G(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ha(a[b]))c[b]=u(a[b]*10)-5;else if(a[b]==="Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?"inherit":"rect(auto)"}); -return b.css(a)},css:P.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Pa(a)},destroy:function(){this.destroyClip&&this.destroyClip();return P.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=I.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=z(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path, -l,o,n,s;k&&typeof k.value!=="string"&&(k="x");o=k;if(a){n=m(a.width,3);s=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(o=this.cutOffPath(k.value,l+0.5));j=[''];h=Y(g.prepVML(j),null,{left:z(i.left)+m(a.offsetX,1),top:z(i.top)+m(a.offsetY,1)});if(c)h.cutOff=l+1;j=[''];Y(g.prepVML(j),null,null,h);b?b.element.appendChild(h): -f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:sa,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||Y(this.renderer.prepVML([""]),null,null,c))[b]=a||"solid";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff? -this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=a!==Q,this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},opacitySetter:sa,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-u(ea(a*Ca)+1)+"px";c.top=u(Z(a*Ca))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ha(a)&&(a+="px"); -this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&p(this.shadows,function(c){c.style[b]=a});c.nodeName==="DIV"&&(a=a==="hidden"?"-999em":0,hb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};X=ka(P,X);X.prototype.ySetter= -X.prototype.widthSetter=X.prototype.heightSetter=X.prototype.xSetter;var ga={Element:X,isIE8:wa.indexOf("MSIE 8.0")>-1,init:function(a,b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ja).css(q(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!y.namespaces.hcv){y.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{y.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){y.styleSheets[0].cssText+= -"hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=ca(a);return q(e,{members:[],left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+u(a?e:d)+"px,"+u(a? -f:b)+"px,"+u(a?b:f)+"px,"+u(a?d:e)+"px)"};!a&&hb&&c==="DIV"&&q(d,{width:b+"px",height:f+"px"});return d},updateClipping:function(){p(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=Q;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,o=a.linearGradient||a.radialGradient,n,s,m,J,L,x="",a=a.stops,r,v=[],q=function(){h=['']; -Y(e.prepVML(h),null,null,b)};n=a[0];r=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);r[0]<1&&a.push([1,r[1]]);p(a,function(a,b){g.test(a[1])?(f=ya(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);v.push(a[0]*100+"% "+k);b?(m=l,J=k):(s=l,L=k)});if(c==="fill")if(i==="gradient")c=o.x1||o[0]||0,a=o.y1||o[1]||0,n=o.x2||o[2]||0,o=o.y2||o[3]||0,x='angle="'+(90-U.atan((o-a)/(n-c))*180/ma)+'"',q();else{var j=o.r,t=j*2,u=j*2,y=o.cx,B=o.cy,na=b.radialReference,w,j=function(){na&&(w=d.getBBox(),y+=(na[0]-w.x)/w.width- -0.5,B+=(na[1]-w.y)/w.height-0.5,t*=na[2]/w.width,u*=na[2]/w.height);x='src="'+E.global.VMLRadialGradientURL+'" size="'+t+","+u+'" origin="0.5,0.5" position="'+y+","+B+'" color2="'+L+'" ';q()};d.added?j():d.onAdd=j;j=J}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=ya(a),h=["<",c,' opacity="',f.get("a"),'"/>'],Y(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b? -(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):ta.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;G(a,{flip:"x",left:z(d.width)-(e?z(e.top): -1),top:z(d.height)-(e?z(e.left):1),rotation:-90});p(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||d,c=e.innerR,d=Z(f),i=ea(f),j=Z(g),k=ea(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+ -c,b+d/2,"e"]},rect:function(a,b,c,d,e){return ta.prototype.symbols[!r(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};R.VMLRenderer=X=function(){this.init.apply(this,arguments)};X.prototype=w(ta.prototype,ga);Za=X}ta.prototype.measureSpanWidth=function(a,b){var c=y.createElement("span"),d;d=y.createTextNode(a);c.appendChild(d);G(c,b);this.box.appendChild(c);d=c.offsetWidth;Pa(c);return d};var Lb;if(fa)R.CanVGRenderer=X=function(){xa="http://www.w3.org/1999/xhtml"},X.prototype.symbols={},Lb=function(){function a(){var a= -b.length,d;for(d=0;dl[s]?l[s]= -g+j:o||(c=!1);if(o){l=(o=d.justifyToPlot)?d.pos:0;o=o?l+d.len:d.chart.chartWidth;do a+=e?1:-1,n=d.ticks[i[a]];while(i[a]&&(!n||n.label.line!==s));d=n&&n.label.xy&&n.label.xy.x+n.getLabelSides()[e?0:1];e&&!h||f&&h?g+kd&&(c=!1)):g+j>o&&(g=o-j,n&&g+k0&&b.height>0){f=w({align:c&&k&&"center",x:c?!k&&4:10,verticalAlign:!c&&k&&"middle",y:c?k?16:10:k?6:-4,rotation:c&&!k&&90},f);if(!g){q={align:f.textAlign||f.align,rotation:f.rotation};if(r(L))q.zIndex=L;a.label=g=t.text(f.text,0,0,f.useHTML).attr(q).css(f.style).add()}b=[s[1], -s[4],m(s[6],s[1])];s=[s[2],s[5],m(s[7],s[2])];c=Na(b);k=Na(s);g.align(f,!1,{x:c,y:k,width:Ba(b)-c,height:Ba(s)-k});g.show()}else g&&g.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Oa(this)}};la.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#C0C0C0",labels:N,lineColor:"#C0D0E0",lineWidth:1,minPadding:0.01, -maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,minPadding:0.05,startOnTick:!0, -tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return Ga(this.total,-1)},style:N.style}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{x:0,y:20},title:{rotation:0}},defaultTopAxisOptions:{labels:{x:0,y:-15},title:{rotation:0}},init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite= -b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=[];this.isLog=e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=r(d.linkedTo);this.tickmarkOffset=this.categories&&d.tickmarkPlacement=== -"between"?0.5:0;this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=m(d.crosshair,qa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Da(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this)); -this.series=this.series||[];if(a.inverted&&c&&this.reversed===t)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)K(this,f,d[f]);if(this.isLog)this.val2lin=za,this.lin2val=ia},setOptions:function(a){this.options=w(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],w(E[this.coll],a))},defaultLabelFormatter:function(){var a= -this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=E.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ia(h,this);else if(c)g=b;else if(d)g=cb(d,b);else if(f&&a>=1E3)for(;f--&&g===t;)c=Math.pow(1E3,f+1),a>=c&&e[f]!==null&&(g=Ga(b/c,-1)+e[f]);g===t&&(g=M(b)>=1E4?Ga(b,0):Ga(b,-1,t,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=null;a.buildStacks&&a.buildStacks();p(a.series,function(c){if(c.visible|| -!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(m(a.dataMin,d[0]),Na(d)),a.dataMax=v(m(a.dataMax,d[0]),Ba(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(r(c)&&r(e))a.dataMin=C(m(a.dataMin,c),c),a.dataMax=v(m(a.dataMax,e),e);if(r(d))if(a.dataMin>=d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMaxg+this.width)o=!0}else if(a=g,c=l-this.right,ih+this.height)o=!0;return o&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a, -b,c){var d,e=da(T(b/a)*a),f=da(Ka(c/a)*a),g=[];if(b===c&&ha(b))return[b];for(b=e;b<=f;){g.push(b);b=da(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e;if(this.isLog){e=b.length;for(a=1;a=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===t&&!this.isLog)r(a.min)||r(a.max)?this.minRange=null:(p(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===t||hc&&(h=0);d=v(d,h);f=v(f,Fa(j)?0:h/2);g=v(g,j==="on"?0:h);!a.noSharedTooltip&&r(n)&&(e=r(e)?C(e,n):n)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=j*f},setTickPositions:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=b.options.tickPositioner,j=d.maxPadding, -k=d.minPadding,l=d.tickInterval,o=d.minTickInterval,n=d.tickPixelInterval,s,$=b.categories;h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=m(c.min,c.dataMin),b.max=m(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&ra(11,1)):(b.min=m(b.userMin,d.min,b.dataMin),b.max=m(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,m(b.dataMin,b.min))<=0&&ra(10,1),b.min=da(za(b.min)),b.max=da(za(b.max));if(b.range&&r(b.max))b.userMin=b.min=v(b.min,b.max-b.range),b.userMax=b.max,b.range= -null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!$&&!b.axisPointRange&&!b.usePercentage&&!h&&r(b.min)&&r(b.max)&&(c=b.max-b.min)){if(!r(d.min)&&!r(b.userMin)&&k&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*k;if(!r(d.max)&&!r(b.userMax)&&j&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*j}if(ha(d.floor))b.min=v(b.min,d.floor);if(ha(d.ceiling))b.max=C(b.max,d.ceiling);b.min===b.max||b.min===void 0||b.max===void 0?b.tickInterval=1:h&&!l&&n===b.linkedParent.options.tickPixelInterval?b.tickInterval= -b.linkedParent.tickInterval:(b.tickInterval=m(l,$?1:(b.max-b.min)*n/v(b.len,n)),!r(l)&&b.lenv(2*b.len,200)&&ra(19,!0),a=f?b.getTimeTicks(b.normalizeTimeTickInterval(b.tickInterval,d.units),b.min,b.max,d.startOfWeek,b.ordinalPositions,b.closestPointRange, -!0):e?b.getLogTickPositions(b.tickInterval,b.min,b.max):b.getLinearTickPositions(b.tickInterval,b.min,b.max),s&&a.splice(1,a.length-2),b.tickPositions=a;if(!h)e=a[0],f=a[a.length-1],h=b.minPointOffset||0,d.startOnTick?b.min=e:b.min-h>e&&a.shift(),d.endOnTick?b.max=f:b.max+h1E13?1:0.001,b.min-=d,b.max+=d)},setMaxTicks:function(){var a=this.chart,b=a.maxTicks||{},c=this.tickPositions,d=this._maxTicksKey=[this.coll,this.pos,this.len].join("-");if(!this.isLinked&& -!this.isDatetimeAxis&&c&&c.length>(b[d]||0)&&this.options.alignTicks!==!1)b[d]=c.length;a.maxTicks=b},adjustTickAmount:function(){var a=this._maxTicksKey,b=this.tickPositions,c=this.chart.maxTicks;if(c&&c[a]&&!this.isDatetimeAxis&&!this.categories&&!this.isLinked&&this.options.alignTicks!==!1&&this.min!==t){var d=this.tickAmount,e=b.length;this.tickAmount=a=c[a];if(e=v(d,m(e.max,d))&&(b=t));this.displayBtn=a!==t||b!==t;this.setExtremes(a,b,!1,t,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=m(b.width,a.plotWidth-c+(b.offsetRight||0)),f=m(b.height,a.plotHeight),g=m(b.top,a.plotTop),b=m(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseInt(f,10)/100*a.plotHeight);c.test(g)&&(g=parseInt(g,10)/100*a.plotHeight+a.plotTop); -this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=v(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=this.isLog;return{min:a?da(ia(this.min)):this.min,max:a?da(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;c>a||a===null?a=c:b15&&a<165?"right":a>195&&a<345?"left":"center"},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k=0,l,o=0,n=d.title,s=d.labels,$=0,J=b.axisOffset,L=b.clipOffset,x=[-1,1,1,-1][h],q,u=1,w=m(s.maxStaggerLines,5),y,z,A,B,na=h===2?c.fontMetrics(s.style.fontSize).b:0;a.hasData=j=a.hasVisibleSeries||r(a.min)&&r(a.max)&&!!e;a.showAxis=b=j||m(d.showEmpty,!0);a.staggerLines= -a.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:s.zIndex||7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels").add();if(j||a.isLinked){a.labelAlign=m(s.align||a.autoLabelAlign(s.rotation));p(e,function(b){f[b]?f[b].addLabel():f[b]=new Sa(a,b)});if(a.horiz&&!a.staggerLines&&w&&!s.rotation){for(q=a.reversed?[].concat(e).reverse():e;u1)a.staggerLines=u}p(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===a.labelAlign)$=v(f[b].getLabelSize(),$)});if(a.staggerLines)$*=a.staggerLines,a.labelOffset=$}else for(q in f)f[q].destroy(),delete f[q];if(n&&n.text&&n.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(n.text,0,0,n.useHTML).attr({zIndex:7,rotation:n.rotation|| -0,align:n.textAlign||{low:"left",middle:"center",high:"right"}[n.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(n.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(b)k=a.axisTitle.getBBox()[g?"height":"width"],o=m(n.margin,g?5:10),l=n.offset;a.axisTitle[b?"show":"hide"]()}a.offset=x*m(d.offset,J[h]);a.axisTitleMargin=m(l,$+o+($&&x*d.labels[g?"y":"x"]-na));J[h]=v(J[h],a.axisTitleMargin+k+x*a.offset);L[i]=v(L[i],T(d.lineWidth/2)*2)},getLinePath:function(a){var b=this.chart,c=this.opposite, -d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=z(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)* -this.axisTitleMargin+(this.side===2?i:0);return{x:a?d:b+(g?this.width:0)+h+(e.x||0),y:a?b-(g?this.height:0)+h:d+(e.y||0)}},render:function(){var a=this,b=a.horiz,c=a.reversed,d=a.chart,e=d.renderer,f=a.options,g=a.isLog,h=a.isLinked,i=a.tickPositions,j,k=a.axisTitle,l=a.ticks,o=a.minorTicks,n=a.alternateBands,s=f.stackLabels,m=f.alternateGridColor,J=a.tickmarkOffset,L=f.lineWidth,x=d.hasRendered&&r(a.oldMin)&&!isNaN(a.oldMin),q=a.hasData,v=a.showAxis,u,w=f.labels.overflow,y=a.justifyLabels=b&&w!== -!1,z;a.labelEdge.length=0;a.justifyToPlot=w==="justify";p([l,o,n],function(a){for(var b in a)a[b].isActive=!1});if(q||h)if(a.minorTickInterval&&!a.categories&&p(a.getMinorTickPositions(),function(b){o[b]||(o[b]=new Sa(a,b,"minor"));x&&o[b].isNew&&o[b].render(null,!0);o[b].render(null,!1,1)}),i.length&&(j=i.slice(),(b&&c||!b&&!c)&&j.reverse(),y&&(j=j.slice(1).concat([j[0]])),p(j,function(b,c){y&&(c=c===j.length-1?0:c+1);if(!h||b>=a.min&&b<=a.max)l[b]||(l[b]=new Sa(a,b)),x&&l[b].isNew&&l[b].render(c, -!0,0.1),l[b].render(c,!1,1)}),J&&a.min===0&&(l[-1]||(l[-1]=new Sa(a,-1,null,!0)),l[-1].render(-1))),m&&p(i,function(b,c){if(c%2===0&&b=A.second&&(i.setMilliseconds(0),i.setSeconds(j>=A.minute?0:k*T(i.getSeconds()/k)));if(j>=A.minute)i[Db](j>=A.hour?0:k*T(i[pb]()/k));if(j>=A.hour)i[Eb](j>=A.day?0:k*T(i[qb]()/k));if(j>=A.day)i[sb](j>=A.month?1:k*T(i[Xa]()/k));j>=A.month&&(i[Fb](j>=A.year?0:k*T(i[fb]()/k)),h=i[gb]());j>=A.year&&(h-=h%k,i[Gb](h));if(j===A.week)i[sb](i[Xa]()-i[rb]()+m(d,1));b=1;Ra&&(i=new Date(i.getTime()+Ra));h=i[gb]();for(var d= -i.getTime(),l=i[fb](),o=i[Xa](),n=g?Ra:(864E5+i.getTimezoneOffset()*6E4)%864E5;d=0.5)a=u(a),g=this.getLinearTickPositions(a, -b,c);else if(a>=0.08)for(var f=T(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];fb&&(!d||k<=c)&&g.push(k),k>c&&(l=!0),k=j}else if(b=ia(b),c=ia(c),a=e[d?"minorTickInterval":"tickInterval"],a=m(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=nb(a,null,mb(a)),g=Ua(this.getLinearTickPositions(a,b,c),za),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval= -a;return g};var Mb=R.Tooltip=function(){this.init.apply(this,arguments)};Mb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=z(d.padding);this.chart=a;this.options=b;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared}, -destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==!1&&!e.isHidden,h=e.followPointer||e.len>1;q(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?t:g?(2*f.anchorX+c)/3:c,anchorY:h?t:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g&&(M(a-f.x)>1||M(b-f.y)>1))clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(){var a= -this,b;clearTimeout(this.hideTimer);if(!this.isHidden)b=this.chart.hoverPoints,this.hideTimer=setTimeout(function(){a.label.fadeOut();a.isHidden=!0},m(this.options.hideDelay,500)),b&&p(b,function(a){a.setState()}),this.chart.hoverPoints=null},getAnchor:function(a,b){var c,d=this.chart,e=d.inverted,f=d.plotTop,g=0,h=0,i,a=qa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===t&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(p(a,function(a){i=a.series.yAxis;g+=a.plotX;h+=(a.plotLow? -(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&i?i.top-f:0)}),g/=a.length,h/=a.length,c=[e?d.plotWidth-h:g,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-g:h]);return Ua(c,u)},getPosition:function(a,b,c){var d=this.chart,e=this.distance,f={},g,h=["y",d.chartHeight,b,c.plotY+d.plotTop],i=["x",d.chartWidth,a,c.plotX+d.plotLeft],j=c.ttBelow||d.inverted&&!c.negative||!d.inverted&&c.negative,k=function(a,b,c,d){var g=cb-e)return!1;else f[a]=db-c/2?b-c-2:d-c/2},o=function(a){var b=h;h=i;i=b;g=a},n=function(){k.apply(0,h)!==!1?l.apply(0,i)===!1&&!g&&(o(!0),n()):g?f.x=f.y=0:(o(!0),n())};(d.inverted||this.len>1)&&o();n();return f},defaultFormatter:function(a){var b=this.points||qa(this),c=b[0].series,d;d=[a.tooltipHeaderFormatter(b[0])];p(b,function(a){c=a.series;d.push(c.tooltipFormatter&&c.tooltipFormatter(a)||a.point.tooltipFormatter(c.tooltipOptions.pointFormat))}); -d.push(a.options.footerFormat||"");return d.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h={},i,j=[];i=e.formatter||this.defaultFormatter;var h=c.hoverPoints,k,l=this.shared;clearTimeout(this.hideTimer);this.followPointer=qa(a)[0].series.tooltipOptions.followPointer;g=this.getAnchor(a,b);f=g[0];g=g[1];l&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,h&&p(h,function(a){a.setState()}),p(a,function(a){a.setState("hover");j.push(a.getLabelConfig())}),h={x:a[0].category, -y:a[0].y},h.points=j,this.len=j.length,a=a[0]):h=a.getLabelConfig();i=i.call(h,this);h=a.series;this.distance=m(h.tooltipOptions.distance,16);i===!1?this.hide():(this.isHidden&&(bb(d),d.attr("opacity",1).show()),d.attr({text:i}),k=e.borderColor||a.color||h.color||"#606060",d.attr({stroke:k}),this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow}),this.isHidden=!1);D(c,"tooltipRefresh",{text:i,x:f+c.plotLeft,y:g+c.plotTop,borderColor:k})},updatePosition:function(a){var b=this.chart, -c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(u(c.x),u(c.y),a.plotX+b.plotLeft,a.plotY+b.plotTop)},tooltipHeaderFormatter:function(a){var b=a.series,c=b.tooltipOptions,d=c.dateTimeLabelFormats,e=c.xDateFormat,f=b.xAxis,g=f&&f.options.type==="datetime"&&ha(a.key),c=c.headerFormat,f=f&&f.closestPointRange,h;if(g&&!e){if(f)for(h in A){if(A[h]>=f||A[h]<=A.day&&a.key%A[h]>0){e=d[h];break}}else e=d.day;e=e||d.year}g&&e&&(c=c.replace("{point.key}","{point.key:"+ -e+"}"));return Ia(c,{point:a,series:b})}};var oa;$a=y.documentElement.ontouchstart!==t;var Wa=R.Pointer=function(a,b){this.init(a,b)};Wa.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?"":c.zoomType,c=a.inverted,f;this.options=b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(R.Tooltip&&b.tooltip.enabled)a.tooltip=new Mb(a,b.tooltip), -this.followTouchMove=b.tooltip.followTouchMove;this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Sb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;if(!b)this.chartPosition=b=Rb(this.chart.container);d.pageX===t?(c=v(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return q(a,{chartX:u(c),chartY:u(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};p(this.chart.axes,function(c){b[c.isXAxis?"xAxis": -"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},getIndex:function(a){var b=this.chart;return b.inverted?b.plotHeight+b.plotTop-a.chartY:a.chartX-b.plotLeft},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e,f,g=b.hoverPoint,h=b.hoverSeries,i,j,k=b.chartWidth,l=this.getIndex(a);if(d&&this.options.tooltip.shared&&(!h||!h.noSharedTooltip)){f=[];i=c.length;for(j=0;jk&&f.splice(i,1);if(f.length&&f[0].clientX!==this.hoverX)d.refresh(f,a),this.hoverX=f[0].clientX}c=h&&h.tooltipOptions.followPointer;if(h&&h.tracker&&!c){if((e=h.tooltipPoints[l])&&e!==g)e.onMouseOver(a)}else d&&c&&!d.isHidden&&(h=d.getAnchor([{}],a),d.updatePosition({plotX:h[0],plotY:h[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove= -function(a){if(V[oa])V[oa].pointer.onDocumentMouseMove(a)},K(y,"mousemove",this._onDocumentMouseMove);p(b.axes,function(b){b.drawCrosshair(a,m(e,g))})},reset:function(a){var b=this.chart,c=b.hoverSeries,d=b.hoverPoint,e=b.tooltip,f=e&&e.shared?b.hoverPoints:d;(a=a&&e&&f)&&qa(f)[0].plotX===t&&(a=!1);if(a)e.refresh(f),d&&d.setState(d.state,!0);else{if(d)d.onMouseOut();if(c)c.onMouseOut();e&&e.hide();if(this._onDocumentMouseMove)W(y,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=null; -p(b.axes,function(a){a.hideCrosshair()});this.hoverX=null}},scaleGroups:function(a,b){var c=this.chart,d;p(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY}, -drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,o=this.mouseDownX,n=this.mouseDownY;dh+j&&(d=h+j);ei+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(o-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(o-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!this.selectionMarker)this.selectionMarker=b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill|| -"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=o,this.selectionMarker.attr({width:M(d),x:(d>0?0:d)+o}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:M(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this.chart,c=this.hasPinched;if(this.selectionMarker){var d={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},a=this.selectionMarker,e=a.attr?a.attr("x"):a.x,f=a.attr?a.attr("y"):a.y,g=a.attr?a.attr("width"): -a.width,h=a.attr?a.attr("height"):a.height,i;if(this.hasDragged||c)p(b.axes,function(a){if(a.zoomEnabled){var b=a.horiz,c=a.toValue(b?e:f),b=a.toValue(b?e+g:f+h);!isNaN(c)&&!isNaN(b)&&(d[a.coll].push({axis:a,min:C(c,b),max:v(c,b)}),i=!0)}}),i&&D(b,"selection",d,function(a){b.zoom(q(a,c?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();c&&this.scaleGroups()}if(b)G(b.container,{cursor:b._cursor}),b.cancelClick=this.hasDragged>10,b.mouseIsDown=this.hasDragged=this.hasPinched= -!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){V[oa]&&V[oa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,d=b.hoverSeries,a=this.normalize(a,c);c&&d&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=V[oa];if(a)a.pointer.reset(),a.pointer.chartPosition= -null},onContainerMouseMove:function(a){var b=this.chart;oa=b.index;a=this.normalize(a);b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=H(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget|| -a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.cancelBubble=!0;b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(D(c.series,"click",q(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",a)):(q(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&D(b,"click",a)))},setDOMEvents:function(){var a= -this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};K(b,"mouseleave",a.onContainerMouseLeave);ab===1&&K(y,"mouseup",a.onDocumentMouseUp);if($a)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},ab===1&&K(y,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;W(this.chart.container,"mouseleave",this.onContainerMouseLeave); -ab||(W(y,"mouseup",this.onDocumentMouseUp),W(y,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};q(R.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,o=a?"width":"height",n=i["plot"+(a? -"Left":"Top")],s,m,p=h||1,q=i.inverted,x=i.bounds[a?"h":"v"],r=b.length===1,v=b[0][l],u=c[0][l],t=!r&&b[1][l],w=!r&&c[1][l],y,c=function(){!r&&M(v-t)>20&&(p=h||M(u-w)/M(v-t));m=(n-u)/p+v;s=i["plot"+(a?"Width":"Height")]/p};c();b=m;bx.max&&(b=x.max-s,y=!0);y?(u-=0.8*(u-g[j][0]),r||(w-=0.8*(w-g[j][1])),c()):g[j]=[u,w];q||(f[j]=m-n,f[o]=s);f=q?1/p:p;e[o]=s;e[j]=b;d[q?a?"scaleY":"scaleX":"scale"+k]=p;d["translate"+k]=f*n+(u-f*v)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown, -e=b.followTouchMove,f=a.touches,g=f.length,h=b.lastValidTouch,i=b.hasZoom,j=b.selectionMarker,k={},l=g===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||c.runChartClick),o={};(i||e)&&!l&&a.preventDefault();Ua(f,function(a){return b.normalize(a)});if(a.type==="touchstart")p(f,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),h.x=[d[0].chartX,d[1]&&d[1].chartX],h.y=[d[0].chartY,d[1]&&d[1].chartY],p(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding, -e=a.toPixels(a.dataMin),f=a.toPixels(a.dataMax),g=C(e,f),e=v(e,f);b.min=C(a.pos,g-d);b.max=v(a.pos+a.len,e+d)}});else if(d.length){if(!j)b.selectionMarker=j=q({destroy:sa},c.plotBox);b.pinchTranslate(d,f,k,j,o,h);b.hasPinched=i;b.scaleGroups(k,o);!i&&e&&g===1&&this.runPointActions(b.normalize(a))}},onContainerTouchStart:function(a){var b=this.chart;oa=b.index;a.touches.length===1?(a=this.normalize(a),b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)?(this.runPointActions(a),this.pinch(a)):this.reset()): -a.touches.length===2&&this.pinch(a)},onContainerTouchMove:function(a){(a.touches.length===1||a.touches.length===2)&&this.pinch(a)},onDocumentTouchEnd:function(a){V[oa]&&V[oa].pointer.drop(a)}});if(I.PointerEvent||I.MSPointerEvent){var ua={},zb=!!I.PointerEvent,Wb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in ua)ua.hasOwnProperty(a)&&b.push({pageX:ua[a].pageX,pageY:ua[a].pageY,target:ua[a].target});return b},Ab=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType==="touch"|| -a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&V[oa])d(a),d=V[oa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:sa,touches:Wb()})};q(Wa.prototype,{onContainerPointerDown:function(a){Ab(a,"onContainerTouchStart","touchstart",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Ab(a,"onContainerTouchMove","touchmove",function(a){ua[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!ua[a.pointerId].target)ua[a.pointerId].target=a.currentTarget})}, -onDocumentPointerUp:function(a){Ab(a,"onContainerTouchEnd","touchend",function(a){delete ua[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,zb?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,zb?"pointermove":"MSPointerMove",this.onContainerPointerMove);a(y,zb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});Ma(Wa.prototype,"init",function(a,b,c){a.call(this,b,c);(this.hasZoom||this.followTouchMove)&&G(b.container,{"-ms-touch-action":Q,"touch-action":Q})}); -Ma(Wa.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(K)});Ma(Wa.prototype,"destroy",function(a){this.batchMSEvents(W);a.call(this)})}var lb=R.Legend=function(a,b){this.init(a,b)};lb.prototype={init:function(a,b){var c=this,d=b.itemStyle,e=m(b.padding,8),f=b.itemMarginTop||0;this.options=b;if(b.enabled)c.baseline=z(d.fontSize)+3+f,c.itemStyle=d,c.itemHiddenStyle=w(d,b.itemHiddenStyle),c.itemMarginTop=f,c.padding=e,c.initialItemX=e,c.initialItemY= -e-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.lastLineHeight=0,c.symbolWidth=m(b.symbolWidth,16),c.pages=[],c.render(),K(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g), -g)d=g[j],d!==t&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;a.legendGroup&&a.legendGroup.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;p(["legendItem","legendLine","legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Pa(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()}, -positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,p(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+"px",top:g+"px",display:g>c-6&&g(o||b.chartWidth-2*j-p-d.x))this.itemX=p,this.itemY+=s+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=v(this.maxItemWidth,f);this.lastItemY=s+this.itemY+n;this.lastLineHeight=v(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=s+g+n,this.lastLineHeight=g);this.offsetWidth=o||v((e?this.itemX-p-k:f)+j,this.offsetWidth)},getAllItems:function(){var a= -[];p(this.chart.series,function(b){var c=b.options;if(m(c.showInLegend,!r(c.linkedTo)?t:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,o=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup); -a.renderTitle();e=a.getAllItems();ob(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;p(e,function(b){a.renderItem(b)});g=j.width||a.offsetWidth;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);if(l||o){g+=k;h+=k;if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor, -"stroke-width":l||0,fill:o||Q}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;p(e,function(b){a.positionItem(b)});f&&d.align(q({width:g,height:h},j),!0,"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=m(j.animation,!0),l=j.arrowSize||12,o=this.nav,n=this.pages, -s,q=this.allItems;e.layout==="horizontal"&&(f/=2);g&&(f=C(f,g));n.length=0;if(a>f&&!e.useHTML){this.clipHeight=h=f-20-this.titleHeight-this.padding;this.currentPage=m(this.currentPage,1);this.fullHeight=a;p(q,function(a,b){var c=a._legendItemPos[1],d=u(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,this.padding,9999,0),b.contentGroup.clip(i);i.attr({height:h});if(!o)this.nav= -o=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",function(){b.scroll(-1,k)}).add(o),this.pager=d.text("",15,10).css(j.style).add(o),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(o);b.scroll(0);a=f}else if(o)i.attr({height:c.chartHeight}),o.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation, -h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==t&&Qa(b,this.chart),this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}}; -N=R.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||12;b.legendSymbol=this.chart.renderer.rect(0,a.baseline-5-c/2,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-u(e.fontMetrics(a.options.itemStyle.fontSize).b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine= -e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\/7\.0/.test(wa)||Ta)&&Ma(lb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});Ya.prototype={init:function(a,b){var c,d=a.series;a.series=null;c=w(E,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing", -d);var e=d.events;this.bounds={h:{},v:{}};this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=V.length;V.push(f);ab++;d.reflow!==!1&&K(f,"load",function(){f.initReflow()});if(e)for(g in e)K(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:m(d.animation,!0);f.pointCount=0;f.counters=new Bb;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=F[a.type||b.type||b.defaultSeriesType])||ra(17,!0);b=new b;b.init(this, -a);return b},isInsidePlot:function(a,b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},adjustTickAmounts:function(){this.options.chart.alignTicks!==!1&&p(this.axes,function(a){a.adjustTickAmount()});this.maxTicks=null},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.isDirtyBox,j=c.length,k=j,l=this.renderer,o=l.isHidden(),n=[];Qa(a,this);o&&this.cloneRenderTo();for(this.layOutTitles();k--;)if(a=c[k],a.options.stacking&& -(g=!0,a.isDirty)){h=!0;break}if(h)for(k=j;k--;)if(a=c[k],a.options.stacking)a.isDirty=!0;p(c,function(a){a.isDirty&&a.options.legendType==="point"&&(f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(this.hasCartesianSeries){if(!this.isResizing)this.maxTicks=null,p(b,function(a){a.setScale()});this.adjustTickAmounts();this.getMargins();p(b,function(a){a.isDirty&&(i=!0)});p(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,n.push(function(){D(a,"afterSetExtremes", -q(a.eventArgs,a.getExtremes()));delete a.eventArgs});(i||g)&&a.redraw()})}i&&this.drawChartBox();p(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||a.xAxis)&&a.redraw()});d&&d.reset(!0);l.draw();D(this,"redraw");o&&this.cloneRenderTo(!0);p(n,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container; -a?b&&(this.renderTo.appendChild(c),Pa(b),delete this.renderToClone):(c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),G(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),y.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+tb++;if(Fa(a))this.renderTo=a=y.getElementById(a); -a||ra(13,!0);c=z(H(a,"data-highcharts-chart"));!isNaN(c)&&V[c]&&V[c].hasRendered&&V[c].destroy();H(a,"data-highcharts-chart",this.index);a.innerHTML="";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=Y(Ja,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},q({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"}, -b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=b.forExport?new ta(a,c,d,b.style,!0):new Za(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d)},getMargins:function(){var a=this.spacing,b,c=this.legend,d=this.margin,e=this.options.legend,f=m(e.margin,20),g=e.x,h=e.y,i=e.align,j=e.verticalAlign,k=this.titleOffset;this.resetMargins();b=this.axisOffset;if(k&&!r(d[0]))this.plotTop=v(this.plotTop,k+this.options.title.margin+a[0]);if(c.display&&!e.floating)if(i==="right"){if(!r(d[1]))this.marginRight= -v(this.marginRight,c.legendWidth-g+f+a[1])}else if(i==="left"){if(!r(d[3]))this.plotLeft=v(this.plotLeft,c.legendWidth+g+f+a[3])}else if(j==="top"){if(!r(d[0]))this.plotTop=v(this.plotTop,c.legendHeight+h+f+a[0])}else if(j==="bottom"&&!r(d[2]))this.marginBottom=v(this.marginBottom,c.legendHeight-h+f+a[2]);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);this.hasCartesianSeries&&p(this.axes,function(a){a.getOffset()});r(d[3])|| -(this.plotLeft+=b[3]);r(d[0])||(this.plotTop+=b[0]);r(d[2])||(this.marginBottom+=b[2]);r(d[1])||(this.marginRight+=b[1]);this.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||jb(d,"width"),f=c.height||jb(d,"height"),c=a?a.target:I,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&e&&f&&(c===I||c===y)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=setTimeout(d,100):d();b.containerWidth= -e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};K(I,"resize",b);K(a,"destroy",function(){W(I,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&D(d,"endResize",null,function(){d.isResizing-=1})};Qa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(r(a))d.chartWidth=e=v(0,u(a)),d.hasUserSize=!!e;if(r(b))d.chartHeight=f=v(0,u(b));(va?kb:G)(d.container,{width:e+"px",height:f+"px"},va);d.setChartSize(!0);d.renderer.setSize(e, -f,c);d.maxTicks=null;p(d.axes,function(a){a.isDirty=!0;a.setScale()});p(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;D(d,"resize");va===!1?g():setTimeout(g,va&&va.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=u(this.plotLeft);this.plotTop=j=u(this.plotTop);this.plotWidth= -k=v(0,u(d-i-this.marginRight));this.plotHeight=l=v(0,u(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*T(this.plotBorderWidth/2);b=Ka(v(d,h[3])/2);c=Ka(v(d,h[0])/2);this.clipBox={x:b,y:c,width:T(this.plotSizeX-v(d,h[1])/2-b),height:T(this.plotSizeY-v(d,h[2])/2-c)};a||p(this.axes,function(a){a.setAxisSize(); -a.setAxisTranslation()})},resetMargins:function(){var a=this.spacing,b=this.margin;this.plotTop=m(b[0],a[0]);this.marginRight=m(b[1],a[1]);this.marginBottom=m(b[2],a[2]);this.plotLeft=m(b[3],a[3]);this.axisOffset=[0,0,0,0];this.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage, -o=a.plotBorderWidth||0,n,s=this.plotLeft,m=this.plotTop,p=this.plotWidth,q=this.plotHeight,r=this.plotBox,v=this.clipRect,u=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||Q};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(k)f?f.animate(r):this.plotBackground=b.rect(s,m,p,q,0).attr({fill:k}).add().shadow(a.plotShadow); -if(l)h?h.animate(r):this.plotBGImage=b.image(l,s,m,p,q).add();v?v.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);if(o)g?g.animate(g.crisp({x:s,y:m,width:p,height:q})):this.plotBorder=b.rect(s,m,p,q,0,-o).attr({stroke:a.plotBorderColor,"stroke-width":o,fill:Q,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;p(["inverted","angular","polar"],function(g){c=F[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g]; -for(e=d&&d.length;!f&&e--;)(c=F[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;p(b,function(a){a.linkedSeries.length=0});p(b,function(b){var d=b.options.linkedTo;if(Fa(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){p(this.series,function(a){a.translate();a.setTooltipPoints&&a.setTooltipPoints();a.render()})},render:function(){var a=this,b=a.axes,c=a.renderer,d=a.options,e=d.labels,f= -d.credits,g;a.setTitle();a.legend=new lb(a,d.legend);a.getStacks();p(b,function(a){a.setScale()});a.getMargins();a.maxTicks=null;p(b,function(a){a.setTickPositions(!0);a.setMaxTicks()});a.adjustTickAmounts();a.getMargins();a.drawChartBox();a.hasCartesianSeries&&p(b,function(a){a.render()});if(!a.seriesGroup)a.seriesGroup=c.g("series-group").attr({zIndex:3}).add();a.renderSeries();e.items&&p(e.items,function(b){var d=q(e.style,b.style),f=z(d.left)+a.plotLeft,g=z(d.top)+a.plotTop+12;delete d.left;delete d.top; -c.text(b.html,f,g).attr({zIndex:2}).css(d).add()});if(f.enabled&&!a.credits)g=f.href,a.credits=c.text(f.text,0,0).on("click",function(){if(g)location.href=g}).attr({align:f.position.align,zIndex:8}).css(f.style).add().align(f.position);a.hasRendered=!0},destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;D(a,"destroy");V[a.index]=t;ab--;a.renderTo.removeAttribute("data-highcharts-chart");W(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy(); -p("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML="",W(d),f&&Pa(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!aa&&I==I.top&&y.readyState!=="complete"||fa&&!I.canvg?(fa?Lb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):y.attachEvent("onreadystatechange", -function(){y.detachEvent("onreadystatechange",a.firstRender);y.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();D(a,"init");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();p(b.series||[],function(b){a.initSeries(b)});a.linkSeries();D(a,"beforeRender");if(R.Pointer)a.pointer=new Wa(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);p(a.callbacks,function(b){b.apply(a,[a])});a.cloneRenderTo(!0); -D(a,"load")}},splashArray:function(a,b){var c=b[a],c=ca(c)?c:[c,c,c,c];return[m(b[a+"Top"],c[0]),m(b[a+"Right"],c[1]),m(b[a+"Bottom"],c[2]),m(b[a+"Left"],c[3])]}};Ya.prototype.callbacks=[];X=R.CenteredSeriesMixin={getCenter:function(){var a=this.options,b=this.chart,c=2*(a.slicedOffset||0),d,e=b.plotWidth-2*c,f=b.plotHeight-2*c,b=a.center,a=[m(b[0],"50%"),m(b[1],"50%"),a.size||"100%",a.innerSize||0],g=C(e,f),h;return Ua(a,function(a,b){h=/%$/.test(a);d=b<2||b===2&&h;return(h?[e,f,g,g][b]*z(a)/100: -a)+(d?c:0)})}};var Ea=function(){};Ea.prototype={init:function(a,b,c){this.series=a;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.pointValKey,a=Ea.prototype.optionsToObject.call(this,a);q(this,a);this.options=this.options?q(this.options,a):a;if(d)this.y=this[d];if(this.x=== -t&&c)this.x=b===t?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.pointArrayMap||["y"],e=d.length,f=0,g=0;if(typeof a==="number"||a===null)b[d[0]]=a;else if(La(a)){if(a.length>e){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];f++}for(;ga+1&&b.push(d.slice(a+ -1,g)),a=g):g===e-1&&b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=w(e,c.series,a);this.tooltipOptions=w(E.tooltip,E.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;return c},getColor:function(){var a=this.options,b=this.userOptions,c=this.chart.options.colors,d=this.chart.counters, -e;e=a.color||ba[this.type].color;if(!e&&!a.colorByPoint)r(b._colorIndex)?a=b._colorIndex:(b._colorIndex=d.color,a=d.color++),e=c[a];this.color=e;d.wrapColor(c.length)},getSymbol:function(){var a=this.userOptions,b=this.options.marker,c=this.chart,d=c.options.symbols,c=c.counters;this.symbol=b.symbol;if(!this.symbol)r(a._symbolIndex)?a=a._symbolIndex:(a._symbolIndex=c.symbol,a=c.symbol++),this.symbol=d[a];if(/^url/.test(this.symbol))b.radius=0;c.wrapSymbol(d.length)},drawLegendSymbol:N.drawLineMarker, -setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,o=l&&!!l.categories,n=e.tooltipPoints,s=i.turboThreshold,q=this.xData,r=this.yData,v=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=m(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData)p(a,function(a,b){f[b].update(a,!1)});else{e.xIncrement=null;e.pointRange=o?1:i.pointRange;e.colorCounter=0;p(this.parallelArrays,function(a){e[a+"Data"].length=0});if(s&&h>s){for(c=0;k===null&&cj||this.forceCrop))if(o=h.min,n=h.max,b[d-1]n)b=[],c=[];else if(b[0]n)e=this.cropData(this.xData,this.yData,o,n),b=e.xData,c=e.yData, -e=e.start,f=!0,k=b.length;for(d=b.length-1;d>=0;d--)a=b[d]-b[d-1],!f&&b[d]>o&&b[d]0&&(g===t||a=c){f=v(0,i-h);break}for(;id){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f, -g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],o;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(o=0;o0),j=this.getExtremesFromAll||this.cropped||(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=m(void 0,Na(e));this.dataMax=m(void 0,Ba(e))},translate:function(){this.processedXData|| -this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||ha(i),k=a.threshold,a=0;a0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h).attr(a).add(n)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a, -b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=m(a[g],b[f],c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color;f={stroke:g,fill:g};var h=a.points||[],i,j=[],k,l=a.pointAttrToOptions;k=a.hasPointSpecificOptions;var o=b.negativeColor,n=c.lineColor,s=c.fillColor;i=b.turboThreshold;var m;b.marker?(e.radius=e.radius||c.radius+2,e.lineWidth=e.lineWidth||c.lineWidth+1):e.color= -e.color||ya(e.color||g).brighten(e.brightness).get();j[""]=a.convertAttribs(c,f);p(["hover","select"],function(b){j[b]=a.convertAttribs(d[b],j[""])});a.pointAttr=j;g=h.length;if(!i||g1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",b.lineColor||this.color]],d=b.lineWidth,e=b.dashStyle,f=b.linecap!=="square",g=this.getGraphPath(), -h=b.negativeColor;h&&c.push(["graphNeg",h]);p(c,function(c,h){var k=c[0],l=a[k];if(l)bb(l),l.animate({d:g});else if(d&&g.length)l={stroke:c[1],"stroke-width":d,fill:Q,zIndex:1},e?l.dashstyle=e:f&&(l["stroke-linecap"]=l["stroke-linejoin"]="round"),a[k]=a.chart.renderer.path(g).attr(l).add(a.group).shadow(!h&&b.shadow)})},clipNeg:function(){var a=this.options,b=this.chart,c=b.renderer,d=a.negativeColor||a.negativeFillColor,e,f=this.graph,g=this.area,h=this.posClip,i=this.negClip;e=b.chartWidth;var j= -b.chartHeight,k=v(e,j),l=this.yAxis;if(d&&(f||g)){d=u(l.toPixels(a.threshold||0,!0));d<0&&(k-=d);a={x:0,y:0,width:k,height:d};k={x:0,y:d,width:k,height:k};if(b.inverted)a.height=k.y=b.plotWidth-d,c.isVML&&(a={x:b.plotWidth-d-b.plotLeft,y:0,width:e,height:j},k={x:d+b.plotLeft-e,y:0,width:b.plotLeft+d,height:e});l.reversed?(b=k,e=a):(b=a,e=k);h?(h.animate(b),i.animate(e)):(this.posClip=h=c.clipRect(b),this.negClip=i=c.clipRect(e),f&&this.graphNeg&&(f.clip(h),this.graphNeg.clip(i)),g&&(g.clip(h),this.areaNeg.clip(i)))}}, -invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};p(["group","markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)K(c,"resize",a),K(b,"destroy",function(){W(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis; -if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&m(c.duration,500)||0,f=a.visible?"visible":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group","series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(), -a.clipNeg());a.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.group,d=this.xAxis,e=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth, -height:a.plotHeight}),c.animate({translateX:m(d&&d.left,a.plotLeft),translateY:m(e&&e.top,a.plotTop)}));this.translate();this.setTooltipPoints&&this.setTooltipPoints(!0);this.render();b&&D(this,"updatedData")}};Hb.prototype={destroy:function(){Oa(this,this.axis)},render:function(a){var b=this.options,c=b.format,c=c?Ia(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign, -rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=this.isNegative,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=M(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};la.prototype.buildStacks=function(){var a= -this.series,b=m(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;cg;)h--;this.updateParallelArrays(d,"splice",h,0,0);this.updateParallelArrays(d, -h);if(j)j[g]=d.name;l.splice(h,0,a);o&&(this.data.splice(h,0,null),this.processData());e.legendType==="point"&&this.generatePoints();c&&(f[0]&&f[0].remove?f[0].remove(!1):(f.shift(),this.updateParallelArrays(d,"shift"),l.shift()));this.isDirtyData=this.isDirty=!0;b&&(this.getAttribs(),i.redraw())},remove:function(a,b){var c=this,d=c.chart,a=m(a,!0);if(!c.isRemoving)c.isRemoving=!0,D(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving= -!1},update:function(a,b){var c=this.chart,d=this.type,e=F[d].prototype,f,a=w(this.userOptions,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(f in e)e.hasOwnProperty(f)&&(this[f]=t);q(this,F[a.type||d].prototype);this.init(c,a);m(b,!0)&&c.redraw(!1)}});q(la.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=w(this.userOptions,a);this.destroy(!0);this._addedPlotLB=t;this.init(c,q(a,{events:t}));c.isDirtyBox= -!0;m(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;m(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});ga=ka(O);F.line=ga;ba.area=w(S,{threshold:0});var pa=ka(O,{type:"area",getSegments:function(){var a= -[],b=[],c=[],d=this.xAxis,e=this.yAxis,f=e.stacks[this.stackKey],g={},h,i,j=this.points,k=this.options.connectNulls,l,o,n;if(this.options.stacking&&!this.cropped){for(o=0;o=0;d--)g=m(a[d].yBottom,f),da&&i>e?(i=v(a,e),k=2*e-i):ig&&k>e?(k=v(g,e),i=2*e-k):k0.5*a.xAxis.len?0:1),e=a.yAxis,f=a.translatedThreshold=e.getThreshold(c.threshold),g=m(c.minPointLength,5),c=a.getColumnMetrics(),h=c.width,i=a.barW=Ka(v(h,1+2*d)),j=a.pointXOffset=c.offset,k=-(d%2?0.5:0),l=d%2?0.5:1;b.renderer.isVML&&b.inverted&&(l+=1);O.prototype.translate.apply(a);p(a.points,function(c){var d=m(c.yBottom,f),p=C(v(-999-d,c.plotY),e.len+ -999+d),q=c.plotX+j,r=i,t=C(p,d),x;x=v(p,d)-t;M(x)g?d-g:f-(e.translate(c.y,0,1,0,1)<=f?g:0)));c.barX=q;c.pointWidth=h;c.tooltipPos=b.inverted?[e.len-p,a.xAxis.len-q-r/2]:[q+r/2,p];d=M(q)<0.5;r=u(q+r)+k;q=u(q)+k;r-=q;p=M(t)<0.5;x=u(t+x)+l;t=u(t)+l;x-=t;d&&(q+=1,r-=1);p&&(t-=1,x+=1);c.shapeType="rect";c.shapeArgs={x:q,y:t,width:r,height:x}})},getSymbol:sa,drawLegendSymbol:N.drawRectangle,drawGraph:sa,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit|| -250,f,g,h;p(a.points,function(i){var j=i.plotY,k=i.graphic;if(j!==t&&!isNaN(j)&&i.y!==null)f=i.shapeArgs,h=r(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=i.pointAttr[i.selected?"select":""]||a.pointAttr[""],k?(bb(k),k.attr(h)[b.pointCount {series.name}
', -pointFormat:"x: {point.x}
y: {point.y}
"},stickyTracking:!1});pa=ka(O,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["markerGroup"],takeOrdinalPosition:!1,singularTooltips:!0,drawGraph:function(){this.options.lineWidth&&O.prototype.drawGraph.call(this)}});F.scatter=pa;ba.pie=w(S,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name}},ignoreHiddenPoint:!0, -legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});S={type:"pie",isCartesian:!1,pointClass:ka(Ea,{init:function(){Ea.prototype.init.apply(this,arguments);var a=this,b;if(a.y<0)a.y=null;q(a,{visible:a.visible!==!1,name:m(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};K(a,"select",b);K(a,"unselect",b);return a},setVisible:function(a){var b=this,c=b.series,d=c.chart;b.visible=b.options.visible= -a=a===t?!b.visible:a;c.options.data[Da(b,c.data)]=b.options;p(["graphic","dataLabel","connector","shadowGroup"],function(c){if(b[c])b[c][a?"show":"hide"](!0)});b.legendItem&&d.legend.colorizeItem(b,a);if(!c.isDirty&&c.options.ignoreHiddenPoint)c.isDirty=!0,d.redraw()},slice:function(a,b,c){var d=this.series;Qa(c,d.chart);m(b,!0);this.sliced=this.options.sliced=a=r(a)?a:!this.sliced;d.options.data[Da(this,d.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a); -this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},singularTooltips:!0,getColor:sa,animate:function(a){var b=this,c=b.points,d= -b.startAngleRad;if(!a)p(c,function(a){var c=a.graphic,a=a.shapeArgs;c&&(c.attr({r:b.center[3]/2,start:d,end:d}),c.animate({r:a.r,start:a.start,end:a.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){O.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();m(b,!0)&&this.chart.redraw(c)},generatePoints:function(){var a,b=0,c,d,e,f=this.options.ignoreHiddenPoint;O.prototype.generatePoints.call(this);c=this.points;d=c.length;for(a=0;a0?e.y/b*100:0,e.total=b},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(m(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,o,n=k.length,p;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=U.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*Z(h)*(a[2]/ -2+l)};for(o=0;o1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);p.slicedTranslation={translateX:u(Z(h)*d),translateY:u(ea(h)*d)};f=Z(h)*a[2]/2;g=ea(h)*a[2]/2;p.tooltipPos=[a[0]+f*0.7,a[1]+g*0.7];p.half=h<-ma/2||h>ma/2?1:0;p.angle=h;e=C(e,l/2);p.labelPos=[a[0]+f+Z(h)*l,a[1]+g+ea(h)*l,a[0]+f+Z(h)*e,a[1]+g+ea(h)*e,a[0]+f,a[1]+g,l<0? -"center":p.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);p(a.points,function(h){d=h.graphic;g=h.shapeArgs;f=h.shadowGroup;if(e&&!f)f=h.shadowGroup=b.g("shadow").add(a.shadowGroup);c=h.sliced?h.slicedTranslation:{translateX:0,translateY:0};f&&f.attr(c);d?d.animate(q(g,c)):h.graphic=d=b[h.shapeType](g).setRadialReference(a.center).attr(h.pointAttr[h.selected?"select": -""]).attr({"stroke-linejoin":"round"}).attr(c).add(a.group).shadow(e,f);h.visible!==void 0&&h.setVisible(h.visible)})},sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:N.drawRectangle,getCenter:X.getCenter,getSymbol:sa};S=ka(O,S);F.pie=S;O.prototype.drawDataLabels=function(){var a=this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h,i;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),i=a.plotGroup("dataLabelsGroup", -"data-labels","hidden",d.zIndex||6),!a.hasRendered&&m(d.defer,!0)&&(i.attr({opacity:0}),K(a,"afterAnimate",function(){a.dataLabelsGroup.show()[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,p(e,function(b){var e,l=b.dataLabel,o,n,p=b.connector,u=!0;f=b.options&&b.options.dataLabels;e=m(f&&f.enabled,g.enabled);if(l&&!e)b.dataLabel=l.destroy();else if(e){d=w(g,f);e=d.rotation;o=b.getLabelConfig();h=d.format?Ia(d.format,o):d.formatter.call(o,d);d.style.color=m(d.color,d.style.color, -a.color,"black");if(l)if(r(h))l.attr({text:h}),u=!1;else{if(b.dataLabel=l=l.destroy(),p)b.connector=p.destroy()}else if(r(h)){l={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:e,padding:d.padding,zIndex:1};for(n in l)l[n]===t&&delete l[n];l=b.dataLabel=a.chart.renderer[e?"text":"label"](h,0,-999,null,null,null,d.useHTML).attr(l).css(q(d.style,c&&{cursor:c})).add(i).shadow(d.shadow)}l&&a.alignDataLabel(b,l,d,null,u)}})};O.prototype.alignDataLabel= -function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=m(a.plotX,-999),i=m(a.plotY,-999),j=b.getBBox();if(a=this.visible&&(a.series.forceDL||f.isInsidePlot(h,u(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g)))d=q({x:g?f.plotWidth-i:h,y:u(g?f.plotHeight-h:i),width:0,height:0},d),q(c,{width:j.width,height:j.height}),c.rotation?(g={align:c.align,x:d.x+c.x+d.width/2,y:d.y+c.y+d.height/2},b[e?"attr":"animate"](g)):(b.align(c,null,d),g=b.alignAttr,m(c.overflow,"justify")==="justify"?this.justifyDataLabel(b, -c,g,j,d,e):m(c.crop,!0)&&(a=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)));if(!a)b.attr({y:-999}),b.placed=!1};O.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k;j=c.x;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight- -j,k=!0;if(k)a.placed=!f,a.align(b,null,e)};if(F.pie)F.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=m(e.connectorPadding,10),g=m(e.connectorWidth,1),h=d.plotWidth,d=d.plotHeight,i,j,k=m(e.softConnector,!0),l=e.distance,o=a.center,n=o[2]/2,q=o[1],r=l>0,t,w,x,y,z=[[],[]],A,C,G,D,B,F=[0,0,0,0],N=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){O.prototype.drawDataLabels.apply(a);p(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)}); -for(D=0;!y&&b[D];)y=b[D]&&b[D].dataLabel&&(b[D].dataLabel.getBBox().height||21),D++;for(D=2;D--;){var b=[],K=[],H=z[D],I=H.length,E;a.sortByAngle(H,D-0.5);if(l>0){for(B=q-n-l;B<=q+n+l;B+=y)b.push(B);w=b.length;if(I>w){c=[].concat(H);c.sort(N);for(B=I;B--;)c[B].rank=B;for(B=I;B--;)H[B].rank>=w&&H.splice(B,1);I=H.length}for(B=0;B0){if(w=K.pop(),E=w.i,C=w.y,c>C&&b[E+1]!==null||ch-f&&(F[1]=v(u(A+w-h+f),F[1])),C-y/2<0?F[0]= -v(u(-C+y/2),F[0]):C+y/2>d&&(F[2]=v(u(C+y/2-d),F[2]))}}if(Ba(F)===0||this.verifyDataLabelOverflow(F))this.placeDataLabels(),r&&g&&p(this.points,function(b){i=b.connector;x=b.labelPos;if((t=b.dataLabel)&&t._pos)G=t._attr.visibility,A=t.connX,C=t.connY,j=k?["M",A+(x[6]==="left"?5:-5),C,"C",A,C,2*x[2]-x[4],2*x[3]-x[5],x[2],x[3],"L",x[4],x[5]]:["M",A+(x[6]==="left"?5:-5),C,"L",x[2],x[3],"L",x[4],x[5]],i?(i.animate({d:j}),i.attr("visibility",G)):b.connector=i=a.chart.renderer.path(j).attr({"stroke-width":g, -stroke:e.connectorColor||b.color||"#606060",visibility:G}).add(a.dataLabelsGroup);else if(i)b.connector=i.destroy()})}},F.pie.prototype.placeDataLabels=function(){p(this.points,function(a){var a=a.dataLabel,b;if(a)(b=a._pos)?(a.attr(a._attr),a[a.moved?"animate":"attr"](b),a.moved=!0):a&&a.attr({y:-999})})},F.pie.prototype.alignDataLabel=sa,F.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c=c.minSize||80,f;d[0]!==null?e=v(b[2]-v(a[1],a[3]),c):(e=v(b[2]- -a[1]-a[3],c),b[0]+=(a[3]-a[1])/2);d[1]!==null?e=v(C(e,b[2]-v(a[0],a[2])),c):(e=v(C(e,b[2]-a[0]-a[2]),c),b[1]+=(a[0]-a[2])/2);em(this.translatedThreshold,f.plotSizeY),j=m(c.inside,!!this.options.stacking);if(h&& -(d=w(h),g&&(d={x:f.plotWidth-d.y-d.height,y:f.plotHeight-d.x-d.width,width:d.height,height:d.width}),!j))g?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=m(c.align,!g||j?"center":i?"right":"left");c.verticalAlign=m(c.verticalAlign,g||j?"middle":i?"top":"bottom");O.prototype.alignDataLabel.call(this,a,b,c,d,e)};S=R.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(c){var d=c.target,e;if(b.hoverSeries!==a)a.onMouseOver(); -for(;d&&!e;)e=d.point,d=d.parentNode;if(e!==t&&e!==b.hoverPoint)e.onMouseOver(c)};p(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)p(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",function(a){c.onTrackerMouseOut(a)}).css(e),$a))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath: -a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},q="rgba(192,192,192,"+(aa?1.0E-4:0.002)+")";if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]==="M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;mC(k.dataMin,k.min)&&i=f.min&&c<=f.max){h=b[i+1];c=d===t?0:d+1;for(d=b[i+1]?C(v(0,T((e.clientX+ -(h?h.wrappedClientX||h.clientX:g))/2)),g):g;c>=0&&c<=d;)j[c++]=e}this.tooltipPoints=j}},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===t?!this.selected:a;if(this.checkbox)this.checkbox.checked=a;D(this,a?"select":"unselect")},drawTracker:S.drawTrackerGraph});q(R,{Axis:la,Chart:Ya,Color:ya,Point:Ea,Tick:Sa,Renderer:Za,Series:O,SVGElement:P,SVGRenderer:ta,arrayMin:Na,arrayMax:Ba,charts:V,dateFormat:cb,format:Ia,pathAnim:ub,getOptions:function(){return E}, -hasBidiBug:Nb,isTouchDevice:Jb,numberFormat:Ga,seriesTypes:F,setOptions:function(a){E=w(!0,E,a);Cb();return E},addEvent:K,removeEvent:W,createElement:Y,discardElement:Pa,css:G,each:p,extend:q,map:Ua,merge:w,pick:m,splat:qa,extendClass:ka,pInt:z,wrap:Ma,svg:aa,canvas:fa,vml:!aa&&!fa,product:"Highcharts",version:"4.0.1"})})(); diff --git a/static/js/highcharts/highcharts.src.js b/static/js/highcharts/highcharts.src.js deleted file mode 100644 index 381650b0d..000000000 --- a/static/js/highcharts/highcharts.src.js +++ /dev/null @@ -1,17672 +0,0 @@ -// ==ClosureCompiler== -// @compilation_level SIMPLE_OPTIMIZATIONS - -/** - * @license Highcharts JS v4.0.1 (2014-04-24) - * - * (c) 2009-2014 Torstein Honsi - * - * License: www.highcharts.com/license - */ - -// JSLint options: -/*global Highcharts, document, window, navigator, setInterval, clearInterval, clearTimeout, setTimeout, location, jQuery, $, console, each, grep */ - -(function () { -// encapsulated variables -var UNDEFINED, - doc = document, - win = window, - math = Math, - mathRound = math.round, - mathFloor = math.floor, - mathCeil = math.ceil, - mathMax = math.max, - mathMin = math.min, - mathAbs = math.abs, - mathCos = math.cos, - mathSin = math.sin, - mathPI = math.PI, - deg2rad = mathPI * 2 / 360, - - - // some variables - userAgent = navigator.userAgent, - isOpera = win.opera, - isIE = /msie/i.test(userAgent) && !isOpera, - docMode8 = doc.documentMode === 8, - isWebKit = /AppleWebKit/.test(userAgent), - isFirefox = /Firefox/.test(userAgent), - isTouchDevice = /(Mobile|Android|Windows Phone)/.test(userAgent), - SVG_NS = 'http://www.w3.org/2000/svg', - hasSVG = !!doc.createElementNS && !!doc.createElementNS(SVG_NS, 'svg').createSVGRect, - hasBidiBug = isFirefox && parseInt(userAgent.split('Firefox/')[1], 10) < 4, // issue #38 - useCanVG = !hasSVG && !isIE && !!doc.createElement('canvas').getContext, - Renderer, - hasTouch, - symbolSizes = {}, - idCounter = 0, - garbageBin, - defaultOptions, - dateFormat, // function - globalAnimation, - pathAnim, - timeUnits, - noop = function () {}, - charts = [], - chartCount = 0, - PRODUCT = 'Highcharts', - VERSION = '4.0.1', - - // some constants for frequently used strings - DIV = 'div', - ABSOLUTE = 'absolute', - RELATIVE = 'relative', - HIDDEN = 'hidden', - PREFIX = 'highcharts-', - VISIBLE = 'visible', - PX = 'px', - NONE = 'none', - M = 'M', - L = 'L', - numRegex = /^[0-9]+$/, - NORMAL_STATE = '', - HOVER_STATE = 'hover', - SELECT_STATE = 'select', - MILLISECOND = 'millisecond', - SECOND = 'second', - MINUTE = 'minute', - HOUR = 'hour', - DAY = 'day', - WEEK = 'week', - MONTH = 'month', - YEAR = 'year', - - // Object for extending Axis - AxisPlotLineOrBandExtension, - - // constants for attributes - STROKE_WIDTH = 'stroke-width', - - // time methods, changed based on whether or not UTC is used - makeTime, - timezoneOffset, - getMinutes, - getHours, - getDay, - getDate, - getMonth, - getFullYear, - setMinutes, - setHours, - setDate, - setMonth, - setFullYear, - - - // lookup over the types and the associated classes - seriesTypes = {}; - -// The Highcharts namespace -var Highcharts = win.Highcharts = win.Highcharts ? error(16, true) : {}; - -/** - * Extend an object with the members of another - * @param {Object} a The object to be extended - * @param {Object} b The object to add to the first one - */ -function extend(a, b) { - var n; - if (!a) { - a = {}; - } - for (n in b) { - a[n] = b[n]; - } - return a; -} - -/** - * Deep merge two or more objects and return a third object. If the first argument is - * true, the contents of the second object is copied into the first object. - * Previously this function redirected to jQuery.extend(true), but this had two limitations. - * First, it deep merged arrays, which lead to workarounds in Highcharts. Second, - * it copied properties from extended prototypes. - */ -function merge() { - var i, - args = arguments, - len, - ret = {}, - doCopy = function (copy, original) { - var value, key; - - // An object is replacing a primitive - if (typeof copy !== 'object') { - copy = {}; - } - - for (key in original) { - if (original.hasOwnProperty(key)) { - value = original[key]; - - // Copy the contents of objects, but not arrays or DOM nodes - if (value && typeof value === 'object' && Object.prototype.toString.call(value) !== '[object Array]' - && key !== 'renderTo' && typeof value.nodeType !== 'number') { - copy[key] = doCopy(copy[key] || {}, value); - - // Primitives and arrays are copied over directly - } else { - copy[key] = original[key]; - } - } - } - return copy; - }; - - // If first argument is true, copy into the existing object. Used in setOptions. - if (args[0] === true) { - ret = args[1]; - args = Array.prototype.slice.call(args, 2); - } - - // For each argument, extend the return - len = args.length; - for (i = 0; i < len; i++) { - ret = doCopy(ret, args[i]); - } - - return ret; -} - -/** - * Take an array and turn into a hash with even number arguments as role_keys and odd numbers as - * values. Allows creating constants for commonly used style properties, attributes etc. - * Avoid it in performance critical situations like looping - */ -function hash() { - var i = 0, - args = arguments, - length = args.length, - obj = {}; - for (; i < length; i++) { - obj[args[i++]] = args[i]; - } - return obj; -} - -/** - * Shortcut for parseInt - * @param {Object} s - * @param {Number} mag Magnitude - */ -function pInt(s, mag) { - return parseInt(s, mag || 10); -} - -/** - * Check for string - * @param {Object} s - */ -function isString(s) { - return typeof s === 'string'; -} - -/** - * Check for object - * @param {Object} obj - */ -function isObject(obj) { - return typeof obj === 'object'; -} - -/** - * Check for array - * @param {Object} obj - */ -function isArray(obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; -} - -/** - * Check for number - * @param {Object} n - */ -function isNumber(n) { - return typeof n === 'number'; -} - -function log2lin(num) { - return math.log(num) / math.LN10; -} -function lin2log(num) { - return math.pow(10, num); -} - -/** - * Remove last occurence of an item from an array - * @param {Array} arr - * @param {Mixed} item - */ -function erase(arr, item) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - arr.splice(i, 1); - break; - } - } - //return arr; -} - -/** - * Returns true if the object is not null or undefined. Like MooTools' $.defined. - * @param {Object} obj - */ -function defined(obj) { - return obj !== UNDEFINED && obj !== null; -} - -/** - * Set or get an attribute or an object of attributes. Can't use jQuery attr because - * it attempts to set expando properties on the SVG element, which is not allowed. - * - * @param {Object} elem The DOM element to receive the attribute(s) - * @param {String|Object} prop The property or an abject of key-value pairs - * @param {String} value The value if a single property is set - */ -function attr(elem, prop, value) { - var key, - ret; - - // if the prop is a string - if (isString(prop)) { - // set the value - if (defined(value)) { - elem.setAttribute(prop, value); - - // get the value - } else if (elem && elem.getAttribute) { // elem not defined when printing pie demo... - ret = elem.getAttribute(prop); - } - - // else if prop is defined, it is a hash of key/value pairs - } else if (defined(prop) && isObject(prop)) { - for (key in prop) { - elem.setAttribute(key, prop[key]); - } - } - return ret; -} -/** - * Check if an element is an array, and if not, make it into an array. Like - * MooTools' $.splat. - */ -function splat(obj) { - return isArray(obj) ? obj : [obj]; -} - - -/** - * Return the first value that is defined. Like MooTools' $.pick. - */ -function pick() { - var args = arguments, - i, - arg, - length = args.length; - for (i = 0; i < length; i++) { - arg = args[i]; - if (typeof arg !== 'undefined' && arg !== null) { - return arg; - } - } -} - -/** - * Set CSS on a given element - * @param {Object} el - * @param {Object} styles Style object with camel case property names - */ -function css(el, styles) { - if (isIE && !hasSVG) { // #2686 - if (styles && styles.opacity !== UNDEFINED) { - styles.filter = 'alpha(opacity=' + (styles.opacity * 100) + ')'; - } - } - extend(el.style, styles); -} - -/** - * Utility function to create element with attributes and styles - * @param {Object} tag - * @param {Object} attribs - * @param {Object} styles - * @param {Object} parent - * @param {Object} nopad - */ -function createElement(tag, attribs, styles, parent, nopad) { - var el = doc.createElement(tag); - if (attribs) { - extend(el, attribs); - } - if (nopad) { - css(el, {padding: 0, border: NONE, margin: 0}); - } - if (styles) { - css(el, styles); - } - if (parent) { - parent.appendChild(el); - } - return el; -} - -/** - * Extend a prototyped class by new members - * @param {Object} parent - * @param {Object} members - */ -function extendClass(parent, members) { - var object = function () {}; - object.prototype = new parent(); - extend(object.prototype, members); - return object; -} - -/** - * Format a number and return a string based on input settings - * @param {Number} number The input number to format - * @param {Number} decimals The amount of decimals - * @param {String} decPoint The decimal point, defaults to the one given in the lang options - * @param {String} thousandsSep The thousands separator, defaults to the one given in the lang options - */ -function numberFormat(number, decimals, decPoint, thousandsSep) { - var lang = defaultOptions.lang, - // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/ - n = +number || 0, - c = decimals === -1 ? - (n.toString().split('.')[1] || '').length : // preserve decimals - (isNaN(decimals = mathAbs(decimals)) ? 2 : decimals), - d = decPoint === undefined ? lang.decimalPoint : decPoint, - t = thousandsSep === undefined ? lang.thousandsSep : thousandsSep, - s = n < 0 ? "-" : "", - i = String(pInt(n = mathAbs(n).toFixed(c))), - j = i.length > 3 ? i.length % 3 : 0; - - return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + - (c ? d + mathAbs(n - i).toFixed(c).slice(2) : ""); -} - -/** - * Pad a string to a given length by adding 0 to the beginning - * @param {Number} number - * @param {Number} length - */ -function pad(number, length) { - // Create an array of the remaining length +1 and join it with 0's - return new Array((length || 2) + 1 - String(number).length).join(0) + number; -} - -/** - * Wrap a method with extended functionality, preserving the original function - * @param {Object} obj The context object that the method belongs to - * @param {String} method The name of the method to extend - * @param {Function} func A wrapper function callback. This function is called with the same arguments - * as the original function, except that the original function is unshifted and passed as the first - * argument. - */ -function wrap(obj, method, func) { - var proceed = obj[method]; - obj[method] = function () { - var args = Array.prototype.slice.call(arguments); - args.unshift(proceed); - return func.apply(this, args); - }; -} - -/** - * Based on http://www.php.net/manual/en/function.strftime.php - * @param {String} format - * @param {Number} timestamp - * @param {Boolean} capitalize - */ -dateFormat = function (format, timestamp, capitalize) { - if (!defined(timestamp) || isNaN(timestamp)) { - return 'Invalid date'; - } - format = pick(format, '%Y-%m-%d %H:%M:%S'); - - var date = new Date(timestamp - timezoneOffset), - key, // used in for constuct below - // get the basic time values - hours = date[getHours](), - day = date[getDay](), - dayOfMonth = date[getDate](), - month = date[getMonth](), - fullYear = date[getFullYear](), - lang = defaultOptions.lang, - langWeekdays = lang.weekdays, - - // List all format role_keys. Custom formats can be added from the outside. - replacements = extend({ - - // Day - 'a': langWeekdays[day].substr(0, 3), // Short weekday, like 'Mon' - 'A': langWeekdays[day], // Long weekday, like 'Monday' - 'd': pad(dayOfMonth), // Two digit day of the month, 01 to 31 - 'e': dayOfMonth, // Day of the month, 1 through 31 - - // Week (none implemented) - //'W': weekNumber(), - - // Month - 'b': lang.shortMonths[month], // Short month, like 'Jan' - 'B': lang.months[month], // Long month, like 'January' - 'm': pad(month + 1), // Two digit month number, 01 through 12 - - // Year - 'y': fullYear.toString().substr(2, 2), // Two digits year, like 09 for 2009 - 'Y': fullYear, // Four digits year, like 2009 - - // Time - 'H': pad(hours), // Two digits hours in 24h format, 00 through 23 - 'I': pad((hours % 12) || 12), // Two digits hours in 12h format, 00 through 11 - 'l': (hours % 12) || 12, // Hours in 12h format, 1 through 12 - 'M': pad(date[getMinutes]()), // Two digits minutes, 00 through 59 - 'p': hours < 12 ? 'AM' : 'PM', // Upper case AM or PM - 'P': hours < 12 ? 'am' : 'pm', // Lower case AM or PM - 'S': pad(date.getSeconds()), // Two digits seconds, 00 through 59 - 'L': pad(mathRound(timestamp % 1000), 3) // Milliseconds (naming from Ruby) - }, Highcharts.dateFormats); - - - // do the replaces - for (key in replacements) { - while (format.indexOf('%' + key) !== -1) { // regex would do it in one line, but this is faster - format = format.replace('%' + key, typeof replacements[key] === 'function' ? replacements[key](timestamp) : replacements[key]); - } - } - - // Optionally capitalize the string and return - return capitalize ? format.substr(0, 1).toUpperCase() + format.substr(1) : format; -}; - -/** - * Format a single variable. Similar to sprintf, without the % prefix. - */ -function formatSingle(format, val) { - var floatRegex = /f$/, - decRegex = /\.([0-9])/, - lang = defaultOptions.lang, - decimals; - - if (floatRegex.test(format)) { // float - decimals = format.match(decRegex); - decimals = decimals ? decimals[1] : -1; - if (val !== null) { - val = numberFormat( - val, - decimals, - lang.decimalPoint, - format.indexOf(',') > -1 ? lang.thousandsSep : '' - ); - } - } else { - val = dateFormat(format, val); - } - return val; -} - -/** - * Format a string according to a subset of the rules of Python's String.format method. - */ -function format(str, ctx) { - var splitter = '{', - isInside = false, - segment, - valueAndFormat, - path, - i, - len, - ret = [], - val, - index; - - while ((index = str.indexOf(splitter)) !== -1) { - - segment = str.slice(0, index); - if (isInside) { // we're on the closing bracket looking back - - valueAndFormat = segment.split(':'); - path = valueAndFormat.shift().split('.'); // get first and leave format - len = path.length; - val = ctx; - - // Assign deeper paths - for (i = 0; i < len; i++) { - val = val[path[i]]; - } - - // Format the replacement - if (valueAndFormat.length) { - val = formatSingle(valueAndFormat.join(':'), val); - } - - // Push the result and advance the cursor - ret.push(val); - - } else { - ret.push(segment); - - } - str = str.slice(index + 1); // the rest - isInside = !isInside; // toggle - splitter = isInside ? '}' : '{'; // now look for next matching bracket - } - ret.push(str); - return ret.join(''); -} - -/** - * Get the magnitude of a number - */ -function getMagnitude(num) { - return math.pow(10, mathFloor(math.log(num) / math.LN10)); -} - -/** - * Take an interval and normalize it to multiples of 1, 2, 2.5 and 5 - * @param {Number} interval - * @param {Array} multiples - * @param {Number} magnitude - * @param {Object} options - */ -function normalizeTickInterval(interval, multiples, magnitude, options) { - var normalized, i; - - // round to a tenfold of 1, 2, 2.5 or 5 - magnitude = pick(magnitude, 1); - normalized = interval / magnitude; - - // multiples for a linear scale - if (!multiples) { - multiples = [1, 2, 2.5, 5, 10]; - - // the allowDecimals option - if (options && options.allowDecimals === false) { - if (magnitude === 1) { - multiples = [1, 2, 5, 10]; - } else if (magnitude <= 0.1) { - multiples = [1 / magnitude]; - } - } - } - - // normalize the interval to the nearest multiple - for (i = 0; i < multiples.length; i++) { - interval = multiples[i]; - if (normalized <= (multiples[i] + (multiples[i + 1] || multiples[i])) / 2) { - break; - } - } - - // multiply back to the correct magnitude - interval *= magnitude; - - return interval; -} - - -/** - * Helper class that contains variuos counters that are local to the chart. - */ -function ChartCounters() { - this.color = 0; - this.symbol = 0; -} - -ChartCounters.prototype = { - /** - * Wraps the color counter if it reaches the specified length. - */ - wrapColor: function (length) { - if (this.color >= length) { - this.color = 0; - } - }, - - /** - * Wraps the symbol counter if it reaches the specified length. - */ - wrapSymbol: function (length) { - if (this.symbol >= length) { - this.symbol = 0; - } - } -}; - - -/** - * Utility method that sorts an object array and keeping the order of equal items. - * ECMA script standard does not specify the behaviour when items are equal. - */ -function stableSort(arr, sortFunction) { - var length = arr.length, - sortValue, - i; - - // Add index to each item - for (i = 0; i < length; i++) { - arr[i].ss_i = i; // stable sort index - } - - arr.sort(function (a, b) { - sortValue = sortFunction(a, b); - return sortValue === 0 ? a.ss_i - b.ss_i : sortValue; - }); - - // Remove index from items - for (i = 0; i < length; i++) { - delete arr[i].ss_i; // stable sort index - } -} - -/** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ -function arrayMin(data) { - var i = data.length, - min = data[0]; - - while (i--) { - if (data[i] < min) { - min = data[i]; - } - } - return min; -} - -/** - * Non-recursive method to find the lowest member of an array. Math.min raises a maximum - * call stack size exceeded error in Chrome when trying to apply more than 150.000 points. This - * method is slightly slower, but safe. - */ -function arrayMax(data) { - var i = data.length, - max = data[0]; - - while (i--) { - if (data[i] > max) { - max = data[i]; - } - } - return max; -} - -/** - * Utility method that destroys any SVGElement or VMLElement that are properties on the given object. - * It loops all properties and invokes destroy if there is a destroy method. The property is - * then delete'ed. - * @param {Object} The object to destroy properties on - * @param {Object} Exception, do not destroy this property, only delete it. - */ -function destroyObjectProperties(obj, except) { - var n; - for (n in obj) { - // If the object is non-null and destroy is defined - if (obj[n] && obj[n] !== except && obj[n].destroy) { - // Invoke the destroy - obj[n].destroy(); - } - - // Delete the property from the object. - delete obj[n]; - } -} - - -/** - * Discard an element by moving it to the bin and delete - * @param {Object} The HTML node to discard - */ -function discardElement(element) { - // create a garbage bin element, not part of the DOM - if (!garbageBin) { - garbageBin = createElement(DIV); - } - - // move the node and empty bin - if (element) { - garbageBin.appendChild(element); - } - garbageBin.innerHTML = ''; -} - -/** - * Provide error messages for debugging, with links to online explanation - */ -function error(code, stop) { - var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; - if (stop) { - throw msg; - } else if (win.console) { - console.log(msg); - } -} - -/** - * Fix JS round off float errors - * @param {Number} num - */ -function correctFloat(num) { - return parseFloat( - num.toPrecision(14) - ); -} - -/** - * Set the global animation to either a given value, or fall back to the - * given chart's animation option - * @param {Object} animation - * @param {Object} chart - */ -function setAnimation(animation, chart) { - globalAnimation = pick(animation, chart.animation); -} - -/** - * The time unit lookup - */ -/*jslint white: true*/ -timeUnits = hash( - MILLISECOND, 1, - SECOND, 1000, - MINUTE, 60000, - HOUR, 3600000, - DAY, 24 * 3600000, - WEEK, 7 * 24 * 3600000, - MONTH, 31 * 24 * 3600000, - YEAR, 31556952000 -); -/*jslint white: false*/ -/** - * Path interpolation algorithm used across adapters - */ -pathAnim = { - /** - * Prepare start and end values so that the path can be animated one to one - */ - init: function (elem, fromD, toD) { - fromD = fromD || ''; - var shift = elem.shift, - bezier = fromD.indexOf('C') > -1, - numParams = bezier ? 7 : 3, - endLength, - slice, - i, - start = fromD.split(' '), - end = [].concat(toD), // copy - startBaseLine, - endBaseLine, - sixify = function (arr) { // in splines make move points have six parameters like bezier curves - i = arr.length; - while (i--) { - if (arr[i] === M) { - arr.splice(i + 1, 0, arr[i + 1], arr[i + 2], arr[i + 1], arr[i + 2]); - } - } - }; - - if (bezier) { - sixify(start); - sixify(end); - } - - // pull out the base lines before padding - if (elem.isArea) { - startBaseLine = start.splice(start.length - 6, 6); - endBaseLine = end.splice(end.length - 6, 6); - } - - // if shifting points, prepend a dummy point to the end path - if (shift <= end.length / numParams && start.length === end.length) { - while (shift--) { - end = [].concat(end).splice(0, numParams).concat(end); - } - } - elem.shift = 0; // reset for following animations - - // copy and append last point until the length matches the end length - if (start.length) { - endLength = end.length; - while (start.length < endLength) { - - //bezier && sixify(start); - slice = [].concat(start).splice(start.length - numParams, numParams); - if (bezier) { // disable first control point - slice[numParams - 6] = slice[numParams - 2]; - slice[numParams - 5] = slice[numParams - 1]; - } - start = start.concat(slice); - } - } - - if (startBaseLine) { // append the base lines for areas - start = start.concat(startBaseLine); - end = end.concat(endBaseLine); - } - return [start, end]; - }, - - /** - * Interpolate each value of the path and return the array - */ - step: function (start, end, pos, complete) { - var ret = [], - i = start.length, - startVal; - - if (pos === 1) { // land on the final path without adjustment points appended in the ends - ret = complete; - - } else if (i === end.length && pos < 1) { - while (i--) { - startVal = parseFloat(start[i]); - ret[i] = - isNaN(startVal) ? // a letter instruction like M or L - start[i] : - pos * (parseFloat(end[i] - startVal)) + startVal; - - } - } else { // if animation is finished or length not matching, land on right value - ret = end; - } - return ret; - } -}; - -(function ($) { - /** - * The default HighchartsAdapter for jQuery - */ - win.HighchartsAdapter = win.HighchartsAdapter || ($ && { - - /** - * Initialize the adapter by applying some extensions to jQuery - */ - init: function (pathAnim) { - - // extend the animate function to allow SVG animations - var Fx = $.fx, - Step = Fx.step, - dSetter, - Tween = $.Tween, - propHooks = Tween && Tween.propHooks, - opacityHook = $.cssHooks.opacity; - - /*jslint unparam: true*//* allow unused param x in this function */ - $.extend($.easing, { - easeOutQuad: function (x, t, b, c, d) { - return -c * (t /= d) * (t - 2) + b; - } - }); - /*jslint unparam: false*/ - - // extend some methods to check for elem.attr, which means it is a Highcharts SVG object - $.each(['cur', '_default', 'width', 'height', 'opacity'], function (i, fn) { - var obj = Step, - base; - - // Handle different parent objects - if (fn === 'cur') { - obj = Fx.prototype; // 'cur', the getter, relates to Fx.prototype - - } else if (fn === '_default' && Tween) { // jQuery 1.8 model - obj = propHooks[fn]; - fn = 'set'; - } - - // Overwrite the method - base = obj[fn]; - if (base) { // step.width and step.height don't exist in jQuery < 1.7 - - // create the extended function replacement - obj[fn] = function (fx) { - - var elem; - - // Fx.prototype.cur does not use fx argument - fx = i ? fx : this; - - // Don't run animations on textual properties like align (#1821) - if (fx.prop === 'align') { - return; - } - - // shortcut - elem = fx.elem; - - // Fx.prototype.cur returns the current value. The other ones are setters - // and returning a value has no effect. - return elem.attr ? // is SVG element wrapper - elem.attr(fx.prop, fn === 'cur' ? UNDEFINED : fx.now) : // apply the SVG wrapper's method - base.apply(this, arguments); // use jQuery's built-in method - }; - } - }); - - // Extend the opacity getter, needed for fading opacity with IE9 and jQuery 1.10+ - wrap(opacityHook, 'get', function (proceed, elem, computed) { - return elem.attr ? (elem.opacity || 0) : proceed.call(this, elem, computed); - }); - - - // Define the setter function for d (path definitions) - dSetter = function (fx) { - var elem = fx.elem, - ends; - - // Normally start and end should be set in state == 0, but sometimes, - // for reasons unknown, this doesn't happen. Perhaps state == 0 is skipped - // in these cases - if (!fx.started) { - ends = pathAnim.init(elem, elem.d, elem.toD); - fx.start = ends[0]; - fx.end = ends[1]; - fx.started = true; - } - - - // interpolate each value of the path - elem.attr('d', pathAnim.step(fx.start, fx.end, fx.pos, elem.toD)); - }; - - // jQuery 1.8 style - if (Tween) { - propHooks.d = { - set: dSetter - }; - // pre 1.8 - } else { - // animate paths - Step.d = dSetter; - } - - /** - * Utility for iterating over an array. Parameters are reversed compared to jQuery. - * @param {Array} arr - * @param {Function} fn - */ - this.each = Array.prototype.forEach ? - function (arr, fn) { // modern browsers - return Array.prototype.forEach.call(arr, fn); - - } : - function (arr, fn) { // legacy - var i = 0, - len = arr.length; - for (; i < len; i++) { - if (fn.call(arr[i], arr[i], i, arr) === false) { - return i; - } - } - }; - - /** - * Register Highcharts as a plugin in the respective framework - */ - $.fn.highcharts = function () { - var constr = 'Chart', // default constructor - args = arguments, - options, - ret, - chart; - - if (this[0]) { - - if (isString(args[0])) { - constr = args[0]; - args = Array.prototype.slice.call(args, 1); - } - options = args[0]; - - // Create the chart - if (options !== UNDEFINED) { - /*jslint unused:false*/ - options.chart = options.chart || {}; - options.chart.renderTo = this[0]; - chart = new Highcharts[constr](options, args[1]); - ret = this; - /*jslint unused:true*/ - } - - // When called without parameters or with the return argument, get a predefined chart - if (options === UNDEFINED) { - ret = charts[attr(this[0], 'data-highcharts-chart')]; - } - } - - return ret; - }; - - }, - - - /** - * Downloads a script and executes a callback when done. - * @param {String} scriptLocation - * @param {Function} callback - */ - getScript: $.getScript, - - /** - * Return the index of an item in an array, or -1 if not found - */ - inArray: $.inArray, - - /** - * A direct link to jQuery methods. MooTools and Prototype adapters must be implemented for each case of method. - * @param {Object} elem The HTML element - * @param {String} method Which method to run on the wrapped element - */ - adapterRun: function (elem, method) { - return $(elem)[method](); - }, - - /** - * Filter an array - */ - grep: $.grep, - - /** - * Map an array - * @param {Array} arr - * @param {Function} fn - */ - map: function (arr, fn) { - //return jQuery.map(arr, fn); - var results = [], - i = 0, - len = arr.length; - for (; i < len; i++) { - results[i] = fn.call(arr[i], arr[i], i, arr); - } - return results; - - }, - - /** - * Get the position of an element relative to the top left of the page - */ - offset: function (el) { - return $(el).offset(); - }, - - /** - * Add an event listener - * @param {Object} el A HTML element or custom object - * @param {String} event The event type - * @param {Function} fn The event handler - */ - addEvent: function (el, event, fn) { - $(el).bind(event, fn); - }, - - /** - * Remove event added with addEvent - * @param {Object} el The object - * @param {String} eventType The event type. Leave blank to remove all events. - * @param {Function} handler The function to remove - */ - removeEvent: function (el, eventType, handler) { - // workaround for jQuery issue with unbinding custom events: - // http://forum.jQuery.com/topic/javascript-error-when-unbinding-a-custom-event-using-jQuery-1-4-2 - var func = doc.removeEventListener ? 'removeEventListener' : 'detachEvent'; - if (doc[func] && el && !el[func]) { - el[func] = function () {}; - } - - $(el).unbind(eventType, handler); - }, - - /** - * Fire an event on a custom object - * @param {Object} el - * @param {String} type - * @param {Object} eventArguments - * @param {Function} defaultFunction - */ - fireEvent: function (el, type, eventArguments, defaultFunction) { - var event = $.Event(type), - detachedType = 'detached' + type, - defaultPrevented; - - // Remove warnings in Chrome when accessing returnValue (#2790), layerX and layerY. Although Highcharts - // never uses these properties, Chrome includes them in the default click event and - // raises the warning when they are copied over in the extend statement below. - // - // To avoid problems in IE (see #1010) where we cannot delete the properties and avoid - // testing if they are there (warning in chrome) the only option is to test if running IE. - if (!isIE && eventArguments) { - delete eventArguments.layerX; - delete eventArguments.layerY; - delete eventArguments.returnValue; - } - - extend(event, eventArguments); - - // Prevent jQuery from triggering the object method that is named the - // same as the event. For example, if the event is 'select', jQuery - // attempts calling el.select and it goes into a loop. - if (el[type]) { - el[detachedType] = el[type]; - el[type] = null; - } - - // Wrap preventDefault and stopPropagation in try/catch blocks in - // order to prevent JS errors when cancelling events on non-DOM - // objects. #615. - /*jslint unparam: true*/ - $.each(['preventDefault', 'stopPropagation'], function (i, fn) { - var base = event[fn]; - event[fn] = function () { - try { - base.call(event); - } catch (e) { - if (fn === 'preventDefault') { - defaultPrevented = true; - } - } - }; - }); - /*jslint unparam: false*/ - - // trigger it - $(el).trigger(event); - - // attach the method - if (el[detachedType]) { - el[type] = el[detachedType]; - el[detachedType] = null; - } - - if (defaultFunction && !event.isDefaultPrevented() && !defaultPrevented) { - defaultFunction(event); - } - }, - - /** - * Extension method needed for MooTools - */ - washMouseEvent: function (e) { - var ret = e.originalEvent || e; - - // computed by jQuery, needed by IE8 - if (ret.pageX === UNDEFINED) { // #1236 - ret.pageX = e.pageX; - ret.pageY = e.pageY; - } - - return ret; - }, - - /** - * Animate a HTML element or SVG element wrapper - * @param {Object} el - * @param {Object} params - * @param {Object} options jQuery-like animation options: duration, easing, callback - */ - animate: function (el, params, options) { - var $el = $(el); - if (!el.style) { - el.style = {}; // #1881 - } - if (params.d) { - el.toD = params.d; // keep the array form for paths, used in $.fx.step.d - params.d = 1; // because in jQuery, animating to an array has a different meaning - } - - $el.stop(); - if (params.opacity !== UNDEFINED && el.attr) { - params.opacity += 'px'; // force jQuery to use same logic as width and height (#2161) - } - $el.animate(params, options); - - }, - /** - * Stop running animation - */ - stop: function (el) { - $(el).stop(); - } - }); -}(win.jQuery)); - - -// check for a custom HighchartsAdapter defined prior to this file -var globalAdapter = win.HighchartsAdapter, - adapter = globalAdapter || {}; - -// Initialize the adapter -if (globalAdapter) { - globalAdapter.init.call(globalAdapter, pathAnim); -} - - -// Utility functions. If the HighchartsAdapter is not defined, adapter is an empty object -// and all the utility functions will be null. In that case they are populated by the -// default adapters below. -var adapterRun = adapter.adapterRun, - getScript = adapter.getScript, - inArray = adapter.inArray, - each = adapter.each, - grep = adapter.grep, - offset = adapter.offset, - map = adapter.map, - addEvent = adapter.addEvent, - removeEvent = adapter.removeEvent, - fireEvent = adapter.fireEvent, - washMouseEvent = adapter.washMouseEvent, - animate = adapter.animate, - stop = adapter.stop; - - - -/* **************************************************************************** - * Handle the options * - *****************************************************************************/ -var - -defaultLabelOptions = { - enabled: true, - // rotation: 0, - // align: 'center', - x: 0, - y: 15, - /*formatter: function () { - return this.value; - },*/ - style: { - color: '#606060', - cursor: 'default', - fontSize: '11px' - } -}; - -defaultOptions = { - colors: ['#7cb5ec', '#434348', '#90ed7d', '#f7a35c', - '#8085e9', '#f15c80', '#e4d354', '#8085e8', '#8d4653', '#91e8e1'], // docs - symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'], - lang: { - loading: 'Loading...', - months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', - 'August', 'September', 'October', 'November', 'December'], - shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - decimalPoint: '.', - numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'], // SI prefixes used in axis labels - resetZoom: 'Reset zoom', - resetZoomTitle: 'Reset zoom level 1:1', - thousandsSep: ',' - }, - global: { - useUTC: true, - //timezoneOffset: 0, - canvasToolsURL: 'http://code.highcharts.com/4.0.1/modules/canvas-tools.js', - VMLRadialGradientURL: 'http://code.highcharts.com/4.0.1/gfx/vml-radial-gradient.png' - }, - chart: { - //animation: true, - //alignTicks: false, - //reflow: true, - //className: null, - //events: { load, selection }, - //margin: [null], - //marginTop: null, - //marginRight: null, - //marginBottom: null, - //marginLeft: null, - borderColor: '#4572A7', - //borderWidth: 0, - borderRadius: 0, - defaultSeriesType: 'line', - ignoreHiddenSeries: true, - //inverted: false, - //shadow: false, - spacing: [10, 10, 15, 10], - //spacingTop: 10, - //spacingRight: 10, - //spacingBottom: 15, - //spacingLeft: 10, - //style: { - // fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // default font - // fontSize: '12px' - //}, - backgroundColor: '#FFFFFF', - //plotBackgroundColor: null, - plotBorderColor: '#C0C0C0', - //plotBorderWidth: 0, - //plotShadow: false, - //zoomType: '' - resetZoomButton: { - theme: { - zIndex: 20 - }, - position: { - align: 'right', - x: -10, - //verticalAlign: 'top', - y: 10 - } - // relativeTo: 'plot' - } - }, - title: { - text: 'Chart title', - align: 'center', - // floating: false, - margin: 15, - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#333333', // docs - fontSize: '18px' - } - - }, - subtitle: { - text: '', - align: 'center', - // floating: false - // x: 0, - // verticalAlign: 'top', - // y: null, - style: { - color: '#555555' // docs - } - }, - - plotOptions: { - line: { // base series options - allowPointSelect: false, - showCheckbox: false, - animation: { - duration: 1000 - }, - //connectNulls: false, - //cursor: 'default', - //clip: true, - //dashStyle: null, - //enableMouseTracking: true, - events: {}, - //legendIndex: 0, - //linecap: 'round', - lineWidth: 2, - //shadow: false, - // stacking: null, - marker: { - //enabled: true, - //symbol: null, - lineWidth: 0, - radius: 4, - lineColor: '#FFFFFF', - //fillColor: null, - states: { // states for a single point - hover: { - enabled: true - //radius: base + 2 - }, - select: { - fillColor: '#FFFFFF', - lineColor: '#000000', - lineWidth: 2 - } - } - }, - point: { - events: {} - }, - dataLabels: merge(defaultLabelOptions, { - align: 'center', - //defer: true, - enabled: false, - formatter: function () { - return this.y === null ? '' : numberFormat(this.y, -1); - }, - verticalAlign: 'bottom', // above singular point - y: 0 - // backgroundColor: undefined, - // borderColor: undefined, - // borderRadius: undefined, - // borderWidth: undefined, - // padding: 3, - // shadow: false - }), - cropThreshold: 300, // draw points outside the plot area when the number of points is less than this - pointRange: 0, - //pointStart: 0, - //pointInterval: 1, - //showInLegend: null, // auto: true for standalone series, false for linked series - states: { // states for the entire series - hover: { - //enabled: false, - //lineWidth: base + 1, - marker: { - // lineWidth: base + 1, - // radius: base + 1 - }, - halo: { - size: 10, - opacity: 0.25 - } - }, - select: { - marker: {} - } - }, - stickyTracking: true, - //tooltip: { - //pointFormat: '\u25CF {series.name}: {point.y}' - //valueDecimals: null, - //xDateFormat: '%A, %b %e, %Y', - //valuePrefix: '', - //ySuffix: '' - //} - turboThreshold: 1000 - // zIndex: null - } - }, - labels: { - //items: [], - style: { - //font: defaultFont, - position: ABSOLUTE, - color: '#3E576F' - } - }, - legend: { - enabled: true, - align: 'center', - //floating: false, - layout: 'horizontal', - labelFormatter: function () { - return this.name; - }, - //borderWidth: 0, - borderColor: '#909090', - borderRadius: 0, // docs - navigation: { - // animation: true, - activeColor: '#274b6d', - // arrowSize: 12 - inactiveColor: '#CCC' - // style: {} // text styles - }, - // margin: 20, - // reversed: false, - shadow: false, - // backgroundColor: null, - /*style: { - padding: '5px' - },*/ - itemStyle: { - color: '#333333', // docs - fontSize: '12px', - fontWeight: 'bold' // docs - }, - itemHoverStyle: { - //cursor: 'pointer', removed as of #601 - color: '#000' - }, - itemHiddenStyle: { - color: '#CCC' - }, - itemCheckboxStyle: { - position: ABSOLUTE, - width: '13px', // for IE precision - height: '13px' - }, - // itemWidth: undefined, - // symbolRadius: 0, - // symbolWidth: 16, - symbolPadding: 5, - verticalAlign: 'bottom', - // width: undefined, - x: 0, - y: 0, - title: { - //text: null, - style: { - fontWeight: 'bold' - } - } - }, - - loading: { - // hideDuration: 100, - labelStyle: { - fontWeight: 'bold', - position: RELATIVE, - top: '1em' - }, - // showDuration: 0, - style: { - position: ABSOLUTE, - backgroundColor: 'white', - opacity: 0.5, - textAlign: 'center' - } - }, - - tooltip: { - enabled: true, - animation: hasSVG, - //crosshairs: null, - backgroundColor: 'rgba(249, 249, 249, .85)', - borderWidth: 1, - borderRadius: 3, - dateTimeLabelFormats: { - millisecond: '%A, %b %e, %H:%M:%S.%L', - second: '%A, %b %e, %H:%M:%S', - minute: '%A, %b %e, %H:%M', - hour: '%A, %b %e, %H:%M', - day: '%A, %b %e, %Y', - week: 'Week from %A, %b %e, %Y', - month: '%B %Y', - year: '%Y' - }, - //formatter: defaultFormatter, - headerFormat: '{point.key}
', - pointFormat: '\u25CF {series.name}: {point.y}
', // docs - shadow: true, - //shape: 'calout', - //shared: false, - snap: isTouchDevice ? 25 : 10, - style: { - color: '#333333', - cursor: 'default', - fontSize: '12px', - padding: '8px', - whiteSpace: 'nowrap' - } - //xDateFormat: '%A, %b %e, %Y', - //valueDecimals: null, - //valuePrefix: '', - //valueSuffix: '' - }, - - credits: { - enabled: true, - text: 'Highcharts.com', - href: 'http://www.highcharts.com', - position: { - align: 'right', - x: -10, - verticalAlign: 'bottom', - y: -5 - }, - style: { - cursor: 'pointer', - color: '#909090', - fontSize: '9px' - } - } -}; - - - - -// Series defaults -var defaultPlotOptions = defaultOptions.plotOptions, - defaultSeriesOptions = defaultPlotOptions.line; - -// set the default time methods -setTimeMethods(); - - - -/** - * Set the time methods globally based on the useUTC option. Time method can be either - * local time or UTC (default). - */ -function setTimeMethods() { - var useUTC = defaultOptions.global.useUTC, - GET = useUTC ? 'getUTC' : 'get', - SET = useUTC ? 'setUTC' : 'set'; - - - timezoneOffset = ((useUTC && defaultOptions.global.timezoneOffset) || 0) * 60000; - makeTime = useUTC ? Date.UTC : function (year, month, date, hours, minutes, seconds) { - return new Date( - year, - month, - pick(date, 1), - pick(hours, 0), - pick(minutes, 0), - pick(seconds, 0) - ).getTime(); - }; - getMinutes = GET + 'Minutes'; - getHours = GET + 'Hours'; - getDay = GET + 'Day'; - getDate = GET + 'Date'; - getMonth = GET + 'Month'; - getFullYear = GET + 'FullYear'; - setMinutes = SET + 'Minutes'; - setHours = SET + 'Hours'; - setDate = SET + 'Date'; - setMonth = SET + 'Month'; - setFullYear = SET + 'FullYear'; - -} - -/** - * Merge the default options with custom options and return the new options structure - * @param {Object} options The new custom options - */ -function setOptions(options) { - - // Copy in the default options - defaultOptions = merge(true, defaultOptions, options); - - // Apply UTC - setTimeMethods(); - - return defaultOptions; -} - -/** - * Get the updated default options. Until 3.0.7, merely exposing defaultOptions for outside modules - * wasn't enough because the setOptions method created a new object. - */ -function getOptions() { - return defaultOptions; -} - - -/** - * Handle color operations. The object methods are chainable. - * @param {String} input The input color in either rbga or hex format - */ -var rgbaRegEx = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/, - hexRegEx = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/, - rgbRegEx = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/; - -var Color = function (input) { - // declare variables - var rgba = [], result, stops; - - /** - * Parse the input color to rgba array - * @param {String} input - */ - function init(input) { - - // Gradients - if (input && input.stops) { - stops = map(input.stops, function (stop) { - return Color(stop[1]); - }); - - // Solid colors - } else { - // rgba - result = rgbaRegEx.exec(input); - if (result) { - rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), parseFloat(result[4], 10)]; - } else { - // hex - result = hexRegEx.exec(input); - if (result) { - rgba = [pInt(result[1], 16), pInt(result[2], 16), pInt(result[3], 16), 1]; - } else { - // rgb - result = rgbRegEx.exec(input); - if (result) { - rgba = [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1]; - } - } - } - } - - } - /** - * Return the color a specified format - * @param {String} format - */ - function get(format) { - var ret; - - if (stops) { - ret = merge(input); - ret.stops = [].concat(ret.stops); - each(stops, function (stop, i) { - ret.stops[i] = [ret.stops[i][0], stop.get(format)]; - }); - - // it's NaN if gradient colors on a column chart - } else if (rgba && !isNaN(rgba[0])) { - if (format === 'rgb') { - ret = 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')'; - } else if (format === 'a') { - ret = rgba[3]; - } else { - ret = 'rgba(' + rgba.join(',') + ')'; - } - } else { - ret = input; - } - return ret; - } - - /** - * Brighten the color - * @param {Number} alpha - */ - function brighten(alpha) { - if (stops) { - each(stops, function (stop) { - stop.brighten(alpha); - }); - - } else if (isNumber(alpha) && alpha !== 0) { - var i; - for (i = 0; i < 3; i++) { - rgba[i] += pInt(alpha * 255); - - if (rgba[i] < 0) { - rgba[i] = 0; - } - if (rgba[i] > 255) { - rgba[i] = 255; - } - } - } - return this; - } - /** - * Set the color's opacity to a given alpha value - * @param {Number} alpha - */ - function setOpacity(alpha) { - rgba[3] = alpha; - return this; - } - - // initialize: parse the input - init(input); - - // public methods - return { - get: get, - brighten: brighten, - rgba: rgba, - setOpacity: setOpacity - }; -}; - - -/** - * A wrapper object for SVG elements - */ -function SVGElement() {} - -SVGElement.prototype = { - /** - * Initialize the SVG renderer - * @param {Object} renderer - * @param {String} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this; - wrapper.element = nodeName === 'span' ? - createElement(nodeName) : - doc.createElementNS(SVG_NS, nodeName); - wrapper.renderer = renderer; - }, - /** - * Default base for animation - */ - opacity: 1, - /** - * Animate a given attribute - * @param {Object} params - * @param {Number} options The same options as in jQuery animation - * @param {Function} complete Function to perform at the end of animation - */ - animate: function (params, options, complete) { - var animOptions = pick(options, globalAnimation, true); - stop(this); // stop regardless of animation actually running, or reverting to .attr (#607) - if (animOptions) { - animOptions = merge(animOptions, {}); //#2625 - if (complete) { // allows using a callback with the global animation without overwriting it - animOptions.complete = complete; - } - animate(this, params, animOptions); - } else { - this.attr(params); - if (complete) { - complete(); - } - } - }, - - /** - * Build an SVG gradient out of a common JavaScript configuration object - */ - colorGradient: function (color, prop, elem) { - var renderer = this.renderer, - colorObject, - gradName, - gradAttr, - gradients, - gradientObject, - stops, - stopColor, - stopOpacity, - radialReference, - n, - id, - key = []; - - // Apply linear or radial gradients - if (color.linearGradient) { - gradName = 'linearGradient'; - } else if (color.radialGradient) { - gradName = 'radialGradient'; - } - - if (gradName) { - gradAttr = color[gradName]; - gradients = renderer.gradients; - stops = color.stops; - radialReference = elem.radialReference; - - // Keep < 2.2 kompatibility - if (isArray(gradAttr)) { - color[gradName] = gradAttr = { - x1: gradAttr[0], - y1: gradAttr[1], - x2: gradAttr[2], - y2: gradAttr[3], - gradientUnits: 'userSpaceOnUse' - }; - } - - // Correct the radial gradient for the radial reference system - if (gradName === 'radialGradient' && radialReference && !defined(gradAttr.gradientUnits)) { - gradAttr = merge(gradAttr, { - cx: (radialReference[0] - radialReference[2] / 2) + gradAttr.cx * radialReference[2], - cy: (radialReference[1] - radialReference[2] / 2) + gradAttr.cy * radialReference[2], - r: gradAttr.r * radialReference[2], - gradientUnits: 'userSpaceOnUse' - }); - } - - // Build the unique key to detect whether we need to create a new element (#1282) - for (n in gradAttr) { - if (n !== 'id') { - key.push(n, gradAttr[n]); - } - } - for (n in stops) { - key.push(stops[n]); - } - key = key.join(','); - - // Check if a gradient object with the same config object is created within this renderer - if (gradients[key]) { - id = gradients[key].attr('id'); - - } else { - - // Set the id and create the element - gradAttr.id = id = PREFIX + idCounter++; - gradients[key] = gradientObject = renderer.createElement(gradName) - .attr(gradAttr) - .add(renderer.defs); - - - // The gradient needs to keep a list of stops to be able to destroy them - gradientObject.stops = []; - each(stops, function (stop) { - var stopObject; - if (stop[1].indexOf('rgba') === 0) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - stopObject = renderer.createElement('stop').attr({ - offset: stop[0], - 'stop-color': stopColor, - 'stop-opacity': stopOpacity - }).add(gradientObject); - - // Add the stop element to the gradient - gradientObject.stops.push(stopObject); - }); - } - - // Set the reference to the gradient object - elem.setAttribute(prop, 'url(' + renderer.url + '#' + id + ')'); - } - }, - - /** - * Set or get a given attribute - * @param {Object|String} hash - * @param {Mixed|Undefined} val - */ - attr: function (hash, val) { - var key, - value, - element = this.element, - hasSetSymbolSize, - ret = this, - skipAttr; - - // single key-value pair - if (typeof hash === 'string' && val !== UNDEFINED) { - key = hash; - hash = {}; - hash[key] = val; - } - - // used as a getter: first argument is a string, second is undefined - if (typeof hash === 'string') { - ret = (this[hash + 'Getter'] || this._defaultGetter).call(this, hash, element); - - // setter - } else { - - for (key in hash) { - value = hash[key]; - skipAttr = false; - - - - if (this.symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(key)) { - if (!hasSetSymbolSize) { - this.symbolAttr(hash); - hasSetSymbolSize = true; - } - skipAttr = true; - } - - if (this.rotation && (key === 'x' || key === 'y')) { - this.doTransform = true; - } - - if (!skipAttr) { - (this[key + 'Setter'] || this._defaultSetter).call(this, value, key, element); - } - - // Let the shadow follow the main element - if (this.shadows && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(key)) { - this.updateShadows(key, value); - } - } - - // Update transform. Do this outside the loop to prevent redundant updating for batch setting - // of attributes. - if (this.doTransform) { - this.updateTransform(); - this.doTransform = false; - } - - } - - return ret; - }, - - updateShadows: function (key, value) { - var shadows = this.shadows, - i = shadows.length; - while (i--) { - shadows[i].setAttribute( - key, - key === 'height' ? - mathMax(value - (shadows[i].cutHeight || 0), 0) : - key === 'd' ? this.d : value - ); - } - }, - - /** - * Add a class name to an element - */ - addClass: function (className) { - var element = this.element, - currentClassName = attr(element, 'class') || ''; - - if (currentClassName.indexOf(className) === -1) { - attr(element, 'class', currentClassName + ' ' + className); - } - return this; - }, - /* hasClass and removeClass are not (yet) needed - hasClass: function (className) { - return attr(this.element, 'class').indexOf(className) !== -1; - }, - removeClass: function (className) { - attr(this.element, 'class', attr(this.element, 'class').replace(className, '')); - return this; - }, - */ - - /** - * If one of the symbol size affecting parameters are changed, - * check all the others only once for each call to an element's - * .attr() method - * @param {Object} hash - */ - symbolAttr: function (hash) { - var wrapper = this; - - each(['x', 'y', 'r', 'start', 'end', 'width', 'height', 'innerR', 'anchorX', 'anchorY'], function (key) { - wrapper[key] = pick(hash[key], wrapper[key]); - }); - - wrapper.attr({ - d: wrapper.renderer.symbols[wrapper.symbolName]( - wrapper.x, - wrapper.y, - wrapper.width, - wrapper.height, - wrapper - ) - }); - }, - - /** - * Apply a clipping path to this object - * @param {String} id - */ - clip: function (clipRect) { - return this.attr('clip-path', clipRect ? 'url(' + this.renderer.url + '#' + clipRect.id + ')' : NONE); - }, - - /** - * Calculate the coordinates needed for drawing a rectangle crisply and return the - * calculated attributes - * @param {Number} strokeWidth - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - crisp: function (rect) { - - var wrapper = this, - key, - attribs = {}, - normalizer, - strokeWidth = rect.strokeWidth || wrapper.strokeWidth || (wrapper.attr && wrapper.attr('stroke-width')) || 0; - - normalizer = mathRound(strokeWidth) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors - - // normalize for crisp edges - rect.x = mathFloor(rect.x || wrapper.x || 0) + normalizer; - rect.y = mathFloor(rect.y || wrapper.y || 0) + normalizer; - rect.width = mathFloor((rect.width || wrapper.width || 0) - 2 * normalizer); - rect.height = mathFloor((rect.height || wrapper.height || 0) - 2 * normalizer); - rect.strokeWidth = strokeWidth; - - for (key in rect) { - if (wrapper[key] !== rect[key]) { // only set attribute if changed - wrapper[key] = attribs[key] = rect[key]; - } - } - - return attribs; - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: function (styles) { - var elemWrapper = this, - oldStyles = elemWrapper.styles, - newStyles = {}, - elem = elemWrapper.element, - textWidth, - n, - serializedCss = '', - hyphenate, - hasNew = !oldStyles; - - // convert legacy - if (styles && styles.color) { - styles.fill = styles.color; - } - - // Filter out existing styles to increase performance (#2640) - if (oldStyles) { - for (n in styles) { - if (styles[n] !== oldStyles[n]) { - newStyles[n] = styles[n]; - hasNew = true; - } - } - } - if (hasNew) { - textWidth = elemWrapper.textWidth = styles && styles.width && elem.nodeName.toLowerCase() === 'text' && pInt(styles.width); - - // Merge the new styles with the old ones - if (oldStyles) { - styles = extend( - oldStyles, - newStyles - ); - } - - // store object - elemWrapper.styles = styles; - - if (textWidth && (useCanVG || (!hasSVG && elemWrapper.renderer.forExport))) { - delete styles.width; - } - - // serialize and set style attribute - if (isIE && !hasSVG) { - css(elemWrapper.element, styles); - } else { - /*jslint unparam: true*/ - hyphenate = function (a, b) { return '-' + b.toLowerCase(); }; - /*jslint unparam: false*/ - for (n in styles) { - serializedCss += n.replace(/([A-Z])/g, hyphenate) + ':' + styles[n] + ';'; - } - attr(elem, 'style', serializedCss); // #1881 - } - - - // re-build text - if (textWidth && elemWrapper.added) { - elemWrapper.renderer.buildText(elemWrapper); - } - } - - return elemWrapper; - }, - - /** - * Add an event listener - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - var svgElement = this, - element = svgElement.element; - - // touch - if (hasTouch && eventType === 'click') { - element.ontouchstart = function (e) { - svgElement.touchEventFired = Date.now(); - e.preventDefault(); - handler.call(element, e); - }; - element.onclick = function (e) { - if (userAgent.indexOf('Android') === -1 || Date.now() - (svgElement.touchEventFired || 0) > 1100) { // #2269 - handler.call(element, e); - } - }; - } else { - // simplest possible event model for internal use - element['on' + eventType] = handler; - } - return this; - }, - - /** - * Set the coordinates needed to draw a consistent radial gradient across - * pie slices regardless of positioning inside the chart. The format is - * [centerX, centerY, diameter] in pixels. - */ - setRadialReference: function (coordinates) { - this.element.radialReference = coordinates; - return this; - }, - - /** - * Move an object and its children by x and y values - * @param {Number} x - * @param {Number} y - */ - translate: function (x, y) { - return this.attr({ - translateX: x, - translateY: y - }); - }, - - /** - * Invert a group, rotate and flip - */ - invert: function () { - var wrapper = this; - wrapper.inverted = true; - wrapper.updateTransform(); - return wrapper; - }, - - /** - * Private method to update the transform attribute based on internal - * properties - */ - updateTransform: function () { - var wrapper = this, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - scaleX = wrapper.scaleX, - scaleY = wrapper.scaleY, - inverted = wrapper.inverted, - rotation = wrapper.rotation, - element = wrapper.element, - transform; - - // flipping affects translate as adjustment for flipping around the group's axis - if (inverted) { - translateX += wrapper.attr('width'); - translateY += wrapper.attr('height'); - } - - // Apply translate. Nearly all transformed elements have translation, so instead - // of checking for translate = 0, do it always (#1767, #1846). - transform = ['translate(' + translateX + ',' + translateY + ')']; - - // apply rotation - if (inverted) { - transform.push('rotate(90) scale(-1,1)'); - } else if (rotation) { // text rotation - transform.push('rotate(' + rotation + ' ' + (element.getAttribute('x') || 0) + ' ' + (element.getAttribute('y') || 0) + ')'); - } - - // apply scale - if (defined(scaleX) || defined(scaleY)) { - transform.push('scale(' + pick(scaleX, 1) + ' ' + pick(scaleY, 1) + ')'); - } - - if (transform.length) { - element.setAttribute('transform', transform.join(' ')); - } - }, - /** - * Bring the element to the front - */ - toFront: function () { - var element = this.element; - element.parentNode.appendChild(element); - return this; - }, - - - /** - * Break down alignment options like align, verticalAlign, x and y - * to x and y relative to the chart. - * - * @param {Object} alignOptions - * @param {Boolean} alignByTranslate - * @param {String[Object} box The box to align to, needs a width and height. When the - * box is a string, it refers to an object in the Renderer. For example, when - * box is 'spacingBox', it refers to Renderer.spacingBox which holds width, height - * x and y properties. - * - */ - align: function (alignOptions, alignByTranslate, box) { - var align, - vAlign, - x, - y, - attribs = {}, - alignTo, - renderer = this.renderer, - alignedObjects = renderer.alignedObjects; - - // First call on instanciate - if (alignOptions) { - this.alignOptions = alignOptions; - this.alignByTranslate = alignByTranslate; - if (!box || isString(box)) { // boxes other than renderer handle this internally - this.alignTo = alignTo = box || 'renderer'; - erase(alignedObjects, this); // prevent duplicates, like legendGroup after resize - alignedObjects.push(this); - box = null; // reassign it below - } - - // When called on resize, no arguments are supplied - } else { - alignOptions = this.alignOptions; - alignByTranslate = this.alignByTranslate; - alignTo = this.alignTo; - } - - box = pick(box, renderer[alignTo], renderer); - - // Assign variables - align = alignOptions.align; - vAlign = alignOptions.verticalAlign; - x = (box.x || 0) + (alignOptions.x || 0); // default: left align - y = (box.y || 0) + (alignOptions.y || 0); // default: top align - - // Align - if (align === 'right' || align === 'center') { - x += (box.width - (alignOptions.width || 0)) / - { right: 1, center: 2 }[align]; - } - attribs[alignByTranslate ? 'translateX' : 'x'] = mathRound(x); - - - // Vertical align - if (vAlign === 'bottom' || vAlign === 'middle') { - y += (box.height - (alignOptions.height || 0)) / - ({ bottom: 1, middle: 2 }[vAlign] || 1); - - } - attribs[alignByTranslate ? 'translateY' : 'y'] = mathRound(y); - - // Animate only if already placed - this[this.placed ? 'animate' : 'attr'](attribs); - this.placed = true; - this.alignAttr = attribs; - - return this; - }, - - /** - * Get the bounding box (width, height, x and y) for the element - */ - getBBox: function () { - var wrapper = this, - bBox = wrapper.bBox, - renderer = wrapper.renderer, - width, - height, - rotation = wrapper.rotation, - element = wrapper.element, - styles = wrapper.styles, - rad = rotation * deg2rad, - textStr = wrapper.textStr, - cacheKey; - - // Since numbers are monospaced, and numerical labels appear a lot in a chart, - // we assume that a label of n characters has the same bounding box as others - // of the same length. - if (textStr === '' || numRegex.test(textStr)) { - cacheKey = 'num.' + textStr.toString().length + (styles ? ('|' + styles.fontSize + '|' + styles.fontFamily) : ''); - - } //else { // This code block made demo/waterfall fail, related to buildText - // Caching all strings reduces rendering time by 4-5%. - // TODO: Check how this affects places where bBox is found on the element - //cacheKey = textStr + (styles ? ('|' + styles.fontSize + '|' + styles.fontFamily) : ''); - //} - if (cacheKey) { - bBox = renderer.cache[cacheKey]; - } - - // No cache found - if (!bBox) { - - // SVG elements - if (element.namespaceURI === SVG_NS || renderer.forExport) { - try { // Fails in Firefox if the container has display: none. - - bBox = element.getBBox ? - // SVG: use extend because IE9 is not allowed to change width and height in case - // of rotation (below) - extend({}, element.getBBox()) : - // Canvas renderer and legacy IE in export mode - { - width: element.offsetWidth, - height: element.offsetHeight - }; - } catch (e) {} - - // If the bBox is not set, the try-catch block above failed. The other condition - // is for Opera that returns a width of -Infinity on hidden elements. - if (!bBox || bBox.width < 0) { - bBox = { width: 0, height: 0 }; - } - - - // VML Renderer or useHTML within SVG - } else { - - bBox = wrapper.htmlGetBBox(); - - } - - // True SVG elements as well as HTML elements in modern browsers using the .useHTML option - // need to compensated for rotation - if (renderer.isSVG) { - width = bBox.width; - height = bBox.height; - - // Workaround for wrong bounding box in IE9 and IE10 (#1101, #1505, #1669, #2568) - if (isIE && styles && styles.fontSize === '11px' && height.toPrecision(3) === '16.9') { - bBox.height = height = 14; - } - - // Adjust for rotated text - if (rotation) { - bBox.width = mathAbs(height * mathSin(rad)) + mathAbs(width * mathCos(rad)); - bBox.height = mathAbs(height * mathCos(rad)) + mathAbs(width * mathSin(rad)); - } - } - - // Cache it - wrapper.bBox = bBox; - if (cacheKey) { - renderer.cache[cacheKey] = bBox; - } - } - return bBox; - }, - - /** - * Show the element - */ - show: function (inherit) { - // IE9-11 doesn't handle visibilty:inherit well, so we remove the attribute instead (#2881) - if (inherit && this.element.namespaceURI === SVG_NS) { - this.element.removeAttribute('visibility'); - return this; - } else { - return this.attr({ visibility: inherit ? 'inherit' : VISIBLE }); - } - }, - - /** - * Hide the element - */ - hide: function () { - return this.attr({ visibility: HIDDEN }); - }, - - fadeOut: function (duration) { - var elemWrapper = this; - elemWrapper.animate({ - opacity: 0 - }, { - duration: duration || 150, - complete: function () { - elemWrapper.hide(); - } - }); - }, - - /** - * Add the element - * @param {Object|Undefined} parent Can be an element, an element wrapper or undefined - * to append the element to the renderer.box. - */ - add: function (parent) { - - var renderer = this.renderer, - parentWrapper = parent || renderer, - parentNode = parentWrapper.element || renderer.box, - childNodes, - element = this.element, - zIndex = this.zIndex, - otherElement, - otherZIndex, - i, - inserted; - - if (parent) { - this.parentGroup = parent; - } - - // mark as inverted - this.parentInverted = parent && parent.inverted; - - // build formatted text - if (this.textStr !== undefined) { - renderer.buildText(this); - } - - // mark the container as having z indexed children - if (zIndex) { - parentWrapper.handleZ = true; - zIndex = pInt(zIndex); - } - - // insert according to this and other elements' zIndex - if (parentWrapper.handleZ) { // this element or any of its siblings has a z index - childNodes = parentNode.childNodes; - for (i = 0; i < childNodes.length; i++) { - otherElement = childNodes[i]; - otherZIndex = attr(otherElement, 'zIndex'); - if (otherElement !== element && ( - // insert before the first element with a higher zIndex - pInt(otherZIndex) > zIndex || - // if no zIndex given, insert before the first element with a zIndex - (!defined(zIndex) && defined(otherZIndex)) - - )) { - parentNode.insertBefore(element, otherElement); - inserted = true; - break; - } - } - } - - // default: append at the end - if (!inserted) { - parentNode.appendChild(element); - } - - // mark as added - this.added = true; - - // fire an event for internal hooks - if (this.onAdd) { - this.onAdd(); - } - - return this; - }, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - var parentNode = element.parentNode; - if (parentNode) { - parentNode.removeChild(element); - } - }, - - /** - * Destroy the element and element wrapper - */ - destroy: function () { - var wrapper = this, - element = wrapper.element || {}, - shadows = wrapper.shadows, - parentToClean = wrapper.renderer.isSVG && element.nodeName === 'SPAN' && wrapper.parentGroup, - grandParent, - key, - i; - - // remove events - element.onclick = element.onmouseout = element.onmouseover = element.onmousemove = element.point = null; - stop(wrapper); // stop running animations - - if (wrapper.clipPath) { - wrapper.clipPath = wrapper.clipPath.destroy(); - } - - // Destroy stops in case this is a gradient object - if (wrapper.stops) { - for (i = 0; i < wrapper.stops.length; i++) { - wrapper.stops[i] = wrapper.stops[i].destroy(); - } - wrapper.stops = null; - } - - // remove element - wrapper.safeRemoveChild(element); - - // destroy shadows - if (shadows) { - each(shadows, function (shadow) { - wrapper.safeRemoveChild(shadow); - }); - } - - // In case of useHTML, clean up empty containers emulating SVG groups (#1960, #2393). - while (parentToClean && parentToClean.div.childNodes.length === 0) { - grandParent = parentToClean.parentGroup; - wrapper.safeRemoveChild(parentToClean.div); - delete parentToClean.div; - parentToClean = grandParent; - } - - // remove from alignObjects - if (wrapper.alignTo) { - erase(wrapper.renderer.alignedObjects, wrapper); - } - - for (key in wrapper) { - delete wrapper[key]; - } - - return null; - }, - - /** - * Add a shadow to the element. Must be done after the element is added to the DOM - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - shadow, - element = this.element, - strokeWidth, - shadowWidth, - shadowElementOpacity, - - // compensate for inverted plot area - transform; - - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - transform = this.parentInverted ? - '(-1,-1)' : - '(' + pick(shadowOptions.offsetX, 1) + ', ' + pick(shadowOptions.offsetY, 1) + ')'; - for (i = 1; i <= shadowWidth; i++) { - shadow = element.cloneNode(0); - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - attr(shadow, { - 'isShadow': 'true', - 'stroke': shadowOptions.color || 'black', - 'stroke-opacity': shadowElementOpacity * i, - 'stroke-width': strokeWidth, - 'transform': 'translate' + transform, - 'fill': NONE - }); - if (cutOff) { - attr(shadow, 'height', mathMax(attr(shadow, 'height') - strokeWidth, 0)); - shadow.cutHeight = strokeWidth; - } - - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - shadows.push(shadow); - } - - this.shadows = shadows; - } - return this; - - }, - - xGetter: function (key) { - if (this.element.nodeName === 'circle') { - key = { x: 'cx', y: 'cy' }[key] || key; - } - return this._defaultGetter(key); - }, - - /** - * Get the current value of an attribute or pseudo attribute, used mainly - * for animation. - */ - _defaultGetter: function (key) { - var ret = pick(this[key], this.element ? this.element.getAttribute(key) : null, 0); - - if (/^[0-9\.]+$/.test(ret)) { // is numerical - ret = parseFloat(ret); - } - return ret; - }, - - - dSetter: function (value, key, element) { - if (value && value.join) { // join path - value = value.join(' '); - } - if (/(NaN| {2}|^$)/.test(value)) { - value = 'M 0 0'; - } - element.setAttribute(key, value); - - this[key] = value; - }, - dashstyleSetter: function (value) { - var i; - value = value && value.toLowerCase(); - if (value) { - value = value - .replace('shortdashdotdot', '3,1,1,1,1,1,') - .replace('shortdashdot', '3,1,1,1') - .replace('shortdot', '1,1,') - .replace('shortdash', '3,1,') - .replace('longdash', '8,3,') - .replace(/dot/g, '1,3,') - .replace('dash', '4,3,') - .replace(/,$/, '') - .split(','); // ending comma - - i = value.length; - while (i--) { - value[i] = pInt(value[i]) * this.element.getAttribute('stroke-width'); - } - value = value.join(','); - this.element.setAttribute('stroke-dasharray', value); - } - }, - alignSetter: function (value) { - this.element.setAttribute('text-anchor', { left: 'start', center: 'middle', right: 'end' }[value]); - }, - opacitySetter: function (value, key, element) { - this[key] = value; - element.setAttribute(key, value); - }, - // In Chrome/Win < 6 as well as Batik and PhantomJS as of 1.9.7, the stroke attribute can't be set when the stroke- - // width is 0. #1369 - 'stroke-widthSetter': function (value, key, element) { - if (value === 0) { - value = 0.00001; - } - this.strokeWidth = value; // read in symbol paths like 'callout' - element.setAttribute(key, value); - }, - titleSetter: function (value) { - var titleNode = this.element.getElementsByTagName('title')[0]; - if (!titleNode) { - titleNode = doc.createElementNS(SVG_NS, 'title'); - this.element.appendChild(titleNode); - } - titleNode.textContent = value; - }, - textSetter: function (value) { - if (value !== this.textStr) { - // Delete bBox memo when the text changes - delete this.bBox; - - this.textStr = value; - if (this.added) { - this.renderer.buildText(this); - } - } - }, - fillSetter: function (value, key, element) { - - if (typeof value === 'string') { - element.setAttribute(key, value); - } else if (value) { - this.colorGradient(value, key, element); - } - }, - zIndexSetter: function (value, key, element) { - element.setAttribute(key, value); - this[key] = value; - }, - _defaultSetter: function (value, key, element) { - element.setAttribute(key, value); - } -}; - -// Some shared setters and getters -SVGElement.prototype.yGetter = SVGElement.prototype.xGetter; -SVGElement.prototype.translateXSetter = SVGElement.prototype.translateYSetter = - SVGElement.prototype.rotationSetter = SVGElement.prototype.verticalAlignSetter = - SVGElement.prototype.scaleXSetter = SVGElement.prototype.scaleYSetter = function (value, key) { - this[key] = value; - this.doTransform = true; -}; -SVGElement.prototype.strokeSetter = SVGElement.prototype.fillSetter; - - - -// In Chrome/Win < 6 as well as Batik, the stroke attribute can't be set when the stroke- -// width is 0. #1369 -/*SVGElement.prototype['stroke-widthSetter'] = SVGElement.prototype.strokeSetter = function (value, key) { - this[key] = value; - // Only apply the stroke attribute if the stroke width is defined and larger than 0 - if (this.stroke && this['stroke-width']) { - this.element.setAttribute('stroke', this.stroke); - this.element.setAttribute('stroke-width', this['stroke-width']); - this.hasStroke = true; - } else if (key === 'stroke-width' && value === 0 && this.hasStroke) { - this.element.removeAttribute('stroke'); - this.hasStroke = false; - } -};*/ - - -/** - * The default SVG renderer - */ -var SVGRenderer = function () { - this.init.apply(this, arguments); -}; -SVGRenderer.prototype = { - Element: SVGElement, - - /** - * Initialize the SVGRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - * @param {Boolean} forExport - */ - init: function (container, width, height, style, forExport) { - var renderer = this, - loc = location, - boxWrapper, - element, - desc; - - boxWrapper = renderer.createElement('svg') - .attr({ - version: '1.1' - }) - .css(this.getStyle(style)); - element = boxWrapper.element; - container.appendChild(element); - - // For browsers other than IE, add the namespace attribute (#1978) - if (container.innerHTML.indexOf('xmlns') === -1) { - attr(element, 'xmlns', SVG_NS); - } - - // object properties - renderer.isSVG = true; - renderer.box = element; - renderer.boxWrapper = boxWrapper; - renderer.alignedObjects = []; - - // Page url used for internal references. #24, #672, #1070 - renderer.url = (isFirefox || isWebKit) && doc.getElementsByTagName('base').length ? - loc.href - .replace(/#.*?$/, '') // remove the hash - .replace(/([\('\)])/g, '\\$1') // escape parantheses and quotes - .replace(/ /g, '%20') : // replace spaces (needed for Safari only) - ''; - - // Add description - desc = this.createElement('desc').add(); - desc.element.appendChild(doc.createTextNode('Created with ' + PRODUCT + ' ' + VERSION)); - - - renderer.defs = this.createElement('defs').add(); - renderer.forExport = forExport; - renderer.gradients = {}; // Object where gradient SvgElements are stored - renderer.cache = {}; // Cache for numerical bounding boxes - - renderer.setSize(width, height, false); - - - - // Issue 110 workaround: - // In Firefox, if a div is positioned by percentage, its pixel position may land - // between pixels. The container itself doesn't display this, but an SVG element - // inside this container will be drawn at subpixel precision. In order to draw - // sharp lines, this must be compensated for. This doesn't seem to work inside - // iframes though (like in jsFiddle). - var subPixelFix, rect; - if (isFirefox && container.getBoundingClientRect) { - renderer.subPixelFix = subPixelFix = function () { - css(container, { left: 0, top: 0 }); - rect = container.getBoundingClientRect(); - css(container, { - left: (mathCeil(rect.left) - rect.left) + PX, - top: (mathCeil(rect.top) - rect.top) + PX - }); - }; - - // run the fix now - subPixelFix(); - - // run it on resize - addEvent(win, 'resize', subPixelFix); - } - }, - - getStyle: function (style) { - return (this.style = extend({ - fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif', // default font - fontSize: '12px' - }, style)); - }, - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none. #608. - */ - isHidden: function () { - return !this.boxWrapper.getBBox().width; - }, - - /** - * Destroys the renderer and its allocated members. - */ - destroy: function () { - var renderer = this, - rendererDefs = renderer.defs; - renderer.box = null; - renderer.boxWrapper = renderer.boxWrapper.destroy(); - - // Call destroy on all gradient elements - destroyObjectProperties(renderer.gradients || {}); - renderer.gradients = null; - - // Defs are null in VMLRenderer - // Otherwise, destroy them here. - if (rendererDefs) { - renderer.defs = rendererDefs.destroy(); - } - - // Remove sub pixel fix handler - // We need to check that there is a handler, otherwise all functions that are registered for event 'resize' are removed - // See issue #982 - if (renderer.subPixelFix) { - removeEvent(win, 'resize', renderer.subPixelFix); - } - - renderer.alignedObjects = null; - - return null; - }, - - /** - * Create a wrapper for an SVG element - * @param {Object} nodeName - */ - createElement: function (nodeName) { - var wrapper = new this.Element(); - wrapper.init(this, nodeName); - return wrapper; - }, - - /** - * Dummy function for use in canvas renderer - */ - draw: function () {}, - - /** - * Parse a simple HTML string into SVG tspans - * - * @param {Object} textNode The parent text SVG node - */ - buildText: function (wrapper) { - var textNode = wrapper.element, - renderer = this, - forExport = renderer.forExport, - textStr = pick(wrapper.textStr, '').toString(), - hasMarkup = textStr.indexOf('<') !== -1, - lines, - childNodes = textNode.childNodes, - styleRegex, - hrefRegex, - parentX = attr(textNode, 'x'), - textStyles = wrapper.styles, - width = wrapper.textWidth, - textLineHeight = textStyles && textStyles.lineHeight, - i = childNodes.length, - getLineHeight = function (tspan) { - return textLineHeight ? - pInt(textLineHeight) : - renderer.fontMetrics( - /(px|em)$/.test(tspan && tspan.style.fontSize) ? - tspan.style.fontSize : - ((textStyles && textStyles.fontSize) || renderer.style.fontSize || 12) - ).h; - }; - - /// remove old text - while (i--) { - textNode.removeChild(childNodes[i]); - } - - // Skip tspans, add text directly to text node - if (!hasMarkup && textStr.indexOf(' ') === -1) { - textNode.appendChild(doc.createTextNode(textStr)); - return; - - // Complex strings, add more logic - } else { - - styleRegex = /<.*style="([^"]+)".*>/; - hrefRegex = /<.*href="(http[^"]+)".*>/; - - if (width && !wrapper.added) { - this.box.appendChild(textNode); // attach it to the DOM to read offset width - } - - if (hasMarkup) { - lines = textStr - .replace(/<(b|strong)>/g, '') - .replace(/<(i|em)>/g, '') - .replace(/
/g, '') - .split(//g); - - } else { - lines = [textStr]; - } - - - // remove empty line at end - if (lines[lines.length - 1] === '') { - lines.pop(); - } - - - // build the lines - each(lines, function (line, lineNo) { - var spans, spanNo = 0; - - line = line.replace(//g, '|||'); - spans = line.split('|||'); - - each(spans, function (span) { - if (span !== '' || spans.length === 1) { - var attributes = {}, - tspan = doc.createElementNS(SVG_NS, 'tspan'), - spanStyle; // #390 - if (styleRegex.test(span)) { - spanStyle = span.match(styleRegex)[1].replace(/(;| |^)color([ :])/, '$1fill$2'); - attr(tspan, 'style', spanStyle); - } - if (hrefRegex.test(span) && !forExport) { // Not for export - #1529 - attr(tspan, 'onclick', 'location.href=\"' + span.match(hrefRegex)[1] + '\"'); - css(tspan, { cursor: 'pointer' }); - } - - span = (span.replace(/<(.|\n)*?>/g, '') || ' ') - .replace(/</g, '<') - .replace(/>/g, '>'); - - // Nested tags aren't supported, and cause crash in Safari (#1596) - if (span !== ' ') { - - // add the text node - tspan.appendChild(doc.createTextNode(span)); - - if (!spanNo) { // first span in a line, align it to the left - if (lineNo && parentX !== null) { - attributes.x = parentX; - } - } else { - attributes.dx = 0; // #16 - } - - // add attributes - attr(tspan, attributes); - - // first span on subsequent line, add the line height - if (!spanNo && lineNo) { - - // allow getting the right offset height in exporting in IE - if (!hasSVG && forExport) { - css(tspan, { display: 'block' }); - } - - // Set the line height based on the font size of either - // the text element or the tspan element - attr( - tspan, - 'dy', - getLineHeight(tspan), - // Safari 6.0.2 - too optimized for its own good (#1539) - // TODO: revisit this with future versions of Safari - isWebKit && tspan.offsetHeight - ); - } - - // Append it - textNode.appendChild(tspan); - - spanNo++; - - // check width and apply soft breaks - if (width) { - var words = span.replace(/([^\^])-/g, '$1- ').split(' '), // #1273 - hasWhiteSpace = words.length > 1 && textStyles.whiteSpace !== 'nowrap', - tooLong, - actualWidth, - clipHeight = wrapper._clipHeight, - rest = [], - dy = getLineHeight(), - softLineNo = 1, - bBox; - - while (hasWhiteSpace && (words.length || rest.length)) { - delete wrapper.bBox; // delete cache - bBox = wrapper.getBBox(); - actualWidth = bBox.width; - - // Old IE cannot measure the actualWidth for SVG elements (#2314) - if (!hasSVG && renderer.forExport) { - actualWidth = renderer.measureSpanWidth(tspan.firstChild.data, wrapper.styles); - } - - tooLong = actualWidth > width; - if (!tooLong || words.length === 1) { // new line needed - words = rest; - rest = []; - if (words.length) { - softLineNo++; - - if (clipHeight && softLineNo * dy > clipHeight) { - words = ['...']; - wrapper.attr('title', wrapper.textStr); - } else { - - tspan = doc.createElementNS(SVG_NS, 'tspan'); - attr(tspan, { - dy: dy, - x: parentX - }); - if (spanStyle) { // #390 - attr(tspan, 'style', spanStyle); - } - textNode.appendChild(tspan); - - if (actualWidth > width) { // a single word is pressing it out - width = actualWidth; - } - } - } - } else { // append to existing line tspan - tspan.removeChild(tspan.firstChild); - rest.unshift(words.pop()); - } - if (words.length) { - tspan.appendChild(doc.createTextNode(words.join(' ').replace(/- /g, '-'))); - } - } - } - } - } - }); - }); - } - }, - - /** - * Create a button with preset states - * @param {String} text - * @param {Number} x - * @param {Number} y - * @param {Function} callback - * @param {Object} normalState - * @param {Object} hoverState - * @param {Object} pressedState - */ - button: function (text, x, y, callback, normalState, hoverState, pressedState, disabledState, shape) { - var label = this.label(text, x, y, shape, null, null, null, null, 'button'), - curState = 0, - stateOptions, - stateStyle, - normalStyle, - hoverStyle, - pressedStyle, - disabledStyle, - verticalGradient = { x1: 0, y1: 0, x2: 0, y2: 1 }; - - // Normal state - prepare the attributes - normalState = merge({ - 'stroke-width': 1, - stroke: '#CCCCCC', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FEFEFE'], - [1, '#F6F6F6'] - ] - }, - r: 2, - padding: 5, - style: { - color: 'black' - } - }, normalState); - normalStyle = normalState.style; - delete normalState.style; - - // Hover state - hoverState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#FFF'], - [1, '#ACF'] - ] - } - }, hoverState); - hoverStyle = hoverState.style; - delete hoverState.style; - - // Pressed state - pressedState = merge(normalState, { - stroke: '#68A', - fill: { - linearGradient: verticalGradient, - stops: [ - [0, '#9BD'], - [1, '#CDF'] - ] - } - }, pressedState); - pressedStyle = pressedState.style; - delete pressedState.style; - - // Disabled state - disabledState = merge(normalState, { - style: { - color: '#CCC' - } - }, disabledState); - disabledStyle = disabledState.style; - delete disabledState.style; - - // Add the events. IE9 and IE10 need mouseover and mouseout to funciton (#667). - addEvent(label.element, isIE ? 'mouseover' : 'mouseenter', function () { - if (curState !== 3) { - label.attr(hoverState) - .css(hoverStyle); - } - }); - addEvent(label.element, isIE ? 'mouseout' : 'mouseleave', function () { - if (curState !== 3) { - stateOptions = [normalState, hoverState, pressedState][curState]; - stateStyle = [normalStyle, hoverStyle, pressedStyle][curState]; - label.attr(stateOptions) - .css(stateStyle); - } - }); - - label.setState = function (state) { - label.state = curState = state; - if (!state) { - label.attr(normalState) - .css(normalStyle); - } else if (state === 2) { - label.attr(pressedState) - .css(pressedStyle); - } else if (state === 3) { - label.attr(disabledState) - .css(disabledStyle); - } - }; - - return label - .on('click', function () { - if (curState !== 3) { - callback.call(label); - } - }) - .attr(normalState) - .css(extend({ cursor: 'default' }, normalStyle)); - }, - - /** - * Make a straight line crisper by not spilling out to neighbour pixels - * @param {Array} points - * @param {Number} width - */ - crispLine: function (points, width) { - // points format: [M, 0, 0, L, 100, 0] - // normalize to a crisp line - if (points[1] === points[4]) { - // Substract due to #1129. Now bottom and left axis gridlines behave the same. - points[1] = points[4] = mathRound(points[1]) - (width % 2 / 2); - } - if (points[2] === points[5]) { - points[2] = points[5] = mathRound(points[2]) + (width % 2 / 2); - } - return points; - }, - - - /** - * Draw a path - * @param {Array} path An SVG path in array form - */ - path: function (path) { - var attr = { - fill: NONE - }; - if (isArray(path)) { - attr.d = path; - } else if (isObject(path)) { // attributes - extend(attr, path); - } - return this.createElement('path').attr(attr); - }, - - /** - * Draw and return an SVG circle - * @param {Number} x The x position - * @param {Number} y The y position - * @param {Number} r The radius - */ - circle: function (x, y, r) { - var attr = isObject(x) ? - x : - { - x: x, - y: y, - r: r - }, - wrapper = this.createElement('circle'); - - wrapper.xSetter = function (value) { - this.element.setAttribute('cx', value); - }; - wrapper.ySetter = function (value) { - this.element.setAttribute('cy', value); - }; - return wrapper.attr(attr); - }, - - /** - * Draw and return an arc - * @param {Number} x X position - * @param {Number} y Y position - * @param {Number} r Radius - * @param {Number} innerR Inner radius like used in donut charts - * @param {Number} start Starting angle - * @param {Number} end Ending angle - */ - arc: function (x, y, r, innerR, start, end) { - var arc; - - if (isObject(x)) { - y = x.y; - r = x.r; - innerR = x.innerR; - start = x.start; - end = x.end; - x = x.x; - } - - // Arcs are defined as symbols for the ability to set - // attributes in attr and animate - arc = this.symbol('arc', x || 0, y || 0, r || 0, r || 0, { - innerR: innerR || 0, - start: start || 0, - end: end || 0 - }); - arc.r = r; // #959 - return arc; - }, - - /** - * Draw and return a rectangle - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Number} width - * @param {Number} height - * @param {Number} r Border corner radius - * @param {Number} strokeWidth A stroke width can be supplied to allow crisp drawing - */ - rect: function (x, y, width, height, r, strokeWidth) { - - r = isObject(x) ? x.r : r; - - var wrapper = this.createElement('rect'), - attribs = isObject(x) ? x : x === UNDEFINED ? {} : { - x: x, - y: y, - width: mathMax(width, 0), - height: mathMax(height, 0) - }; - - if (strokeWidth !== UNDEFINED) { - attribs.strokeWidth = strokeWidth; - attribs = wrapper.crisp(attribs); - } - - if (r) { - attribs.r = r; - } - - wrapper.rSetter = function (value) { - attr(this.element, { - rx: value, - ry: value - }); - }; - - return wrapper.attr(attribs); - }, - - /** - * Resize the box and re-align all aligned elements - * @param {Object} width - * @param {Object} height - * @param {Boolean} animate - * - */ - setSize: function (width, height, animate) { - var renderer = this, - alignedObjects = renderer.alignedObjects, - i = alignedObjects.length; - - renderer.width = width; - renderer.height = height; - - renderer.boxWrapper[pick(animate, true) ? 'animate' : 'attr']({ - width: width, - height: height - }); - - while (i--) { - alignedObjects[i].align(); - } - }, - - /** - * Create a group - * @param {String} name The group will be given a class name of 'highcharts-{name}'. - * This can be used for styling and scripting. - */ - g: function (name) { - var elem = this.createElement('g'); - return defined(name) ? elem.attr({ 'class': PREFIX + name }) : elem; - }, - - /** - * Display an image - * @param {String} src - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - image: function (src, x, y, width, height) { - var attribs = { - preserveAspectRatio: NONE - }, - elemWrapper; - - // optional properties - if (arguments.length > 1) { - extend(attribs, { - x: x, - y: y, - width: width, - height: height - }); - } - - elemWrapper = this.createElement('image').attr(attribs); - - // set the href in the xlink namespace - if (elemWrapper.element.setAttributeNS) { - elemWrapper.element.setAttributeNS('http://www.w3.org/1999/xlink', - 'href', src); - } else { - // could be exporting in IE - // using href throws "not supported" in ie7 and under, requries regex shim to fix later - elemWrapper.element.setAttribute('hc-svg-href', src); - } - - return elemWrapper; - }, - - /** - * Draw a symbol out of pre-defined shape paths from the namespace 'symbol' object. - * - * @param {Object} symbol - * @param {Object} x - * @param {Object} y - * @param {Object} radius - * @param {Object} options - */ - symbol: function (symbol, x, y, width, height, options) { - - var obj, - - // get the symbol definition function - symbolFn = this.symbols[symbol], - - // check if there's a path defined for this symbol - path = symbolFn && symbolFn( - mathRound(x), - mathRound(y), - width, - height, - options - ), - - imageElement, - imageRegex = /^url\((.*?)\)$/, - imageSrc, - imageSize, - centerImage; - - if (path) { - - obj = this.path(path); - // expando properties for use in animate and attr - extend(obj, { - symbolName: symbol, - x: x, - y: y, - width: width, - height: height - }); - if (options) { - extend(obj, options); - } - - - // image symbols - } else if (imageRegex.test(symbol)) { - - // On image load, set the size and position - centerImage = function (img, size) { - if (img.element) { // it may be destroyed in the meantime (#1390) - img.attr({ - width: size[0], - height: size[1] - }); - - if (!img.alignByTranslate) { // #185 - img.translate( - mathRound((width - size[0]) / 2), // #1378 - mathRound((height - size[1]) / 2) - ); - } - } - }; - - imageSrc = symbol.match(imageRegex)[1]; - imageSize = symbolSizes[imageSrc]; - - // Ireate the image synchronously, add attribs async - obj = this.image(imageSrc) - .attr({ - x: x, - y: y - }); - obj.isImg = true; - - if (imageSize) { - centerImage(obj, imageSize); - } else { - // Initialize image to be 0 size so export will still function if there's no cached sizes. - // - obj.attr({ width: 0, height: 0 }); - - // Create a dummy JavaScript image to get the width and height. Due to a bug in IE < 8, - // the created element must be assigned to a variable in order to load (#292). - imageElement = createElement('img', { - onload: function () { - centerImage(obj, symbolSizes[imageSrc] = [this.width, this.height]); - }, - src: imageSrc - }); - } - } - - return obj; - }, - - /** - * An extendable collection of functions for defining symbol paths. - */ - symbols: { - 'circle': function (x, y, w, h) { - var cpw = 0.166 * w; - return [ - M, x + w / 2, y, - 'C', x + w + cpw, y, x + w + cpw, y + h, x + w / 2, y + h, - 'C', x - cpw, y + h, x - cpw, y, x + w / 2, y, - 'Z' - ]; - }, - - 'square': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h, - x, y + h, - 'Z' - ]; - }, - - 'triangle-down': function (x, y, w, h) { - return [ - M, x, y, - L, x + w, y, - x + w / 2, y + h, - 'Z' - ]; - }, - 'diamond': function (x, y, w, h) { - return [ - M, x + w / 2, y, - L, x + w, y + h / 2, - x + w / 2, y + h, - x, y + h / 2, - 'Z' - ]; - }, - 'arc': function (x, y, w, h, options) { - var start = options.start, - radius = options.r || w || h, - end = options.end - 0.001, // to prevent cos and sin of start and end from becoming equal on 360 arcs (related: #1561) - innerRadius = options.innerR, - open = options.open, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - longArc = options.end - start < mathPI ? 0 : 1; - - return [ - M, - x + radius * cosStart, - y + radius * sinStart, - 'A', // arcTo - radius, // x radius - radius, // y radius - 0, // slanting - longArc, // long or short arc - 1, // clockwise - x + radius * cosEnd, - y + radius * sinEnd, - open ? M : L, - x + innerRadius * cosEnd, - y + innerRadius * sinEnd, - 'A', // arcTo - innerRadius, // x radius - innerRadius, // y radius - 0, // slanting - longArc, // long or short arc - 0, // clockwise - x + innerRadius * cosStart, - y + innerRadius * sinStart, - - open ? '' : 'Z' // close - ]; - }, - - /** - * Callout shape used for default tooltips, also used for rounded rectangles in VML - */ - callout: function (x, y, w, h, options) { - var arrowLength = 6, - halfDistance = 6, - r = mathMin((options && options.r) || 0, w, h), - safeDistance = r + halfDistance, - anchorX = options && options.anchorX, - anchorY = options && options.anchorY, - path, - normalizer = mathRound(options.strokeWidth || 0) % 2 / 2; // mathRound because strokeWidth can sometimes have roundoff errors; - - x += normalizer; - y += normalizer; - path = [ - 'M', x + r, y, - 'L', x + w - r, y, // top side - 'C', x + w, y, x + w, y, x + w, y + r, // top-right corner - 'L', x + w, y + h - r, // right side - 'C', x + w, y + h, x + w, y + h, x + w - r, y + h, // bottom-right corner - 'L', x + r, y + h, // bottom side - 'C', x, y + h, x, y + h, x, y + h - r, // bottom-left corner - 'L', x, y + r, // left side - 'C', x, y, x, y, x + r, y // top-right corner - ]; - - if (anchorX && anchorX > w && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace right side - path.splice(13, 3, - 'L', x + w, anchorY - halfDistance, - x + w + arrowLength, anchorY, - x + w, anchorY + halfDistance, - x + w, y + h - r - ); - } else if (anchorX && anchorX < 0 && anchorY > y + safeDistance && anchorY < y + h - safeDistance) { // replace left side - path.splice(33, 3, - 'L', x, anchorY + halfDistance, - x - arrowLength, anchorY, - x, anchorY - halfDistance, - x, y + r - ); - } else if (anchorY && anchorY > h && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace bottom - path.splice(23, 3, - 'L', anchorX + halfDistance, y + h, - anchorX, y + h + arrowLength, - anchorX - halfDistance, y + h, - x + r, y + h - ); - } else if (anchorY && anchorY < 0 && anchorX > x + safeDistance && anchorX < x + w - safeDistance) { // replace top - path.splice(3, 3, - 'L', anchorX - halfDistance, y, - anchorX, y - arrowLength, - anchorX + halfDistance, y, - w - r, y - ); - } - return path; - } - }, - - /** - * Define a clipping rectangle - * @param {String} id - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - var wrapper, - id = PREFIX + idCounter++, - - clipPath = this.createElement('clipPath').attr({ - id: id - }).add(this.defs); - - wrapper = this.rect(x, y, width, height, 0).add(clipPath); - wrapper.id = id; - wrapper.clipPath = clipPath; - - return wrapper; - }, - - - - - - /** - * Add text to the SVG object - * @param {String} str - * @param {Number} x Left position - * @param {Number} y Top position - * @param {Boolean} useHTML Use HTML to render the text - */ - text: function (str, x, y, useHTML) { - - // declare variables - var renderer = this, - fakeSVG = useCanVG || (!hasSVG && renderer.forExport), - wrapper, - attr = {}; - - if (useHTML && !renderer.forExport) { - return renderer.html(str, x, y); - } - - attr.x = Math.round(x || 0); // X is always needed for line-wrap logic - if (y) { - attr.y = Math.round(y); - } - if (str || str === 0) { - attr.text = str; - } - - wrapper = renderer.createElement('text') - .attr(attr); - - // Prevent wrapping from creating false offsetWidths in export in legacy IE (#1079, #1063) - if (fakeSVG) { - wrapper.css({ - position: ABSOLUTE - }); - } - - if (!useHTML) { - wrapper.xSetter = function (value, key, element) { - var childNodes = element.childNodes, - child, - i; - for (i = 1; i < childNodes.length; i++) { - child = childNodes[i]; - // if the x values are equal, the tspan represents a linebreak - if (child.getAttribute('x') === element.getAttribute('x')) { - child.setAttribute('x', value); - } - } - element.setAttribute(key, value); - }; - } - - return wrapper; - }, - - /** - * Utility to return the baseline offset and total line height from the font size - */ - fontMetrics: function (fontSize) { - fontSize = fontSize || this.style.fontSize; - fontSize = /px/.test(fontSize) ? pInt(fontSize) : /em/.test(fontSize) ? parseFloat(fontSize) * 12 : 12; - - // Empirical values found by comparing font size and bounding box height. - // Applies to the default font family. http://jsfiddle.net/highcharts/7xvn7/ - var lineHeight = fontSize < 24 ? fontSize + 4 : mathRound(fontSize * 1.2), - baseline = mathRound(lineHeight * 0.8); - - return { - h: lineHeight, - b: baseline - }; - }, - - /** - * Add a label, a text item that can hold a colored or gradient background - * as well as a border and shadow. - * @param {string} str - * @param {Number} x - * @param {Number} y - * @param {String} shape - * @param {Number} anchorX In case the shape has a pointer, like a flag, this is the - * coordinates it should be pinned to - * @param {Number} anchorY - * @param {Boolean} baseline Whether to position the label relative to the text baseline, - * like renderer.text, or to the upper border of the rectangle. - * @param {String} className Class name for the group - */ - label: function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) { - - var renderer = this, - wrapper = renderer.g(className), - text = renderer.text('', 0, 0, useHTML) - .attr({ - zIndex: 1 - }), - //.add(wrapper), - box, - bBox, - alignFactor = 0, - padding = 3, - paddingLeft = 0, - width, - height, - wrapperX, - wrapperY, - crispAdjust = 0, - deferredAttr = {}, - baselineOffset, - needsBox; - - /** - * This function runs after the label is added to the DOM (when the bounding box is - * available), and after the text of the label is updated to detect the new bounding - * box and reflect it in the border box. - */ - function updateBoxSize() { - var boxX, - boxY, - style = text.element.style; - - bBox = (width === undefined || height === undefined || wrapper.styles.textAlign) && text.textStr && - text.getBBox(); - wrapper.width = (width || bBox.width || 0) + 2 * padding + paddingLeft; - wrapper.height = (height || bBox.height || 0) + 2 * padding; - - // update the label-scoped y offset - baselineOffset = padding + renderer.fontMetrics(style && style.fontSize).b; - - - if (needsBox) { - - // create the border box if it is not already present - if (!box) { - boxX = mathRound(-alignFactor * padding); - boxY = baseline ? -baselineOffset : 0; - - wrapper.box = box = shape ? - renderer.symbol(shape, boxX, boxY, wrapper.width, wrapper.height, deferredAttr) : - renderer.rect(boxX, boxY, wrapper.width, wrapper.height, 0, deferredAttr[STROKE_WIDTH]); - box.attr('fill', NONE).add(wrapper); - } - - // apply the box attributes - if (!box.isImg) { // #1630 - box.attr(extend({ - width: mathRound(wrapper.width), - height: mathRound(wrapper.height) - }, deferredAttr)); - } - deferredAttr = null; - } - } - - /** - * This function runs after setting text or padding, but only if padding is changed - */ - function updateTextPadding() { - var styles = wrapper.styles, - textAlign = styles && styles.textAlign, - x = paddingLeft + padding * (1 - alignFactor), - y; - - // determin y based on the baseline - y = baseline ? 0 : baselineOffset; - - // compensate for alignment - if (defined(width) && bBox && (textAlign === 'center' || textAlign === 'right')) { - x += { center: 0.5, right: 1 }[textAlign] * (width - bBox.width); - } - - // update if anything changed - if (x !== text.x || y !== text.y) { - text.attr('x', x); - if (y !== UNDEFINED) { - text.attr('y', y); - } - } - - // record current values - text.x = x; - text.y = y; - } - - /** - * Set a box attribute, or defer it if the box is not yet created - * @param {Object} key - * @param {Object} value - */ - function boxAttr(key, value) { - if (box) { - box.attr(key, value); - } else { - deferredAttr[key] = value; - } - } - - /** - * After the text element is added, get the desired size of the border box - * and add it before the text in the DOM. - */ - wrapper.onAdd = function () { - text.add(wrapper); - wrapper.attr({ - text: str || '', // alignment is available now - x: x, - y: y - }); - - if (box && defined(anchorX)) { - wrapper.attr({ - anchorX: anchorX, - anchorY: anchorY - }); - } - }; - - /* - * Add specific attribute setters. - */ - - // only change local variables - wrapper.widthSetter = function (value) { - width = value; - }; - wrapper.heightSetter = function (value) { - height = value; - }; - wrapper.paddingSetter = function (value) { - if (defined(value) && value !== padding) { - padding = value; - updateTextPadding(); - } - }; - wrapper.paddingLeftSetter = function (value) { - if (defined(value) && value !== paddingLeft) { - paddingLeft = value; - updateTextPadding(); - } - }; - - - // change local variable and prevent setting attribute on the group - wrapper.alignSetter = function (value) { - alignFactor = { left: 0, center: 0.5, right: 1 }[value]; - }; - - // apply these to the box and the text alike - wrapper.textSetter = function (value) { - if (value !== UNDEFINED) { - text.textSetter(value); - } - updateBoxSize(); - updateTextPadding(); - }; - - // apply these to the box but not to the text - wrapper['stroke-widthSetter'] = function (value, key) { - if (value) { - needsBox = true; - } - crispAdjust = value % 2 / 2; - boxAttr(key, value); - }; - wrapper.strokeSetter = wrapper.fillSetter = wrapper.rSetter = function (value, key) { - if (key === 'fill' && value) { - needsBox = true; - } - boxAttr(key, value); - }; - wrapper.anchorXSetter = function (value, key) { - anchorX = value; - boxAttr(key, value + crispAdjust - wrapperX); - }; - wrapper.anchorYSetter = function (value, key) { - anchorY = value; - boxAttr(key, value - wrapperY); - }; - - // rename attributes - wrapper.xSetter = function (value) { - wrapper.x = value; // for animation getter - if (alignFactor) { - value -= alignFactor * ((width || bBox.width) + padding); - } - wrapperX = mathRound(value); - wrapper.attr('translateX', wrapperX); - }; - wrapper.ySetter = function (value) { - wrapperY = wrapper.y = mathRound(value); - wrapper.attr('translateY', wrapperY); - }; - - // Redirect certain methods to either the box or the text - var baseCss = wrapper.css; - return extend(wrapper, { - /** - * Pick up some properties and apply them to the text instead of the wrapper - */ - css: function (styles) { - if (styles) { - var textStyles = {}; - styles = merge(styles); // create a copy to avoid altering the original object (#537) - each(['fontSize', 'fontWeight', 'fontFamily', 'color', 'lineHeight', 'width', 'textDecoration', 'textShadow'], function (prop) { - if (styles[prop] !== UNDEFINED) { - textStyles[prop] = styles[prop]; - delete styles[prop]; - } - }); - text.css(textStyles); - } - return baseCss.call(wrapper, styles); - }, - /** - * Return the bounding box of the box, not the group - */ - getBBox: function () { - return { - width: bBox.width + 2 * padding, - height: bBox.height + 2 * padding, - x: bBox.x - padding, - y: bBox.y - padding - }; - }, - /** - * Apply the shadow to the box - */ - shadow: function (b) { - if (box) { - box.shadow(b); - } - return wrapper; - }, - /** - * Destroy and release memory. - */ - destroy: function () { - - // Added by button implementation - removeEvent(wrapper.element, 'mouseenter'); - removeEvent(wrapper.element, 'mouseleave'); - - if (text) { - text = text.destroy(); - } - if (box) { - box = box.destroy(); - } - // Call base implementation to destroy the rest - SVGElement.prototype.destroy.call(wrapper); - - // Release local pointers (#1298) - wrapper = renderer = updateBoxSize = updateTextPadding = boxAttr = null; - } - }); - } -}; // end SVGRenderer - - -// general renderer -Renderer = SVGRenderer; -// extend SvgElement for useHTML option -extend(SVGElement.prototype, { - /** - * Apply CSS to HTML elements. This is used in text within SVG rendering and - * by the VML renderer - */ - htmlCss: function (styles) { - var wrapper = this, - element = wrapper.element, - textWidth = styles && element.tagName === 'SPAN' && styles.width; - - if (textWidth) { - delete styles.width; - wrapper.textWidth = textWidth; - wrapper.updateTransform(); - } - - wrapper.styles = extend(wrapper.styles, styles); - css(wrapper.element, styles); - - return wrapper; - }, - - /** - * VML and useHTML method for calculating the bounding box based on offsets - * @param {Boolean} refresh Whether to force a fresh value from the DOM or to - * use the cached value - * - * @return {Object} A hash containing values for x, y, width and height - */ - - htmlGetBBox: function () { - var wrapper = this, - element = wrapper.element, - bBox = wrapper.bBox; - - // faking getBBox in exported SVG in legacy IE - if (!bBox) { - // faking getBBox in exported SVG in legacy IE (is this a duplicate of the fix for #1079?) - if (element.nodeName === 'text') { - element.style.position = ABSOLUTE; - } - - bBox = wrapper.bBox = { - x: element.offsetLeft, - y: element.offsetTop, - width: element.offsetWidth, - height: element.offsetHeight - }; - } - - return bBox; - }, - - /** - * VML override private method to update elements based on internal - * properties based on SVG transform - */ - htmlUpdateTransform: function () { - // aligning non added elements is expensive - if (!this.added) { - this.alignOnAdd = true; - return; - } - - var wrapper = this, - renderer = wrapper.renderer, - elem = wrapper.element, - translateX = wrapper.translateX || 0, - translateY = wrapper.translateY || 0, - x = wrapper.x || 0, - y = wrapper.y || 0, - align = wrapper.textAlign || 'left', - alignCorrection = { left: 0, center: 0.5, right: 1 }[align], - shadows = wrapper.shadows; - - // apply translate - css(elem, { - marginLeft: translateX, - marginTop: translateY - }); - if (shadows) { // used in labels/tooltip - each(shadows, function (shadow) { - css(shadow, { - marginLeft: translateX + 1, - marginTop: translateY + 1 - }); - }); - } - - // apply inversion - if (wrapper.inverted) { // wrapper is a group - each(elem.childNodes, function (child) { - renderer.invertChild(child, elem); - }); - } - - if (elem.tagName === 'SPAN') { - - var width, - rotation = wrapper.rotation, - baseline, - textWidth = pInt(wrapper.textWidth), - currentTextTransform = [rotation, align, elem.innerHTML, wrapper.textWidth].join(','); - - if (currentTextTransform !== wrapper.cTT) { // do the calculations and DOM access only if properties changed - - - baseline = renderer.fontMetrics(elem.style.fontSize).b; - - // Renderer specific handling of span rotation - if (defined(rotation)) { - wrapper.setSpanRotation(rotation, alignCorrection, baseline); - } - - width = pick(wrapper.elemWidth, elem.offsetWidth); - - // Update textWidth - if (width > textWidth && /[ \-]/.test(elem.textContent || elem.innerText)) { // #983, #1254 - css(elem, { - width: textWidth + PX, - display: 'block', - whiteSpace: 'normal' - }); - width = textWidth; - } - - wrapper.getSpanCorrection(width, baseline, alignCorrection, rotation, align); - } - - // apply position with correction - css(elem, { - left: (x + (wrapper.xCorr || 0)) + PX, - top: (y + (wrapper.yCorr || 0)) + PX - }); - - // force reflow in webkit to apply the left and top on useHTML element (#1249) - if (isWebKit) { - baseline = elem.offsetHeight; // assigned to baseline for JSLint purpose - } - - // record current text transform - wrapper.cTT = currentTextTransform; - } - }, - - /** - * Set the rotation of an individual HTML span - */ - setSpanRotation: function (rotation, alignCorrection, baseline) { - var rotationStyle = {}, - cssTransformKey = isIE ? '-ms-transform' : isWebKit ? '-webkit-transform' : isFirefox ? 'MozTransform' : isOpera ? '-o-transform' : ''; - - rotationStyle[cssTransformKey] = rotationStyle.transform = 'rotate(' + rotation + 'deg)'; - rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin = (alignCorrection * 100) + '% ' + baseline + 'px'; - css(this.element, rotationStyle); - }, - - /** - * Get the correction in X and Y positioning as the element is rotated. - */ - getSpanCorrection: function (width, baseline, alignCorrection) { - this.xCorr = -width * alignCorrection; - this.yCorr = -baseline; - } -}); - -// Extend SvgRenderer for useHTML option. -extend(SVGRenderer.prototype, { - /** - * Create HTML text node. This is used by the VML renderer as well as the SVG - * renderer through the useHTML option. - * - * @param {String} str - * @param {Number} x - * @param {Number} y - */ - html: function (str, x, y) { - var wrapper = this.createElement('span'), - element = wrapper.element, - renderer = wrapper.renderer; - - // Text setter - wrapper.textSetter = function (value) { - if (value !== element.innerHTML) { - delete this.bBox; - } - element.innerHTML = this.textStr = value; - }; - - // Various setters which rely on update transform - wrapper.xSetter = wrapper.ySetter = wrapper.alignSetter = wrapper.rotationSetter = function (value, key) { - if (key === 'align') { - key = 'textAlign'; // Do not overwrite the SVGElement.align method. Same as VML. - } - wrapper[key] = value; - wrapper.htmlUpdateTransform(); - }; - - // Set the default attributes - wrapper.attr({ - text: str, - x: mathRound(x), - y: mathRound(y) - }) - .css({ - position: ABSOLUTE, - whiteSpace: 'nowrap', - fontFamily: this.style.fontFamily, - fontSize: this.style.fontSize - }); - - // Use the HTML specific .css method - wrapper.css = wrapper.htmlCss; - - // This is specific for HTML within SVG - if (renderer.isSVG) { - wrapper.add = function (svgGroupWrapper) { - - var htmlGroup, - container = renderer.box.parentNode, - parentGroup, - parents = []; - - this.parentGroup = svgGroupWrapper; - - // Create a mock group to hold the HTML elements - if (svgGroupWrapper) { - htmlGroup = svgGroupWrapper.div; - if (!htmlGroup) { - - // Read the parent chain into an array and read from top down - parentGroup = svgGroupWrapper; - while (parentGroup) { - - parents.push(parentGroup); - - // Move up to the next parent group - parentGroup = parentGroup.parentGroup; - } - - // Ensure dynamically updating position when any parent is translated - each(parents.reverse(), function (parentGroup) { - var htmlGroupStyle; - - // Create a HTML div and append it to the parent div to emulate - // the SVG group structure - htmlGroup = parentGroup.div = parentGroup.div || createElement(DIV, { - className: attr(parentGroup.element, 'class') - }, { - position: ABSOLUTE, - left: (parentGroup.translateX || 0) + PX, - top: (parentGroup.translateY || 0) + PX - }, htmlGroup || container); // the top group is appended to container - - // Shortcut - htmlGroupStyle = htmlGroup.style; - - // Set listeners to update the HTML div's position whenever the SVG group - // position is changed - extend(parentGroup, { - translateXSetter: function (value, key) { - htmlGroupStyle.left = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - }, - translateYSetter: function (value, key) { - htmlGroupStyle.top = value + PX; - parentGroup[key] = value; - parentGroup.doTransform = true; - }, - visibilitySetter: function (value, key) { - htmlGroupStyle[key] = value; - } - }); - }); - - } - } else { - htmlGroup = container; - } - - htmlGroup.appendChild(element); - - // Shared with VML: - wrapper.added = true; - if (wrapper.alignOnAdd) { - wrapper.htmlUpdateTransform(); - } - - return wrapper; - }; - } - return wrapper; - } -}); - -/* **************************************************************************** - * * - * START OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - * For applications and websites that don't need IE support, like platform * - * targeted mobile apps and web apps, this code can be removed. * - * * - *****************************************************************************/ - -/** - * @constructor - */ -var VMLRenderer, VMLElement; -if (!hasSVG && !useCanVG) { - -/** - * The VML element wrapper. - */ -Highcharts.VMLElement = VMLElement = { - - /** - * Initialize a new VML element wrapper. It builds the markup as a string - * to minimize DOM traffic. - * @param {Object} renderer - * @param {Object} nodeName - */ - init: function (renderer, nodeName) { - var wrapper = this, - markup = ['<', nodeName, ' filled="f" stroked="f"'], - style = ['position: ', ABSOLUTE, ';'], - isDiv = nodeName === DIV; - - // divs and shapes need size - if (nodeName === 'shape' || isDiv) { - style.push('left:0;top:0;width:1px;height:1px;'); - } - style.push('visibility: ', isDiv ? HIDDEN : VISIBLE); - - markup.push(' style="', style.join(''), '"/>'); - - // create element with default attributes and style - if (nodeName) { - markup = isDiv || nodeName === 'span' || nodeName === 'img' ? - markup.join('') - : renderer.prepVML(markup); - wrapper.element = createElement(markup); - } - - wrapper.renderer = renderer; - }, - - /** - * Add the node to the given parent - * @param {Object} parent - */ - add: function (parent) { - var wrapper = this, - renderer = wrapper.renderer, - element = wrapper.element, - box = renderer.box, - inverted = parent && parent.inverted, - - // get the parent node - parentNode = parent ? - parent.element || parent : - box; - - - // if the parent group is inverted, apply inversion on all children - if (inverted) { // only on groups - renderer.invertChild(element, parentNode); - } - - // append it - parentNode.appendChild(element); - - // align text after adding to be able to read offset - wrapper.added = true; - if (wrapper.alignOnAdd && !wrapper.deferUpdateTransform) { - wrapper.updateTransform(); - } - - // fire an event for internal hooks - if (wrapper.onAdd) { - wrapper.onAdd(); - } - - return wrapper; - }, - - /** - * VML always uses htmlUpdateTransform - */ - updateTransform: SVGElement.prototype.htmlUpdateTransform, - - /** - * Set the rotation of a span with oldIE's filter - */ - setSpanRotation: function () { - // Adjust for alignment and rotation. Rotation of useHTML content is not yet implemented - // but it can probably be implemented for Firefox 3.5+ on user request. FF3.5+ - // has support for CSS3 transform. The getBBox method also needs to be updated - // to compensate for the rotation, like it currently does for SVG. - // Test case: http://jsfiddle.net/highcharts/Ybt44/ - - var rotation = this.rotation, - costheta = mathCos(rotation * deg2rad), - sintheta = mathSin(rotation * deg2rad); - - css(this.element, { - filter: rotation ? ['progid:DXImageTransform.Microsoft.Matrix(M11=', costheta, - ', M12=', -sintheta, ', M21=', sintheta, ', M22=', costheta, - ', sizingMethod=\'auto expand\')'].join('') : NONE - }); - }, - - /** - * Get the positioning correction for the span after rotating. - */ - getSpanCorrection: function (width, baseline, alignCorrection, rotation, align) { - - var costheta = rotation ? mathCos(rotation * deg2rad) : 1, - sintheta = rotation ? mathSin(rotation * deg2rad) : 0, - height = pick(this.elemHeight, this.element.offsetHeight), - quad, - nonLeft = align && align !== 'left'; - - // correct x and y - this.xCorr = costheta < 0 && -width; - this.yCorr = sintheta < 0 && -height; - - // correct for baseline and corners spilling out after rotation - quad = costheta * sintheta < 0; - this.xCorr += sintheta * baseline * (quad ? 1 - alignCorrection : alignCorrection); - this.yCorr -= costheta * baseline * (rotation ? (quad ? alignCorrection : 1 - alignCorrection) : 1); - // correct for the length/height of the text - if (nonLeft) { - this.xCorr -= width * alignCorrection * (costheta < 0 ? -1 : 1); - if (rotation) { - this.yCorr -= height * alignCorrection * (sintheta < 0 ? -1 : 1); - } - css(this.element, { - textAlign: align - }); - } - }, - - /** - * Converts a subset of an SVG path definition to its VML counterpart. Takes an array - * as the parameter and returns a string. - */ - pathToVML: function (value) { - // convert paths - var i = value.length, - path = []; - - while (i--) { - - // Multiply by 10 to allow subpixel precision. - // Substracting half a pixel seems to make the coordinates - // align with SVG, but this hasn't been tested thoroughly - if (isNumber(value[i])) { - path[i] = mathRound(value[i] * 10) - 5; - } else if (value[i] === 'Z') { // close the path - path[i] = 'x'; - } else { - path[i] = value[i]; - - // When the start X and end X coordinates of an arc are too close, - // they are rounded to the same value above. In this case, substract or - // add 1 from the end X and Y positions. #186, #760, #1371, #1410. - if (value.isArc && (value[i] === 'wa' || value[i] === 'at')) { - // Start and end X - if (path[i + 5] === path[i + 7]) { - path[i + 7] += value[i + 7] > value[i + 5] ? 1 : -1; - } - // Start and end Y - if (path[i + 6] === path[i + 8]) { - path[i + 8] += value[i + 8] > value[i + 6] ? 1 : -1; - } - } - } - } - - - // Loop up again to handle path shortcuts (#2132) - /*while (i++ < path.length) { - if (path[i] === 'H') { // horizontal line to - path[i] = 'L'; - path.splice(i + 2, 0, path[i - 1]); - } else if (path[i] === 'V') { // vertical line to - path[i] = 'L'; - path.splice(i + 1, 0, path[i - 2]); - } - }*/ - return path.join(' ') || 'x'; - }, - - /** - * Set the element's clipping to a predefined rectangle - * - * @param {String} id The id of the clip rectangle - */ - clip: function (clipRect) { - var wrapper = this, - clipMembers, - cssRet; - - if (clipRect) { - clipMembers = clipRect.members; - erase(clipMembers, wrapper); // Ensure unique list of elements (#1258) - clipMembers.push(wrapper); - wrapper.destroyClip = function () { - erase(clipMembers, wrapper); - }; - cssRet = clipRect.getCSS(wrapper); - - } else { - if (wrapper.destroyClip) { - wrapper.destroyClip(); - } - cssRet = { clip: docMode8 ? 'inherit' : 'rect(auto)' }; // #1214 - } - - return wrapper.css(cssRet); - - }, - - /** - * Set styles for the element - * @param {Object} styles - */ - css: SVGElement.prototype.htmlCss, - - /** - * Removes a child either by removeChild or move to garbageBin. - * Issue 490; in VML removeChild results in Orphaned nodes according to sIEve, discardElement does not. - */ - safeRemoveChild: function (element) { - // discardElement will detach the node from its parent before attaching it - // to the garbage bin. Therefore it is important that the node is attached and have parent. - if (element.parentNode) { - discardElement(element); - } - }, - - /** - * Extend element.destroy by removing it from the clip members array - */ - destroy: function () { - if (this.destroyClip) { - this.destroyClip(); - } - - return SVGElement.prototype.destroy.apply(this); - }, - - /** - * Add an event listener. VML override for normalizing event parameters. - * @param {String} eventType - * @param {Function} handler - */ - on: function (eventType, handler) { - // simplest possible event model for internal use - this.element['on' + eventType] = function () { - var evt = win.event; - evt.target = evt.srcElement; - handler(evt); - }; - return this; - }, - - /** - * In stacked columns, cut off the shadows so that they don't overlap - */ - cutOffPath: function (path, length) { - - var len; - - path = path.split(/[ ,]/); - len = path.length; - - if (len === 9 || len === 11) { - path[len - 4] = path[len - 2] = pInt(path[len - 2]) - 10 * length; - } - return path.join(' '); - }, - - /** - * Apply a drop shadow by copying elements and giving them different strokes - * @param {Boolean|Object} shadowOptions - */ - shadow: function (shadowOptions, group, cutOff) { - var shadows = [], - i, - element = this.element, - renderer = this.renderer, - shadow, - elemStyle = element.style, - markup, - path = element.path, - strokeWidth, - modifiedPath, - shadowWidth, - shadowElementOpacity; - - // some times empty paths are not strings - if (path && typeof path.value !== 'string') { - path = 'x'; - } - modifiedPath = path; - - if (shadowOptions) { - shadowWidth = pick(shadowOptions.width, 3); - shadowElementOpacity = (shadowOptions.opacity || 0.15) / shadowWidth; - for (i = 1; i <= 3; i++) { - - strokeWidth = (shadowWidth * 2) + 1 - (2 * i); - - // Cut off shadows for stacked column items - if (cutOff) { - modifiedPath = this.cutOffPath(path.value, strokeWidth + 0.5); - } - - markup = ['']; - - shadow = createElement(renderer.prepVML(markup), - null, { - left: pInt(elemStyle.left) + pick(shadowOptions.offsetX, 1), - top: pInt(elemStyle.top) + pick(shadowOptions.offsetY, 1) - } - ); - if (cutOff) { - shadow.cutOff = strokeWidth + 1; - } - - // apply the opacity - markup = ['']; - createElement(renderer.prepVML(markup), null, null, shadow); - - - // insert it - if (group) { - group.element.appendChild(shadow); - } else { - element.parentNode.insertBefore(shadow, element); - } - - // record it - shadows.push(shadow); - - } - - this.shadows = shadows; - } - return this; - }, - updateShadows: noop, // Used in SVG only - - setAttr: function (key, value) { - if (docMode8) { // IE8 setAttribute bug - this.element[key] = value; - } else { - this.element.setAttribute(key, value); - } - }, - classSetter: function (value) { - // IE8 Standards mode has problems retrieving the className unless set like this - this.element.className = value; - }, - dashstyleSetter: function (value, key, element) { - var strokeElem = element.getElementsByTagName('stroke')[0] || - createElement(this.renderer.prepVML(['']), null, null, element); - strokeElem[key] = value || 'solid'; - this[key] = value; /* because changing stroke-width will change the dash length - and cause an epileptic effect */ - }, - dSetter: function (value, key, element) { - var i, - shadows = this.shadows; - value = value || []; - this.d = value.join(' '); // used in getter for animation - - element.path = value = this.pathToVML(value); - - // update shadows - if (shadows) { - i = shadows.length; - while (i--) { - shadows[i].path = shadows[i].cutOff ? this.cutOffPath(value, shadows[i].cutOff) : value; - } - } - this.setAttr(key, value); - }, - fillSetter: function (value, key, element) { - var nodeName = element.nodeName; - if (nodeName === 'SPAN') { // text color - element.style.color = value; - } else if (nodeName !== 'IMG') { // #1336 - element.filled = value !== NONE; - this.setAttr('fillcolor', this.renderer.color(value, element, key, this)); - } - }, - opacitySetter: noop, // Don't bother - animation is too slow and filters introduce artifacts - rotationSetter: function (value, key, element) { - var style = element.style; - this[key] = style[key] = value; // style is for #1873 - - // Correction for the 1x1 size of the shape container. Used in gauge needles. - style.left = -mathRound(mathSin(value * deg2rad) + 1) + PX; - style.top = mathRound(mathCos(value * deg2rad)) + PX; - }, - strokeSetter: function (value, key, element) { - this.setAttr('strokecolor', this.renderer.color(value, element, key)); - }, - 'stroke-widthSetter': function (value, key, element) { - element.stroked = !!value; // VML "stroked" attribute - this[key] = value; // used in getter, issue #113 - if (isNumber(value)) { - value += PX; - } - this.setAttr('strokeweight', value); - }, - titleSetter: function (value, key) { - this.setAttr(key, value); - }, - visibilitySetter: function (value, key, element) { - - // Handle inherited visibility - if (value === 'inherit') { - value = VISIBLE; - } - - // Let the shadow follow the main element - if (this.shadows) { - each(this.shadows, function (shadow) { - shadow.style[key] = value; - }); - } - - // Instead of toggling the visibility CSS property, move the div out of the viewport. - // This works around #61 and #586 - if (element.nodeName === 'DIV') { - value = value === HIDDEN ? '-999em' : 0; - - // In order to redraw, IE7 needs the div to be visible when tucked away - // outside the viewport. So the visibility is actually opposite of - // the expected value. This applies to the tooltip only. - if (!docMode8) { - element.style[key] = value ? VISIBLE : HIDDEN; - } - key = 'top'; - } - element.style[key] = value; - }, - xSetter: function (value, key, element) { - this[key] = value; // used in getter - - if (key === 'x') { - key = 'left'; - } else if (key === 'y') { - key = 'top'; - }/* else { - value = mathMax(0, value); // don't set width or height below zero (#311) - }*/ - - // clipping rectangle special - if (this.updateClipping) { - this[key] = value; // the key is now 'left' or 'top' for 'x' and 'y' - this.updateClipping(); - } else { - // normal - element.style[key] = value; - } - }, - zIndexSetter: function (value, key, element) { - element.style[key] = value; - } -}; -VMLElement = extendClass(SVGElement, VMLElement); - -// Some shared setters -VMLElement.prototype.ySetter = - VMLElement.prototype.widthSetter = - VMLElement.prototype.heightSetter = - VMLElement.prototype.xSetter; - - -/** - * The VML renderer - */ -var VMLRendererExtension = { // inherit SVGRenderer - - Element: VMLElement, - isIE8: userAgent.indexOf('MSIE 8.0') > -1, - - - /** - * Initialize the VMLRenderer - * @param {Object} container - * @param {Number} width - * @param {Number} height - */ - init: function (container, width, height, style) { - var renderer = this, - boxWrapper, - box, - css; - - renderer.alignedObjects = []; - - boxWrapper = renderer.createElement(DIV) - .css(extend(this.getStyle(style), { position: RELATIVE})); - box = boxWrapper.element; - container.appendChild(boxWrapper.element); - - - // generate the containing box - renderer.isVML = true; - renderer.box = box; - renderer.boxWrapper = boxWrapper; - renderer.cache = {}; - - - renderer.setSize(width, height, false); - - // The only way to make IE6 and IE7 print is to use a global namespace. However, - // with IE8 the only way to make the dynamic shapes visible in screen and print mode - // seems to be to add the xmlns attribute and the behaviour style inline. - if (!doc.namespaces.hcv) { - - doc.namespaces.add('hcv', 'urn:schemas-microsoft-com:vml'); - - // Setup default CSS (#2153, #2368, #2384) - css = 'hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke' + - '{ behavior:url(#default#VML); display: inline-block; } '; - try { - doc.createStyleSheet().cssText = css; - } catch (e) { - doc.styleSheets[0].cssText += css; - } - - } - }, - - - /** - * Detect whether the renderer is hidden. This happens when one of the parent elements - * has display: none - */ - isHidden: function () { - return !this.box.offsetWidth; - }, - - /** - * Define a clipping rectangle. In VML it is accomplished by storing the values - * for setting the CSS style to all associated members. - * - * @param {Number} x - * @param {Number} y - * @param {Number} width - * @param {Number} height - */ - clipRect: function (x, y, width, height) { - - // create a dummy element - var clipRect = this.createElement(), - isObj = isObject(x); - - // mimic a rectangle with its style object for automatic updating in attr - return extend(clipRect, { - members: [], - left: (isObj ? x.x : x) + 1, - top: (isObj ? x.y : y) + 1, - width: (isObj ? x.width : width) - 1, - height: (isObj ? x.height : height) - 1, - getCSS: function (wrapper) { - var element = wrapper.element, - nodeName = element.nodeName, - isShape = nodeName === 'shape', - inverted = wrapper.inverted, - rect = this, - top = rect.top - (isShape ? element.offsetTop : 0), - left = rect.left, - right = left + rect.width, - bottom = top + rect.height, - ret = { - clip: 'rect(' + - mathRound(inverted ? left : top) + 'px,' + - mathRound(inverted ? bottom : right) + 'px,' + - mathRound(inverted ? right : bottom) + 'px,' + - mathRound(inverted ? top : left) + 'px)' - }; - - // issue 74 workaround - if (!inverted && docMode8 && nodeName === 'DIV') { - extend(ret, { - width: right + PX, - height: bottom + PX - }); - } - return ret; - }, - - // used in attr and animation to update the clipping of all members - updateClipping: function () { - each(clipRect.members, function (member) { - if (member.element) { // Deleted series, like in stock/members/series-remove demo. Should be removed from members, but this will do. - member.css(clipRect.getCSS(member)); - } - }); - } - }); - - }, - - - /** - * Take a color and return it if it's a string, make it a gradient if it's a - * gradient configuration object, and apply opacity. - * - * @param {Object} color The color or config object - */ - color: function (color, elem, prop, wrapper) { - var renderer = this, - colorObject, - regexRgba = /^rgba/, - markup, - fillType, - ret = NONE; - - // Check for linear or radial gradient - if (color && color.linearGradient) { - fillType = 'gradient'; - } else if (color && color.radialGradient) { - fillType = 'pattern'; - } - - - if (fillType) { - - var stopColor, - stopOpacity, - gradient = color.linearGradient || color.radialGradient, - x1, - y1, - x2, - y2, - opacity1, - opacity2, - color1, - color2, - fillAttr = '', - stops = color.stops, - firstStop, - lastStop, - colors = [], - addFillNode = function () { - // Add the fill subnode. When colors attribute is used, the meanings of opacity and o:opacity2 - // are reversed. - markup = ['']; - createElement(renderer.prepVML(markup), null, null, elem); - }; - - // Extend from 0 to 1 - firstStop = stops[0]; - lastStop = stops[stops.length - 1]; - if (firstStop[0] > 0) { - stops.unshift([ - 0, - firstStop[1] - ]); - } - if (lastStop[0] < 1) { - stops.push([ - 1, - lastStop[1] - ]); - } - - // Compute the stops - each(stops, function (stop, i) { - if (regexRgba.test(stop[1])) { - colorObject = Color(stop[1]); - stopColor = colorObject.get('rgb'); - stopOpacity = colorObject.get('a'); - } else { - stopColor = stop[1]; - stopOpacity = 1; - } - - // Build the color attribute - colors.push((stop[0] * 100) + '% ' + stopColor); - - // Only start and end opacities are allowed, so we use the first and the last - if (!i) { - opacity1 = stopOpacity; - color2 = stopColor; - } else { - opacity2 = stopOpacity; - color1 = stopColor; - } - }); - - // Apply the gradient to fills only. - if (prop === 'fill') { - - // Handle linear gradient angle - if (fillType === 'gradient') { - x1 = gradient.x1 || gradient[0] || 0; - y1 = gradient.y1 || gradient[1] || 0; - x2 = gradient.x2 || gradient[2] || 0; - y2 = gradient.y2 || gradient[3] || 0; - fillAttr = 'angle="' + (90 - math.atan( - (y2 - y1) / // y vector - (x2 - x1) // x vector - ) * 180 / mathPI) + '"'; - - addFillNode(); - - // Radial (circular) gradient - } else { - - var r = gradient.r, - sizex = r * 2, - sizey = r * 2, - cx = gradient.cx, - cy = gradient.cy, - radialReference = elem.radialReference, - bBox, - applyRadialGradient = function () { - if (radialReference) { - bBox = wrapper.getBBox(); - cx += (radialReference[0] - bBox.x) / bBox.width - 0.5; - cy += (radialReference[1] - bBox.y) / bBox.height - 0.5; - sizex *= radialReference[2] / bBox.width; - sizey *= radialReference[2] / bBox.height; - } - fillAttr = 'src="' + defaultOptions.global.VMLRadialGradientURL + '" ' + - 'size="' + sizex + ',' + sizey + '" ' + - 'origin="0.5,0.5" ' + - 'position="' + cx + ',' + cy + '" ' + - 'color2="' + color2 + '" '; - - addFillNode(); - }; - - // Apply radial gradient - if (wrapper.added) { - applyRadialGradient(); - } else { - // We need to know the bounding box to get the size and position right - wrapper.onAdd = applyRadialGradient; - } - - // The fill element's color attribute is broken in IE8 standards mode, so we - // need to set the parent shape's fillcolor attribute instead. - ret = color1; - } - - // Gradients are not supported for VML stroke, return the first color. #722. - } else { - ret = stopColor; - } - - // if the color is an rgba color, split it and add a fill node - // to hold the opacity component - } else if (regexRgba.test(color) && elem.tagName !== 'IMG') { - - colorObject = Color(color); - - markup = ['<', prop, ' opacity="', colorObject.get('a'), '"/>']; - createElement(this.prepVML(markup), null, null, elem); - - ret = colorObject.get('rgb'); - - - } else { - var propNodes = elem.getElementsByTagName(prop); // 'stroke' or 'fill' node - if (propNodes.length) { - propNodes[0].opacity = 1; - propNodes[0].type = 'solid'; - } - ret = color; - } - - return ret; - }, - - /** - * Take a VML string and prepare it for either IE8 or IE6/IE7. - * @param {Array} markup A string array of the VML markup to prepare - */ - prepVML: function (markup) { - var vmlStyle = 'display:inline-block;behavior:url(#default#VML);', - isIE8 = this.isIE8; - - markup = markup.join(''); - - if (isIE8) { // add xmlns and style inline - markup = markup.replace('/>', ' xmlns="urn:schemas-microsoft-com:vml" />'); - if (markup.indexOf('style="') === -1) { - markup = markup.replace('/>', ' style="' + vmlStyle + '" />'); - } else { - markup = markup.replace('style="', 'style="' + vmlStyle); - } - - } else { // add namespace - markup = markup.replace('<', ' 1) { - obj.attr({ - x: x, - y: y, - width: width, - height: height - }); - } - return obj; - }, - - /** - * For rectangles, VML uses a shape for rect to overcome bugs and rotation problems - */ - createElement: function (nodeName) { - return nodeName === 'rect' ? this.symbol(nodeName) : SVGRenderer.prototype.createElement.call(this, nodeName); - }, - - /** - * In the VML renderer, each child of an inverted div (group) is inverted - * @param {Object} element - * @param {Object} parentNode - */ - invertChild: function (element, parentNode) { - var ren = this, - parentStyle = parentNode.style, - imgStyle = element.tagName === 'IMG' && element.style; // #1111 - - css(element, { - flip: 'x', - left: pInt(parentStyle.width) - (imgStyle ? pInt(imgStyle.top) : 1), - top: pInt(parentStyle.height) - (imgStyle ? pInt(imgStyle.left) : 1), - rotation: -90 - }); - - // Recursively invert child elements, needed for nested composite shapes like box plots and error bars. #1680, #1806. - each(element.childNodes, function (child) { - ren.invertChild(child, element); - }); - }, - - /** - * Symbol definitions that override the parent SVG renderer's symbols - * - */ - symbols: { - // VML specific arc function - arc: function (x, y, w, h, options) { - var start = options.start, - end = options.end, - radius = options.r || w || h, - innerRadius = options.innerR, - cosStart = mathCos(start), - sinStart = mathSin(start), - cosEnd = mathCos(end), - sinEnd = mathSin(end), - ret; - - if (end - start === 0) { // no angle, don't show it. - return ['x']; - } - - ret = [ - 'wa', // clockwise arc to - x - radius, // left - y - radius, // top - x + radius, // right - y + radius, // bottom - x + radius * cosStart, // start x - y + radius * sinStart, // start y - x + radius * cosEnd, // end x - y + radius * sinEnd // end y - ]; - - if (options.open && !innerRadius) { - ret.push( - 'e', - M, - x,// - innerRadius, - y// - innerRadius - ); - } - - ret.push( - 'at', // anti clockwise arc to - x - innerRadius, // left - y - innerRadius, // top - x + innerRadius, // right - y + innerRadius, // bottom - x + innerRadius * cosEnd, // start x - y + innerRadius * sinEnd, // start y - x + innerRadius * cosStart, // end x - y + innerRadius * sinStart, // end y - 'x', // finish path - 'e' // close - ); - - ret.isArc = true; - return ret; - - }, - // Add circle symbol path. This performs significantly faster than v:oval. - circle: function (x, y, w, h, wrapper) { - - if (wrapper) { - w = h = 2 * wrapper.r; - } - - // Center correction, #1682 - if (wrapper && wrapper.isCircle) { - x -= w / 2; - y -= h / 2; - } - - // Return the path - return [ - 'wa', // clockwisearcto - x, // left - y, // top - x + w, // right - y + h, // bottom - x + w, // start x - y + h / 2, // start y - x + w, // end x - y + h / 2, // end y - //'x', // finish path - 'e' // close - ]; - }, - /** - * Add rectangle symbol path which eases rotation and omits arcsize problems - * compared to the built-in VML roundrect shape. When borders are not rounded, - * use the simpler square path, else use the callout path without the arrow. - */ - rect: function (x, y, w, h, options) { - return SVGRenderer.prototype.symbols[ - !defined(options) || !options.r ? 'square' : 'callout' - ].call(0, x, y, w, h, options); - } - } -}; -Highcharts.VMLRenderer = VMLRenderer = function () { - this.init.apply(this, arguments); -}; -VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension); - - // general renderer - Renderer = VMLRenderer; -} - -// This method is used with exporting in old IE, when emulating SVG (see #2314) -SVGRenderer.prototype.measureSpanWidth = function (text, styles) { - var measuringSpan = doc.createElement('span'), - offsetWidth, - textNode = doc.createTextNode(text); - - measuringSpan.appendChild(textNode); - css(measuringSpan, styles); - this.box.appendChild(measuringSpan); - offsetWidth = measuringSpan.offsetWidth; - discardElement(measuringSpan); // #2463 - return offsetWidth; -}; - - -/* **************************************************************************** - * * - * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE * - * * - *****************************************************************************/ -/* **************************************************************************** - * * - * START OF ANDROID < 3 SPECIFIC CODE. THIS CAN BE REMOVED IF YOU'RE NOT * - * TARGETING THAT SYSTEM. * - * * - *****************************************************************************/ -var CanVGRenderer, - CanVGController; - -if (useCanVG) { - /** - * The CanVGRenderer is empty from start to keep the source footprint small. - * When requested, the CanVGController downloads the rest of the source packaged - * together with the canvg library. - */ - Highcharts.CanVGRenderer = CanVGRenderer = function () { - // Override the global SVG namespace to fake SVG/HTML that accepts CSS - SVG_NS = 'http://www.w3.org/1999/xhtml'; - }; - - /** - * Start with an empty symbols object. This is needed when exporting is used (exporting.src.js will add a few symbols), but - * the implementation from SvgRenderer will not be merged in until first render. - */ - CanVGRenderer.prototype.symbols = {}; - - /** - * Handles on demand download of canvg rendering support. - */ - CanVGController = (function () { - // List of renderering calls - var deferredRenderCalls = []; - - /** - * When downloaded, we are ready to draw deferred charts. - */ - function drawDeferred() { - var callLength = deferredRenderCalls.length, - callIndex; - - // Draw all pending render calls - for (callIndex = 0; callIndex < callLength; callIndex++) { - deferredRenderCalls[callIndex](); - } - // Clear the list - deferredRenderCalls = []; - } - - return { - push: function (func, scriptLocation) { - // Only get the script once - if (deferredRenderCalls.length === 0) { - getScript(scriptLocation, drawDeferred); - } - // Register render call - deferredRenderCalls.push(func); - } - }; - }()); - - Renderer = CanVGRenderer; -} // end CanVGRenderer - -/* **************************************************************************** - * * - * END OF ANDROID < 3 SPECIFIC CODE * - * * - *****************************************************************************/ - -/** - * The Tick class - */ -function Tick(axis, pos, type, noLabel) { - this.axis = axis; - this.pos = pos; - this.type = type || ''; - this.isNew = true; - - if (!type && !noLabel) { - this.addLabel(); - } -} - -Tick.prototype = { - /** - * Write the tick label - */ - addLabel: function () { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - horiz = axis.horiz, - categories = axis.categories, - names = axis.names, - pos = tick.pos, - labelOptions = options.labels, - str, - tickPositions = axis.tickPositions, - width = (horiz && categories && - !labelOptions.step && !labelOptions.staggerLines && - !labelOptions.rotation && - chart.plotWidth / tickPositions.length) || - (!horiz && (chart.margin[3] || chart.chartWidth * 0.33)), // #1580, #1931 - isFirst = pos === tickPositions[0], - isLast = pos === tickPositions[tickPositions.length - 1], - css, - attr, - value = categories ? - pick(categories[pos], names[pos], pos) : - pos, - label = tick.label, - tickPositionInfo = tickPositions.info, - dateTimeLabelFormat; - - // Set the datetime label format. If a higher rank is set for this position, use that. If not, - // use the general format. - if (axis.isDatetimeAxis && tickPositionInfo) { - dateTimeLabelFormat = options.dateTimeLabelFormats[tickPositionInfo.higherRanks[pos] || tickPositionInfo.unitName]; - } - // set properties for access in render method - tick.isFirst = isFirst; - tick.isLast = isLast; - - // get the string - str = axis.labelFormatter.call({ - axis: axis, - chart: chart, - isFirst: isFirst, - isLast: isLast, - dateTimeLabelFormat: dateTimeLabelFormat, - value: axis.isLog ? correctFloat(lin2log(value)) : value - }); - - // prepare CSS - css = width && { width: mathMax(1, mathRound(width - 2 * (labelOptions.padding || 10))) + PX }; - css = extend(css, labelOptions.style); - - // first call - if (!defined(label)) { - attr = { - align: axis.labelAlign - }; - if (isNumber(labelOptions.rotation)) { - attr.rotation = labelOptions.rotation; - } - if (width && labelOptions.ellipsis) { - attr._clipHeight = axis.len / tickPositions.length; - } - - tick.label = - defined(str) && labelOptions.enabled ? - chart.renderer.text( - str, - 0, - 0, - labelOptions.useHTML - ) - .attr(attr) - // without position absolute, IE export sometimes is wrong - .css(css) - .add(axis.labelGroup) : - null; - - // update - } else if (label) { - label.attr({ - text: str - }) - .css(css); - } - }, - - /** - * Get the offset height or width of the label - */ - getLabelSize: function () { - var label = this.label, - axis = this.axis; - return label ? - label.getBBox()[axis.horiz ? 'height' : 'width'] : - 0; - }, - - /** - * Find how far the labels extend to the right and left of the tick's x position. Used for anti-collision - * detection with overflow logic. - */ - getLabelSides: function () { - var bBox = this.label.getBBox(), - axis = this.axis, - horiz = axis.horiz, - options = axis.options, - labelOptions = options.labels, - size = horiz ? bBox.width : bBox.height, - leftSide = horiz ? - labelOptions.x - size * { left: 0, center: 0.5, right: 1 }[axis.labelAlign] : - 0, - rightSide = horiz ? - size + leftSide : - size; - - return [leftSide, rightSide]; - }, - - /** - * Handle the label overflow by adjusting the labels to the left and right edge, or - * hide them if they collide into the neighbour label. - */ - handleOverflow: function (index, xy) { - var show = true, - axis = this.axis, - isFirst = this.isFirst, - isLast = this.isLast, - horiz = axis.horiz, - pxPos = horiz ? xy.x : xy.y, - reversed = axis.reversed, - tickPositions = axis.tickPositions, - sides = this.getLabelSides(), - leftSide = sides[0], - rightSide = sides[1], - axisLeft, - axisRight, - neighbour, - neighbourEdge, - line = this.label.line || 0, - labelEdge = axis.labelEdge, - justifyLabel = axis.justifyLabels && (isFirst || isLast), - justifyToPlot; - - // Hide it if it now overlaps the neighbour label - if (labelEdge[line] === UNDEFINED || pxPos + leftSide > labelEdge[line]) { - labelEdge[line] = pxPos + rightSide; - - } else if (!justifyLabel) { - show = false; - } - - if (justifyLabel) { - justifyToPlot = axis.justifyToPlot; - axisLeft = justifyToPlot ? axis.pos : 0; - axisRight = justifyToPlot ? axisLeft + axis.len : axis.chart.chartWidth; - - // Find the firsth neighbour on the same line - do { - index += (isFirst ? 1 : -1); - neighbour = axis.ticks[tickPositions[index]]; - } while (tickPositions[index] && (!neighbour || neighbour.label.line !== line)); - - neighbourEdge = neighbour && neighbour.label.xy && neighbour.label.xy.x + neighbour.getLabelSides()[isFirst ? 0 : 1]; - - if ((isFirst && !reversed) || (isLast && reversed)) { - // Is the label spilling out to the left of the plot area? - if (pxPos + leftSide < axisLeft) { - - // Align it to plot left - pxPos = axisLeft - leftSide; - - // Hide it if it now overlaps the neighbour label - if (neighbour && pxPos + rightSide > neighbourEdge) { - show = false; - } - } - - } else { - // Is the label spilling out to the right of the plot area? - if (pxPos + rightSide > axisRight) { - - // Align it to plot right - pxPos = axisRight - rightSide; - - // Hide it if it now overlaps the neighbour label - if (neighbour && pxPos + leftSide < neighbourEdge) { - show = false; - } - - } - } - - // Set the modified x position of the label - xy.x = pxPos; - } - return show; - }, - - /** - * Get the x and y position for ticks and labels - */ - getPosition: function (horiz, pos, tickmarkOffset, old) { - var axis = this.axis, - chart = axis.chart, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight; - - return { - x: horiz ? - axis.translate(pos + tickmarkOffset, null, null, old) + axis.transB : - axis.left + axis.offset + (axis.opposite ? ((old && chart.oldChartWidth) || chart.chartWidth) - axis.right - axis.left : 0), - - y: horiz ? - cHeight - axis.bottom + axis.offset - (axis.opposite ? axis.height : 0) : - cHeight - axis.translate(pos + tickmarkOffset, null, null, old) - axis.transB - }; - - }, - - /** - * Get the x, y position of the tick label - */ - getLabelPosition: function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) { - var axis = this.axis, - transA = axis.transA, - reversed = axis.reversed, - staggerLines = axis.staggerLines, - baseline = axis.chart.renderer.fontMetrics(labelOptions.style.fontSize).b, - rotation = labelOptions.rotation; - - x = x + labelOptions.x - (tickmarkOffset && horiz ? - tickmarkOffset * transA * (reversed ? -1 : 1) : 0); - y = y + labelOptions.y - (tickmarkOffset && !horiz ? - tickmarkOffset * transA * (reversed ? 1 : -1) : 0); - - // Correct for rotation (#1764) - if (rotation && axis.side === 2) { - y -= baseline - baseline * mathCos(rotation * deg2rad); - } - - // Vertically centered - if (!defined(labelOptions.y) && !rotation) { // #1951 - y += baseline - label.getBBox().height / 2; - } - - // Correct for staggered labels - if (staggerLines) { - label.line = (index / (step || 1) % staggerLines); - y += label.line * (axis.labelOffset / staggerLines); - } - - return { - x: x, - y: y - }; - }, - - /** - * Extendible method to return the path of the marker - */ - getMarkPath: function (x, y, tickLength, tickWidth, horiz, renderer) { - return renderer.crispLine([ - M, - x, - y, - L, - x + (horiz ? 0 : -tickLength), - y + (horiz ? tickLength : 0) - ], tickWidth); - }, - - /** - * Put everything in place - * - * @param index {Number} - * @param old {Boolean} Use old coordinates to prepare an animation into new position - */ - render: function (index, old, opacity) { - var tick = this, - axis = tick.axis, - options = axis.options, - chart = axis.chart, - renderer = chart.renderer, - horiz = axis.horiz, - type = tick.type, - label = tick.label, - pos = tick.pos, - labelOptions = options.labels, - gridLine = tick.gridLine, - gridPrefix = type ? type + 'Grid' : 'grid', - tickPrefix = type ? type + 'Tick' : 'tick', - gridLineWidth = options[gridPrefix + 'LineWidth'], - gridLineColor = options[gridPrefix + 'LineColor'], - dashStyle = options[gridPrefix + 'LineDashStyle'], - tickLength = options[tickPrefix + 'Length'], - tickWidth = options[tickPrefix + 'Width'] || 0, - tickColor = options[tickPrefix + 'Color'], - tickPosition = options[tickPrefix + 'Position'], - gridLinePath, - mark = tick.mark, - markPath, - step = labelOptions.step, - attribs, - show = true, - tickmarkOffset = axis.tickmarkOffset, - xy = tick.getPosition(horiz, pos, tickmarkOffset, old), - x = xy.x, - y = xy.y, - reverseCrisp = ((horiz && x === axis.pos + axis.len) || (!horiz && y === axis.pos)) ? -1 : 1; // #1480, #1687 - - this.isActive = true; - - // create the grid line - if (gridLineWidth) { - gridLinePath = axis.getPlotLinePath(pos + tickmarkOffset, gridLineWidth * reverseCrisp, old, true); - - if (gridLine === UNDEFINED) { - attribs = { - stroke: gridLineColor, - 'stroke-width': gridLineWidth - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - if (!type) { - attribs.zIndex = 1; - } - if (old) { - attribs.opacity = 0; - } - tick.gridLine = gridLine = - gridLineWidth ? - renderer.path(gridLinePath) - .attr(attribs).add(axis.gridGroup) : - null; - } - - // If the parameter 'old' is set, the current call will be followed - // by another call, therefore do not do any animations this time - if (!old && gridLine && gridLinePath) { - gridLine[tick.isNew ? 'attr' : 'animate']({ - d: gridLinePath, - opacity: opacity - }); - } - } - - // create the tick mark - if (tickWidth && tickLength) { - - // negate the length - if (tickPosition === 'inside') { - tickLength = -tickLength; - } - if (axis.opposite) { - tickLength = -tickLength; - } - - markPath = tick.getMarkPath(x, y, tickLength, tickWidth * reverseCrisp, horiz, renderer); - if (mark) { // updating - mark.animate({ - d: markPath, - opacity: opacity - }); - } else { // first time - tick.mark = renderer.path( - markPath - ).attr({ - stroke: tickColor, - 'stroke-width': tickWidth, - opacity: opacity - }).add(axis.axisGroup); - } - } - - // the label is created on init - now move it into place - if (label && !isNaN(x)) { - label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step); - - // Apply show first and show last. If the tick is both first and last, it is - // a single centered tick, in which case we show the label anyway (#2100). - if ((tick.isFirst && !tick.isLast && !pick(options.showFirstLabel, 1)) || - (tick.isLast && !tick.isFirst && !pick(options.showLastLabel, 1))) { - show = false; - - // Handle label overflow and show or hide accordingly - } else if (!axis.isRadial && !labelOptions.step && !labelOptions.rotation && !old && opacity !== 0) { - show = tick.handleOverflow(index, xy); - } - - // apply step - if (step && index % step) { - // show those indices dividable by step - show = false; - } - - // Set the new position, and show or hide - if (show && !isNaN(xy.y)) { - xy.opacity = opacity; - label[tick.isNew ? 'attr' : 'animate'](xy); - tick.isNew = false; - } else { - label.attr('y', -9999); // #1338 - } - } - }, - - /** - * Destructor for the tick prototype - */ - destroy: function () { - destroyObjectProperties(this, this.axis); - } -}; - -/** - * The object wrapper for plot lines and plot bands - * @param {Object} options - */ -Highcharts.PlotLineOrBand = function (axis, options) { - this.axis = axis; - - if (options) { - this.options = options; - this.id = options.id; - } -}; - -Highcharts.PlotLineOrBand.prototype = { - - /** - * Render the plot line or plot band. If it is already existing, - * move it. - */ - render: function () { - var plotLine = this, - axis = plotLine.axis, - horiz = axis.horiz, - halfPointRange = (axis.pointRange || 0) / 2, - options = plotLine.options, - optionsLabel = options.label, - label = plotLine.label, - width = options.width, - to = options.to, - from = options.from, - isBand = defined(from) && defined(to), - value = options.value, - dashStyle = options.dashStyle, - svgElem = plotLine.svgElem, - path = [], - addEvent, - eventType, - xs, - ys, - x, - y, - color = options.color, - zIndex = options.zIndex, - events = options.events, - attribs = {}, - renderer = axis.chart.renderer; - - // logarithmic conversion - if (axis.isLog) { - from = log2lin(from); - to = log2lin(to); - value = log2lin(value); - } - - // plot line - if (width) { - path = axis.getPlotLinePath(value, width); - attribs = { - stroke: color, - 'stroke-width': width - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } - } else if (isBand) { // plot band - - // keep within plot area - from = mathMax(from, axis.min - halfPointRange); - to = mathMin(to, axis.max + halfPointRange); - - path = axis.getPlotBandPath(from, to, options); - if (color) { - attribs.fill = color; - } - if (options.borderWidth) { - attribs.stroke = options.borderColor; - attribs['stroke-width'] = options.borderWidth; - } - } else { - return; - } - // zIndex - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - - // common for lines and bands - if (svgElem) { - if (path) { - svgElem.animate({ - d: path - }, null, svgElem.onGetPath); - } else { - svgElem.hide(); - svgElem.onGetPath = function () { - svgElem.show(); - }; - if (label) { - plotLine.label = label = label.destroy(); - } - } - } else if (path && path.length) { - plotLine.svgElem = svgElem = renderer.path(path) - .attr(attribs).add(); - - // events - if (events) { - addEvent = function (eventType) { - svgElem.on(eventType, function (e) { - events[eventType].apply(plotLine, [e]); - }); - }; - for (eventType in events) { - addEvent(eventType); - } - } - } - - // the plot band/line label - if (optionsLabel && defined(optionsLabel.text) && path && path.length && axis.width > 0 && axis.height > 0) { - // apply defaults - optionsLabel = merge({ - align: horiz && isBand && 'center', - x: horiz ? !isBand && 4 : 10, - verticalAlign : !horiz && isBand && 'middle', - y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, - rotation: horiz && !isBand && 90 - }, optionsLabel); - - // add the SVG element - if (!label) { - attribs = { - align: optionsLabel.textAlign || optionsLabel.align, - rotation: optionsLabel.rotation - }; - if (defined(zIndex)) { - attribs.zIndex = zIndex; - } - plotLine.label = label = renderer.text( - optionsLabel.text, - 0, - 0, - optionsLabel.useHTML - ) - .attr(attribs) - .css(optionsLabel.style) - .add(); - } - - // get the bounding box and align the label - xs = [path[1], path[4], pick(path[6], path[1])]; - ys = [path[2], path[5], pick(path[7], path[2])]; - x = arrayMin(xs); - y = arrayMin(ys); - - label.align(optionsLabel, false, { - x: x, - y: y, - width: arrayMax(xs) - x, - height: arrayMax(ys) - y - }); - label.show(); - - } else if (label) { // move out of sight - label.hide(); - } - - // chainable - return plotLine; - }, - - /** - * Remove the plot line or band - */ - destroy: function () { - // remove it from the lookup - erase(this.axis.plotLinesAndBands, this); - - delete this.axis; - destroyObjectProperties(this); - } -}; - -/** - * Object with members for extending the Axis prototype - */ - -AxisPlotLineOrBandExtension = { - - /** - * Create the path for a plot band - */ - getPlotBandPath: function (from, to) { - var toPath = this.getPlotLinePath(to), - path = this.getPlotLinePath(from); - - if (path && toPath) { - path.push( - toPath[4], - toPath[5], - toPath[1], - toPath[2] - ); - } else { // outside the axis area - path = null; - } - - return path; - }, - - addPlotBand: function (options) { - this.addPlotBandOrLine(options, 'plotBands'); - }, - - addPlotLine: function (options) { - this.addPlotBandOrLine(options, 'plotLines'); - }, - - /** - * Add a plot band or plot line after render time - * - * @param options {Object} The plotBand or plotLine configuration object - */ - addPlotBandOrLine: function (options, coll) { - var obj = new Highcharts.PlotLineOrBand(this, options).render(), - userOptions = this.userOptions; - - if (obj) { // #2189 - // Add it to the user options for exporting and Axis.update - if (coll) { - userOptions[coll] = userOptions[coll] || []; - userOptions[coll].push(options); - } - this.plotLinesAndBands.push(obj); - } - - return obj; - }, - - /** - * Remove a plot band or plot line from the chart by id - * @param {Object} id - */ - removePlotBandOrLine: function (id) { - var plotLinesAndBands = this.plotLinesAndBands, - options = this.options, - userOptions = this.userOptions, - i = plotLinesAndBands.length; - while (i--) { - if (plotLinesAndBands[i].id === id) { - plotLinesAndBands[i].destroy(); - } - } - each([options.plotLines || [], userOptions.plotLines || [], options.plotBands || [], userOptions.plotBands || []], function (arr) { - i = arr.length; - while (i--) { - if (arr[i].id === id) { - erase(arr, arr[i]); - } - } - }); - } -}; - -/** - * Create a new axis object - * @param {Object} chart - * @param {Object} options - */ -function Axis() { - this.init.apply(this, arguments); -} - -Axis.prototype = { - - /** - * Default options for the X axis - the Y axis has extended defaults - */ - defaultOptions: { - // allowDecimals: null, - // alternateGridColor: null, - // categories: [], - dateTimeLabelFormats: { - millisecond: '%H:%M:%S.%L', - second: '%H:%M:%S', - minute: '%H:%M', - hour: '%H:%M', - day: '%e. %b', - week: '%e. %b', - month: '%b \'%y', - year: '%Y' - }, - endOnTick: false, - gridLineColor: '#C0C0C0', - // gridLineDashStyle: 'solid', - // gridLineWidth: 0, - // reversed: false, - - labels: defaultLabelOptions, - // { step: null }, - lineColor: '#C0D0E0', - lineWidth: 1, - //linkedTo: null, - //max: undefined, - //min: undefined, - minPadding: 0.01, - maxPadding: 0.01, - //minRange: null, - minorGridLineColor: '#E0E0E0', - // minorGridLineDashStyle: null, - minorGridLineWidth: 1, - minorTickColor: '#A0A0A0', - //minorTickInterval: null, - minorTickLength: 2, - minorTickPosition: 'outside', // inside or outside - //minorTickWidth: 0, - //opposite: false, - //offset: 0, - //plotBands: [{ - // events: {}, - // zIndex: 1, - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //plotLines: [{ - // events: {} - // dashStyle: {} - // zIndex: - // labels: { align, x, verticalAlign, y, style, rotation, textAlign } - //}], - //reversed: false, - // showFirstLabel: true, - // showLastLabel: true, - startOfWeek: 1, - startOnTick: false, - tickColor: '#C0D0E0', - //tickInterval: null, - tickLength: 10, - tickmarkPlacement: 'between', // on or between - tickPixelInterval: 100, - tickPosition: 'outside', - tickWidth: 1, - title: { - //text: null, - align: 'middle', // low, middle or high - //margin: 0 for horizontal, 10 for vertical axes, - //rotation: 0, - //side: 'outside', - style: { - color: '#707070' - } - //x: 0, - //y: 0 - }, - type: 'linear' // linear, logarithmic or datetime - }, - - /** - * This options set extends the defaultOptions for Y axes - */ - defaultYAxisOptions: { - endOnTick: true, - gridLineWidth: 1, - tickPixelInterval: 72, - showLastLabel: true, - labels: { - x: -8, - y: 3 - }, - lineWidth: 0, - maxPadding: 0.05, - minPadding: 0.05, - startOnTick: true, - tickWidth: 0, - title: { - rotation: 270, - text: 'Values' - }, - stackLabels: { - enabled: false, - //align: dynamic, - //y: dynamic, - //x: dynamic, - //verticalAlign: dynamic, - //textAlign: dynamic, - //rotation: 0, - formatter: function () { - return numberFormat(this.total, -1); - }, - style: defaultLabelOptions.style - } - }, - - /** - * These options extend the defaultOptions for left axes - */ - defaultLeftAxisOptions: { - labels: { - x: -15, - y: null - }, - title: { - rotation: 270 - } - }, - - /** - * These options extend the defaultOptions for right axes - */ - defaultRightAxisOptions: { - labels: { - x: 15, - y: null - }, - title: { - rotation: 90 - } - }, - - /** - * These options extend the defaultOptions for bottom axes - */ - defaultBottomAxisOptions: { - labels: { - x: 0, - y: 20 - // overflow: undefined, - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - /** - * These options extend the defaultOptions for left axes - */ - defaultTopAxisOptions: { - labels: { - x: 0, - y: -15 - // overflow: undefined - // staggerLines: null - }, - title: { - rotation: 0 - } - }, - - /** - * Initialize the axis - */ - init: function (chart, userOptions) { - - - var isXAxis = userOptions.isX, - axis = this; - - // Flag, is the axis horizontal - axis.horiz = chart.inverted ? !isXAxis : isXAxis; - - // Flag, isXAxis - axis.isXAxis = isXAxis; - axis.coll = isXAxis ? 'xAxis' : 'yAxis'; - - axis.opposite = userOptions.opposite; // needed in setOptions - axis.side = userOptions.side || (axis.horiz ? - (axis.opposite ? 0 : 2) : // top : bottom - (axis.opposite ? 1 : 3)); // right : left - - axis.setOptions(userOptions); - - - var options = this.options, - type = options.type, - isDatetimeAxis = type === 'datetime'; - - axis.labelFormatter = options.labels.formatter || axis.defaultLabelFormatter; // can be overwritten by dynamic format - - - // Flag, stagger lines or not - axis.userOptions = userOptions; - - //axis.axisTitleMargin = UNDEFINED,// = options.title.margin, - axis.minPixelPadding = 0; - //axis.ignoreMinPadding = UNDEFINED; // can be set to true by a column or bar series - //axis.ignoreMaxPadding = UNDEFINED; - - axis.chart = chart; - axis.reversed = options.reversed; - axis.zoomEnabled = options.zoomEnabled !== false; - - // Initial categories - axis.categories = options.categories || type === 'category'; - axis.names = []; - - // Elements - //axis.axisGroup = UNDEFINED; - //axis.gridGroup = UNDEFINED; - //axis.axisTitle = UNDEFINED; - //axis.axisLine = UNDEFINED; - - // Shorthand types - axis.isLog = type === 'logarithmic'; - axis.isDatetimeAxis = isDatetimeAxis; - - // Flag, if axis is linked to another axis - axis.isLinked = defined(options.linkedTo); - // Linked axis. - //axis.linkedParent = UNDEFINED; - - // Tick positions - //axis.tickPositions = UNDEFINED; // array containing predefined positions - // Tick intervals - //axis.tickInterval = UNDEFINED; - //axis.minorTickInterval = UNDEFINED; - - axis.tickmarkOffset = (axis.categories && options.tickmarkPlacement === 'between') ? 0.5 : 0; - - // Major ticks - axis.ticks = {}; - axis.labelEdge = []; - // Minor ticks - axis.minorTicks = {}; - //axis.tickAmount = UNDEFINED; - - // List of plotLines/Bands - axis.plotLinesAndBands = []; - - // Alternate bands - axis.alternateBands = {}; - - // Axis metrics - //axis.left = UNDEFINED; - //axis.top = UNDEFINED; - //axis.width = UNDEFINED; - //axis.height = UNDEFINED; - //axis.bottom = UNDEFINED; - //axis.right = UNDEFINED; - //axis.transA = UNDEFINED; - //axis.transB = UNDEFINED; - //axis.oldTransA = UNDEFINED; - axis.len = 0; - //axis.oldMin = UNDEFINED; - //axis.oldMax = UNDEFINED; - //axis.oldUserMin = UNDEFINED; - //axis.oldUserMax = UNDEFINED; - //axis.oldAxisLength = UNDEFINED; - axis.minRange = axis.userMinRange = options.minRange || options.maxZoom; - axis.range = options.range; - axis.offset = options.offset || 0; - - - // Dictionary for stacks - axis.stacks = {}; - axis.oldStacks = {}; - - // Min and max in the data - //axis.dataMin = UNDEFINED, - //axis.dataMax = UNDEFINED, - - // The axis range - axis.max = null; - axis.min = null; - - // User set min and max - //axis.userMin = UNDEFINED, - //axis.userMax = UNDEFINED, - - // Crosshair options - axis.crosshair = pick(options.crosshair, splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1], false); - // Run Axis - - var eventType, - events = axis.options.events; - - // Register - if (inArray(axis, chart.axes) === -1) { // don't add it again on Axis.update() - if (isXAxis && !this.isColorAxis) { // #2713 - chart.axes.splice(chart.xAxis.length, 0, axis); - } else { - chart.axes.push(axis); - } - - chart[axis.coll].push(axis); - } - - axis.series = axis.series || []; // populated by Series - - // inverted charts have reversed xAxes as default - if (chart.inverted && isXAxis && axis.reversed === UNDEFINED) { - axis.reversed = true; - } - - axis.removePlotBand = axis.removePlotBandOrLine; - axis.removePlotLine = axis.removePlotBandOrLine; - - - // register event listeners - for (eventType in events) { - addEvent(axis, eventType, events[eventType]); - } - - // extend logarithmic axis - if (axis.isLog) { - axis.val2lin = log2lin; - axis.lin2val = lin2log; - } - }, - - /** - * Merge and set options - */ - setOptions: function (userOptions) { - this.options = merge( - this.defaultOptions, - this.isXAxis ? {} : this.defaultYAxisOptions, - [this.defaultTopAxisOptions, this.defaultRightAxisOptions, - this.defaultBottomAxisOptions, this.defaultLeftAxisOptions][this.side], - merge( - defaultOptions[this.coll], // if set in setOptions (#1053) - userOptions - ) - ); - }, - - /** - * The default label formatter. The context is a special config object for the label. - */ - defaultLabelFormatter: function () { - var axis = this.axis, - value = this.value, - categories = axis.categories, - dateTimeLabelFormat = this.dateTimeLabelFormat, - numericSymbols = defaultOptions.lang.numericSymbols, - i = numericSymbols && numericSymbols.length, - multi, - ret, - formatOption = axis.options.labels.format, - - // make sure the same symbol is added for all labels on a linear axis - numericSymbolDetector = axis.isLog ? value : axis.tickInterval; - - if (formatOption) { - ret = format(formatOption, this); - - } else if (categories) { - ret = value; - - } else if (dateTimeLabelFormat) { // datetime axis - ret = dateFormat(dateTimeLabelFormat, value); - - } else if (i && numericSymbolDetector >= 1000) { - // Decide whether we should add a numeric symbol like k (thousands) or M (millions). - // If we are to enable this in tooltip or other places as well, we can move this - // logic to the numberFormatter and enable it by a parameter. - while (i-- && ret === UNDEFINED) { - multi = Math.pow(1000, i + 1); - if (numericSymbolDetector >= multi && numericSymbols[i] !== null) { - ret = numberFormat(value / multi, -1) + numericSymbols[i]; - } - } - } - - if (ret === UNDEFINED) { - if (mathAbs(value) >= 10000) { // add thousands separators - ret = numberFormat(value, 0); - - } else { // small numbers - ret = numberFormat(value, -1, UNDEFINED, ''); // #2466 - } - } - - return ret; - }, - - /** - * Get the minimum and maximum for the series of each axis - */ - getSeriesExtremes: function () { - var axis = this, - chart = axis.chart; - - axis.hasVisibleSeries = false; - - // reset dataMin and dataMax in case we're redrawing - axis.dataMin = axis.dataMax = null; - - if (axis.buildStacks) { - axis.buildStacks(); - } - - // loop through this axis' series - each(axis.series, function (series) { - - if (series.visible || !chart.options.chart.ignoreHiddenSeries) { - - var seriesOptions = series.options, - xData, - threshold = seriesOptions.threshold, - seriesDataMin, - seriesDataMax; - - axis.hasVisibleSeries = true; - - // Validate threshold in logarithmic axes - if (axis.isLog && threshold <= 0) { - threshold = null; - } - - // Get dataMin and dataMax for X axes - if (axis.isXAxis) { - xData = series.xData; - if (xData.length) { - axis.dataMin = mathMin(pick(axis.dataMin, xData[0]), arrayMin(xData)); - axis.dataMax = mathMax(pick(axis.dataMax, xData[0]), arrayMax(xData)); - } - - // Get dataMin and dataMax for Y axes, as well as handle stacking and processed data - } else { - - // Get this particular series extremes - series.getExtremes(); - seriesDataMax = series.dataMax; - seriesDataMin = series.dataMin; - - // Get the dataMin and dataMax so far. If percentage is used, the min and max are - // always 0 and 100. If seriesDataMin and seriesDataMax is null, then series - // doesn't have active y data, we continue with nulls - if (defined(seriesDataMin) && defined(seriesDataMax)) { - axis.dataMin = mathMin(pick(axis.dataMin, seriesDataMin), seriesDataMin); - axis.dataMax = mathMax(pick(axis.dataMax, seriesDataMax), seriesDataMax); - } - - // Adjust to threshold - if (defined(threshold)) { - if (axis.dataMin >= threshold) { - axis.dataMin = threshold; - axis.ignoreMinPadding = true; - } else if (axis.dataMax < threshold) { - axis.dataMax = threshold; - axis.ignoreMaxPadding = true; - } - } - } - } - }); - }, - - /** - * Translate from axis value to pixel position on the chart, or back - * - */ - translate: function (val, backwards, cvsCoord, old, handleLog, pointPlacement) { - var axis = this, - sign = 1, - cvsOffset = 0, - localA = old ? axis.oldTransA : axis.transA, - localMin = old ? axis.oldMin : axis.min, - returnValue, - minPixelPadding = axis.minPixelPadding, - postTranslate = (axis.options.ordinal || (axis.isLog && handleLog)) && axis.lin2val; - - if (!localA) { - localA = axis.transA; - } - - // In vertical axes, the canvas coordinates start from 0 at the top like in - // SVG. - if (cvsCoord) { - sign *= -1; // canvas coordinates inverts the value - cvsOffset = axis.len; - } - - // Handle reversed axis - if (axis.reversed) { - sign *= -1; - cvsOffset -= sign * (axis.sector || axis.len); - } - - // From pixels to value - if (backwards) { // reverse translation - - val = val * sign + cvsOffset; - val -= minPixelPadding; - returnValue = val / localA + localMin; // from chart pixel to value - if (postTranslate) { // log and ordinal axes - returnValue = axis.lin2val(returnValue); - } - - // From value to pixels - } else { - if (postTranslate) { // log and ordinal axes - val = axis.val2lin(val); - } - if (pointPlacement === 'between') { - pointPlacement = 0.5; - } - returnValue = sign * (val - localMin) * localA + cvsOffset + (sign * minPixelPadding) + - (isNumber(pointPlacement) ? localA * pointPlacement * axis.pointRange : 0); - } - - return returnValue; - }, - - /** - * Utility method to translate an axis value to pixel position. - * @param {Number} value A value in terms of axis units - * @param {Boolean} paneCoordinates Whether to return the pixel coordinate relative to the chart - * or just the axis/pane itself. - */ - toPixels: function (value, paneCoordinates) { - return this.translate(value, false, !this.horiz, null, true) + (paneCoordinates ? 0 : this.pos); - }, - - /* - * Utility method to translate a pixel position in to an axis value - * @param {Number} pixel The pixel value coordinate - * @param {Boolean} paneCoordiantes Whether the input pixel is relative to the chart or just the - * axis/pane itself. - */ - toValue: function (pixel, paneCoordinates) { - return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, null, true); - }, - - /** - * Create the path for a plot line that goes from the given value on - * this axis, across the plot to the opposite side - * @param {Number} value - * @param {Number} lineWidth Used for calculation crisp line - * @param {Number] old Use old coordinates (for resizing and rescaling) - */ - getPlotLinePath: function (value, lineWidth, old, force, translatedValue) { - var axis = this, - chart = axis.chart, - axisLeft = axis.left, - axisTop = axis.top, - x1, - y1, - x2, - y2, - cHeight = (old && chart.oldChartHeight) || chart.chartHeight, - cWidth = (old && chart.oldChartWidth) || chart.chartWidth, - skip, - transB = axis.transB; - - translatedValue = pick(translatedValue, axis.translate(value, null, null, old)); - x1 = x2 = mathRound(translatedValue + transB); - y1 = y2 = mathRound(cHeight - translatedValue - transB); - - if (isNaN(translatedValue)) { // no min or max - skip = true; - - } else if (axis.horiz) { - y1 = axisTop; - y2 = cHeight - axis.bottom; - if (x1 < axisLeft || x1 > axisLeft + axis.width) { - skip = true; - } - } else { - x1 = axisLeft; - x2 = cWidth - axis.right; - - if (y1 < axisTop || y1 > axisTop + axis.height) { - skip = true; - } - } - return skip && !force ? - null : - chart.renderer.crispLine([M, x1, y1, L, x2, y2], lineWidth || 1); - }, - - /** - * Set the tick positions of a linear axis to round values like whole tens or every five. - */ - getLinearTickPositions: function (tickInterval, min, max) { - var pos, - lastPos, - roundedMin = correctFloat(mathFloor(min / tickInterval) * tickInterval), - roundedMax = correctFloat(mathCeil(max / tickInterval) * tickInterval), - tickPositions = []; - - // For single points, add a tick regardless of the relative position (#2662) - if (min === max && isNumber(min)) { - return [min]; - } - - // Populate the intermediate values - pos = roundedMin; - while (pos <= roundedMax) { - - // Place the tick on the rounded value - tickPositions.push(pos); - - // Always add the raw tickInterval, not the corrected one. - pos = correctFloat(pos + tickInterval); - - // If the interval is not big enough in the current min - max range to actually increase - // the loop variable, we need to break out to prevent endless loop. Issue #619 - if (pos === lastPos) { - break; - } - - // Record the last value - lastPos = pos; - } - return tickPositions; - }, - - /** - * Return the minor tick positions. For logarithmic axes, reuse the same logic - * as for major ticks. - */ - getMinorTickPositions: function () { - var axis = this, - options = axis.options, - tickPositions = axis.tickPositions, - minorTickInterval = axis.minorTickInterval, - minorTickPositions = [], - pos, - i, - len; - - if (axis.isLog) { - len = tickPositions.length; - for (i = 1; i < len; i++) { - minorTickPositions = minorTickPositions.concat( - axis.getLogTickPositions(minorTickInterval, tickPositions[i - 1], tickPositions[i], true) - ); - } - } else if (axis.isDatetimeAxis && options.minorTickInterval === 'auto') { // #1314 - minorTickPositions = minorTickPositions.concat( - axis.getTimeTicks( - axis.normalizeTimeTickInterval(minorTickInterval), - axis.min, - axis.max, - options.startOfWeek - ) - ); - if (minorTickPositions[0] < axis.min) { - minorTickPositions.shift(); - } - } else { - for (pos = axis.min + (tickPositions[0] - axis.min) % minorTickInterval; pos <= axis.max; pos += minorTickInterval) { - minorTickPositions.push(pos); - } - } - return minorTickPositions; - }, - - /** - * Adjust the min and max for the minimum range. Keep in mind that the series data is - * not yet processed, so we don't have information on data cropping and grouping, or - * updated axis.pointRange or series.pointRange. The data can't be processed until - * we have finally established min and max. - */ - adjustForMinRange: function () { - var axis = this, - options = axis.options, - min = axis.min, - max = axis.max, - zoomOffset, - spaceAvailable = axis.dataMax - axis.dataMin >= axis.minRange, - closestDataRange, - i, - distance, - xData, - loopLength, - minArgs, - maxArgs; - - // Set the automatic minimum range based on the closest point distance - if (axis.isXAxis && axis.minRange === UNDEFINED && !axis.isLog) { - - if (defined(options.min) || defined(options.max)) { - axis.minRange = null; // don't do this again - - } else { - - // Find the closest distance between raw data points, as opposed to - // closestPointRange that applies to processed points (cropped and grouped) - each(axis.series, function (series) { - xData = series.xData; - loopLength = series.xIncrement ? 1 : xData.length - 1; - for (i = loopLength; i > 0; i--) { - distance = xData[i] - xData[i - 1]; - if (closestDataRange === UNDEFINED || distance < closestDataRange) { - closestDataRange = distance; - } - } - }); - axis.minRange = mathMin(closestDataRange * 5, axis.dataMax - axis.dataMin); - } - } - - // if minRange is exceeded, adjust - if (max - min < axis.minRange) { - var minRange = axis.minRange; - zoomOffset = (minRange - max + min) / 2; - - // if min and max options have been set, don't go beyond it - minArgs = [min - zoomOffset, pick(options.min, min - zoomOffset)]; - if (spaceAvailable) { // if space is available, stay within the data range - minArgs[2] = axis.dataMin; - } - min = arrayMax(minArgs); - - maxArgs = [min + minRange, pick(options.max, min + minRange)]; - if (spaceAvailable) { // if space is availabe, stay within the data range - maxArgs[2] = axis.dataMax; - } - - max = arrayMin(maxArgs); - - // now if the max is adjusted, adjust the min back - if (max - min < minRange) { - minArgs[0] = max - minRange; - minArgs[1] = pick(options.min, max - minRange); - min = arrayMax(minArgs); - } - } - - // Record modified extremes - axis.min = min; - axis.max = max; - }, - - /** - * Update translation information - */ - setAxisTranslation: function (saveOld) { - var axis = this, - range = axis.max - axis.min, - pointRange = axis.axisPointRange || 0, - closestPointRange, - minPointOffset = 0, - pointRangePadding = 0, - linkedParent = axis.linkedParent, - ordinalCorrection, - hasCategories = !!axis.categories, - transA = axis.transA; - - // Adjust translation for padding. Y axis with categories need to go through the same (#1784). - if (axis.isXAxis || hasCategories || pointRange) { - if (linkedParent) { - minPointOffset = linkedParent.minPointOffset; - pointRangePadding = linkedParent.pointRangePadding; - - } else { - each(axis.series, function (series) { - var seriesPointRange = hasCategories ? 1 : (axis.isXAxis ? series.pointRange : (axis.axisPointRange || 0)), // #2806 - pointPlacement = series.options.pointPlacement, - seriesClosestPointRange = series.closestPointRange; - - if (seriesPointRange > range) { // #1446 - seriesPointRange = 0; - } - pointRange = mathMax(pointRange, seriesPointRange); - - // minPointOffset is the value padding to the left of the axis in order to make - // room for points with a pointRange, typically columns. When the pointPlacement option - // is 'between' or 'on', this padding does not apply. - minPointOffset = mathMax( - minPointOffset, - isString(pointPlacement) ? 0 : seriesPointRange / 2 - ); - - // Determine the total padding needed to the length of the axis to make room for the - // pointRange. If the series' pointPlacement is 'on', no padding is added. - pointRangePadding = mathMax( - pointRangePadding, - pointPlacement === 'on' ? 0 : seriesPointRange - ); - - // Set the closestPointRange - if (!series.noSharedTooltip && defined(seriesClosestPointRange)) { - closestPointRange = defined(closestPointRange) ? - mathMin(closestPointRange, seriesClosestPointRange) : - seriesClosestPointRange; - } - }); - } - - // Record minPointOffset and pointRangePadding - ordinalCorrection = axis.ordinalSlope && closestPointRange ? axis.ordinalSlope / closestPointRange : 1; // #988, #1853 - axis.minPointOffset = minPointOffset = minPointOffset * ordinalCorrection; - axis.pointRangePadding = pointRangePadding = pointRangePadding * ordinalCorrection; - - // pointRange means the width reserved for each point, like in a column chart - axis.pointRange = mathMin(pointRange, range); - - // closestPointRange means the closest distance between points. In columns - // it is mostly equal to pointRange, but in lines pointRange is 0 while closestPointRange - // is some other value - axis.closestPointRange = closestPointRange; - } - - // Secondary values - if (saveOld) { - axis.oldTransA = transA; - } - axis.translationSlope = axis.transA = transA = axis.len / ((range + pointRangePadding) || 1); - axis.transB = axis.horiz ? axis.left : axis.bottom; // translation addend - axis.minPixelPadding = transA * minPointOffset; - }, - - /** - * Set the tick positions to round values and optionally extend the extremes - * to the nearest tick - */ - setTickPositions: function (secondPass) { - var axis = this, - chart = axis.chart, - options = axis.options, - isLog = axis.isLog, - isDatetimeAxis = axis.isDatetimeAxis, - isXAxis = axis.isXAxis, - isLinked = axis.isLinked, - tickPositioner = axis.options.tickPositioner, - maxPadding = options.maxPadding, - minPadding = options.minPadding, - length, - linkedParentExtremes, - tickIntervalOption = options.tickInterval, - minTickIntervalOption = options.minTickInterval, - tickPixelIntervalOption = options.tickPixelInterval, - tickPositions, - keepTwoTicksOnly, - categories = axis.categories; - - // linked axis gets the extremes from the parent axis - if (isLinked) { - axis.linkedParent = chart[axis.coll][options.linkedTo]; - linkedParentExtremes = axis.linkedParent.getExtremes(); - axis.min = pick(linkedParentExtremes.min, linkedParentExtremes.dataMin); - axis.max = pick(linkedParentExtremes.max, linkedParentExtremes.dataMax); - if (options.type !== axis.linkedParent.options.type) { - error(11, 1); // Can't link axes of different type - } - } else { // initial min and max from the extreme data values - axis.min = pick(axis.userMin, options.min, axis.dataMin); - axis.max = pick(axis.userMax, options.max, axis.dataMax); - } - - if (isLog) { - if (!secondPass && mathMin(axis.min, pick(axis.dataMin, axis.min)) <= 0) { // #978 - error(10, 1); // Can't plot negative values on log axis - } - axis.min = correctFloat(log2lin(axis.min)); // correctFloat cures #934 - axis.max = correctFloat(log2lin(axis.max)); - } - - // handle zoomed range - if (axis.range && defined(axis.max)) { - axis.userMin = axis.min = mathMax(axis.min, axis.max - axis.range); // #618 - axis.userMax = axis.max; - - axis.range = null; // don't use it when running setExtremes - } - - // Hook for adjusting this.min and this.max. Used by bubble series. - if (axis.beforePadding) { - axis.beforePadding(); - } - - // adjust min and max for the minimum range - axis.adjustForMinRange(); - - // Pad the values to get clear of the chart's edges. To avoid tickInterval taking the padding - // into account, we do this after computing tick interval (#1337). - if (!categories && !axis.axisPointRange && !axis.usePercentage && !isLinked && defined(axis.min) && defined(axis.max)) { - length = axis.max - axis.min; - if (length) { - if (!defined(options.min) && !defined(axis.userMin) && minPadding && (axis.dataMin < 0 || !axis.ignoreMinPadding)) { - axis.min -= length * minPadding; - } - if (!defined(options.max) && !defined(axis.userMax) && maxPadding && (axis.dataMax > 0 || !axis.ignoreMaxPadding)) { - axis.max += length * maxPadding; - } - } - } - - // Stay within floor and ceiling - if (isNumber(options.floor)) { - axis.min = mathMax(axis.min, options.floor); - } - if (isNumber(options.ceiling)) { - axis.max = mathMin(axis.max, options.ceiling); - } - - // get tickInterval - if (axis.min === axis.max || axis.min === undefined || axis.max === undefined) { - axis.tickInterval = 1; - } else if (isLinked && !tickIntervalOption && - tickPixelIntervalOption === axis.linkedParent.options.tickPixelInterval) { - axis.tickInterval = axis.linkedParent.tickInterval; - } else { - axis.tickInterval = pick( - tickIntervalOption, - categories ? // for categoried axis, 1 is default, for linear axis use tickPix - 1 : - // don't let it be more than the data range - (axis.max - axis.min) * tickPixelIntervalOption / mathMax(axis.len, tickPixelIntervalOption) - ); - // For squished axes, set only two ticks - if (!defined(tickIntervalOption) && axis.len < tickPixelIntervalOption && !this.isRadial && - !this.isLog && !categories && options.startOnTick && options.endOnTick) { - keepTwoTicksOnly = true; - axis.tickInterval /= 4; // tick extremes closer to the real values - } - } - - // Now we're finished detecting min and max, crop and group series data. This - // is in turn needed in order to find tick positions in ordinal axes. - if (isXAxis && !secondPass) { - each(axis.series, function (series) { - series.processData(axis.min !== axis.oldMin || axis.max !== axis.oldMax); - }); - } - - // set the translation factor used in translate function - axis.setAxisTranslation(true); - - // hook for ordinal axes and radial axes - if (axis.beforeSetTickPositions) { - axis.beforeSetTickPositions(); - } - - // hook for extensions, used in Highstock ordinal axes - if (axis.postProcessTickInterval) { - axis.tickInterval = axis.postProcessTickInterval(axis.tickInterval); - } - - // In column-like charts, don't cramp in more ticks than there are points (#1943) - if (axis.pointRange) { - axis.tickInterval = mathMax(axis.pointRange, axis.tickInterval); - } - - // Before normalizing the tick interval, handle minimum tick interval. This applies only if tickInterval is not defined. - if (!tickIntervalOption && axis.tickInterval < minTickIntervalOption) { - axis.tickInterval = minTickIntervalOption; - } - - // for linear axes, get magnitude and normalize the interval - if (!isDatetimeAxis && !isLog) { // linear - if (!tickIntervalOption) { - axis.tickInterval = normalizeTickInterval(axis.tickInterval, null, getMagnitude(axis.tickInterval), options); - } - } - - // get minorTickInterval - axis.minorTickInterval = options.minorTickInterval === 'auto' && axis.tickInterval ? - axis.tickInterval / 5 : options.minorTickInterval; - - // find the tick positions - axis.tickPositions = tickPositions = options.tickPositions ? - [].concat(options.tickPositions) : // Work on a copy (#1565) - (tickPositioner && tickPositioner.apply(axis, [axis.min, axis.max])); - if (!tickPositions) { - - // Too many ticks - if (!axis.ordinalPositions && (axis.max - axis.min) / axis.tickInterval > mathMax(2 * axis.len, 200)) { - error(19, true); - } - - if (isDatetimeAxis) { - tickPositions = axis.getTimeTicks( - axis.normalizeTimeTickInterval(axis.tickInterval, options.units), - axis.min, - axis.max, - options.startOfWeek, - axis.ordinalPositions, - axis.closestPointRange, - true - ); - } else if (isLog) { - tickPositions = axis.getLogTickPositions(axis.tickInterval, axis.min, axis.max); - } else { - tickPositions = axis.getLinearTickPositions(axis.tickInterval, axis.min, axis.max); - } - - if (keepTwoTicksOnly) { - tickPositions.splice(1, tickPositions.length - 2); - } - - axis.tickPositions = tickPositions; - } - - if (!isLinked) { - - // reset min/max or remove extremes based on start/end on tick - var roundedMin = tickPositions[0], - roundedMax = tickPositions[tickPositions.length - 1], - minPointOffset = axis.minPointOffset || 0, - singlePad; - - if (options.startOnTick) { - axis.min = roundedMin; - } else if (axis.min - minPointOffset > roundedMin) { - tickPositions.shift(); - } - - if (options.endOnTick) { - axis.max = roundedMax; - } else if (axis.max + minPointOffset < roundedMax) { - tickPositions.pop(); - } - - // When there is only one point, or all points have the same value on this axis, then min - // and max are equal and tickPositions.length is 0 or 1. In this case, add some padding - // in order to center the point, but leave it with one tick. #1337. - if (tickPositions.length === 1) { - singlePad = mathAbs(axis.max) > 10e12 ? 1 : 0.001; // The lowest possible number to avoid extra padding on columns (#2619, #2846) - axis.min -= singlePad; - axis.max += singlePad; - } - } - }, - - /** - * Set the max ticks of either the x and y axis collection - */ - setMaxTicks: function () { - - var chart = this.chart, - maxTicks = chart.maxTicks || {}, - tickPositions = this.tickPositions, - key = this._maxTicksKey = [this.coll, this.pos, this.len].join('-'); - - if (!this.isLinked && !this.isDatetimeAxis && tickPositions && tickPositions.length > (maxTicks[key] || 0) && this.options.alignTicks !== false) { - maxTicks[key] = tickPositions.length; - } - chart.maxTicks = maxTicks; - }, - - /** - * When using multiple axes, adjust the number of ticks to match the highest - * number of ticks in that group - */ - adjustTickAmount: function () { - var axis = this, - chart = axis.chart, - key = axis._maxTicksKey, - tickPositions = axis.tickPositions, - maxTicks = chart.maxTicks; - - if (maxTicks && maxTicks[key] && !axis.isDatetimeAxis && !axis.categories && !axis.isLinked && - axis.options.alignTicks !== false && this.min !== UNDEFINED) { - var oldTickAmount = axis.tickAmount, - calculatedTickAmount = tickPositions.length, - tickAmount; - - // set the axis-level tickAmount to use below - axis.tickAmount = tickAmount = maxTicks[key]; - - if (calculatedTickAmount < tickAmount) { - while (tickPositions.length < tickAmount) { - tickPositions.push(correctFloat( - tickPositions[tickPositions.length - 1] + axis.tickInterval - )); - } - axis.transA *= (calculatedTickAmount - 1) / (tickAmount - 1); - axis.max = tickPositions[tickPositions.length - 1]; - - } - if (defined(oldTickAmount) && tickAmount !== oldTickAmount) { - axis.isDirty = true; - } - } - }, - - /** - * Set the scale based on data min and max, user set min and max or options - * - */ - setScale: function () { - var axis = this, - stacks = axis.stacks, - type, - i, - isDirtyData, - isDirtyAxisLength; - - axis.oldMin = axis.min; - axis.oldMax = axis.max; - axis.oldAxisLength = axis.len; - - // set the new axisLength - axis.setAxisSize(); - //axisLength = horiz ? axisWidth : axisHeight; - isDirtyAxisLength = axis.len !== axis.oldAxisLength; - - // is there new data? - each(axis.series, function (series) { - if (series.isDirtyData || series.isDirty || - series.xAxis.isDirty) { // when x axis is dirty, we need new data extremes for y as well - isDirtyData = true; - } - }); - - // do we really need to go through all this? - if (isDirtyAxisLength || isDirtyData || axis.isLinked || axis.forceRedraw || - axis.userMin !== axis.oldUserMin || axis.userMax !== axis.oldUserMax) { - - // reset stacks - if (!axis.isXAxis) { - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].total = null; - stacks[type][i].cum = 0; - } - } - } - - axis.forceRedraw = false; - - // get data extremes if needed - axis.getSeriesExtremes(); - - // get fixed positions based on tickInterval - axis.setTickPositions(); - - // record old values to decide whether a rescale is necessary later on (#540) - axis.oldUserMin = axis.userMin; - axis.oldUserMax = axis.userMax; - - // Mark as dirty if it is not already set to dirty and extremes have changed. #595. - if (!axis.isDirty) { - axis.isDirty = isDirtyAxisLength || axis.min !== axis.oldMin || axis.max !== axis.oldMax; - } - } else if (!axis.isXAxis) { - if (axis.oldStacks) { - stacks = axis.stacks = axis.oldStacks; - } - - // reset stacks - for (type in stacks) { - for (i in stacks[type]) { - stacks[type][i].cum = stacks[type][i].total; - } - } - } - - // Set the maximum tick amount - axis.setMaxTicks(); - }, - - /** - * Set the extremes and optionally redraw - * @param {Number} newMin - * @param {Number} newMax - * @param {Boolean} redraw - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * @param {Object} eventArguments - * - */ - setExtremes: function (newMin, newMax, redraw, animation, eventArguments) { - var axis = this, - chart = axis.chart; - - redraw = pick(redraw, true); // defaults to true - - // Extend the arguments with min and max - eventArguments = extend(eventArguments, { - min: newMin, - max: newMax - }); - - // Fire the event - fireEvent(axis, 'setExtremes', eventArguments, function () { // the default event handler - - axis.userMin = newMin; - axis.userMax = newMax; - axis.eventArgs = eventArguments; - - // Mark for running afterSetExtremes - axis.isDirtyExtremes = true; - - // redraw - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Overridable method for zooming chart. Pulled out in a separate method to allow overriding - * in stock charts. - */ - zoom: function (newMin, newMax) { - var dataMin = this.dataMin, - dataMax = this.dataMax, - options = this.options; - - // Prevent pinch zooming out of range. Check for defined is for #1946. #1734. - if (!this.allowZoomOutside) { - if (defined(dataMin) && newMin <= mathMin(dataMin, pick(options.min, dataMin))) { - newMin = UNDEFINED; - } - if (defined(dataMax) && newMax >= mathMax(dataMax, pick(options.max, dataMax))) { - newMax = UNDEFINED; - } - } - - // In full view, displaying the reset zoom button is not required - this.displayBtn = newMin !== UNDEFINED || newMax !== UNDEFINED; - - // Do it - this.setExtremes( - newMin, - newMax, - false, - UNDEFINED, - { trigger: 'zoom' } - ); - return true; - }, - - /** - * Update the axis metrics - */ - setAxisSize: function () { - var chart = this.chart, - options = this.options, - offsetLeft = options.offsetLeft || 0, - offsetRight = options.offsetRight || 0, - horiz = this.horiz, - width = pick(options.width, chart.plotWidth - offsetLeft + offsetRight), - height = pick(options.height, chart.plotHeight), - top = pick(options.top, chart.plotTop), - left = pick(options.left, chart.plotLeft + offsetLeft), - percentRegex = /%$/; // docs - - // Check for percentage based input values - if (percentRegex.test(height)) { - height = parseInt(height, 10) / 100 * chart.plotHeight; - } - if (percentRegex.test(top)) { - top = parseInt(top, 10) / 100 * chart.plotHeight + chart.plotTop; - } - - // Expose basic values to use in Series object and navigator - this.left = left; - this.top = top; - this.width = width; - this.height = height; - this.bottom = chart.chartHeight - height - top; - this.right = chart.chartWidth - width - left; - - // Direction agnostic properties - this.len = mathMax(horiz ? width : height, 0); // mathMax fixes #905 - this.pos = horiz ? left : top; // distance from SVG origin - }, - - /** - * Get the actual axis extremes - */ - getExtremes: function () { - var axis = this, - isLog = axis.isLog; - - return { - min: isLog ? correctFloat(lin2log(axis.min)) : axis.min, - max: isLog ? correctFloat(lin2log(axis.max)) : axis.max, - dataMin: axis.dataMin, - dataMax: axis.dataMax, - userMin: axis.userMin, - userMax: axis.userMax - }; - }, - - /** - * Get the zero plane either based on zero or on the min or max value. - * Used in bar and area plots - */ - getThreshold: function (threshold) { - var axis = this, - isLog = axis.isLog; - - var realMin = isLog ? lin2log(axis.min) : axis.min, - realMax = isLog ? lin2log(axis.max) : axis.max; - - if (realMin > threshold || threshold === null) { - threshold = realMin; - } else if (realMax < threshold) { - threshold = realMax; - } - - return axis.translate(threshold, 0, 1, 0, 1); - }, - - /** - * Compute auto alignment for the axis label based on which side the axis is on - * and the given rotation for the label - */ - autoLabelAlign: function (rotation) { - var ret, - angle = (pick(rotation, 0) - (this.side * 90) + 720) % 360; - - if (angle > 15 && angle < 165) { - ret = 'right'; - } else if (angle > 195 && angle < 345) { - ret = 'left'; - } else { - ret = 'center'; - } - return ret; - }, - - /** - * Render the tick labels to a preliminary position to get their sizes - */ - getOffset: function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - tickPositions = axis.tickPositions, - ticks = axis.ticks, - horiz = axis.horiz, - side = axis.side, - invertedSide = chart.inverted ? [1, 0, 3, 2][side] : side, - hasData, - showAxis, - titleOffset = 0, - titleOffsetOption, - titleMargin = 0, - axisTitleOptions = options.title, - labelOptions = options.labels, - labelOffset = 0, // reset - axisOffset = chart.axisOffset, - clipOffset = chart.clipOffset, - directionFactor = [-1, 1, 1, -1][side], - n, - i, - autoStaggerLines = 1, - maxStaggerLines = pick(labelOptions.maxStaggerLines, 5), - sortedPositions, - lastRight, - overlap, - pos, - bBox, - x, - w, - lineNo, - lineHeightCorrection = side === 2 ? renderer.fontMetrics(labelOptions.style.fontSize).b : 0; - - // For reuse in Axis.render - axis.hasData = hasData = (axis.hasVisibleSeries || (defined(axis.min) && defined(axis.max) && !!tickPositions)); - axis.showAxis = showAxis = hasData || pick(options.showEmpty, true); - - // Set/reset staggerLines - axis.staggerLines = axis.horiz && labelOptions.staggerLines; - - // Create the axisGroup and gridGroup elements on first iteration - if (!axis.axisGroup) { - axis.gridGroup = renderer.g('grid') - .attr({ zIndex: options.gridZIndex || 1 }) - .add(); - axis.axisGroup = renderer.g('axis') - .attr({ zIndex: options.zIndex || 2 }) - .add(); - axis.labelGroup = renderer.g('axis-labels') - .attr({ zIndex: labelOptions.zIndex || 7 }) - .addClass(PREFIX + axis.coll.toLowerCase() + '-labels') - .add(); - } - - if (hasData || axis.isLinked) { - - // Set the explicit or automatic label alignment - axis.labelAlign = pick(labelOptions.align || axis.autoLabelAlign(labelOptions.rotation)); - - // Generate ticks - each(tickPositions, function (pos) { - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } else { - ticks[pos].addLabel(); // update labels depending on tick interval - } - }); - - // Handle automatic stagger lines - if (axis.horiz && !axis.staggerLines && maxStaggerLines && !labelOptions.rotation) { - sortedPositions = axis.reversed ? [].concat(tickPositions).reverse() : tickPositions; - while (autoStaggerLines < maxStaggerLines) { - lastRight = []; - overlap = false; - - for (i = 0; i < sortedPositions.length; i++) { - pos = sortedPositions[i]; - bBox = ticks[pos].label && ticks[pos].label.getBBox(); - w = bBox ? bBox.width : 0; - lineNo = i % autoStaggerLines; - - if (w) { - x = axis.translate(pos); // don't handle log - if (lastRight[lineNo] !== UNDEFINED && x < lastRight[lineNo]) { - overlap = true; - } - lastRight[lineNo] = x + w; - } - } - if (overlap) { - autoStaggerLines++; - } else { - break; - } - } - - if (autoStaggerLines > 1) { - axis.staggerLines = autoStaggerLines; - } - } - - - each(tickPositions, function (pos) { - // left side must be align: right and right side must have align: left for labels - if (side === 0 || side === 2 || { 1: 'left', 3: 'right' }[side] === axis.labelAlign) { - - // get the highest offset - labelOffset = mathMax( - ticks[pos].getLabelSize(), - labelOffset - ); - } - - }); - if (axis.staggerLines) { - labelOffset *= axis.staggerLines; - axis.labelOffset = labelOffset; - } - - - } else { // doesn't have data - for (n in ticks) { - ticks[n].destroy(); - delete ticks[n]; - } - } - - if (axisTitleOptions && axisTitleOptions.text && axisTitleOptions.enabled !== false) { - if (!axis.axisTitle) { - axis.axisTitle = renderer.text( - axisTitleOptions.text, - 0, - 0, - axisTitleOptions.useHTML - ) - .attr({ - zIndex: 7, - rotation: axisTitleOptions.rotation || 0, - align: - axisTitleOptions.textAlign || - { low: 'left', middle: 'center', high: 'right' }[axisTitleOptions.align] - }) - .addClass(PREFIX + this.coll.toLowerCase() + '-title') - .css(axisTitleOptions.style) - .add(axis.axisGroup); - axis.axisTitle.isNew = true; - } - - if (showAxis) { - titleOffset = axis.axisTitle.getBBox()[horiz ? 'height' : 'width']; - titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10); - titleOffsetOption = axisTitleOptions.offset; - } - - // hide or show the title depending on whether showEmpty is set - axis.axisTitle[showAxis ? 'show' : 'hide'](); - } - - // handle automatic or user set offset - axis.offset = directionFactor * pick(options.offset, axisOffset[side]); - - axis.axisTitleMargin = - pick(titleOffsetOption, - labelOffset + titleMargin + - (labelOffset && (directionFactor * options.labels[horiz ? 'y' : 'x'] - lineHeightCorrection)) - ); - - axisOffset[side] = mathMax( - axisOffset[side], - axis.axisTitleMargin + titleOffset + directionFactor * axis.offset - ); - clipOffset[invertedSide] = mathMax(clipOffset[invertedSide], mathFloor(options.lineWidth / 2) * 2); - }, - - /** - * Get the path for the axis line - */ - getLinePath: function (lineWidth) { - var chart = this.chart, - opposite = this.opposite, - offset = this.offset, - horiz = this.horiz, - lineLeft = this.left + (opposite ? this.width : 0) + offset, - lineTop = chart.chartHeight - this.bottom - (opposite ? this.height : 0) + offset; - - if (opposite) { - lineWidth *= -1; // crispify the other way - #1480, #1687 - } - - return chart.renderer.crispLine([ - M, - horiz ? - this.left : - lineLeft, - horiz ? - lineTop : - this.top, - L, - horiz ? - chart.chartWidth - this.right : - lineLeft, - horiz ? - lineTop : - chart.chartHeight - this.bottom - ], lineWidth); - }, - - /** - * Position the title - */ - getTitlePosition: function () { - // compute anchor points for each of the title align options - var horiz = this.horiz, - axisLeft = this.left, - axisTop = this.top, - axisLength = this.len, - axisTitleOptions = this.options.title, - margin = horiz ? axisLeft : axisTop, - opposite = this.opposite, - offset = this.offset, - fontSize = pInt(axisTitleOptions.style.fontSize || 12), - - // the position in the length direction of the axis - alongAxis = { - low: margin + (horiz ? 0 : axisLength), - middle: margin + axisLength / 2, - high: margin + (horiz ? axisLength : 0) - }[axisTitleOptions.align], - - // the position in the perpendicular direction of the axis - offAxis = (horiz ? axisTop + this.height : axisLeft) + - (horiz ? 1 : -1) * // horizontal axis reverses the margin - (opposite ? -1 : 1) * // so does opposite axes - this.axisTitleMargin + - (this.side === 2 ? fontSize : 0); - - return { - x: horiz ? - alongAxis : - offAxis + (opposite ? this.width : 0) + offset + - (axisTitleOptions.x || 0), // x - y: horiz ? - offAxis - (opposite ? this.height : 0) + offset : - alongAxis + (axisTitleOptions.y || 0) // y - }; - }, - - /** - * Render the axis - */ - render: function () { - var axis = this, - horiz = axis.horiz, - reversed = axis.reversed, - chart = axis.chart, - renderer = chart.renderer, - options = axis.options, - isLog = axis.isLog, - isLinked = axis.isLinked, - tickPositions = axis.tickPositions, - sortedPositions, - axisTitle = axis.axisTitle, - ticks = axis.ticks, - minorTicks = axis.minorTicks, - alternateBands = axis.alternateBands, - stackLabelOptions = options.stackLabels, - alternateGridColor = options.alternateGridColor, - tickmarkOffset = axis.tickmarkOffset, - lineWidth = options.lineWidth, - linePath, - hasRendered = chart.hasRendered, - slideInTicks = hasRendered && defined(axis.oldMin) && !isNaN(axis.oldMin), - hasData = axis.hasData, - showAxis = axis.showAxis, - from, - overflow = options.labels.overflow, - justifyLabels = axis.justifyLabels = horiz && overflow !== false, - to; - - // Reset - axis.labelEdge.length = 0; - axis.justifyToPlot = overflow === 'justify'; - - // Mark all elements inActive before we go over and mark the active ones - each([ticks, minorTicks, alternateBands], function (coll) { - var pos; - for (pos in coll) { - coll[pos].isActive = false; - } - }); - - // If the series has data draw the ticks. Else only the line and title - if (hasData || isLinked) { - - // minor ticks - if (axis.minorTickInterval && !axis.categories) { - each(axis.getMinorTickPositions(), function (pos) { - if (!minorTicks[pos]) { - minorTicks[pos] = new Tick(axis, pos, 'minor'); - } - - // render new ticks in old position - if (slideInTicks && minorTicks[pos].isNew) { - minorTicks[pos].render(null, true); - } - - minorTicks[pos].render(null, false, 1); - }); - } - - // Major ticks. Pull out the first item and render it last so that - // we can get the position of the neighbour label. #808. - if (tickPositions.length) { // #1300 - sortedPositions = tickPositions.slice(); - if ((horiz && reversed) || (!horiz && !reversed)) { - sortedPositions.reverse(); - } - if (justifyLabels) { - sortedPositions = sortedPositions.slice(1).concat([sortedPositions[0]]); - } - each(sortedPositions, function (pos, i) { - - // Reorganize the indices - if (justifyLabels) { - i = (i === sortedPositions.length - 1) ? 0 : i + 1; - } - - // linked axes need an extra check to find out if - if (!isLinked || (pos >= axis.min && pos <= axis.max)) { - - if (!ticks[pos]) { - ticks[pos] = new Tick(axis, pos); - } - - // render new ticks in old position - if (slideInTicks && ticks[pos].isNew) { - ticks[pos].render(i, true, 0.1); - } - - ticks[pos].render(i, false, 1); - } - - }); - // In a categorized axis, the tick marks are displayed between labels. So - // we need to add a tick mark and grid line at the left edge of the X axis. - if (tickmarkOffset && axis.min === 0) { - if (!ticks[-1]) { - ticks[-1] = new Tick(axis, -1, null, true); - } - ticks[-1].render(-1); - } - - } - - // alternate grid color - if (alternateGridColor) { - each(tickPositions, function (pos, i) { - if (i % 2 === 0 && pos < axis.max) { - if (!alternateBands[pos]) { - alternateBands[pos] = new Highcharts.PlotLineOrBand(axis); - } - from = pos + tickmarkOffset; // #949 - to = tickPositions[i + 1] !== UNDEFINED ? tickPositions[i + 1] + tickmarkOffset : axis.max; - alternateBands[pos].options = { - from: isLog ? lin2log(from) : from, - to: isLog ? lin2log(to) : to, - color: alternateGridColor - }; - alternateBands[pos].render(); - alternateBands[pos].isActive = true; - } - }); - } - - // custom plot lines and bands - if (!axis._addedPlotLB) { // only first time - each((options.plotLines || []).concat(options.plotBands || []), function (plotLineOptions) { - axis.addPlotBandOrLine(plotLineOptions); - }); - axis._addedPlotLB = true; - } - - } // end if hasData - - // Remove inactive ticks - each([ticks, minorTicks, alternateBands], function (coll) { - var pos, - i, - forDestruction = [], - delay = globalAnimation ? globalAnimation.duration || 500 : 0, - destroyInactiveItems = function () { - i = forDestruction.length; - while (i--) { - // When resizing rapidly, the same items may be destroyed in different timeouts, - // or the may be reactivated - if (coll[forDestruction[i]] && !coll[forDestruction[i]].isActive) { - coll[forDestruction[i]].destroy(); - delete coll[forDestruction[i]]; - } - } - - }; - - for (pos in coll) { - - if (!coll[pos].isActive) { - // Render to zero opacity - coll[pos].render(pos, false, 0); - coll[pos].isActive = false; - forDestruction.push(pos); - } - } - - // When the objects are finished fading out, destroy them - if (coll === alternateBands || !chart.hasRendered || !delay) { - destroyInactiveItems(); - } else if (delay) { - setTimeout(destroyInactiveItems, delay); - } - }); - - // Static items. As the axis group is cleared on subsequent calls - // to render, these items are added outside the group. - // axis line - if (lineWidth) { - linePath = axis.getLinePath(lineWidth); - if (!axis.axisLine) { - axis.axisLine = renderer.path(linePath) - .attr({ - stroke: options.lineColor, - 'stroke-width': lineWidth, - zIndex: 7 - }) - .add(axis.axisGroup); - } else { - axis.axisLine.animate({ d: linePath }); - } - - // show or hide the line depending on options.showEmpty - axis.axisLine[showAxis ? 'show' : 'hide'](); - } - - if (axisTitle && showAxis) { - - axisTitle[axisTitle.isNew ? 'attr' : 'animate']( - axis.getTitlePosition() - ); - axisTitle.isNew = false; - } - - // Stacked totals: - if (stackLabelOptions && stackLabelOptions.enabled) { - axis.renderStackTotals(); - } - // End stacked totals - - axis.isDirty = false; - }, - - /** - * Redraw the axis to reflect changes in the data or axis extremes - */ - redraw: function () { - var axis = this, - chart = axis.chart, - pointer = chart.pointer; - - // hide tooltip and hover states - if (pointer) { - pointer.reset(true); - } - - // render the axis - axis.render(); - - // move plot lines and bands - each(axis.plotLinesAndBands, function (plotLine) { - plotLine.render(); - }); - - // mark associated series as dirty and ready for redraw - each(axis.series, function (series) { - series.isDirty = true; - }); - - }, - - /** - * Destroys an Axis instance. - */ - destroy: function (keepEvents) { - var axis = this, - stacks = axis.stacks, - stackKey, - plotLinesAndBands = axis.plotLinesAndBands, - i; - - // Remove the events - if (!keepEvents) { - removeEvent(axis); - } - - // Destroy each stack total - for (stackKey in stacks) { - destroyObjectProperties(stacks[stackKey]); - - stacks[stackKey] = null; - } - - // Destroy collections - each([axis.ticks, axis.minorTicks, axis.alternateBands], function (coll) { - destroyObjectProperties(coll); - }); - i = plotLinesAndBands.length; - while (i--) { // #1975 - plotLinesAndBands[i].destroy(); - } - - // Destroy local variables - each(['stackTotalGroup', 'axisLine', 'axisTitle', 'axisGroup', 'cross', 'gridGroup', 'labelGroup'], function (prop) { - if (axis[prop]) { - axis[prop] = axis[prop].destroy(); - } - }); - - // Destroy crosshair - if (this.cross) { - this.cross.destroy(); - } - }, - - /** - * Draw the crosshair - */ - drawCrosshair: function (e, point) { - if (!this.crosshair) { return; }// Do not draw crosshairs if you don't have too. - - if ((defined(point) || !pick(this.crosshair.snap, true)) === false) { - this.hideCrosshair(); - return; - } - - var path, - options = this.crosshair, - animation = options.animation, - pos; - - // Get the path - if (!pick(options.snap, true)) { - pos = (this.horiz ? e.chartX - this.pos : this.len - e.chartY + this.pos); - } else if (defined(point)) { - /*jslint eqeq: true*/ - pos = (this.chart.inverted != this.horiz) ? point.plotX : this.len - point.plotY; - /*jslint eqeq: false*/ - } - - if (this.isRadial) { - path = this.getPlotLinePath(this.isXAxis ? point.x : pick(point.stackY, point.y)); - } else { - path = this.getPlotLinePath(null, null, null, null, pos); - } - - if (path === null) { - this.hideCrosshair(); - return; - } - - // Draw the cross - if (this.cross) { - this.cross - .attr({ visibility: VISIBLE })[animation ? 'animate' : 'attr']({ d: path }, animation); - } else { - var attribs = { - 'stroke-width': options.width || 1, - stroke: options.color || '#C0C0C0', - zIndex: options.zIndex || 2 - }; - if (options.dashStyle) { - attribs.dashstyle = options.dashStyle; - } - this.cross = this.chart.renderer.path(path).attr(attribs).add(); - } - }, - - /** - * Hide the crosshair. - */ - hideCrosshair: function () { - if (this.cross) { - this.cross.hide(); - } - } -}; // end Axis - -extend(Axis.prototype, AxisPlotLineOrBandExtension); - -/** - * Set the tick positions to a time unit that makes sense, for example - * on the first of each month or on every Monday. Return an array - * with the time positions. Used in datetime axes as well as for grouping - * data on a datetime axis. - * - * @param {Object} normalizedInterval The interval in axis values (ms) and the count - * @param {Number} min The minimum in axis values - * @param {Number} max The maximum in axis values - * @param {Number} startOfWeek - */ -Axis.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) { - var tickPositions = [], - i, - higherRanks = {}, - useUTC = defaultOptions.global.useUTC, - minYear, // used in months and years as a basis for Date.UTC() - minDate = new Date(min - timezoneOffset), - interval = normalizedInterval.unitRange, - count = normalizedInterval.count; - - if (defined(min)) { // #1300 - if (interval >= timeUnits[SECOND]) { // second - minDate.setMilliseconds(0); - minDate.setSeconds(interval >= timeUnits[MINUTE] ? 0 : - count * mathFloor(minDate.getSeconds() / count)); - } - - if (interval >= timeUnits[MINUTE]) { // minute - minDate[setMinutes](interval >= timeUnits[HOUR] ? 0 : - count * mathFloor(minDate[getMinutes]() / count)); - } - - if (interval >= timeUnits[HOUR]) { // hour - minDate[setHours](interval >= timeUnits[DAY] ? 0 : - count * mathFloor(minDate[getHours]() / count)); - } - - if (interval >= timeUnits[DAY]) { // day - minDate[setDate](interval >= timeUnits[MONTH] ? 1 : - count * mathFloor(minDate[getDate]() / count)); - } - - if (interval >= timeUnits[MONTH]) { // month - minDate[setMonth](interval >= timeUnits[YEAR] ? 0 : - count * mathFloor(minDate[getMonth]() / count)); - minYear = minDate[getFullYear](); - } - - if (interval >= timeUnits[YEAR]) { // year - minYear -= minYear % count; - minDate[setFullYear](minYear); - } - - // week is a special case that runs outside the hierarchy - if (interval === timeUnits[WEEK]) { - // get start of current week, independent of count - minDate[setDate](minDate[getDate]() - minDate[getDay]() + - pick(startOfWeek, 1)); - } - - - // get tick positions - i = 1; - if (timezoneOffset) { - minDate = new Date(minDate.getTime() + timezoneOffset); - } - minYear = minDate[getFullYear](); - var time = minDate.getTime(), - minMonth = minDate[getMonth](), - minDateDate = minDate[getDate](), - localTimezoneOffset = useUTC ? - timezoneOffset : - (24 * 3600 * 1000 + minDate.getTimezoneOffset() * 60 * 1000) % (24 * 3600 * 1000); // #950 - - // iterate and add tick positions at appropriate values - while (time < max) { - tickPositions.push(time); - - // if the interval is years, use Date.UTC to increase years - if (interval === timeUnits[YEAR]) { - time = makeTime(minYear + i * count, 0); - - // if the interval is months, use Date.UTC to increase months - } else if (interval === timeUnits[MONTH]) { - time = makeTime(minYear, minMonth + i * count); - - // if we're using global time, the interval is not fixed as it jumps - // one hour at the DST crossover - } else if (!useUTC && (interval === timeUnits[DAY] || interval === timeUnits[WEEK])) { - time = makeTime(minYear, minMonth, minDateDate + - i * count * (interval === timeUnits[DAY] ? 1 : 7)); - - // else, the interval is fixed and we use simple addition - } else { - time += interval * count; - } - - i++; - } - - // push the last time - tickPositions.push(time); - - - // mark new days if the time is dividible by day (#1649, #1760) - each(grep(tickPositions, function (time) { - return interval <= timeUnits[HOUR] && time % timeUnits[DAY] === localTimezoneOffset; - }), function (time) { - higherRanks[time] = DAY; - }); - } - - - // record information on the chosen unit - for dynamic label formatter - tickPositions.info = extend(normalizedInterval, { - higherRanks: higherRanks, - totalRange: interval * count - }); - - return tickPositions; -}; - -/** - * Get a normalized tick interval for dates. Returns a configuration object with - * unit range (interval), count and name. Used to prepare data for getTimeTicks. - * Previously this logic was part of getTimeTicks, but as getTimeTicks now runs - * of segments in stock charts, the normalizing logic was extracted in order to - * prevent it for running over again for each segment having the same interval. - * #662, #697. - */ -Axis.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) { - var units = unitsOption || [[ - MILLISECOND, // unit name - [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples - ], [ - SECOND, - [1, 2, 5, 10, 15, 30] - ], [ - MINUTE, - [1, 2, 5, 10, 15, 30] - ], [ - HOUR, - [1, 2, 3, 4, 6, 8, 12] - ], [ - DAY, - [1, 2] - ], [ - WEEK, - [1, 2] - ], [ - MONTH, - [1, 2, 3, 4, 6] - ], [ - YEAR, - null - ]], - unit = units[units.length - 1], // default unit is years - interval = timeUnits[unit[0]], - multiples = unit[1], - count, - i; - - // loop through the units to find the one that best fits the tickInterval - for (i = 0; i < units.length; i++) { - unit = units[i]; - interval = timeUnits[unit[0]]; - multiples = unit[1]; - - - if (units[i + 1]) { - // lessThan is in the middle between the highest multiple and the next unit. - var lessThan = (interval * multiples[multiples.length - 1] + - timeUnits[units[i + 1][0]]) / 2; - - // break and keep the current unit - if (tickInterval <= lessThan) { - break; - } - } - } - - // prevent 2.5 years intervals, though 25, 250 etc. are allowed - if (interval === timeUnits[YEAR] && tickInterval < 5 * interval) { - multiples = [1, 2, 5]; - } - - // get the count - count = normalizeTickInterval( - tickInterval / interval, - multiples, - unit[0] === YEAR ? mathMax(getMagnitude(tickInterval / interval), 1) : 1 // #1913, #2360 - ); - - return { - unitRange: interval, - count: count, - unitName: unit[0] - }; -};/** - * Methods defined on the Axis prototype - */ - -/** - * Set the tick positions of a logarithmic axis - */ -Axis.prototype.getLogTickPositions = function (interval, min, max, minor) { - var axis = this, - options = axis.options, - axisLength = axis.len, - // Since we use this method for both major and minor ticks, - // use a local variable and return the result - positions = []; - - // Reset - if (!minor) { - axis._minorAutoInterval = null; - } - - // First case: All ticks fall on whole logarithms: 1, 10, 100 etc. - if (interval >= 0.5) { - interval = mathRound(interval); - positions = axis.getLinearTickPositions(interval, min, max); - - // Second case: We need intermediary ticks. For example - // 1, 2, 4, 6, 8, 10, 20, 40 etc. - } else if (interval >= 0.08) { - var roundedMin = mathFloor(min), - intermediate, - i, - j, - len, - pos, - lastPos, - break2; - - if (interval > 0.3) { - intermediate = [1, 2, 4]; - } else if (interval > 0.15) { // 0.2 equals five minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 4, 6, 8]; - } else { // 0.1 equals ten minor ticks per 1, 10, 100 etc - intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - } - - for (i = roundedMin; i < max + 1 && !break2; i++) { - len = intermediate.length; - for (j = 0; j < len && !break2; j++) { - pos = log2lin(lin2log(i) * intermediate[j]); - - if (pos > min && (!minor || lastPos <= max)) { // #1670 - positions.push(lastPos); - } - - if (lastPos > max) { - break2 = true; - } - lastPos = pos; - } - } - - // Third case: We are so deep in between whole logarithmic values that - // we might as well handle the tick positions like a linear axis. For - // example 1.01, 1.02, 1.03, 1.04. - } else { - var realMin = lin2log(min), - realMax = lin2log(max), - tickIntervalOption = options[minor ? 'minorTickInterval' : 'tickInterval'], - filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption, - tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), - totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength; - - interval = pick( - filteredTickIntervalOption, - axis._minorAutoInterval, - (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1) - ); - - interval = normalizeTickInterval( - interval, - null, - getMagnitude(interval) - ); - - positions = map(axis.getLinearTickPositions( - interval, - realMin, - realMax - ), log2lin); - - if (!minor) { - axis._minorAutoInterval = interval / 5; - } - } - - // Set the axis-level tickInterval variable - if (!minor) { - axis.tickInterval = interval; - } - return positions; -};/** - * The tooltip object - * @param {Object} chart The chart instance - * @param {Object} options Tooltip options - */ -var Tooltip = Highcharts.Tooltip = function () { - this.init.apply(this, arguments); -}; - -Tooltip.prototype = { - - init: function (chart, options) { - - var borderWidth = options.borderWidth, - style = options.style, - padding = pInt(style.padding); - - // Save the chart and options - this.chart = chart; - this.options = options; - - // Keep track of the current series - //this.currentSeries = UNDEFINED; - - // List of crosshairs - this.crosshairs = []; - - // Current values of x and y when animating - this.now = { x: 0, y: 0 }; - - // The tooltip is initially hidden - this.isHidden = true; - - - // create the label - this.label = chart.renderer.label('', 0, 0, options.shape || 'callout', null, null, options.useHTML, null, 'tooltip') - .attr({ - padding: padding, - fill: options.backgroundColor, - 'stroke-width': borderWidth, - r: options.borderRadius, - zIndex: 8 - }) - .css(style) - .css({ padding: 0 }) // Remove it from VML, the padding is applied as an attribute instead (#1117) - .add() - .attr({ y: -9999 }); // #2301, #2657 - - // When using canVG the shadow shows up as a gray circle - // even if the tooltip is hidden. - if (!useCanVG) { - this.label.shadow(options.shadow); - } - - // Public property for getting the shared state. - this.shared = options.shared; - }, - - /** - * Destroy the tooltip and its elements. - */ - destroy: function () { - // Destroy and clear local variables - if (this.label) { - this.label = this.label.destroy(); - } - clearTimeout(this.hideTimer); - clearTimeout(this.tooltipTimeout); - }, - - /** - * Provide a soft movement for the tooltip - * - * @param {Number} x - * @param {Number} y - * @private - */ - move: function (x, y, anchorX, anchorY) { - var tooltip = this, - now = tooltip.now, - animate = tooltip.options.animation !== false && !tooltip.isHidden, - skipAnchor = tooltip.followPointer || tooltip.len > 1; - - // get intermediate values for animation - extend(now, { - x: animate ? (2 * now.x + x) / 3 : x, - y: animate ? (now.y + y) / 2 : y, - anchorX: skipAnchor ? UNDEFINED : animate ? (2 * now.anchorX + anchorX) / 3 : anchorX, - anchorY: skipAnchor ? UNDEFINED : animate ? (now.anchorY + anchorY) / 2 : anchorY - }); - - // move to the intermediate value - tooltip.label.attr(now); - - - // run on next tick of the mouse tracker - if (animate && (mathAbs(x - now.x) > 1 || mathAbs(y - now.y) > 1)) { - - // never allow two timeouts - clearTimeout(this.tooltipTimeout); - - // set the fixed interval ticking for the smooth tooltip - this.tooltipTimeout = setTimeout(function () { - // The interval function may still be running during destroy, so check that the chart is really there before calling. - if (tooltip) { - tooltip.move(x, y, anchorX, anchorY); - } - }, 32); - - } - }, - - /** - * Hide the tooltip - */ - hide: function () { - var tooltip = this, - hoverPoints; - - clearTimeout(this.hideTimer); // disallow duplicate timers (#1728, #1766) - if (!this.isHidden) { - hoverPoints = this.chart.hoverPoints; - - this.hideTimer = setTimeout(function () { - tooltip.label.fadeOut(); - tooltip.isHidden = true; - }, pick(this.options.hideDelay, 500)); - - // hide previous hoverPoints and set new - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - this.chart.hoverPoints = null; - } - }, - - /** - * Extendable method to get the anchor position of the tooltip - * from a point or set of points - */ - getAnchor: function (points, mouseEvent) { - var ret, - chart = this.chart, - inverted = chart.inverted, - plotTop = chart.plotTop, - plotX = 0, - plotY = 0, - yAxis; - - points = splat(points); - - // Pie uses a special tooltipPos - ret = points[0].tooltipPos; - - // When tooltip follows mouse, relate the position to the mouse - if (this.followPointer && mouseEvent) { - if (mouseEvent.chartX === UNDEFINED) { - mouseEvent = chart.pointer.normalize(mouseEvent); - } - ret = [ - mouseEvent.chartX - chart.plotLeft, - mouseEvent.chartY - plotTop - ]; - } - // When shared, use the average position - if (!ret) { - each(points, function (point) { - yAxis = point.series.yAxis; - plotX += point.plotX; - plotY += (point.plotLow ? (point.plotLow + point.plotHigh) / 2 : point.plotY) + - (!inverted && yAxis ? yAxis.top - plotTop : 0); // #1151 - }); - - plotX /= points.length; - plotY /= points.length; - - ret = [ - inverted ? chart.plotWidth - plotY : plotX, - this.shared && !inverted && points.length > 1 && mouseEvent ? - mouseEvent.chartY - plotTop : // place shared tooltip next to the mouse (#424) - inverted ? chart.plotHeight - plotX : plotY - ]; - } - - return map(ret, mathRound); - }, - - /** - * Place the tooltip in a chart without spilling over - * and not covering the point it self. - */ - getPosition: function (boxWidth, boxHeight, point) { - - var chart = this.chart, - distance = this.distance, - ret = {}, - swapped, - first = ['y', chart.chartHeight, boxHeight, point.plotY + chart.plotTop], - second = ['x', chart.chartWidth, boxWidth, point.plotX + chart.plotLeft], - // The far side is right or bottom - preferFarSide = point.ttBelow || (chart.inverted && !point.negative) || (!chart.inverted && point.negative), - /** - * Handle the preferred dimension. When the preferred dimension is tooltip - * on top or bottom of the point, it will look for space there. - */ - firstDimension = function (dim, outerSize, innerSize, point) { - var roomLeft = innerSize < point - distance, - roomRight = point + distance + innerSize < outerSize, - alignedLeft = point - distance - innerSize, - alignedRight = point + distance; - - if (preferFarSide && roomRight) { - ret[dim] = alignedRight; - } else if (!preferFarSide && roomLeft) { - ret[dim] = alignedLeft; - } else if (roomLeft) { - ret[dim] = alignedLeft; - } else if (roomRight) { - ret[dim] = alignedRight; - } else { - return false; - } - }, - /** - * Handle the secondary dimension. If the preferred dimension is tooltip - * on top or bottom of the point, the second dimension is to align the tooltip - * above the point, trying to align center but allowing left or right - * align within the chart box. - */ - secondDimension = function (dim, outerSize, innerSize, point) { - // Too close to the edge, return false and swap dimensions - if (point < distance || point > outerSize - distance) { - return false; - - // Align left/top - } else if (point < innerSize / 2) { - ret[dim] = 1; - // Align right/bottom - } else if (point > outerSize - innerSize / 2) { - ret[dim] = outerSize - innerSize - 2; - // Align center - } else { - ret[dim] = point - innerSize / 2; - } - }, - /** - * Swap the dimensions - */ - swap = function (count) { - var temp = first; - first = second; - second = temp; - swapped = count; - }, - run = function () { - if (firstDimension.apply(0, first) !== false) { - if (secondDimension.apply(0, second) === false && !swapped) { - swap(true); - run(); - } - } else if (!swapped) { - swap(true); - run(); - } else { - ret.x = ret.y = 0; - } - }; - - // Under these conditions, prefer the tooltip on the side of the point - if (chart.inverted || this.len > 1) { - swap(); - } - run(); - - return ret; - - }, - - /** - * In case no user defined formatter is given, this will be used. Note that the context - * here is an object holding point, series, x, y etc. - */ - defaultFormatter: function (tooltip) { - var items = this.points || splat(this), - series = items[0].series, - s; - - // build the header - s = [tooltip.tooltipHeaderFormatter(items[0])]; - - // build the values - each(items, function (item) { - series = item.series; - s.push((series.tooltipFormatter && series.tooltipFormatter(item)) || - item.point.tooltipFormatter(series.tooltipOptions.pointFormat)); - }); - - // footer - s.push(tooltip.options.footerFormat || ''); - - return s.join(''); - }, - - /** - * Refresh the tooltip's text and position. - * @param {Object} point - */ - refresh: function (point, mouseEvent) { - var tooltip = this, - chart = tooltip.chart, - label = tooltip.label, - options = tooltip.options, - x, - y, - anchor, - textConfig = {}, - text, - pointConfig = [], - formatter = options.formatter || tooltip.defaultFormatter, - hoverPoints = chart.hoverPoints, - borderColor, - shared = tooltip.shared, - currentSeries; - - clearTimeout(this.hideTimer); - - // get the reference point coordinates (pie charts use tooltipPos) - tooltip.followPointer = splat(point)[0].series.tooltipOptions.followPointer; - anchor = tooltip.getAnchor(point, mouseEvent); - x = anchor[0]; - y = anchor[1]; - - // shared tooltip, array is sent over - if (shared && !(point.series && point.series.noSharedTooltip)) { - - // hide previous hoverPoints and set new - - chart.hoverPoints = point; - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(point, function (item) { - item.setState(HOVER_STATE); - - pointConfig.push(item.getLabelConfig()); - }); - - textConfig = { - x: point[0].category, - y: point[0].y - }; - textConfig.points = pointConfig; - this.len = pointConfig.length; - point = point[0]; - - // single point tooltip - } else { - textConfig = point.getLabelConfig(); - } - text = formatter.call(textConfig, tooltip); - - // register the current series - currentSeries = point.series; - this.distance = pick(currentSeries.tooltipOptions.distance, 16); - - // update the inner HTML - if (text === false) { - this.hide(); - } else { - - // show it - if (tooltip.isHidden) { - stop(label); - label.attr('opacity', 1).show(); - } - - // update text - label.attr({ - text: text - }); - - // set the stroke color of the box - borderColor = options.borderColor || point.color || currentSeries.color || '#606060'; - label.attr({ - stroke: borderColor - }); - - tooltip.updatePosition({ plotX: x, plotY: y, negative: point.negative, ttBelow: point.ttBelow }); - - this.isHidden = false; - } - fireEvent(chart, 'tooltipRefresh', { - text: text, - x: x + chart.plotLeft, - y: y + chart.plotTop, - borderColor: borderColor - }); - }, - - /** - * Find the new position and perform the move - */ - updatePosition: function (point) { - var chart = this.chart, - label = this.label, - pos = (this.options.positioner || this.getPosition).call( - this, - label.width, - label.height, - point - ); - - // do the move - this.move( - mathRound(pos.x), - mathRound(pos.y), - point.plotX + chart.plotLeft, - point.plotY + chart.plotTop - ); - }, - - - /** - * Format the header of the tooltip - */ - tooltipHeaderFormatter: function (point) { - var series = point.series, - tooltipOptions = series.tooltipOptions, - dateTimeLabelFormats = tooltipOptions.dateTimeLabelFormats, - xDateFormat = tooltipOptions.xDateFormat, - xAxis = series.xAxis, - isDateTime = xAxis && xAxis.options.type === 'datetime' && isNumber(point.key), - headerFormat = tooltipOptions.headerFormat, - closestPointRange = xAxis && xAxis.closestPointRange, - n; - - // Guess the best date format based on the closest point distance (#568) - if (isDateTime && !xDateFormat) { - if (closestPointRange) { - for (n in timeUnits) { - if (timeUnits[n] >= closestPointRange || - // If the point is placed every day at 23:59, we need to show - // the minutes as well. This logic only works for time units less than - // a day, since all higher time units are dividable by those. #2637. - (timeUnits[n] <= timeUnits[DAY] && point.key % timeUnits[n] > 0)) { - xDateFormat = dateTimeLabelFormats[n]; - break; - } - } - } else { - xDateFormat = dateTimeLabelFormats.day; - } - - xDateFormat = xDateFormat || dateTimeLabelFormats.year; // #2546, 2581 - - } - - // Insert the header date format if any - if (isDateTime && xDateFormat) { - headerFormat = headerFormat.replace('{point.key}', '{point.key:' + xDateFormat + '}'); - } - - return format(headerFormat, { - point: point, - series: series - }); - } -}; - -var hoverChartIndex; - -// Global flag for touch support -hasTouch = doc.documentElement.ontouchstart !== UNDEFINED; - -/** - * The mouse tracker object. All methods starting with "on" are primary DOM event handlers. - * Subsequent methods should be named differently from what they are doing. - * @param {Object} chart The Chart instance - * @param {Object} options The root options object - */ -var Pointer = Highcharts.Pointer = function (chart, options) { - this.init(chart, options); -}; - -Pointer.prototype = { - /** - * Initialize Pointer - */ - init: function (chart, options) { - - var chartOptions = options.chart, - chartEvents = chartOptions.events, - zoomType = useCanVG ? '' : chartOptions.zoomType, - inverted = chart.inverted, - zoomX, - zoomY; - - // Store references - this.options = options; - this.chart = chart; - - // Zoom status - this.zoomX = zoomX = /x/.test(zoomType); - this.zoomY = zoomY = /y/.test(zoomType); - this.zoomHor = (zoomX && !inverted) || (zoomY && inverted); - this.zoomVert = (zoomY && !inverted) || (zoomX && inverted); - this.hasZoom = zoomX || zoomY; - - // Do we need to handle click on a touch device? - this.runChartClick = chartEvents && !!chartEvents.click; - - this.pinchDown = []; - this.lastValidTouch = {}; - - if (Highcharts.Tooltip && options.tooltip.enabled) { - chart.tooltip = new Tooltip(chart, options.tooltip); - this.followTouchMove = options.tooltip.followTouchMove; - } - - this.setDOMEvents(); - }, - - /** - * Add crossbrowser support for chartX and chartY - * @param {Object} e The event object in standard browsers - */ - normalize: function (e, chartPosition) { - var chartX, - chartY, - ePos; - - // common IE normalizing - e = e || window.event; - - // Framework specific normalizing (#1165) - e = washMouseEvent(e); - - // More IE normalizing, needs to go after washMouseEvent - if (!e.target) { - e.target = e.srcElement; - } - - // iOS (#2757) - ePos = e.touches ? (e.touches.length ? e.touches.item(0) : e.changedTouches[0]) : e; - - // Get mouse position - if (!chartPosition) { - this.chartPosition = chartPosition = offset(this.chart.container); - } - - // chartX and chartY - if (ePos.pageX === UNDEFINED) { // IE < 9. #886. - chartX = mathMax(e.x, e.clientX - chartPosition.left); // #2005, #2129: the second case is - // for IE10 quirks mode within framesets - chartY = e.y; - } else { - chartX = ePos.pageX - chartPosition.left; - chartY = ePos.pageY - chartPosition.top; - } - - return extend(e, { - chartX: mathRound(chartX), - chartY: mathRound(chartY) - }); - }, - - /** - * Get the click position in terms of axis values. - * - * @param {Object} e A pointer event - */ - getCoordinates: function (e) { - var coordinates = { - xAxis: [], - yAxis: [] - }; - - each(this.chart.axes, function (axis) { - coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({ - axis: axis, - value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY']) - }); - }); - return coordinates; - }, - - /** - * Return the index in the tooltipPoints array, corresponding to pixel position in - * the plot area. - */ - getIndex: function (e) { - var chart = this.chart; - return chart.inverted ? - chart.plotHeight + chart.plotTop - e.chartY : - e.chartX - chart.plotLeft; - }, - - /** - * With line type charts with a single tracker, get the point closest to the mouse. - * Run Point.onMouseOver and display tooltip for the point or points. - */ - runPointActions: function (e) { - var pointer = this, - chart = pointer.chart, - series = chart.series, - tooltip = chart.tooltip, - followPointer, - point, - points, - hoverPoint = chart.hoverPoint, - hoverSeries = chart.hoverSeries, - i, - j, - distance = chart.chartWidth, - index = pointer.getIndex(e), - anchor; - - // shared tooltip - if (tooltip && pointer.options.tooltip.shared && !(hoverSeries && hoverSeries.noSharedTooltip)) { - points = []; - - // loop over all series and find the ones with points closest to the mouse - i = series.length; - for (j = 0; j < i; j++) { - if (series[j].visible && - series[j].options.enableMouseTracking !== false && - !series[j].noSharedTooltip && series[j].singularTooltips !== true && series[j].tooltipPoints.length) { - point = series[j].tooltipPoints[index]; - if (point && point.series) { // not a dummy point, #1544 - point._dist = mathAbs(index - point.clientX); - distance = mathMin(distance, point._dist); - points.push(point); - } - } - } - // remove furthest points - i = points.length; - while (i--) { - if (points[i]._dist > distance) { - points.splice(i, 1); - } - } - // refresh the tooltip if necessary - if (points.length && (points[0].clientX !== pointer.hoverX)) { - tooltip.refresh(points, e); - pointer.hoverX = points[0].clientX; - } - } - - // Separate tooltip and general mouse events - followPointer = hoverSeries && hoverSeries.tooltipOptions.followPointer; - if (hoverSeries && hoverSeries.tracker && !followPointer) { // #2584, #2830 - - // get the point - point = hoverSeries.tooltipPoints[index]; - - // a new point is hovered, refresh the tooltip - if (point && point !== hoverPoint) { - - // trigger the events - point.onMouseOver(e); - - } - - } else if (tooltip && followPointer && !tooltip.isHidden) { - anchor = tooltip.getAnchor([{}], e); - tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] }); - } - - // Start the event listener to pick up the tooltip - if (tooltip && !pointer._onDocumentMouseMove) { - pointer._onDocumentMouseMove = function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.onDocumentMouseMove(e); - } - }; - addEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - } - - // Draw independent crosshairs - each(chart.axes, function (axis) { - axis.drawCrosshair(e, pick(point, hoverPoint)); - }); - }, - - - - /** - * Reset the tracking by hiding the tooltip, the hover series state and the hover point - * - * @param allowMove {Boolean} Instead of destroying the tooltip altogether, allow moving it if possible - */ - reset: function (allowMove) { - var pointer = this, - chart = pointer.chart, - hoverSeries = chart.hoverSeries, - hoverPoint = chart.hoverPoint, - tooltip = chart.tooltip, - tooltipPoints = tooltip && tooltip.shared ? chart.hoverPoints : hoverPoint; - - // Narrow in allowMove - allowMove = allowMove && tooltip && tooltipPoints; - - // Check if the points have moved outside the plot area, #1003 - if (allowMove && splat(tooltipPoints)[0].plotX === UNDEFINED) { - allowMove = false; - } - - // Just move the tooltip, #349 - if (allowMove) { - tooltip.refresh(tooltipPoints); - if (hoverPoint) { // #2500 - hoverPoint.setState(hoverPoint.state, true); - } - - // Full reset - } else { - - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - if (hoverSeries) { - hoverSeries.onMouseOut(); - } - - if (tooltip) { - tooltip.hide(); - } - - if (pointer._onDocumentMouseMove) { - removeEvent(doc, 'mousemove', pointer._onDocumentMouseMove); - pointer._onDocumentMouseMove = null; - } - - // Remove crosshairs - each(chart.axes, function (axis) { - axis.hideCrosshair(); - }); - - pointer.hoverX = null; - - } - }, - - /** - * Scale series groups to a certain scale and translation - */ - scaleGroups: function (attribs, clip) { - - var chart = this.chart, - seriesAttribs; - - // Scale each series - each(chart.series, function (series) { - seriesAttribs = attribs || series.getPlotBox(); // #1701 - if (series.xAxis && series.xAxis.zoomEnabled) { - series.group.attr(seriesAttribs); - if (series.markerGroup) { - series.markerGroup.attr(seriesAttribs); - series.markerGroup.clip(clip ? chart.clipRect : null); - } - if (series.dataLabelsGroup) { - series.dataLabelsGroup.attr(seriesAttribs); - } - } - }); - - // Clip - chart.clipRect.attr(clip || chart.clipBox); - }, - - /** - * Start a drag operation - */ - dragStart: function (e) { - var chart = this.chart; - - // Record the start position - chart.mouseIsDown = e.type; - chart.cancelClick = false; - chart.mouseDownX = this.mouseDownX = e.chartX; - chart.mouseDownY = this.mouseDownY = e.chartY; - }, - - /** - * Perform a drag operation in response to a mousemove event while the mouse is down - */ - drag: function (e) { - - var chart = this.chart, - chartOptions = chart.options.chart, - chartX = e.chartX, - chartY = e.chartY, - zoomHor = this.zoomHor, - zoomVert = this.zoomVert, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - clickedInside, - size, - mouseDownX = this.mouseDownX, - mouseDownY = this.mouseDownY; - - // If the mouse is outside the plot area, adjust to cooordinates - // inside to prevent the selection marker from going outside - if (chartX < plotLeft) { - chartX = plotLeft; - } else if (chartX > plotLeft + plotWidth) { - chartX = plotLeft + plotWidth; - } - - if (chartY < plotTop) { - chartY = plotTop; - } else if (chartY > plotTop + plotHeight) { - chartY = plotTop + plotHeight; - } - - // determine if the mouse has moved more than 10px - this.hasDragged = Math.sqrt( - Math.pow(mouseDownX - chartX, 2) + - Math.pow(mouseDownY - chartY, 2) - ); - - if (this.hasDragged > 10) { - clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop); - - // make a selection - if (chart.hasCartesianSeries && (this.zoomX || this.zoomY) && clickedInside) { - if (!this.selectionMarker) { - this.selectionMarker = chart.renderer.rect( - plotLeft, - plotTop, - zoomHor ? 1 : plotWidth, - zoomVert ? 1 : plotHeight, - 0 - ) - .attr({ - fill: chartOptions.selectionMarkerFill || 'rgba(69,114,167,0.25)', - zIndex: 7 - }) - .add(); - } - } - - // adjust the width of the selection marker - if (this.selectionMarker && zoomHor) { - size = chartX - mouseDownX; - this.selectionMarker.attr({ - width: mathAbs(size), - x: (size > 0 ? 0 : size) + mouseDownX - }); - } - // adjust the height of the selection marker - if (this.selectionMarker && zoomVert) { - size = chartY - mouseDownY; - this.selectionMarker.attr({ - height: mathAbs(size), - y: (size > 0 ? 0 : size) + mouseDownY - }); - } - - // panning - if (clickedInside && !this.selectionMarker && chartOptions.panning) { - chart.pan(e, chartOptions.panning); - } - } - }, - - /** - * On mouse up or touch end across the entire document, drop the selection. - */ - drop: function (e) { - var chart = this.chart, - hasPinched = this.hasPinched; - - if (this.selectionMarker) { - var selectionData = { - xAxis: [], - yAxis: [], - originalEvent: e.originalEvent || e - }, - selectionBox = this.selectionMarker, - selectionLeft = selectionBox.attr ? selectionBox.attr('x') : selectionBox.x, - selectionTop = selectionBox.attr ? selectionBox.attr('y') : selectionBox.y, - selectionWidth = selectionBox.attr ? selectionBox.attr('width') : selectionBox.width, - selectionHeight = selectionBox.attr ? selectionBox.attr('height') : selectionBox.height, - runZoom; - - // a selection has been made - if (this.hasDragged || hasPinched) { - - // record each axis' min and max - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var horiz = axis.horiz, - selectionMin = axis.toValue((horiz ? selectionLeft : selectionTop)), - selectionMax = axis.toValue((horiz ? selectionLeft + selectionWidth : selectionTop + selectionHeight)); - - if (!isNaN(selectionMin) && !isNaN(selectionMax)) { // #859 - selectionData[axis.coll].push({ - axis: axis, - min: mathMin(selectionMin, selectionMax), // for reversed axes, - max: mathMax(selectionMin, selectionMax) - }); - runZoom = true; - } - } - }); - if (runZoom) { - fireEvent(chart, 'selection', selectionData, function (args) { - chart.zoom(extend(args, hasPinched ? { animation: false } : null)); - }); - } - - } - this.selectionMarker = this.selectionMarker.destroy(); - - // Reset scaling preview - if (hasPinched) { - this.scaleGroups(); - } - } - - // Reset all - if (chart) { // it may be destroyed on mouse up - #877 - css(chart.container, { cursor: chart._cursor }); - chart.cancelClick = this.hasDragged > 10; // #370 - chart.mouseIsDown = this.hasDragged = this.hasPinched = false; - this.pinchDown = []; - } - }, - - onContainerMouseDown: function (e) { - - e = this.normalize(e); - - // issue #295, dragging not always working in Firefox - if (e.preventDefault) { - e.preventDefault(); - } - - this.dragStart(e); - }, - - - - onDocumentMouseUp: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - }, - - /** - * Special handler for mouse move that will hide the tooltip when the mouse leaves the plotarea. - * Issue #149 workaround. The mouseleave event does not always fire. - */ - onDocumentMouseMove: function (e) { - var chart = this.chart, - chartPosition = this.chartPosition, - hoverSeries = chart.hoverSeries; - - e = this.normalize(e, chartPosition); - - // If we're outside, hide the tooltip - if (chartPosition && hoverSeries && !this.inClass(e.target, 'highcharts-tracker') && - !chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - this.reset(); - } - }, - - /** - * When mouse leaves the container, hide the tooltip. - */ - onContainerMouseLeave: function () { - var chart = charts[hoverChartIndex]; - if (chart) { - chart.pointer.reset(); - chart.pointer.chartPosition = null; // also reset the chart position, used in #149 fix - } - }, - - // The mousemove, touchmove and touchstart event handler - onContainerMouseMove: function (e) { - - var chart = this.chart; - - hoverChartIndex = chart.index; - - // normalize - e = this.normalize(e); - - if (chart.mouseIsDown === 'mousedown') { - this.drag(e); - } - - // Show the tooltip and run mouse over events (#977) - if ((this.inClass(e.target, 'highcharts-tracker') || - chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) && !chart.openMenu) { - this.runPointActions(e); - } - }, - - /** - * Utility to detect whether an element has, or has a parent with, a specific - * class name. Used on detection of tracker objects and on deciding whether - * hovering the tooltip should cause the active series to mouse out. - */ - inClass: function (element, className) { - var elemClassName; - while (element) { - elemClassName = attr(element, 'class'); - if (elemClassName) { - if (elemClassName.indexOf(className) !== -1) { - return true; - } else if (elemClassName.indexOf(PREFIX + 'container') !== -1) { - return false; - } - } - element = element.parentNode; - } - }, - - onTrackerMouseOut: function (e) { - var series = this.chart.hoverSeries, - relatedTarget = e.relatedTarget || e.toElement, - relatedSeries = relatedTarget && relatedTarget.point && relatedTarget.point.series; // #2499 - - if (series && !series.options.stickyTracking && !this.inClass(relatedTarget, PREFIX + 'tooltip') && - relatedSeries !== series) { - series.onMouseOut(); - } - }, - - onContainerClick: function (e) { - var chart = this.chart, - hoverPoint = chart.hoverPoint, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop; - - e = this.normalize(e); - e.cancelBubble = true; // IE specific - - if (!chart.cancelClick) { - - // On tracker click, fire the series and point events. #783, #1583 - if (hoverPoint && this.inClass(e.target, PREFIX + 'tracker')) { - - // the series click event - fireEvent(hoverPoint.series, 'click', extend(e, { - point: hoverPoint - })); - - // the point click event - if (chart.hoverPoint) { // it may be destroyed (#1844) - hoverPoint.firePointEvent('click', e); - } - - // When clicking outside a tracker, fire a chart event - } else { - extend(e, this.getCoordinates(e)); - - // fire a click event in the chart - if (chart.isInsidePlot(e.chartX - plotLeft, e.chartY - plotTop)) { - fireEvent(chart, 'click', e); - } - } - - - } - }, - - /** - * Set the JS DOM events on the container and document. This method should contain - * a one-to-one assignment between methods and their handlers. Any advanced logic should - * be moved to the handler reflecting the event's name. - */ - setDOMEvents: function () { - - var pointer = this, - container = pointer.chart.container; - - container.onmousedown = function (e) { - pointer.onContainerMouseDown(e); - }; - container.onmousemove = function (e) { - pointer.onContainerMouseMove(e); - }; - container.onclick = function (e) { - pointer.onContainerClick(e); - }; - addEvent(container, 'mouseleave', pointer.onContainerMouseLeave); - if (chartCount === 1) { - addEvent(doc, 'mouseup', pointer.onDocumentMouseUp); - } - if (hasTouch) { - container.ontouchstart = function (e) { - pointer.onContainerTouchStart(e); - }; - container.ontouchmove = function (e) { - pointer.onContainerTouchMove(e); - }; - if (chartCount === 1) { - addEvent(doc, 'touchend', pointer.onDocumentTouchEnd); - } - } - - }, - - /** - * Destroys the Pointer object and disconnects DOM events. - */ - destroy: function () { - var prop; - - removeEvent(this.chart.container, 'mouseleave', this.onContainerMouseLeave); - if (!chartCount) { - removeEvent(doc, 'mouseup', this.onDocumentMouseUp); - removeEvent(doc, 'touchend', this.onDocumentTouchEnd); - } - - // memory and CPU leak - clearInterval(this.tooltipTimeout); - - for (prop in this) { - this[prop] = null; - } - } -}; - - -/* Support for touch devices */ -extend(Highcharts.Pointer.prototype, { - - /** - * Run translation operations - */ - pinchTranslate: function (pinchDown, touches, transform, selectionMarker, clip, lastValidTouch) { - if (this.zoomHor || this.pinchHor) { - this.pinchTranslateDirection(true, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - if (this.zoomVert || this.pinchVert) { - this.pinchTranslateDirection(false, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - } - }, - - /** - * Run translation operations for each direction (horizontal and vertical) independently - */ - pinchTranslateDirection: function (horiz, pinchDown, touches, transform, selectionMarker, clip, lastValidTouch, forcedScale) { - var chart = this.chart, - xy = horiz ? 'x' : 'y', - XY = horiz ? 'X' : 'Y', - sChartXY = 'chart' + XY, - wh = horiz ? 'width' : 'height', - plotLeftTop = chart['plot' + (horiz ? 'Left' : 'Top')], - selectionWH, - selectionXY, - clipXY, - scale = forcedScale || 1, - inverted = chart.inverted, - bounds = chart.bounds[horiz ? 'h' : 'v'], - singleTouch = pinchDown.length === 1, - touch0Start = pinchDown[0][sChartXY], - touch0Now = touches[0][sChartXY], - touch1Start = !singleTouch && pinchDown[1][sChartXY], - touch1Now = !singleTouch && touches[1][sChartXY], - outOfBounds, - transformScale, - scaleKey, - setScale = function () { - if (!singleTouch && mathAbs(touch0Start - touch1Start) > 20) { // Don't zoom if fingers are too close on this axis - scale = forcedScale || mathAbs(touch0Now - touch1Now) / mathAbs(touch0Start - touch1Start); - } - - clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start; - selectionWH = chart['plot' + (horiz ? 'Width' : 'Height')] / scale; - }; - - // Set the scale, first pass - setScale(); - - selectionXY = clipXY; // the clip position (x or y) is altered if out of bounds, the selection position is not - - // Out of bounds - if (selectionXY < bounds.min) { - selectionXY = bounds.min; - outOfBounds = true; - } else if (selectionXY + selectionWH > bounds.max) { - selectionXY = bounds.max - selectionWH; - outOfBounds = true; - } - - // Is the chart dragged off its bounds, determined by dataMin and dataMax? - if (outOfBounds) { - - // Modify the touchNow position in order to create an elastic drag movement. This indicates - // to the user that the chart is responsive but can't be dragged further. - touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]); - if (!singleTouch) { - touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]); - } - - // Set the scale, second pass to adapt to the modified touchNow positions - setScale(); - - } else { - lastValidTouch[xy] = [touch0Now, touch1Now]; - } - - // Set geometry for clipping, selection and transformation - if (!inverted) { // TODO: implement clipping for inverted charts - clip[xy] = clipXY - plotLeftTop; - clip[wh] = selectionWH; - } - scaleKey = inverted ? (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY; - transformScale = inverted ? 1 / scale : scale; - - selectionMarker[wh] = selectionWH; - selectionMarker[xy] = selectionXY; - transform[scaleKey] = scale; - transform['translate' + XY] = (transformScale * plotLeftTop) + (touch0Now - (transformScale * touch0Start)); - }, - - /** - * Handle touch events with two touches - */ - pinch: function (e) { - - var self = this, - chart = self.chart, - pinchDown = self.pinchDown, - followTouchMove = self.followTouchMove, - touches = e.touches, - touchesLength = touches.length, - lastValidTouch = self.lastValidTouch, - hasZoom = self.hasZoom, - selectionMarker = self.selectionMarker, - transform = {}, - fireClickEvent = touchesLength === 1 && ((self.inClass(e.target, PREFIX + 'tracker') && - chart.runTrackerClick) || chart.runChartClick), - clip = {}; - - // On touch devices, only proceed to trigger click if a handler is defined - if ((hasZoom || followTouchMove) && !fireClickEvent) { - e.preventDefault(); - } - - // Normalize each touch - map(touches, function (e) { - return self.normalize(e); - }); - - // Register the touch start position - if (e.type === 'touchstart') { - each(touches, function (e, i) { - pinchDown[i] = { chartX: e.chartX, chartY: e.chartY }; - }); - lastValidTouch.x = [pinchDown[0].chartX, pinchDown[1] && pinchDown[1].chartX]; - lastValidTouch.y = [pinchDown[0].chartY, pinchDown[1] && pinchDown[1].chartY]; - - // Identify the data bounds in pixels - each(chart.axes, function (axis) { - if (axis.zoomEnabled) { - var bounds = chart.bounds[axis.horiz ? 'h' : 'v'], - minPixelPadding = axis.minPixelPadding, - min = axis.toPixels(axis.dataMin), - max = axis.toPixels(axis.dataMax), - absMin = mathMin(min, max), - absMax = mathMax(min, max); - - // Store the bounds for use in the touchmove handler - bounds.min = mathMin(axis.pos, absMin - minPixelPadding); - bounds.max = mathMax(axis.pos + axis.len, absMax + minPixelPadding); - } - }); - - // Event type is touchmove, handle panning and pinching - } else if (pinchDown.length) { // can be 0 when releasing, if touchend fires first - - - // Set the marker - if (!selectionMarker) { - self.selectionMarker = selectionMarker = extend({ - destroy: noop - }, chart.plotBox); - } - - self.pinchTranslate(pinchDown, touches, transform, selectionMarker, clip, lastValidTouch); - - self.hasPinched = hasZoom; - - // Scale and translate the groups to provide visual feedback during pinching - self.scaleGroups(transform, clip); - - // Optionally move the tooltip on touchmove - if (!hasZoom && followTouchMove && touchesLength === 1) { - this.runPointActions(self.normalize(e)); - } - } - }, - - onContainerTouchStart: function (e) { - var chart = this.chart; - - hoverChartIndex = chart.index; - - if (e.touches.length === 1) { - - e = this.normalize(e); - - if (chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop)) { - - // Run mouse events and display tooltip etc - this.runPointActions(e); - - this.pinch(e); - - } else { - // Hide the tooltip on touching outside the plot area (#1203) - this.reset(); - } - - } else if (e.touches.length === 2) { - this.pinch(e); - } - }, - - onContainerTouchMove: function (e) { - if (e.touches.length === 1 || e.touches.length === 2) { - this.pinch(e); - } - }, - - onDocumentTouchEnd: function (e) { - if (charts[hoverChartIndex]) { - charts[hoverChartIndex].pointer.drop(e); - } - } - -}); -if (win.PointerEvent || win.MSPointerEvent) { - - // The touches object keeps track of the points being touched at all times - var touches = {}, - hasPointerEvent = !!win.PointerEvent, - getWebkitTouches = function () { - var key, fake = []; - fake.item = function (i) { return this[i]; }; - for (key in touches) { - if (touches.hasOwnProperty(key)) { - fake.push({ - pageX: touches[key].pageX, - pageY: touches[key].pageY, - target: touches[key].target - }); - } - } - return fake; - }, - translateMSPointer = function (e, method, wktype, callback) { - var p; - e = e.originalEvent || e; - if ((e.pointerType === 'touch' || e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[hoverChartIndex]) { - callback(e); - p = charts[hoverChartIndex].pointer; - p[method]({ - type: wktype, - target: e.currentTarget, - preventDefault: noop, - touches: getWebkitTouches() - }); - } - }; - - /** - * Extend the Pointer prototype with methods for each event handler and more - */ - extend(Pointer.prototype, { - onContainerPointerDown: function (e) { - translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY, target: e.currentTarget }; - }); - }, - onContainerPointerMove: function (e) { - translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) { - touches[e.pointerId] = { pageX: e.pageX, pageY: e.pageY }; - if (!touches[e.pointerId].target) { - touches[e.pointerId].target = e.currentTarget; - } - }); - }, - onDocumentPointerUp: function (e) { - translateMSPointer(e, 'onContainerTouchEnd', 'touchend', function (e) { - delete touches[e.pointerId]; - }); - }, - - /** - * Add or remove the MS Pointer specific events - */ - batchMSEvents: function (fn) { - fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown); - fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove); - fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp); - } - }); - - // Disable default IE actions for pinch and such on chart element - wrap(Pointer.prototype, 'init', function (proceed, chart, options) { - proceed.call(this, chart, options); - if (this.hasZoom || this.followTouchMove) { - css(chart.container, { - '-ms-touch-action': NONE, - 'touch-action': NONE - }); - } - }); - - // Add IE specific touch events to chart - wrap(Pointer.prototype, 'setDOMEvents', function (proceed) { - proceed.apply(this); - if (this.hasZoom || this.followTouchMove) { - this.batchMSEvents(addEvent); - } - }); - // Destroy MS events also - wrap(Pointer.prototype, 'destroy', function (proceed) { - this.batchMSEvents(removeEvent); - proceed.call(this); - }); -} -/** - * The overview of the chart's series - */ -var Legend = Highcharts.Legend = function (chart, options) { - this.init(chart, options); -}; - -Legend.prototype = { - - /** - * Initialize the legend - */ - init: function (chart, options) { - - var legend = this, - itemStyle = options.itemStyle, - padding = pick(options.padding, 8), - itemMarginTop = options.itemMarginTop || 0; - - this.options = options; - - if (!options.enabled) { - return; - } - - legend.baseline = pInt(itemStyle.fontSize) + 3 + itemMarginTop; // used in Series prototype - legend.itemStyle = itemStyle; - legend.itemHiddenStyle = merge(itemStyle, options.itemHiddenStyle); - legend.itemMarginTop = itemMarginTop; - legend.padding = padding; - legend.initialItemX = padding; - legend.initialItemY = padding - 5; // 5 is the number of pixels above the text - legend.maxItemWidth = 0; - legend.chart = chart; - legend.itemHeight = 0; - legend.lastLineHeight = 0; - legend.symbolWidth = pick(options.symbolWidth, 16); - legend.pages = []; - - - // Render it - legend.render(); - - // move checkboxes - addEvent(legend.chart, 'endResize', function () { - legend.positionCheckboxes(); - }); - - }, - - /** - * Set the colors for the legend item - * @param {Object} item A Series or Point instance - * @param {Object} visible Dimmed or colored - */ - colorizeItem: function (item, visible) { - var legend = this, - options = legend.options, - legendItem = item.legendItem, - legendLine = item.legendLine, - legendSymbol = item.legendSymbol, - hiddenColor = legend.itemHiddenStyle.color, - textColor = visible ? options.itemStyle.color : hiddenColor, - symbolColor = visible ? (item.legendColor || item.color || '#CCC') : hiddenColor, - markerOptions = item.options && item.options.marker, - symbolAttr = { fill: symbolColor }, - key, - val; - - if (legendItem) { - legendItem.css({ fill: textColor, color: textColor }); // color for #1553, oldIE - } - if (legendLine) { - legendLine.attr({ stroke: symbolColor }); - } - - if (legendSymbol) { - - // Apply marker options - if (markerOptions && legendSymbol.isMarker) { // #585 - symbolAttr.stroke = symbolColor; - markerOptions = item.convertAttribs(markerOptions); - for (key in markerOptions) { - val = markerOptions[key]; - if (val !== UNDEFINED) { - symbolAttr[key] = val; - } - } - } - - legendSymbol.attr(symbolAttr); - } - }, - - /** - * Position the legend item - * @param {Object} item A Series or Point instance - */ - positionItem: function (item) { - var legend = this, - options = legend.options, - symbolPadding = options.symbolPadding, - ltr = !options.rtl, - legendItemPos = item._legendItemPos, - itemX = legendItemPos[0], - itemY = legendItemPos[1], - checkbox = item.checkbox; - - if (item.legendGroup) { - item.legendGroup.translate( - ltr ? itemX : legend.legendWidth - itemX - 2 * symbolPadding - 4, - itemY - ); - } - - if (checkbox) { - checkbox.x = itemX; - checkbox.y = itemY; - } - }, - - /** - * Destroy a single legend item - * @param {Object} item The series or point - */ - destroyItem: function (item) { - var checkbox = item.checkbox; - - // destroy SVG elements - each(['legendItem', 'legendLine', 'legendSymbol', 'legendGroup'], function (key) { - if (item[key]) { - item[key] = item[key].destroy(); - } - }); - - if (checkbox) { - discardElement(item.checkbox); - } - }, - - /** - * Destroys the legend. - */ - destroy: function () { - var legend = this, - legendGroup = legend.group, - box = legend.box; - - if (box) { - legend.box = box.destroy(); - } - - if (legendGroup) { - legend.group = legendGroup.destroy(); - } - }, - - /** - * Position the checkboxes after the width is determined - */ - positionCheckboxes: function (scrollOffset) { - var alignAttr = this.group.alignAttr, - translateY, - clipHeight = this.clipHeight || this.legendHeight; - - if (alignAttr) { - translateY = alignAttr.translateY; - each(this.allItems, function (item) { - var checkbox = item.checkbox, - top; - - if (checkbox) { - top = (translateY + checkbox.y + (scrollOffset || 0) + 3); - css(checkbox, { - left: (alignAttr.translateX + item.checkboxOffset + checkbox.x - 20) + PX, - top: top + PX, - display: top > translateY - 6 && top < translateY + clipHeight - 6 ? '' : NONE - }); - } - }); - } - }, - - /** - * Render the legend title on top of the legend - */ - renderTitle: function () { - var options = this.options, - padding = this.padding, - titleOptions = options.title, - titleHeight = 0, - bBox; - - if (titleOptions.text) { - if (!this.title) { - this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, null, null, null, null, null, 'legend-title') - .attr({ zIndex: 1 }) - .css(titleOptions.style) - .add(this.group); - } - bBox = this.title.getBBox(); - titleHeight = bBox.height; - this.offsetWidth = bBox.width; // #1717 - this.contentGroup.attr({ translateY: titleHeight }); - } - this.titleHeight = titleHeight; - }, - - /** - * Render a single specific legend item - * @param {Object} item A series or point - */ - renderItem: function (item) { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - options = legend.options, - horizontal = options.layout === 'horizontal', - symbolWidth = legend.symbolWidth, - symbolPadding = options.symbolPadding, - itemStyle = legend.itemStyle, - itemHiddenStyle = legend.itemHiddenStyle, - padding = legend.padding, - itemDistance = horizontal ? pick(options.itemDistance, 20) : 0, // docs - ltr = !options.rtl, - itemHeight, - widthOption = options.width, - itemMarginBottom = options.itemMarginBottom || 0, - itemMarginTop = legend.itemMarginTop, - initialItemX = legend.initialItemX, - bBox, - itemWidth, - li = item.legendItem, - series = item.series && item.series.drawLegendSymbol ? item.series : item, - seriesOptions = series.options, - showCheckbox = legend.createCheckboxForItem && seriesOptions && seriesOptions.showCheckbox, - useHTML = options.useHTML; - - if (!li) { // generate it once, later move it - - // Generate the group box - // A group to hold the symbol and text. Text is to be appended in Legend class. - item.legendGroup = renderer.g('legend-item') - .attr({ zIndex: 1 }) - .add(legend.scrollGroup); - - // Draw the legend symbol inside the group box - series.drawLegendSymbol(legend, item); - - // Generate the list item text and add it to the group - item.legendItem = li = renderer.text( - options.labelFormat ? format(options.labelFormat, item) : options.labelFormatter.call(item), - ltr ? symbolWidth + symbolPadding : -symbolPadding, - legend.baseline, - useHTML - ) - .css(merge(item.visible ? itemStyle : itemHiddenStyle)) // merge to prevent modifying original (#1021) - .attr({ - align: ltr ? 'left' : 'right', - zIndex: 2 - }) - .add(item.legendGroup); - - if (legend.setItemEvents) { - legend.setItemEvents(item, li, useHTML, itemStyle, itemHiddenStyle); - } - - // Colorize the items - legend.colorizeItem(item, item.visible); - - // add the HTML checkbox on top - if (showCheckbox) { - legend.createCheckboxForItem(item); - } - } - - // calculate the positions for the next line - bBox = li.getBBox(); - - itemWidth = item.checkboxOffset = - options.itemWidth || - item.legendItemWidth || - symbolWidth + symbolPadding + bBox.width + itemDistance + (showCheckbox ? 20 : 0); - legend.itemHeight = itemHeight = mathRound(item.legendItemHeight || bBox.height); - - // if the item exceeds the width, start a new line - if (horizontal && legend.itemX - initialItemX + itemWidth > - (widthOption || (chart.chartWidth - 2 * padding - initialItemX - options.x))) { - legend.itemX = initialItemX; - legend.itemY += itemMarginTop + legend.lastLineHeight + itemMarginBottom; - legend.lastLineHeight = 0; // reset for next line - } - - // If the item exceeds the height, start a new column - /*if (!horizontal && legend.itemY + options.y + itemHeight > chart.chartHeight - spacingTop - spacingBottom) { - legend.itemY = legend.initialItemY; - legend.itemX += legend.maxItemWidth; - legend.maxItemWidth = 0; - }*/ - - // Set the edge positions - legend.maxItemWidth = mathMax(legend.maxItemWidth, itemWidth); - legend.lastItemY = itemMarginTop + legend.itemY + itemMarginBottom; - legend.lastLineHeight = mathMax(itemHeight, legend.lastLineHeight); // #915 - - // cache the position of the newly generated or reordered items - item._legendItemPos = [legend.itemX, legend.itemY]; - - // advance - if (horizontal) { - legend.itemX += itemWidth; - - } else { - legend.itemY += itemMarginTop + itemHeight + itemMarginBottom; - legend.lastLineHeight = itemHeight; - } - - // the width of the widest item - legend.offsetWidth = widthOption || mathMax( - (horizontal ? legend.itemX - initialItemX - itemDistance : itemWidth) + padding, - legend.offsetWidth - ); - }, - - /** - * Get all items, which is one item per series for normal series and one item per point - * for pie series. - */ - getAllItems: function () { - var allItems = []; - each(this.chart.series, function (series) { - var seriesOptions = series.options; - - // Handle showInLegend. If the series is linked to another series, defaults to false. - if (!pick(seriesOptions.showInLegend, !defined(seriesOptions.linkedTo) ? UNDEFINED : false, true)) { - return; - } - - // use points or series for the legend item depending on legendType - allItems = allItems.concat( - series.legendItems || - (seriesOptions.legendType === 'point' ? - series.data : - series) - ); - }); - return allItems; - }, - - /** - * Render the legend. This method can be called both before and after - * chart.render. If called after, it will only rearrange items instead - * of creating new ones. - */ - render: function () { - var legend = this, - chart = legend.chart, - renderer = chart.renderer, - legendGroup = legend.group, - allItems, - display, - legendWidth, - legendHeight, - box = legend.box, - options = legend.options, - padding = legend.padding, - legendBorderWidth = options.borderWidth, - legendBackgroundColor = options.backgroundColor; - - legend.itemX = legend.initialItemX; - legend.itemY = legend.initialItemY; - legend.offsetWidth = 0; - legend.lastItemY = 0; - - if (!legendGroup) { - legend.group = legendGroup = renderer.g('legend') - .attr({ zIndex: 7 }) - .add(); - legend.contentGroup = renderer.g() - .attr({ zIndex: 1 }) // above background - .add(legendGroup); - legend.scrollGroup = renderer.g() - .add(legend.contentGroup); - } - - legend.renderTitle(); - - // add each series or point - allItems = legend.getAllItems(); - - // sort by legendIndex - stableSort(allItems, function (a, b) { - return ((a.options && a.options.legendIndex) || 0) - ((b.options && b.options.legendIndex) || 0); - }); - - // reversed legend - if (options.reversed) { - allItems.reverse(); - } - - legend.allItems = allItems; - legend.display = display = !!allItems.length; - - // render the items - each(allItems, function (item) { - legend.renderItem(item); - }); - - // Draw the border - legendWidth = options.width || legend.offsetWidth; - legendHeight = legend.lastItemY + legend.lastLineHeight + legend.titleHeight; - - - legendHeight = legend.handleOverflow(legendHeight); - - if (legendBorderWidth || legendBackgroundColor) { - legendWidth += padding; - legendHeight += padding; - - if (!box) { - legend.box = box = renderer.rect( - 0, - 0, - legendWidth, - legendHeight, - options.borderRadius, - legendBorderWidth || 0 - ).attr({ - stroke: options.borderColor, - 'stroke-width': legendBorderWidth || 0, - fill: legendBackgroundColor || NONE - }) - .add(legendGroup) - .shadow(options.shadow); - box.isNew = true; - - } else if (legendWidth > 0 && legendHeight > 0) { - box[box.isNew ? 'attr' : 'animate']( - box.crisp({ width: legendWidth, height: legendHeight }) - ); - box.isNew = false; - } - - // hide the border if no items - box[display ? 'show' : 'hide'](); - } - - legend.legendWidth = legendWidth; - legend.legendHeight = legendHeight; - - // Now that the legend width and height are established, put the items in the - // final position - each(allItems, function (item) { - legend.positionItem(item); - }); - - // 1.x compatibility: positioning based on style - /*var props = ['left', 'right', 'top', 'bottom'], - prop, - i = 4; - while (i--) { - prop = props[i]; - if (options.style[prop] && options.style[prop] !== 'auto') { - options[i < 2 ? 'align' : 'verticalAlign'] = prop; - options[i < 2 ? 'x' : 'y'] = pInt(options.style[prop]) * (i % 2 ? -1 : 1); - } - }*/ - - if (display) { - legendGroup.align(extend({ - width: legendWidth, - height: legendHeight - }, options), true, 'spacingBox'); - } - - if (!chart.isResizing) { - this.positionCheckboxes(); - } - }, - - /** - * Set up the overflow handling by adding navigation with up and down arrows below the - * legend. - */ - handleOverflow: function (legendHeight) { - var legend = this, - chart = this.chart, - renderer = chart.renderer, - options = this.options, - optionsY = options.y, - alignTop = options.verticalAlign === 'top', - spaceHeight = chart.spacingBox.height + (alignTop ? -optionsY : optionsY) - this.padding, - maxHeight = options.maxHeight, - clipHeight, - clipRect = this.clipRect, - navOptions = options.navigation, - animation = pick(navOptions.animation, true), - arrowSize = navOptions.arrowSize || 12, - nav = this.nav, - pages = this.pages, - lastY, - allItems = this.allItems; - - // Adjust the height - if (options.layout === 'horizontal') { - spaceHeight /= 2; - } - if (maxHeight) { - spaceHeight = mathMin(spaceHeight, maxHeight); - } - - // Reset the legend height and adjust the clipping rectangle - pages.length = 0; - if (legendHeight > spaceHeight && !options.useHTML) { - - this.clipHeight = clipHeight = spaceHeight - 20 - this.titleHeight - this.padding; - this.currentPage = pick(this.currentPage, 1); - this.fullHeight = legendHeight; - - // Fill pages with Y positions so that the top of each a legend item defines - // the scroll top for each page (#2098) - each(allItems, function (item, i) { - var y = item._legendItemPos[1], - h = mathRound(item.legendItem.getBBox().height), - len = pages.length; - - if (!len || (y - pages[len - 1] > clipHeight && (lastY || y) !== pages[len - 1])) { - pages.push(lastY || y); - len++; - } - - if (i === allItems.length - 1 && y + h - pages[len - 1] > clipHeight) { - pages.push(y); - } - if (y !== lastY) { - lastY = y; - } - }); - - // Only apply clipping if needed. Clipping causes blurred legend in PDF export (#1787) - if (!clipRect) { - clipRect = legend.clipRect = renderer.clipRect(0, this.padding, 9999, 0); - legend.contentGroup.clip(clipRect); - } - clipRect.attr({ - height: clipHeight - }); - - // Add navigation elements - if (!nav) { - this.nav = nav = renderer.g().attr({ zIndex: 1 }).add(this.group); - this.up = renderer.symbol('triangle', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(-1, animation); - }) - .add(nav); - this.pager = renderer.text('', 15, 10) - .css(navOptions.style) - .add(nav); - this.down = renderer.symbol('triangle-down', 0, 0, arrowSize, arrowSize) - .on('click', function () { - legend.scroll(1, animation); - }) - .add(nav); - } - - // Set initial position - legend.scroll(0); - - legendHeight = spaceHeight; - - } else if (nav) { - clipRect.attr({ - height: chart.chartHeight - }); - nav.hide(); - this.scrollGroup.attr({ - translateY: 1 - }); - this.clipHeight = 0; // #1379 - } - - return legendHeight; - }, - - /** - * Scroll the legend by a number of pages - * @param {Object} scrollBy - * @param {Object} animation - */ - scroll: function (scrollBy, animation) { - var pages = this.pages, - pageCount = pages.length, - currentPage = this.currentPage + scrollBy, - clipHeight = this.clipHeight, - navOptions = this.options.navigation, - activeColor = navOptions.activeColor, - inactiveColor = navOptions.inactiveColor, - pager = this.pager, - padding = this.padding, - scrollOffset; - - // When resizing while looking at the last page - if (currentPage > pageCount) { - currentPage = pageCount; - } - - if (currentPage > 0) { - - if (animation !== UNDEFINED) { - setAnimation(animation, this.chart); - } - - this.nav.attr({ - translateX: padding, - translateY: clipHeight + this.padding + 7 + this.titleHeight, - visibility: VISIBLE - }); - this.up.attr({ - fill: currentPage === 1 ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === 1 ? 'default' : 'pointer' - }); - pager.attr({ - text: currentPage + '/' + pageCount - }); - this.down.attr({ - x: 18 + this.pager.getBBox().width, // adjust to text width - fill: currentPage === pageCount ? inactiveColor : activeColor - }) - .css({ - cursor: currentPage === pageCount ? 'default' : 'pointer' - }); - - scrollOffset = -pages[currentPage - 1] + this.initialItemY; - - this.scrollGroup.animate({ - translateY: scrollOffset - }); - - this.currentPage = currentPage; - this.positionCheckboxes(scrollOffset); - } - - } - -}; - -/* - * LegendSymbolMixin - */ - -var LegendSymbolMixin = Highcharts.LegendSymbolMixin = { - - /** - * Get the series' symbol in the legend - * - * @param {Object} legend The legend object - * @param {Object} item The series (this) or point - */ - drawRectangle: function (legend, item) { - var symbolHeight = legend.options.symbolHeight || 12; - - item.legendSymbol = this.chart.renderer.rect( - 0, - legend.baseline - 5 - (symbolHeight / 2), - legend.symbolWidth, - symbolHeight, - legend.options.symbolRadius || 0 - ).attr({ - zIndex: 3 - }).add(item.legendGroup); - - }, - - /** - * Get the series' symbol in the legend. This method should be overridable to create custom - * symbols through Highcharts.seriesTypes[type].prototype.drawLegendSymbols. - * - * @param {Object} legend The legend object - */ - drawLineMarker: function (legend) { - - var options = this.options, - markerOptions = options.marker, - radius, - legendOptions = legend.options, - legendSymbol, - symbolWidth = legend.symbolWidth, - renderer = this.chart.renderer, - legendItemGroup = this.legendGroup, - verticalCenter = legend.baseline - mathRound(renderer.fontMetrics(legendOptions.itemStyle.fontSize).b * 0.3), - attr; - - // Draw the line - if (options.lineWidth) { - attr = { - 'stroke-width': options.lineWidth - }; - if (options.dashStyle) { - attr.dashstyle = options.dashStyle; - } - this.legendLine = renderer.path([ - M, - 0, - verticalCenter, - L, - symbolWidth, - verticalCenter - ]) - .attr(attr) - .add(legendItemGroup); - } - - // Draw the marker - if (markerOptions && markerOptions.enabled !== false) { - radius = markerOptions.radius; - this.legendSymbol = legendSymbol = renderer.symbol( - this.symbol, - (symbolWidth / 2) - radius, - verticalCenter - radius, - 2 * radius, - 2 * radius - ) - .add(legendItemGroup); - legendSymbol.isMarker = true; - } - } -}; - -// Workaround for #2030, horizontal legend items not displaying in IE11 Preview, -// and for #2580, a similar drawing flaw in Firefox 26. -// TODO: Explore if there's a general cause for this. The problem may be related -// to nested group elements, as the legend item texts are within 4 group elements. -if (/Trident\/7\.0/.test(userAgent) || isFirefox) { - wrap(Legend.prototype, 'positionItem', function (proceed, item) { - var legend = this, - runPositionItem = function () { // If chart destroyed in sync, this is undefined (#2030) - if (item._legendItemPos) { - proceed.call(legend, item); - } - }; - - // Do it now, for export and to get checkbox placement - runPositionItem(); - - // Do it after to work around the core issue - setTimeout(runPositionItem); - }); -} -/** - * The chart class - * @param {Object} options - * @param {Function} callback Function to run when the chart has loaded - */ -function Chart() { - this.init.apply(this, arguments); -} - -Chart.prototype = { - - /** - * Initialize the chart - */ - init: function (userOptions, callback) { - - // Handle regular options - var options, - seriesOptions = userOptions.series; // skip merging data points to increase performance - - userOptions.series = null; - options = merge(defaultOptions, userOptions); // do the merge - options.series = userOptions.series = seriesOptions; // set back the series data - this.userOptions = userOptions; - - var optionsChart = options.chart; - - // Create margin & spacing array - this.margin = this.splashArray('margin', optionsChart); - this.spacing = this.splashArray('spacing', optionsChart); - - var chartEvents = optionsChart.events; - - //this.runChartClick = chartEvents && !!chartEvents.click; - this.bounds = { h: {}, v: {} }; // Pixel data bounds for touch zoom - - this.callback = callback; - this.isResizing = 0; - this.options = options; - //chartTitleOptions = UNDEFINED; - //chartSubtitleOptions = UNDEFINED; - - this.axes = []; - this.series = []; - this.hasCartesianSeries = optionsChart.showAxes; - //this.axisOffset = UNDEFINED; - //this.maxTicks = UNDEFINED; // handle the greatest amount of ticks on grouped axes - //this.inverted = UNDEFINED; - //this.loadingShown = UNDEFINED; - //this.container = UNDEFINED; - //this.chartWidth = UNDEFINED; - //this.chartHeight = UNDEFINED; - //this.marginRight = UNDEFINED; - //this.marginBottom = UNDEFINED; - //this.containerWidth = UNDEFINED; - //this.containerHeight = UNDEFINED; - //this.oldChartWidth = UNDEFINED; - //this.oldChartHeight = UNDEFINED; - - //this.renderTo = UNDEFINED; - //this.renderToClone = UNDEFINED; - - //this.spacingBox = UNDEFINED - - //this.legend = UNDEFINED; - - // Elements - //this.chartBackground = UNDEFINED; - //this.plotBackground = UNDEFINED; - //this.plotBGImage = UNDEFINED; - //this.plotBorder = UNDEFINED; - //this.loadingDiv = UNDEFINED; - //this.loadingSpan = UNDEFINED; - - var chart = this, - eventType; - - // Add the chart to the global lookup - chart.index = charts.length; - charts.push(chart); - chartCount++; - - // Set up auto resize - if (optionsChart.reflow !== false) { - addEvent(chart, 'load', function () { - chart.initReflow(); - }); - } - - // Chart event handlers - if (chartEvents) { - for (eventType in chartEvents) { - addEvent(chart, eventType, chartEvents[eventType]); - } - } - - chart.xAxis = []; - chart.yAxis = []; - - // Expose methods and variables - chart.animation = useCanVG ? false : pick(optionsChart.animation, true); - chart.pointCount = 0; - chart.counters = new ChartCounters(); - - chart.firstRender(); - }, - - /** - * Initialize an individual series, called internally before render time - */ - initSeries: function (options) { - var chart = this, - optionsChart = chart.options.chart, - type = options.type || optionsChart.type || optionsChart.defaultSeriesType, - series, - constr = seriesTypes[type]; - - // No such series type - if (!constr) { - error(17, true); - } - - series = new constr(); - series.init(this, options); - return series; - }, - - /** - * Check whether a given point is within the plot area - * - * @param {Number} plotX Pixel x relative to the plot area - * @param {Number} plotY Pixel y relative to the plot area - * @param {Boolean} inverted Whether the chart is inverted - */ - isInsidePlot: function (plotX, plotY, inverted) { - var x = inverted ? plotY : plotX, - y = inverted ? plotX : plotY; - - return x >= 0 && - x <= this.plotWidth && - y >= 0 && - y <= this.plotHeight; - }, - - /** - * Adjust all axes tick amounts - */ - adjustTickAmounts: function () { - if (this.options.chart.alignTicks !== false) { - each(this.axes, function (axis) { - axis.adjustTickAmount(); - }); - } - this.maxTicks = null; - }, - - /** - * Redraw legend, axes or series based on updated data - * - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - redraw: function (animation) { - var chart = this, - axes = chart.axes, - series = chart.series, - pointer = chart.pointer, - legend = chart.legend, - redrawLegend = chart.isDirtyLegend, - hasStackedSeries, - hasDirtyStacks, - isDirtyBox = chart.isDirtyBox, // todo: check if it has actually changed? - seriesLength = series.length, - i = seriesLength, - serie, - renderer = chart.renderer, - isHiddenChart = renderer.isHidden(), - afterRedraw = []; - - setAnimation(animation, chart); - - if (isHiddenChart) { - chart.cloneRenderTo(); - } - - // Adjust title layout (reflow multiline text) - chart.layOutTitles(); - - // link stacked series - while (i--) { - serie = series[i]; - - if (serie.options.stacking) { - hasStackedSeries = true; - - if (serie.isDirty) { - hasDirtyStacks = true; - break; - } - } - } - if (hasDirtyStacks) { // mark others as dirty - i = seriesLength; - while (i--) { - serie = series[i]; - if (serie.options.stacking) { - serie.isDirty = true; - } - } - } - - // handle updated data in the series - each(series, function (serie) { - if (serie.isDirty) { // prepare the data so axis can read it - if (serie.options.legendType === 'point') { - redrawLegend = true; - } - } - }); - - // handle added or removed series - if (redrawLegend && legend.options.enabled) { // series or pie points are added or removed - // draw legend graphics - legend.render(); - - chart.isDirtyLegend = false; - } - - // reset stacks - if (hasStackedSeries) { - chart.getStacks(); - } - - - if (chart.hasCartesianSeries) { - if (!chart.isResizing) { - - // reset maxTicks - chart.maxTicks = null; - - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - } - - chart.adjustTickAmounts(); - chart.getMargins(); - - // If one axis is dirty, all axes must be redrawn (#792, #2169) - each(axes, function (axis) { - if (axis.isDirty) { - isDirtyBox = true; - } - }); - - // redraw axes - each(axes, function (axis) { - - // Fire 'afterSetExtremes' only if extremes are set - if (axis.isDirtyExtremes) { // #821 - axis.isDirtyExtremes = false; - afterRedraw.push(function () { // prevent a recursive call to chart.redraw() (#1119) - fireEvent(axis, 'afterSetExtremes', extend(axis.eventArgs, axis.getExtremes())); // #747, #751 - delete axis.eventArgs; - }); - } - - if (isDirtyBox || hasStackedSeries) { - axis.redraw(); - } - }); - - - } - // the plot areas size has changed - if (isDirtyBox) { - chart.drawChartBox(); - } - - - // redraw affected series - each(series, function (serie) { - if (serie.isDirty && serie.visible && - (!serie.isCartesian || serie.xAxis)) { // issue #153 - serie.redraw(); - } - }); - - // move tooltip or reset - if (pointer) { - pointer.reset(true); - } - - // redraw if canvas - renderer.draw(); - - // fire the event - fireEvent(chart, 'redraw'); // jQuery breaks this when calling it from addEvent. Overwrites chart.redraw - - if (isHiddenChart) { - chart.cloneRenderTo(true); - } - - // Fire callbacks that are put on hold until after the redraw - each(afterRedraw, function (callback) { - callback.call(); - }); - }, - - /** - * Get an axis, series or point object by id. - * @param id {String} The id as given in the configuration options - */ - get: function (id) { - var chart = this, - axes = chart.axes, - series = chart.series; - - var i, - j, - points; - - // search axes - for (i = 0; i < axes.length; i++) { - if (axes[i].options.id === id) { - return axes[i]; - } - } - - // search series - for (i = 0; i < series.length; i++) { - if (series[i].options.id === id) { - return series[i]; - } - } - - // search points - for (i = 0; i < series.length; i++) { - points = series[i].points || []; - for (j = 0; j < points.length; j++) { - if (points[j].id === id) { - return points[j]; - } - } - } - return null; - }, - - /** - * Create the Axis instances based on the config options - */ - getAxes: function () { - var chart = this, - options = this.options, - xAxisOptions = options.xAxis = splat(options.xAxis || {}), - yAxisOptions = options.yAxis = splat(options.yAxis || {}), - optionsArray, - axis; - - // make sure the options are arrays and add some members - each(xAxisOptions, function (axis, i) { - axis.index = i; - axis.isX = true; - }); - - each(yAxisOptions, function (axis, i) { - axis.index = i; - }); - - // concatenate all axis options into one array - optionsArray = xAxisOptions.concat(yAxisOptions); - - each(optionsArray, function (axisOptions) { - axis = new Axis(chart, axisOptions); - }); - - chart.adjustTickAmounts(); - }, - - - /** - * Get the currently selected points from all series - */ - getSelectedPoints: function () { - var points = []; - each(this.series, function (serie) { - points = points.concat(grep(serie.points || [], function (point) { - return point.selected; - })); - }); - return points; - }, - - /** - * Get the currently selected series - */ - getSelectedSeries: function () { - return grep(this.series, function (serie) { - return serie.selected; - }); - }, - - /** - * Generate stacks for each series and calculate stacks total values - */ - getStacks: function () { - var chart = this; - - // reset stacks for each yAxis - each(chart.yAxis, function (axis) { - if (axis.stacks && axis.hasVisibleSeries) { - axis.oldStacks = axis.stacks; - } - }); - - each(chart.series, function (series) { - if (series.options.stacking && (series.visible === true || chart.options.chart.ignoreHiddenSeries === false)) { - series.stackKey = series.type + pick(series.options.stack, ''); - } - }); - }, - - /** - * Show the title and subtitle of the chart - * - * @param titleOptions {Object} New title options - * @param subtitleOptions {Object} New subtitle options - * - */ - setTitle: function (titleOptions, subtitleOptions, redraw) { - var chart = this, - options = chart.options, - chartTitleOptions, - chartSubtitleOptions; - - chartTitleOptions = options.title = merge(options.title, titleOptions); - chartSubtitleOptions = options.subtitle = merge(options.subtitle, subtitleOptions); - - // add title and subtitle - each([ - ['title', titleOptions, chartTitleOptions], - ['subtitle', subtitleOptions, chartSubtitleOptions] - ], function (arr) { - var name = arr[0], - title = chart[name], - titleOptions = arr[1], - chartTitleOptions = arr[2]; - - if (title && titleOptions) { - chart[name] = title = title.destroy(); // remove old - } - - if (chartTitleOptions && chartTitleOptions.text && !title) { - chart[name] = chart.renderer.text( - chartTitleOptions.text, - 0, - 0, - chartTitleOptions.useHTML - ) - .attr({ - align: chartTitleOptions.align, - 'class': PREFIX + name, - zIndex: chartTitleOptions.zIndex || 4 - }) - .css(chartTitleOptions.style) - .add(); - } - }); - chart.layOutTitles(redraw); - }, - - /** - * Lay out the chart titles and cache the full offset height for use in getMargins - */ - layOutTitles: function (redraw) { - var titleOffset = 0, - title = this.title, - subtitle = this.subtitle, - options = this.options, - titleOptions = options.title, - subtitleOptions = options.subtitle, - requiresDirtyBox, - autoWidth = this.spacingBox.width - 44; // 44 makes room for default context button - - if (title) { - title - .css({ width: (titleOptions.width || autoWidth) + PX }) - .align(extend({ y: 15 }, titleOptions), false, 'spacingBox'); - - if (!titleOptions.floating && !titleOptions.verticalAlign) { - titleOffset = title.getBBox().height; - } - } - if (subtitle) { - subtitle - .css({ width: (subtitleOptions.width || autoWidth) + PX }) - .align(extend({ y: titleOffset + titleOptions.margin }, subtitleOptions), false, 'spacingBox'); - - if (!subtitleOptions.floating && !subtitleOptions.verticalAlign) { - titleOffset = mathCeil(titleOffset + subtitle.getBBox().height); - } - } - - requiresDirtyBox = this.titleOffset !== titleOffset; - this.titleOffset = titleOffset; // used in getMargins - - if (!this.isDirtyBox && requiresDirtyBox) { - this.isDirtyBox = requiresDirtyBox; - // Redraw if necessary (#2719, #2744) - if (this.hasRendered && pick(redraw, true) && this.isDirtyBox) { - this.redraw(); - } - } - }, - - /** - * Get chart width and height according to options and container size - */ - getChartSize: function () { - var chart = this, - optionsChart = chart.options.chart, - widthOption = optionsChart.width, - heightOption = optionsChart.height, - renderTo = chart.renderToClone || chart.renderTo; - - // get inner width and height from jQuery (#824) - if (!defined(widthOption)) { - chart.containerWidth = adapterRun(renderTo, 'width'); - } - if (!defined(heightOption)) { - chart.containerHeight = adapterRun(renderTo, 'height'); - } - - chart.chartWidth = mathMax(0, widthOption || chart.containerWidth || 600); // #1393, 1460 - chart.chartHeight = mathMax(0, pick(heightOption, - // the offsetHeight of an empty container is 0 in standard browsers, but 19 in IE7: - chart.containerHeight > 19 ? chart.containerHeight : 400)); - }, - - /** - * Create a clone of the chart's renderTo div and place it outside the viewport to allow - * size computation on chart.render and chart.redraw - */ - cloneRenderTo: function (revert) { - var clone = this.renderToClone, - container = this.container; - - // Destroy the clone and bring the container back to the real renderTo div - if (revert) { - if (clone) { - this.renderTo.appendChild(container); - discardElement(clone); - delete this.renderToClone; - } - - // Set up the clone - } else { - if (container && container.parentNode === this.renderTo) { - this.renderTo.removeChild(container); // do not clone this - } - this.renderToClone = clone = this.renderTo.cloneNode(0); - css(clone, { - position: ABSOLUTE, - top: '-9999px', - display: 'block' // #833 - }); - if (clone.style.setProperty) { // #2631 - clone.style.setProperty('display', 'block', 'important'); - } - doc.body.appendChild(clone); - if (container) { - clone.appendChild(container); - } - } - }, - - /** - * Get the containing element, determine the size and create the inner container - * div to hold the chart - */ - getContainer: function () { - var chart = this, - container, - optionsChart = chart.options.chart, - chartWidth, - chartHeight, - renderTo, - indexAttrName = 'data-highcharts-chart', - oldChartIndex, - containerId; - - chart.renderTo = renderTo = optionsChart.renderTo; - containerId = PREFIX + idCounter++; - - if (isString(renderTo)) { - chart.renderTo = renderTo = doc.getElementById(renderTo); - } - - // Display an error if the renderTo is wrong - if (!renderTo) { - error(13, true); - } - - // If the container already holds a chart, destroy it. The check for hasRendered is there - // because web pages that are saved to disk from the browser, will preserve the data-highcharts-chart - // attribute and the SVG contents, but not an interactive chart. So in this case, - // charts[oldChartIndex] will point to the wrong chart if any (#2609). - oldChartIndex = pInt(attr(renderTo, indexAttrName)); - if (!isNaN(oldChartIndex) && charts[oldChartIndex] && charts[oldChartIndex].hasRendered) { - charts[oldChartIndex].destroy(); - } - - // Make a reference to the chart from the div - attr(renderTo, indexAttrName, chart.index); - - // remove previous chart - renderTo.innerHTML = ''; - - // If the container doesn't have an offsetWidth, it has or is a child of a node - // that has display:none. We need to temporarily move it out to a visible - // state to determine the size, else the legend and tooltips won't render - // properly. The allowClone option is used in sparklines as a micro optimization, - // saving about 1-2 ms each chart. - if (!optionsChart.skipClone && !renderTo.offsetWidth) { - chart.cloneRenderTo(); - } - - // get the width and height - chart.getChartSize(); - chartWidth = chart.chartWidth; - chartHeight = chart.chartHeight; - - // create the inner container - chart.container = container = createElement(DIV, { - className: PREFIX + 'container' + - (optionsChart.className ? ' ' + optionsChart.className : ''), - id: containerId - }, extend({ - position: RELATIVE, - overflow: HIDDEN, // needed for context menu (avoid scrollbars) and - // content overflow in IE - width: chartWidth + PX, - height: chartHeight + PX, - textAlign: 'left', - lineHeight: 'normal', // #427 - zIndex: 0, // #1072 - '-webkit-tap-highlight-color': 'rgba(0,0,0,0)' - }, optionsChart.style), - chart.renderToClone || renderTo - ); - - // cache the cursor (#1650) - chart._cursor = container.style.cursor; - - // Initialize the renderer - chart.renderer = - optionsChart.forExport ? // force SVG, used for SVG export - new SVGRenderer(container, chartWidth, chartHeight, optionsChart.style, true) : - new Renderer(container, chartWidth, chartHeight, optionsChart.style); - - if (useCanVG) { - // If we need canvg library, extend and configure the renderer - // to get the tracker for translating mouse events - chart.renderer.create(chart, container, chartWidth, chartHeight); - } - }, - - /** - * Calculate margins by rendering axis labels in a preliminary position. Title, - * subtitle and legend have already been rendered at this stage, but will be - * moved into their final positions - */ - getMargins: function () { - var chart = this, - spacing = chart.spacing, - axisOffset, - legend = chart.legend, - margin = chart.margin, - legendOptions = chart.options.legend, - legendMargin = pick(legendOptions.margin, 20), - legendX = legendOptions.x, - legendY = legendOptions.y, - align = legendOptions.align, - verticalAlign = legendOptions.verticalAlign, - titleOffset = chart.titleOffset; - - chart.resetMargins(); - axisOffset = chart.axisOffset; - - // Adjust for title and subtitle - if (titleOffset && !defined(margin[0])) { - chart.plotTop = mathMax(chart.plotTop, titleOffset + chart.options.title.margin + spacing[0]); - } - - // Adjust for legend - if (legend.display && !legendOptions.floating) { - if (align === 'right') { // horizontal alignment handled first - if (!defined(margin[1])) { - chart.marginRight = mathMax( - chart.marginRight, - legend.legendWidth - legendX + legendMargin + spacing[1] - ); - } - } else if (align === 'left') { - if (!defined(margin[3])) { - chart.plotLeft = mathMax( - chart.plotLeft, - legend.legendWidth + legendX + legendMargin + spacing[3] - ); - } - - } else if (verticalAlign === 'top') { - if (!defined(margin[0])) { - chart.plotTop = mathMax( - chart.plotTop, - legend.legendHeight + legendY + legendMargin + spacing[0] - ); - } - - } else if (verticalAlign === 'bottom') { - if (!defined(margin[2])) { - chart.marginBottom = mathMax( - chart.marginBottom, - legend.legendHeight - legendY + legendMargin + spacing[2] - ); - } - } - } - - // adjust for scroller - if (chart.extraBottomMargin) { - chart.marginBottom += chart.extraBottomMargin; - } - if (chart.extraTopMargin) { - chart.plotTop += chart.extraTopMargin; - } - - // pre-render axes to get labels offset width - if (chart.hasCartesianSeries) { - each(chart.axes, function (axis) { - axis.getOffset(); - }); - } - - if (!defined(margin[3])) { - chart.plotLeft += axisOffset[3]; - } - if (!defined(margin[0])) { - chart.plotTop += axisOffset[0]; - } - if (!defined(margin[2])) { - chart.marginBottom += axisOffset[2]; - } - if (!defined(margin[1])) { - chart.marginRight += axisOffset[1]; - } - - chart.setChartSize(); - - }, - - /** - * Resize the chart to its container if size is not explicitly set - */ - reflow: function (e) { - var chart = this, - optionsChart = chart.options.chart, - renderTo = chart.renderTo, - width = optionsChart.width || adapterRun(renderTo, 'width'), - height = optionsChart.height || adapterRun(renderTo, 'height'), - target = e ? e.target : win, // #805 - MooTools doesn't supply e - doReflow = function () { - if (chart.container) { // It may have been destroyed in the meantime (#1257) - chart.setSize(width, height, false); - chart.hasUserSize = null; - } - }; - - // Width and height checks for display:none. Target is doc in IE8 and Opera, - // win in Firefox, Chrome and IE9. - if (!chart.hasUserSize && width && height && (target === win || target === doc)) { - if (width !== chart.containerWidth || height !== chart.containerHeight) { - clearTimeout(chart.reflowTimeout); - if (e) { // Called from window.resize - chart.reflowTimeout = setTimeout(doReflow, 100); - } else { // Called directly (#2224) - doReflow(); - } - } - chart.containerWidth = width; - chart.containerHeight = height; - } - }, - - /** - * Add the event handlers necessary for auto resizing - */ - initReflow: function () { - var chart = this, - reflow = function (e) { - chart.reflow(e); - }; - - - addEvent(win, 'resize', reflow); - addEvent(chart, 'destroy', function () { - removeEvent(win, 'resize', reflow); - }); - }, - - /** - * Resize the chart to a given width and height - * @param {Number} width - * @param {Number} height - * @param {Object|Boolean} animation - */ - setSize: function (width, height, animation) { - var chart = this, - chartWidth, - chartHeight, - fireEndResize; - - // Handle the isResizing counter - chart.isResizing += 1; - fireEndResize = function () { - if (chart) { - fireEvent(chart, 'endResize', null, function () { - chart.isResizing -= 1; - }); - } - }; - - // set the animation for the current process - setAnimation(animation, chart); - - chart.oldChartHeight = chart.chartHeight; - chart.oldChartWidth = chart.chartWidth; - if (defined(width)) { - chart.chartWidth = chartWidth = mathMax(0, mathRound(width)); - chart.hasUserSize = !!chartWidth; - } - if (defined(height)) { - chart.chartHeight = chartHeight = mathMax(0, mathRound(height)); - } - - // Resize the container with the global animation applied if enabled (#2503) - (globalAnimation ? animate : css)(chart.container, { - width: chartWidth + PX, - height: chartHeight + PX - }, globalAnimation); - - chart.setChartSize(true); - chart.renderer.setSize(chartWidth, chartHeight, animation); - - // handle axes - chart.maxTicks = null; - each(chart.axes, function (axis) { - axis.isDirty = true; - axis.setScale(); - }); - - // make sure non-cartesian series are also handled - each(chart.series, function (serie) { - serie.isDirty = true; - }); - - chart.isDirtyLegend = true; // force legend redraw - chart.isDirtyBox = true; // force redraw of plot and chart border - - chart.layOutTitles(); // #2857 - chart.getMargins(); - - chart.redraw(animation); - - - chart.oldChartHeight = null; - fireEvent(chart, 'resize'); - - // fire endResize and set isResizing back - // If animation is disabled, fire without delay - if (globalAnimation === false) { - fireEndResize(); - } else { // else set a timeout with the animation duration - setTimeout(fireEndResize, (globalAnimation && globalAnimation.duration) || 500); - } - }, - - /** - * Set the public chart properties. This is done before and after the pre-render - * to determine margin sizes - */ - setChartSize: function (skipAxes) { - var chart = this, - inverted = chart.inverted, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - optionsChart = chart.options.chart, - spacing = chart.spacing, - clipOffset = chart.clipOffset, - clipX, - clipY, - plotLeft, - plotTop, - plotWidth, - plotHeight, - plotBorderWidth; - - chart.plotLeft = plotLeft = mathRound(chart.plotLeft); - chart.plotTop = plotTop = mathRound(chart.plotTop); - chart.plotWidth = plotWidth = mathMax(0, mathRound(chartWidth - plotLeft - chart.marginRight)); - chart.plotHeight = plotHeight = mathMax(0, mathRound(chartHeight - plotTop - chart.marginBottom)); - - chart.plotSizeX = inverted ? plotHeight : plotWidth; - chart.plotSizeY = inverted ? plotWidth : plotHeight; - - chart.plotBorderWidth = optionsChart.plotBorderWidth || 0; - - // Set boxes used for alignment - chart.spacingBox = renderer.spacingBox = { - x: spacing[3], - y: spacing[0], - width: chartWidth - spacing[3] - spacing[1], - height: chartHeight - spacing[0] - spacing[2] - }; - chart.plotBox = renderer.plotBox = { - x: plotLeft, - y: plotTop, - width: plotWidth, - height: plotHeight - }; - - plotBorderWidth = 2 * mathFloor(chart.plotBorderWidth / 2); - clipX = mathCeil(mathMax(plotBorderWidth, clipOffset[3]) / 2); - clipY = mathCeil(mathMax(plotBorderWidth, clipOffset[0]) / 2); - chart.clipBox = { - x: clipX, - y: clipY, - width: mathFloor(chart.plotSizeX - mathMax(plotBorderWidth, clipOffset[1]) / 2 - clipX), - height: mathFloor(chart.plotSizeY - mathMax(plotBorderWidth, clipOffset[2]) / 2 - clipY) - }; - - if (!skipAxes) { - each(chart.axes, function (axis) { - axis.setAxisSize(); - axis.setAxisTranslation(); - }); - } - }, - - /** - * Initial margins before auto size margins are applied - */ - resetMargins: function () { - var chart = this, - spacing = chart.spacing, - margin = chart.margin; - - chart.plotTop = pick(margin[0], spacing[0]); - chart.marginRight = pick(margin[1], spacing[1]); - chart.marginBottom = pick(margin[2], spacing[2]); - chart.plotLeft = pick(margin[3], spacing[3]); - chart.axisOffset = [0, 0, 0, 0]; // top, right, bottom, left - chart.clipOffset = [0, 0, 0, 0]; - }, - - /** - * Draw the borders and backgrounds for chart and plot area - */ - drawChartBox: function () { - var chart = this, - optionsChart = chart.options.chart, - renderer = chart.renderer, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartBackground = chart.chartBackground, - plotBackground = chart.plotBackground, - plotBorder = chart.plotBorder, - plotBGImage = chart.plotBGImage, - chartBorderWidth = optionsChart.borderWidth || 0, - chartBackgroundColor = optionsChart.backgroundColor, - plotBackgroundColor = optionsChart.plotBackgroundColor, - plotBackgroundImage = optionsChart.plotBackgroundImage, - plotBorderWidth = optionsChart.plotBorderWidth || 0, - mgn, - bgAttr, - plotLeft = chart.plotLeft, - plotTop = chart.plotTop, - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - plotBox = chart.plotBox, - clipRect = chart.clipRect, - clipBox = chart.clipBox; - - // Chart area - mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0); - - if (chartBorderWidth || chartBackgroundColor) { - if (!chartBackground) { - - bgAttr = { - fill: chartBackgroundColor || NONE - }; - if (chartBorderWidth) { // #980 - bgAttr.stroke = optionsChart.borderColor; - bgAttr['stroke-width'] = chartBorderWidth; - } - chart.chartBackground = renderer.rect(mgn / 2, mgn / 2, chartWidth - mgn, chartHeight - mgn, - optionsChart.borderRadius, chartBorderWidth) - .attr(bgAttr) - .addClass(PREFIX + 'background') - .add() - .shadow(optionsChart.shadow); - - } else { // resize - chartBackground.animate( - chartBackground.crisp({ width: chartWidth - mgn, height: chartHeight - mgn }) - ); - } - } - - - // Plot background - if (plotBackgroundColor) { - if (!plotBackground) { - chart.plotBackground = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0) - .attr({ - fill: plotBackgroundColor - }) - .add() - .shadow(optionsChart.plotShadow); - } else { - plotBackground.animate(plotBox); - } - } - if (plotBackgroundImage) { - if (!plotBGImage) { - chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight) - .add(); - } else { - plotBGImage.animate(plotBox); - } - } - - // Plot clip - if (!clipRect) { - chart.clipRect = renderer.clipRect(clipBox); - } else { - clipRect.animate({ - width: clipBox.width, - height: clipBox.height - }); - } - - // Plot area border - if (plotBorderWidth) { - if (!plotBorder) { - chart.plotBorder = renderer.rect(plotLeft, plotTop, plotWidth, plotHeight, 0, -plotBorderWidth) - .attr({ - stroke: optionsChart.plotBorderColor, - 'stroke-width': plotBorderWidth, - fill: NONE, - zIndex: 1 - }) - .add(); - } else { - plotBorder.animate( - plotBorder.crisp({ x: plotLeft, y: plotTop, width: plotWidth, height: plotHeight }) - ); - } - } - - // reset - chart.isDirtyBox = false; - }, - - /** - * Detect whether a certain chart property is needed based on inspecting its options - * and series. This mainly applies to the chart.invert property, and in extensions to - * the chart.angular and chart.polar properties. - */ - propFromSeries: function () { - var chart = this, - optionsChart = chart.options.chart, - klass, - seriesOptions = chart.options.series, - i, - value; - - - each(['inverted', 'angular', 'polar'], function (key) { - - // The default series type's class - klass = seriesTypes[optionsChart.type || optionsChart.defaultSeriesType]; - - // Get the value from available chart-wide properties - value = ( - chart[key] || // 1. it is set before - optionsChart[key] || // 2. it is set in the options - (klass && klass.prototype[key]) // 3. it's default series class requires it - ); - - // 4. Check if any the chart's series require it - i = seriesOptions && seriesOptions.length; - while (!value && i--) { - klass = seriesTypes[seriesOptions[i].type]; - if (klass && klass.prototype[key]) { - value = true; - } - } - - // Set the chart property - chart[key] = value; - }); - - }, - - /** - * Link two or more series together. This is done initially from Chart.render, - * and after Chart.addSeries and Series.remove. - */ - linkSeries: function () { - var chart = this, - chartSeries = chart.series; - - // Reset links - each(chartSeries, function (series) { - series.linkedSeries.length = 0; - }); - - // Apply new links - each(chartSeries, function (series) { - var linkedTo = series.options.linkedTo; - if (isString(linkedTo)) { - if (linkedTo === ':previous') { - linkedTo = chart.series[series.index - 1]; - } else { - linkedTo = chart.get(linkedTo); - } - if (linkedTo) { - linkedTo.linkedSeries.push(series); - series.linkedParent = linkedTo; - } - } - }); - }, - - /** - * Render series for the chart - */ - renderSeries: function () { - each(this.series, function (serie) { - serie.translate(); - if (serie.setTooltipPoints) { - serie.setTooltipPoints(); - } - serie.render(); - }); - }, - - /** - * Render all graphics for the chart - */ - render: function () { - var chart = this, - axes = chart.axes, - renderer = chart.renderer, - options = chart.options; - - var labels = options.labels, - credits = options.credits, - creditsHref; - - // Title - chart.setTitle(); - - - // Legend - chart.legend = new Legend(chart, options.legend); - - chart.getStacks(); // render stacks - - // Get margins by pre-rendering axes - // set axes scales - each(axes, function (axis) { - axis.setScale(); - }); - - chart.getMargins(); - - chart.maxTicks = null; // reset for second pass - each(axes, function (axis) { - axis.setTickPositions(true); // update to reflect the new margins - axis.setMaxTicks(); - }); - chart.adjustTickAmounts(); - chart.getMargins(); // second pass to check for new labels - - - // Draw the borders and backgrounds - chart.drawChartBox(); - - - // Axes - if (chart.hasCartesianSeries) { - each(axes, function (axis) { - axis.render(); - }); - } - - // The series - if (!chart.seriesGroup) { - chart.seriesGroup = renderer.g('series-group') - .attr({ zIndex: 3 }) - .add(); - } - chart.renderSeries(); - - // Labels - if (labels.items) { - each(labels.items, function (label) { - var style = extend(labels.style, label.style), - x = pInt(style.left) + chart.plotLeft, - y = pInt(style.top) + chart.plotTop + 12; - - // delete to prevent rewriting in IE - delete style.left; - delete style.top; - - renderer.text( - label.html, - x, - y - ) - .attr({ zIndex: 2 }) - .css(style) - .add(); - - }); - } - - // Credits - if (credits.enabled && !chart.credits) { - creditsHref = credits.href; - chart.credits = renderer.text( - credits.text, - 0, - 0 - ) - .on('click', function () { - if (creditsHref) { - location.href = creditsHref; - } - }) - .attr({ - align: credits.position.align, - zIndex: 8 - }) - .css(credits.style) - .add() - .align(credits.position); - } - - // Set flag - chart.hasRendered = true; - - }, - - /** - * Clean up memory usage - */ - destroy: function () { - var chart = this, - axes = chart.axes, - series = chart.series, - container = chart.container, - i, - parentNode = container && container.parentNode; - - // fire the chart.destoy event - fireEvent(chart, 'destroy'); - - // Delete the chart from charts lookup array - charts[chart.index] = UNDEFINED; - chartCount--; - chart.renderTo.removeAttribute('data-highcharts-chart'); - - // remove events - removeEvent(chart); - - // ==== Destroy collections: - // Destroy axes - i = axes.length; - while (i--) { - axes[i] = axes[i].destroy(); - } - - // Destroy each series - i = series.length; - while (i--) { - series[i] = series[i].destroy(); - } - - // ==== Destroy chart properties: - each(['title', 'subtitle', 'chartBackground', 'plotBackground', 'plotBGImage', - 'plotBorder', 'seriesGroup', 'clipRect', 'credits', 'pointer', 'scroller', - 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip', 'renderer'], function (name) { - var prop = chart[name]; - - if (prop && prop.destroy) { - chart[name] = prop.destroy(); - } - }); - - // remove container and all SVG - if (container) { // can break in IE when destroyed before finished loading - container.innerHTML = ''; - removeEvent(container); - if (parentNode) { - discardElement(container); - } - - } - - // clean it all up - for (i in chart) { - delete chart[i]; - } - - }, - - - /** - * VML namespaces can't be added until after complete. Listening - * for Perini's doScroll hack is not enough. - */ - isReadyToRender: function () { - var chart = this; - - // Note: in spite of JSLint's complaints, win == win.top is required - /*jslint eqeq: true*/ - if ((!hasSVG && (win == win.top && doc.readyState !== 'complete')) || (useCanVG && !win.canvg)) { - /*jslint eqeq: false*/ - if (useCanVG) { - // Delay rendering until canvg library is downloaded and ready - CanVGController.push(function () { chart.firstRender(); }, chart.options.global.canvasToolsURL); - } else { - doc.attachEvent('onreadystatechange', function () { - doc.detachEvent('onreadystatechange', chart.firstRender); - if (doc.readyState === 'complete') { - chart.firstRender(); - } - }); - } - return false; - } - return true; - }, - - /** - * Prepare for first rendering after all data are loaded - */ - firstRender: function () { - var chart = this, - options = chart.options, - callback = chart.callback; - - // Check whether the chart is ready to render - if (!chart.isReadyToRender()) { - return; - } - - // Create the container - chart.getContainer(); - - // Run an early event after the container and renderer are established - fireEvent(chart, 'init'); - - - chart.resetMargins(); - chart.setChartSize(); - - // Set the common chart properties (mainly invert) from the given series - chart.propFromSeries(); - - // get axes - chart.getAxes(); - - // Initialize the series - each(options.series || [], function (serieOptions) { - chart.initSeries(serieOptions); - }); - - chart.linkSeries(); - - // Run an event after axes and series are initialized, but before render. At this stage, - // the series data is indexed and cached in the xData and yData arrays, so we can access - // those before rendering. Used in Highstock. - fireEvent(chart, 'beforeRender'); - - // depends on inverted and on margins being set - if (Highcharts.Pointer) { - chart.pointer = new Pointer(chart, options); - } - - chart.render(); - - // add canvas - chart.renderer.draw(); - // run callbacks - if (callback) { - callback.apply(chart, [chart]); - } - each(chart.callbacks, function (fn) { - fn.apply(chart, [chart]); - }); - - - // If the chart was rendered outside the top container, put it back in - chart.cloneRenderTo(true); - - fireEvent(chart, 'load'); - - }, - - /** - * Creates arrays for spacing and margin from given options. - */ - splashArray: function (target, options) { - var oVar = options[target], - tArray = isObject(oVar) ? oVar : [oVar, oVar, oVar, oVar]; - - return [pick(options[target + 'Top'], tArray[0]), - pick(options[target + 'Right'], tArray[1]), - pick(options[target + 'Bottom'], tArray[2]), - pick(options[target + 'Left'], tArray[3])]; - } -}; // end Chart - -// Hook for exporting module -Chart.prototype.callbacks = []; - -var CenteredSeriesMixin = Highcharts.CenteredSeriesMixin = { - /** - * Get the center of the pie based on the size and center options relative to the - * plot area. Borrowed by the polar and gauge series types. - */ - getCenter: function () { - - var options = this.options, - chart = this.chart, - slicingRoom = 2 * (options.slicedOffset || 0), - handleSlicingRoom, - plotWidth = chart.plotWidth - 2 * slicingRoom, - plotHeight = chart.plotHeight - 2 * slicingRoom, - centerOption = options.center, - positions = [pick(centerOption[0], '50%'), pick(centerOption[1], '50%'), options.size || '100%', options.innerSize || 0], - smallestSize = mathMin(plotWidth, plotHeight), - isPercent; - - return map(positions, function (length, i) { - isPercent = /%$/.test(length); - handleSlicingRoom = i < 2 || (i === 2 && isPercent); - return (isPercent ? - // i == 0: centerX, relative to width - // i == 1: centerY, relative to height - // i == 2: size, relative to smallestSize - // i == 4: innerSize, relative to smallestSize - [plotWidth, plotHeight, smallestSize, smallestSize][i] * - pInt(length) / 100 : - length) + (handleSlicingRoom ? slicingRoom : 0); - }); - } -}; - -/** - * The Point object and prototype. Inheritable and used as base for PiePoint - */ -var Point = function () {}; -Point.prototype = { - - /** - * Initialize the point - * @param {Object} series The series object containing this point - * @param {Object} options The data in either number, array or object format - */ - init: function (series, options, x) { - - var point = this, - colors; - point.series = series; - point.applyOptions(options, x); - point.pointAttr = {}; - - if (series.options.colorByPoint) { - colors = series.options.colors || series.chart.options.colors; - point.color = point.color || colors[series.colorCounter++]; - // loop back to zero - if (series.colorCounter === colors.length) { - series.colorCounter = 0; - } - } - - series.chart.pointCount++; - return point; - }, - /** - * Apply the options containing the x and y data and possible some extra properties. - * This is called on point init or from point.update. - * - * @param {Object} options - */ - applyOptions: function (options, x) { - var point = this, - series = point.series, - pointValKey = series.pointValKey; - - options = Point.prototype.optionsToObject.call(this, options); - - // copy options directly to point - extend(point, options); - point.options = point.options ? extend(point.options, options) : options; - - // For higher dimension series types. For instance, for ranges, point.y is mapped to point.low. - if (pointValKey) { - point.y = point[pointValKey]; - } - - // If no x is set by now, get auto incremented value. All points must have an - // x value, however the y value can be null to create a gap in the series - if (point.x === UNDEFINED && series) { - point.x = x === UNDEFINED ? series.autoIncrement() : x; - } - - return point; - }, - - /** - * Transform number or array configs into objects - */ - optionsToObject: function (options) { - var ret = {}, - series = this.series, - pointArrayMap = series.pointArrayMap || ['y'], - valueCount = pointArrayMap.length, - firstItemType, - i = 0, - j = 0; - - if (typeof options === 'number' || options === null) { - ret[pointArrayMap[0]] = options; - - } else if (isArray(options)) { - // with leading x value - if (options.length > valueCount) { - firstItemType = typeof options[0]; - if (firstItemType === 'string') { - ret.name = options[0]; - } else if (firstItemType === 'number') { - ret.x = options[0]; - } - i++; - } - while (j < valueCount) { - ret[pointArrayMap[j++]] = options[i++]; - } - } else if (typeof options === 'object') { - ret = options; - - // This is the fastest way to detect if there are individual point dataLabels that need - // to be considered in drawDataLabels. These can only occur in object configs. - if (options.dataLabels) { - series._hasPointLabels = true; - } - - // Same approach as above for markers - if (options.marker) { - series._hasPointMarkers = true; - } - } - return ret; - }, - - /** - * Destroy a point to clear memory. Its reference still stays in series.data. - */ - destroy: function () { - var point = this, - series = point.series, - chart = series.chart, - hoverPoints = chart.hoverPoints, - prop; - - chart.pointCount--; - - if (hoverPoints) { - point.setState(); - erase(hoverPoints, point); - if (!hoverPoints.length) { - chart.hoverPoints = null; - } - - } - if (point === chart.hoverPoint) { - point.onMouseOut(); - } - - // remove all events - if (point.graphic || point.dataLabel) { // removeEvent and destroyElements are performance expensive - removeEvent(point); - point.destroyElements(); - } - - if (point.legendItem) { // pies have legend items - chart.legend.destroyItem(point); - } - - for (prop in point) { - point[prop] = null; - } - - - }, - - /** - * Destroy SVG elements associated with the point - */ - destroyElements: function () { - var point = this, - props = ['graphic', 'dataLabel', 'dataLabelUpper', 'group', 'connector', 'shadowGroup'], - prop, - i = 6; - while (i--) { - prop = props[i]; - if (point[prop]) { - point[prop] = point[prop].destroy(); - } - } - }, - - /** - * Return the configuration hash needed for the data label and tooltip formatters - */ - getLabelConfig: function () { - var point = this; - return { - x: point.category, - y: point.y, - key: point.name || point.category, - series: point.series, - point: point, - percentage: point.percentage, - total: point.total || point.stackTotal - }; - }, - - /** - * Extendable method for formatting each point's tooltip line - * - * @return {String} A string to be concatenated in to the common tooltip text - */ - tooltipFormatter: function (pointFormat) { - - // Insert options for valueDecimals, valuePrefix, and valueSuffix - var series = this.series, - seriesTooltipOptions = series.tooltipOptions, - valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), - valuePrefix = seriesTooltipOptions.valuePrefix || '', - valueSuffix = seriesTooltipOptions.valueSuffix || ''; - - // Loop over the point array map and replace unformatted values with sprintf formatting markup - each(series.pointArrayMap || ['y'], function (key) { - key = '{point.' + key; // without the closing bracket - if (valuePrefix || valueSuffix) { - pointFormat = pointFormat.replace(key + '}', valuePrefix + key + '}' + valueSuffix); - } - pointFormat = pointFormat.replace(key + '}', key + ':,.' + valueDecimals + 'f}'); - }); - - return format(pointFormat, { - point: this, - series: this.series - }); - }, - - /** - * Fire an event on the Point object. Must not be renamed to fireEvent, as this - * causes a name clash in MooTools - * @param {String} eventType - * @param {Object} eventArgs Additional event arguments - * @param {Function} defaultFunction Default event handler - */ - firePointEvent: function (eventType, eventArgs, defaultFunction) { - var point = this, - series = this.series, - seriesOptions = series.options; - - // load event handlers on demand to save time on mouseover/out - if (seriesOptions.point.events[eventType] || (point.options && point.options.events && point.options.events[eventType])) { - this.importEvents(); - } - - // add default handler if in selection mode - if (eventType === 'click' && seriesOptions.allowPointSelect) { - defaultFunction = function (event) { - // Control key is for Windows, meta (= Cmd key) for Mac, Shift for Opera - point.select(null, event.ctrlKey || event.metaKey || event.shiftKey); - }; - } - - fireEvent(this, eventType, eventArgs, defaultFunction); - } -};/** - * @classDescription The base function which all other series types inherit from. The data in the series is stored - * in various arrays. - * - * - First, series.options.data contains all the original config options for - * each point whether added by options or methods like series.addPoint. - * - Next, series.data contains those values converted to points, but in case the series data length - * exceeds the cropThreshold, or if the data is grouped, series.data doesn't contain all the points. It - * only contains the points that have been created on demand. - * - Then there's series.points that contains all currently visible point objects. In case of cropping, - * the cropped-away points are not part of this array. The series.points array starts at series.cropStart - * compared to series.data and series.options.data. If however the series data is grouped, these can't - * be correlated one to one. - * - series.xData and series.processedXData contain clean x values, equivalent to series.data and series.points. - * - series.yData and series.processedYData contain clean x values, equivalent to series.data and series.points. - * - * @param {Object} chart - * @param {Object} options - */ -var Series = function () {}; - -Series.prototype = { - - isCartesian: true, - type: 'line', - pointClass: Point, - sorted: true, // requires the data to be sorted - requireSorting: true, - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'lineColor', - 'stroke-width': 'lineWidth', - fill: 'fillColor', - r: 'radius' - }, - axisTypes: ['xAxis', 'yAxis'], - colorCounter: 0, - parallelArrays: ['x', 'y'], // each point's x and y values are stored in this.xData and this.yData - init: function (chart, options) { - var series = this, - eventType, - events, - chartSeries = chart.series, - sortByIndex = function (a, b) { - return pick(a.options.index, a._i) - pick(b.options.index, b._i); - }; - - series.chart = chart; - series.options = options = series.setOptions(options); // merge with plotOptions - series.linkedSeries = []; - - // bind the axes - series.bindAxes(); - - // set some variables - extend(series, { - name: options.name, - state: NORMAL_STATE, - pointAttr: {}, - visible: options.visible !== false, // true by default - selected: options.selected === true // false by default - }); - - // special - if (useCanVG) { - options.animation = false; - } - - // register event listeners - events = options.events; - for (eventType in events) { - addEvent(series, eventType, events[eventType]); - } - if ( - (events && events.click) || - (options.point && options.point.events && options.point.events.click) || - options.allowPointSelect - ) { - chart.runTrackerClick = true; - } - - series.getColor(); - series.getSymbol(); - - // Set the data - each(series.parallelArrays, function (key) { - series[key + 'Data'] = []; - }); - series.setData(options.data, false); - - // Mark cartesian - if (series.isCartesian) { - chart.hasCartesianSeries = true; - } - - // Register it in the chart - chartSeries.push(series); - series._i = chartSeries.length - 1; - - // Sort series according to index option (#248, #1123, #2456) - stableSort(chartSeries, sortByIndex); - if (this.yAxis) { - stableSort(this.yAxis.series, sortByIndex); - } - - each(chartSeries, function (series, i) { - series.index = i; - series.name = series.name || 'Series ' + (i + 1); - }); - - }, - - /** - * Set the xAxis and yAxis properties of cartesian series, and register the series - * in the axis.series array - */ - bindAxes: function () { - var series = this, - seriesOptions = series.options, - chart = series.chart, - axisOptions; - - each(series.axisTypes || [], function (AXIS) { // repeat for xAxis and yAxis - - each(chart[AXIS], function (axis) { // loop through the chart's axis objects - axisOptions = axis.options; - - // apply if the series xAxis or yAxis option mathches the number of the - // axis, or if undefined, use the first axis - if ((seriesOptions[AXIS] === axisOptions.index) || - (seriesOptions[AXIS] !== UNDEFINED && seriesOptions[AXIS] === axisOptions.id) || - (seriesOptions[AXIS] === UNDEFINED && axisOptions.index === 0)) { - - // register this series in the axis.series lookup - axis.series.push(series); - - // set this series.xAxis or series.yAxis reference - series[AXIS] = axis; - - // mark dirty for redraw - axis.isDirty = true; - } - }); - - // The series needs an X and an Y axis - if (!series[AXIS] && series.optionalAxis !== AXIS) { - error(18, true); - } - - }); - }, - - /** - * For simple series types like line and column, the data values are held in arrays like - * xData and yData for quick lookup to find extremes and more. For multidimensional series - * like bubble and map, this can be extended with arrays like zData and valueData by - * adding to the series.parallelArrays array. - */ - updateParallelArrays: function (point, i) { - var series = point.series, - args = arguments, - fn = typeof i === 'number' ? - // Insert the value in the given position - function (key) { - var val = key === 'y' && series.toYData ? series.toYData(point) : point[key]; - series[key + 'Data'][i] = val; - } : - // Apply the method specified in i with the following arguments as arguments - function (key) { - Array.prototype[i].apply(series[key + 'Data'], Array.prototype.slice.call(args, 2)); - }; - - each(series.parallelArrays, fn); - }, - - /** - * Return an auto incremented x value based on the pointStart and pointInterval options. - * This is only used if an x value is not given for the point that calls autoIncrement. - */ - autoIncrement: function () { - var series = this, - options = series.options, - xIncrement = series.xIncrement; - - xIncrement = pick(xIncrement, options.pointStart, 0); - - series.pointInterval = pick(series.pointInterval, options.pointInterval, 1); - - series.xIncrement = xIncrement + series.pointInterval; - return xIncrement; - }, - - /** - * Divide the series data into segments divided by null values. - */ - getSegments: function () { - var series = this, - lastNull = -1, - segments = [], - i, - points = series.points, - pointsLength = points.length; - - if (pointsLength) { // no action required for [] - - // if connect nulls, just remove null points - if (series.options.connectNulls) { - i = pointsLength; - while (i--) { - if (points[i].y === null) { - points.splice(i, 1); - } - } - if (points.length) { - segments = [points]; - } - - // else, split on null points - } else { - each(points, function (point, i) { - if (point.y === null) { - if (i > lastNull + 1) { - segments.push(points.slice(lastNull + 1, i)); - } - lastNull = i; - } else if (i === pointsLength - 1) { // last value - segments.push(points.slice(lastNull + 1, i + 1)); - } - }); - } - } - - // register it - series.segments = segments; - }, - - /** - * Set the series options by merging from the options tree - * @param {Object} itemOptions - */ - setOptions: function (itemOptions) { - var chart = this.chart, - chartOptions = chart.options, - plotOptions = chartOptions.plotOptions, - userOptions = chart.userOptions || {}, - userPlotOptions = userOptions.plotOptions || {}, - typeOptions = plotOptions[this.type], - options; - - this.userOptions = itemOptions; - - options = merge( - typeOptions, - plotOptions.series, - itemOptions - ); - - // The tooltip options are merged between global and series specific options - this.tooltipOptions = merge( - defaultOptions.tooltip, - defaultOptions.plotOptions[this.type].tooltip, - userOptions.tooltip, - userPlotOptions.series && userPlotOptions.series.tooltip, - userPlotOptions[this.type] && userPlotOptions[this.type].tooltip, - itemOptions.tooltip - ); - - // Delete marker object if not allowed (#1125) - if (typeOptions.marker === null) { - delete options.marker; - } - - return options; - - }, - /** - * Get the series' color - */ - getColor: function () { - var options = this.options, - userOptions = this.userOptions, - defaultColors = this.chart.options.colors, - counters = this.chart.counters, - color, - colorIndex; - - color = options.color || defaultPlotOptions[this.type].color; - - if (!color && !options.colorByPoint) { - if (defined(userOptions._colorIndex)) { // after Series.update() - colorIndex = userOptions._colorIndex; - } else { - userOptions._colorIndex = counters.color; - colorIndex = counters.color++; - } - color = defaultColors[colorIndex]; - } - - this.color = color; - counters.wrapColor(defaultColors.length); - }, - /** - * Get the series' symbol - */ - getSymbol: function () { - var series = this, - userOptions = series.userOptions, - seriesMarkerOption = series.options.marker, - chart = series.chart, - defaultSymbols = chart.options.symbols, - counters = chart.counters, - symbolIndex; - - series.symbol = seriesMarkerOption.symbol; - if (!series.symbol) { - if (defined(userOptions._symbolIndex)) { // after Series.update() - symbolIndex = userOptions._symbolIndex; - } else { - userOptions._symbolIndex = counters.symbol; - symbolIndex = counters.symbol++; - } - series.symbol = defaultSymbols[symbolIndex]; - } - - // don't substract radius in image symbols (#604) - if (/^url/.test(series.symbol)) { - seriesMarkerOption.radius = 0; - } - counters.wrapSymbol(defaultSymbols.length); - }, - - drawLegendSymbol: LegendSymbolMixin.drawLineMarker, - - /** - * Replace the series data with a new set of data - * @param {Object} data - * @param {Object} redraw - */ - setData: function (data, redraw, animation, updatePoints) { - var series = this, - oldData = series.points, - oldDataLength = (oldData && oldData.length) || 0, - dataLength, - options = series.options, - chart = series.chart, - firstPoint = null, - xAxis = series.xAxis, - hasCategories = xAxis && !!xAxis.categories, - tooltipPoints = series.tooltipPoints, - i, - turboThreshold = options.turboThreshold, - pt, - xData = this.xData, - yData = this.yData, - pointArrayMap = series.pointArrayMap, - valueCount = pointArrayMap && pointArrayMap.length; - - data = data || []; - dataLength = data.length; - redraw = pick(redraw, true); - - // If the point count is the same as is was, just run Point.update which is - // cheaper, allows animation, and keeps references to points. - if (updatePoints !== false && dataLength && oldDataLength === dataLength && !series.cropped && !series.hasGroupedData) { - each(data, function (point, i) { - oldData[i].update(point, false); - }); - - } else { - - // Reset properties - series.xIncrement = null; - series.pointRange = hasCategories ? 1 : options.pointRange; - - series.colorCounter = 0; // for series with colorByPoint (#1547) - - // Update parallel arrays - each(this.parallelArrays, function (key) { - series[key + 'Data'].length = 0; - }); - - // In turbo mode, only one- or twodimensional arrays of numbers are allowed. The - // first value is tested, and we assume that all the rest are defined the same - // way. Although the 'for' loops are similar, they are repeated inside each - // if-else conditional for max performance. - if (turboThreshold && dataLength > turboThreshold) { - - // find the first non-null point - i = 0; - while (firstPoint === null && i < dataLength) { - firstPoint = data[i]; - i++; - } - - - if (isNumber(firstPoint)) { // assume all points are numbers - var x = pick(options.pointStart, 0), - pointInterval = pick(options.pointInterval, 1); - - for (i = 0; i < dataLength; i++) { - xData[i] = x; - yData[i] = data[i]; - x += pointInterval; - } - series.xIncrement = x; - } else if (isArray(firstPoint)) { // assume all points are arrays - if (valueCount) { // [x, low, high] or [x, o, h, l, c] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt.slice(1, valueCount + 1); - } - } else { // [x, y] - for (i = 0; i < dataLength; i++) { - pt = data[i]; - xData[i] = pt[0]; - yData[i] = pt[1]; - } - } - } else { - error(12); // Highcharts expects configs to be numbers or arrays in turbo mode - } - } else { - for (i = 0; i < dataLength; i++) { - if (data[i] !== UNDEFINED) { // stray commas in oldIE - pt = { series: series }; - series.pointClass.prototype.applyOptions.apply(pt, [data[i]]); - series.updateParallelArrays(pt, i); - if (hasCategories && pt.name) { - xAxis.names[pt.x] = pt.name; // #2046 - } - } - } - } - - // Forgetting to cast strings to numbers is a common caveat when handling CSV or JSON - if (isString(yData[0])) { - error(14, true); - } - - series.data = []; - series.options.data = data; - //series.zData = zData; - - // destroy old points - i = oldDataLength; - while (i--) { - if (oldData[i] && oldData[i].destroy) { - oldData[i].destroy(); - } - } - if (tooltipPoints) { // #2594 - tooltipPoints.length = 0; - } - - // reset minRange (#878) - if (xAxis) { - xAxis.minRange = xAxis.userMinRange; - } - - // redraw - series.isDirty = series.isDirtyData = chart.isDirtyBox = true; - animation = false; - } - - if (redraw) { - chart.redraw(animation); - } - }, - - /** - * Process the data by cropping away unused data points if the series is longer - * than the crop threshold. This saves computing time for lage series. - */ - processData: function (force) { - var series = this, - processedXData = series.xData, // copied during slice operation below - processedYData = series.yData, - dataLength = processedXData.length, - croppedData, - cropStart = 0, - cropped, - distance, - closestPointRange, - xAxis = series.xAxis, - i, // loop variable - options = series.options, - cropThreshold = options.cropThreshold, - activePointCount = 0, - isCartesian = series.isCartesian, - min, - max; - - // If the series data or axes haven't changed, don't go through this. Return false to pass - // the message on to override methods like in data grouping. - if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { - return false; - } - - - // optionally filter out points outside the plot area - if (isCartesian && series.sorted && (!cropThreshold || dataLength > cropThreshold || series.forceCrop)) { - - min = xAxis.min; - max = xAxis.max; - - // it's outside current extremes - if (processedXData[dataLength - 1] < min || processedXData[0] > max) { - processedXData = []; - processedYData = []; - - // only crop if it's actually spilling out - } else if (processedXData[0] < min || processedXData[dataLength - 1] > max) { - croppedData = this.cropData(series.xData, series.yData, min, max); - processedXData = croppedData.xData; - processedYData = croppedData.yData; - cropStart = croppedData.start; - cropped = true; - activePointCount = processedXData.length; - } - } - - - // Find the closest distance between processed points - for (i = processedXData.length - 1; i >= 0; i--) { - distance = processedXData[i] - processedXData[i - 1]; - - if (!cropped && processedXData[i] > min && processedXData[i] < max) { - activePointCount++; - } - if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { - closestPointRange = distance; - - // Unsorted data is not supported by the line tooltip, as well as data grouping and - // navigation in Stock charts (#725) and width calculation of columns (#1900) - } else if (distance < 0 && series.requireSorting) { - error(15); - } - } - - // Record the properties - series.cropped = cropped; // undefined or true - series.cropStart = cropStart; - series.processedXData = processedXData; - series.processedYData = processedYData; - series.activePointCount = activePointCount; - - if (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC - series.pointRange = closestPointRange || 1; - } - series.closestPointRange = closestPointRange; - - }, - - /** - * Iterate over xData and crop values between min and max. Returns object containing crop start/end - * cropped xData with corresponding part of yData, dataMin and dataMax within the cropped range - */ - cropData: function (xData, yData, min, max) { - var dataLength = xData.length, - cropStart = 0, - cropEnd = dataLength, - cropShoulder = pick(this.cropShoulder, 1), // line-type series need one point outside - i; - - // iterate up to find slice start - for (i = 0; i < dataLength; i++) { - if (xData[i] >= min) { - cropStart = mathMax(0, i - cropShoulder); - break; - } - } - - // proceed to find slice end - for (; i < dataLength; i++) { - if (xData[i] > max) { - cropEnd = i + cropShoulder; - break; - } - } - - return { - xData: xData.slice(cropStart, cropEnd), - yData: yData.slice(cropStart, cropEnd), - start: cropStart, - end: cropEnd - }; - }, - - - /** - * Generate the data point after the data has been processed by cropping away - * unused points and optionally grouped in Highcharts Stock. - */ - generatePoints: function () { - var series = this, - options = series.options, - dataOptions = options.data, - data = series.data, - dataLength, - processedXData = series.processedXData, - processedYData = series.processedYData, - pointClass = series.pointClass, - processedDataLength = processedXData.length, - cropStart = series.cropStart || 0, - cursor, - hasGroupedData = series.hasGroupedData, - point, - points = [], - i; - - if (!data && !hasGroupedData) { - var arr = []; - arr.length = dataOptions.length; - data = series.data = arr; - } - - for (i = 0; i < processedDataLength; i++) { - cursor = cropStart + i; - if (!hasGroupedData) { - if (data[cursor]) { - point = data[cursor]; - } else if (dataOptions[cursor] !== UNDEFINED) { // #970 - data[cursor] = point = (new pointClass()).init(series, dataOptions[cursor], processedXData[i]); - } - points[i] = point; - } else { - // splat the y data in case of ohlc data array - points[i] = (new pointClass()).init(series, [processedXData[i]].concat(splat(processedYData[i]))); - } - } - - // Hide cropped-away points - this only runs when the number of points is above cropThreshold, or when - // swithching view from non-grouped data to grouped data (#637) - if (data && (processedDataLength !== (dataLength = data.length) || hasGroupedData)) { - for (i = 0; i < dataLength; i++) { - if (i === cropStart && !hasGroupedData) { // when has grouped data, clear all points - i += processedDataLength; - } - if (data[i]) { - data[i].destroyElements(); - data[i].plotX = UNDEFINED; // #1003 - } - } - } - - series.data = data; - series.points = points; - }, - - /** - * Calculate Y extremes for visible data - */ - getExtremes: function (yData) { - var xAxis = this.xAxis, - yAxis = this.yAxis, - xData = this.processedXData, - yDataLength, - activeYData = [], - activeCounter = 0, - xExtremes = xAxis.getExtremes(), // #2117, need to compensate for log X axis - xMin = xExtremes.min, - xMax = xExtremes.max, - validValue, - withinRange, - dataMin, - dataMax, - x, - y, - i, - j; - - yData = yData || this.stackedYData || this.processedYData; - yDataLength = yData.length; - - for (i = 0; i < yDataLength; i++) { - - x = xData[i]; - y = yData[i]; - - // For points within the visible range, including the first point outside the - // visible range, consider y extremes - validValue = y !== null && y !== UNDEFINED && (!yAxis.isLog || (y.length || y > 0)); - withinRange = this.getExtremesFromAll || this.cropped || ((xData[i + 1] || x) >= xMin && - (xData[i - 1] || x) <= xMax); - - if (validValue && withinRange) { - - j = y.length; - if (j) { // array, like ohlc or range data - while (j--) { - if (y[j] !== null) { - activeYData[activeCounter++] = y[j]; - } - } - } else { - activeYData[activeCounter++] = y; - } - } - } - this.dataMin = pick(dataMin, arrayMin(activeYData)); - this.dataMax = pick(dataMax, arrayMax(activeYData)); - }, - - /** - * Translate data points from raw data values to chart specific positioning data - * needed later in drawPoints, drawGraph and drawTracker. - */ - translate: function () { - if (!this.processedXData) { // hidden series - this.processData(); - } - this.generatePoints(); - var series = this, - options = series.options, - stacking = options.stacking, - xAxis = series.xAxis, - categories = xAxis.categories, - yAxis = series.yAxis, - points = series.points, - dataLength = points.length, - hasModifyValue = !!series.modifyValue, - i, - pointPlacement = options.pointPlacement, - dynamicallyPlaced = pointPlacement === 'between' || isNumber(pointPlacement), - threshold = options.threshold; - - // Translate each point - for (i = 0; i < dataLength; i++) { - var point = points[i], - xValue = point.x, - yValue = point.y, - yBottom = point.low, - stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey], - pointStack, - stackValues; - - // Discard disallowed y values for log axes - if (yAxis.isLog && yValue <= 0) { - point.y = yValue = null; - } - - // Get the plotX translation - point.plotX = xAxis.translate(xValue, 0, 0, 0, 1, pointPlacement, this.type === 'flags'); // Math.round fixes #591 - - - // Calculate the bottom y value for stacked series - if (stacking && series.visible && stack && stack[xValue]) { - - pointStack = stack[xValue]; - stackValues = pointStack.points[series.index + ',' + i]; - yBottom = stackValues[0]; - yValue = stackValues[1]; - - if (yBottom === 0) { - yBottom = pick(threshold, yAxis.min); - } - if (yAxis.isLog && yBottom <= 0) { // #1200, #1232 - yBottom = null; - } - - point.total = point.stackTotal = pointStack.total; - point.percentage = pointStack.total && (point.y / pointStack.total * 100); - point.stackY = yValue; - - // Place the stack label - pointStack.setOffset(series.pointXOffset || 0, series.barW || 0); - - } - - // Set translated yBottom or remove it - point.yBottom = defined(yBottom) ? - yAxis.translate(yBottom, 0, 1, 0, 1) : - null; - - // general hook, used for Highstock compare mode - if (hasModifyValue) { - yValue = series.modifyValue(yValue, point); - } - - // Set the the plotY value, reset it for redraws - point.plotY = (typeof yValue === 'number' && yValue !== Infinity) ? - //mathRound(yAxis.translate(yValue, 0, 1, 0, 1) * 10) / 10 : // Math.round fixes #591 - yAxis.translate(yValue, 0, 1, 0, 1) : - UNDEFINED; - - // Set client related positions for mouse tracking - point.clientX = dynamicallyPlaced ? xAxis.translate(xValue, 0, 0, 0, 1) : point.plotX; // #1514 - - point.negative = point.y < (threshold || 0); - - // some API data - point.category = categories && categories[point.x] !== UNDEFINED ? - categories[point.x] : point.x; - - } - - // now that we have the cropped data, build the segments - series.getSegments(); - }, - - /** - * Animate in the series - */ - animate: function (init) { - var series = this, - chart = series.chart, - renderer = chart.renderer, - clipRect, - markerClipRect, - animation = series.options.animation, - clipBox = series.clipBox || chart.clipBox, - inverted = chart.inverted, - sharedClipKey; - - // Animation option is set to true - if (animation && !isObject(animation)) { - animation = defaultPlotOptions[series.type].animation; - } - sharedClipKey = ['_sharedClip', animation.duration, animation.easing, clipBox.height].join(','); - - // Initialize the animation. Set up the clipping rectangle. - if (init) { - - // If a clipping rectangle with the same properties is currently present in the chart, use that. - clipRect = chart[sharedClipKey]; - markerClipRect = chart[sharedClipKey + 'm']; - if (!clipRect) { - chart[sharedClipKey] = clipRect = renderer.clipRect( - extend(clipBox, { width: 0 }) - ); - - chart[sharedClipKey + 'm'] = markerClipRect = renderer.clipRect( - -99, // include the width of the first marker - inverted ? -chart.plotLeft : -chart.plotTop, - 99, - inverted ? chart.chartWidth : chart.chartHeight - ); - } - series.group.clip(clipRect); - series.markerGroup.clip(markerClipRect); - series.sharedClipKey = sharedClipKey; - - // Run the animation - } else { - clipRect = chart[sharedClipKey]; - if (clipRect) { - clipRect.animate({ - width: chart.plotSizeX - }, animation); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'].animate({ - width: chart.plotSizeX + 99 - }, animation); - } - - // Delete this function to allow it only once - series.animate = null; - - } - }, - - /** - * This runs after animation to land on the final plot clipping - */ - afterAnimate: function () { - var chart = this.chart, - sharedClipKey = this.sharedClipKey, - group = this.group, - clipBox = this.clipBox; - - if (group && this.options.clip !== false) { - if (!sharedClipKey || !clipBox) { - group.clip(clipBox ? chart.renderer.clipRect(clipBox) : chart.clipRect); - } - this.markerGroup.clip(); // no clip - } - - fireEvent(this, 'afterAnimate'); - - // Remove the shared clipping rectancgle when all series are shown - setTimeout(function () { - if (sharedClipKey && chart[sharedClipKey]) { - if (!clipBox) { - chart[sharedClipKey] = chart[sharedClipKey].destroy(); - } - if (chart[sharedClipKey + 'm']) { - chart[sharedClipKey + 'm'] = chart[sharedClipKey + 'm'].destroy(); - } - } - }, 100); - }, - - /** - * Draw the markers - */ - drawPoints: function () { - var series = this, - pointAttr, - points = series.points, - chart = series.chart, - plotX, - plotY, - i, - point, - radius, - symbol, - isImage, - graphic, - options = series.options, - seriesMarkerOptions = options.marker, - seriesPointAttr = series.pointAttr[''], - pointMarkerOptions, - enabled, - isInside, - markerGroup = series.markerGroup, - globallyEnabled = pick( - seriesMarkerOptions.enabled, - series.activePointCount < (0.5 * series.xAxis.len / seriesMarkerOptions.radius) - ); - - if (seriesMarkerOptions.enabled !== false || series._hasPointMarkers) { - - i = points.length; - while (i--) { - point = points[i]; - plotX = mathFloor(point.plotX); // #1843 - plotY = point.plotY; - graphic = point.graphic; - pointMarkerOptions = point.marker || {}; - enabled = (globallyEnabled && pointMarkerOptions.enabled === UNDEFINED) || pointMarkerOptions.enabled; - isInside = chart.isInsidePlot(mathRound(plotX), plotY, chart.inverted); // #1858 - - // only draw the point if y is defined - if (enabled && plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - - // shortcuts - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || seriesPointAttr; - radius = pointAttr.r; - symbol = pick(pointMarkerOptions.symbol, series.symbol); - isImage = symbol.indexOf('url') === 0; - - if (graphic) { // update - graphic[isInside ? 'show' : 'hide'](true) // Since the marker group isn't clipped, each individual marker must be toggled - .animate(extend({ - x: plotX - radius, - y: plotY - radius - }, graphic.symbolName ? { // don't apply to image symbols #507 - width: 2 * radius, - height: 2 * radius - } : {})); - } else if (isInside && (radius > 0 || isImage)) { - point.graphic = graphic = chart.renderer.symbol( - symbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr) - .add(markerGroup); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - } - } - - }, - - /** - * Convert state properties from API naming conventions to SVG attributes - * - * @param {Object} options API options object - * @param {Object} base1 SVG attribute object to inherit from - * @param {Object} base2 Second level SVG attribute object to inherit from - */ - convertAttribs: function (options, base1, base2, base3) { - var conversion = this.pointAttrToOptions, - attr, - option, - obj = {}; - - options = options || {}; - base1 = base1 || {}; - base2 = base2 || {}; - base3 = base3 || {}; - - for (attr in conversion) { - option = conversion[attr]; - obj[attr] = pick(options[option], base1[attr], base2[attr], base3[attr]); - } - return obj; - }, - - /** - * Get the state attributes. Each series type has its own set of attributes - * that are allowed to change on a point's state change. Series wide attributes are stored for - * all series, and additionally point specific attributes are stored for all - * points with individual marker options. If such options are not defined for the point, - * a reference to the series wide attributes is stored in point.pointAttr. - */ - getAttribs: function () { - var series = this, - seriesOptions = series.options, - normalOptions = defaultPlotOptions[series.type].marker ? seriesOptions.marker : seriesOptions, - stateOptions = normalOptions.states, - stateOptionsHover = stateOptions[HOVER_STATE], - pointStateOptionsHover, - seriesColor = series.color, - normalDefaults = { - stroke: seriesColor, - fill: seriesColor - }, - points = series.points || [], // #927 - i, - point, - seriesPointAttr = [], - pointAttr, - pointAttrToOptions = series.pointAttrToOptions, - hasPointSpecificOptions = series.hasPointSpecificOptions, - negativeColor = seriesOptions.negativeColor, - defaultLineColor = normalOptions.lineColor, - defaultFillColor = normalOptions.fillColor, - turboThreshold = seriesOptions.turboThreshold, - attr, - key; - - // series type specific modifications - if (seriesOptions.marker) { // line, spline, area, areaspline, scatter - - // if no hover radius is given, default to normal radius + 2 - stateOptionsHover.radius = stateOptionsHover.radius || normalOptions.radius + 2; - stateOptionsHover.lineWidth = stateOptionsHover.lineWidth || normalOptions.lineWidth + 1; - - } else { // column, bar, pie - - // if no hover color is given, brighten the normal color - stateOptionsHover.color = stateOptionsHover.color || - Color(stateOptionsHover.color || seriesColor) - .brighten(stateOptionsHover.brightness).get(); - } - - // general point attributes for the series normal state - seriesPointAttr[NORMAL_STATE] = series.convertAttribs(normalOptions, normalDefaults); - - // HOVER_STATE and SELECT_STATE states inherit from normal state except the default radius - each([HOVER_STATE, SELECT_STATE], function (state) { - seriesPointAttr[state] = - series.convertAttribs(stateOptions[state], seriesPointAttr[NORMAL_STATE]); - }); - - // set it - series.pointAttr = seriesPointAttr; - - - // Generate the point-specific attribute collections if specific point - // options are given. If not, create a referance to the series wide point - // attributes - i = points.length; - if (!turboThreshold || i < turboThreshold || hasPointSpecificOptions) { - while (i--) { - point = points[i]; - normalOptions = (point.options && point.options.marker) || point.options; - if (normalOptions && normalOptions.enabled === false) { - normalOptions.radius = 0; - } - - if (point.negative && negativeColor) { - point.color = point.fillColor = negativeColor; - } - - hasPointSpecificOptions = seriesOptions.colorByPoint || point.color; // #868 - - // check if the point has specific visual options - if (point.options) { - for (key in pointAttrToOptions) { - if (defined(normalOptions[pointAttrToOptions[key]])) { - hasPointSpecificOptions = true; - } - } - } - - // a specific marker config object is defined for the individual point: - // create it's own attribute collection - if (hasPointSpecificOptions) { - normalOptions = normalOptions || {}; - pointAttr = []; - stateOptions = normalOptions.states || {}; // reassign for individual point - pointStateOptionsHover = stateOptions[HOVER_STATE] = stateOptions[HOVER_STATE] || {}; - - // Handle colors for column and pies - if (!seriesOptions.marker) { // column, bar, point - // If no hover color is given, brighten the normal color. #1619, #2579 - pointStateOptionsHover.color = pointStateOptionsHover.color || (!point.options.color && stateOptionsHover.color) || - Color(point.color) - .brighten(pointStateOptionsHover.brightness || stateOptionsHover.brightness) - .get(); - } - - // normal point state inherits series wide normal state - attr = { color: point.color }; // #868 - if (!defaultFillColor) { // Individual point color or negative color markers (#2219) - attr.fillColor = point.color; - } - if (!defaultLineColor) { - attr.lineColor = point.color; // Bubbles take point color, line markers use white - } - pointAttr[NORMAL_STATE] = series.convertAttribs(extend(attr, normalOptions), seriesPointAttr[NORMAL_STATE]); - - // inherit from point normal and series hover - pointAttr[HOVER_STATE] = series.convertAttribs( - stateOptions[HOVER_STATE], - seriesPointAttr[HOVER_STATE], - pointAttr[NORMAL_STATE] - ); - - // inherit from point normal and series hover - pointAttr[SELECT_STATE] = series.convertAttribs( - stateOptions[SELECT_STATE], - seriesPointAttr[SELECT_STATE], - pointAttr[NORMAL_STATE] - ); - - - // no marker config object is created: copy a reference to the series-wide - // attribute collection - } else { - pointAttr = seriesPointAttr; - } - - point.pointAttr = pointAttr; - } - } - }, - - /** - * Clear DOM objects and free up memory - */ - destroy: function () { - var series = this, - chart = series.chart, - issue134 = /AppleWebKit\/533/.test(userAgent), - destroy, - i, - data = series.data || [], - point, - prop, - axis; - - // add event hook - fireEvent(series, 'destroy'); - - // remove all events - removeEvent(series); - - // erase from axes - each(series.axisTypes || [], function (AXIS) { - axis = series[AXIS]; - if (axis) { - erase(axis.series, series); - axis.isDirty = axis.forceRedraw = true; - } - }); - - // remove legend items - if (series.legendItem) { - series.chart.legend.destroyItem(series); - } - - // destroy all points with their elements - i = data.length; - while (i--) { - point = data[i]; - if (point && point.destroy) { - point.destroy(); - } - } - series.points = null; - - // Clear the animation timeout if we are destroying the series during initial animation - clearTimeout(series.animationTimeout); - - // destroy all SVGElements associated to the series - each(['area', 'graph', 'dataLabelsGroup', 'group', 'markerGroup', 'tracker', - 'graphNeg', 'areaNeg', 'posClip', 'negClip'], function (prop) { - if (series[prop]) { - - // issue 134 workaround - destroy = issue134 && prop === 'group' ? - 'hide' : - 'destroy'; - - series[prop][destroy](); - } - }); - - // remove from hoverSeries - if (chart.hoverSeries === series) { - chart.hoverSeries = null; - } - erase(chart.series, series); - - // clear all members - for (prop in series) { - delete series[prop]; - } - }, - - /** - * Return the graph path of a segment - */ - getSegmentPath: function (segment) { - var series = this, - segmentPath = [], - step = series.options.step; - - // build the segment line - each(segment, function (point, i) { - - var plotX = point.plotX, - plotY = point.plotY, - lastPoint; - - if (series.getPointSpline) { // generate the spline as defined in the SplineSeries object - segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); - - } else { - - // moveTo or lineTo - segmentPath.push(i ? L : M); - - // step line? - if (step && i) { - lastPoint = segment[i - 1]; - if (step === 'right') { - segmentPath.push( - lastPoint.plotX, - plotY - ); - - } else if (step === 'center') { - segmentPath.push( - (lastPoint.plotX + plotX) / 2, - lastPoint.plotY, - (lastPoint.plotX + plotX) / 2, - plotY - ); - - } else { - segmentPath.push( - plotX, - lastPoint.plotY - ); - } - } - - // normal line to next point - segmentPath.push( - point.plotX, - point.plotY - ); - } - }); - - return segmentPath; - }, - - /** - * Get the graph path - */ - getGraphPath: function () { - var series = this, - graphPath = [], - segmentPath, - singlePoints = []; // used in drawTracker - - // Divide into segments and build graph and area paths - each(series.segments, function (segment) { - - segmentPath = series.getSegmentPath(segment); - - // add the segment to the graph, or a single point for tracking - if (segment.length > 1) { - graphPath = graphPath.concat(segmentPath); - } else { - singlePoints.push(segment[0]); - } - }); - - // Record it for use in drawGraph and drawTracker, and return graphPath - series.singlePoints = singlePoints; - series.graphPath = graphPath; - - return graphPath; - - }, - - /** - * Draw the actual graph - */ - drawGraph: function () { - var series = this, - options = this.options, - props = [['graph', options.lineColor || this.color]], - lineWidth = options.lineWidth, - dashStyle = options.dashStyle, - roundCap = options.linecap !== 'square', - graphPath = this.getGraphPath(), - negativeColor = options.negativeColor; - - if (negativeColor) { - props.push(['graphNeg', negativeColor]); - } - - // draw the graph - each(props, function (prop, i) { - var graphKey = prop[0], - graph = series[graphKey], - attribs; - - if (graph) { - stop(graph); // cancel running animations, #459 - graph.animate({ d: graphPath }); - - } else if (lineWidth && graphPath.length) { // #1487 - attribs = { - stroke: prop[1], - 'stroke-width': lineWidth, - fill: NONE, - zIndex: 1 // #1069 - }; - if (dashStyle) { - attribs.dashstyle = dashStyle; - } else if (roundCap) { - attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; - } - - series[graphKey] = series.chart.renderer.path(graphPath) - .attr(attribs) - .add(series.group) - .shadow(!i && options.shadow); - } - }); - }, - - /** - * Clip the graphs into the positive and negative coloured graphs - */ - clipNeg: function () { - var options = this.options, - chart = this.chart, - renderer = chart.renderer, - negativeColor = options.negativeColor || options.negativeFillColor, - translatedThreshold, - posAttr, - negAttr, - graph = this.graph, - area = this.area, - posClip = this.posClip, - negClip = this.negClip, - chartWidth = chart.chartWidth, - chartHeight = chart.chartHeight, - chartSizeMax = mathMax(chartWidth, chartHeight), - yAxis = this.yAxis, - above, - below; - - if (negativeColor && (graph || area)) { - translatedThreshold = mathRound(yAxis.toPixels(options.threshold || 0, true)); - if (translatedThreshold < 0) { - chartSizeMax -= translatedThreshold; // #2534 - } - above = { - x: 0, - y: 0, - width: chartSizeMax, - height: translatedThreshold - }; - below = { - x: 0, - y: translatedThreshold, - width: chartSizeMax, - height: chartSizeMax - }; - - if (chart.inverted) { - - above.height = below.y = chart.plotWidth - translatedThreshold; - if (renderer.isVML) { - above = { - x: chart.plotWidth - translatedThreshold - chart.plotLeft, - y: 0, - width: chartWidth, - height: chartHeight - }; - below = { - x: translatedThreshold + chart.plotLeft - chartWidth, - y: 0, - width: chart.plotLeft + translatedThreshold, - height: chartWidth - }; - } - } - - if (yAxis.reversed) { - posAttr = below; - negAttr = above; - } else { - posAttr = above; - negAttr = below; - } - - if (posClip) { // update - posClip.animate(posAttr); - negClip.animate(negAttr); - } else { - - this.posClip = posClip = renderer.clipRect(posAttr); - this.negClip = negClip = renderer.clipRect(negAttr); - - if (graph && this.graphNeg) { - graph.clip(posClip); - this.graphNeg.clip(negClip); - } - - if (area) { - area.clip(posClip); - this.areaNeg.clip(negClip); - } - } - } - }, - - /** - * Initialize and perform group inversion on series.group and series.markerGroup - */ - invertGroups: function () { - var series = this, - chart = series.chart; - - // Pie, go away (#1736) - if (!series.xAxis) { - return; - } - - // A fixed size is needed for inversion to work - function setInvert() { - var size = { - width: series.yAxis.len, - height: series.xAxis.len - }; - - each(['group', 'markerGroup'], function (groupName) { - if (series[groupName]) { - series[groupName].attr(size).invert(); - } - }); - } - - addEvent(chart, 'resize', setInvert); // do it on resize - addEvent(series, 'destroy', function () { - removeEvent(chart, 'resize', setInvert); - }); - - // Do it now - setInvert(); // do it now - - // On subsequent render and redraw, just do setInvert without setting up events again - series.invertGroups = setInvert; - }, - - /** - * General abstraction for creating plot groups like series.group, series.dataLabelsGroup and - * series.markerGroup. On subsequent calls, the group will only be adjusted to the updated plot size. - */ - plotGroup: function (prop, name, visibility, zIndex, parent) { - var group = this[prop], - isNew = !group; - - // Generate it on first call - if (isNew) { - this[prop] = group = this.chart.renderer.g(name) - .attr({ - visibility: visibility, - zIndex: zIndex || 0.1 // IE8 needs this - }) - .add(parent); - } - // Place it on first and subsequent (redraw) calls - group[isNew ? 'attr' : 'animate'](this.getPlotBox()); - return group; - }, - - /** - * Get the translation and scale for the plot area of this series - */ - getPlotBox: function () { - var chart = this.chart, - xAxis = this.xAxis, - yAxis = this.yAxis; - - // Swap axes for inverted (#2339) - if (chart.inverted) { - xAxis = yAxis; - yAxis = this.xAxis; - } - return { - translateX: xAxis ? xAxis.left : chart.plotLeft, - translateY: yAxis ? yAxis.top : chart.plotTop, - scaleX: 1, // #1623 - scaleY: 1 - }; - }, - - /** - * Render the graph and markers - */ - render: function () { - var series = this, - chart = series.chart, - group, - options = series.options, - animation = options.animation, - // Animation doesn't work in IE8 quirks when the group div is hidden, - // and looks bad in other oldIE - animDuration = (animation && !!series.animate && chart.renderer.isSVG && pick(animation.duration, 500)) || 0, - visibility = series.visible ? VISIBLE : HIDDEN, - zIndex = options.zIndex, - hasRendered = series.hasRendered, - chartSeriesGroup = chart.seriesGroup; - - // the group - group = series.plotGroup( - 'group', - 'series', - visibility, - zIndex, - chartSeriesGroup - ); - - series.markerGroup = series.plotGroup( - 'markerGroup', - 'markers', - visibility, - zIndex, - chartSeriesGroup - ); - - // initiate the animation - if (animDuration) { - series.animate(true); - } - - // cache attributes for shapes - series.getAttribs(); - - // SVGRenderer needs to know this before drawing elements (#1089, #1795) - group.inverted = series.isCartesian ? chart.inverted : false; - - // draw the graph if any - if (series.drawGraph) { - series.drawGraph(); - series.clipNeg(); - } - - // draw the data labels (inn pies they go before the points) - if (series.drawDataLabels) { - series.drawDataLabels(); - } - - // draw the points - if (series.visible) { - series.drawPoints(); - } - - - // draw the mouse tracking area - if (series.drawTracker && series.options.enableMouseTracking !== false) { - series.drawTracker(); - } - - // Handle inverted series and tracker groups - if (chart.inverted) { - series.invertGroups(); - } - - // Initial clipping, must be defined after inverting groups for VML - if (options.clip !== false && !series.sharedClipKey && !hasRendered) { - group.clip(chart.clipRect); - } - - // Run the animation - if (animDuration) { - series.animate(); - } - - // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option - // which should be available to the user). - if (!hasRendered) { - if (animDuration) { - series.animationTimeout = setTimeout(function () { - series.afterAnimate(); - }, animDuration); - } else { - series.afterAnimate(); - } - } - - series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see - series.hasRendered = true; - }, - - /** - * Redraw the series after an update in the axes. - */ - redraw: function () { - var series = this, - chart = series.chart, - wasDirtyData = series.isDirtyData, // cache it here as it is set to false in render, but used after - group = series.group, - xAxis = series.xAxis, - yAxis = series.yAxis; - - // reposition on resize - if (group) { - if (chart.inverted) { - group.attr({ - width: chart.plotWidth, - height: chart.plotHeight - }); - } - - group.animate({ - translateX: pick(xAxis && xAxis.left, chart.plotLeft), - translateY: pick(yAxis && yAxis.top, chart.plotTop) - }); - } - - series.translate(); - if (series.setTooltipPoints) { - series.setTooltipPoints(true); - } - series.render(); - - if (wasDirtyData) { - fireEvent(series, 'updatedData'); - } - } -}; // end Series prototype - -/** - * The class for stack items - */ -function StackItem(axis, options, isNegative, x, stackOption) { - - var inverted = axis.chart.inverted; - - this.axis = axis; - - // Tells if the stack is negative - this.isNegative = isNegative; - - // Save the options to be able to style the label - this.options = options; - - // Save the x value to be able to position the label later - this.x = x; - - // Initialize total value - this.total = null; - - // This will keep each points' extremes stored by series.index and point index - this.points = {}; - - // Save the stack option on the series configuration object, and whether to treat it as percent - this.stack = stackOption; - - // The align options and text align varies on whether the stack is negative and - // if the chart is inverted or not. - // First test the user supplied value, then use the dynamic. - this.alignOptions = { - align: options.align || (inverted ? (isNegative ? 'left' : 'right') : 'center'), - verticalAlign: options.verticalAlign || (inverted ? 'middle' : (isNegative ? 'bottom' : 'top')), - y: pick(options.y, inverted ? 4 : (isNegative ? 14 : -6)), - x: pick(options.x, inverted ? (isNegative ? -6 : 6) : 0) - }; - - this.textAlign = options.textAlign || (inverted ? (isNegative ? 'right' : 'left') : 'center'); -} - -StackItem.prototype = { - destroy: function () { - destroyObjectProperties(this, this.axis); - }, - - /** - * Renders the stack total label and adds it to the stack label group. - */ - render: function (group) { - var options = this.options, - formatOption = options.format, - str = formatOption ? - format(formatOption, this) : - options.formatter.call(this); // format the text in the label - - // Change the text to reflect the new total and set visibility to hidden in case the serie is hidden - if (this.label) { - this.label.attr({text: str, visibility: HIDDEN}); - // Create new label - } else { - this.label = - this.axis.chart.renderer.text(str, null, null, options.useHTML) // dummy positions, actual position updated with setOffset method in columnseries - .css(options.style) // apply style - .attr({ - align: this.textAlign, // fix the text-anchor - rotation: options.rotation, // rotation - visibility: HIDDEN // hidden until setOffset is called - }) - .add(group); // add to the labels-group - } - }, - - /** - * Sets the offset that the stack has from the x value and repositions the label. - */ - setOffset: function (xOffset, xWidth) { - var stackItem = this, - axis = stackItem.axis, - chart = axis.chart, - inverted = chart.inverted, - neg = this.isNegative, // special treatment is needed for negative stacks - y = axis.translate(axis.usePercentage ? 100 : this.total, 0, 0, 0, 1), // stack value translated mapped to chart coordinates - yZero = axis.translate(0), // stack origin - h = mathAbs(y - yZero), // stack height - x = chart.xAxis[0].translate(this.x) + xOffset, // stack x position - plotHeight = chart.plotHeight, - stackBox = { // this is the box for the complete stack - x: inverted ? (neg ? y : y - h) : x, - y: inverted ? plotHeight - x - xWidth : (neg ? (plotHeight - y - h) : plotHeight - y), - width: inverted ? h : xWidth, - height: inverted ? xWidth : h - }, - label = this.label, - alignAttr; - - if (label) { - label.align(this.alignOptions, null, stackBox); // align the label to the box - - // Set visibility (#678) - alignAttr = label.alignAttr; - label[this.options.crop === false || chart.isInsidePlot(alignAttr.x, alignAttr.y) ? 'show' : 'hide'](true); - } - } -}; - - -// Stacking methods defined on the Axis prototype - -/** - * Build the stacks from top down - */ -Axis.prototype.buildStacks = function () { - var series = this.series, - reversedStacks = pick(this.options.reversedStacks, true), - i = series.length; - if (!this.isXAxis) { - this.usePercentage = false; - while (i--) { - series[reversedStacks ? i : series.length - i - 1].setStackedPoints(); - } - // Loop up again to compute percent stack - if (this.usePercentage) { - for (i = 0; i < series.length; i++) { - series[i].setPercentStacks(); - } - } - } -}; - -Axis.prototype.renderStackTotals = function () { - var axis = this, - chart = axis.chart, - renderer = chart.renderer, - stacks = axis.stacks, - stackKey, - oneStack, - stackCategory, - stackTotalGroup = axis.stackTotalGroup; - - // Create a separate group for the stack total labels - if (!stackTotalGroup) { - axis.stackTotalGroup = stackTotalGroup = - renderer.g('stack-labels') - .attr({ - visibility: VISIBLE, - zIndex: 6 - }) - .add(); - } - - // plotLeft/Top will change when y axis gets wider so we need to translate the - // stackTotalGroup at every render call. See bug #506 and #516 - stackTotalGroup.translate(chart.plotLeft, chart.plotTop); - - // Render each stack total - for (stackKey in stacks) { - oneStack = stacks[stackKey]; - for (stackCategory in oneStack) { - oneStack[stackCategory].render(stackTotalGroup); - } - } -}; - - -// Stacking methods defnied for Series prototype - -/** - * Adds series' points value to corresponding stack - */ -Series.prototype.setStackedPoints = function () { - if (!this.options.stacking || (this.visible !== true && this.chart.options.chart.ignoreHiddenSeries !== false)) { - return; - } - - var series = this, - xData = series.processedXData, - yData = series.processedYData, - stackedYData = [], - yDataLength = yData.length, - seriesOptions = series.options, - threshold = seriesOptions.threshold, - stackOption = seriesOptions.stack, - stacking = seriesOptions.stacking, - stackKey = series.stackKey, - negKey = '-' + stackKey, - negStacks = series.negStacks, - yAxis = series.yAxis, - stacks = yAxis.stacks, - oldStacks = yAxis.oldStacks, - isNegative, - stack, - other, - key, - pointKey, - i, - x, - y; - - // loop over the non-null y values and read them into a local array - for (i = 0; i < yDataLength; i++) { - x = xData[i]; - y = yData[i]; - pointKey = series.index + ',' + i; - - // Read stacked values into a stack based on the x value, - // the sign of y and the stack key. Stacking is also handled for null values (#739) - isNegative = negStacks && y < threshold; - key = isNegative ? negKey : stackKey; - - // Create empty object for this stack if it doesn't exist yet - if (!stacks[key]) { - stacks[key] = {}; - } - - // Initialize StackItem for this x - if (!stacks[key][x]) { - if (oldStacks[key] && oldStacks[key][x]) { - stacks[key][x] = oldStacks[key][x]; - stacks[key][x].total = null; - } else { - stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, isNegative, x, stackOption); - } - } - - // If the StackItem doesn't exist, create it first - stack = stacks[key][x]; - stack.points[pointKey] = [stack.cum || 0]; - - // Add value to the stack total - if (stacking === 'percent') { - - // Percent stacked column, totals are the same for the positive and negative stacks - other = isNegative ? stackKey : negKey; - if (negStacks && stacks[other] && stacks[other][x]) { - other = stacks[other][x]; - stack.total = other.total = mathMax(other.total, stack.total) + mathAbs(y) || 0; - - // Percent stacked areas - } else { - stack.total = correctFloat(stack.total + (mathAbs(y) || 0)); - } - } else { - stack.total = correctFloat(stack.total + (y || 0)); - } - - stack.cum = (stack.cum || 0) + (y || 0); - - stack.points[pointKey].push(stack.cum); - stackedYData[i] = stack.cum; - - } - - if (stacking === 'percent') { - yAxis.usePercentage = true; - } - - this.stackedYData = stackedYData; // To be used in getExtremes - - // Reset old stacks - yAxis.oldStacks = {}; -}; - -/** - * Iterate over all stacks and compute the absolute values to percent - */ -Series.prototype.setPercentStacks = function () { - var series = this, - stackKey = series.stackKey, - stacks = series.yAxis.stacks, - processedXData = series.processedXData; - - each([stackKey, '-' + stackKey], function (key) { - var i = processedXData.length, - x, - stack, - pointExtremes, - totalFactor; - - while (i--) { - x = processedXData[i]; - stack = stacks[key] && stacks[key][x]; - pointExtremes = stack && stack.points[series.index + ',' + i]; - if (pointExtremes) { - totalFactor = stack.total ? 100 / stack.total : 0; - pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor); // Y bottom value - pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor); // Y value - series.stackedYData[i] = pointExtremes[1]; - } - } - }); -}; - -// Extend the Chart prototype for dynamic methods -extend(Chart.prototype, { - - /** - * Add a series dynamically after time - * - * @param {Object} options The config options - * @param {Boolean} redraw Whether to redraw the chart after adding. Defaults to true. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - * @return {Object} series The newly created series object - */ - addSeries: function (options, redraw, animation) { - var series, - chart = this; - - if (options) { - redraw = pick(redraw, true); // defaults to true - - fireEvent(chart, 'addSeries', { options: options }, function () { - series = chart.initSeries(options); - - chart.isDirtyLegend = true; // the series array is out of sync with the display - chart.linkSeries(); - if (redraw) { - chart.redraw(animation); - } - }); - } - - return series; - }, - - /** - * Add an axis to the chart - * @param {Object} options The axis option - * @param {Boolean} isX Whether it is an X axis or a value axis - */ - addAxis: function (options, isX, redraw, animation) { - var key = isX ? 'xAxis' : 'yAxis', - chartOptions = this.options, - axis; - - /*jslint unused: false*/ - axis = new Axis(this, merge(options, { - index: this[key].length, - isX: isX - })); - /*jslint unused: true*/ - - // Push the new axis options to the chart options - chartOptions[key] = splat(chartOptions[key] || {}); - chartOptions[key].push(options); - - if (pick(redraw, true)) { - this.redraw(animation); - } - }, - - /** - * Dim the chart and show a loading text or symbol - * @param {String} str An optional text to show in the loading label instead of the default one - */ - showLoading: function (str) { - var chart = this, - options = chart.options, - loadingDiv = chart.loadingDiv; - - var loadingOptions = options.loading; - - // create the layer at the first call - if (!loadingDiv) { - chart.loadingDiv = loadingDiv = createElement(DIV, { - className: PREFIX + 'loading' - }, extend(loadingOptions.style, { - zIndex: 10, - display: NONE - }), chart.container); - - chart.loadingSpan = createElement( - 'span', - null, - loadingOptions.labelStyle, - loadingDiv - ); - - } - - // update text - chart.loadingSpan.innerHTML = str || options.lang.loading; - - // show it - if (!chart.loadingShown) { - css(loadingDiv, { - opacity: 0, - display: '', - left: chart.plotLeft + PX, - top: chart.plotTop + PX, - width: chart.plotWidth + PX, - height: chart.plotHeight + PX - }); - animate(loadingDiv, { - opacity: loadingOptions.style.opacity - }, { - duration: loadingOptions.showDuration || 0 - }); - chart.loadingShown = true; - } - }, - - /** - * Hide the loading layer - */ - hideLoading: function () { - var options = this.options, - loadingDiv = this.loadingDiv; - - if (loadingDiv) { - animate(loadingDiv, { - opacity: 0 - }, { - duration: options.loading.hideDuration || 100, - complete: function () { - css(loadingDiv, { display: NONE }); - } - }); - } - this.loadingShown = false; - } -}); - -// extend the Point prototype for dynamic methods -extend(Point.prototype, { - /** - * Update the point with new options (typically x/y data) and optionally redraw the series. - * - * @param {Object} options Point options as defined in the series.data array - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - * - */ - update: function (options, redraw, animation) { - var point = this, - series = point.series, - graphic = point.graphic, - i, - data = series.data, - chart = series.chart, - seriesOptions = series.options; - - redraw = pick(redraw, true); - - // fire the event with a default handler of doing the update - point.firePointEvent('update', { options: options }, function () { - - point.applyOptions(options); - - // update visuals - if (isObject(options)) { - series.getAttribs(); - if (graphic) { - if (options && options.marker && options.marker.symbol) { - point.graphic = graphic.destroy(); - } else { - graphic.attr(point.pointAttr[point.state || '']); - } - } - if (options && options.dataLabels && point.dataLabel) { // #2468 - point.dataLabel = point.dataLabel.destroy(); - } - } - - // record changes in the parallel arrays - i = inArray(point, data); - series.updateParallelArrays(point, i); - - seriesOptions.data[i] = point.options; - - // redraw - series.isDirty = series.isDirtyData = true; - if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320 - chart.isDirtyBox = true; - } - - if (seriesOptions.legendType === 'point') { // #1831, #1885 - chart.legend.destroyItem(point); - } - if (redraw) { - chart.redraw(animation); - } - }); - }, - - /** - * Remove a point and optionally redraw the series and if necessary the axes - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - remove: function (redraw, animation) { - var point = this, - series = point.series, - points = series.points, - chart = series.chart, - i, - data = series.data; - - setAnimation(animation, chart); - redraw = pick(redraw, true); - - // fire the event with a default handler of removing the point - point.firePointEvent('remove', null, function () { - - // splice all the parallel arrays - i = inArray(point, data); - if (data.length === points.length) { - points.splice(i, 1); - } - data.splice(i, 1); - series.options.data.splice(i, 1); - series.updateParallelArrays(point, 'splice', i, 1); - - point.destroy(); - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - chart.redraw(); - } - }); - } -}); - -// Extend the series prototype for dynamic methods -extend(Series.prototype, { - /** - * Add a point dynamically after chart load time - * @param {Object} options Point options as given in series.data - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean} shift If shift is true, a point is shifted off the start - * of the series as one is appended to the end. - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - addPoint: function (options, redraw, shift, animation) { - var series = this, - seriesOptions = series.options, - data = series.data, - graph = series.graph, - area = series.area, - chart = series.chart, - names = series.xAxis && series.xAxis.names, - currentShift = (graph && graph.shift) || 0, - dataOptions = seriesOptions.data, - point, - isInTheMiddle, - xData = series.xData, - x, - i; - - setAnimation(animation, chart); - - // Make graph animate sideways - if (shift) { - each([graph, area, series.graphNeg, series.areaNeg], function (shape) { - if (shape) { - shape.shift = currentShift + 1; - } - }); - } - if (area) { - area.isArea = true; // needed in animation, both with and without shift - } - - // Optional redraw, defaults to true - redraw = pick(redraw, true); - - // Get options and push the point to xData, yData and series.options. In series.generatePoints - // the Point instance will be created on demand and pushed to the series.data array. - point = { series: series }; - series.pointClass.prototype.applyOptions.apply(point, [options]); - x = point.x; - - // Get the insertion point - i = xData.length; - if (series.requireSorting && x < xData[i - 1]) { - isInTheMiddle = true; - while (i && xData[i - 1] > x) { - i--; - } - } - - series.updateParallelArrays(point, 'splice', i, 0, 0); // insert undefined item - series.updateParallelArrays(point, i); // update it - - if (names) { - names[x] = point.name; - } - dataOptions.splice(i, 0, options); - - if (isInTheMiddle) { - series.data.splice(i, 0, null); - series.processData(); - } - - // Generate points to be added to the legend (#1329) - if (seriesOptions.legendType === 'point') { - series.generatePoints(); - } - - // Shift the first point off the parallel arrays - // todo: consider series.removePoint(i) method - if (shift) { - if (data[0] && data[0].remove) { - data[0].remove(false); - } else { - data.shift(); - series.updateParallelArrays(point, 'shift'); - - dataOptions.shift(); - } - } - - // redraw - series.isDirty = true; - series.isDirtyData = true; - if (redraw) { - series.getAttribs(); // #1937 - chart.redraw(); - } - }, - - /** - * Remove a series and optionally redraw the chart - * - * @param {Boolean} redraw Whether to redraw the chart or wait for an explicit call - * @param {Boolean|Object} animation Whether to apply animation, and optionally animation - * configuration - */ - - remove: function (redraw, animation) { - var series = this, - chart = series.chart; - redraw = pick(redraw, true); - - if (!series.isRemoving) { /* prevent triggering native event in jQuery - (calling the remove function from the remove event) */ - series.isRemoving = true; - - // fire the event with a default handler of removing the point - fireEvent(series, 'remove', null, function () { - - - // destroy elements - series.destroy(); - - - // redraw - chart.isDirtyLegend = chart.isDirtyBox = true; - chart.linkSeries(); - - if (redraw) { - chart.redraw(animation); - } - }); - - } - series.isRemoving = false; - }, - - /** - * Update the series with a new set of options - */ - update: function (newOptions, redraw) { - var chart = this.chart, - // must use user options when changing type because this.options is merged - // in with type specific plotOptions - oldOptions = this.userOptions, - oldType = this.type, - proto = seriesTypes[oldType].prototype, - n; - - // Do the merge, with some forced options - newOptions = merge(oldOptions, { - animation: false, - index: this.index, - pointStart: this.xData[0] // when updating after addPoint - }, { data: this.options.data }, newOptions); - - // Destroy the series and reinsert methods from the type prototype - this.remove(false); - for (n in proto) { // Overwrite series-type specific methods (#2270) - if (proto.hasOwnProperty(n)) { - this[n] = UNDEFINED; - } - } - extend(this, seriesTypes[newOptions.type || oldType].prototype); - - - this.init(chart, newOptions); - if (pick(redraw, true)) { - chart.redraw(false); - } - } -}); - -// Extend the Axis.prototype for dynamic methods -extend(Axis.prototype, { - - /** - * Update the axis with a new options structure - */ - update: function (newOptions, redraw) { - var chart = this.chart; - - newOptions = chart.options[this.coll][this.options.index] = merge(this.userOptions, newOptions); - - this.destroy(true); - this._addedPlotLB = UNDEFINED; // #1611, #2887 - - this.init(chart, extend(newOptions, { events: UNDEFINED })); - - chart.isDirtyBox = true; - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Remove the axis from the chart - */ - remove: function (redraw) { - var chart = this.chart, - key = this.coll, // xAxis or yAxis - axisSeries = this.series, - i = axisSeries.length; - - // Remove associated series (#2687) - while (i--) { - if (axisSeries[i]) { - axisSeries[i].remove(false); - } - } - - // Remove the axis - erase(chart.axes, this); - erase(chart[key], this); - chart.options[key].splice(this.options.index, 1); - each(chart[key], function (axis, i) { // Re-index, #1706 - axis.options.index = i; - }); - this.destroy(); - chart.isDirtyBox = true; - - if (pick(redraw, true)) { - chart.redraw(); - } - }, - - /** - * Update the axis title by options - */ - setTitle: function (newTitleOptions, redraw) { - this.update({ title: newTitleOptions }, redraw); - }, - - /** - * Set new axis categories and optionally redraw - * @param {Array} categories - * @param {Boolean} redraw - */ - setCategories: function (categories, redraw) { - this.update({ categories: categories }, redraw); - } - -}); - - -/** - * LineSeries object - */ -var LineSeries = extendClass(Series); -seriesTypes.line = LineSeries; - -/** - * Set the default options for area - */ -defaultPlotOptions.area = merge(defaultSeriesOptions, { - threshold: 0 - // trackByArea: false, - // lineColor: null, // overrides color, but lets fillColor be unaltered - // fillOpacity: 0.75, - // fillColor: null -}); - -/** - * AreaSeries object - */ -var AreaSeries = extendClass(Series, { - type: 'area', - /** - * For stacks, don't split segments on null values. Instead, draw null values with - * no marker. Also insert dummy points for any X position that exists in other series - * in the stack. - */ - getSegments: function () { - var segments = [], - segment = [], - keys = [], - xAxis = this.xAxis, - yAxis = this.yAxis, - stack = yAxis.stacks[this.stackKey], - pointMap = {}, - plotX, - plotY, - points = this.points, - connectNulls = this.options.connectNulls, - val, - i, - x; - - if (this.options.stacking && !this.cropped) { // cropped causes artefacts in Stock, and perf issue - // Create a map where we can quickly look up the points by their X value. - for (i = 0; i < points.length; i++) { - pointMap[points[i].x] = points[i]; - } - - // Sort the role_keys (#1651) - for (x in stack) { - if (stack[x].total !== null) { // nulled after switching between grouping and not (#1651, #2336) - keys.push(+x); - } - } - keys.sort(function (a, b) { - return a - b; - }); - - each(keys, function (x) { - if (connectNulls && (!pointMap[x] || pointMap[x].y === null)) { // #1836 - return; - - // The point exists, push it to the segment - } else if (pointMap[x]) { - segment.push(pointMap[x]); - - // There is no point for this X value in this series, so we - // insert a dummy point in order for the areas to be drawn - // correctly. - } else { - plotX = xAxis.translate(x); - val = stack[x].percent ? (stack[x].total ? stack[x].cum * 100 / stack[x].total : 0) : stack[x].cum; // #1991 - plotY = yAxis.toPixels(val, true); - segment.push({ - y: null, - plotX: plotX, - clientX: plotX, - plotY: plotY, - yBottom: plotY, - onMouseOver: noop - }); - } - }); - - if (segment.length) { - segments.push(segment); - } - - } else { - Series.prototype.getSegments.call(this); - segments = this.segments; - } - - this.segments = segments; - }, - - /** - * Extend the base Series getSegmentPath method by adding the path for the area. - * This path is pushed to the series.areaPath property. - */ - getSegmentPath: function (segment) { - - var segmentPath = Series.prototype.getSegmentPath.call(this, segment), // call base method - areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path - i, - options = this.options, - segLength = segmentPath.length, - translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 - yBottom; - - if (segLength === 3) { // for animation from 1 to two points - areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); - } - if (options.stacking && !this.closedStacks) { - - // Follow stack back. Todo: implement areaspline. A general solution could be to - // reverse the entire graphPath of the previous series, though may be hard with - // splines and with series with different extremes - for (i = segment.length - 1; i >= 0; i--) { - - yBottom = pick(segment[i].yBottom, translatedThreshold); - - // step line? - if (i < segment.length - 1 && options.step) { - areaSegmentPath.push(segment[i + 1].plotX, yBottom); - } - - areaSegmentPath.push(segment[i].plotX, yBottom); - } - - } else { // follow zero line back - this.closeSegment(areaSegmentPath, segment, translatedThreshold); - } - this.areaPath = this.areaPath.concat(areaSegmentPath); - return segmentPath; - }, - - /** - * Extendable method to close the segment path of an area. This is overridden in polar - * charts. - */ - closeSegment: function (path, segment, translatedThreshold) { - path.push( - L, - segment[segment.length - 1].plotX, - translatedThreshold, - L, - segment[0].plotX, - translatedThreshold - ); - }, - - /** - * Draw the graph and the underlying area. This method calls the Series base - * function and adds the area. The areaPath is calculated in the getSegmentPath - * method called from Series.prototype.drawGraph. - */ - drawGraph: function () { - - // Define or reset areaPath - this.areaPath = []; - - // Call the base method - Series.prototype.drawGraph.apply(this); - - // Define local variables - var series = this, - areaPath = this.areaPath, - options = this.options, - negativeColor = options.negativeColor, - negativeFillColor = options.negativeFillColor, - props = [['area', this.color, options.fillColor]]; // area name, main color, fill color - - if (negativeColor || negativeFillColor) { - props.push(['areaNeg', negativeColor, negativeFillColor]); - } - - each(props, function (prop) { - var areaKey = prop[0], - area = series[areaKey]; - - // Create or update the area - if (area) { // update - area.animate({ d: areaPath }); - - } else { // create - series[areaKey] = series.chart.renderer.path(areaPath) - .attr({ - fill: pick( - prop[2], - Color(prop[1]).setOpacity(pick(options.fillOpacity, 0.75)).get() - ), - zIndex: 0 // #1069 - }).add(series.group); - } - }); - }, - - drawLegendSymbol: LegendSymbolMixin.drawRectangle -}); - -seriesTypes.area = AreaSeries; -/** - * Set the default options for spline - */ -defaultPlotOptions.spline = merge(defaultSeriesOptions); - -/** - * SplineSeries object - */ -var SplineSeries = extendClass(Series, { - type: 'spline', - - /** - * Get the spline segment from a given point's previous neighbour to the given point - */ - getPointSpline: function (segment, point, i) { - var smoothing = 1.5, // 1 means control points midway between points, 2 means 1/3 from the point, 3 is 1/4 etc - denom = smoothing + 1, - plotX = point.plotX, - plotY = point.plotY, - lastPoint = segment[i - 1], - nextPoint = segment[i + 1], - leftContX, - leftContY, - rightContX, - rightContY, - ret; - - // find control points - if (lastPoint && nextPoint) { - - var lastX = lastPoint.plotX, - lastY = lastPoint.plotY, - nextX = nextPoint.plotX, - nextY = nextPoint.plotY, - correction; - - leftContX = (smoothing * plotX + lastX) / denom; - leftContY = (smoothing * plotY + lastY) / denom; - rightContX = (smoothing * plotX + nextX) / denom; - rightContY = (smoothing * plotY + nextY) / denom; - - // have the two control points make a straight line through main point - correction = ((rightContY - leftContY) * (rightContX - plotX)) / - (rightContX - leftContX) + plotY - rightContY; - - leftContY += correction; - rightContY += correction; - - // to prevent false extremes, check that control points are between - // neighbouring points' y values - if (leftContY > lastY && leftContY > plotY) { - leftContY = mathMax(lastY, plotY); - rightContY = 2 * plotY - leftContY; // mirror of left control point - } else if (leftContY < lastY && leftContY < plotY) { - leftContY = mathMin(lastY, plotY); - rightContY = 2 * plotY - leftContY; - } - if (rightContY > nextY && rightContY > plotY) { - rightContY = mathMax(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } else if (rightContY < nextY && rightContY < plotY) { - rightContY = mathMin(nextY, plotY); - leftContY = 2 * plotY - rightContY; - } - - // record for drawing in next point - point.rightContX = rightContX; - point.rightContY = rightContY; - - } - - // Visualize control points for debugging - /* - if (leftContX) { - this.chart.renderer.circle(leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, 2) - .attr({ - stroke: 'red', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', leftContX + this.chart.plotLeft, leftContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'red', - 'stroke-width': 1 - }) - .add(); - this.chart.renderer.circle(rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, 2) - .attr({ - stroke: 'green', - 'stroke-width': 1, - fill: 'none' - }) - .add(); - this.chart.renderer.path(['M', rightContX + this.chart.plotLeft, rightContY + this.chart.plotTop, - 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop]) - .attr({ - stroke: 'green', - 'stroke-width': 1 - }) - .add(); - } - */ - - // moveTo or lineTo - if (!i) { - ret = [M, plotX, plotY]; - } else { // curve from last point to this - ret = [ - 'C', - lastPoint.rightContX || lastPoint.plotX, - lastPoint.rightContY || lastPoint.plotY, - leftContX || plotX, - leftContY || plotY, - plotX, - plotY - ]; - lastPoint.rightContX = lastPoint.rightContY = null; // reset for updating series later - } - return ret; - } -}); -seriesTypes.spline = SplineSeries; - -/** - * Set the default options for areaspline - */ -defaultPlotOptions.areaspline = merge(defaultPlotOptions.area); - -/** - * AreaSplineSeries object - */ -var areaProto = AreaSeries.prototype, - AreaSplineSeries = extendClass(SplineSeries, { - type: 'areaspline', - closedStacks: true, // instead of following the previous graph back, follow the threshold back - - // Mix in methods from the area series - getSegmentPath: areaProto.getSegmentPath, - closeSegment: areaProto.closeSegment, - drawGraph: areaProto.drawGraph, - drawLegendSymbol: LegendSymbolMixin.drawRectangle - }); - -seriesTypes.areaspline = AreaSplineSeries; - -/** - * Set the default options for column - */ -defaultPlotOptions.column = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - //borderWidth: 1, - borderRadius: 0, - //colorByPoint: undefined, - groupPadding: 0.2, - //grouping: true, - marker: null, // point options are specified in the base options - pointPadding: 0.1, - //pointWidth: null, - minPointLength: 0, - cropThreshold: 50, // when there are more points, they will not animate out of the chart on xAxis.setExtremes - pointRange: null, // null means auto, meaning 1 in a categorized axis and least distance between points if not categories - states: { - hover: { - brightness: 0.1, - shadow: false, - halo: false - }, - select: { - color: '#C0C0C0', - borderColor: '#000000', - shadow: false - } - }, - dataLabels: { - align: null, // auto - verticalAlign: null, // auto - y: null - }, - stickyTracking: false, - tooltip: { - distance: 6 - }, - threshold: 0 -}); - -/** - * ColumnSeries object - */ -var ColumnSeries = extendClass(Series, { - type: 'column', - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - fill: 'color', - r: 'borderRadius' - }, - cropShoulder: 0, - trackerGroups: ['group', 'dataLabelsGroup'], - negStacks: true, // use separate negative stacks, unlike area stacks where a negative - // point is substracted from previous (#1910) - - /** - * Initialize the series - */ - init: function () { - Series.prototype.init.apply(this, arguments); - - var series = this, - chart = series.chart; - - // if the series is added dynamically, force redraw of other - // series affected by a new column - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - }, - - /** - * Return the width and x offset of the columns adjusted for grouping, groupPadding, pointPadding, - * pointWidth etc. - */ - getColumnMetrics: function () { - - var series = this, - options = series.options, - xAxis = series.xAxis, - yAxis = series.yAxis, - reversedXAxis = xAxis.reversed, - stackKey, - stackGroups = {}, - columnIndex, - columnCount = 0; - - // Get the total number of column type series. - // This is called on every series. Consider moving this logic to a - // chart.orderStacks() function and call it on init, addSeries and removeSeries - if (options.grouping === false) { - columnCount = 1; - } else { - each(series.chart.series, function (otherSeries) { - var otherOptions = otherSeries.options, - otherYAxis = otherSeries.yAxis; - if (otherSeries.type === series.type && otherSeries.visible && - yAxis.len === otherYAxis.len && yAxis.pos === otherYAxis.pos) { // #642, #2086 - if (otherOptions.stacking) { - stackKey = otherSeries.stackKey; - if (stackGroups[stackKey] === UNDEFINED) { - stackGroups[stackKey] = columnCount++; - } - columnIndex = stackGroups[stackKey]; - } else if (otherOptions.grouping !== false) { // #1162 - columnIndex = columnCount++; - } - otherSeries.columnIndex = columnIndex; - } - }); - } - - var categoryWidth = mathMin( - mathAbs(xAxis.transA) * (xAxis.ordinalSlope || options.pointRange || xAxis.closestPointRange || xAxis.tickInterval || 1), // #2610 - xAxis.len // #1535 - ), - groupPadding = categoryWidth * options.groupPadding, - groupWidth = categoryWidth - 2 * groupPadding, - pointOffsetWidth = groupWidth / columnCount, - optionPointWidth = options.pointWidth, - pointPadding = defined(optionPointWidth) ? (pointOffsetWidth - optionPointWidth) / 2 : - pointOffsetWidth * options.pointPadding, - pointWidth = pick(optionPointWidth, pointOffsetWidth - 2 * pointPadding), // exact point width, used in polar charts - colIndex = (reversedXAxis ? - columnCount - (series.columnIndex || 0) : // #1251 - series.columnIndex) || 0, - pointXOffset = pointPadding + (groupPadding + colIndex * - pointOffsetWidth - (categoryWidth / 2)) * - (reversedXAxis ? -1 : 1); - - // Save it for reading in linked series (Error bars particularly) - return (series.columnMetrics = { - width: pointWidth, - offset: pointXOffset - }); - - }, - - /** - * Translate each point to the plot area coordinate system and find shape positions - */ - translate: function () { - var series = this, - chart = series.chart, - options = series.options, - borderWidth = series.borderWidth = pick( - options.borderWidth, - series.activePointCount > 0.5 * series.xAxis.len ? 0 : 1 - ), - yAxis = series.yAxis, - threshold = options.threshold, - translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold), - minPointLength = pick(options.minPointLength, 5), - metrics = series.getColumnMetrics(), - pointWidth = metrics.width, - seriesBarW = series.barW = mathCeil(mathMax(pointWidth, 1 + 2 * borderWidth)), // rounded and postprocessed for border width - pointXOffset = series.pointXOffset = metrics.offset, - xCrisp = -(borderWidth % 2 ? 0.5 : 0), - yCrisp = borderWidth % 2 ? 0.5 : 1; - - if (chart.renderer.isVML && chart.inverted) { - yCrisp += 1; - } - - Series.prototype.translate.apply(series); - - // record the new values - each(series.points, function (point) { - var yBottom = pick(point.yBottom, translatedThreshold), - plotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241) - barX = point.plotX + pointXOffset, - barW = seriesBarW, - barY = mathMin(plotY, yBottom), - right, - bottom, - fromTop, - fromLeft, - barH = mathMax(plotY, yBottom) - barY; - - // Handle options.minPointLength - if (mathAbs(barH) < minPointLength) { - if (minPointLength) { - barH = minPointLength; - barY = - mathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked - yBottom - minPointLength : // keep position - translatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485) - } - } - - // Cache for access in polar - point.barX = barX; - point.pointWidth = pointWidth; - - // Fix the tooltip on center of grouped columns (#1216) - point.tooltipPos = chart.inverted ? [yAxis.len - plotY, series.xAxis.len - barX - barW / 2] : [barX + barW / 2, plotY]; - - // Round off to obtain crisp edges - fromLeft = mathAbs(barX) < 0.5; - right = mathRound(barX + barW) + xCrisp; - barX = mathRound(barX) + xCrisp; - barW = right - barX; - - fromTop = mathAbs(barY) < 0.5; - bottom = mathRound(barY + barH) + yCrisp; - barY = mathRound(barY) + yCrisp; - barH = bottom - barY; - - // Top and left edges are exceptions - if (fromLeft) { - barX += 1; - barW -= 1; - } - if (fromTop) { - barY -= 1; - barH += 1; - } - - // Register shape type and arguments to be used in drawPoints - point.shapeType = 'rect'; - point.shapeArgs = { - x: barX, - y: barY, - width: barW, - height: barH - }; - }); - - }, - - getSymbol: noop, - - /** - * Use a solid rectangle like the area series types - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - - /** - * Columns have no graph - */ - drawGraph: noop, - - /** - * Draw the columns. For bars, the series.group is rotated, so the same coordinates - * apply for columns and bars. This method is inherited by scatter series. - * - */ - drawPoints: function () { - var series = this, - chart = this.chart, - options = series.options, - renderer = chart.renderer, - animationLimit = options.animationLimit || 250, - shapeArgs, - pointAttr, - borderAttr; - - // draw the columns - each(series.points, function (point) { - var plotY = point.plotY, - graphic = point.graphic; - - if (plotY !== UNDEFINED && !isNaN(plotY) && point.y !== null) { - shapeArgs = point.shapeArgs; - borderAttr = defined(series.borderWidth) ? { - 'stroke-width': series.borderWidth - } : {}; - pointAttr = point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] || series.pointAttr[NORMAL_STATE]; - if (graphic) { // update - stop(graphic); - graphic.attr(borderAttr)[chart.pointCount < animationLimit ? 'animate' : 'attr'](merge(shapeArgs)); - - } else { - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .attr(pointAttr) - .attr(borderAttr) - .add(series.group) - .shadow(options.shadow, null, options.stacking && !options.borderRadius); - } - - } else if (graphic) { - point.graphic = graphic.destroy(); // #1269 - } - }); - }, - - /** - * Animate the column heights one by one from zero - * @param {Boolean} init Whether to initialize the animation or run it - */ - animate: function (init) { - var series = this, - yAxis = this.yAxis, - options = series.options, - inverted = this.chart.inverted, - attr = {}, - translatedThreshold; - - if (hasSVG) { // VML is too slow anyway - if (init) { - attr.scaleY = 0.001; - translatedThreshold = mathMin(yAxis.pos + yAxis.len, mathMax(yAxis.pos, yAxis.toPixels(options.threshold))); - if (inverted) { - attr.translateX = translatedThreshold - yAxis.len; - } else { - attr.translateY = translatedThreshold; - } - series.group.attr(attr); - - } else { // run the animation - - attr.scaleY = 1; - attr[inverted ? 'translateX' : 'translateY'] = yAxis.pos; - series.group.animate(attr, series.options.animation); - - // delete this function to allow it only once - series.animate = null; - } - } - }, - - /** - * Remove this series from the chart - */ - remove: function () { - var series = this, - chart = series.chart; - - // column and bar series affects other series of the same type - // as they are either stacked or grouped - if (chart.hasRendered) { - each(chart.series, function (otherSeries) { - if (otherSeries.type === series.type) { - otherSeries.isDirty = true; - } - }); - } - - Series.prototype.remove.apply(series, arguments); - } -}); -seriesTypes.column = ColumnSeries; -/** - * Set the default options for bar - */ -defaultPlotOptions.bar = merge(defaultPlotOptions.column); -/** - * The Bar series class - */ -var BarSeries = extendClass(ColumnSeries, { - type: 'bar', - inverted: true -}); -seriesTypes.bar = BarSeries; - -/** - * Set the default options for scatter - */ -defaultPlotOptions.scatter = merge(defaultSeriesOptions, { - lineWidth: 0, - tooltip: { - headerFormat: '\u25CF {series.name}
', // docs - pointFormat: 'x: {point.x}
y: {point.y}
' - }, - stickyTracking: false -}); - -/** - * The scatter series class - */ -var ScatterSeries = extendClass(Series, { - type: 'scatter', - sorted: false, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['markerGroup'], - takeOrdinalPosition: false, // #2342 - singularTooltips: true, - drawGraph: function () { - if (this.options.lineWidth) { - Series.prototype.drawGraph.call(this); - } - } -}); - -seriesTypes.scatter = ScatterSeries; - -/** - * Set the default options for pie - */ -defaultPlotOptions.pie = merge(defaultSeriesOptions, { - borderColor: '#FFFFFF', - borderWidth: 1, - center: [null, null], - clip: false, - colorByPoint: true, // always true for pies - dataLabels: { - // align: null, - // connectorWidth: 1, - // connectorColor: point.color, - // connectorPadding: 5, - distance: 30, - enabled: true, - formatter: function () { - return this.point.name; - } - // softConnector: true, - //y: 0 - }, - ignoreHiddenPoint: true, - //innerSize: 0, - legendType: 'point', - marker: null, // point options are specified in the base options - size: null, - showInLegend: false, - slicedOffset: 10, - states: { - hover: { - brightness: 0.1, - shadow: false - } - }, - stickyTracking: false, - tooltip: { - followPointer: true - } -}); - -/** - * Extended point object for pies - */ -var PiePoint = extendClass(Point, { - /** - * Initiate the pie slice - */ - init: function () { - - Point.prototype.init.apply(this, arguments); - - var point = this, - toggleSlice; - - // Disallow negative values (#1530) - if (point.y < 0) { - point.y = null; - } - - //visible: options.visible !== false, - extend(point, { - visible: point.visible !== false, - name: pick(point.name, 'Slice') - }); - - // add event listener for select - toggleSlice = function (e) { - point.slice(e.type === 'select'); - }; - addEvent(point, 'select', toggleSlice); - addEvent(point, 'unselect', toggleSlice); - - return point; - }, - - /** - * Toggle the visibility of the pie slice - * @param {Boolean} vis Whether to show the slice or not. If undefined, the - * visibility is toggled - */ - setVisible: function (vis) { - var point = this, - series = point.series, - chart = series.chart; - - // if called without an argument, toggle visibility - point.visible = point.options.visible = vis = vis === UNDEFINED ? !point.visible : vis; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - // Show and hide associated elements - each(['graphic', 'dataLabel', 'connector', 'shadowGroup'], function (key) { - if (point[key]) { - point[key][vis ? 'show' : 'hide'](true); - } - }); - - if (point.legendItem) { - chart.legend.colorizeItem(point, vis); - } - - // Handle ignore hidden slices - if (!series.isDirty && series.options.ignoreHiddenPoint) { - series.isDirty = true; - chart.redraw(); - } - }, - - /** - * Set or toggle whether the slice is cut out from the pie - * @param {Boolean} sliced When undefined, the slice state is toggled - * @param {Boolean} redraw Whether to redraw the chart. True by default. - */ - slice: function (sliced, redraw, animation) { - var point = this, - series = point.series, - chart = series.chart, - translation; - - setAnimation(animation, chart); - - // redraw is true by default - redraw = pick(redraw, true); - - // if called without an argument, toggle - point.sliced = point.options.sliced = sliced = defined(sliced) ? sliced : !point.sliced; - series.options.data[inArray(point, series.data)] = point.options; // update userOptions.data - - translation = sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - point.graphic.animate(translation); - - if (point.shadowGroup) { - point.shadowGroup.animate(translation); - } - - }, - - haloPath: function (size) { - var shapeArgs = this.shapeArgs, - chart = this.series.chart; - - return this.series.chart.renderer.symbols.arc(chart.plotLeft + shapeArgs.x, chart.plotTop + shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, { - innerR: this.shapeArgs.r, - start: shapeArgs.start, - end: shapeArgs.end - }); - } -}); - -/** - * The Pie series class - */ -var PieSeries = { - type: 'pie', - isCartesian: false, - pointClass: PiePoint, - requireSorting: false, - noSharedTooltip: true, - trackerGroups: ['group', 'dataLabelsGroup'], - axisTypes: [], - pointAttrToOptions: { // mapping between SVG attributes and the corresponding options - stroke: 'borderColor', - 'stroke-width': 'borderWidth', - fill: 'color' - }, - singularTooltips: true, - - /** - * Pies have one color each point - */ - getColor: noop, - - /** - * Animate the pies in - */ - animate: function (init) { - var series = this, - points = series.points, - startAngleRad = series.startAngleRad; - - if (!init) { - each(points, function (point) { - var graphic = point.graphic, - args = point.shapeArgs; - - if (graphic) { - // start values - graphic.attr({ - r: series.center[3] / 2, // animate from inner radius (#779) - start: startAngleRad, - end: startAngleRad - }); - - // animate - graphic.animate({ - r: args.r, - start: args.start, - end: args.end - }, series.options.animation); - } - }); - - // delete this function to allow it only once - series.animate = null; - } - }, - - /** - * Extend the basic setData method by running processData and generatePoints immediately, - * in order to access the points from the legend. - */ - setData: function (data, redraw, animation, updatePoints) { - Series.prototype.setData.call(this, data, false, animation, updatePoints); - this.processData(); - this.generatePoints(); - if (pick(redraw, true)) { - this.chart.redraw(animation); - } - }, - - /** - * Extend the generatePoints method by adding total and percentage properties to each point - */ - generatePoints: function () { - var i, - total = 0, - points, - len, - point, - ignoreHiddenPoint = this.options.ignoreHiddenPoint; - - Series.prototype.generatePoints.call(this); - - // Populate local vars - points = this.points; - len = points.length; - - // Get the total sum - for (i = 0; i < len; i++) { - point = points[i]; - total += (ignoreHiddenPoint && !point.visible) ? 0 : point.y; - } - this.total = total; - - // Set each point's properties - for (i = 0; i < len; i++) { - point = points[i]; - point.percentage = total > 0 ? (point.y / total) * 100 : 0; - point.total = total; - } - - }, - - /** - * Do translation for pie slices - */ - translate: function (positions) { - this.generatePoints(); - - var series = this, - cumulative = 0, - precision = 1000, // issue #172 - options = series.options, - slicedOffset = options.slicedOffset, - connectorOffset = slicedOffset + options.borderWidth, - start, - end, - angle, - startAngle = options.startAngle || 0, - startAngleRad = series.startAngleRad = mathPI / 180 * (startAngle - 90), - endAngleRad = series.endAngleRad = mathPI / 180 * ((pick(options.endAngle, startAngle + 360)) - 90), - circ = endAngleRad - startAngleRad, //2 * mathPI, - points = series.points, - radiusX, // the x component of the radius vector for a given point - radiusY, - labelDistance = options.dataLabels.distance, - ignoreHiddenPoint = options.ignoreHiddenPoint, - i, - len = points.length, - point; - - // Get positions - either an integer or a percentage string must be given. - // If positions are passed as a parameter, we're in a recursive loop for adjusting - // space for data labels. - if (!positions) { - series.center = positions = series.getCenter(); - } - - // utility for getting the x value from a given y, used for anticollision logic in data labels - series.getX = function (y, left) { - - angle = math.asin(mathMin((y - positions[1]) / (positions[2] / 2 + labelDistance), 1)); - - return positions[0] + - (left ? -1 : 1) * - (mathCos(angle) * (positions[2] / 2 + labelDistance)); - }; - - // Calculate the geometry for each point - for (i = 0; i < len; i++) { - - point = points[i]; - - // set start and end angle - start = startAngleRad + (cumulative * circ); - if (!ignoreHiddenPoint || point.visible) { - cumulative += point.percentage / 100; - } - end = startAngleRad + (cumulative * circ); - - // set the shape - point.shapeType = 'arc'; - point.shapeArgs = { - x: positions[0], - y: positions[1], - r: positions[2] / 2, - innerR: positions[3] / 2, - start: mathRound(start * precision) / precision, - end: mathRound(end * precision) / precision - }; - - // The angle must stay within -90 and 270 (#2645) - angle = (end + start) / 2; - if (angle > 1.5 * mathPI) { - angle -= 2 * mathPI; - } else if (angle < -mathPI / 2) { - angle += 2 * mathPI; - } - - // Center for the sliced out slice - point.slicedTranslation = { - translateX: mathRound(mathCos(angle) * slicedOffset), - translateY: mathRound(mathSin(angle) * slicedOffset) - }; - - // set the anchor point for tooltips - radiusX = mathCos(angle) * positions[2] / 2; - radiusY = mathSin(angle) * positions[2] / 2; - point.tooltipPos = [ - positions[0] + radiusX * 0.7, - positions[1] + radiusY * 0.7 - ]; - - point.half = angle < -mathPI / 2 || angle > mathPI / 2 ? 1 : 0; - point.angle = angle; - - // set the anchor point for data labels - connectorOffset = mathMin(connectorOffset, labelDistance / 2); // #1678 - point.labelPos = [ - positions[0] + radiusX + mathCos(angle) * labelDistance, // first break of connector - positions[1] + radiusY + mathSin(angle) * labelDistance, // a/a - positions[0] + radiusX + mathCos(angle) * connectorOffset, // second break, right outside pie - positions[1] + radiusY + mathSin(angle) * connectorOffset, // a/a - positions[0] + radiusX, // landing point for connector - positions[1] + radiusY, // a/a - labelDistance < 0 ? // alignment - 'center' : - point.half ? 'right' : 'left', // alignment - angle // center angle - ]; - - } - }, - - drawGraph: null, - - /** - * Draw the data points - */ - drawPoints: function () { - var series = this, - chart = series.chart, - renderer = chart.renderer, - groupTranslation, - //center, - graphic, - //group, - shadow = series.options.shadow, - shadowGroup, - shapeArgs; - - if (shadow && !series.shadowGroup) { - series.shadowGroup = renderer.g('shadow') - .add(series.group); - } - - // draw the slices - each(series.points, function (point) { - graphic = point.graphic; - shapeArgs = point.shapeArgs; - shadowGroup = point.shadowGroup; - - // put the shadow behind all points - if (shadow && !shadowGroup) { - shadowGroup = point.shadowGroup = renderer.g('shadow') - .add(series.shadowGroup); - } - - // if the point is sliced, use special translation, else use plot area traslation - groupTranslation = point.sliced ? point.slicedTranslation : { - translateX: 0, - translateY: 0 - }; - - //group.translate(groupTranslation[0], groupTranslation[1]); - if (shadowGroup) { - shadowGroup.attr(groupTranslation); - } - - // draw the slice - if (graphic) { - graphic.animate(extend(shapeArgs, groupTranslation)); - } else { - point.graphic = graphic = renderer[point.shapeType](shapeArgs) - .setRadialReference(series.center) - .attr( - point.pointAttr[point.selected ? SELECT_STATE : NORMAL_STATE] - ) - .attr({ - 'stroke-linejoin': 'round' - //zIndex: 1 // #2722 (reversed) - }) - .attr(groupTranslation) - .add(series.group) - .shadow(shadow, shadowGroup); - } - - // detect point specific visibility (#2430) - if (point.visible !== undefined) { - point.setVisible(point.visible); - } - - }); - - }, - - /** - * Utility for sorting data labels - */ - sortByAngle: function (points, sign) { - points.sort(function (a, b) { - return a.angle !== undefined && (b.angle - a.angle) * sign; - }); - }, - - /** - * Use a simple symbol from LegendSymbolMixin - */ - drawLegendSymbol: LegendSymbolMixin.drawRectangle, - - /** - * Use the getCenter method from drawLegendSymbol - */ - getCenter: CenteredSeriesMixin.getCenter, - - /** - * Pies don't have point marker symbols - */ - getSymbol: noop - -}; -PieSeries = extendClass(Series, PieSeries); -seriesTypes.pie = PieSeries; - -/** - * Draw the data labels - */ -Series.prototype.drawDataLabels = function () { - - var series = this, - seriesOptions = series.options, - cursor = seriesOptions.cursor, - options = seriesOptions.dataLabels, - points = series.points, - pointOptions, - generalOptions, - str, - dataLabelsGroup; - - if (options.enabled || series._hasPointLabels) { - - // Process default alignment of data labels for columns - if (series.dlProcessOptions) { - series.dlProcessOptions(options); - } - - // Create a separate group for the data labels to avoid rotation - dataLabelsGroup = series.plotGroup( - 'dataLabelsGroup', - 'data-labels', - HIDDEN, - options.zIndex || 6 - ); - - if (!series.hasRendered && pick(options.defer, true)) { - dataLabelsGroup.attr({ opacity: 0 }); - addEvent(series, 'afterAnimate', function () { - series.dataLabelsGroup.show()[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, { duration: 200 }); - }); - } - - // Make the labels for each point - generalOptions = options; - each(points, function (point) { - - var enabled, - dataLabel = point.dataLabel, - labelConfig, - attr, - name, - rotation, - connector = point.connector, - isNew = true; - - // Determine if each data label is enabled - pointOptions = point.options && point.options.dataLabels; - enabled = pick(pointOptions && pointOptions.enabled, generalOptions.enabled); // #2282 - - - // If the point is outside the plot area, destroy it. #678, #820 - if (dataLabel && !enabled) { - point.dataLabel = dataLabel.destroy(); - - // Individual labels are disabled if the are explicitly disabled - // in the point options, or if they fall outside the plot area. - } else if (enabled) { - - // Create individual options structure that can be extended without - // affecting others - options = merge(generalOptions, pointOptions); - - rotation = options.rotation; - - // Get the string - labelConfig = point.getLabelConfig(); - str = options.format ? - format(options.format, labelConfig) : - options.formatter.call(labelConfig, options); - - // Determine the color - options.style.color = pick(options.color, options.style.color, series.color, 'black'); - - - // update existing label - if (dataLabel) { - - if (defined(str)) { - dataLabel - .attr({ - text: str - }); - isNew = false; - - } else { // #1437 - the label is shown conditionally - point.dataLabel = dataLabel = dataLabel.destroy(); - if (connector) { - point.connector = connector.destroy(); - } - } - - // create new label - } else if (defined(str)) { - attr = { - //align: align, - fill: options.backgroundColor, - stroke: options.borderColor, - 'stroke-width': options.borderWidth, - r: options.borderRadius || 0, - rotation: rotation, - padding: options.padding, - zIndex: 1 - }; - // Remove unused attributes (#947) - for (name in attr) { - if (attr[name] === UNDEFINED) { - delete attr[name]; - } - } - - dataLabel = point.dataLabel = series.chart.renderer[rotation ? 'text' : 'label']( // labels don't support rotation - str, - 0, - -999, - null, - null, - null, - options.useHTML - ) - .attr(attr) - .css(extend(options.style, cursor && { cursor: cursor })) - .add(dataLabelsGroup) - .shadow(options.shadow); - - } - - if (dataLabel) { - // Now the data label is created and placed at 0,0, so we need to align it - series.alignDataLabel(point, dataLabel, options, null, isNew); - } - } - }); - } -}; - -/** - * Align each individual data label - */ -Series.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - plotX = pick(point.plotX, -999), - plotY = pick(point.plotY, -999), - bBox = dataLabel.getBBox(), - // Math.round for rounding errors (#2683), alignTo to allow column labels (#2700) - visible = this.visible && (point.series.forceDL || chart.isInsidePlot(plotX, mathRound(plotY), inverted) || - (alignTo && chart.isInsidePlot(plotX, inverted ? alignTo.x + 1 : alignTo.y + alignTo.height - 1, inverted))), - alignAttr; // the final position; - - if (visible) { - - // The alignment box is a singular point - alignTo = extend({ - x: inverted ? chart.plotWidth - plotY : plotX, - y: mathRound(inverted ? chart.plotHeight - plotX : plotY), - width: 0, - height: 0 - }, alignTo); - - // Add the text size for alignment calculation - extend(options, { - width: bBox.width, - height: bBox.height - }); - - // Allow a hook for changing alignment in the last moment, then do the alignment - if (options.rotation) { // Fancy box alignment isn't supported for rotated text - alignAttr = { - align: options.align, - x: alignTo.x + options.x + alignTo.width / 2, - y: alignTo.y + options.y + alignTo.height / 2 - }; - dataLabel[isNew ? 'attr' : 'animate'](alignAttr); - } else { - dataLabel.align(options, null, alignTo); - alignAttr = dataLabel.alignAttr; - - // Handle justify or crop - if (pick(options.overflow, 'justify') === 'justify') { - this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew); - - } else if (pick(options.crop, true)) { - // Now check that the data label is within the plot area - visible = chart.isInsidePlot(alignAttr.x, alignAttr.y) && chart.isInsidePlot(alignAttr.x + bBox.width, alignAttr.y + bBox.height); - - } - } - } - - // Show or hide based on the final aligned position - if (!visible) { - dataLabel.attr({ y: -999 }); - dataLabel.placed = false; // don't animate back in - } - -}; - -/** - * If data labels fall partly outside the plot area, align them back in, in a way that - * doesn't hide the point. - */ -Series.prototype.justifyDataLabel = function (dataLabel, options, alignAttr, bBox, alignTo, isNew) { - var chart = this.chart, - align = options.align, - verticalAlign = options.verticalAlign, - off, - justified; - - // Off left - off = alignAttr.x; - if (off < 0) { - if (align === 'right') { - options.align = 'left'; - } else { - options.x = -off; - } - justified = true; - } - - // Off right - off = alignAttr.x + bBox.width; - if (off > chart.plotWidth) { - if (align === 'left') { - options.align = 'right'; - } else { - options.x = chart.plotWidth - off; - } - justified = true; - } - - // Off top - off = alignAttr.y; - if (off < 0) { - if (verticalAlign === 'bottom') { - options.verticalAlign = 'top'; - } else { - options.y = -off; - } - justified = true; - } - - // Off bottom - off = alignAttr.y + bBox.height; - if (off > chart.plotHeight) { - if (verticalAlign === 'top') { - options.verticalAlign = 'bottom'; - } else { - options.y = chart.plotHeight - off; - } - justified = true; - } - - if (justified) { - dataLabel.placed = !isNew; - dataLabel.align(options, null, alignTo); - } -}; - -/** - * Override the base drawDataLabels method by pie specific functionality - */ -if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawDataLabels = function () { - var series = this, - data = series.data, - point, - chart = series.chart, - options = series.options.dataLabels, - connectorPadding = pick(options.connectorPadding, 10), - connectorWidth = pick(options.connectorWidth, 1), - plotWidth = chart.plotWidth, - plotHeight = chart.plotHeight, - connector, - connectorPath, - softConnector = pick(options.softConnector, true), - distanceOption = options.distance, - seriesCenter = series.center, - radius = seriesCenter[2] / 2, - centerY = seriesCenter[1], - outside = distanceOption > 0, - dataLabel, - dataLabelWidth, - labelPos, - labelHeight, - halves = [// divide the points into right and left halves for anti collision - [], // right - [] // left - ], - x, - y, - visibility, - rankArr, - i, - j, - overflow = [0, 0, 0, 0], // top, right, bottom, left - sort = function (a, b) { - return b.y - a.y; - }; - - // get out if not enabled - if (!series.visible || (!options.enabled && !series._hasPointLabels)) { - return; - } - - // run parent method - Series.prototype.drawDataLabels.apply(series); - - // arrange points for detection collision - each(data, function (point) { - if (point.dataLabel && point.visible) { // #407, #2510 - halves[point.half].push(point); - } - }); - - // assume equal label heights - i = 0; - while (!labelHeight && data[i]) { // #1569 - labelHeight = data[i] && data[i].dataLabel && (data[i].dataLabel.getBBox().height || 21); // 21 is for #968 - i++; - } - - /* Loop over the points in each half, starting from the top and bottom - * of the pie to detect overlapping labels. - */ - i = 2; - while (i--) { - - var slots = [], - slotsLength, - usedSlots = [], - points = halves[i], - pos, - length = points.length, - slotIndex; - - // Sort by angle - series.sortByAngle(points, i - 0.5); - - // Only do anti-collision when we are outside the pie and have connectors (#856) - if (distanceOption > 0) { - - // build the slots - for (pos = centerY - radius - distanceOption; pos <= centerY + radius + distanceOption; pos += labelHeight) { - slots.push(pos); - - // visualize the slot - /* - var slotX = series.getX(pos, i) + chart.plotLeft - (i ? 100 : 0), - slotY = pos + chart.plotTop; - if (!isNaN(slotX)) { - chart.renderer.rect(slotX, slotY - 7, 100, labelHeight, 1) - .attr({ - 'stroke-width': 1, - stroke: 'silver' - }) - .add(); - chart.renderer.text('Slot '+ (slots.length - 1), slotX, slotY + 4) - .attr({ - fill: 'silver' - }).add(); - } - */ - } - slotsLength = slots.length; - - // if there are more values than available slots, remove lowest values - if (length > slotsLength) { - // create an array for sorting and ranking the points within each quarter - rankArr = [].concat(points); - rankArr.sort(sort); - j = length; - while (j--) { - rankArr[j].rank = j; - } - j = length; - while (j--) { - if (points[j].rank >= slotsLength) { - points.splice(j, 1); - } - } - length = points.length; - } - - // The label goes to the nearest open slot, but not closer to the edge than - // the label's index. - for (j = 0; j < length; j++) { - - point = points[j]; - labelPos = point.labelPos; - - var closest = 9999, - distance, - slotI; - - // find the closest slot index - for (slotI = 0; slotI < slotsLength; slotI++) { - distance = mathAbs(slots[slotI] - labelPos[1]); - if (distance < closest) { - closest = distance; - slotIndex = slotI; - } - } - - // if that slot index is closer to the edges of the slots, move it - // to the closest appropriate slot - if (slotIndex < j && slots[j] !== null) { // cluster at the top - slotIndex = j; - } else if (slotsLength < length - j + slotIndex && slots[j] !== null) { // cluster at the bottom - slotIndex = slotsLength - length + j; - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } else { - // Slot is taken, find next free slot below. In the next run, the next slice will find the - // slot above these, because it is the closest one - while (slots[slotIndex] === null) { // make sure it is not taken - slotIndex++; - } - } - - usedSlots.push({ i: slotIndex, y: slots[slotIndex] }); - slots[slotIndex] = null; // mark as taken - } - // sort them in order to fill in from the top - usedSlots.sort(sort); - } - - // now the used slots are sorted, fill them up sequentially - for (j = 0; j < length; j++) { - - var slot, naturalY; - - point = points[j]; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - visibility = point.visible === false ? HIDDEN : VISIBLE; - naturalY = labelPos[1]; - - if (distanceOption > 0) { - slot = usedSlots.pop(); - slotIndex = slot.i; - - // if the slot next to currrent slot is free, the y value is allowed - // to fall back to the natural position - y = slot.y; - if ((naturalY > y && slots[slotIndex + 1] !== null) || - (naturalY < y && slots[slotIndex - 1] !== null)) { - y = naturalY; - } - - } else { - y = naturalY; - } - - // get the x - use the natural x position for first and last slot, to prevent the top - // and botton slice connectors from touching each other on either side - x = options.justify ? - seriesCenter[0] + (i ? -1 : 1) * (radius + distanceOption) : - series.getX(slotIndex === 0 || slotIndex === slots.length - 1 ? naturalY : y, i); - - - // Record the placement and visibility - dataLabel._attr = { - visibility: visibility, - align: labelPos[6] - }; - dataLabel._pos = { - x: x + options.x + - ({ left: connectorPadding, right: -connectorPadding }[labelPos[6]] || 0), - y: y + options.y - 10 // 10 is for the baseline (label vs text) - }; - dataLabel.connX = x; - dataLabel.connY = y; - - - // Detect overflowing data labels - if (this.options.size === null) { - dataLabelWidth = dataLabel.width; - // Overflow left - if (x - dataLabelWidth < connectorPadding) { - overflow[3] = mathMax(mathRound(dataLabelWidth - x + connectorPadding), overflow[3]); - - // Overflow right - } else if (x + dataLabelWidth > plotWidth - connectorPadding) { - overflow[1] = mathMax(mathRound(x + dataLabelWidth - plotWidth + connectorPadding), overflow[1]); - } - - // Overflow top - if (y - labelHeight / 2 < 0) { - overflow[0] = mathMax(mathRound(-y + labelHeight / 2), overflow[0]); - - // Overflow left - } else if (y + labelHeight / 2 > plotHeight) { - overflow[2] = mathMax(mathRound(y + labelHeight / 2 - plotHeight), overflow[2]); - } - } - } // for each point - } // for each half - - // Do not apply the final placement and draw the connectors until we have verified - // that labels are not spilling over. - if (arrayMax(overflow) === 0 || this.verifyDataLabelOverflow(overflow)) { - - // Place the labels in the final position - this.placeDataLabels(); - - // Draw the connectors - if (outside && connectorWidth) { - each(this.points, function (point) { - connector = point.connector; - labelPos = point.labelPos; - dataLabel = point.dataLabel; - - if (dataLabel && dataLabel._pos) { - visibility = dataLabel._attr.visibility; - x = dataLabel.connX; - y = dataLabel.connY; - connectorPath = softConnector ? [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - 'C', - x, y, // first break, next to the label - 2 * labelPos[2] - labelPos[4], 2 * labelPos[3] - labelPos[5], - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ] : [ - M, - x + (labelPos[6] === 'left' ? 5 : -5), y, // end of the string at the label - L, - labelPos[2], labelPos[3], // second break - L, - labelPos[4], labelPos[5] // base - ]; - - if (connector) { - connector.animate({ d: connectorPath }); - connector.attr('visibility', visibility); - - } else { - point.connector = connector = series.chart.renderer.path(connectorPath).attr({ - 'stroke-width': connectorWidth, - stroke: options.connectorColor || point.color || '#606060', - visibility: visibility - //zIndex: 0 // #2722 (reversed) - }) - .add(series.dataLabelsGroup); - } - } else if (connector) { - point.connector = connector.destroy(); - } - }); - } - } - }; - /** - * Perform the final placement of the data labels after we have verified that they - * fall within the plot area. - */ - seriesTypes.pie.prototype.placeDataLabels = function () { - each(this.points, function (point) { - var dataLabel = point.dataLabel, - _pos; - - if (dataLabel) { - _pos = dataLabel._pos; - if (_pos) { - dataLabel.attr(dataLabel._attr); - dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos); - dataLabel.moved = true; - } else if (dataLabel) { - dataLabel.attr({ y: -999 }); - } - } - }); - }; - - seriesTypes.pie.prototype.alignDataLabel = noop; - - /** - * Verify whether the data labels are allowed to draw, or we should run more translation and data - * label positioning to keep them inside the plot area. Returns true when data labels are ready - * to draw. - */ - seriesTypes.pie.prototype.verifyDataLabelOverflow = function (overflow) { - - var center = this.center, - options = this.options, - centerOption = options.center, - minSize = options.minSize || 80, - newSize = minSize, - ret; - - // Handle horizontal size and center - if (centerOption[0] !== null) { // Fixed center - newSize = mathMax(center[2] - mathMax(overflow[1], overflow[3]), minSize); - - } else { // Auto center - newSize = mathMax( - center[2] - overflow[1] - overflow[3], // horizontal overflow - minSize - ); - center[0] += (overflow[3] - overflow[1]) / 2; // horizontal center - } - - // Handle vertical size and center - if (centerOption[1] !== null) { // Fixed center - newSize = mathMax(mathMin(newSize, center[2] - mathMax(overflow[0], overflow[2])), minSize); - - } else { // Auto center - newSize = mathMax( - mathMin( - newSize, - center[2] - overflow[0] - overflow[2] // vertical overflow - ), - minSize - ); - center[1] += (overflow[0] - overflow[2]) / 2; // vertical center - } - - // If the size must be decreased, we need to run translate and drawDataLabels again - if (newSize < center[2]) { - center[2] = newSize; - this.translate(center); - each(this.points, function (point) { - if (point.dataLabel) { - point.dataLabel._pos = null; // reset - } - }); - - if (this.drawDataLabels) { - this.drawDataLabels(); - } - // Else, return true to indicate that the pie and its labels is within the plot area - } else { - ret = true; - } - return ret; - }; -} - -if (seriesTypes.column) { - - /** - * Override the basic data label alignment by adjusting for the position of the column - */ - seriesTypes.column.prototype.alignDataLabel = function (point, dataLabel, options, alignTo, isNew) { - var chart = this.chart, - inverted = chart.inverted, - dlBox = point.dlBox || point.shapeArgs, // data label box for alignment - below = point.below || (point.plotY > pick(this.translatedThreshold, chart.plotSizeY)), - inside = pick(options.inside, !!this.options.stacking); // draw it inside the box? - - // Align to the column itself, or the top of it - if (dlBox) { // Area range uses this method but not alignTo - alignTo = merge(dlBox); - - if (inverted) { - alignTo = { - x: chart.plotWidth - alignTo.y - alignTo.height, - y: chart.plotHeight - alignTo.x - alignTo.width, - width: alignTo.height, - height: alignTo.width - }; - } - - // Compute the alignment box - if (!inside) { - if (inverted) { - alignTo.x += below ? 0 : alignTo.width; - alignTo.width = 0; - } else { - alignTo.y += below ? alignTo.height : 0; - alignTo.height = 0; - } - } - } - - - // When alignment is undefined (typically columns and bars), display the individual - // point below or above the point depending on the threshold - options.align = pick( - options.align, - !inverted || inside ? 'center' : below ? 'right' : 'left' - ); - options.verticalAlign = pick( - options.verticalAlign, - inverted || inside ? 'middle' : below ? 'top' : 'bottom' - ); - - // Call the parent method - Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew); - }; -} - - - -/** - * TrackerMixin for points and graphs - */ - -var TrackerMixin = Highcharts.TrackerMixin = { - - drawTrackerPoint: function () { - var series = this, - chart = series.chart, - pointer = chart.pointer, - cursor = series.options.cursor, - css = cursor && { cursor: cursor }, - onMouseOver = function (e) { - var target = e.target, - point; - - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - - while (target && !point) { - point = target.point; - target = target.parentNode; - } - - if (point !== UNDEFINED && point !== chart.hoverPoint) { // undefined on graph in scatterchart - point.onMouseOver(e); - } - }; - - // Add reference to the point - each(series.points, function (point) { - if (point.graphic) { - point.graphic.element.point = point; - } - if (point.dataLabel) { - point.dataLabel.element.point = point; - } - }); - - // Add the event listeners, we need to do this only once - if (!series._hasTracking) { - each(series.trackerGroups, function (key) { - if (series[key]) { // we don't always have dataLabelsGroup - series[key] - .addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) - .css(css); - if (hasTouch) { - series[key].on('touchstart', onMouseOver); - } - } - }); - series._hasTracking = true; - } - }, - - /** - * Draw the tracker object that sits above all data labels and markers to - * track mouse events on the graph or points. For the line type charts - * the tracker uses the same graphPath, but with a greater stroke width - * for better control. - */ - drawTrackerGraph: function () { - var series = this, - options = series.options, - trackByArea = options.trackByArea, - trackerPath = [].concat(trackByArea ? series.areaPath : series.graphPath), - trackerPathLength = trackerPath.length, - chart = series.chart, - pointer = chart.pointer, - renderer = chart.renderer, - snap = chart.options.tooltip.snap, - tracker = series.tracker, - cursor = options.cursor, - css = cursor && { cursor: cursor }, - singlePoints = series.singlePoints, - singlePoint, - i, - onMouseOver = function () { - if (chart.hoverSeries !== series) { - series.onMouseOver(); - } - }, - /* - * Empirical lowest possible opacities for TRACKER_FILL for an element to stay invisible but clickable - * IE6: 0.002 - * IE7: 0.002 - * IE8: 0.002 - * IE9: 0.00000000001 (unlimited) - * IE10: 0.0001 (exporting only) - * FF: 0.00000000001 (unlimited) - * Chrome: 0.000001 - * Safari: 0.000001 - * Opera: 0.00000000001 (unlimited) - */ - TRACKER_FILL = 'rgba(192,192,192,' + (hasSVG ? 0.0001 : 0.002) + ')'; - - // Extend end points. A better way would be to use round linecaps, - // but those are not clickable in VML. - if (trackerPathLength && !trackByArea) { - i = trackerPathLength + 1; - while (i--) { - if (trackerPath[i] === M) { // extend left side - trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); - } - if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side - trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); - } - } - } - - // handle single points - for (i = 0; i < singlePoints.length; i++) { - singlePoint = singlePoints[i]; - trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, - L, singlePoint.plotX + snap, singlePoint.plotY); - } - - // draw the tracker - if (tracker) { - tracker.attr({ d: trackerPath }); - } else { // create - - series.tracker = renderer.path(trackerPath) - .attr({ - 'stroke-linejoin': 'round', // #1225 - visibility: series.visible ? VISIBLE : HIDDEN, - stroke: TRACKER_FILL, - fill: trackByArea ? TRACKER_FILL : NONE, - 'stroke-width' : options.lineWidth + (trackByArea ? 0 : 2 * snap), - zIndex: 2 - }) - .add(series.group); - - // The tracker is added to the series group, which is clipped, but is covered - // by the marker group. So the marker group also needs to capture events. - each([series.tracker, series.markerGroup], function (tracker) { - tracker.addClass(PREFIX + 'tracker') - .on('mouseover', onMouseOver) - .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) - .css(css); - - if (hasTouch) { - tracker.on('touchstart', onMouseOver); - } - }); - } - } -}; -/* End TrackerMixin */ - - -/** - * Add tracking event listener to the series group, so the point graphics - * themselves act as trackers - */ - -if (seriesTypes.column) { - ColumnSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; -} - -if (seriesTypes.pie) { - seriesTypes.pie.prototype.drawTracker = TrackerMixin.drawTrackerPoint; -} - -if (seriesTypes.scatter) { - ScatterSeries.prototype.drawTracker = TrackerMixin.drawTrackerPoint; -} - -/* - * Extend Legend for item events - */ -extend(Legend.prototype, { - - setItemEvents: function (item, legendItem, useHTML, itemStyle, itemHiddenStyle) { - var legend = this; - // Set the events on the item group, or in case of useHTML, the item itself (#1249) - (useHTML ? legendItem : item.legendGroup).on('mouseover', function () { - item.setState(HOVER_STATE); - legendItem.css(legend.options.itemHoverStyle); - }) - .on('mouseout', function () { - legendItem.css(item.visible ? itemStyle : itemHiddenStyle); - item.setState(); - }) - .on('click', function (event) { - var strLegendItemClick = 'legendItemClick', - fnLegendItemClick = function () { - item.setVisible(); - }; - - // Pass over the click/touch event. #4. - event = { - browserEvent: event - }; - - // click the name or symbol - if (item.firePointEvent) { // point - item.firePointEvent(strLegendItemClick, event, fnLegendItemClick); - } else { - fireEvent(item, strLegendItemClick, event, fnLegendItemClick); - } - }); - }, - - createCheckboxForItem: function (item) { - var legend = this; - - item.checkbox = createElement('input', { - type: 'checkbox', - checked: item.selected, - defaultChecked: item.selected // required by IE7 - }, legend.options.itemCheckboxStyle, legend.chart.container); - - addEvent(item.checkbox, 'click', function (event) { - var target = event.target; - fireEvent(item, 'checkboxClick', { - checked: target.checked - }, - function () { - item.select(); - } - ); - }); - } -}); - -/* - * Add pointer cursor to legend itemstyle in defaultOptions - */ -defaultOptions.legend.itemStyle.cursor = 'pointer'; - - -/* - * Extend the Chart object with interaction - */ - -extend(Chart.prototype, { - /** - * Display the zoom button - */ - showResetZoom: function () { - var chart = this, - lang = defaultOptions.lang, - btnOptions = chart.options.chart.resetZoomButton, - theme = btnOptions.theme, - states = theme.states, - alignTo = btnOptions.relativeTo === 'chart' ? null : 'plotBox'; - - this.resetZoomButton = chart.renderer.button(lang.resetZoom, null, null, function () { chart.zoomOut(); }, theme, states && states.hover) - .attr({ - align: btnOptions.position.align, - title: lang.resetZoomTitle - }) - .add() - .align(btnOptions.position, false, alignTo); - - }, - - /** - * Zoom out to 1:1 - */ - zoomOut: function () { - var chart = this; - fireEvent(chart, 'selection', { resetSelection: true }, function () { - chart.zoom(); - }); - }, - - /** - * Zoom into a given portion of the chart given by axis coordinates - * @param {Object} event - */ - zoom: function (event) { - var chart = this, - hasZoomed, - pointer = chart.pointer, - displayButton = false, - resetZoomButton; - - // If zoom is called with no arguments, reset the axes - if (!event || event.resetSelection) { - each(chart.axes, function (axis) { - hasZoomed = axis.zoom(); - }); - } else { // else, zoom in on all axes - each(event.xAxis.concat(event.yAxis), function (axisData) { - var axis = axisData.axis, - isXAxis = axis.isXAxis; - - // don't zoom more than minRange - if (pointer[isXAxis ? 'zoomX' : 'zoomY'] || pointer[isXAxis ? 'pinchX' : 'pinchY']) { - hasZoomed = axis.zoom(axisData.min, axisData.max); - if (axis.displayBtn) { - displayButton = true; - } - } - }); - } - - // Show or hide the Reset zoom button - resetZoomButton = chart.resetZoomButton; - if (displayButton && !resetZoomButton) { - chart.showResetZoom(); - } else if (!displayButton && isObject(resetZoomButton)) { - chart.resetZoomButton = resetZoomButton.destroy(); - } - - - // Redraw - if (hasZoomed) { - chart.redraw( - pick(chart.options.chart.animation, event && event.animation, chart.pointCount < 100) // animation - ); - } - }, - - /** - * Pan the chart by dragging the mouse across the pane. This function is called - * on mouse move, and the distance to pan is computed from chartX compared to - * the first chartX position in the dragging operation. - */ - pan: function (e, panning) { - - var chart = this, - hoverPoints = chart.hoverPoints, - doRedraw; - - // remove active points for shared tooltip - if (hoverPoints) { - each(hoverPoints, function (point) { - point.setState(); - }); - } - - each(panning === 'xy' ? [1, 0] : [1], function (isX) { // xy is used in maps - var mousePos = e[isX ? 'chartX' : 'chartY'], - axis = chart[isX ? 'xAxis' : 'yAxis'][0], - startPos = chart[isX ? 'mouseDownX' : 'mouseDownY'], - halfPointRange = (axis.pointRange || 0) / 2, - extremes = axis.getExtremes(), - newMin = axis.toValue(startPos - mousePos, true) + halfPointRange, - newMax = axis.toValue(startPos + chart[isX ? 'plotWidth' : 'plotHeight'] - mousePos, true) - halfPointRange; - - if (axis.series.length && newMin > mathMin(extremes.dataMin, extremes.min) && newMax < mathMax(extremes.dataMax, extremes.max)) { - axis.setExtremes(newMin, newMax, false, false, { trigger: 'pan' }); - doRedraw = true; - } - - chart[isX ? 'mouseDownX' : 'mouseDownY'] = mousePos; // set new reference for next run - }); - - if (doRedraw) { - chart.redraw(false); - } - css(chart.container, { cursor: 'move' }); - } -}); - -/* - * Extend the Point object with interaction - */ -extend(Point.prototype, { - /** - * Toggle the selection status of a point - * @param {Boolean} selected Whether to select or unselect the point. - * @param {Boolean} accumulate Whether to add to the previous selection. By default, - * this happens if the control key (Cmd on Mac) was pressed during clicking. - */ - select: function (selected, accumulate) { - var point = this, - series = point.series, - chart = series.chart; - - selected = pick(selected, !point.selected); - - // fire the event with the defalut handler - point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () { - point.selected = point.options.selected = selected; - series.options.data[inArray(point, series.data)] = point.options; - - point.setState(selected && SELECT_STATE); - - // unselect all other points unless Ctrl or Cmd + click - if (!accumulate) { - each(chart.getSelectedPoints(), function (loopPoint) { - if (loopPoint.selected && loopPoint !== point) { - loopPoint.selected = loopPoint.options.selected = false; - series.options.data[inArray(loopPoint, series.data)] = loopPoint.options; - loopPoint.setState(NORMAL_STATE); - loopPoint.firePointEvent('unselect'); - } - }); - } - }); - }, - - /** - * Runs on mouse over the point - */ - onMouseOver: function (e) { - var point = this, - series = point.series, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - // set normal state to previous series - if (hoverPoint && hoverPoint !== point) { - hoverPoint.onMouseOut(); - } - - // trigger the event - point.firePointEvent('mouseOver'); - - // update the tooltip - if (tooltip && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.refresh(point, e); - } - - // hover this - point.setState(HOVER_STATE); - chart.hoverPoint = point; - }, - - /** - * Runs on mouse out from the point - */ - onMouseOut: function () { - var chart = this.series.chart, - hoverPoints = chart.hoverPoints; - - if (!hoverPoints || inArray(this, hoverPoints) === -1) { // #887 - this.firePointEvent('mouseOut'); - - this.setState(); - chart.hoverPoint = null; - } - }, - - /** - * Import events from the series' and point's options. Only do it on - * demand, to save processing time on hovering. - */ - importEvents: function () { - if (!this.hasImportedEvents) { - var point = this, - options = merge(point.series.options.point, point.options), - events = options.events, - eventType; - - point.events = events; - - for (eventType in events) { - addEvent(point, eventType, events[eventType]); - } - this.hasImportedEvents = true; - - } - }, - - /** - * Set the point's state - * @param {String} state - */ - setState: function (state, move) { - var point = this, - plotX = point.plotX, - plotY = point.plotY, - series = point.series, - stateOptions = series.options.states, - markerOptions = defaultPlotOptions[series.type].marker && series.options.marker, - normalDisabled = markerOptions && !markerOptions.enabled, - markerStateOptions = markerOptions && markerOptions.states[state], - stateDisabled = markerStateOptions && markerStateOptions.enabled === false, - stateMarkerGraphic = series.stateMarkerGraphic, - pointMarker = point.marker || {}, - chart = series.chart, - radius, - halo = series.halo, - haloOptions, - newSymbol, - pointAttr; - - state = state || NORMAL_STATE; // empty string - pointAttr = point.pointAttr[state] || series.pointAttr[state]; - - if ( - // already has this state - (state === point.state && !move) || - // selected points don't respond to hover - (point.selected && state !== SELECT_STATE) || - // series' state options is disabled - (stateOptions[state] && stateOptions[state].enabled === false) || - // general point marker's state options is disabled - (state && (stateDisabled || (normalDisabled && markerStateOptions.enabled === false))) || - // individual point marker's state options is disabled - (state && pointMarker.states && pointMarker.states[state] && pointMarker.states[state].enabled === false) // #1610 - - ) { - return; - } - - // apply hover styles to the existing point - if (point.graphic) { - radius = markerOptions && point.graphic.symbolName && pointAttr.r; - point.graphic.attr(merge( - pointAttr, - radius ? { // new symbol attributes (#507, #612) - x: plotX - radius, - y: plotY - radius, - width: 2 * radius, - height: 2 * radius - } : {} - )); - - // Zooming in from a range with no markers to a range with markers - if (stateMarkerGraphic) { - stateMarkerGraphic.hide(); - } - } else { - // if a graphic is not applied to each point in the normal state, create a shared - // graphic for the hover state - if (state && markerStateOptions) { - radius = markerStateOptions.radius; - newSymbol = pointMarker.symbol || series.symbol; - - // If the point has another symbol than the previous one, throw away the - // state marker graphic and force a new one (#1459) - if (stateMarkerGraphic && stateMarkerGraphic.currentSymbol !== newSymbol) { - stateMarkerGraphic = stateMarkerGraphic.destroy(); - } - - // Add a new state marker graphic - if (!stateMarkerGraphic) { - if (newSymbol) { - series.stateMarkerGraphic = stateMarkerGraphic = chart.renderer.symbol( - newSymbol, - plotX - radius, - plotY - radius, - 2 * radius, - 2 * radius - ) - .attr(pointAttr) - .add(series.markerGroup); - stateMarkerGraphic.currentSymbol = newSymbol; - } - - // Move the existing graphic - } else { - stateMarkerGraphic[move ? 'animate' : 'attr']({ // #1054 - x: plotX - radius, - y: plotY - radius - }); - } - } - - if (stateMarkerGraphic) { - stateMarkerGraphic[state && chart.isInsidePlot(plotX, plotY, chart.inverted) ? 'show' : 'hide'](); // #2450 - } - } - - // Show me your halo - haloOptions = stateOptions[state] && stateOptions[state].halo; - if (haloOptions && haloOptions.size) { - if (!halo) { - series.halo = halo = chart.renderer.path() - .add(series.seriesGroup); - } - halo.attr(extend({ - fill: Color(point.color || series.color).setOpacity(haloOptions.opacity).get() - }, haloOptions.attributes))[move ? 'animate' : 'attr']({ - d: point.haloPath(haloOptions.size) - }); - } else if (halo) { - halo.attr({ d: [] }); - } - - point.state = state; - }, - - haloPath: function (size) { - var series = this.series, - chart = series.chart, - plotBox = series.getPlotBox(), - inverted = chart.inverted; - - return chart.renderer.symbols.circle( - plotBox.translateX + (inverted ? series.yAxis.len - this.plotY : this.plotX) - size, - plotBox.translateY + (inverted ? series.xAxis.len - this.plotX : this.plotY) - size, - size * 2, - size * 2 - ); - } -}); - -/* - * Extend the Series object with interaction - */ - -extend(Series.prototype, { - /** - * Series mouse over handler - */ - onMouseOver: function () { - var series = this, - chart = series.chart, - hoverSeries = chart.hoverSeries; - - // set normal state to previous series - if (hoverSeries && hoverSeries !== series) { - hoverSeries.onMouseOut(); - } - - // trigger the event, but to save processing time, - // only if defined - if (series.options.events.mouseOver) { - fireEvent(series, 'mouseOver'); - } - - // hover this - series.setState(HOVER_STATE); - chart.hoverSeries = series; - }, - - /** - * Series mouse out handler - */ - onMouseOut: function () { - // trigger the event only if listeners exist - var series = this, - options = series.options, - chart = series.chart, - tooltip = chart.tooltip, - hoverPoint = chart.hoverPoint; - - // trigger mouse out on the point, which must be in this series - if (hoverPoint) { - hoverPoint.onMouseOut(); - } - - // fire the mouse out event - if (series && options.events.mouseOut) { - fireEvent(series, 'mouseOut'); - } - - - // hide the tooltip - if (tooltip && !options.stickyTracking && (!tooltip.shared || series.noSharedTooltip)) { - tooltip.hide(); - } - - // set normal state - series.setState(); - chart.hoverSeries = null; - }, - - /** - * Set the state of the graph - */ - setState: function (state) { - var series = this, - options = series.options, - graph = series.graph, - graphNeg = series.graphNeg, - stateOptions = options.states, - lineWidth = options.lineWidth, - attribs; - - state = state || NORMAL_STATE; - - if (series.state !== state) { - series.state = state; - - if (stateOptions[state] && stateOptions[state].enabled === false) { - return; - } - - if (state) { - lineWidth = stateOptions[state].lineWidth || lineWidth + 1; - } - - if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML - attribs = { - 'stroke-width': lineWidth - }; - // use attr because animate will cause any other animation on the graph to stop - graph.attr(attribs); - if (graphNeg) { - graphNeg.attr(attribs); - } - } - } - }, - - /** - * Set the visibility of the graph - * - * @param vis {Boolean} True to show the series, false to hide. If UNDEFINED, - * the visibility is toggled. - */ - setVisible: function (vis, redraw) { - var series = this, - chart = series.chart, - legendItem = series.legendItem, - showOrHide, - ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries, - oldVisibility = series.visible; - - // if called without an argument, toggle visibility - series.visible = vis = series.userOptions.visible = vis === UNDEFINED ? !oldVisibility : vis; - showOrHide = vis ? 'show' : 'hide'; - - // show or hide elements - each(['group', 'dataLabelsGroup', 'markerGroup', 'tracker'], function (key) { - if (series[key]) { - series[key][showOrHide](); - } - }); - - - // hide tooltip (#1361) - if (chart.hoverSeries === series) { - series.onMouseOut(); - } - - - if (legendItem) { - chart.legend.colorizeItem(series, vis); - } - - - // rescale or adapt to resized chart - series.isDirty = true; - // in a stack, all other series are affected - if (series.options.stacking) { - each(chart.series, function (otherSeries) { - if (otherSeries.options.stacking && otherSeries.visible) { - otherSeries.isDirty = true; - } - }); - } - - // show or hide linked series - each(series.linkedSeries, function (otherSeries) { - otherSeries.setVisible(vis, false); - }); - - if (ignoreHiddenSeries) { - chart.isDirtyBox = true; - } - if (redraw !== false) { - chart.redraw(); - } - - fireEvent(series, showOrHide); - }, - - /** - * Memorize tooltip texts and positions - */ - setTooltipPoints: function (renew) { - var series = this, - points = [], - pointsLength, - low, - high, - xAxis = series.xAxis, - xExtremes = xAxis && xAxis.getExtremes(), - axisLength = xAxis ? (xAxis.tooltipLen || xAxis.len) : series.chart.plotSizeX, // tooltipLen and tooltipPosName used in polar - point, - pointX, - nextPoint, - i, - tooltipPoints = []; // a lookup array for each pixel in the x dimension - - // don't waste resources if tracker is disabled - if (series.options.enableMouseTracking === false || series.singularTooltips) { - return; - } - - // renew - if (renew) { - series.tooltipPoints = null; - } - - // concat segments to overcome null values - each(series.segments || series.points, function (segment) { - points = points.concat(segment); - }); - - // Reverse the points in case the X axis is reversed - if (xAxis && xAxis.reversed) { - points = points.reverse(); - } - - // Polar needs additional shaping - if (series.orderTooltipPoints) { - series.orderTooltipPoints(points); - } - - // Assign each pixel position to the nearest point - pointsLength = points.length; - for (i = 0; i < pointsLength; i++) { - point = points[i]; - pointX = point.x; - if (pointX >= xExtremes.min && pointX <= xExtremes.max) { // #1149 - nextPoint = points[i + 1]; - - // Set this range's low to the last range's high plus one - low = high === UNDEFINED ? 0 : high + 1; - // Now find the new high - high = points[i + 1] ? - mathMin(mathMax(0, mathFloor( // #2070 - (point.clientX + (nextPoint ? (nextPoint.wrappedClientX || nextPoint.clientX) : axisLength)) / 2 - )), axisLength) : - axisLength; - - while (low >= 0 && low <= high) { - tooltipPoints[low++] = point; - } - } - } - series.tooltipPoints = tooltipPoints; - }, - - /** - * Show the graph - */ - show: function () { - this.setVisible(true); - }, - - /** - * Hide the graph - */ - hide: function () { - this.setVisible(false); - }, - - - /** - * Set the selected state of the graph - * - * @param selected {Boolean} True to select the series, false to unselect. If - * UNDEFINED, the selection state is toggled. - */ - select: function (selected) { - var series = this; - // if called without an argument, toggle - series.selected = selected = (selected === UNDEFINED) ? !series.selected : selected; - - if (series.checkbox) { - series.checkbox.checked = selected; - } - - fireEvent(series, selected ? 'select' : 'unselect'); - }, - - drawTracker: TrackerMixin.drawTrackerGraph -}); -// global variables -extend(Highcharts, { - - // Constructors - Axis: Axis, - Chart: Chart, - Color: Color, - Point: Point, - Tick: Tick, - Renderer: Renderer, - Series: Series, - SVGElement: SVGElement, - SVGRenderer: SVGRenderer, - - // Various - arrayMin: arrayMin, - arrayMax: arrayMax, - charts: charts, - dateFormat: dateFormat, - format: format, - pathAnim: pathAnim, - getOptions: getOptions, - hasBidiBug: hasBidiBug, - isTouchDevice: isTouchDevice, - numberFormat: numberFormat, - seriesTypes: seriesTypes, - setOptions: setOptions, - addEvent: addEvent, - removeEvent: removeEvent, - createElement: createElement, - discardElement: discardElement, - css: css, - each: each, - extend: extend, - map: map, - merge: merge, - pick: pick, - splat: splat, - extendClass: extendClass, - pInt: pInt, - wrap: wrap, - svg: hasSVG, - canvas: useCanVG, - vml: !hasSVG && !useCanVG, - product: PRODUCT, - version: VERSION -}); - -}()); diff --git a/static/js/highcharts/modules/canvas-tools.js b/static/js/highcharts/modules/canvas-tools.js deleted file mode 100644 index d9229716d..000000000 --- a/static/js/highcharts/modules/canvas-tools.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - A class to parse color values - @author Stoyan Stefanov - @link http://www.phpied.com/rgb-color-parser-in-javascript/ - Use it if you like it - - canvg.js - Javascript SVG parser and renderer on Canvas - MIT Licensed - Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/ - - Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - - Highcharts JS v4.0.1 (2014-04-24) - CanVGRenderer Extension module - - (c) 2011-2012 Torstein Honsi, Erik Olsson - - License: www.highcharts.com/license -*/ -function RGBColor(m){this.ok=!1;m.charAt(0)=="#"&&(m=m.substr(1,6));var m=m.replace(/ /g,""),m=m.toLowerCase(),a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b", -darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff", -gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa", -lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080", -oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd", -slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},c;for(c in a)m==c&&(m=a[c]);var d=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(b){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/, -example:["#00ff00","336699"],process:function(b){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(b){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}}];for(c=0;c255?255:this.r;this.g=this.g<0||isNaN(this.g)?0: -this.g>255?255:this.g;this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b;this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};this.toHex=function(){var b=this.r.toString(16),a=this.g.toString(16),d=this.b.toString(16);b.length==1&&(b="0"+b);a.length==1&&(a="0"+a);d.length==1&&(d="0"+d);return"#"+b+a+d};this.getHelpXML=function(){for(var b=[],k=0;k "+o.toRGB()+" -> "+o.toHex());l.appendChild(n);l.appendChild(q);c.appendChild(l)}catch(p){}return c}} -if(!window.console)window.console={},window.console.log=function(){},window.console.dir=function(){};if(!Array.prototype.indexOf)Array.prototype.indexOf=function(m){for(var a=0;a]*>/,""),d=new ActiveXObject("Microsoft.XMLDOM");d.async="false";d.loadXML(a);return d}};a.Property=function(c,d){this.name=c;this.value=d;this.hasValue=function(){return this.value!=null&&this.value!==""};this.numValue=function(){if(!this.hasValue())return 0;var b=parseFloat(this.value);(this.value+"").match(/%$/)&& -(b/=100);return b};this.valueOrDefault=function(b){return this.hasValue()?this.value:b};this.numValueOrDefault=function(b){return this.hasValue()?this.numValue():b};var b=this;this.Color={addOpacity:function(d){var c=b.value;if(d!=null&&d!=""){var f=new RGBColor(b.value);f.ok&&(c="rgba("+f.r+", "+f.g+", "+f.b+", "+d+")")}return new a.Property(b.name,c)}};this.Definition={getDefinition:function(){var d=b.value.replace(/^(url\()?#([^\)]+)\)?$/,"$2");return a.Definitions[d]},isUrl:function(){return b.value.indexOf("url(")== -0},getFillStyle:function(b){var d=this.getDefinition();return d!=null&&d.createGradient?d.createGradient(a.ctx,b):d!=null&&d.createPattern?d.createPattern(a.ctx,b):null}};this.Length={DPI:function(){return 96},EM:function(b){var d=12,c=new a.Property("fontSize",a.Font.Parse(a.ctx.font).fontSize);c.hasValue()&&(d=c.Length.toPixels(b));return d},toPixels:function(d){if(!b.hasValue())return 0;var c=b.value+"";return c.match(/em$/)?b.numValue()*this.EM(d):c.match(/ex$/)?b.numValue()*this.EM(d)/2:c.match(/px$/)? -b.numValue():c.match(/pt$/)?b.numValue()*1.25:c.match(/pc$/)?b.numValue()*15:c.match(/cm$/)?b.numValue()*this.DPI(d)/2.54:c.match(/mm$/)?b.numValue()*this.DPI(d)/25.4:c.match(/in$/)?b.numValue()*this.DPI(d):c.match(/%$/)?b.numValue()*a.ViewPort.ComputeSize(d):b.numValue()}};this.Time={toMilliseconds:function(){if(!b.hasValue())return 0;var a=b.value+"";if(a.match(/s$/))return b.numValue()*1E3;a.match(/ms$/);return b.numValue()}};this.Angle={toRadians:function(){if(!b.hasValue())return 0;var a=b.value+ -"";return a.match(/deg$/)?b.numValue()*(Math.PI/180):a.match(/grad$/)?b.numValue()*(Math.PI/200):a.match(/rad$/)?b.numValue():b.numValue()*(Math.PI/180)}}};a.Font=new function(){this.Styles=["normal","italic","oblique","inherit"];this.Variants=["normal","small-caps","inherit"];this.Weights="normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit".split(",");this.CreateFont=function(d,b,c,e,f,g){g=g!=null?this.Parse(g):this.CreateFont("","","","","",a.ctx.font);return{fontFamily:f|| -g.fontFamily,fontSize:e||g.fontSize,fontStyle:d||g.fontStyle,fontWeight:c||g.fontWeight,fontVariant:b||g.fontVariant,toString:function(){return[this.fontStyle,this.fontVariant,this.fontWeight,this.fontSize,this.fontFamily].join(" ")}}};var c=this;this.Parse=function(d){for(var b={},d=a.trim(a.compressSpaces(d||"")).split(" "),k=!1,e=!1,f=!1,g=!1,j="",h=0;hthis.x2)this.x2=b}if(a!=null){if(isNaN(this.y1)||isNaN(this.y2))this.y2=this.y1=a;if(athis.y2)this.y2=a}};this.addX=function(b){this.addPoint(b,null)};this.addY=function(b){this.addPoint(null,b)};this.addBoundingBox=function(b){this.addPoint(b.x1,b.y1);this.addPoint(b.x2,b.y2)};this.addQuadraticCurve=function(b,a,d,c,k,l){d=b+2/3*(d-b);c=a+2/3*(c- -a);this.addBezierCurve(b,a,d,d+1/3*(k-b),c,c+1/3*(l-a),k,l)};this.addBezierCurve=function(b,a,d,c,k,l,o,n){var q=[b,a],p=[d,c],t=[k,l],m=[o,n];this.addPoint(q[0],q[1]);this.addPoint(m[0],m[1]);for(i=0;i<=1;i++)b=function(b){return Math.pow(1-b,3)*q[i]+3*Math.pow(1-b,2)*b*p[i]+3*(1-b)*Math.pow(b,2)*t[i]+Math.pow(b,3)*m[i]},a=6*q[i]-12*p[i]+6*t[i],d=-3*q[i]+9*p[i]-9*t[i]+3*m[i],c=3*p[i]-3*q[i],d==0?a!=0&&(a=-c/a,0=this.tokens.length-1};this.isCommandOrEnd=function(){return this.isEnd()? -!0:this.tokens[this.i+1].match(/^[A-Za-z]$/)!=null};this.isRelativeCommand=function(){return this.command==this.command.toLowerCase()};this.getToken=function(){this.i+=1;return this.tokens[this.i]};this.getScalar=function(){return parseFloat(this.getToken())};this.nextCommand=function(){this.previousCommand=this.command;this.command=this.getToken()};this.getPoint=function(){return this.makeAbsolute(new a.Point(this.getScalar(),this.getScalar()))};this.getAsControlPoint=function(){var b=this.getPoint(); -return this.control=b};this.getAsCurrentPoint=function(){var b=this.getPoint();return this.current=b};this.getReflectedControlPoint=function(){return this.previousCommand.toLowerCase()!="c"&&this.previousCommand.toLowerCase()!="s"?this.current:new a.Point(2*this.current.x-this.control.x,2*this.current.y-this.control.y)};this.makeAbsolute=function(b){if(this.isRelativeCommand())b.x=this.current.x+b.x,b.y=this.current.y+b.y;return b};this.addMarker=function(b,a,d){d!=null&&this.angles.length>0&&this.angles[this.angles.length- -1]==null&&(this.angles[this.angles.length-1]=this.points[this.points.length-1].angleTo(d));this.addMarkerAngle(b,a==null?null:a.angleTo(b))};this.addMarkerAngle=function(b,a){this.points.push(b);this.angles.push(a)};this.getMarkerPoints=function(){return this.points};this.getMarkerAngles=function(){for(var b=0;b1&&(h*=Math.sqrt(q),l*=Math.sqrt(q));o=(o==j?-1:1)*Math.sqrt((Math.pow(h,2)*Math.pow(l,2)-Math.pow(h,2)*Math.pow(n.y,2)-Math.pow(l,2)*Math.pow(n.x,2))/(Math.pow(h,2)*Math.pow(n.y,2)+Math.pow(l,2)*Math.pow(n.x,2)));isNaN(o)&&(o=0);var p=new a.Point(o*h*n.y/l,o*-l*n.x/h),g=new a.Point((g.x+e.x)/2+Math.cos(f)* -p.x-Math.sin(f)*p.y,(g.y+e.y)/2+Math.sin(f)*p.x+Math.cos(f)*p.y),m=function(b,a){return(b[0]*a[0]+b[1]*a[1])/(Math.sqrt(Math.pow(b[0],2)+Math.pow(b[1],2))*Math.sqrt(Math.pow(a[0],2)+Math.pow(a[1],2)))},s=function(b,a){return(b[0]*a[1]=1&&(n=0);j==0&&n>0&&(n-=2*Math.PI);j==1&&n<0&&(n+=2*Math.PI);q=new a.Point(g.x-h*Math.cos((o+n)/ -2),g.y-l*Math.sin((o+n)/2));b.addMarkerAngle(q,(o+n)/2+(j==0?1:-1)*Math.PI/2);b.addMarkerAngle(e,n+(j==0?1:-1)*Math.PI/2);c.addPoint(e.x,e.y);d!=null&&(m=h>l?h:l,e=h>l?1:h/l,h=h>l?l/h:1,d.translate(g.x,g.y),d.rotate(f),d.scale(e,h),d.arc(0,0,m,o,o+n,1-j),d.scale(1/e,1/h),d.rotate(-f),d.translate(-g.x,-g.y))}break;case "Z":d!=null&&d.closePath(),b.current=b.start}return c};this.getMarkers=function(){for(var a=this.PathParser.getMarkerPoints(),b=this.PathParser.getMarkerAngles(),c=[],e=0;ethis.maxDuration)if(this.attribute("repeatCount").value=="indefinite")this.duration=0;else return this.attribute("fill").valueOrDefault("remove")=="remove"&&!this.removed?(this.removed=!0,this.getProperty().value=this.initialValue,!0):!1;this.duration+=a;a=!1;if(this.begin0&&b[c-1]!=" "&&c0&&b[c-1]!=" "&&(c==b.length-1||b[c+1]==" "))g="initial";typeof a.glyphs[e]!="undefined"&&(f=a.glyphs[e][g],f==null&&a.glyphs[e].type=="glyph"&&(f=a.glyphs[e]))}else f=a.glyphs[e];if(f==null)f=a.missingGlyph;return f};this.renderChildren=function(c){var b=this.parent.style("font-family").Definition.getDefinition();if(b!=null){var k=this.parent.style("font-size").numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize), -e=this.parent.style("font-style").valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle),f=this.getText();b.isRTL&&(f=f.split("").reverse().join(""));for(var g=a.ToNumberArray(this.parent.attribute("dx").value),j=0;j0?c.childNodes[0].nodeValue:c.text;this.getText=function(){return this.text}};a.Element.tspan.prototype=new a.Element.TextElementBase;a.Element.tref=function(c){this.base=a.Element.TextElementBase;this.base(c);this.getText=function(){var a=this.attribute("xlink:href").Definition.getDefinition();if(a!=null)return a.children[0].getText()}};a.Element.tref.prototype=new a.Element.TextElementBase; -a.Element.a=function(c){this.base=a.Element.TextElementBase;this.base(c);this.hasText=!0;for(var d=0;d1?c.childNodes[1].nodeValue: -""),c=c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,""),c=a.compressSpaces(c),c=c.split("}"),d=0;d0){l=g[j].indexOf("url");h=g[j].indexOf(")",l);l=g[j].substr(l+5,h-l-6);l=a.parseXml(a.ajax(l)).getElementsByTagName("font");for(h=0;h - * @link http://www.phpied.com/rgb-color-parser-in-javascript/ - * Use it if you like it - * - */ -function RGBColor(color_string) -{ - this.ok = false; - - // strip any leading # - if (color_string.charAt(0) == '#') { // remove # if any - color_string = color_string.substr(1,6); - } - - color_string = color_string.replace(/ /g,''); - color_string = color_string.toLowerCase(); - - // before getting into regexps, try simple matches - // and overwrite the input - var simple_colors = { - aliceblue: 'f0f8ff', - antiquewhite: 'faebd7', - aqua: '00ffff', - aquamarine: '7fffd4', - azure: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '000000', - blanchedalmond: 'ffebcd', - blue: '0000ff', - blueviolet: '8a2be2', - brown: 'a52a2a', - burlywood: 'deb887', - cadetblue: '5f9ea0', - chartreuse: '7fff00', - chocolate: 'd2691e', - coral: 'ff7f50', - cornflowerblue: '6495ed', - cornsilk: 'fff8dc', - crimson: 'dc143c', - cyan: '00ffff', - darkblue: '00008b', - darkcyan: '008b8b', - darkgoldenrod: 'b8860b', - darkgray: 'a9a9a9', - darkgreen: '006400', - darkkhaki: 'bdb76b', - darkmagenta: '8b008b', - darkolivegreen: '556b2f', - darkorange: 'ff8c00', - darkorchid: '9932cc', - darkred: '8b0000', - darksalmon: 'e9967a', - darkseagreen: '8fbc8f', - darkslateblue: '483d8b', - darkslategray: '2f4f4f', - darkturquoise: '00ced1', - darkviolet: '9400d3', - deeppink: 'ff1493', - deepskyblue: '00bfff', - dimgray: '696969', - dodgerblue: '1e90ff', - feldspar: 'd19275', - firebrick: 'b22222', - floralwhite: 'fffaf0', - forestgreen: '228b22', - fuchsia: 'ff00ff', - gainsboro: 'dcdcdc', - ghostwhite: 'f8f8ff', - gold: 'ffd700', - goldenrod: 'daa520', - gray: '808080', - green: '008000', - greenyellow: 'adff2f', - honeydew: 'f0fff0', - hotpink: 'ff69b4', - indianred : 'cd5c5c', - indigo : '4b0082', - ivory: 'fffff0', - khaki: 'f0e68c', - lavender: 'e6e6fa', - lavenderblush: 'fff0f5', - lawngreen: '7cfc00', - lemonchiffon: 'fffacd', - lightblue: 'add8e6', - lightcoral: 'f08080', - lightcyan: 'e0ffff', - lightgoldenrodyellow: 'fafad2', - lightgrey: 'd3d3d3', - lightgreen: '90ee90', - lightpink: 'ffb6c1', - lightsalmon: 'ffa07a', - lightseagreen: '20b2aa', - lightskyblue: '87cefa', - lightslateblue: '8470ff', - lightslategray: '778899', - lightsteelblue: 'b0c4de', - lightyellow: 'ffffe0', - lime: '00ff00', - limegreen: '32cd32', - linen: 'faf0e6', - magenta: 'ff00ff', - maroon: '800000', - mediumaquamarine: '66cdaa', - mediumblue: '0000cd', - mediumorchid: 'ba55d3', - mediumpurple: '9370d8', - mediumseagreen: '3cb371', - mediumslateblue: '7b68ee', - mediumspringgreen: '00fa9a', - mediumturquoise: '48d1cc', - mediumvioletred: 'c71585', - midnightblue: '191970', - mintcream: 'f5fffa', - mistyrose: 'ffe4e1', - moccasin: 'ffe4b5', - navajowhite: 'ffdead', - navy: '000080', - oldlace: 'fdf5e6', - olive: '808000', - olivedrab: '6b8e23', - orange: 'ffa500', - orangered: 'ff4500', - orchid: 'da70d6', - palegoldenrod: 'eee8aa', - palegreen: '98fb98', - paleturquoise: 'afeeee', - palevioletred: 'd87093', - papayawhip: 'ffefd5', - peachpuff: 'ffdab9', - peru: 'cd853f', - pink: 'ffc0cb', - plum: 'dda0dd', - powderblue: 'b0e0e6', - purple: '800080', - red: 'ff0000', - rosybrown: 'bc8f8f', - royalblue: '4169e1', - saddlebrown: '8b4513', - salmon: 'fa8072', - sandybrown: 'f4a460', - seagreen: '2e8b57', - seashell: 'fff5ee', - sienna: 'a0522d', - silver: 'c0c0c0', - skyblue: '87ceeb', - slateblue: '6a5acd', - slategray: '708090', - snow: 'fffafa', - springgreen: '00ff7f', - steelblue: '4682b4', - tan: 'd2b48c', - teal: '008080', - thistle: 'd8bfd8', - tomato: 'ff6347', - turquoise: '40e0d0', - violet: 'ee82ee', - violetred: 'd02090', - wheat: 'f5deb3', - white: 'ffffff', - whitesmoke: 'f5f5f5', - yellow: 'ffff00', - yellowgreen: '9acd32' - }; - for (var key in simple_colors) { - if (color_string == key) { - color_string = simple_colors[key]; - } - } - // emd of simple type-in colors - - // array of color definition objects - var color_defs = [ - { - re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, - example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], - process: function (bits){ - return [ - parseInt(bits[1]), - parseInt(bits[2]), - parseInt(bits[3]) - ]; - } - }, - { - re: /^(\w{2})(\w{2})(\w{2})$/, - example: ['#00ff00', '336699'], - process: function (bits){ - return [ - parseInt(bits[1], 16), - parseInt(bits[2], 16), - parseInt(bits[3], 16) - ]; - } - }, - { - re: /^(\w{1})(\w{1})(\w{1})$/, - example: ['#fb0', 'f0f'], - process: function (bits){ - return [ - parseInt(bits[1] + bits[1], 16), - parseInt(bits[2] + bits[2], 16), - parseInt(bits[3] + bits[3], 16) - ]; - } - } - ]; - - // search through the definitions to find a match - for (var i = 0; i < color_defs.length; i++) { - var re = color_defs[i].re; - var processor = color_defs[i].process; - var bits = re.exec(color_string); - if (bits) { - channels = processor(bits); - this.r = channels[0]; - this.g = channels[1]; - this.b = channels[2]; - this.ok = true; - } - - } - - // validate/cleanup values - this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r); - this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g); - this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b); - - // some getters - this.toRGB = function () { - return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')'; - } - this.toHex = function () { - var r = this.r.toString(16); - var g = this.g.toString(16); - var b = this.b.toString(16); - if (r.length == 1) r = '0' + r; - if (g.length == 1) g = '0' + g; - if (b.length == 1) b = '0' + b; - return '#' + r + g + b; - } - - // help - this.getHelpXML = function () { - - var examples = new Array(); - // add regexps - for (var i = 0; i < color_defs.length; i++) { - var example = color_defs[i].example; - for (var j = 0; j < example.length; j++) { - examples[examples.length] = example[j]; - } - } - // add type-in colors - for (var sc in simple_colors) { - examples[examples.length] = sc; - } - - var xml = document.createElement('ul'); - xml.setAttribute('id', 'rgbcolor-examples'); - for (var i = 0; i < examples.length; i++) { - try { - var list_item = document.createElement('li'); - var list_color = new RGBColor(examples[i]); - var example_div = document.createElement('div'); - example_div.style.cssText = - 'margin: 3px; ' - + 'border: 1px solid black; ' - + 'background:' + list_color.toHex() + '; ' - + 'color:' + list_color.toHex() - ; - example_div.appendChild(document.createTextNode('test')); - var list_item_value = document.createTextNode( - ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex() - ); - list_item.appendChild(example_div); - list_item.appendChild(list_item_value); - xml.appendChild(list_item); - - } catch(e){} - } - return xml; - - } - -} - -/** - * @license canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - * - */ -if(!window.console) { - window.console = {}; - window.console.log = function(str) {}; - window.console.dir = function(str) {}; -} - -if(!Array.prototype.indexOf){ - Array.prototype.indexOf = function(obj){ - for(var i=0; i ignore mouse events - // ignoreAnimation: true => ignore animations - // ignoreDimensions: true => does not try to resize canvas - // ignoreClear: true => does not clear canvas - // offsetX: int => draws at a x offset - // offsetY: int => draws at a y offset - // scaleWidth: int => scales horizontally to width - // scaleHeight: int => scales vertically to height - // renderCallback: function => will call the function after the first render is completed - // forceRedraw: function => will call the function on every frame, if it returns true, will redraw - this.canvg = function (target, s, opts) { - // no parameters - if (target == null && s == null && opts == null) { - var svgTags = document.getElementsByTagName('svg'); - for (var i=0; i]*>/, ''); - var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); - xmlDoc.async = 'false'; - xmlDoc.loadXML(xml); - return xmlDoc; - } - } - - svg.Property = function(name, value) { - this.name = name; - this.value = value; - - this.hasValue = function() { - return (this.value != null && this.value !== ''); - } - - // return the numerical value of the property - this.numValue = function() { - if (!this.hasValue()) return 0; - - var n = parseFloat(this.value); - if ((this.value + '').match(/%$/)) { - n = n / 100.0; - } - return n; - } - - this.valueOrDefault = function(def) { - if (this.hasValue()) return this.value; - return def; - } - - this.numValueOrDefault = function(def) { - if (this.hasValue()) return this.numValue(); - return def; - } - - /* EXTENSIONS */ - var that = this; - - // color extensions - this.Color = { - // augment the current color value with the opacity - addOpacity: function(opacity) { - var newValue = that.value; - if (opacity != null && opacity != '') { - var color = new RGBColor(that.value); - if (color.ok) { - newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')'; - } - } - return new svg.Property(that.name, newValue); - } - } - - // definition extensions - this.Definition = { - // get the definition from the definitions table - getDefinition: function() { - var name = that.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); - return svg.Definitions[name]; - }, - - isUrl: function() { - return that.value.indexOf('url(') == 0 - }, - - getFillStyle: function(e) { - var def = this.getDefinition(); - - // gradient - if (def != null && def.createGradient) { - return def.createGradient(svg.ctx, e); - } - - // pattern - if (def != null && def.createPattern) { - return def.createPattern(svg.ctx, e); - } - - return null; - } - } - - // length extensions - this.Length = { - DPI: function(viewPort) { - return 96.0; // TODO: compute? - }, - - EM: function(viewPort) { - var em = 12; - - var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize); - if (fontSize.hasValue()) em = fontSize.Length.toPixels(viewPort); - - return em; - }, - - // get the length as pixels - toPixels: function(viewPort) { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/em$/)) return that.numValue() * this.EM(viewPort); - if (s.match(/ex$/)) return that.numValue() * this.EM(viewPort) / 2.0; - if (s.match(/px$/)) return that.numValue(); - if (s.match(/pt$/)) return that.numValue() * 1.25; - if (s.match(/pc$/)) return that.numValue() * 15; - if (s.match(/cm$/)) return that.numValue() * this.DPI(viewPort) / 2.54; - if (s.match(/mm$/)) return that.numValue() * this.DPI(viewPort) / 25.4; - if (s.match(/in$/)) return that.numValue() * this.DPI(viewPort); - if (s.match(/%$/)) return that.numValue() * svg.ViewPort.ComputeSize(viewPort); - return that.numValue(); - } - } - - // time extensions - this.Time = { - // get the time as milliseconds - toMilliseconds: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/s$/)) return that.numValue() * 1000; - if (s.match(/ms$/)) return that.numValue(); - return that.numValue(); - } - } - - // angle extensions - this.Angle = { - // get the angle as radians - toRadians: function() { - if (!that.hasValue()) return 0; - var s = that.value+''; - if (s.match(/deg$/)) return that.numValue() * (Math.PI / 180.0); - if (s.match(/grad$/)) return that.numValue() * (Math.PI / 200.0); - if (s.match(/rad$/)) return that.numValue(); - return that.numValue() * (Math.PI / 180.0); - } - } - } - - // fonts - svg.Font = new (function() { - this.Styles = ['normal','italic','oblique','inherit']; - this.Variants = ['normal','small-caps','inherit']; - this.Weights = ['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','inherit']; - - this.CreateFont = function(fontStyle, fontVariant, fontWeight, fontSize, fontFamily, inherit) { - var f = inherit != null ? this.Parse(inherit) : this.CreateFont('', '', '', '', '', svg.ctx.font); - return { - fontFamily: fontFamily || f.fontFamily, - fontSize: fontSize || f.fontSize, - fontStyle: fontStyle || f.fontStyle, - fontWeight: fontWeight || f.fontWeight, - fontVariant: fontVariant || f.fontVariant, - toString: function () { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') } - } - } - - var that = this; - this.Parse = function(s) { - var f = {}; - var d = svg.trim(svg.compressSpaces(s || '')).split(' '); - var set = { fontSize: false, fontStyle: false, fontWeight: false, fontVariant: false } - var ff = ''; - for (var i=0; i this.x2) this.x2 = x; - } - - if (y != null) { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - } - this.addX = function(x) { this.addPoint(x, null); } - this.addY = function(y) { this.addPoint(null, y); } - - this.addBoundingBox = function(bb) { - this.addPoint(bb.x1, bb.y1); - this.addPoint(bb.x2, bb.y2); - } - - this.addQuadraticCurve = function(p0x, p0y, p1x, p1y, p2x, p2y) { - var cp1x = p0x + 2/3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp1y = p0y + 2/3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0) - var cp2x = cp1x + 1/3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0) - var cp2y = cp1y + 1/3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0) - this.addBezierCurve(p0x, p0y, cp1x, cp2x, cp1y, cp2y, p2x, p2y); - } - - this.addBezierCurve = function(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - var p0 = [p0x, p0y], p1 = [p1x, p1y], p2 = [p2x, p2y], p3 = [p3x, p3y]; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - - for (i=0; i<=1; i++) { - var f = function(t) { - return Math.pow(1-t, 3) * p0[i] - + 3 * Math.pow(1-t, 2) * t * p1[i] - + 3 * (1-t) * Math.pow(t, 2) * p2[i] - + Math.pow(t, 3) * p3[i]; - } - - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - - if (a == 0) { - if (b == 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i == 0) this.addX(f(t)); - if (i == 1) this.addY(f(t)); - } - continue; - } - - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i == 0) this.addX(f(t1)); - if (i == 1) this.addY(f(t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i == 0) this.addX(f(t2)); - if (i == 1) this.addY(f(t2)); - } - } - } - - this.isPointInBox = function(x, y) { - return (this.x1 <= x && x <= this.x2 && this.y1 <= y && y <= this.y2); - } - - this.addPoint(x1, y1); - this.addPoint(x2, y2); - } - - // transforms - svg.Transform = function(v) { - var that = this; - this.Type = {} - - // translate - this.Type.translate = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.translate(this.p.x || 0.0, this.p.y || 0.0); - } - this.applyToPoint = function(p) { - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - } - } - - // rotate - this.Type.rotate = function(s) { - var a = svg.ToNumberArray(s); - this.angle = new svg.Property('angle', a[0]); - this.cx = a[1] || 0; - this.cy = a[2] || 0; - this.apply = function(ctx) { - ctx.translate(this.cx, this.cy); - ctx.rotate(this.angle.Angle.toRadians()); - ctx.translate(-this.cx, -this.cy); - } - this.applyToPoint = function(p) { - var a = this.angle.Angle.toRadians(); - p.applyTransform([1, 0, 0, 1, this.p.x || 0.0, this.p.y || 0.0]); - p.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); - p.applyTransform([1, 0, 0, 1, -this.p.x || 0.0, -this.p.y || 0.0]); - } - } - - this.Type.scale = function(s) { - this.p = svg.CreatePoint(s); - this.apply = function(ctx) { - ctx.scale(this.p.x || 1.0, this.p.y || this.p.x || 1.0); - } - this.applyToPoint = function(p) { - p.applyTransform([this.p.x || 0.0, 0, 0, this.p.y || 0.0, 0, 0]); - } - } - - this.Type.matrix = function(s) { - this.m = svg.ToNumberArray(s); - this.apply = function(ctx) { - ctx.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]); - } - this.applyToPoint = function(p) { - p.applyTransform(this.m); - } - } - - this.Type.SkewBase = function(s) { - this.base = that.Type.matrix; - this.base(s); - this.angle = new svg.Property('angle', s); - } - this.Type.SkewBase.prototype = new this.Type.matrix; - - this.Type.skewX = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0]; - } - this.Type.skewX.prototype = new this.Type.SkewBase; - - this.Type.skewY = function(s) { - this.base = that.Type.SkewBase; - this.base(s); - this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0]; - } - this.Type.skewY.prototype = new this.Type.SkewBase; - - this.transforms = []; - - this.apply = function(ctx) { - for (var i=0; i= this.tokens.length - 1; - } - - this.isCommandOrEnd = function() { - if (this.isEnd()) return true; - return this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null; - } - - this.isRelativeCommand = function() { - return this.command == this.command.toLowerCase(); - } - - this.getToken = function() { - this.i = this.i + 1; - return this.tokens[this.i]; - } - - this.getScalar = function() { - return parseFloat(this.getToken()); - } - - this.nextCommand = function() { - this.previousCommand = this.command; - this.command = this.getToken(); - } - - this.getPoint = function() { - var p = new svg.Point(this.getScalar(), this.getScalar()); - return this.makeAbsolute(p); - } - - this.getAsControlPoint = function() { - var p = this.getPoint(); - this.control = p; - return p; - } - - this.getAsCurrentPoint = function() { - var p = this.getPoint(); - this.current = p; - return p; - } - - this.getReflectedControlPoint = function() { - if (this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's') { - return this.current; - } - - // reflect point - var p = new svg.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y); - return p; - } - - this.makeAbsolute = function(p) { - if (this.isRelativeCommand()) { - p.x = this.current.x + p.x; - p.y = this.current.y + p.y; - } - return p; - } - - this.addMarker = function(p, from, priorTo) { - // if the last angle isn't filled in because we didn't have this point yet ... - if (priorTo != null && this.angles.length > 0 && this.angles[this.angles.length-1] == null) { - this.angles[this.angles.length-1] = this.points[this.points.length-1].angleTo(priorTo); - } - this.addMarkerAngle(p, from == null ? null : from.angleTo(p)); - } - - this.addMarkerAngle = function(p, a) { - this.points.push(p); - this.angles.push(a); - } - - this.getMarkerPoints = function() { return this.points; } - this.getMarkerAngles = function() { - for (var i=0; i 1) { - rx *= Math.sqrt(l); - ry *= Math.sqrt(l); - } - // cx', cy' - var s = (largeArcFlag == sweepFlag ? -1 : 1) * Math.sqrt( - ((Math.pow(rx,2)*Math.pow(ry,2))-(Math.pow(rx,2)*Math.pow(currp.y,2))-(Math.pow(ry,2)*Math.pow(currp.x,2))) / - (Math.pow(rx,2)*Math.pow(currp.y,2)+Math.pow(ry,2)*Math.pow(currp.x,2)) - ); - if (isNaN(s)) s = 0; - var cpp = new svg.Point(s * rx * currp.y / ry, s * -ry * currp.x / rx); - // cx, cy - var centp = new svg.Point( - (curr.x + cp.x) / 2.0 + Math.cos(xAxisRotation) * cpp.x - Math.sin(xAxisRotation) * cpp.y, - (curr.y + cp.y) / 2.0 + Math.sin(xAxisRotation) * cpp.x + Math.cos(xAxisRotation) * cpp.y - ); - // vector magnitude - var m = function(v) { return Math.sqrt(Math.pow(v[0],2) + Math.pow(v[1],2)); } - // ratio between two vectors - var r = function(u, v) { return (u[0]*v[0]+u[1]*v[1]) / (m(u)*m(v)) } - // angle between two vectors - var a = function(u, v) { return (u[0]*v[1] < u[1]*v[0] ? -1 : 1) * Math.acos(r(u,v)); } - // initial angle - var a1 = a([1,0], [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]); - // angle delta - var u = [(currp.x-cpp.x)/rx,(currp.y-cpp.y)/ry]; - var v = [(-currp.x-cpp.x)/rx,(-currp.y-cpp.y)/ry]; - var ad = a(u, v); - if (r(u,v) <= -1) ad = Math.PI; - if (r(u,v) >= 1) ad = 0; - - if (sweepFlag == 0 && ad > 0) ad = ad - 2 * Math.PI; - if (sweepFlag == 1 && ad < 0) ad = ad + 2 * Math.PI; - - // for markers - var halfWay = new svg.Point( - centp.x - rx * Math.cos((a1 + ad) / 2), - centp.y - ry * Math.sin((a1 + ad) / 2) - ); - pp.addMarkerAngle(halfWay, (a1 + ad) / 2 + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - pp.addMarkerAngle(cp, ad + (sweepFlag == 0 ? 1 : -1) * Math.PI / 2); - - bb.addPoint(cp.x, cp.y); // TODO: this is too naive, make it better - if (ctx != null) { - var r = rx > ry ? rx : ry; - var sx = rx > ry ? 1 : rx / ry; - var sy = rx > ry ? ry / rx : 1; - - ctx.translate(centp.x, centp.y); - ctx.rotate(xAxisRotation); - ctx.scale(sx, sy); - ctx.arc(0, 0, r, a1, a1 + ad, 1 - sweepFlag); - ctx.scale(1/sx, 1/sy); - ctx.rotate(-xAxisRotation); - ctx.translate(-centp.x, -centp.y); - } - } - break; - case 'Z': - if (ctx != null) ctx.closePath(); - pp.current = pp.start; - } - } - - return bb; - } - - this.getMarkers = function() { - var points = this.PathParser.getMarkerPoints(); - var angles = this.PathParser.getMarkerAngles(); - - var markers = []; - for (var i=0; i this.maxDuration) { - // loop for indefinitely repeating animations - if (this.attribute('repeatCount').value == 'indefinite') { - this.duration = 0.0 - } - else if (this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed) { - this.removed = true; - this.getProperty().value = this.initialValue; - return true; - } - else { - return false; // no updates made - } - } - this.duration = this.duration + delta; - - // if we're past the begin time - var updated = false; - if (this.begin < this.duration) { - var newValue = this.calcValue(); // tween - - if (this.attribute('type').hasValue()) { - // for transform, etc. - var type = this.attribute('type').value; - newValue = type + '(' + newValue + ')'; - } - - this.getProperty().value = newValue; - updated = true; - } - - return updated; - } - - // fraction of duration we've covered - this.progress = function() { - return ((this.duration - this.begin) / (this.maxDuration - this.begin)); - } - } - svg.Element.AnimateBase.prototype = new svg.Element.ElementBase; - - // animate element - svg.Element.animate = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = this.attribute('from').numValue(); - var to = this.attribute('to').numValue(); - - // tween value linearly - return from + (to - from) * this.progress(); - }; - } - svg.Element.animate.prototype = new svg.Element.AnimateBase; - - // animate color element - svg.Element.animateColor = function(node) { - this.base = svg.Element.AnimateBase; - this.base(node); - - this.calcValue = function() { - var from = new RGBColor(this.attribute('from').value); - var to = new RGBColor(this.attribute('to').value); - - if (from.ok && to.ok) { - // tween color linearly - var r = from.r + (to.r - from.r) * this.progress(); - var g = from.g + (to.g - from.g) * this.progress(); - var b = from.b + (to.b - from.b) * this.progress(); - return 'rgb('+parseInt(r,10)+','+parseInt(g,10)+','+parseInt(b,10)+')'; - } - return this.attribute('from').value; - }; - } - svg.Element.animateColor.prototype = new svg.Element.AnimateBase; - - // animate transform element - svg.Element.animateTransform = function(node) { - this.base = svg.Element.animate; - this.base(node); - } - svg.Element.animateTransform.prototype = new svg.Element.animate; - - // font element - svg.Element.font = function(node) { - this.base = svg.Element.ElementBase; - this.base(node); - - this.horizAdvX = this.attribute('horiz-adv-x').numValue(); - - this.isRTL = false; - this.isArabic = false; - this.fontFace = null; - this.missingGlyph = null; - this.glyphs = []; - for (var i=0; i0 && text[i-1]!=' ' && i0 && text[i-1]!=' ' && (i == text.length-1 || text[i+1]==' ')) arabicForm = 'initial'; - if (typeof(font.glyphs[c]) != 'undefined') { - glyph = font.glyphs[c][arabicForm]; - if (glyph == null && font.glyphs[c].type == 'glyph') glyph = font.glyphs[c]; - } - } - else { - glyph = font.glyphs[c]; - } - if (glyph == null) glyph = font.missingGlyph; - return glyph; - } - - this.renderChildren = function(ctx) { - var customFont = this.parent.style('font-family').Definition.getDefinition(); - if (customFont != null) { - var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize); - var fontStyle = this.parent.style('font-style').valueOrDefault(svg.Font.Parse(svg.ctx.font).fontStyle); - var text = this.getText(); - if (customFont.isRTL) text = text.split("").reverse().join(""); - - var dx = svg.ToNumberArray(this.parent.attribute('dx').value); - for (var i=0; i 0 ? node.childNodes[0].nodeValue : // element - node.text; - this.getText = function() { - return this.text; - } - } - svg.Element.tspan.prototype = new svg.Element.TextElementBase; - - // tref - svg.Element.tref = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.getText = function() { - var element = this.attribute('xlink:href').Definition.getDefinition(); - if (element != null) return element.children[0].getText(); - } - } - svg.Element.tref.prototype = new svg.Element.TextElementBase; - - // a element - svg.Element.a = function(node) { - this.base = svg.Element.TextElementBase; - this.base(node); - - this.hasText = true; - for (var i=0; i 1 ? node.childNodes[1].nodeValue : ''); - css = css.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''); // remove comments - css = svg.compressSpaces(css); // replace whitespace - var cssDefs = css.split('}'); - for (var i=0; i 0) { - var urlStart = srcs[s].indexOf('url'); - var urlEnd = srcs[s].indexOf(')', urlStart); - var url = srcs[s].substr(urlStart + 5, urlEnd - urlStart - 6); - var doc = svg.parseXml(svg.ajax(url)); - var fonts = doc.getElementsByTagName('font'); - for (var f=0; f
","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b) -},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("';break;case 3:b.title=!1,b.closeBtn=!1,-1===b.icon&&0===b.icon,f.closeAll("loading");break;case 4:j||(b.content=[b.content,"body"]),b.follow=b.content[1],b.content=b.content[0]+'',b.title=!1,b.shade=!1,b.fix=!1,b.tips="object"==typeof b.tips?b.tips:[b.tips,!0],b.tipsMore||f.closeAll("tips")}a.vessel(j,function(d,e){c("body").append(d[0]),j?function(){2==b.type||4==b.type?function(){c("body").append(d[1])}():function(){i.parents("."+h[0])[0]||(i.show().addClass("layui-layer-wrap").wrap(d[1]),c("#"+h[0]+g).find("."+h[5]).before(e))}()}():c("body").append(d[1]),a.layero=c("#"+h[0]+g),b.scrollbar||h.html.css("overflow","hidden").attr("layer-full",g)}).auto(g),2==b.type&&f.ie6&&a.layero.find("iframe").attr("src",i[0]),c(document).off("keydown",e.enter).on("keydown",e.enter),a.layero.on("keydown",function(a){c(document).off("keydown",e.enter)}),4==b.type?a.tips():a.offset(),b.fix&&d.on("resize",function(){a.offset(),(/^\d+%$/.test(b.area[0])||/^\d+%$/.test(b.area[1]))&&a.auto(g),4==b.type&&a.tips()}),b.time<=0||setTimeout(function(){f.close(a.index)},b.time),a.move().callback()},g.pt.auto=function(a){function b(a){a=g.find(a),a.height(i[1]-j-k-2*(0|parseFloat(a.css("padding"))))}var e=this,f=e.config,g=c("#"+h[0]+a);""===f.area[0]&&f.maxWidth>0&&(/MSIE 7/.test(navigator.userAgent)&&f.btn&&g.width(g.innerWidth()),g.outerWidth()>f.maxWidth&&g.width(f.maxWidth));var i=[g.innerWidth(),g.innerHeight()],j=g.find(h[1]).outerHeight()||0,k=g.find("."+h[6]).outerHeight()||0;switch(f.type){case 2:b("iframe");break;default:""===f.area[1]?f.fix&&i[1]>=d.height()&&(i[1]=d.height(),b("."+h[5])):b("."+h[5])}return e},g.pt.offset=function(){var a=this,b=a.config,c=a.layero,e=[c.outerWidth(),c.outerHeight()],f="object"==typeof b.offset;a.offsetTop=(d.height()-e[1])/2,a.offsetLeft=(d.width()-e[0])/2,f?(a.offsetTop=b.offset[0],a.offsetLeft=b.offset[1]||a.offsetLeft):"auto"!==b.offset&&(a.offsetTop=b.offset,"rb"===b.offset&&(a.offsetTop=d.height()-e[1],a.offsetLeft=d.width()-e[0])),b.fix||(a.offsetTop=/%$/.test(a.offsetTop)?d.height()*parseFloat(a.offsetTop)/100:parseFloat(a.offsetTop),a.offsetLeft=/%$/.test(a.offsetLeft)?d.width()*parseFloat(a.offsetLeft)/100:parseFloat(a.offsetLeft),a.offsetTop+=d.scrollTop(),a.offsetLeft+=d.scrollLeft()),c.css({top:a.offsetTop,left:a.offsetLeft})},g.pt.tips=function(){var a=this,b=a.config,e=a.layero,f=[e.outerWidth(),e.outerHeight()],g=c(b.follow);g[0]||(g=c("body"));var i={width:g.outerWidth(),height:g.outerHeight(),top:g.offset().top,left:g.offset().left},j=e.find(".layui-layer-TipsG"),k=b.tips[0];b.tips[1]||j.remove(),i.autoLeft=function(){i.left+f[0]-d.width()>0?(i.tipLeft=i.left+i.width-f[0],j.css({right:12,left:"auto"})):i.tipLeft=i.left},i.where=[function(){i.autoLeft(),i.tipTop=i.top-f[1]-10,j.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",b.tips[1])},function(){i.tipLeft=i.left+i.width+10,i.tipTop=i.top,j.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",b.tips[1])},function(){i.autoLeft(),i.tipTop=i.top+i.height+10,j.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",b.tips[1])},function(){i.tipLeft=i.left-f[0]-10,i.tipTop=i.top,j.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",b.tips[1])}],i.where[k-1](),1===k?i.top-(d.scrollTop()+f[1]+16)<0&&i.where[2]():2===k?d.width()-(i.left+i.width+f[0]+16)>0||i.where[3]():3===k?i.top-d.scrollTop()+i.height+f[1]+16-d.height()>0&&i.where[0]():4===k&&f[0]+16-i.left>0&&i.where[1](),e.find("."+h[5]).css({"background-color":b.tips[1],"padding-right":b.closeBtn?"30px":""}),e.css({left:i.tipLeft,top:i.tipTop})},g.pt.move=function(){var a=this,b=a.config,e={setY:0,moveLayer:function(){var a=e.layero,b=parseInt(a.css("margin-left")),c=parseInt(e.move.css("left"));0===b||(c-=b),"fixed"!==a.css("position")&&(c-=a.parent().offset().left,e.setY=0),a.css({left:c,top:parseInt(e.move.css("top"))-e.setY})}},f=a.layero.find(b.move);return b.move&&f.attr("move","ok"),f.css({cursor:b.move?"move":"auto"}),c(b.move).on("mousedown",function(a){if(a.preventDefault(),"ok"===c(this).attr("move")){e.ismove=!0,e.layero=c(this).parents("."+h[0]);var f=e.layero.offset().left,g=e.layero.offset().top,i=e.layero.outerWidth()-6,j=e.layero.outerHeight()-6;c("#layui-layer-moves")[0]||c("body").append('
'),e.move=c("#layui-layer-moves"),b.moveType&&e.move.css({visibility:"hidden"}),e.moveX=a.pageX-e.move.position().left,e.moveY=a.pageY-e.move.position().top,"fixed"!==e.layero.css("position")||(e.setY=d.scrollTop())}}),c(document).mousemove(function(a){if(e.ismove){var c=a.pageX-e.moveX,f=a.pageY-e.moveY;if(a.preventDefault(),!b.moveOut){e.setY=d.scrollTop();var g=d.width()-e.move.outerWidth(),h=e.setY;0>c&&(c=0),c>g&&(c=g),h>f&&(f=h),f>d.height()-e.move.outerHeight()+e.setY&&(f=d.height()-e.move.outerHeight()+e.setY)}e.move.css({left:c,top:f}),b.moveType&&e.moveLayer(),c=f=g=h=null}}).mouseup(function(){try{e.ismove&&(e.moveLayer(),e.move.remove(),b.moveEnd&&b.moveEnd()),e.ismove=!1}catch(a){e.ismove=!1}}),a},g.pt.callback=function(){function a(){var a=g.cancel&&g.cancel(b.index);a===!1||f.close(b.index)}var b=this,d=b.layero,g=b.config;b.openLayer(),g.success&&(2==g.type?d.find("iframe").on("load",function(){g.success(d,b.index)}):g.success(d,b.index)),f.ie6&&b.IE6(d),d.find("."+h[6]).children("a").on("click",function(){var e=c(this).index();g["btn"+(e+1)]&&g["btn"+(e+1)](b.index,d),0===e?g.yes?g.yes(b.index,d):f.close(b.index):1===e?a():g["btn"+(e+1)]||f.close(b.index)}),d.find("."+h[7]).on("click",a),g.shadeClose&&c("#layui-layer-shade"+b.index).on("click",function(){f.close(b.index)}),d.find(".layui-layer-min").on("click",function(){f.min(b.index,g),g.min&&g.min(d)}),d.find(".layui-layer-max").on("click",function(){c(this).hasClass("layui-layer-maxmin")?(f.restore(b.index),g.restore&&g.restore(d)):(f.full(b.index,g),g.full&&g.full(d))}),g.end&&(e.end[b.index]=g.end)},e.reselect=function(){c.each(c("select"),function(a,b){var d=c(this);d.parents("."+h[0])[0]||1==d.attr("layer")&&c("."+h[0]).length<1&&d.removeAttr("layer").show(),d=null})},g.pt.IE6=function(a){function b(){a.css({top:f+(e.config.fix?d.scrollTop():0)})}var e=this,f=a.offset().top;b(),d.scroll(b),c("select").each(function(a,b){var d=c(this);d.parents("."+h[0])[0]||"none"===d.css("display")||d.attr({layer:"1"}).hide(),d=null})},g.pt.openLayer=function(){var a=this;f.zIndex=a.config.zIndex,f.setTop=function(a){var b=function(){f.zIndex++,a.css("z-index",f.zIndex+1)};return f.zIndex=parseInt(a[0].style.zIndex),a.on("mousedown",b),f.zIndex}},e.record=function(a){var b=[a.outerWidth(),a.outerHeight(),a.position().top,a.position().left+parseFloat(a.css("margin-left"))];a.find(".layui-layer-max").addClass("layui-layer-maxmin"),a.attr({area:b})},e.rescollbar=function(a){h.html.attr("layer-full")==a&&(h.html[0].style.removeProperty?h.html[0].style.removeProperty("overflow"):h.html[0].style.removeAttribute("overflow"),h.html.removeAttr("layer-full"))},a.layer=f,f.getChildFrame=function(a,b){return b=b||c("."+h[4]).attr("times"),c("#"+h[0]+b).find("iframe").contents().find(a)},f.getFrameIndex=function(a){return c("#"+a).parents("."+h[4]).attr("times")},f.iframeAuto=function(a){if(a){var b=f.getChildFrame("html",a).outerHeight(),d=c("#"+h[0]+a),e=d.find(h[1]).outerHeight()||0,g=d.find("."+h[6]).outerHeight()||0;d.css({height:b+e+g}),d.find("iframe").css({height:b})}},f.iframeSrc=function(a,b){c("#"+h[0]+a).find("iframe").attr("src",b)},f.style=function(a,b){var d=c("#"+h[0]+a),f=d.attr("type"),g=d.find(h[1]).outerHeight()||0,i=d.find("."+h[6]).outerHeight()||0;(f===e.type[1]||f===e.type[2])&&(d.css(b),f===e.type[2]&&d.find("iframe").css({height:parseFloat(b.height)-g-i}))},f.min=function(a,b){var d=c("#"+h[0]+a),g=d.find(h[1]).outerHeight()||0;e.record(d),f.style(a,{width:180,height:g,overflow:"hidden"}),d.find(".layui-layer-min").hide(),"page"===d.attr("type")&&d.find(h[4]).hide(),e.rescollbar(a)},f.restore=function(a){var b=c("#"+h[0]+a),d=b.attr("area").split(",");b.attr("type");f.style(a,{width:parseFloat(d[0]),height:parseFloat(d[1]),top:parseFloat(d[2]),left:parseFloat(d[3]),overflow:"visible"}),b.find(".layui-layer-max").removeClass("layui-layer-maxmin"),b.find(".layui-layer-min").show(),"page"===b.attr("type")&&b.find(h[4]).show(),e.rescollbar(a)},f.full=function(a){var b,g=c("#"+h[0]+a);e.record(g),h.html.attr("layer-full")||h.html.css("overflow","hidden").attr("layer-full",a),clearTimeout(b),b=setTimeout(function(){var b="fixed"===g.css("position");f.style(a,{top:b?0:d.scrollTop(),left:b?0:d.scrollLeft(),width:d.width(),height:d.height()}),g.find(".layui-layer-min").hide()},100)},f.title=function(a,b){var d=c("#"+h[0]+(b||f.index)).find(h[1]);d.html(a)},f.close=function(a){var b=c("#"+h[0]+a),d=b.attr("type");if(b[0]){if(d===e.type[1]&&"object"===b.attr("conType")){b.children(":not(."+h[5]+")").remove();for(var g=0;2>g;g++)b.find(".layui-layer-wrap").unwrap().hide()}else{if(d===e.type[2])try{var i=c("#"+h[4]+a)[0];i.contentWindow.document.write(""),i.contentWindow.close(),b.find("."+h[5])[0].removeChild(i)}catch(j){}b[0].innerHTML="",b.remove()}c("#layui-layer-moves, #layui-layer-shade"+a).remove(),f.ie6&&e.reselect(),e.rescollbar(a),c(document).off("keydown",e.enter),"function"==typeof e.end[a]&&e.end[a](),delete e.end[a]}},f.closeAll=function(a){c.each(c("."+h[0]),function(){var b=c(this),d=a?b.attr("type")===a:1;d&&f.close(b.attr("times")),d=null})},e.run=function(){c=jQuery,d=c(a),h.html=c("html"),f.open=function(a){var b=new g(a);return b.index}},"function"==typeof define?define(function(){return e.run(),f}):function(){e.run(),f.use("skin/layer.css")}()}(window); \ No newline at end of file diff --git a/static/js/layer/skin/default/icon-ext.png b/static/js/layer/skin/default/icon-ext.png deleted file mode 100755 index bbbb669bb..000000000 Binary files a/static/js/layer/skin/default/icon-ext.png and /dev/null differ diff --git a/static/js/layer/skin/default/icon.png b/static/js/layer/skin/default/icon.png deleted file mode 100755 index 3e17da8b1..000000000 Binary files a/static/js/layer/skin/default/icon.png and /dev/null differ diff --git a/static/js/layer/skin/default/loading-0.gif b/static/js/layer/skin/default/loading-0.gif deleted file mode 100755 index 6f3c9539a..000000000 Binary files a/static/js/layer/skin/default/loading-0.gif and /dev/null differ diff --git a/static/js/layer/skin/default/loading-1.gif b/static/js/layer/skin/default/loading-1.gif deleted file mode 100755 index db3a483e4..000000000 Binary files a/static/js/layer/skin/default/loading-1.gif and /dev/null differ diff --git a/static/js/layer/skin/default/loading-2.gif b/static/js/layer/skin/default/loading-2.gif deleted file mode 100755 index 5bb90fd6a..000000000 Binary files a/static/js/layer/skin/default/loading-2.gif and /dev/null differ diff --git a/static/js/layer/skin/layer.css b/static/js/layer/skin/layer.css deleted file mode 100755 index a3908881e..000000000 --- a/static/js/layer/skin/layer.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - - @Name: layer's style - @Author: 贤心 - @Blog: sentsin.com - - */*html{background-image:url(about:blank);background-attachment:fixed}html #layui_layer_skinlayercss{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{top:150px;left:50%;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px rgba(0,0,0,.3);border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.3);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-moves{position:absolute;border:3px solid #666;border:3px solid rgba(0,0,0,.5);cursor:move;background-color:#fff;background-color:rgba(255,255,255,.3);filter:alpha(opacity=50)}.layui-layer-load{background:url(default/loading-0.gif) center center no-repeat #fff}.layui-layer-ico{background:url(default/icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layui-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layui-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layui-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px solid #dedede;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.7}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;font-size:14px;overflow:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe .layui-layer-content{overflow:hidden}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(default/loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(default/loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(default/loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.3);background-color:#F90;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#F90}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:1px;border-bottom-style:solid;border-bottom-color:#F90}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#BBB5B5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1} \ No newline at end of file diff --git a/static/js/layer/skin/layer.ext.css b/static/js/layer/skin/layer.ext.css deleted file mode 100755 index 7a02607b2..000000000 --- a/static/js/layer/skin/layer.ext.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! - - @Name: layer拓展样式 - @Date: 2012.12.13 - @Author: 贤心 - @blog: sentsin.com - - */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s;background:url(default/xubox_loading1.gif) center center no-repeat #000}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal} \ No newline at end of file diff --git a/static/js/magnific/jquery.magnific-popup.min.js b/static/js/magnific/jquery.magnific-popup.min.js deleted file mode 100644 index ad353b97e..000000000 --- a/static/js/magnific/jquery.magnific-popup.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! Magnific Popup - v1.0.0 - 2015-01-03 -* http://dimsemenov.com/plugins/magnific-popup/ -* Copyright (c) 2015 Dmitry Semenov; */ -!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isIE7=-1!==c.indexOf("MSIE 7."),b.isIE8=-1!==c.indexOf("MSIE 8."),b.isLowIE=b.isIE7||b.isIE8,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(a,c){if(void 0===c||c===!1)return!0;if(e=a.split("_"),e.length>1){var d=b.find(p+"-"+e[0]);if(d.length>0){var f=e[1];"replaceWith"===f?d[0]!==c[0]&&d.replaceWith(c):"img"===f?d.is("img")?d.attr("src",c):d.replaceWith(''):d.attr(e[1],c)}}else b.find(p+"-"+a).html(c)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'',tClose:"Close (Esc)",tLoading:"Loading..."}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("
");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery",g=Boolean(a.fn.mfpFastClick);return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s),h=g?"mfpFastClick":"click";e[h](function(){b.prev()}),f[h](function(){b.next()}),b.isIE7&&(x("b",e[0],!1,!0),x("a",e[0],!1,!0),x("b",f[0],!1,!0),x("a",f[0],!1,!0)),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowLeft&&g&&b.arrowLeft.add(b.arrowRight).destroyMfpFastClick(),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),function(){var b=1e3,c="ontouchstart"in window,d=function(){v.off("touchmove"+f+" touchend"+f)},e="mfpFastClick",f="."+e;a.fn.mfpFastClick=function(e){return a(this).each(function(){var g,h=a(this);if(c){var i,j,k,l,m,n;h.on("touchstart"+f,function(a){l=!1,n=1,m=a.originalEvent?a.originalEvent.touches[0]:a.touches[0],j=m.clientX,k=m.clientY,v.on("touchmove"+f,function(a){m=a.originalEvent?a.originalEvent.touches:a.touches,n=m.length,m=m[0],(Math.abs(m.clientX-j)>10||Math.abs(m.clientY-k)>10)&&(l=!0,d())}).on("touchend"+f,function(a){d(),l||n>1||(g=!0,a.preventDefault(),clearTimeout(i),i=setTimeout(function(){g=!1},b),e())})})}h.on("click"+f,function(){g||e()})})},a.fn.destroyMfpFastClick=function(){a(this).off("touchstart"+f+" click"+f),c&&v.off("touchmove"+f+" touchend"+f)}}(),A()}); \ No newline at end of file diff --git a/static/js/mindmup-editabletable.js b/static/js/mindmup-editabletable.js deleted file mode 100644 index 4ae1b9b0e..000000000 --- a/static/js/mindmup-editabletable.js +++ /dev/null @@ -1,133 +0,0 @@ -/*global $, window*/ -$.fn.editableTableWidget = function (options) { - 'use strict'; - return $(this).each(function () { - var buildDefaultOptions = function () { - var opts = $.extend({}, $.fn.editableTableWidget.defaultOptions); - opts.editor = opts.editor.clone(); - return opts; - }, - activeOptions = $.extend(buildDefaultOptions(), options), - ARROW_LEFT = 37, ARROW_UP = 38, ARROW_RIGHT = 39, ARROW_DOWN = 40, ENTER = 13, ESC = 27, TAB = 9, - element = $(this), - editor = activeOptions.editor.css('position', 'absolute').hide().appendTo(element.parent()), - active, - showEditor = function (select) { - active = element.find('td:focus'); - if (active.length) { - editor.val(active.text()) - .removeClass('error') - .show() - .offset(active.offset()) - .css(active.css(activeOptions.cloneProperties)) - .width(active.width()) - .height(active.height()) - .focus(); - if (select) { - editor.select(); - } - } - }, - setActiveText = function () { - var text = editor.val(), - evt = $.Event('change'), - originalContent; - if (active.text() === text || editor.hasClass('error')) { - return true; - } - originalContent = active.html(); - active.text(text).trigger(evt, text); - if (evt.result === false) { - active.html(originalContent); - } - }, - movement = function (element, keycode) { - if (keycode === ARROW_RIGHT) { - return element.next('td'); - } else if (keycode === ARROW_LEFT) { - return element.prev('td'); - } else if (keycode === ARROW_UP) { - return element.parent().prev().children().eq(element.index()); - } else if (keycode === ARROW_DOWN) { - return element.parent().next().children().eq(element.index()); - } - return []; - }; - editor.blur(function () { - setActiveText(); - editor.hide(); - }).keydown(function (e) { - if (e.which === ENTER) { - setActiveText(); - editor.hide(); - active.focus(); - e.preventDefault(); - e.stopPropagation(); - } else if (e.which === ESC) { - editor.val(active.text()); - e.preventDefault(); - e.stopPropagation(); - editor.hide(); - active.focus(); - } else if (e.which === TAB) { - active.focus(); - } else if (this.selectionEnd - this.selectionStart === this.value.length) { - var possibleMove = movement(active, e.which); - if (possibleMove.length > 0) { - possibleMove.focus(); - e.preventDefault(); - e.stopPropagation(); - } - } - }) - .on('input paste', function () { - var evt = $.Event('validate'); - active.trigger(evt, editor.val()); - if (evt.result === false) { - editor.addClass('error'); - } else { - editor.removeClass('error'); - } - }); - //element.on('click keypress dblclick', showEditor) - element.find("td:not([data-editable='false'])").on('click keypress dblclick', showEditor) - .css('cursor', 'pointer') - .keydown(function (e) { - var prevent = true, - possibleMove = movement($(e.target), e.which); - if (possibleMove.length > 0) { - possibleMove.focus(); - } else if (e.which === ENTER) { - showEditor(false); - } else if (e.which === 17 || e.which === 91 || e.which === 93) { - showEditor(true); - prevent = false; - } else { - prevent = false; - } - if (prevent) { - e.stopPropagation(); - e.preventDefault(); - } - }); - - //element.find('td').prop('tabindex', 1); - element.find("td:not([data-editable='false'])").prop('tabindex', 1); - - $(window).on('resize', function () { - if (editor.is(':visible')) { - editor.offset(active.offset()) - .width(active.width()) - .height(active.height()); - } - }); - }); - -}; -$.fn.editableTableWidget.defaultOptions = { - cloneProperties: ['padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right', - 'text-align', 'font', 'font-size', 'font-family', 'font-weight', - 'border', 'border-top', 'border-bottom', 'border-left', 'border-right'], - editor: $('') -}; - diff --git a/static/js/plugins/chosen/chosen.jquery.js b/static/js/plugins/chosen/chosen.jquery.js deleted file mode 100755 index fc77de83f..000000000 --- a/static/js/plugins/chosen/chosen.jquery.js +++ /dev/null @@ -1,1211 +0,0 @@ -/*! - Chosen, a Select Box Enhancer for jQuery and Prototype - by Patrick Filler for Harvest, http://getharvest.com - - Version 1.1.0 - Full source at https://github.com/harvesthq/chosen - Copyright (c) 2011 Harvest http://getharvest.com - - MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - This file is generated by `grunt build`, do not edit it by hand. - */ - -(function() { - var $, AbstractChosen, Chosen, SelectParser, _ref, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - SelectParser = (function() { - function SelectParser() { - this.options_index = 0; - this.parsed = []; - } - - SelectParser.prototype.add_node = function(child) { - if (child.nodeName.toUpperCase() === "OPTGROUP") { - return this.add_group(child); - } else { - return this.add_option(child); - } - }; - - SelectParser.prototype.add_group = function(group) { - var group_position, option, _i, _len, _ref, _results; - group_position = this.parsed.length; - this.parsed.push({ - array_index: group_position, - group: true, - label: this.escapeExpression(group.label), - children: 0, - disabled: group.disabled - }); - _ref = group.childNodes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - _results.push(this.add_option(option, group_position, group.disabled)); - } - return _results; - }; - - SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName.toUpperCase() === "OPTION") { - if (option.text !== "") { - if (group_position != null) { - this.parsed[group_position].children += 1; - } - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - value: option.value, - text: option.text, - html: option.innerHTML, - selected: option.selected, - disabled: group_disabled === true ? group_disabled : option.disabled, - group_array_index: group_position, - classes: option.className, - style: option.style.cssText - }); - } else { - this.parsed.push({ - array_index: this.parsed.length, - options_index: this.options_index, - empty: true - }); - } - return this.options_index += 1; - } - }; - - SelectParser.prototype.escapeExpression = function(text) { - var map, unsafe_chars; - if ((text == null) || text === false) { - return ""; - } - if (!/[\&\<\>\"\'\`]/.test(text)) { - return text; - } - map = { - "<": "<", - ">": ">", - '"': """, - "'": "'", - "`": "`" - }; - unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; - return text.replace(unsafe_chars, function(chr) { - return map[chr] || "&"; - }); - }; - - return SelectParser; - - })(); - - SelectParser.select_to_array = function(select) { - var child, parser, _i, _len, _ref; - parser = new SelectParser(); - _ref = select.childNodes; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - parser.add_node(child); - } - return parser.parsed; - }; - - AbstractChosen = (function() { - function AbstractChosen(form_field, options) { - this.form_field = form_field; - this.options = options != null ? options : {}; - if (!AbstractChosen.browser_is_supported()) { - return; - } - this.is_multiple = this.form_field.multiple; - this.set_default_text(); - this.set_default_values(); - this.setup(); - this.set_up_html(); - this.register_observers(); - } - - AbstractChosen.prototype.set_default_values = function() { - var _this = this; - this.click_test_action = function(evt) { - return _this.test_active_click(evt); - }; - this.activate_action = function(evt) { - return _this.activate_field(evt); - }; - this.active_field = false; - this.mouse_on_container = false; - this.results_showing = false; - this.result_highlighted = null; - this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; - this.disable_search_threshold = this.options.disable_search_threshold || 0; - this.disable_search = this.options.disable_search || false; - this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; - this.group_search = this.options.group_search != null ? this.options.group_search : true; - this.search_contains = this.options.search_contains || false; - this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; - this.max_selected_options = this.options.max_selected_options || Infinity; - this.inherit_select_classes = this.options.inherit_select_classes || false; - this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; - return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; - }; - - AbstractChosen.prototype.set_default_text = function() { - if (this.form_field.getAttribute("data-placeholder")) { - this.default_text = this.form_field.getAttribute("data-placeholder"); - } else if (this.is_multiple) { - this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; - } else { - this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; - } - return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; - }; - - AbstractChosen.prototype.mouse_enter = function() { - return this.mouse_on_container = true; - }; - - AbstractChosen.prototype.mouse_leave = function() { - return this.mouse_on_container = false; - }; - - AbstractChosen.prototype.input_focus = function(evt) { - var _this = this; - if (this.is_multiple) { - if (!this.active_field) { - return setTimeout((function() { - return _this.container_mousedown(); - }), 50); - } - } else { - if (!this.active_field) { - return this.activate_field(); - } - } - }; - - AbstractChosen.prototype.input_blur = function(evt) { - var _this = this; - if (!this.mouse_on_container) { - this.active_field = false; - return setTimeout((function() { - return _this.blur_test(); - }), 100); - } - }; - - AbstractChosen.prototype.results_option_build = function(options) { - var content, data, _i, _len, _ref; - content = ''; - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - data = _ref[_i]; - if (data.group) { - content += this.result_add_group(data); - } else { - content += this.result_add_option(data); - } - if (options != null ? options.first : void 0) { - if (data.selected && this.is_multiple) { - this.choice_build(data); - } else if (data.selected && !this.is_multiple) { - this.single_set_selected_text(data.text); - } - } - } - return content; - }; - - AbstractChosen.prototype.result_add_option = function(option) { - var classes, option_el; - if (!option.search_match) { - return ''; - } - if (!this.include_option_in_results(option)) { - return ''; - } - classes = []; - if (!option.disabled && !(option.selected && this.is_multiple)) { - classes.push("active-result"); - } - if (option.disabled && !(option.selected && this.is_multiple)) { - classes.push("disabled-result"); - } - if (option.selected) { - classes.push("result-selected"); - } - if (option.group_array_index != null) { - classes.push("group-option"); - } - if (option.classes !== "") { - classes.push(option.classes); - } - option_el = document.createElement("li"); - option_el.className = classes.join(" "); - option_el.style.cssText = option.style; - option_el.setAttribute("data-option-array-index", option.array_index); - option_el.innerHTML = option.search_text; - return this.outerHTML(option_el); - }; - - AbstractChosen.prototype.result_add_group = function(group) { - var group_el; - if (!(group.search_match || group.group_match)) { - return ''; - } - if (!(group.active_options > 0)) { - return ''; - } - group_el = document.createElement("li"); - group_el.className = "group-result"; - group_el.innerHTML = group.search_text; - return this.outerHTML(group_el); - }; - - AbstractChosen.prototype.results_update_field = function() { - this.set_default_text(); - if (!this.is_multiple) { - this.results_reset_cleanup(); - } - this.result_clear_highlight(); - this.results_build(); - if (this.results_showing) { - return this.winnow_results(); - } - }; - - AbstractChosen.prototype.reset_single_select_options = function() { - var result, _i, _len, _ref, _results; - _ref = this.results_data; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - result = _ref[_i]; - if (result.selected) { - _results.push(result.selected = false); - } else { - _results.push(void 0); - } - } - return _results; - }; - - AbstractChosen.prototype.results_toggle = function() { - if (this.results_showing) { - return this.results_hide(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.results_search = function(evt) { - if (this.results_showing) { - return this.winnow_results(); - } else { - return this.results_show(); - } - }; - - AbstractChosen.prototype.winnow_results = function() { - var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; - this.no_results_clear(); - results = 0; - searchText = this.get_search_text(); - escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - regexAnchor = this.search_contains ? "" : "^"; - regex = new RegExp(regexAnchor + escapedSearchText, 'i'); - zregex = new RegExp(escapedSearchText, 'i'); - _ref = this.results_data; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - option.search_match = false; - results_group = null; - if (this.include_option_in_results(option)) { - if (option.group) { - option.group_match = false; - option.active_options = 0; - } - if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { - results_group = this.results_data[option.group_array_index]; - if (results_group.active_options === 0 && results_group.search_match) { - results += 1; - } - results_group.active_options += 1; - } - if (!(option.group && !this.group_search)) { - option.search_text = option.group ? option.label : option.html; - option.search_match = this.search_string_match(option.search_text, regex); - if (option.search_match && !option.group) { - results += 1; - } - if (option.search_match) { - if (searchText.length) { - startpos = option.search_text.search(zregex); - text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); - option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); - } - if (results_group != null) { - results_group.group_match = true; - } - } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { - option.search_match = true; - } - } - } - } - this.result_clear_highlight(); - if (results < 1 && searchText.length) { - this.update_results_content(""); - return this.no_results(searchText); - } else { - this.update_results_content(this.results_option_build()); - return this.winnow_results_set_highlight(); - } - }; - - AbstractChosen.prototype.search_string_match = function(search_string, regex) { - var part, parts, _i, _len; - if (regex.test(search_string)) { - return true; - } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { - parts = search_string.replace(/\[|\]/g, "").split(" "); - if (parts.length) { - for (_i = 0, _len = parts.length; _i < _len; _i++) { - part = parts[_i]; - if (regex.test(part)) { - return true; - } - } - } - } - }; - - AbstractChosen.prototype.choices_count = function() { - var option, _i, _len, _ref; - if (this.selected_option_count != null) { - return this.selected_option_count; - } - this.selected_option_count = 0; - _ref = this.form_field.options; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - option = _ref[_i]; - if (option.selected) { - this.selected_option_count += 1; - } - } - return this.selected_option_count; - }; - - AbstractChosen.prototype.choices_click = function(evt) { - evt.preventDefault(); - if (!(this.results_showing || this.is_disabled)) { - return this.results_show(); - } - }; - - AbstractChosen.prototype.keyup_checker = function(evt) { - var stroke, _ref; - stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; - this.search_field_scale(); - switch (stroke) { - case 8: - if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { - return this.keydown_backstroke(); - } else if (!this.pending_backstroke) { - this.result_clear_highlight(); - return this.results_search(); - } - break; - case 13: - evt.preventDefault(); - if (this.results_showing) { - return this.result_select(evt); - } - break; - case 27: - if (this.results_showing) { - this.results_hide(); - } - return true; - case 9: - case 38: - case 40: - case 16: - case 91: - case 17: - break; - default: - return this.results_search(); - } - }; - - AbstractChosen.prototype.clipboard_event_checker = function(evt) { - var _this = this; - return setTimeout((function() { - return _this.results_search(); - }), 50); - }; - - AbstractChosen.prototype.container_width = function() { - if (this.options.width != null) { - return this.options.width; - } else { - return "" + this.form_field.offsetWidth + "px"; - } - }; - - AbstractChosen.prototype.include_option_in_results = function(option) { - if (this.is_multiple && (!this.display_selected_options && option.selected)) { - return false; - } - if (!this.display_disabled_options && option.disabled) { - return false; - } - if (option.empty) { - return false; - } - return true; - }; - - AbstractChosen.prototype.search_results_touchstart = function(evt) { - this.touch_started = true; - return this.search_results_mouseover(evt); - }; - - AbstractChosen.prototype.search_results_touchmove = function(evt) { - this.touch_started = false; - return this.search_results_mouseout(evt); - }; - - AbstractChosen.prototype.search_results_touchend = function(evt) { - if (this.touch_started) { - return this.search_results_mouseup(evt); - } - }; - - AbstractChosen.prototype.outerHTML = function(element) { - var tmp; - if (element.outerHTML) { - return element.outerHTML; - } - tmp = document.createElement("div"); - tmp.appendChild(element); - return tmp.innerHTML; - }; - - AbstractChosen.browser_is_supported = function() { - if (window.navigator.appName === "Microsoft Internet Explorer") { - return document.documentMode >= 8; - } - if (/iP(od|hone)/i.test(window.navigator.userAgent)) { - return false; - } - if (/Android/i.test(window.navigator.userAgent)) { - if (/Mobile/i.test(window.navigator.userAgent)) { - return false; - } - } - return true; - }; - - AbstractChosen.default_multiple_text = "Select Some Options"; - - AbstractChosen.default_single_text = "Select an Option"; - - AbstractChosen.default_no_result_text = "No results match"; - - return AbstractChosen; - - })(); - - $ = jQuery; - - $.fn.extend({ - chosen: function(options) { - if (!AbstractChosen.browser_is_supported()) { - return this; - } - return this.each(function(input_field) { - var $this, chosen; - $this = $(this); - chosen = $this.data('chosen'); - if (options === 'destroy' && chosen) { - chosen.destroy(); - } else if (!chosen) { - $this.data('chosen', new Chosen(this, options)); - } - }); - } - }); - - Chosen = (function(_super) { - __extends(Chosen, _super); - - function Chosen() { - _ref = Chosen.__super__.constructor.apply(this, arguments); - return _ref; - } - - Chosen.prototype.setup = function() { - this.form_field_jq = $(this.form_field); - this.current_selectedIndex = this.form_field.selectedIndex; - return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); - }; - - Chosen.prototype.set_up_html = function() { - var container_classes, container_props; - container_classes = ["chosen-container"]; - container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); - if (this.inherit_select_classes && this.form_field.className) { - container_classes.push(this.form_field.className); - } - if (this.is_rtl) { - container_classes.push("chosen-rtl"); - } - container_props = { - 'class': container_classes.join(' '), - 'style': "width: " + (this.container_width()) + ";", - 'title': this.form_field.title - }; - if (this.form_field.id.length) { - container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; - } - this.container = $("
", container_props); - if (this.is_multiple) { - this.container.html('
    '); - } else { - this.container.html('' + this.default_text + '
      '); - } - this.form_field_jq.hide().after(this.container); - this.dropdown = this.container.find('div.chosen-drop').first(); - this.search_field = this.container.find('input').first(); - this.search_results = this.container.find('ul.chosen-results').first(); - this.search_field_scale(); - this.search_no_results = this.container.find('li.no-results').first(); - if (this.is_multiple) { - this.search_choices = this.container.find('ul.chosen-choices').first(); - this.search_container = this.container.find('li.search-field').first(); - } else { - this.search_container = this.container.find('div.chosen-search').first(); - this.selected_item = this.container.find('.chosen-single').first(); - } - this.results_build(); - this.set_tab_index(); - this.set_label_behavior(); - return this.form_field_jq.trigger("chosen:ready", { - chosen: this - }); - }; - - Chosen.prototype.register_observers = function() { - var _this = this; - this.container.bind('mousedown.chosen', function(evt) { - _this.container_mousedown(evt); - }); - this.container.bind('mouseup.chosen', function(evt) { - _this.container_mouseup(evt); - }); - this.container.bind('mouseenter.chosen', function(evt) { - _this.mouse_enter(evt); - }); - this.container.bind('mouseleave.chosen', function(evt) { - _this.mouse_leave(evt); - }); - this.search_results.bind('mouseup.chosen', function(evt) { - _this.search_results_mouseup(evt); - }); - this.search_results.bind('mouseover.chosen', function(evt) { - _this.search_results_mouseover(evt); - }); - this.search_results.bind('mouseout.chosen', function(evt) { - _this.search_results_mouseout(evt); - }); - this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { - _this.search_results_mousewheel(evt); - }); - this.search_results.bind('touchstart.chosen', function(evt) { - _this.search_results_touchstart(evt); - }); - this.search_results.bind('touchmove.chosen', function(evt) { - _this.search_results_touchmove(evt); - }); - this.search_results.bind('touchend.chosen', function(evt) { - _this.search_results_touchend(evt); - }); - this.form_field_jq.bind("chosen:updated.chosen", function(evt) { - _this.results_update_field(evt); - }); - this.form_field_jq.bind("chosen:activate.chosen", function(evt) { - _this.activate_field(evt); - }); - this.form_field_jq.bind("chosen:open.chosen", function(evt) { - _this.container_mousedown(evt); - }); - this.form_field_jq.bind("chosen:close.chosen", function(evt) { - _this.input_blur(evt); - }); - this.search_field.bind('blur.chosen', function(evt) { - _this.input_blur(evt); - }); - this.search_field.bind('keyup.chosen', function(evt) { - _this.keyup_checker(evt); - }); - this.search_field.bind('keydown.chosen', function(evt) { - _this.keydown_checker(evt); - }); - this.search_field.bind('focus.chosen', function(evt) { - _this.input_focus(evt); - }); - this.search_field.bind('cut.chosen', function(evt) { - _this.clipboard_event_checker(evt); - }); - this.search_field.bind('paste.chosen', function(evt) { - _this.clipboard_event_checker(evt); - }); - if (this.is_multiple) { - return this.search_choices.bind('click.chosen', function(evt) { - _this.choices_click(evt); - }); - } else { - return this.container.bind('click.chosen', function(evt) { - evt.preventDefault(); - }); - } - }; - - Chosen.prototype.destroy = function() { - $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); - if (this.search_field[0].tabIndex) { - this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; - } - this.container.remove(); - this.form_field_jq.removeData('chosen'); - return this.form_field_jq.show(); - }; - - Chosen.prototype.search_field_disabled = function() { - this.is_disabled = this.form_field_jq[0].disabled; - if (this.is_disabled) { - this.container.addClass('chosen-disabled'); - this.search_field[0].disabled = true; - if (!this.is_multiple) { - this.selected_item.unbind("focus.chosen", this.activate_action); - } - return this.close_field(); - } else { - this.container.removeClass('chosen-disabled'); - this.search_field[0].disabled = false; - if (!this.is_multiple) { - return this.selected_item.bind("focus.chosen", this.activate_action); - } - } - }; - - Chosen.prototype.container_mousedown = function(evt) { - if (!this.is_disabled) { - if (evt && evt.type === "mousedown" && !this.results_showing) { - evt.preventDefault(); - } - if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { - if (!this.active_field) { - if (this.is_multiple) { - this.search_field.val(""); - } - $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); - this.results_show(); - } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { - evt.preventDefault(); - this.results_toggle(); - } - return this.activate_field(); - } - } - }; - - Chosen.prototype.container_mouseup = function(evt) { - if (evt.target.nodeName === "ABBR" && !this.is_disabled) { - return this.results_reset(evt); - } - }; - - Chosen.prototype.search_results_mousewheel = function(evt) { - var delta; - if (evt.originalEvent) { - delta = -evt.originalEvent.wheelDelta || evt.originalEvent.detail; - } - if (delta != null) { - evt.preventDefault(); - if (evt.type === 'DOMMouseScroll') { - delta = delta * 40; - } - return this.search_results.scrollTop(delta + this.search_results.scrollTop()); - } - }; - - Chosen.prototype.blur_test = function(evt) { - if (!this.active_field && this.container.hasClass("chosen-container-active")) { - return this.close_field(); - } - }; - - Chosen.prototype.close_field = function() { - $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); - this.active_field = false; - this.results_hide(); - this.container.removeClass("chosen-container-active"); - this.clear_backstroke(); - this.show_search_field_default(); - return this.search_field_scale(); - }; - - Chosen.prototype.activate_field = function() { - this.container.addClass("chosen-container-active"); - this.active_field = true; - this.search_field.val(this.search_field.val()); - return this.search_field.focus(); - }; - - Chosen.prototype.test_active_click = function(evt) { - var active_container; - active_container = $(evt.target).closest('.chosen-container'); - if (active_container.length && this.container[0] === active_container[0]) { - return this.active_field = true; - } else { - return this.close_field(); - } - }; - - Chosen.prototype.results_build = function() { - this.parsing = true; - this.selected_option_count = null; - this.results_data = SelectParser.select_to_array(this.form_field); - if (this.is_multiple) { - this.search_choices.find("li.search-choice").remove(); - } else if (!this.is_multiple) { - this.single_set_selected_text(); - if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { - this.search_field[0].readOnly = true; - this.container.addClass("chosen-container-single-nosearch"); - } else { - this.search_field[0].readOnly = false; - this.container.removeClass("chosen-container-single-nosearch"); - } - } - this.update_results_content(this.results_option_build({ - first: true - })); - this.search_field_disabled(); - this.show_search_field_default(); - this.search_field_scale(); - return this.parsing = false; - }; - - Chosen.prototype.result_do_highlight = function(el) { - var high_bottom, high_top, maxHeight, visible_bottom, visible_top; - if (el.length) { - this.result_clear_highlight(); - this.result_highlight = el; - this.result_highlight.addClass("highlighted"); - maxHeight = parseInt(this.search_results.css("maxHeight"), 10); - visible_top = this.search_results.scrollTop(); - visible_bottom = maxHeight + visible_top; - high_top = this.result_highlight.position().top + this.search_results.scrollTop(); - high_bottom = high_top + this.result_highlight.outerHeight(); - if (high_bottom >= visible_bottom) { - return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); - } else if (high_top < visible_top) { - return this.search_results.scrollTop(high_top); - } - } - }; - - Chosen.prototype.result_clear_highlight = function() { - if (this.result_highlight) { - this.result_highlight.removeClass("highlighted"); - } - return this.result_highlight = null; - }; - - Chosen.prototype.results_show = function() { - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field_jq.trigger("chosen:maxselected", { - chosen: this - }); - return false; - } - this.container.addClass("chosen-with-drop"); - this.results_showing = true; - this.search_field.focus(); - this.search_field.val(this.search_field.val()); - this.winnow_results(); - return this.form_field_jq.trigger("chosen:showing_dropdown", { - chosen: this - }); - }; - - Chosen.prototype.update_results_content = function(content) { - return this.search_results.html(content); - }; - - Chosen.prototype.results_hide = function() { - if (this.results_showing) { - this.result_clear_highlight(); - this.container.removeClass("chosen-with-drop"); - this.form_field_jq.trigger("chosen:hiding_dropdown", { - chosen: this - }); - } - return this.results_showing = false; - }; - - Chosen.prototype.set_tab_index = function(el) { - var ti; - if (this.form_field.tabIndex) { - ti = this.form_field.tabIndex; - this.form_field.tabIndex = -1; - return this.search_field[0].tabIndex = ti; - } - }; - - Chosen.prototype.set_label_behavior = function() { - var _this = this; - this.form_field_label = this.form_field_jq.parents("label"); - if (!this.form_field_label.length && this.form_field.id.length) { - this.form_field_label = $("label[for='" + this.form_field.id + "']"); - } - if (this.form_field_label.length > 0) { - return this.form_field_label.bind('click.chosen', function(evt) { - if (_this.is_multiple) { - return _this.container_mousedown(evt); - } else { - return _this.activate_field(); - } - }); - } - }; - - Chosen.prototype.show_search_field_default = function() { - if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { - this.search_field.val(this.default_text); - return this.search_field.addClass("default"); - } else { - this.search_field.val(""); - return this.search_field.removeClass("default"); - } - }; - - Chosen.prototype.search_results_mouseup = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target.length) { - this.result_highlight = target; - this.result_select(evt); - return this.search_field.focus(); - } - }; - - Chosen.prototype.search_results_mouseover = function(evt) { - var target; - target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); - if (target) { - return this.result_do_highlight(target); - } - }; - - Chosen.prototype.search_results_mouseout = function(evt) { - if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { - return this.result_clear_highlight(); - } - }; - - Chosen.prototype.choice_build = function(item) { - var choice, close_link, - _this = this; - choice = $('
    • ', { - "class": "search-choice" - }).html("" + item.html + ""); - if (item.disabled) { - choice.addClass('search-choice-disabled'); - } else { - close_link = $('', { - "class": 'search-choice-close', - 'data-option-array-index': item.array_index - }); - close_link.bind('click.chosen', function(evt) { - return _this.choice_destroy_link_click(evt); - }); - choice.append(close_link); - } - return this.search_container.before(choice); - }; - - Chosen.prototype.choice_destroy_link_click = function(evt) { - evt.preventDefault(); - evt.stopPropagation(); - if (!this.is_disabled) { - return this.choice_destroy($(evt.target)); - } - }; - - Chosen.prototype.choice_destroy = function(link) { - if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { - this.show_search_field_default(); - if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { - this.results_hide(); - } - link.parents('li').first().remove(); - return this.search_field_scale(); - } - }; - - Chosen.prototype.results_reset = function() { - this.reset_single_select_options(); - this.form_field.options[0].selected = true; - this.single_set_selected_text(); - this.show_search_field_default(); - this.results_reset_cleanup(); - this.form_field_jq.trigger("change"); - if (this.active_field) { - return this.results_hide(); - } - }; - - Chosen.prototype.results_reset_cleanup = function() { - this.current_selectedIndex = this.form_field.selectedIndex; - return this.selected_item.find("abbr").remove(); - }; - - Chosen.prototype.result_select = function(evt) { - var high, item; - if (this.result_highlight) { - high = this.result_highlight; - this.result_clear_highlight(); - if (this.is_multiple && this.max_selected_options <= this.choices_count()) { - this.form_field_jq.trigger("chosen:maxselected", { - chosen: this - }); - return false; - } - if (this.is_multiple) { - high.removeClass("active-result"); - } else { - this.reset_single_select_options(); - } - item = this.results_data[high[0].getAttribute("data-option-array-index")]; - item.selected = true; - this.form_field.options[item.options_index].selected = true; - this.selected_option_count = null; - if (this.is_multiple) { - this.choice_build(item); - } else { - this.single_set_selected_text(item.text); - } - if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { - this.results_hide(); - } - this.search_field.val(""); - if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { - this.form_field_jq.trigger("change", { - 'selected': this.form_field.options[item.options_index].value - }); - } - this.current_selectedIndex = this.form_field.selectedIndex; - return this.search_field_scale(); - } - }; - - Chosen.prototype.single_set_selected_text = function(text) { - if (text == null) { - text = this.default_text; - } - if (text === this.default_text) { - this.selected_item.addClass("chosen-default"); - } else { - this.single_deselect_control_build(); - this.selected_item.removeClass("chosen-default"); - } - return this.selected_item.find("span").text(text); - }; - - Chosen.prototype.result_deselect = function(pos) { - var result_data; - result_data = this.results_data[pos]; - if (!this.form_field.options[result_data.options_index].disabled) { - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - this.selected_option_count = null; - this.result_clear_highlight(); - if (this.results_showing) { - this.winnow_results(); - } - this.form_field_jq.trigger("change", { - deselected: this.form_field.options[result_data.options_index].value - }); - this.search_field_scale(); - return true; - } else { - return false; - } - }; - - Chosen.prototype.single_deselect_control_build = function() { - if (!this.allow_single_deselect) { - return; - } - if (!this.selected_item.find("abbr").length) { - this.selected_item.find("span").first().after(""); - } - return this.selected_item.addClass("chosen-single-with-deselect"); - }; - - Chosen.prototype.get_search_text = function() { - if (this.search_field.val() === this.default_text) { - return ""; - } else { - return $('
      ').text($.trim(this.search_field.val())).html(); - } - }; - - Chosen.prototype.winnow_results_set_highlight = function() { - var do_high, selected_results; - selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; - do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); - if (do_high != null) { - return this.result_do_highlight(do_high); - } - }; - - Chosen.prototype.no_results = function(terms) { - var no_results_html; - no_results_html = $('
    • ' + this.results_none_found + ' ""
    • '); - no_results_html.find("span").first().html(terms); - this.search_results.append(no_results_html); - return this.form_field_jq.trigger("chosen:no_results", { - chosen: this - }); - }; - - Chosen.prototype.no_results_clear = function() { - return this.search_results.find(".no-results").remove(); - }; - - Chosen.prototype.keydown_arrow = function() { - var next_sib; - if (this.results_showing && this.result_highlight) { - next_sib = this.result_highlight.nextAll("li.active-result").first(); - if (next_sib) { - return this.result_do_highlight(next_sib); - } - } else { - return this.results_show(); - } - }; - - Chosen.prototype.keyup_arrow = function() { - var prev_sibs; - if (!this.results_showing && !this.is_multiple) { - return this.results_show(); - } else if (this.result_highlight) { - prev_sibs = this.result_highlight.prevAll("li.active-result"); - if (prev_sibs.length) { - return this.result_do_highlight(prev_sibs.first()); - } else { - if (this.choices_count() > 0) { - this.results_hide(); - } - return this.result_clear_highlight(); - } - } - }; - - Chosen.prototype.keydown_backstroke = function() { - var next_available_destroy; - if (this.pending_backstroke) { - this.choice_destroy(this.pending_backstroke.find("a").first()); - return this.clear_backstroke(); - } else { - next_available_destroy = this.search_container.siblings("li.search-choice").last(); - if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { - this.pending_backstroke = next_available_destroy; - if (this.single_backstroke_delete) { - return this.keydown_backstroke(); - } else { - return this.pending_backstroke.addClass("search-choice-focus"); - } - } - } - }; - - Chosen.prototype.clear_backstroke = function() { - if (this.pending_backstroke) { - this.pending_backstroke.removeClass("search-choice-focus"); - } - return this.pending_backstroke = null; - }; - - Chosen.prototype.keydown_checker = function(evt) { - var stroke, _ref1; - stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; - this.search_field_scale(); - if (stroke !== 8 && this.pending_backstroke) { - this.clear_backstroke(); - } - switch (stroke) { - case 8: - this.backstroke_length = this.search_field.val().length; - break; - case 9: - if (this.results_showing && !this.is_multiple) { - this.result_select(evt); - } - this.mouse_on_container = false; - break; - case 13: - evt.preventDefault(); - break; - case 38: - evt.preventDefault(); - this.keyup_arrow(); - break; - case 40: - evt.preventDefault(); - this.keydown_arrow(); - break; - } - }; - - Chosen.prototype.search_field_scale = function() { - var div, f_width, h, style, style_block, styles, w, _i, _len; - if (this.is_multiple) { - h = 0; - w = 0; - style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; - styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; - for (_i = 0, _len = styles.length; _i < _len; _i++) { - style = styles[_i]; - style_block += style + ":" + this.search_field.css(style) + ";"; - } - div = $('
      ', { - 'style': style_block - }); - div.text(this.search_field.val()); - $('body').append(div); - w = div.width() + 25; - div.remove(); - f_width = this.container.outerWidth(); - if (w > f_width - 10) { - w = f_width - 10; - } - return this.search_field.css({ - 'width': w + 'px' - }); - } - }; - - return Chosen; - - })(AbstractChosen); - -}).call(this); diff --git a/static/js/plugins/fullcalendar/fullcalendar.min.js b/static/js/plugins/fullcalendar/fullcalendar.min.js deleted file mode 100644 index fcbf126f1..000000000 --- a/static/js/plugins/fullcalendar/fullcalendar.min.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! - * FullCalendar v2.2.0 - * Docs & License: http://arshaw.com/fullcalendar/ - * (c) 2013 Adam Shaw - */ -(function(t){"function"==typeof define&&define.amd?define(["jquery","moment"],t):t(jQuery,moment)})(function(t,e){function n(t,e){return e.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"t")}function i(t,e){var n=e.longDateFormat("L");return n=n.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g,""),t.isRTL?n+=" ddd":n="ddd "+n,n}function r(t){s(Fe,t)}function s(e){function n(n,i){t.isPlainObject(i)&&t.isPlainObject(e[n])&&!o(n)?e[n]=s({},e[n],i):void 0!==i&&(e[n]=i)}for(var i=1;arguments.length>i;i++)t.each(arguments[i],n);return e}function o(t){return/(Time|Duration)$/.test(t)}function l(n,i){function r(t){var n=e.localeData||e.langData;return n.call(e,t)||n.call(e,"en")}function o(t){ne?u()&&(p(),f(t)):l()}function l(){ie=K.theme?"ui":"fc",n.addClass("fc"),K.isRTL?n.addClass("fc-rtl"):n.addClass("fc-ltr"),K.theme?n.addClass("ui-widget"):n.addClass("fc-unthemed"),ne=t("
      ").prependTo(n),te=new a(q,K),ee=te.render(),ee&&n.prepend(ee),h(K.defaultView),K.handleWindowResize&&(oe=_(v,K.windowResizeDelay),t(window).resize(oe))}function d(){re&&re.destroy(),te.destroy(),ne.remove(),n.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),t(window).unbind("resize",oe)}function u(){return n.is(":visible")}function h(t){f(0,t)}function f(e,n){ue++,re&&n&&re.name!==n&&(te.deactivateButton(re.name),B(),re.start&&re.destroy(),re.el.remove(),re=null),!re&&n&&(re=new Ge[n](q),re.el=t("
      ").appendTo(ne),te.activateButton(n)),re&&(e&&(le=re.incrementDate(le,e)),re.start&&!e&&le.isWithin(re.intervalStart,re.intervalEnd)||u()&&(B(),re.start&&re.destroy(),re.render(le),I(),C(),H(),b())),I(),ue--}function g(t){return u()?(t&&m(),ue++,re.updateSize(!0),ue--,!0):void 0}function p(){u()&&m()}function m(){se="number"==typeof K.contentHeight?K.contentHeight:"number"==typeof K.height?K.height-(ee?ee.outerHeight(!0):0):Math.round(ne.width()/Math.max(K.aspectRatio,.5))}function v(t){!ue&&t.target===window&&re.start&&g(!0)&&re.trigger("windowResize",de)}function y(){S(),E()}function w(){u()&&(B(),re.destroyEvents(),re.renderEvents(he),I())}function S(){B(),re.destroyEvents(),I()}function b(){!K.lazyFetching||ae(re.start,re.end)?E():w()}function E(){ce(re.start,re.end)}function D(t){he=t,w()}function T(){w()}function C(){te.updateTitle(re.title)}function H(){var t=q.getNow();t.isWithin(re.intervalStart,re.intervalEnd)?te.disableButton("today"):te.enableButton("today")}function x(t,e){t=q.moment(t),e=e?q.moment(e):t.hasTime()?t.clone().add(q.defaultTimedEventDuration):t.clone().add(q.defaultAllDayEventDuration),re.select(t,e)}function k(){re&&re.unselect()}function R(){f(-1)}function P(){f(1)}function F(){le.add(-1,"years"),f()}function L(){le.add(1,"years"),f()}function G(){le=q.getNow(),f()}function N(t){le=q.moment(t),f()}function A(t){le.add(e.duration(t)),f()}function Y(t,e){var n,i;e&&void 0!==Ge[e]||(e=e||"day",n=te.getViewsWithButtons().join(" "),i=n.match(RegExp("\\w+"+z(e))),i||(i=n.match(/\w+Day/)),e=i?i[0]:"agendaDay"),le=t,h(e)}function V(){return le.clone()}function B(){ne.css({width:"100%",height:ne.height(),overflow:"hidden"})}function I(){ne.css({width:"",height:"",overflow:""})}function Z(){return q}function j(){return re}function X(t,e){return void 0===e?K[t]:(("height"==t||"contentHeight"==t||"aspectRatio"==t)&&(K[t]=e,g(!0)),void 0)}function $(t,e){return K[t]?K[t].apply(e||de,Array.prototype.slice.call(arguments,2)):void 0}var q=this;i=i||{};var U,K=s({},Fe,i);U=K.lang in Le?Le[K.lang]:Le[Fe.lang],U&&(K=s({},Fe,U,i)),K.isRTL&&(K=s({},Fe,ze,U||{},i)),q.options=K,q.render=o,q.destroy=d,q.refetchEvents=y,q.reportEvents=D,q.reportEventChange=T,q.rerenderEvents=w,q.changeView=h,q.select=x,q.unselect=k,q.prev=R,q.next=P,q.prevYear=F,q.nextYear=L,q.today=G,q.gotoDate=N,q.incrementDate=A,q.zoomTo=Y,q.getDate=V,q.getCalendar=Z,q.getView=j,q.option=X,q.trigger=$;var Q=M(r(K.lang));if(K.monthNames&&(Q._months=K.monthNames),K.monthNamesShort&&(Q._monthsShort=K.monthNamesShort),K.dayNames&&(Q._weekdays=K.dayNames),K.dayNamesShort&&(Q._weekdaysShort=K.dayNamesShort),null!=K.firstDay){var J=M(Q._week);J.dow=K.firstDay,Q._week=J}q.defaultAllDayEventDuration=e.duration(K.defaultAllDayEventDuration),q.defaultTimedEventDuration=e.duration(K.defaultTimedEventDuration),q.moment=function(){var t;return"local"===K.timezone?(t=_e.moment.apply(null,arguments),t.hasTime()&&t.local()):t="UTC"===K.timezone?_e.moment.utc.apply(null,arguments):_e.moment.parseZone.apply(null,arguments),"_locale"in t?t._locale=Q:t._lang=Q,t},q.getIsAmbigTimezone=function(){return"local"!==K.timezone&&"UTC"!==K.timezone},q.rezoneDate=function(t){return q.moment(t.toArray())},q.getNow=function(){var t=K.now;return"function"==typeof t&&(t=t()),q.moment(t)},q.calculateWeekNumber=function(t){var e=K.weekNumberCalculation;return"function"==typeof e?e(t):"local"===e?t.week():"ISO"===e.toUpperCase()?t.isoWeek():void 0},q.getEventEnd=function(t){return t.end?t.end.clone():q.getDefaultEventEnd(t.allDay,t.start)},q.getDefaultEventEnd=function(t,e){var n=e.clone();return t?n.stripTime().add(q.defaultAllDayEventDuration):n.add(q.defaultTimedEventDuration),q.getIsAmbigTimezone()&&n.stripZone(),n},q.formatRange=function(t,e,n){return"function"==typeof n&&(n=n.call(q,K,Q)),W(t,e,n,null,K.isRTL)},q.formatDate=function(t,e){return"function"==typeof e&&(e=e.call(q,K,Q)),O(t,e)},c.call(q,K);var te,ee,ne,ie,re,se,oe,le,ae=q.isFetchNeeded,ce=q.fetchEvents,de=n[0],ue=0,he=[];le=null!=K.defaultDate?q.moment(K.defaultDate):q.getNow(),q.getSuggestedViewHeight=function(){return void 0===se&&p(),se},q.isHeightAuto=function(){return"auto"===K.contentHeight||"auto"===K.height}}function a(e,n){function i(){var e=n.header;return f=n.theme?"ui":"fc",e?g=t("
      ").append(s("left")).append(s("right")).append(s("center")).append('
      '):void 0}function r(){g.remove()}function s(i){var r=t('
      '),s=n.header[i];return s&&t.each(s.split(" "),function(){var i,s=t(),o=!0;t.each(this.split(","),function(i,r){var l,a,c,d,u,h,g,m;"title"==r?(s=s.add(t("

       

      ")),o=!1):(e[r]?l=function(){e[r]()}:Ge[r]&&(l=function(){e.changeView(r)},p.push(r)),l&&(a=T(n.themeButtonIcons,r),c=T(n.buttonIcons,r),d=T(n.defaultButtonText,r),u=T(n.buttonText,r),h=u?F(u):a&&n.theme?"":c&&!n.theme?"":F(d||r),g=["fc-"+r+"-button",f+"-button",f+"-state-default"],m=t('").click(function(){m.hasClass(f+"-state-disabled")||(l(),(m.hasClass(f+"-state-active")||m.hasClass(f+"-state-disabled"))&&m.removeClass(f+"-state-hover"))}).mousedown(function(){m.not("."+f+"-state-active").not("."+f+"-state-disabled").addClass(f+"-state-down")}).mouseup(function(){m.removeClass(f+"-state-down")}).hover(function(){m.not("."+f+"-state-active").not("."+f+"-state-disabled").addClass(f+"-state-hover")},function(){m.removeClass(f+"-state-hover").removeClass(f+"-state-down")}),s=s.add(m)))}),o&&s.first().addClass(f+"-corner-left").end().last().addClass(f+"-corner-right").end(),s.length>1?(i=t("
      "),o&&i.addClass("fc-button-group"),i.append(s),r.append(i)):r.append(s)}),r}function o(t){g.find("h2").text(t)}function l(t){g.find(".fc-"+t+"-button").addClass(f+"-state-active")}function a(t){g.find(".fc-"+t+"-button").removeClass(f+"-state-active")}function c(t){g.find(".fc-"+t+"-button").attr("disabled","disabled").addClass(f+"-state-disabled")}function d(t){g.find(".fc-"+t+"-button").removeAttr("disabled").removeClass(f+"-state-disabled")}function u(){return p}var h=this;h.render=i,h.destroy=r,h.updateTitle=o,h.activateButton=l,h.deactivateButton=a,h.disableButton=c,h.enableButton=d,h.getViewsWithButtons=u;var f,g=t(),p=[]}function c(n){function i(t,e){return!A||t.clone().stripZone()Y.clone().stripZone()}function r(t,e){A=t,Y=e,q=[];var n=++j,i=Z.length;X=i;for(var r=0;i>r;r++)s(Z[r],n)}function s(e,n){o(e,function(i){var r,s,o,l=t.isArray(e.events);if(n==j){if(i)for(r=0;i.length>r;r++)s=i[r],o=l?s:S(s,e),o&&q.push.apply(q,E(o));X--,X||B(q)}})}function o(e,i){var r,s,l=_e.sourceFetchers;for(r=0;l.length>r;r++){if(s=l[r].call(N,e,A.clone(),Y.clone(),n.timezone,i),s===!0)return;if("object"==typeof s)return o(s,i),void 0}var a=e.events;if(a)t.isFunction(a)?(y(),a.call(N,A.clone(),Y.clone(),n.timezone,function(t){i(t),w()})):t.isArray(a)?i(a):i();else{var c=e.url;if(c){var d,u=e.success,h=e.error,f=e.complete;d=t.isFunction(e.data)?e.data():e.data;var g=t.extend({},d||{}),p=P(e.startParam,n.startParam),m=P(e.endParam,n.endParam),v=P(e.timezoneParam,n.timezoneParam);p&&(g[p]=A.format()),m&&(g[m]=Y.format()),n.timezone&&"local"!=n.timezone&&(g[v]=n.timezone),y(),t.ajax(t.extend({},Ne,e,{data:g,success:function(e){e=e||[];var n=R(u,this,arguments);t.isArray(n)&&(e=n),i(e)},error:function(){R(h,this,arguments),i()},complete:function(){R(f,this,arguments),w()}}))}else i()}}function l(t){var e=a(t);e&&(Z.push(e),X++,s(e,j))}function a(e){var n,i,r=_e.sourceNormalizers;if(t.isFunction(e)||t.isArray(e)?n={events:e}:"string"==typeof e?n={url:e}:"object"==typeof e&&(n=t.extend({},e)),n){for(n.className?"string"==typeof n.className&&(n.className=n.className.split(/\s+/)):n.className=[],t.isArray(n.events)&&(n.origArray=n.events,n.events=t.map(n.events,function(t){return S(t,n)})),i=0;r.length>i;i++)r[i].call(N,n);return n}}function c(e){Z=t.grep(Z,function(t){return!u(t,e)}),q=t.grep(q,function(t){return!u(t.source,e)}),B(q)}function u(t,e){return t&&e&&h(t)==h(e)}function h(t){return("object"==typeof t?t.origArray||t.url||t.events:null)||t}function f(t){t.start=N.moment(t.start),t.end&&(t.end=N.moment(t.end)),D(t),g(t),B(q)}function g(t){var e,n,i,r;for(e=0;q.length>e;e++)if(n=q[e],n._id==t._id&&n!==t)for(i=0;U.length>i;i++)r=U[i],void 0!==t[r]&&(n[r]=t[r])}function p(t,e){var n,i,r,s=S(t);if(s){for(n=E(s),i=0;n.length>i;i++)r=n[i],r.source||(e&&(W.events.push(r),r.source=W),q.push(r));return B(q),n}return[]}function m(e){var n,i;for(null==e?e=function(){return!0}:t.isFunction(e)||(n=e+"",e=function(t){return t._id==n}),q=t.grep(q,e,!0),i=0;Z.length>i;i++)t.isArray(Z[i].events)&&(Z[i].events=t.grep(Z[i].events,e,!0));B(q)}function v(e){return t.isFunction(e)?t.grep(q,e):null!=e?(e+="",t.grep(q,function(t){return t._id==e})):q}function y(){$++||V("loading",null,!0,O())}function w(){--$||V("loading",null,!1,O())}function S(i,r){var s,o,l,a,c={};if(n.eventDataTransform&&(i=n.eventDataTransform(i)),r&&r.eventDataTransform&&(i=r.eventDataTransform(i)),t.extend(c,i),r&&(c.source=r),c._id=i._id||(void 0===i.id?"_fc"+Ae++:i.id+""),c.className=i.className?"string"==typeof i.className?i.className.split(/\s+/):i.className:[],s=i.start||i.date,o=i.end,k(s)&&(s=e.duration(s)),k(o)&&(o=e.duration(o)),i.dow||e.isDuration(s)||e.isDuration(o))c.start=s?e.duration(s):null,c.end=o?e.duration(o):null,c._recurring=!0;else{if(s&&(s=N.moment(s),!s.isValid()))return!1;if(o&&(o=N.moment(o),!o.isValid()))return!1;l=i.allDay,void 0===l&&(a=P(r?r.allDayDefault:void 0,n.allDayDefault),l=void 0!==a?a:!(s.hasTime()||o&&o.hasTime())),b(s,o,l,c)}return c}function b(t,e,i,r){i?(t.hasTime()&&t.stripTime(),e&&e.hasTime()&&e.stripTime()):(t.hasTime()||(t=N.rezoneDate(t)),e&&!e.hasTime()&&(e=N.rezoneDate(e))),r.allDay=i,r.start=t,r.end=e||null,n.forceEventDuration&&!r.end&&(r.end=I(r)),d(r)}function E(e){var n,i,r,s,o,l,a,c,d,u,h=[],f=A,g=Y;if(f&&g||(n=N.getView(),f=n.start,g=n.end),e)if(e._recurring){if(r=e.dow)for(i={},s=0;r.length>s;s++)i[r[s]]=!0;for(o=f.clone().stripTime();o.isBefore(g);)(!i||i[o.day()])&&(l=e.start,a=e.end,c=o.clone(),d=null,l&&(c=c.time(l)),a&&(d=o.clone().time(a)),u=t.extend({},e),b(c,d,!l&&!a,u),h.push(u)),o.add(1,"days")}else h.push(e);return h}function D(t,e,n){var i,r,s,o,l=t._allDay,a=t._start,c=t._end,d=!1;return e||n||(e=t.start,n=t.end),i=t.allDay!=l?t.allDay:!(e||n).hasTime(),i&&(e&&(e=e.clone().stripTime()),n&&(n=n.clone().stripTime())),e&&(r=i?C(e,a.clone().stripTime()):C(e,a)),i!=l?d=!0:n&&(s=C(n||N.getDefaultEventEnd(i,e||a),e||a).subtract(C(c||N.getDefaultEventEnd(l,a),a))),o=T(v(t._id),d,i,r,s),{dateDelta:r,durationDelta:s,undo:o}}function T(e,i,r,s,o){var l=N.getIsAmbigTimezone(),a=[];return t.each(e,function(t,e){var c=e._allDay,u=e._start,h=e._end,f=null!=r?r:c,g=u.clone(),p=!i&&h?h.clone():null;f?(g.stripTime(),p&&p.stripTime()):(g.hasTime()||(g=N.rezoneDate(g)),p&&!p.hasTime()&&(p=N.rezoneDate(p))),p||!n.forceEventDuration&&!+o||(p=N.getDefaultEventEnd(f,g)),g.add(s),p&&p.add(s).add(o),l&&(+s||+o)&&(g.stripZone(),p&&p.stripZone()),e.allDay=f,e.start=g,e.end=p,d(e),a.push(function(){e.allDay=c,e.start=u,e.end=h,d(e)})}),function(){for(var t=0;a.length>t;t++)a[t]()}}function H(){var e,i=n.businessHours,r={className:"fc-nonbusiness",start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"};return i&&(e="object"==typeof i?t.extend({},r,i):r),e?E(S(e)):[]}function x(t,e,i){var r=t.source||{},s=P(t.constraint,r.constraint,n.eventConstraint),o=P(t.overlap,r.overlap,n.eventOverlap);return L(e,i,s,o,t)}function M(t,e){return L(t,e,n.selectConstraint,n.selectOverlap)}function F(t,e,n){var i;return n&&(i=E(S(n))[0])?x(i,t,e):M(t,e)}function L(t,e,n,i,r){var s,o,l,a,c;if(t=t.clone().stripZone(),e=e.clone().stripZone(),null!=n){for(s=z(n),o=!1,l=0;s.length>l;l++)if(_(s[l],t,e)){o=!0;break}if(!o)return!1}for(l=0;q.length>l;l++)if(a=q[l],(!r||r._id!==a._id)&&G(a,t,e)){if(i===!1)return!1;if("function"==typeof i&&!i(a,r))return!1;if(r){if(c=P(a.overlap,(a.source||{}).overlap),c===!1)return!1;if("function"==typeof c&&!c(r,a))return!1}}return!0}function z(t){return"businessHours"===t?H():"object"==typeof t?E(S(t)):v(t)}function _(t,e,n){var i=t.start.clone().stripZone(),r=N.getEventEnd(t).stripZone();return e>=i&&r>=n}function G(t,e,n){var i=t.start.clone().stripZone(),r=N.getEventEnd(t).stripZone();return r>e&&n>i}var N=this;N.isFetchNeeded=i,N.fetchEvents=r,N.addEventSource=l,N.removeEventSource=c,N.updateEvent=f,N.renderEvent=p,N.removeEvents=m,N.clientEvents=v,N.mutateEvent=D;var A,Y,V=N.trigger,O=N.getView,B=N.reportEvents,I=N.getEventEnd,W={events:[]},Z=[W],j=0,X=0,$=0,q=[];t.each((n.events?[n.events]:[]).concat(n.eventSources||[]),function(t,e){var n=a(e);n&&Z.push(n)});var U=["title","url","allDay","className","editable","color","backgroundColor","borderColor","textColor"];N.getBusinessHoursEvents=H,N.isEventAllowedInRange=x,N.isSelectionAllowedInRange=M,N.isExternalDragAllowedInRange=F}function d(t){t._allDay=t.allDay,t._start=t.start.clone(),t._end=t.end?t.end.clone():null}function u(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function h(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function f(){t("body").addClass("fc-not-allowed")}function g(){t("body").removeClass("fc-not-allowed")}function p(e,n,i){var r=Math.floor(n/e.length),s=Math.floor(n-r*(e.length-1)),o=[],l=[],a=[],c=0;m(e),e.each(function(n,i){var d=n===e.length-1?s:r,u=t(i).outerHeight(!0);d>u?(o.push(i),l.push(u),a.push(t(i).height())):c+=u}),i&&(n-=c,r=Math.floor(n/o.length),s=Math.floor(n-r*(o.length-1))),t(o).each(function(e,n){var i=e===o.length-1?s:r,c=l[e],d=a[e],u=i-(c-d);i>c&&t(n).height(u)})}function m(t){t.height("")}function v(e){var n=0;return e.find("> *").each(function(e,i){var r=t(i).outerWidth();r>n&&(n=r)}),n++,e.width(n),n}function y(t,e){return t.height(e).addClass("fc-scroller"),t[0].scrollHeight-1>t[0].clientHeight?!0:(w(t),!1)}function w(t){t.height("").removeClass("fc-scroller")}function S(e){var n=e.css("position"),i=e.parents().filter(function(){var e=t(this);return/(auto|scroll)/.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&i.length?i:t(e[0].ownerDocument||document)}function b(t){var e=t.offset().left,n=e+t.width(),i=t.children(),r=i.offset().left,s=r+i.outerWidth();return{left:r-e,right:n-s}}function E(t){return 1==t.which&&!t.ctrlKey}function D(t,e,n,i){var r,s,o,l;return e>n&&i>t?(t>=n?(r=t.clone(),o=!0):(r=n.clone(),o=!1),i>=e?(s=e.clone(),l=!0):(s=i.clone(),l=!1),{start:r,end:s,isStart:o,isEnd:l}):void 0}function T(t,e){if(t=t||{},void 0!==t[e])return t[e];for(var n,i=e.split(/(?=[A-Z])/),r=i.length-1;r>=0;r--)if(n=t[i[r].toLowerCase()],void 0!==n)return n;return t["default"]}function C(t,n){return e.duration({days:t.clone().stripTime().diff(n.clone().stripTime(),"days"),ms:t.time()-n.time()})}function H(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function x(t,e){return t-e}function k(t){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function M(t){var e=function(){};return e.prototype=t,new e}function R(e,n,i){if(t.isFunction(e)&&(e=[e]),e){var r,s;for(r=0;e.length>r;r++)s=e[r].apply(n,i)||s;return s}}function P(){for(var t=0;arguments.length>t;t++)if(void 0!==arguments[t])return arguments[t]}function F(t){return(t+"").replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
      ")}function L(t){return t.replace(/&.*?;/g,"")}function z(t){return t.charAt(0).toUpperCase()+t.slice(1)}function _(t,e){var n,i,r,s,o=function(){var l=+new Date-s;e>l&&l>0?n=setTimeout(o,e-l):(n=null,t.apply(r,i),n||(r=i=null))};return function(){r=this,i=arguments,s=+new Date,n||(n=setTimeout(o,e))}}function G(n,i,r){var s,o,l,a,c=n[0],d=1==n.length&&"string"==typeof c;return e.isMoment(c)?(a=e.apply(null,n),A(c,a)):H(c)||void 0===c?a=e.apply(null,n):(s=!1,o=!1,d?Ie.test(c)?(c+="-01",n=[c],s=!0,o=!0):(l=We.exec(c))&&(s=!l[5],o=!0):t.isArray(c)&&(o=!0),a=i?e.utc.apply(e,n):e.apply(null,n),s?(a._ambigTime=!0,a._ambigZone=!0):r&&(o?a._ambigZone=!0:d&&a.zone(c))),a._fullCalendar=!0,a}function N(t,e){var n,i=[],r=!1,s=!1;for(n=0;t.length>n;n++)i.push(_e.moment.parseZone(t[n])),r=r||i[n]._ambigTime,s=s||i[n]._ambigZone;for(n=0;i.length>n;n++)r&&!e?i[n].stripTime():s&&i[n].stripZone();return i}function A(t,e){t._ambigTime?e._ambigTime=!0:e._ambigTime&&(e._ambigTime=!1),t._ambigZone?e._ambigZone=!0:e._ambigZone&&(e._ambigZone=!1)}function Y(t,e){t.year(e[0]||0).month(e[1]||0).date(e[2]||0).hours(e[3]||0).minutes(e[4]||0).seconds(e[5]||0).milliseconds(e[6]||0)}function V(t,e){return je.format.call(t,e)}function O(t,e){return B(t,X(e))}function B(t,e){var n,i="";for(n=0;e.length>n;n++)i+=I(t,e[n]);return i}function I(t,e){var n,i;return"string"==typeof e?e:(n=e.token)?Xe[n]?Xe[n](t):V(t,n):e.maybe&&(i=B(t,e.maybe),i.match(/[1-9]/))?i:""}function W(t,e,n,i,r){var s;return t=_e.moment.parseZone(t),e=_e.moment.parseZone(e),s=(t.localeData||t.lang).call(t),n=s.longDateFormat(n)||n,i=i||" - ",Z(t,e,X(n),i,r)}function Z(t,e,n,i,r){var s,o,l,a,c="",d="",u="",h="",f="";for(o=0;n.length>o&&(s=j(t,e,n[o]),s!==!1);o++)c+=s;for(l=n.length-1;l>o&&(s=j(t,e,n[l]),s!==!1);l--)d=s+d;for(a=o;l>=a;a++)u+=I(t,n[a]),h+=I(e,n[a]);return(u||h)&&(f=r?h+i+u:u+i+h),c+f+d}function j(t,e,n){var i,r;return"string"==typeof n?n:(i=n.token)&&(r=$e[i.charAt(0)],r&&t.isSame(e,r))?V(t,i):!1}function X(t){return t in qe?qe[t]:qe[t]=$(t)}function $(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push(e[1]):e[2]?n.push({maybe:$(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push(e[5]);return n}function q(t){this.options=t||{}}function U(t){this.grid=t}function K(t){this.coordMaps=t}function Q(t,e){this.coordMap=t,this.options=e||{}}function J(t,e){return t||e?t&&e?t.grid===e.grid&&t.row===e.row&&t.col===e.col:!1:!0}function te(e,n){this.options=n=n||{},this.sourceEl=e,this.parentEl=n.parentEl?t(n.parentEl):e.parent()}function ee(t){this.view=t}function ne(t){ee.call(this,t),this.coordMap=new U(this),this.elsByFill={}}function ie(t){var e=se(t);return"background"===e||"inverse-background"===e}function re(t){return"inverse-background"===se(t)}function se(t){return P((t.source||{}).rendering,t.rendering)}function oe(t){var e,n,i={};for(e=0;t.length>e;e++)n=t[e],(i[n._id]||(i[n._id]=[])).push(n);return i}function le(t,e){return t.eventStartMS-e.eventStartMS}function ae(t,e){return t.eventStartMS-e.eventStartMS||e.eventDurationMS-t.eventDurationMS||e.event.allDay-t.event.allDay||(t.event.title||"").localeCompare(e.event.title)}function ce(t){ne.call(this,t)}function de(t,e){var n,i;for(n=0;e.length>n;n++)if(i=e[n],i.leftCol<=t.rightCol&&i.rightCol>=t.leftCol)return!0;return!1}function ue(t,e){return t.leftCol-e.leftCol}function he(t){ne.call(this,t)}function fe(t){var e,n,i;if(t.sort(ae),e=ge(t),pe(e),n=e[0]){for(i=0;n.length>i;i++)me(n[i]);for(i=0;n.length>i;i++)ve(n[i],0,0)}}function ge(t){var e,n,i,r=[];for(e=0;t.length>e;e++){for(n=t[e],i=0;r.length>i&&ye(n,r[i]).length;i++);n.level=i,(r[i]||(r[i]=[])).push(n)}return r}function pe(t){var e,n,i,r,s;for(e=0;t.length>e;e++)for(n=t[e],i=0;n.length>i;i++)for(r=n[i],r.forwardSegs=[],s=e+1;t.length>s;s++)ye(r,t[s],r.forwardSegs)}function me(t){var e,n,i=t.forwardSegs,r=0;if(void 0===t.forwardPressure){for(e=0;i.length>e;e++)n=i[e],me(n),r=Math.max(r,1+n.forwardPressure);t.forwardPressure=r}}function ve(t,e,n){var i,r=t.forwardSegs;if(void 0===t.forwardCoord)for(r.length?(r.sort(Se),ve(r[0],e+1,n),t.forwardCoord=r[0].backwardCoord):t.forwardCoord=1,t.backwardCoord=t.forwardCoord-(t.forwardCoord-n)/(e+1),i=0;r.length>i;i++)ve(r[i],0,t.forwardCoord)}function ye(t,e,n){n=n||[];for(var i=0;e.length>i;i++)we(t,e[i])&&n.push(e[i]);return n}function we(t,e){return t.bottom>e.top&&t.topd;d++){var u=d*i,h=u+i-1,f=Math.max(a,u),g=Math.min(c,h);if(g>=f){var m=S(f),v=S(g),b=[m.col,v.col].sort(),D=p(f)==o,T=p(g)+1==l;r.push({row:d,leftCol:b[0],rightCol:b[1],isStart:D,isEnd:T})}}return r}function E(t,e){var n,i,r=t.clone().stripTime();return e&&(n=e.clone().stripTime(),i=+e.time(),i&&i>=k&&n.add(1,"days")),(!e||r>=n)&&(n=r.clone().add(1,"days")),{start:r,end:n}}function D(t){var e=E(t.start,t.end);return e.end.diff(e.start,"days")>1}var C=this;C.calendar=n,C.opt=i,C.trigger=r,C.isEventDraggable=s,C.isEventResizable=l,C.eventDrop=a,C.eventResize=c;var H=n.reportEventChange,x=n.options,k=e.duration(x.nextDayThreshold);C.init(),C.getEventTimeText=function(t,e){var r,s;return"object"==typeof t&&"object"==typeof e?(r=t,s=e,e=arguments[2]):(r=t.start,s=t.end),e=e||i("timeFormat"),s&&i("displayEventEnd")?n.formatRange(r,s,e):n.formatDate(r,e)},C.isHiddenDay=d,C.skipHiddenDays=h,C.getCellsPerWeek=u,C.dateToCell=v,C.dateToDayOffset=y,C.dayOffsetToCellOffset=w,C.cellOffsetToCell=S,C.cellToDate=f,C.cellToCellOffset=g,C.cellOffsetToDayOffset=p,C.dayOffsetToDate=m,C.rangeToSegments=b,C.isMultiDayEvent=D;var M,R=i("hiddenDays")||[],F=[],L=[],z=[],_=i("isRTL");(function(){i("weekends")===!1&&R.push(0,6);for(var e=0,n=0;7>e;e++)L[e]=n,F[e]=-1!=t.inArray(e,R),F[e]||(z[n]=e,n++);if(M=n,!M)throw"invalid hiddenDays"})()}function Ee(n){var i,r,s,o,l=_e.dataAttrPrefix;return l&&(l+="-"),i=n.data(l+"event")||null,i&&(i="object"==typeof i?t.extend({},i):{},r=i.start,null==r&&(r=i.time),s=i.duration,o=i.stick,delete i.start,delete i.time,delete i.duration,delete i.stick),null==r&&(r=n.data(l+"start")),null==r&&(r=n.data(l+"time")),null==s&&(s=n.data(l+"duration")),null==o&&(o=n.data(l+"stick")),r=null!=r?e.duration(r):null,s=null!=s?e.duration(s):null,o=Boolean(o),{eventProps:i,startTime:r,duration:s,stick:o}}function De(t){be.call(this,t),this.dayGrid=new ce(this),this.coordMap=this.dayGrid.coordMap}function Te(t){De.call(this,t)}function Ce(t){De.call(this,t)}function He(t){De.call(this,t)}function xe(t,e){return e.longDateFormat("LT").replace(":mm","(:mm)").replace(/(\Wmm)$/,"($1)").replace(/\s*a$/i,"a")}function ke(t,e){return e.longDateFormat("LT").replace(/\s*a$/i,"")}function Me(t){be.call(this,t),this.timeGrid=new he(this),this.opt("allDaySlot")?(this.dayGrid=new ce(this),this.coordMap=new K([this.dayGrid.coordMap,this.timeGrid.coordMap])):this.coordMap=this.timeGrid.coordMap}function Re(t){Me.call(this,t)}function Pe(t){Me.call(this,t)}var Fe={lang:"en",defaultTimedEventDuration:"02:00:00",defaultAllDayEventDuration:{days:1},forceEventDuration:!1,nextDayThreshold:"09:00:00",defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberTitle:"W",weekNumberCalculation:"local",lazyFetching:!0,startParam:"start",endParam:"end",timezoneParam:"timezone",timezone:!1,titleFormat:{month:"MMMM YYYY",week:"ll",day:"LL"},columnFormat:{month:"ddd",week:i,day:"dddd"},timeFormat:{"default":n},displayEventEnd:{month:!1,basicWeek:!1,"default":!0},isRTL:!1,defaultButtonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",today:"today",month:"month",week:"week",day:"day"},buttonIcons:{prev:"left-single-arrow",next:"right-single-arrow",prevYear:"left-double-arrow",nextYear:"right-double-arrow"},theme:!1,themeButtonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e",prevYear:"seek-prev",nextYear:"seek-next"},dragOpacity:.75,dragRevertDuration:500,dragScroll:!0,unselectAuto:!0,dropAccept:"*",eventLimit:!1,eventLimitText:"more",eventLimitClick:"popover",dayPopoverFormat:"LL",handleWindowResize:!0,windowResizeDelay:200},Le={en:{columnFormat:{week:"ddd M/D"},dayPopoverFormat:"dddd, MMMM D"}},ze={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"right-single-arrow",next:"left-single-arrow",prevYear:"right-double-arrow",nextYear:"left-double-arrow"},themeButtonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w",nextYear:"seek-prev",prevYear:"seek-next"}},_e=t.fullCalendar={version:"2.2.0"},Ge=_e.views={};t.fn.fullCalendar=function(e){var n=Array.prototype.slice.call(arguments,1),i=this;return this.each(function(r,s){var o,a=t(s),c=a.data("fullCalendar");"string"==typeof e?c&&t.isFunction(c[e])&&(o=c[e].apply(c,n),r||(i=o),"destroy"===e&&a.removeData("fullCalendar")):c||(c=new l(a,e),a.data("fullCalendar",c),c.render())}),i},_e.langs=Le,_e.datepickerLang=function(e,n,i){var r=Le[e];r||(r=Le[e]={}),s(r,{isRTL:i.isRTL,weekNumberTitle:i.weekHeader,titleFormat:{month:i.showMonthAfterYear?"YYYY["+i.yearSuffix+"] MMMM":"MMMM YYYY["+i.yearSuffix+"]"},defaultButtonText:{prev:L(i.prevText),next:L(i.nextText),today:L(i.currentText)}}),t.datepicker&&(t.datepicker.regional[n]=t.datepicker.regional[e]=i,t.datepicker.regional.en=t.datepicker.regional[""],t.datepicker.setDefaults(i))},_e.lang=function(t,e){var n;e&&(n=Le[t],n||(n=Le[t]={}),s(n,e||{})),Fe.lang=t},_e.sourceNormalizers=[],_e.sourceFetchers=[];var Ne={dataType:"json",cache:!1},Ae=1,Ye=["sun","mon","tue","wed","thu","fri","sat"];_e.applyAll=R;var Ve,Oe,Be,Ie=/^\s*\d{4}-\d\d$/,We=/^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?)?$/,Ze=e.fn,je=t.extend({},Ze);_e.moment=function(){return G(arguments)},_e.moment.utc=function(){var t=G(arguments,!0);return t.hasTime()&&t.utc(),t},_e.moment.parseZone=function(){return G(arguments,!0,!0)},Ze.clone=function(){var t=je.clone.apply(this,arguments);return A(this,t),this._fullCalendar&&(t._fullCalendar=!0),t},Ze.time=function(t){if(!this._fullCalendar)return je.time.apply(this,arguments);if(null==t)return e.duration({hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()});this._ambigTime=!1,e.isDuration(t)||e.isMoment(t)||(t=e.duration(t));var n=0;return e.isDuration(t)&&(n=24*Math.floor(t.asDays())),this.hours(n+t.hours()).minutes(t.minutes()).seconds(t.seconds()).milliseconds(t.milliseconds())},Ze.stripTime=function(){var t=this.toArray();return this.utc(),Oe(this,t.slice(0,3)),this._ambigTime=!0,this._ambigZone=!0,this},Ze.hasTime=function(){return!this._ambigTime},Ze.stripZone=function(){var t=this.toArray(),e=this._ambigTime;return this.utc(),Oe(this,t),e&&(this._ambigTime=!0),this._ambigZone=!0,this},Ze.hasZone=function(){return!this._ambigZone},Ze.zone=function(t){return null!=t&&(this._ambigTime=!1,this._ambigZone=!1),je.zone.apply(this,arguments)},Ze.local=function(){var t=this.toArray(),e=this._ambigZone;return je.local.apply(this,arguments),e&&Be(this,t),this},Ze.format=function(){return this._fullCalendar&&arguments[0]?O(this,arguments[0]):this._ambigTime?V(this,"YYYY-MM-DD"):this._ambigZone?V(this,"YYYY-MM-DD[T]HH:mm:ss"):je.format.apply(this,arguments)},Ze.toISOString=function(){return this._ambigTime?V(this,"YYYY-MM-DD"):this._ambigZone?V(this,"YYYY-MM-DD[T]HH:mm:ss"):je.toISOString.apply(this,arguments)},Ze.isWithin=function(t,e){var n=N([this,t,e]);return n[0]>=n[1]&&n[0]').addClass(n.className||"").css({top:0,left:0}).append(n.content).appendTo(n.parentEl),this.el.on("click",".fc-close",function(){e.hide()}),n.autoHide&&t(document).on("mousedown",this.documentMousedownProxy=t.proxy(this,"documentMousedown"))},documentMousedown:function(e){this.el&&!t(e.target).closest(this.el).length&&this.hide()},destroy:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),t(document).off("mousedown",this.documentMousedownProxy) -},position:function(){var e,n,i,r,s,o=this.options,l=this.el.offsetParent().offset(),a=this.el.outerWidth(),c=this.el.outerHeight(),d=t(window),u=S(this.el);r=o.top||0,s=void 0!==o.left?o.left:void 0!==o.right?o.right-a:0,u.is(window)||u.is(document)?(u=d,e=0,n=0):(i=u.offset(),e=i.top,n=i.left),e+=d.scrollTop(),n+=d.scrollLeft(),o.viewportConstrain!==!1&&(r=Math.min(r,e+u.outerHeight()-c-this.margin),r=Math.max(r,e+this.margin),s=Math.min(s,n+u.outerWidth()-a-this.margin),s=Math.max(s,n+this.margin)),this.el.css({top:r-l.top,left:s-l.left})},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))}},U.prototype={grid:null,rows:null,cols:null,containerEl:null,minX:null,maxX:null,minY:null,maxY:null,build:function(){this.grid.buildCoords(this.rows=[],this.cols=[]),this.computeBounds()},getCell:function(t,e){var n,i=null,r=this.rows,s=this.cols,o=-1,l=-1;if(this.inBounds(t,e)){for(n=0;r.length>n;n++)if(e>=r[n][0]&&r[n][1]>e){o=n;break}for(n=0;s.length>n;n++)if(t>=s[n][0]&&s[n][1]>t){l=n;break}o>=0&&l>=0&&(i={row:o,col:l},i.grid=this.grid,i.date=this.grid.getCellDate(i))}return i},computeBounds:function(){var t;this.containerEl&&(t=this.containerEl.offset(),this.minX=t.left,this.maxX=t.left+this.containerEl.outerWidth(),this.minY=t.top,this.maxY=t.top+this.containerEl.outerHeight())},inBounds:function(t,e){return this.containerEl?t>=this.minX&&this.maxX>t&&e>=this.minY&&this.maxY>e:!0}},K.prototype={coordMaps:null,build:function(){var t,e=this.coordMaps;for(t=0;e.length>t;t++)e[t].build()},getCell:function(t,e){var n,i=this.coordMaps,r=null;for(n=0;i.length>n&&!r;n++)r=i[n].getCell(t,e);return r}},Q.prototype={coordMap:null,options:null,isListening:!1,isDragging:!1,origCell:null,origDate:null,cell:null,date:null,mouseX0:null,mouseY0:null,mousemoveProxy:null,mouseupProxy:null,scrollEl:null,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollHandlerProxy:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,mousedown:function(t){E(t)&&(t.preventDefault(),this.startListening(t),this.options.distance||this.startDrag(t))},startListening:function(e){var n,i;this.isListening||(e&&this.options.scroll&&(n=S(t(e.target)),n.is(window)||n.is(document)||(this.scrollEl=n,this.scrollHandlerProxy=_(t.proxy(this,"scrollHandler"),100),this.scrollEl.on("scroll",this.scrollHandlerProxy))),this.computeCoords(),e&&(i=this.getCell(e),this.origCell=i,this.origDate=i?i.date:null,this.mouseX0=e.pageX,this.mouseY0=e.pageY),t(document).on("mousemove",this.mousemoveProxy=t.proxy(this,"mousemove")).on("mouseup",this.mouseupProxy=t.proxy(this,"mouseup")).on("selectstart",this.preventDefault),this.isListening=!0,this.trigger("listenStart",e))},computeCoords:function(){this.coordMap.build(),this.computeScrollBounds()},mousemove:function(t){var e,n;this.isDragging||(e=this.options.distance||1,n=Math.pow(t.pageX-this.mouseX0,2)+Math.pow(t.pageY-this.mouseY0,2),n>=e*e&&this.startDrag(t)),this.isDragging&&this.drag(t)},startDrag:function(t){var e;this.isListening||this.startListening(),this.isDragging||(this.isDragging=!0,this.trigger("dragStart",t),e=this.getCell(t),e&&this.cellOver(e,!0))},drag:function(t){var e;this.isDragging&&(e=this.getCell(t),J(e,this.cell)||(this.cell&&this.cellOut(),e&&this.cellOver(e)),this.dragScroll(t))},cellOver:function(t){this.cell=t,this.date=t.date,this.trigger("cellOver",t,t.date)},cellOut:function(){this.cell&&(this.trigger("cellOut",this.cell),this.cell=null,this.date=null)},mouseup:function(t){this.stopDrag(t),this.stopListening(t)},stopDrag:function(t){this.isDragging&&(this.stopScrolling(),this.trigger("dragStop",t),this.isDragging=!1)},stopListening:function(e){this.isListening&&(this.scrollEl&&(this.scrollEl.off("scroll",this.scrollHandlerProxy),this.scrollHandlerProxy=null),t(document).off("mousemove",this.mousemoveProxy).off("mouseup",this.mouseupProxy).off("selectstart",this.preventDefault),this.mousemoveProxy=null,this.mouseupProxy=null,this.isListening=!1,this.trigger("listenStop",e),this.origCell=this.cell=null,this.origDate=this.date=null)},getCell:function(t){return this.coordMap.getCell(t.pageX,t.pageY)},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))},preventDefault:function(t){t.preventDefault()},computeScrollBounds:function(){var t,e=this.scrollEl;e&&(t=e.offset(),this.scrollBounds={top:t.top,left:t.left,bottom:t.top+e.outerHeight(),right:t.left+e.outerWidth()})},dragScroll:function(t){var e,n,i,r,s=this.scrollSensitivity,o=this.scrollBounds,l=0,a=0;o&&(e=(s-(t.pageY-o.top))/s,n=(s-(o.bottom-t.pageY))/s,i=(s-(t.pageX-o.left))/s,r=(s-(o.right-t.pageX))/s,e>=0&&1>=e?l=-1*e*this.scrollSpeed:n>=0&&1>=n&&(l=n*this.scrollSpeed),i>=0&&1>=i?a=-1*i*this.scrollSpeed:r>=0&&1>=r&&(a=r*this.scrollSpeed)),this.setScrollVel(l,a)},setScrollVel:function(e,n){this.scrollTopVel=e,this.scrollLeftVel=n,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(t.proxy(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var t=this.scrollEl;0>this.scrollTopVel?0>=t.scrollTop()&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),0>this.scrollLeftVel?0>=t.scrollLeft()&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.stopScrolling()},stopScrolling:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.computeCoords())},scrollHandler:function(){this.scrollIntervalId||this.computeCoords()}},te.prototype={options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,mouseY0:null,mouseX0:null,topDelta:null,leftDelta:null,mousemoveProxy:null,isFollowing:!1,isHidden:!1,isAnimating:!1,start:function(e){this.isFollowing||(this.isFollowing=!0,this.mouseY0=e.pageY,this.mouseX0=e.pageX,this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),t(document).on("mousemove",this.mousemoveProxy=t.proxy(this,"mousemove")))},stop:function(e,n){function i(){this.isAnimating=!1,r.destroyEl(),this.top0=this.left0=null,n&&n()}var r=this,s=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,t(document).off("mousemove",this.mousemoveProxy),e&&s&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:s,complete:i})):i())},getEl:function(){var t=this.el;return t||(this.sourceEl.width(),t=this.el=this.sourceEl.clone().css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}).appendTo(this.parentEl)),t},destroyEl:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var t,e;this.getEl(),null===this.top0&&(this.sourceEl.width(),t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},mousemove:function(t){this.topDelta=t.pageY-this.mouseY0,this.leftDelta=t.pageX-this.mouseX0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}},ee.prototype={view:null,cellHtml:"",rowHtml:function(t,e){var n,i,r=this.view,s=this.getHtmlRenderer("cell",t),o="";for(e=e||0,n=0;r.colCnt>n;n++)i=r.cellToDate(e,n),o+=s(e,n,i);return o=this.bookendCells(o,t,e),""+o+""},bookendCells:function(t,e,n){var i=this.view,r=this.getHtmlRenderer("intro",e)(n||0),s=this.getHtmlRenderer("outro",e)(n||0),o=i.opt("isRTL"),l=o?s:r,a=o?r:s;return"string"==typeof t?l+t+a:t.prepend(l).append(a)},getHtmlRenderer:function(t,e){var n,i,r,s,o=this.view;return n=t+"Html",e&&(i=e+z(t)+"Html"),i&&(s=o[i])?r=o:i&&(s=this[i])?r=this:(s=o[n])?r=o:(s=this[n])&&(r=this),"function"==typeof s?function(){return s.apply(r,arguments)||""}:function(){return s||""}}},ne.prototype=M(ee.prototype),t.extend(ne.prototype,{el:null,coordMap:null,cellDuration:null,elsByFill:null,render:function(){this.bindHandlers()},destroy:function(){},buildCoords:function(){},getCellDate:function(){},getCellDayEl:function(){},rangeToSegs:function(){},bindHandlers:function(){var e=this;this.el.on("mousedown",function(n){t(n.target).is(".fc-event-container *, .fc-more")||t(n.target).closest(".fc-popover").length||e.dayMousedown(n)}),this.bindSegHandlers()},dayMousedown:function(t){var e,n,i,r=this,s=this.view,o=s.calendar,l=s.opt("selectable"),a=null,c=new Q(this.coordMap,{scroll:s.opt("dragScroll"),dragStart:function(){s.unselect()},cellOver:function(t,s){c.origDate&&(i=r.getCellDayEl(t),a=[s,c.origDate].sort(x),e=a[0],n=a[1].clone().add(r.cellDuration),l&&(o.isSelectionAllowedInRange(e,n)?r.renderSelection(e,n):(a=null,f())))},cellOut:function(){a=null,r.destroySelection(),g()},listenStop:function(t){a&&(a[0].isSame(a[1])&&s.trigger("dayClick",i[0],e,t),l&&s.reportSelection(e,n,t)),g()}});c.mousedown(t)},renderDrag:function(){},destroyDrag:function(){},renderResize:function(){},destroyResize:function(){},renderRangeHelper:function(t,e,n){var i,r=this.view;!e&&r.opt("forceEventDuration")&&(e=r.calendar.getDefaultEventEnd(!t.hasTime(),t)),i=n?M(n.event):{},i.start=t,i.end=e,i.allDay=!(t.hasTime()||e&&e.hasTime()),i.className=(i.className||[]).concat("fc-helper"),n||(i.editable=!1),this.renderHelper(i,n)},renderHelper:function(){},destroyHelper:function(){},renderSelection:function(t,e){this.renderHighlight(t,e)},destroySelection:function(){this.destroyHighlight()},renderHighlight:function(t,e){this.renderFill("highlight",this.rangeToSegs(t,e))},destroyHighlight:function(){this.destroyFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderFill:function(){},destroyFill:function(t){var e=this.elsByFill[t];e&&(e.remove(),delete this.elsByFill[t])},renderFillSegEls:function(e,n){var i,r=this,s=this[e+"SegEl"],o="",l=[];if(n.length){for(i=0;n.length>i;i++)o+=this.fillSegHtml(e,n[i]);t(o).each(function(e,i){var o=n[e],a=t(i);s&&(a=s.call(r,o,a)),a&&(a=t(a),a.is(r.fillSegTag)&&(o.el=a,l.push(o)))})}return l},fillSegTag:"div",fillSegHtml:function(t,e){var n=this[t+"SegClasses"],i=this[t+"SegStyles"],r=n?n.call(this,e):[],s=i?i.call(this,e):"";return"<"+this.fillSegTag+(r.length?' class="'+r.join(" ")+'"':"")+(s?' style="'+s+'"':"")+" />"},headHtml:function(){return'
      '+""+""+this.rowHtml("head")+""+"
      "+"
      "},headCellHtml:function(t,e,n){var i=this.view,r=i.calendar,s=i.opt("columnFormat");return''+F(r.formatDate(n,s))+""},bgCellHtml:function(t,e,n){var i=this.view,r=this.getDayClasses(n);return r.unshift("fc-day",i.widgetContentClass),''},getDayClasses:function(t){var e=this.view,n=e.calendar.getNow().stripTime(),i=["fc-"+Ye[t.day()]];return"month"===e.name&&t.month()!=e.intervalStart.month()&&i.push("fc-other-month"),t.isSame(n,"day")?i.push("fc-today",e.highlightStateClass):n>t?i.push("fc-past"):i.push("fc-future"),i}}),t.extend(ne.prototype,{mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,segs:null,renderEvents:function(t){var e,n,i=this.eventsToSegs(t),r=[],s=[];for(e=0;i.length>e;e++)n=i[e],ie(n.event)?r.push(n):s.push(n);r=this.renderBgSegs(r)||r,s=this.renderFgSegs(s)||s,this.segs=r.concat(s)},destroyEvents:function(){this.triggerSegMouseout(),this.destroyFgSegs(),this.destroyBgSegs(),this.segs=null},getSegs:function(){return this.segs||[]},renderFgSegs:function(){},destroyFgSegs:function(){},renderFgSegEls:function(e,n){var i,r=this.view,s="",o=[];if(e.length){for(i=0;e.length>i;i++)s+=this.fgSegHtml(e[i],n);t(s).each(function(n,i){var s=e[n],l=r.resolveEventEl(s.event,t(i));l&&(l.data("fc-seg",s),s.el=l,o.push(s))})}return o},fgSegHtml:function(){},renderBgSegs:function(t){return this.renderFill("bgEvent",t)},destroyBgSegs:function(){this.destroyFill("bgEvent")},bgEventSegEl:function(t,e){return this.view.resolveEventEl(t.event,e)},bgEventSegClasses:function(t){var e=t.event,n=e.source||{};return["fc-bgevent"].concat(e.className,n.className||[])},bgEventSegStyles:function(t){var e=this.view,n=t.event,i=n.source||{},r=n.color,s=i.color,o=e.opt("eventColor"),l=n.backgroundColor||r||i.backgroundColor||s||e.opt("eventBackgroundColor")||o;return l?"background-color:"+l:""},businessHoursSegClasses:function(){return["fc-nonbusiness","fc-bgevent"]},bindSegHandlers:function(){var e=this,n=this.view;t.each({mouseenter:function(t,n){e.triggerSegMouseover(t,n)},mouseleave:function(t,n){e.triggerSegMouseout(t,n)},click:function(t,e){return n.trigger("eventClick",this,t.event,e)},mousedown:function(i,r){t(r.target).is(".fc-resizer")&&n.isEventResizable(i.event)?e.segResizeMousedown(i,r):n.isEventDraggable(i.event)&&e.segDragMousedown(i,r)}},function(n,i){e.el.on(n,".fc-event-container > *",function(n){var r=t(this).data("fc-seg");return!r||e.isDraggingSeg||e.isResizingSeg?void 0:i.call(this,r,n)})})},triggerSegMouseover:function(t,e){this.mousedOverSeg||(this.mousedOverSeg=t,this.view.trigger("eventMouseover",t.el[0],t.event,e))},triggerSegMouseout:function(t,e){e=e||{},this.mousedOverSeg&&(t=t||this.mousedOverSeg,this.mousedOverSeg=null,this.view.trigger("eventMouseout",t.el[0],t.event,e))},segDragMousedown:function(t,e){var n,i,r=this,s=this.view,o=s.calendar,l=t.el,a=t.event,c=new te(t.el,{parentEl:s.el,opacity:s.opt("dragOpacity"),revertDuration:s.opt("dragRevertDuration"),zIndex:2}),d=new Q(s.coordMap,{distance:5,scroll:s.opt("dragScroll"),listenStart:function(t){c.hide(),c.start(t)},dragStart:function(e){r.triggerSegMouseout(t,e),r.isDraggingSeg=!0,s.hideEvent(a),s.trigger("eventDragStart",l[0],a,e,{})},cellOver:function(e,l){var u=t.cellDate||d.origDate,h=r.computeDraggedEventDates(t,u,l);n=h.start,i=h.end,o.isEventAllowedInRange(a,n,h.visibleEnd)?s.renderDrag(n,i,t)?c.hide():c.show():(n=null,c.show(),f())},cellOut:function(){n=null,s.destroyDrag(),c.show(),g()},dragStop:function(t){var e=n&&!n.isSame(a.start);c.stop(!e,function(){r.isDraggingSeg=!1,s.destroyDrag(),s.showEvent(a),s.trigger("eventDragStop",l[0],a,t,{}),e&&s.eventDrop(l[0],a,n,t)}),g()},listenStop:function(){c.stop()}});d.mousedown(e)},computeDraggedEventDates:function(t,e,n){var i,r,s,o,l,a=this.view,c=t.event,d=c.start,u=a.calendar.getEventEnd(c);return n.hasTime()===e.hasTime()?(i=C(n,e),r=d.clone().add(i),s=null===c.end?null:u.clone().add(i),o=c.allDay):(r=n,s=null,o=!n.hasTime()),l=s||a.calendar.getDefaultEventEnd(o,r),{start:r,end:s,visibleEnd:l}},segResizeMousedown:function(t,e){function n(){r.destroyResize(),s.showEvent(a)}var i,r=this,s=this.view,o=s.calendar,l=t.el,a=t.event,c=a.start,d=s.calendar.getEventEnd(a),u=null;i=new Q(this.coordMap,{distance:5,scroll:s.opt("dragScroll"),dragStart:function(e){r.triggerSegMouseout(t,e),r.isResizingSeg=!0,s.trigger("eventResizeStart",l[0],a,e,{})},cellOver:function(e,i){i.isBefore(c)&&(i=c),u=i.clone().add(r.cellDuration),o.isEventAllowedInRange(a,c,u)?u.isSame(d)?(u=null,n()):(r.renderResize(c,u,t),s.hideEvent(a)):(u=null,n(),f())},cellOut:function(){u=null,n(),g()},dragStop:function(t){r.isResizingSeg=!1,n(),g(),s.trigger("eventResizeStop",l[0],a,t,{}),u&&s.eventResize(l[0],a,u,t)}}),i.mousedown(e)},getSegClasses:function(t,e,n){var i=t.event,r=["fc-event",t.isStart?"fc-start":"fc-not-start",t.isEnd?"fc-end":"fc-not-end"].concat(i.className,i.source?i.source.className:[]);return e&&r.push("fc-draggable"),n&&r.push("fc-resizable"),r},getEventSkinCss:function(t){var e=this.view,n=t.source||{},i=t.color,r=n.color,s=e.opt("eventColor"),o=t.backgroundColor||i||n.backgroundColor||r||e.opt("eventBackgroundColor")||s,l=t.borderColor||i||n.borderColor||r||e.opt("eventBorderColor")||s,a=t.textColor||n.textColor||e.opt("eventTextColor"),c=[];return o&&c.push("background-color:"+o),l&&c.push("border-color:"+l),a&&c.push("color:"+a),c.join(";")},eventsToSegs:function(t,e){var n,i=this.eventsToRanges(t),r=[];for(n=0;i.length>n;n++)r.push.apply(r,this.eventRangeToSegs(i[n],e));return r},eventsToRanges:function(e){var n=this,i=oe(e),r=[];return t.each(i,function(t,e){e.length&&r.push.apply(r,re(e[0])?n.eventsToInverseRanges(e):n.eventsToNormalRanges(e))}),r},eventsToNormalRanges:function(t){var e,n,i,r,s=this.view.calendar,o=[];for(e=0;t.length>e;e++)n=t[e],i=n.start.clone().stripZone(),r=s.getEventEnd(n).stripZone(),o.push({event:n,start:i,end:r,eventStartMS:+i,eventDurationMS:r-i});return o},eventsToInverseRanges:function(t){var e,n,i=this.view,r=i.start.clone().stripZone(),s=i.end.clone().stripZone(),o=this.eventsToNormalRanges(t),l=[],a=t[0],c=r;for(o.sort(le),e=0;o.length>e;e++)n=o[e],n.start>c&&l.push({event:a,start:c,end:n.start}),c=n.end;return s>c&&l.push({event:a,start:c,end:s}),l},eventRangeToSegs:function(t,e){var n,i,r;for(n=e?e(t.start,t.end):this.rangeToSegs(t.start,t.end),i=0;n.length>i;i++)r=n[i],r.event=t.event,r.eventStartMS=t.eventStartMS,r.eventDurationMS=t.eventDurationMS;return n}}),ce.prototype=M(ne.prototype),t.extend(ce.prototype,{numbersVisible:!1,cellDuration:e.duration({days:1}),bottomCoordPadding:0,rowEls:null,dayEls:null,helperEls:null,render:function(e){var n,i=this.view,r="";for(n=0;i.rowCnt>n;n++)r+=this.dayRowHtml(n,e);this.el.html(r),this.rowEls=this.el.find(".fc-row"),this.dayEls=this.el.find(".fc-day"),this.dayEls.each(function(e,n){var r=i.cellToDate(Math.floor(e/i.colCnt),e%i.colCnt);i.trigger("dayRender",null,r,t(n))}),ne.prototype.render.call(this)},destroy:function(){this.destroySegPopover()},dayRowHtml:function(t,e){var n=this.view,i=["fc-row","fc-week",n.widgetContentClass];return e&&i.push("fc-rigid"),'
      '+'
      '+""+this.rowHtml("day",t)+"
      "+"
      "+'
      '+""+(this.numbersVisible?""+this.rowHtml("number",t)+"":"")+"
      "+"
      "+"
      "},dayCellHtml:function(t,e,n){return this.bgCellHtml(t,e,n)},buildCoords:function(e,n){var i,r,s,o=this.view.colCnt;this.dayEls.slice(0,o).each(function(e,o){i=t(o),r=i.offset().left,e&&(s[1]=r),s=[r],n[e]=s}),s[1]=r+i.outerWidth(),this.rowEls.each(function(n,o){i=t(o),r=i.offset().top,n&&(s[1]=r),s=[r],e[n]=s}),s[1]=r+i.outerHeight()+this.bottomCoordPadding},getCellDate:function(t){return this.view.cellToDate(t)},getCellDayEl:function(t){return this.dayEls.eq(t.row*this.view.colCnt+t.col)},rangeToSegs:function(t,e){return this.view.rangeToSegments(t,e)},renderDrag:function(t,e,n){var i;return this.renderHighlight(t,e||this.view.calendar.getDefaultEventEnd(!0,t)),n&&!n.el.closest(this.el).length?(this.renderRangeHelper(t,e,n),i=this.view.opt("dragOpacity"),void 0!==i&&this.helperEls.css("opacity",i),!0):void 0},destroyDrag:function(){this.destroyHighlight(),this.destroyHelper()},renderResize:function(t,e,n){this.renderHighlight(t,e),this.renderRangeHelper(t,e,n)},destroyResize:function(){this.destroyHighlight(),this.destroyHelper()},renderHelper:function(e,n){var i,r=[],s=this.eventsToSegs([e]);s=this.renderFgSegEls(s),i=this.renderSegRows(s),this.rowEls.each(function(e,s){var o,l=t(s),a=t('
      ');o=n&&n.row===e?n.el.position().top:l.find(".fc-content-skeleton tbody").position().top,a.css("top",o).find("table").append(i[e].tbodyEl),l.append(a),r.push(a[0])}),this.helperEls=t(r)},destroyHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(e,n){var i,r,s,o=[];for(n=this.renderFillSegEls(e,n),i=0;n.length>i;i++)r=n[i],s=this.renderFillRow(e,r),this.rowEls.eq(r.row).append(s),o.push(s[0]);return this.elsByFill[e]=t(o),n},renderFillRow:function(e,n){var i,r,s=this.view.colCnt,o=n.leftCol,l=n.rightCol+1;return i=t('
      '+"
      "+"
      "),r=i.find("tr"),o>0&&r.append(''),r.append(n.el.attr("colspan",l-o)),s>l&&r.append(''),this.bookendCells(r,e),i}}),t.extend(ce.prototype,{rowStructs:null,destroyEvents:function(){this.destroySegPopover(),ne.prototype.destroyEvents.apply(this,arguments)},getSegs:function(){return ne.prototype.getSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(e){var n=t.grep(e,function(t){return t.event.allDay});return ne.prototype.renderBgSegs.call(this,n)},renderFgSegs:function(e){var n;return e=this.renderFgSegEls(e),n=this.rowStructs=this.renderSegRows(e),this.rowEls.each(function(e,i){t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl)}),e},destroyFgSegs:function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;e.length>n;n++)i.push(this.renderSegRow(n,e[n]));return i},fgSegHtml:function(t,e){var n,i=this.view,r=i.opt("isRTL"),s=t.event,o=i.isEventDraggable(s),l=!e&&s.allDay&&t.isEnd&&i.isEventResizable(s),a=this.getSegClasses(t,o,l),c=this.getEventSkinCss(s),d="";return a.unshift("fc-day-grid-event"),!s.allDay&&t.isStart&&(d=''+F(i.getEventTimeText(s))+""),n=''+(F(s.title||"")||" ")+"",'
      "+'
      '+(r?n+" "+d:d+" "+n)+"
      "+(l?'
      ':"")+""},renderSegRow:function(e,n){function i(e){for(;e>o;)d=(y[r-1]||[])[o],d?d.attr("rowspan",parseInt(d.attr("rowspan")||1,10)+1):(d=t(""),l.append(d)),v[r][o]=d,y[r][o]=d,o++}var r,s,o,l,a,c,d,u=this.view,h=u.colCnt,f=this.buildSegLevels(n),g=Math.max(1,f.length),p=t(""),m=[],v=[],y=[];for(r=0;g>r;r++){if(s=f[r],o=0,l=t(""),m.push([]),v.push([]),y.push([]),s)for(a=0;s.length>a;a++){for(c=s[a],i(c.leftCol),d=t('').append(c.el),c.leftCol!=c.rightCol?d.attr("colspan",c.rightCol-c.leftCol+1):y[r][o]=d;c.rightCol>=o;)v[r][o]=d,m[r][o]=c,o++;l.append(d)}i(h),this.bookendCells(l,"eventSkeleton"),p.append(l)}return{row:e,tbodyEl:p,cellMatrix:v,segMatrix:m,segLevels:f,segs:n}},buildSegLevels:function(t){var e,n,i,r=[];for(t.sort(ae),e=0;t.length>e;e++){for(n=t[e],i=0;r.length>i&&de(n,r[i]);i++);n.level=i,(r[i]||(r[i]=[])).push(n)}for(i=0;r.length>i;i++)r[i].sort(ue);return r},groupSegRows:function(t){var e,n=this.view,i=[];for(e=0;n.rowCnt>e;e++)i.push([]);for(e=0;t.length>e;e++)i[t[e].row].push(t[e]);return i}}),t.extend(ce.prototype,{segPopover:null,popoverSegs:null,destroySegPopover:function(){this.segPopover&&this.segPopover.hide()},limitRows:function(t){var e,n,i=this.rowStructs||[];for(e=0;i.length>e;e++)this.unlimitRow(e),n=t?"number"==typeof t?t:this.computeRowLevelLimit(e):!1,n!==!1&&this.limitRow(e,n)},computeRowLevelLimit:function(t){var e,n,i=this.rowEls.eq(t),r=i.height(),s=this.rowStructs[t].tbodyEl.children();for(e=0;s.length>e;e++)if(n=s.eq(e).removeClass("fc-limited"),n.position().top+n.outerHeight()>r)return e;return!1},limitRow:function(e,n){function i(i){for(;i>T;)r={row:e,col:T},d=S.getCellSegs(r,n),d.length&&(f=o[n-1][T],w=S.renderMoreLink(r,d),y=t("
      ").append(w),f.append(y),D.push(y[0])),T++}var r,s,o,l,a,c,d,u,h,f,g,p,m,v,y,w,S=this,b=this.view,E=this.rowStructs[e],D=[],T=0;if(n&&E.segLevels.length>n){for(s=E.segLevels[n-1],o=E.cellMatrix,l=E.tbodyEl.children().slice(n).addClass("fc-limited").get(),a=0;s.length>a;a++){for(c=s[a],i(c.leftCol),h=[],u=0;c.rightCol>=T;)r={row:e,col:T},d=this.getCellSegs(r,n),h.push(d),u+=d.length,T++;if(u){for(f=o[n-1][c.leftCol],g=f.attr("rowspan")||1,p=[],m=0;h.length>m;m++)v=t('').attr("rowspan",g),d=h[m],r={row:e,col:c.leftCol+m},w=this.renderMoreLink(r,[c].concat(d)),y=t("
      ").append(w),v.append(y),p.push(v[0]),D.push(v[0]);f.addClass("fc-limited").after(t(p)),l.push(f[0])}}i(b.colCnt),E.moreEls=t(D),E.limitedEls=t(l)}},unlimitRow:function(t){var e=this.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},renderMoreLink:function(e,n){var i=this,r=this.view;return t('').text(this.getMoreLinkText(n.length)).on("click",function(s){var o=r.opt("eventLimitClick"),l=r.cellToDate(e),a=t(this),c=i.getCellDayEl(e),d=i.getCellSegs(e),u=i.resliceDaySegs(d,l),h=i.resliceDaySegs(n,l);"function"==typeof o&&(o=r.trigger("eventLimitClick",null,{date:l,dayEl:c,moreEl:a,segs:u,hiddenSegs:h},s)),"popover"===o?i.showSegPopover(l,e,a,u):"string"==typeof o&&r.calendar.zoomTo(l,o)})},showSegPopover:function(t,e,n,i){var r,s,o=this,l=this.view,a=n.parent();r=1==l.rowCnt?this.view.el:this.rowEls.eq(e.row),s={className:"fc-more-popover",content:this.renderSegPopoverContent(t,i),parentEl:this.el,top:r.offset().top,autoHide:!0,viewportConstrain:l.opt("popoverViewportConstrain"),hide:function(){o.segPopover.destroy(),o.segPopover=null,o.popoverSegs=null}},l.opt("isRTL")?s.right=a.offset().left+a.outerWidth()+1:s.left=a.offset().left-1,this.segPopover=new q(s),this.segPopover.show()},renderSegPopoverContent:function(e,n){var i,r=this.view,s=r.opt("theme"),o=e.format(r.opt("dayPopoverFormat")),l=t('
      '+''+''+F(o)+""+'
      '+"
      "+'
      '+'
      '+"
      "),a=l.find(".fc-event-container");for(n=this.renderFgSegEls(n,!0),this.popoverSegs=n,i=0;n.length>i;i++)n[i].cellDate=e,a.append(n[i].el);return l},resliceDaySegs:function(e,n){var i=t.map(e,function(t){return t.event}),r=n.clone().stripTime(),s=r.clone().add(1,"days");return this.eventsToSegs(i,function(t,e){var n=D(t,e,r,s);return n?[n]:[]})},getMoreLinkText:function(t){var e=this.view,n=e.opt("eventLimitText");return"function"==typeof n?n(t):"+"+t+" "+n},getCellSegs:function(t,e){for(var n,i=this.rowStructs[t.row].segMatrix,r=e||0,s=[];i.length>r;)n=i[r][t.col],n&&s.push(n),r++;return s}}),he.prototype=M(ne.prototype),t.extend(he.prototype,{slotDuration:null,snapDuration:null,minTime:null,maxTime:null,dayEls:null,slatEls:null,slatTops:null,helperEl:null,businessHourSegs:null,render:function(){this.processOptions(),this.el.html(this.renderHtml()),this.dayEls=this.el.find(".fc-day"),this.slatEls=this.el.find(".fc-slats tr"),this.computeSlatTops(),this.renderBusinessHours(),ne.prototype.render.call(this)},renderBusinessHours:function(){var t=this.view.calendar.getBusinessHoursEvents();this.businessHourSegs=this.renderFill("businessHours",this.eventsToSegs(t),"bgevent")},renderHtml:function(){return'
      '+this.rowHtml("slotBg")+"
      "+"
      "+'
      '+""+this.slatRowHtml()+"
      "+"
      "},slotBgCellHtml:function(t,e,n){return this.bgCellHtml(t,e,n)},slatRowHtml:function(){for(var t,n,i,r=this.view,s=r.calendar,o=r.opt("isRTL"),l="",a=0===this.slotDuration.asMinutes()%15,c=e.duration(+this.minTime);this.maxTime>c;)t=r.start.clone().time(c),n=t.minutes(),i='"+(a&&n?"":""+F(s.formatDate(t,r.opt("axisFormat")))+"")+"",l+=""+(o?"":i)+''+(o?i:"")+"",c.add(this.slotDuration);return l},processOptions:function(){var t=this.view,n=t.opt("slotDuration"),i=t.opt("snapDuration");n=e.duration(n),i=i?e.duration(i):n,this.slotDuration=n,this.snapDuration=i,this.cellDuration=i,this.minTime=e.duration(t.opt("minTime")),this.maxTime=e.duration(t.opt("maxTime"))},rangeToSegs:function(t,e){var n,i,r,s,o,l=this.view,a=[];for(t=t.clone().stripZone(),e=e.clone().stripZone(),i=0;l.colCnt>i;i++)r=l.cellToDate(0,i),s=r.clone().time(this.minTime),o=r.clone().time(this.maxTime),n=D(t,e,s,o),n&&(n.col=i,a.push(n));return a},resize:function(){this.computeSlatTops(),this.updateSegVerticals()},buildCoords:function(n,i){var r,s,o=this.view.colCnt,l=this.el.offset().top,a=e.duration(+this.minTime),c=null;for(this.dayEls.slice(0,o).each(function(e,n){r=t(n),s=r.offset().left,c&&(c[1]=s),c=[s],i[e]=c}),c[1]=s+r.outerWidth(),c=null;this.maxTime>a;)s=l+this.computeTimeTop(a),c&&(c[1]=s),c=[s],n.push(c),a.add(this.snapDuration);c[1]=l+this.computeTimeTop(a)},getCellDate:function(t){var e=this.view,n=e.calendar;return n.rezoneDate(e.cellToDate(0,t.col).time(this.minTime+this.snapDuration*t.row))},getCellDayEl:function(t){return this.dayEls.eq(t.col)},computeDateTop:function(t,n){return this.computeTimeTop(e.duration(t.clone().stripZone()-n.clone().stripTime()))},computeTimeTop:function(t){var e,n,i,r,s=(t-this.minTime)/this.slotDuration;return s=Math.max(0,s),s=Math.min(this.slatEls.length,s),e=Math.floor(s),n=s-e,i=this.slatTops[e],n?(r=this.slatTops[e+1],i+(r-i)*n):i},computeSlatTops:function(){var e,n=[];this.slatEls.each(function(i,r){e=t(r).position().top,n.push(e)}),n.push(e+this.slatEls.last().outerHeight()),this.slatTops=n},renderDrag:function(t,e,n){var i;return n?(this.renderRangeHelper(t,e,n),i=this.view.opt("dragOpacity"),void 0!==i&&this.helperEl.css("opacity",i),!0):(this.renderHighlight(t,e||this.view.calendar.getDefaultEventEnd(!1,t)),void 0)},destroyDrag:function(){this.destroyHelper(),this.destroyHighlight()},renderResize:function(t,e,n){this.renderRangeHelper(t,e,n)},destroyResize:function(){this.destroyHelper()},renderHelper:function(e,n){var i,r,s,o,l=this.eventsToSegs([e]);for(l=this.renderFgSegEls(l),i=this.renderSegTable(l),r=0;l.length>r;r++)s=l[r],n&&n.col===s.col&&(o=n.el,s.el.css({left:o.css("left"),right:o.css("right"),"margin-left":o.css("margin-left"),"margin-right":o.css("margin-right")}));this.helperEl=t('
      ').append(i).appendTo(this.el)},destroyHelper:function(){this.helperEl&&(this.helperEl.remove(),this.helperEl=null)},renderSelection:function(t,e){this.view.opt("selectHelper")?this.renderRangeHelper(t,e):this.renderHighlight(t,e)},destroySelection:function(){this.destroyHelper(),this.destroyHighlight()},renderFill:function(e,n,i){var r,s,o,l,a,c,d,u,h,f,g=this.view;if(n.length){for(n=this.renderFillSegEls(e,n),r=this.groupSegCols(n),i=i||e.toLowerCase(),s=t('
      '+"
      "+"
      "),o=s.find("tr"),l=0;r.length>l;l++)if(a=r[l],c=t("").appendTo(o),a.length)for(d=t('
      ').appendTo(c),u=g.cellToDate(0,l),h=0;a.length>h;h++)f=a[h],d.append(f.el.css({top:this.computeDateTop(f.start,u),bottom:-this.computeDateTop(f.end,u)}));this.bookendCells(o,e),this.el.append(s),this.elsByFill[e]=s}return n}}),t.extend(he.prototype,{eventSkeletonEl:null,renderFgSegs:function(e){return e=this.renderFgSegEls(e),this.el.append(this.eventSkeletonEl=t('
      ').append(this.renderSegTable(e))),e},destroyFgSegs:function(){this.eventSkeletonEl&&(this.eventSkeletonEl.remove(),this.eventSkeletonEl=null)},renderSegTable:function(e){var n,i,r,s,o,l,a=t("
      "),c=a.find("tr");for(n=this.groupSegCols(e),this.computeSegVerticals(e),s=0;n.length>s;s++){for(o=n[s],fe(o),l=t('
      '),i=0;o.length>i;i++)r=o[i],r.el.css(this.generateSegPositionCss(r)),30>r.bottom-r.top&&r.el.addClass("fc-short"),l.append(r.el);c.append(t("").append(l))}return this.bookendCells(c,"eventSkeleton"),a -},updateSegVerticals:function(){var t,e=(this.segs||[]).concat(this.businessHourSegs||[]);for(this.computeSegVerticals(e),t=0;e.length>t;t++)e[t].el.css(this.generateSegVerticalCss(e[t]))},computeSegVerticals:function(t){var e,n;for(e=0;t.length>e;e++)n=t[e],n.top=this.computeDateTop(n.start,n.start),n.bottom=this.computeDateTop(n.end,n.start)},fgSegHtml:function(t,e){var n,i,r,s=this.view,o=t.event,l=s.isEventDraggable(o),a=!e&&t.isEnd&&s.isEventResizable(o),c=this.getSegClasses(t,l,a),d=this.getEventSkinCss(o);return c.unshift("fc-time-grid-event"),s.isMultiDayEvent(o)?(t.isStart||t.isEnd)&&(n=s.getEventTimeText(t.start,t.end),i=s.getEventTimeText(t.start,t.end,"LT"),r=s.getEventTimeText(t.start,null)):(n=s.getEventTimeText(o),i=s.getEventTimeText(o,"LT"),r=s.getEventTimeText(o.start,null)),'"+'
      '+(n?'
      "+""+F(n)+""+"
      ":"")+(o.title?'
      '+F(o.title)+"
      ":"")+"
      "+'
      '+(a?'
      ':"")+""},generateSegPositionCss:function(t){var e,n,i=this.view,r=i.opt("isRTL"),s=i.opt("slotEventOverlap"),o=t.backwardCoord,l=t.forwardCoord,a=this.generateSegVerticalCss(t);return s&&(l=Math.min(1,o+2*(l-o))),r?(e=1-l,n=o):(e=o,n=1-l),a.zIndex=t.level+1,a.left=100*e+"%",a.right=100*n+"%",s&&t.forwardPressure&&(a[r?"marginLeft":"marginRight"]=20),a},generateSegVerticalCss:function(t){return{top:t.top,bottom:-t.bottom}},groupSegCols:function(t){var e,n=this.view,i=[];for(e=0;n.colCnt>e;e++)i.push([]);for(e=0;t.length>e;e++)i[t[e].col].push(t[e]);return i}}),be.prototype={calendar:null,coordMap:null,el:null,start:null,end:null,intervalStart:null,intervalEnd:null,rowCnt:null,colCnt:null,isSelected:!1,scrollerEl:null,scrollTop:null,widgetHeaderClass:null,widgetContentClass:null,highlightStateClass:null,documentMousedownProxy:null,documentDragStartProxy:null,init:function(){var e=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=e+"-widget-header",this.widgetContentClass=e+"-widget-content",this.highlightStateClass=e+"-state-highlight",this.documentMousedownProxy=t.proxy(this,"documentMousedown"),this.documentDragStartProxy=t.proxy(this,"documentDragStart")},render:function(){this.updateSize(),this.trigger("viewRender",this,this,this.el),t(document).on("mousedown",this.documentMousedownProxy).on("dragstart",this.documentDragStartProxy)},destroy:function(){this.unselect(),this.trigger("viewDestroy",this,this,this.el),this.destroyEvents(),this.el.empty(),t(document).off("mousedown",this.documentMousedownProxy).off("dragstart",this.documentDragStartProxy)},incrementDate:function(){},updateSize:function(t){t&&this.recordScroll(),this.updateHeight(),this.updateWidth()},updateWidth:function(){},updateHeight:function(){var t=this.calendar;this.setHeight(t.getSuggestedViewHeight(),t.isHeightAuto())},setHeight:function(){},computeScrollerHeight:function(t){var e,n=this.el.add(this.scrollerEl);return n.css({position:"relative",left:-1}),e=this.el.outerHeight()-this.scrollerEl.height(),n.css({position:"",left:""}),t-e},recordScroll:function(){this.scrollerEl&&(this.scrollTop=this.scrollerEl.scrollTop())},restoreScroll:function(){null!==this.scrollTop&&this.scrollerEl.scrollTop(this.scrollTop)},renderEvents:function(){this.segEach(function(t){this.trigger("eventAfterRender",t.event,t.event,t.el)}),this.trigger("eventAfterAllRender")},destroyEvents:function(){this.segEach(function(t){this.trigger("eventDestroy",t.event,t.event,t.el)})},resolveEventEl:function(e,n){var i=this.trigger("eventRender",e,e,n);return i===!1?n=null:i&&i!==!0&&(n=t(i)),n},showEvent:function(t){this.segEach(function(t){t.el.css("visibility","")},t)},hideEvent:function(t){this.segEach(function(t){t.el.css("visibility","hidden")},t)},segEach:function(t,e){var n,i=this.getSegs();for(n=0;i.length>n;n++)e&&i[n].event._id!==e._id||t.call(this,i[n])},getSegs:function(){},renderDrag:function(){},destroyDrag:function(){},documentDragStart:function(e){var n,i,r,s,o,l=this,a=this.calendar,c=null,d=null,u=null;this.opt("droppable")&&(n=t(e.target),i=this.opt("dropAccept"),(t.isFunction(i)?i.call(n[0],n):n.is(i))&&(r=Ee(n),s=r.eventProps,o=new Q(this.coordMap,{cellOver:function(e,n){c=n,d=r.duration?c.clone().add(r.duration):null,u=d||a.getDefaultEventEnd(!c.hasTime(),c),s&&t.extend(s,{start:c,end:d}),a.isExternalDragAllowedInRange(c,u,s)?l.renderDrag(c,u):(c=null,f())},cellOut:function(){c=null,l.destroyDrag(),g()}}),t(document).one("dragstop",function(t,e){var i;l.destroyDrag(),g(),c&&(r.startTime&&!c.hasTime()&&c.time(r.startTime),l.trigger("drop",n[0],c,t,e),s&&(i=a.renderEvent(s,r.stick),l.trigger("eventReceive",null,i[0])))}),o.startDrag(e)))},select:function(t,e,n){this.unselect(n),this.renderSelection(t,e),this.reportSelection(t,e,n)},renderSelection:function(){},reportSelection:function(t,e,n){this.isSelected=!0,this.trigger("select",null,t,e,n)},unselect:function(t){this.isSelected&&(this.isSelected=!1,this.destroySelection(),this.trigger("unselect",null,t))},destroySelection:function(){},documentMousedown:function(e){var n;this.isSelected&&this.opt("unselectAuto")&&E(e)&&(n=this.opt("unselectCancel"),n&&t(e.target).closest(n).length||this.unselect(e))}},_e.dataAttrPrefix="",De.prototype=M(be.prototype),t.extend(De.prototype,{dayGrid:null,dayNumbersVisible:!1,weekNumbersVisible:!1,weekNumberWidth:null,headRowEl:null,render:function(t,e,n){this.rowCnt=t,this.colCnt=e,this.dayNumbersVisible=n,this.weekNumbersVisible=this.opt("weekNumbers"),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.weekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderHtml()),this.headRowEl=this.el.find("thead .fc-row"),this.scrollerEl=this.el.find(".fc-day-grid-container"),this.dayGrid.coordMap.containerEl=this.scrollerEl,this.dayGrid.el=this.el.find(".fc-day-grid"),this.dayGrid.render(this.hasRigidRows()),be.prototype.render.call(this)},destroy:function(){this.dayGrid.destroy(),be.prototype.destroy.call(this)},renderHtml:function(){return'"+""+""+""+""+'"+""+""+"
      '+this.dayGrid.headHtml()+"
      '+'
      '+'
      '+"
      "+"
      "},headIntroHtml:function(){return this.weekNumbersVisible?'"+""+F(this.opt("weekNumberTitle"))+""+"":void 0},numberIntroHtml:function(t){return this.weekNumbersVisible?'"+""+this.calendar.calculateWeekNumber(this.cellToDate(t,0))+""+"":void 0},dayIntroHtml:function(){return this.weekNumbersVisible?'":void 0},introHtml:function(){return this.weekNumbersVisible?'":void 0},numberCellHtml:function(t,e,n){var i;return this.dayNumbersVisible?(i=this.dayGrid.getDayClasses(n),i.unshift("fc-day-number"),''+n.date()+""):""},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},updateWidth:function(){this.weekNumbersVisible&&(this.weekNumberWidth=v(this.el.find(".fc-week-number")))},setHeight:function(t,e){var n,i=this.opt("eventLimit");w(this.scrollerEl),h(this.headRowEl),this.dayGrid.destroySegPopover(),i&&"number"==typeof i&&this.dayGrid.limitRows(i),n=this.computeScrollerHeight(t),this.setGridHeight(n,e),i&&"number"!=typeof i&&this.dayGrid.limitRows(i),!e&&y(this.scrollerEl,n)&&(u(this.headRowEl,b(this.scrollerEl)),n=this.computeScrollerHeight(t),this.scrollerEl.height(n),this.restoreScroll())},setGridHeight:function(t,e){e?m(this.dayGrid.rowEls):p(this.dayGrid.rowEls,t,!0)},renderEvents:function(t){this.dayGrid.renderEvents(t),this.updateHeight(),be.prototype.renderEvents.call(this,t)},getSegs:function(){return this.dayGrid.getSegs()},destroyEvents:function(){be.prototype.destroyEvents.call(this),this.recordScroll(),this.dayGrid.destroyEvents()},renderDrag:function(t,e,n){return this.dayGrid.renderDrag(t,e,n)},destroyDrag:function(){this.dayGrid.destroyDrag()},renderSelection:function(t,e){this.dayGrid.renderSelection(t,e)},destroySelection:function(){this.dayGrid.destroySelection()}}),r({fixedWeekCount:!0}),Ge.month=Te,Te.prototype=M(De.prototype),t.extend(Te.prototype,{name:"month",incrementDate:function(t,e){return t.clone().stripTime().add(e,"months").startOf("month")},render:function(t){var e;this.intervalStart=t.clone().stripTime().startOf("month"),this.intervalEnd=this.intervalStart.clone().add(1,"months"),this.start=this.intervalStart.clone(),this.start=this.skipHiddenDays(this.start),this.start.startOf("week"),this.start=this.skipHiddenDays(this.start),this.end=this.intervalEnd.clone(),this.end=this.skipHiddenDays(this.end,-1,!0),this.end.add((7-this.end.weekday())%7,"days"),this.end=this.skipHiddenDays(this.end,-1,!0),e=Math.ceil(this.end.diff(this.start,"weeks",!0)),this.isFixedWeeks()&&(this.end.add(6-e,"weeks"),e=6),this.title=this.calendar.formatDate(this.intervalStart,this.opt("titleFormat")),De.prototype.render.call(this,e,this.getCellsPerWeek(),!0)},setGridHeight:function(t,e){e=e||"variable"===this.opt("weekMode"),e&&(t*=this.rowCnt/6),p(this.dayGrid.rowEls,t,!e)},isFixedWeeks:function(){var t=this.opt("weekMode");return t?"fixed"===t:this.opt("fixedWeekCount")}}),Ge.basicWeek=Ce,Ce.prototype=M(De.prototype),t.extend(Ce.prototype,{name:"basicWeek",incrementDate:function(t,e){return t.clone().stripTime().add(e,"weeks").startOf("week")},render:function(t){this.intervalStart=t.clone().stripTime().startOf("week"),this.intervalEnd=this.intervalStart.clone().add(1,"weeks"),this.start=this.skipHiddenDays(this.intervalStart),this.end=this.skipHiddenDays(this.intervalEnd,-1,!0),this.title=this.calendar.formatRange(this.start,this.end.clone().subtract(1),this.opt("titleFormat")," — "),De.prototype.render.call(this,1,this.getCellsPerWeek(),!1)}}),Ge.basicDay=He,He.prototype=M(De.prototype),t.extend(He.prototype,{name:"basicDay",incrementDate:function(t,e){var n=t.clone().stripTime().add(e,"days");return n=this.skipHiddenDays(n,0>e?-1:1)},render:function(t){this.start=this.intervalStart=t.clone().stripTime(),this.end=this.intervalEnd=this.start.clone().add(1,"days"),this.title=this.calendar.formatDate(this.start,this.opt("titleFormat")),De.prototype.render.call(this,1,1,!1)}}),r({allDaySlot:!0,allDayText:"all-day",scrollTime:"06:00:00",slotDuration:"00:30:00",axisFormat:xe,timeFormat:{agenda:ke},minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0});var Ue=5;Me.prototype=M(be.prototype),t.extend(Me.prototype,{timeGrid:null,dayGrid:null,axisWidth:null,noScrollRowEls:null,bottomRuleEl:null,bottomRuleHeight:null,render:function(e){this.rowCnt=1,this.colCnt=e,this.el.addClass("fc-agenda-view").html(this.renderHtml()),this.scrollerEl=this.el.find(".fc-time-grid-container"),this.timeGrid.coordMap.containerEl=this.scrollerEl,this.timeGrid.el=this.el.find(".fc-time-grid"),this.timeGrid.render(),this.bottomRuleEl=t('
      ').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.el=this.el.find(".fc-day-grid"),this.dayGrid.render(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)"),be.prototype.render.call(this),this.resetScroll()},destroy:function(){this.timeGrid.destroy(),this.dayGrid&&this.dayGrid.destroy(),be.prototype.destroy.call(this)},renderHtml:function(){return'"+""+""+""+""+'"+""+""+"
      '+this.timeGrid.headHtml()+"
      '+(this.dayGrid?'

      ':"")+'
      '+'
      '+"
      "+"
      "},headIntroHtml:function(){var t,e,n,i;return this.opt("weekNumbers")?(t=this.cellToDate(0,0),e=this.calendar.calculateWeekNumber(t),n=this.opt("weekNumberTitle"),i=this.opt("isRTL")?e+n:n+e,'"+""+F(i)+""+""):'"},dayIntroHtml:function(){return'"+""+(this.opt("allDayHtml")||F(this.opt("allDayText")))+""+""},slotBgIntroHtml:function(){return'"},introHtml:function(){return'"},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},updateSize:function(t){t&&this.timeGrid.resize(),be.prototype.updateSize.call(this,t)},updateWidth:function(){this.axisWidth=v(this.el.find(".fc-axis"))},setHeight:function(t,e){var n,i;null===this.bottomRuleHeight&&(this.bottomRuleHeight=this.bottomRuleEl.outerHeight()),this.bottomRuleEl.hide(),this.scrollerEl.css("overflow",""),w(this.scrollerEl),h(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.destroySegPopover(),n=this.opt("eventLimit"),n&&"number"!=typeof n&&(n=Ue),n&&this.dayGrid.limitRows(n)),e||(i=this.computeScrollerHeight(t),y(this.scrollerEl,i)?(u(this.noScrollRowEls,b(this.scrollerEl)),i=this.computeScrollerHeight(t),this.scrollerEl.height(i),this.restoreScroll()):(this.scrollerEl.height(i).css("overflow","hidden"),this.bottomRuleEl.show()))},resetScroll:function(){function t(){n.scrollerEl.scrollTop(r)}var n=this,i=e.duration(this.opt("scrollTime")),r=this.timeGrid.computeTimeTop(i);r=Math.ceil(r),r&&r++,t(),setTimeout(t,0)},renderEvents:function(t){var e,n,i=[],r=[],s=[];for(n=0;t.length>n;n++)t[n].allDay?i.push(t[n]):r.push(t[n]);e=this.timeGrid.renderEvents(r),this.dayGrid&&(s=this.dayGrid.renderEvents(i)),this.updateHeight(),be.prototype.renderEvents.call(this,t)},getSegs:function(){return this.timeGrid.getSegs().concat(this.dayGrid?this.dayGrid.getSegs():[])},destroyEvents:function(){be.prototype.destroyEvents.call(this),this.recordScroll(),this.timeGrid.destroyEvents(),this.dayGrid&&this.dayGrid.destroyEvents()},renderDrag:function(t,e,n){return t.hasTime()?this.timeGrid.renderDrag(t,e,n):this.dayGrid?this.dayGrid.renderDrag(t,e,n):void 0},destroyDrag:function(){this.timeGrid.destroyDrag(),this.dayGrid&&this.dayGrid.destroyDrag()},renderSelection:function(t,e){t.hasTime()||e.hasTime()?this.timeGrid.renderSelection(t,e):this.dayGrid&&this.dayGrid.renderSelection(t,e)},destroySelection:function(){this.timeGrid.destroySelection(),this.dayGrid&&this.dayGrid.destroySelection()}}),Ge.agendaWeek=Re,Re.prototype=M(Me.prototype),t.extend(Re.prototype,{name:"agendaWeek",incrementDate:function(t,e){return t.clone().stripTime().add(e,"weeks").startOf("week")},render:function(t){this.intervalStart=t.clone().stripTime().startOf("week"),this.intervalEnd=this.intervalStart.clone().add(1,"weeks"),this.start=this.skipHiddenDays(this.intervalStart),this.end=this.skipHiddenDays(this.intervalEnd,-1,!0),this.title=this.calendar.formatRange(this.start,this.end.clone().subtract(1),this.opt("titleFormat")," — "),Me.prototype.render.call(this,this.getCellsPerWeek())}}),Ge.agendaDay=Pe,Pe.prototype=M(Me.prototype),t.extend(Pe.prototype,{name:"agendaDay",incrementDate:function(t,e){var n=t.clone().stripTime().add(e,"days");return n=this.skipHiddenDays(n,0>e?-1:1)},render:function(t){this.start=this.intervalStart=t.clone().stripTime(),this.end=this.intervalEnd=this.start.clone().add(1,"days"),this.title=this.calendar.formatDate(this.start,this.opt("titleFormat")),Me.prototype.render.call(this,1)}})}); \ No newline at end of file diff --git a/static/js/plugins/fullcalendar/moment.min.js b/static/js/plugins/fullcalendar/moment.min.js deleted file mode 100644 index 8b54f130f..000000000 --- a/static/js/plugins/fullcalendar/moment.min.js +++ /dev/null @@ -1,7 +0,0 @@ -//! moment.js -//! version : 2.8.3 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error("Implement me")}}function c(a,b){return zb.call(a,b)}function d(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function e(a){tb.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+a)}function f(a,b){var c=!0;return m(function(){return c&&(e(a),c=!1),b.apply(this,arguments)},b)}function g(a,b){qc[a]||(e(b),qc[a]=!0)}function h(a,b){return function(c){return p(a.call(this,c),b)}}function i(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function j(){}function k(a,b){b!==!1&&F(a),n(this,a),this._d=new Date(+a._d)}function l(a){var b=y(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=tb.localeData(),this._bubble()}function m(a,b){for(var d in b)c(b,d)&&(a[d]=b[d]);return c(b,"toString")&&(a.toString=b.toString),c(b,"valueOf")&&(a.valueOf=b.valueOf),a}function n(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=b._pf),"undefined"!=typeof b._locale&&(a._locale=b._locale),Ib.length>0)for(c in Ib)d=Ib[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function o(a){return 0>a?Math.ceil(a):Math.floor(a)}function p(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthd;d++)(c&&a[d]!==b[d]||!c&&A(a[d])!==A(b[d]))&&g++;return g+f}function x(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,"$1");a=jc[a]||kc[b]||b}return a}function y(a){var b,d,e={};for(d in a)c(a,d)&&(b=x(d),b&&(e[b]=a[d]));return e}function z(b){var c,d;if(0===b.indexOf("week"))c=7,d="day";else{if(0!==b.indexOf("month"))return;c=12,d="month"}tb[b]=function(e,f){var g,h,i=tb._locale[b],j=[];if("number"==typeof e&&(f=e,e=a),h=function(a){var b=tb().utc().set(d,a);return i.call(tb._locale,b,e||"")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function A(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function B(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function C(a,b,c){return hb(tb([a,11,31+b-c]),b,c).week}function D(a){return E(a)?366:365}function E(a){return a%4===0&&a%100!==0||a%400===0}function F(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[Bb]<0||a._a[Bb]>11?Bb:a._a[Cb]<1||a._a[Cb]>B(a._a[Ab],a._a[Bb])?Cb:a._a[Db]<0||a._a[Db]>23?Db:a._a[Eb]<0||a._a[Eb]>59?Eb:a._a[Fb]<0||a._a[Fb]>59?Fb:a._a[Gb]<0||a._a[Gb]>999?Gb:-1,a._pf._overflowDayOfYear&&(Ab>b||b>Cb)&&(b=Cb),a._pf.overflow=b)}function G(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function H(a){return a?a.toLowerCase().replace("_","-"):a}function I(a){for(var b,c,d,e,f=0;f0;){if(d=J(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&w(e,c,!0)>=b-1)break;b--}f++}return null}function J(a){var b=null;if(!Hb[a]&&Jb)try{b=tb.locale(),require("./locale/"+a),tb.locale(b)}catch(c){}return Hb[a]}function K(a,b){return b._isUTC?tb(a).zone(b._offset||0):tb(a).local()}function L(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function M(a){var b,c,d=a.match(Nb);for(b=0,c=d.length;c>b;b++)d[b]=pc[d[b]]?pc[d[b]]:L(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function N(a,b){return a.isValid()?(b=O(b,a.localeData()),lc[b]||(lc[b]=M(b)),lc[b](a)):a.localeData().invalidDate()}function O(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Ob.lastIndex=0;d>=0&&Ob.test(a);)a=a.replace(Ob,c),Ob.lastIndex=0,d-=1;return a}function P(a,b){var c,d=b._strict;switch(a){case"Q":return Zb;case"DDDD":return _b;case"YYYY":case"GGGG":case"gggg":return d?ac:Rb;case"Y":case"G":case"g":return cc;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return d?bc:Sb;case"S":if(d)return Zb;case"SS":if(d)return $b;case"SSS":if(d)return _b;case"DDD":return Qb;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ub;case"a":case"A":return b._locale._meridiemParse;case"X":return Xb;case"Z":case"ZZ":return Vb;case"T":return Wb;case"SSSS":return Tb;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return d?$b:Pb;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Pb;case"Do":return Yb;default:return c=new RegExp(Y(X(a.replace("\\","")),"i"))}}function Q(a){a=a||"";var b=a.match(Vb)||[],c=b[b.length-1]||[],d=(c+"").match(hc)||["-",0,0],e=+(60*d[1])+A(d[2]);return"+"===d[0]?-e:e}function R(a,b,c){var d,e=c._a;switch(a){case"Q":null!=b&&(e[Bb]=3*(A(b)-1));break;case"M":case"MM":null!=b&&(e[Bb]=A(b)-1);break;case"MMM":case"MMMM":d=c._locale.monthsParse(b),null!=d?e[Bb]=d:c._pf.invalidMonth=b;break;case"D":case"DD":null!=b&&(e[Cb]=A(b));break;case"Do":null!=b&&(e[Cb]=A(parseInt(b,10)));break;case"DDD":case"DDDD":null!=b&&(c._dayOfYear=A(b));break;case"YY":e[Ab]=tb.parseTwoDigitYear(b);break;case"YYYY":case"YYYYY":case"YYYYYY":e[Ab]=A(b);break;case"a":case"A":c._isPm=c._locale.isPM(b);break;case"H":case"HH":case"h":case"hh":e[Db]=A(b);break;case"m":case"mm":e[Eb]=A(b);break;case"s":case"ss":e[Fb]=A(b);break;case"S":case"SS":case"SSS":case"SSSS":e[Gb]=A(1e3*("0."+b));break;case"X":c._d=new Date(1e3*parseFloat(b));break;case"Z":case"ZZ":c._useUTC=!0,c._tzm=Q(b);break;case"dd":case"ddd":case"dddd":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":a=a.substr(0,1);case"gggg":case"GGGG":case"GGGGG":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=A(b));break;case"gg":case"GG":c._w=c._w||{},c._w[a]=tb.parseTwoDigitYear(b)}}function S(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[Ab],hb(tb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[Ab],hb(tb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=ib(d,e,f,h,g),a._a[Ab]=i.year,a._dayOfYear=i.dayOfYear}function T(a){var c,d,e,f,g=[];if(!a._d){for(e=V(a),a._w&&null==a._a[Cb]&&null==a._a[Bb]&&S(a),a._dayOfYear&&(f=b(a._a[Ab],e[Ab]),a._dayOfYear>D(f)&&(a._pf._overflowDayOfYear=!0),d=db(f,0,a._dayOfYear),a._a[Bb]=d.getUTCMonth(),a._a[Cb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];a._d=(a._useUTC?db:cb).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm)}}function U(a){var b;a._d||(b=y(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],T(a))}function V(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function W(a){if(a._f===tb.ISO_8601)return void $(a);a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=""+a._i,h=g.length,i=0;for(d=O(a._f,a._locale).match(Nb)||[],b=0;b0&&a._pf.unusedInput.push(f),g=g.slice(g.indexOf(c)+c.length),i+=c.length),pc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),R(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=h-i,g.length>0&&a._pf.unusedInput.push(g),a._isPm&&a._a[Db]<12&&(a._a[Db]+=12),a._isPm===!1&&12===a._a[Db]&&(a._a[Db]=0),T(a),F(a)}function X(a){return a.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function Y(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(a){var b,c,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;fg)&&(e=g,c=b));m(a,c||b)}function $(a){var b,c,d=a._i,e=dc.exec(d);if(e){for(a._pf.iso=!0,b=0,c=fc.length;c>b;b++)if(fc[b][1].exec(d)){a._f=fc[b][0]+(e[6]||" ");break}for(b=0,c=gc.length;c>b;b++)if(gc[b][1].exec(d)){a._f+=gc[b][0];break}d.match(Vb)&&(a._f+="Z"),W(a)}else a._isValid=!1}function _(a){$(a),a._isValid===!1&&(delete a._isValid,tb.createFromInputFallback(a))}function ab(a,b){var c,d=[];for(c=0;ca&&h.setFullYear(a),h}function db(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function eb(a,b){if("string"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),"number"!=typeof a)return null}else a=parseInt(a,10);return a}function fb(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function gb(a,b,c){var d=tb.duration(a).abs(),e=yb(d.as("s")),f=yb(d.as("m")),g=yb(d.as("h")),h=yb(d.as("d")),i=yb(d.as("M")),j=yb(d.as("y")),k=e0,k[4]=c,fb.apply({},k)}function hb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=tb(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ib(a,b,c,d,e){var f,g,h=db(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:D(a-1)+g}}function jb(b){var c=b._i,d=b._f;return b._locale=b._locale||tb.localeData(b._l),null===c||d===a&&""===c?tb.invalid({nullInput:!0}):("string"==typeof c&&(b._i=c=b._locale.preparse(c)),tb.isMoment(c)?new k(c,!0):(d?u(d)?Z(b):W(b):bb(b),new k(b)))}function kb(a,b){var c,d;if(1===b.length&&u(b[0])&&(b=b[0]),!b.length)return tb();for(c=b[0],d=1;d=0?"+":"-";return b+p(Math.abs(a),6)},gg:function(){return p(this.weekYear()%100,2)},gggg:function(){return p(this.weekYear(),4)},ggggg:function(){return p(this.weekYear(),5)},GG:function(){return p(this.isoWeekYear()%100,2)},GGGG:function(){return p(this.isoWeekYear(),4)},GGGGG:function(){return p(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return A(this.milliseconds()/100)},SS:function(){return p(A(this.milliseconds()/10),2)},SSS:function(){return p(this.milliseconds(),3)},SSSS:function(){return p(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+":"+p(A(a)%60,2)},ZZ:function(){var a=-this.zone(),b="+";return 0>a&&(a=-a,b="-"),b+p(A(a/60),2)+p(A(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},qc={},rc=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];nc.length;)vb=nc.pop(),pc[vb+"o"]=i(pc[vb],vb);for(;oc.length;)vb=oc.pop(),pc[vb+vb]=h(pc[vb],2);pc.DDDD=h(pc.DDD,3),m(j.prototype,{set:function(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(a){return this._months[a.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=tb.utc([2e3,b]),d="^"+this.months(c,"")+"|^"+this.monthsShort(c,""),this._monthsParse[b]=new RegExp(d.replace(".",""),"i")),this._monthsParse[b].test(a))return b},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=tb([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return"p"===(a+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(a,b){var c=this._calendar[a];return"function"==typeof c?c.apply(b):c},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace("%d",a)},_ordinal:"%d",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return hb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),tb=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=c,g._l=e,g._strict=f,g._isUTC=!1,g._pf=d(),jb(g)},tb.suppressDeprecationWarnings=!1,tb.createFromInputFallback=f("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i)}),tb.min=function(){var a=[].slice.call(arguments,0);return kb("isBefore",a)},tb.max=function(){var a=[].slice.call(arguments,0);return kb("isAfter",a)},tb.utc=function(b,c,e,f){var g;return"boolean"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=c,g._strict=f,g._pf=d(),jb(g).utc()},tb.unix=function(a){return tb(1e3*a)},tb.duration=function(a,b){var d,e,f,g,h=a,i=null;return tb.isDuration(a)?h={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(h={},b?h[b]=a:h.milliseconds=a):(i=Lb.exec(a))?(d="-"===i[1]?-1:1,h={y:0,d:A(i[Cb])*d,h:A(i[Db])*d,m:A(i[Eb])*d,s:A(i[Fb])*d,ms:A(i[Gb])*d}):(i=Mb.exec(a))?(d="-"===i[1]?-1:1,f=function(a){var b=a&&parseFloat(a.replace(",","."));return(isNaN(b)?0:b)*d},h={y:f(i[2]),M:f(i[3]),d:f(i[4]),h:f(i[5]),m:f(i[6]),s:f(i[7]),w:f(i[8])}):"object"==typeof h&&("from"in h||"to"in h)&&(g=r(tb(h.from),tb(h.to)),h={},h.ms=g.milliseconds,h.M=g.months),e=new l(h),tb.isDuration(a)&&c(a,"_locale")&&(e._locale=a._locale),e},tb.version=wb,tb.defaultFormat=ec,tb.ISO_8601=function(){},tb.momentProperties=Ib,tb.updateOffset=function(){},tb.relativeTimeThreshold=function(b,c){return mc[b]===a?!1:c===a?mc[b]:(mc[b]=c,!0)},tb.lang=f("moment.lang is deprecated. Use moment.locale instead.",function(a,b){return tb.locale(a,b)}),tb.locale=function(a,b){var c;return a&&(c="undefined"!=typeof b?tb.defineLocale(a,b):tb.localeData(a),c&&(tb.duration._locale=tb._locale=c)),tb._locale._abbr},tb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Hb[a]||(Hb[a]=new j),Hb[a].set(b),tb.locale(a),Hb[a]):(delete Hb[a],null)},tb.langData=f("moment.langData is deprecated. Use moment.localeData instead.",function(a){return tb.localeData(a)}),tb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return tb._locale;if(!u(a)){if(b=J(a))return b;a=[a]}return I(a)},tb.isMoment=function(a){return a instanceof k||null!=a&&c(a,"_isAMomentObject")},tb.isDuration=function(a){return a instanceof l};for(vb=rc.length-1;vb>=0;--vb)z(rc[vb]);tb.normalizeUnits=function(a){return x(a)},tb.invalid=function(a){var b=tb.utc(0/0);return null!=a?m(b._pf,a):b._pf.userInvalidated=!0,b},tb.parseZone=function(){return tb.apply(null,arguments).parseZone()},tb.parseTwoDigitYear=function(a){return A(a)+(A(a)>68?1900:2e3)},m(tb.fn=k.prototype,{clone:function(){return tb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=tb(this).utc();return 00:!1},parsingFlags:function(){return m({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._dateTzOffset(),"m")),this},format:function(a){var b=N(this,a||tb.defaultFormat);return this.localeData().postformat(b)},add:s(1,"add"),subtract:s(-1,"subtract"),diff:function(a,b,c){var d,e,f,g=K(a,this),h=6e4*(this.zone()-g.zone());return b=x(b),"year"===b||"month"===b?(d=432e5*(this.daysInMonth()+g.daysInMonth()),e=12*(this.year()-g.year())+(this.month()-g.month()),f=this-tb(this).startOf("month")-(g-tb(g).startOf("month")),f-=6e4*(this.zone()-tb(this).startOf("month").zone()-(g.zone()-tb(g).startOf("month").zone())),e+=f/d,"year"===b&&(e/=12)):(d=this-g,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-h)/864e5:"week"===b?(d-h)/6048e5:d),c?e:o(e)},from:function(a,b){return tb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(tb(),a)},calendar:function(a){var b=a||tb(),c=K(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this))},isLeapYear:function(){return E(this.year())},isDST:function(){return this.zone()+a):+this.clone().startOf(b)>+tb(a).startOf(b)},isBefore:function(a,b){return b=x("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+a>+this):+this.clone().startOf(b)<+tb(a).startOf(b)},isSame:function(a,b){return b=x(b||"millisecond"),"millisecond"===b?(a=tb.isMoment(a)?a:tb(a),+this===+a):+this.clone().startOf(b)===+K(a,this).startOf(b)},min:f("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),this>a?this:a}),max:f("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(a){return a=tb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._dateTzOffset():("string"==typeof a&&(a=Q(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._dateTzOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,"m"),d!==a&&(!b||this._changeInProgress?t(this,tb.duration(d-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,tb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?tb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return B(this.year(),this.month())},dayOfYear:function(a){var b=yb((tb(this).startOf("day")-tb(this).startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=hb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")},isoWeekYear:function(a){var b=hb(this,1,4).year;return null==a?b:this.add(a-b,"y")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")},isoWeek:function(a){var b=hb(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return C(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return C(this.year(),a.dow,a.doy)},get:function(a){return a=x(a),this[a]()},set:function(a,b){return a=x(a),"function"==typeof this[a]&&this[a](b),this},locale:function(b){var c;return b===a?this._locale._abbr:(c=tb.localeData(b),null!=c&&(this._locale=c),this)},lang:f("moment().lang() is deprecated. Use moment().localeData() instead.",function(b){return b===a?this.localeData():this.locale(b)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),tb.fn.millisecond=tb.fn.milliseconds=ob("Milliseconds",!1),tb.fn.second=tb.fn.seconds=ob("Seconds",!1),tb.fn.minute=tb.fn.minutes=ob("Minutes",!1),tb.fn.hour=tb.fn.hours=ob("Hours",!0),tb.fn.date=ob("Date",!0),tb.fn.dates=f("dates accessor is deprecated. Use date instead.",ob("Date",!0)),tb.fn.year=ob("FullYear",!0),tb.fn.years=f("years accessor is deprecated. Use year instead.",ob("FullYear",!0)),tb.fn.days=tb.fn.day,tb.fn.months=tb.fn.month,tb.fn.weeks=tb.fn.week,tb.fn.isoWeeks=tb.fn.isoWeek,tb.fn.quarters=tb.fn.quarter,tb.fn.toJSON=tb.fn.toISOString,m(tb.duration.fn=l.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=o(d/1e3),g.seconds=a%60,b=o(a/60),g.minutes=b%60,c=o(b/60),g.hours=c%24,e+=o(c/24),h=o(pb(e)),e-=o(qb(h)),f+=o(e/30),e%=30,h+=o(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return o(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*A(this._months/12)},humanize:function(a){var b=gb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=tb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=tb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=x(a),this[a.toLowerCase()+"s"]()},as:function(a){var b,c;if(a=x(a),"month"===a||"year"===a)return b=this._days+this._milliseconds/864e5,c=this._months+12*pb(b),"month"===a?c:c/12;switch(b=this._days+qb(this._months/12),a){case"week":return b/7+this._milliseconds/6048e5;case"day":return b+this._milliseconds/864e5;case"hour":return 24*b+this._milliseconds/36e5;case"minute":return 24*b*60+this._milliseconds/6e4;case"second":return 24*b*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*b*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+a)}},lang:tb.fn.lang,locale:tb.fn.locale,toIsoString:f("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"},localeData:function(){return this._locale}}),tb.duration.fn.toString=tb.duration.fn.toISOString;for(vb in ic)c(ic,vb)&&rb(vb.toLowerCase());tb.duration.fn.asMilliseconds=function(){return this.as("ms")},tb.duration.fn.asSeconds=function(){return this.as("s")},tb.duration.fn.asMinutes=function(){return this.as("m")},tb.duration.fn.asHours=function(){return this.as("h")},tb.duration.fn.asDays=function(){return this.as("d")},tb.duration.fn.asWeeks=function(){return this.as("weeks")},tb.duration.fn.asMonths=function(){return this.as("M")},tb.duration.fn.asYears=function(){return this.as("y")},tb.locale("en",{ordinal:function(a){var b=a%10,c=1===A(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th"; -return a+c}}),Jb?module.exports=tb:"function"==typeof define&&define.amd?(define("moment",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(xb.moment=ub),tb}),sb(!0)):sb()}).call(this); \ No newline at end of file diff --git a/static/js/plugins/iCheck/icheck.min.js b/static/js/plugins/iCheck/icheck.min.js deleted file mode 100644 index 9b826fb7e..000000000 --- a/static/js/plugins/iCheck/icheck.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! iCheck v1.0.2 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */ -(function(f){function A(a,b,d){var c=a[0],g=/er/.test(d)?_indeterminate:/bl/.test(d)?n:k,e=d==_update?{checked:c[k],disabled:c[n],indeterminate:"true"==a.attr(_indeterminate)||"false"==a.attr(_determinate)}:c[g];if(/^(ch|di|in)/.test(d)&&!e)x(a,g);else if(/^(un|en|de)/.test(d)&&e)q(a,g);else if(d==_update)for(var f in e)e[f]?x(a,f,!0):q(a,f,!0);else if(!b||"toggle"==d){if(!b)a[_callback]("ifClicked");e?c[_type]!==r&&q(a,g):x(a,g)}}function x(a,b,d){var c=a[0],g=a.parent(),e=b==k,u=b==_indeterminate, - v=b==n,s=u?_determinate:e?y:"enabled",F=l(a,s+t(c[_type])),B=l(a,b+t(c[_type]));if(!0!==c[b]){if(!d&&b==k&&c[_type]==r&&c.name){var w=a.closest("form"),p='input[name="'+c.name+'"]',p=w.length?w.find(p):f(p);p.each(function(){this!==c&&f(this).data(m)&&q(f(this),b)})}u?(c[b]=!0,c[k]&&q(a,k,"force")):(d||(c[b]=!0),e&&c[_indeterminate]&&q(a,_indeterminate,!1));D(a,e,b,d)}c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"default");g[_add](B||l(a,b)||"");g.attr("role")&&!u&&g.attr("aria-"+(v?n:k),"true"); - g[_remove](F||l(a,s)||"")}function q(a,b,d){var c=a[0],g=a.parent(),e=b==k,f=b==_indeterminate,m=b==n,s=f?_determinate:e?y:"enabled",q=l(a,s+t(c[_type])),r=l(a,b+t(c[_type]));if(!1!==c[b]){if(f||!d||"force"==d)c[b]=!1;D(a,e,s,d)}!c[n]&&l(a,_cursor,!0)&&g.find("."+C).css(_cursor,"pointer");g[_remove](r||l(a,b)||"");g.attr("role")&&!f&&g.attr("aria-"+(m?n:k),"false");g[_add](q||l(a,s)||"")}function E(a,b){if(a.data(m)){a.parent().html(a.attr("style",a.data(m).s||""));if(b)a[_callback](b);a.off(".i").unwrap(); - f(_label+'[for="'+a[0].id+'"]').add(a.closest(_label)).off(".i")}}function l(a,b,f){if(a.data(m))return a.data(m).o[b+(f?"":"Class")]}function t(a){return a.charAt(0).toUpperCase()+a.slice(1)}function D(a,b,f,c){if(!c){if(b)a[_callback]("ifToggled");a[_callback]("ifChanged")[_callback]("if"+t(f))}}var m="iCheck",C=m+"-helper",r="radio",k="checked",y="un"+k,n="disabled";_determinate="determinate";_indeterminate="in"+_determinate;_update="update";_type="type";_click="click";_touch="touchbegin.i touchend.i"; - _add="addClass";_remove="removeClass";_callback="trigger";_label="label";_cursor="cursor";_mobile=/ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);f.fn[m]=function(a,b){var d='input[type="checkbox"], input[type="'+r+'"]',c=f(),g=function(a){a.each(function(){var a=f(this);c=a.is(d)?c.add(a):c.add(a.find(d))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))return a=a.toLowerCase(),g(this),c.each(function(){var c= - f(this);"destroy"==a?E(c,"ifDestroyed"):A(c,!0,a);f.isFunction(b)&&b()});if("object"!=typeof a&&a)return this;var e=f.extend({checkedClass:k,disabledClass:n,indeterminateClass:_indeterminate,labelHover:!0},a),l=e.handle,v=e.hoverClass||"hover",s=e.focusClass||"focus",t=e.activeClass||"active",B=!!e.labelHover,w=e.labelHoverClass||"hover",p=(""+e.increaseArea).replace("%","")|0;if("checkbox"==l||l==r)d='input[type="'+l+'"]';-50>p&&(p=-50);g(this);return c.each(function(){var a=f(this);E(a);var c=this, - b=c.id,g=-p+"%",d=100+2*p+"%",d={position:"absolute",top:g,left:g,display:"block",width:d,height:d,margin:0,padding:0,background:"#fff",border:0,opacity:0},g=_mobile?{position:"absolute",visibility:"hidden"}:p?d:{position:"absolute",opacity:0},l="checkbox"==c[_type]?e.checkboxClass||"icheckbox":e.radioClass||"i"+r,z=f(_label+'[for="'+b+'"]').add(a.closest(_label)),u=!!e.aria,y=m+"-"+Math.random().toString(36).substr(2,6),h='
      ")[_callback]("ifCreated").parent().append(e.insert);d=f('').css(d).appendTo(h);a.data(m,{o:e,s:a.attr("style")}).css(g);e.inheritClass&&h[_add](c.className||"");e.inheritID&&b&&h.attr("id",m+"-"+b);"static"==h.css("position")&&h.css("position","relative");A(a,!0,_update);if(z.length)z.on(_click+".i mouseover.i mouseout.i "+_touch,function(b){var d=b[_type],e=f(this);if(!c[n]){if(d==_click){if(f(b.target).is("a"))return; - A(a,!1,!0)}else B&&(/ut|nd/.test(d)?(h[_remove](v),e[_remove](w)):(h[_add](v),e[_add](w)));if(_mobile)b.stopPropagation();else return!1}});a.on(_click+".i focus.i blur.i keyup.i keydown.i keypress.i",function(b){var d=b[_type];b=b.keyCode;if(d==_click)return!1;if("keydown"==d&&32==b)return c[_type]==r&&c[k]||(c[k]?q(a,k):x(a,k)),!1;if("keyup"==d&&c[_type]==r)!c[k]&&x(a,k);else if(/us|ur/.test(d))h["blur"==d?_remove:_add](s)});d.on(_click+" mousedown mouseup mouseover mouseout "+_touch,function(b){var d= - b[_type],e=/wn|up/.test(d)?t:v;if(!c[n]){if(d==_click)A(a,!1,!0);else{if(/wn|er|in/.test(d))h[_add](e);else h[_remove](e+" "+t);if(z.length&&B&&e==v)z[/ut|nd/.test(d)?_remove:_add](w)}if(_mobile)b.stopPropagation();else return!1}})})}})(window.jQuery||window.Zepto); diff --git a/static/js/plugins/metisMenu/jquery.metisMenu.js b/static/js/plugins/metisMenu/jquery.metisMenu.js deleted file mode 100644 index 3c9499c50..000000000 --- a/static/js/plugins/metisMenu/jquery.metisMenu.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - * metismenu - v1.1.3 - * Easy menu jQuery plugin for Twitter Bootstrap 3 - * https://github.com/onokumus/metisMenu - * - * Made by Osman Nuri Okumus - * Under MIT License - */ -;(function($, window, document, undefined) { - - var pluginName = "metisMenu", - defaults = { - toggle: true, - doubleTapToGo: false - }; - - function Plugin(element, options) { - this.element = $(element); - this.settings = $.extend({}, defaults, options); - this._defaults = defaults; - this._name = pluginName; - this.init(); - } - - Plugin.prototype = { - init: function() { - - var $this = this.element, - $toggle = this.settings.toggle, - obj = this; - - if (this.isIE() <= 9) { - $this.find("li.active").has("ul").children("ul").collapse("show"); - $this.find("li").not(".active").has("ul").children("ul").collapse("hide"); - } else { - $this.find("li.active").has("ul").children("ul").addClass("collapse in"); - $this.find("li").not(".active").has("ul").children("ul").addClass("collapse"); - } - - //add the "doubleTapToGo" class to active items if needed - if (obj.settings.doubleTapToGo) { - $this.find("li.active").has("ul").children("a").addClass("doubleTapToGo"); - } - - $this.find("li").has("ul").children("a").on("click" + "." + pluginName, function(e) { - e.preventDefault(); - - //Do we need to enable the double tap - if (obj.settings.doubleTapToGo) { - - //if we hit a second time on the link and the href is valid, navigate to that url - if (obj.doubleTapToGo($(this)) && $(this).attr("href") !== "#" && $(this).attr("href") !== "") { - e.stopPropagation(); - document.location = $(this).attr("href"); - return; - } - } - - $(this).parent("li").toggleClass("active").children("ul").collapse("toggle"); - - if ($toggle) { - $(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide"); - } - - }); - }, - - isIE: function() { //https://gist.github.com/padolsey/527683 - var undef, - v = 3, - div = document.createElement("div"), - all = div.getElementsByTagName("i"); - - while ( - div.innerHTML = "", - all[0] - ) { - return v > 4 ? v : undef; - } - }, - - //Enable the link on the second click. - doubleTapToGo: function(elem) { - var $this = this.element; - - //if the class "doubleTapToGo" exists, remove it and return - if (elem.hasClass("doubleTapToGo")) { - elem.removeClass("doubleTapToGo"); - return true; - } - - //does not exists, add a new class and return false - if (elem.parent().children("ul").length) { - //first remove all other class - $this.find(".doubleTapToGo").removeClass("doubleTapToGo"); - //add the class on the current element - elem.addClass("doubleTapToGo"); - return false; - } - }, - - remove: function() { - this.element.off("." + pluginName); - this.element.removeData(pluginName); - } - - }; - - $.fn[pluginName] = function(options) { - this.each(function () { - var el = $(this); - if (el.data(pluginName)) { - el.data(pluginName).remove(); - } - el.data(pluginName, new Plugin(this, options)); - }); - return this; - }; - -})(jQuery, window, document); \ No newline at end of file diff --git a/static/js/plugins/pace/pace.min.js b/static/js/plugins/pace/pace.min.js deleted file mode 100644 index 9f7c7dc9b..000000000 --- a/static/js/plugins/pace/pace.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! pace 0.5.1 */ -(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W=[].slice,X={}.hasOwnProperty,Y=function(a,b){function c(){this.constructor=a}for(var d in b)X.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},Z=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(t={catchupTime:500,initialRate:.03,minTime:500,ghostTime:500,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},B=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance?"function"==typeof performance.now?performance.now():void 0:void 0)?a:+new Date},D=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,s=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==D&&(D=function(a){return setTimeout(a,50)},s=function(a){return clearTimeout(a)}),F=function(a){var b,c;return b=B(),(c=function(){var d;return d=B()-b,d>=33?(b=B(),a(d,function(){return D(c)})):setTimeout(c,33-d)})()},E=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?W.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},u=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?W.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)X.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?u(b[a],e):b[a]=e);return b},p=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},w=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cP;P++)J=T[P],C[J]===!0&&(C[J]=t[J]);i=function(a){function b(){return U=b.__super__.constructor.apply(this,arguments)}return Y(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(C.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
      \n
      \n
      \n
      ',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(C.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),O=window.XMLHttpRequest,N=window.XDomainRequest,M=window.WebSocket,v=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],null==a[d]&&"function"!=typeof e?f.push(a[d]=e):f.push(void 0)}catch(g){c=g}return f},z=[],Pace.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("ignore"),c=b.apply(null,a),z.shift(),c},Pace.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?W.call(arguments,1):[],z.unshift("track"),c=b.apply(null,a),z.shift(),c},I=function(a){var b;if(null==a&&(a="GET"),"track"===z[0])return"force";if(!z.length&&C.ajax){if("socket"===a&&C.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),Z.call(C.ajax.trackMethods,b)>=0)return!0}return!1},j=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return I(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new O(b),a(c),c},v(window.XMLHttpRequest,O),null!=N&&(window.XDomainRequest=function(){var b;return b=new N,a(b),b},v(window.XDomainRequest,N)),null!=M&&C.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=null!=b?new M(a,b):new M(a),I("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},v(window.WebSocket,M))}return Y(b,a),b}(h),Q=null,x=function(){return null==Q&&(Q=new j),Q},H=function(a){var b,c,d,e;for(e=C.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},x().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,H(g)?void 0:Pace.running||C.restartOnRequestAfter===!1&&"force"!==I(f)?void 0:(d=arguments,c=C.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,j;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(Pace.restart(),i=Pace.sources,j=[],c=0,g=i.length;g>c;c++){if(J=i[c],J instanceof a){J.watch.apply(J,d);break}j.push(void 0)}return j}},c))}),a=function(){function a(){var a=this;this.elements=[],x().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,H(e)?void 0:(c="socket"===d?new m(b):new n(b),this.elements.push(c))},a}(),n=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),m=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},C.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=B(),b=setInterval(function(){var g;return g=B()-c-50,c=B(),e.push(g),e.length>C.eventLag.sampleCount&&e.shift(),a=p(e),++d>=C.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/C.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,C.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+C.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),K=null,G=null,q=null,L=null,o=null,r=null,Pace.running=!1,y=function(){return C.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(S=window.history.pushState,window.history.pushState=function(){return y(),S.apply(window.history,arguments)}),null!=window.history.replaceState&&(V=window.history.replaceState,window.history.replaceState=function(){return y(),V.apply(window.history,arguments)}),k={ajax:a,elements:d,document:c,eventLag:f},(A=function(){var a,c,d,e,f,g,h,i;for(Pace.sources=K=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],C[a]!==!1&&K.push(new k[a](C[a]));for(i=null!=(h=C.extraSources)?h:[],d=0,f=i.length;f>d;d++)J=i[d],K.push(new J(C));return Pace.bar=q=new b,G=[],L=new l})(),Pace.stop=function(){return Pace.trigger("stop"),Pace.running=!1,q.destroy(),r=!0,null!=o&&("function"==typeof s&&s(o),o=null),A()},Pace.restart=function(){return Pace.trigger("restart"),Pace.stop(),Pace.start()},Pace.go=function(){var a;return Pace.running=!0,q.render(),a=B(),r=!1,o=F(function(b,c){var d,e,f,g,h,i,j,k,m,n,o,p,s,t,u,v;for(k=100-q.progress,e=o=0,f=!0,i=p=0,t=K.length;t>p;i=++p)for(J=K[i],n=null!=G[i]?G[i]:G[i]=[],h=null!=(v=J.elements)?v:[J],j=s=0,u=h.length;u>s;j=++s)g=h[j],m=null!=n[j]?n[j]:n[j]=new l(g),f&=m.done,m.done||(e++,o+=m.tick(b));return d=o/e,q.update(L.tick(b,d)),q.done()||f||r?(q.update(100),Pace.trigger("done"),setTimeout(function(){return q.finish(),Pace.running=!1,Pace.trigger("hide")},Math.max(C.ghostTime,Math.max(C.minTime-(B()-a),0)))):c()})},Pace.start=function(a){u(C,a),Pace.running=!0;try{q.render()}catch(b){i=b}return document.querySelector(".pace")?(Pace.trigger("start"),Pace.go()):setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:C.startOnPageLoad&&Pace.start()}).call(this); \ No newline at end of file diff --git a/static/js/plugins/peity/jquery.peity.min.js b/static/js/plugins/peity/jquery.peity.min.js deleted file mode 100644 index 085b72507..000000000 --- a/static/js/plugins/peity/jquery.peity.min.js +++ /dev/null @@ -1,13 +0,0 @@ -// Peity jQuery plugin version 2.0.3 -// (c) 2014 Ben Pickles -// -// http://benpickles.github.io/peity -// -// Released under MIT license. -(function(e,q,h){var o=function(a,b){var c=q.createElementNS("http://www.w3.org/2000/svg",a);e.each(b,function(a,b){c.setAttribute(a,b)});return c},t="createElementNS"in q&&o("svg",{}).createSVGRect,r=1/(window.devicePixelRatio||1),j=e.fn.peity=function(a,b){t&&this.each(function(){var c=e(this),d=c.data("peity");if(d)a&&(d.type=a),e.extend(d.opts,b);else{var f=j.defaults[a],g={};e.each(c.data(),function(a,b){a in f&&(g[a]=b)});var h=e.extend({},f,g,b),d=new s(c,a,h);c.change(function(){d.draw()}).data("peity", - d)}d.draw()});return this},s=function(a,b,c){this.$el=a;this.type=b;this.opts=c},m=s.prototype;m.draw=function(){j.graphers[this.type].call(this,this.opts)};m.fill=function(){var a=this.opts.fill,b=a;e.isFunction(b)||(b=function(b,d){return a[d%a.length]});return b};m.prepare=function(a,b){var c;this.svg?c=e(this.svg).empty():(this.svg=o("svg",{"class":"peity"}),this.$el.hide().after(this.svg),c=e(this.svg).data("peity",this));this.svg.setAttribute("height",b);this.svg.setAttribute("width",a);return c}; - m.values=function(){return e.map(this.$el.text().split(this.opts.delimiter),function(a){return parseFloat(a)})};j.defaults={};j.graphers={};j.register=function(a,b,c){this.defaults[a]=b;this.graphers[a]=c};j.register("pie",{delimiter:null,diameter:16,fill:["#ff9900","#fff4dd","#ffc66e"]},function(a){if(!a.delimiter){var b=this.$el.text().match(/[^0-9\.]/);a.delimiter=b?b[0]:","}b=this.values();if("/"==a.delimiter)var c=b[0],b=[c,h.max(0,b[1]-c)];for(var d=0,c=b.length,f=0;de?1:0,1,q,r,"Z"].join(" ")});i=l}k.setAttribute("fill",j.call(this,n,d,b));this.svg.appendChild(k)}}});j.register("line",{delimiter:",",fill:"#c6d9fd",height:16,max:null, - min:0,stroke:"#4d89f9",strokeWidth:1,width:32},function(a){var b=this.values();1==b.length&&b.push(b[0]);for(var c=h.max.apply(h,b.concat([a.max])),d=h.min.apply(h,b.concat([a.min])),f=this.prepare(a.width,a.height),g=f.width(),f=f.height()-a.strokeWidth,e=g/(b.length-1),c=c-d,j=0==c?f:f/c,m=f+d*j,c=[0,m],i=0;i=d&&0k&&(l+=k,k=-k);n=o("rect",{fill:m.call(this,n,i,b),x:i*g,y:l,width:g-a,height:k});this.svg.appendChild(n)}})})(jQuery,document,Math); diff --git a/static/js/plugins/slimscroll/jquery.slimscroll.js b/static/js/plugins/slimscroll/jquery.slimscroll.js deleted file mode 100644 index 2ea5b0801..000000000 --- a/static/js/plugins/slimscroll/jquery.slimscroll.js +++ /dev/null @@ -1,464 +0,0 @@ -/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) - * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) - * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. - * - * Version: 1.3.0 - * - */ -(function($) { - - jQuery.fn.extend({ - slimScroll: function(options) { - - var defaults = { - - // width in pixels of the visible scroll area - width : 'auto', - - // height in pixels of the visible scroll area - height : '250px', - - // width in pixels of the scrollbar and rail - size : '7px', - - // scrollbar color, accepts any hex/color value - color: '#000', - - // scrollbar position - left/right - position : 'right', - - // distance in pixels between the side edge and the scrollbar - distance : '1px', - - // default scroll position on load - top / bottom / $('selector') - start : 'top', - - // sets scrollbar opacity - opacity : .4, - - // enables always-on mode for the scrollbar - alwaysVisible : false, - - // check if we should hide the scrollbar when user is hovering over - disableFadeOut : false, - - // sets visibility of the rail - railVisible : false, - - // sets rail color - railColor : '#333', - - // sets rail opacity - railOpacity : .2, - - // whether we should use jQuery UI Draggable to enable bar dragging - railDraggable : true, - - // defautlt CSS class of the slimscroll rail - railClass : 'slimScrollRail', - - // defautlt CSS class of the slimscroll bar - barClass : 'slimScrollBar', - - // defautlt CSS class of the slimscroll wrapper - wrapperClass : 'slimScrollDiv', - - // check if mousewheel should scroll the window if we reach top/bottom - allowPageScroll : false, - - // scroll amount applied to each mouse wheel step - wheelStep : 20, - - // scroll amount applied when user is using gestures - touchScrollStep : 200, - - // sets border radius - borderRadius: '7px', - - // sets border radius of the rail - railBorderRadius : '7px' - }; - - var o = $.extend(defaults, options); - - // do it for every element that matches selector - this.each(function(){ - - var isOverPanel, isOverBar, isDragg, queueHide, touchDif, - barHeight, percentScroll, lastScroll, - divS = '
      ', - minBarHeight = 30, - releaseScroll = false; - - // used in event handlers and for better minification - var me = $(this); - - // ensure we are not binding it again - if (me.parent().hasClass(o.wrapperClass)) - { - // start from last bar position - var offset = me.scrollTop(); - - // find bar and rail - bar = me.parent().find('.' + o.barClass); - rail = me.parent().find('.' + o.railClass); - - getBarHeight(); - - // check if we should scroll existing instance - if ($.isPlainObject(options)) - { - // Pass height: auto to an existing slimscroll object to force a resize after contents have changed - if ( 'height' in options && options.height == 'auto' ) { - me.parent().css('height', 'auto'); - me.css('height', 'auto'); - var height = me.parent().parent().height(); - me.parent().css('height', height); - me.css('height', height); - } - - if ('scrollTo' in options) - { - // jump to a static point - offset = parseInt(o.scrollTo); - } - else if ('scrollBy' in options) - { - // jump by value pixels - offset += parseInt(o.scrollBy); - } - else if ('destroy' in options) - { - // remove slimscroll elements - bar.remove(); - rail.remove(); - me.unwrap(); - return; - } - - // scroll content by the given offset - scrollContent(offset, false, true); - } - - return; - } - - // optionally set height to the parent's height - o.height = (o.height == 'auto') ? me.parent().height() : o.height; - - // wrap content - var wrapper = $(divS) - .addClass(o.wrapperClass) - .css({ - position: 'relative', - overflow: 'hidden', - width: o.width, - height: o.height - }); - - // update style for the div - me.css({ - overflow: 'hidden', - width: o.width, - height: o.height - }); - - // create scrollbar rail - var rail = $(divS) - .addClass(o.railClass) - .css({ - width: o.size, - height: '100%', - position: 'absolute', - top: 0, - display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none', - 'border-radius': o.railBorderRadius, - background: o.railColor, - opacity: o.railOpacity, - zIndex: 90 - }); - - // create scrollbar - var bar = $(divS) - .addClass(o.barClass) - .css({ - background: o.color, - width: o.size, - position: 'absolute', - top: 0, - opacity: o.opacity, - display: o.alwaysVisible ? 'block' : 'none', - 'border-radius' : o.borderRadius, - BorderRadius: o.borderRadius, - MozBorderRadius: o.borderRadius, - WebkitBorderRadius: o.borderRadius, - zIndex: 99 - }); - - // set position - var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance }; - rail.css(posCss); - bar.css(posCss); - - // wrap it - me.wrap(wrapper); - - // append to parent div - me.parent().append(bar); - me.parent().append(rail); - - // make it draggable and no longer dependent on the jqueryUI - if (o.railDraggable){ - bar.bind("mousedown", function(e) { - var $doc = $(document); - isDragg = true; - t = parseFloat(bar.css('top')); - pageY = e.pageY; - - $doc.bind("mousemove.slimscroll", function(e){ - currTop = t + e.pageY - pageY; - bar.css('top', currTop); - scrollContent(0, bar.position().top, false);// scroll content - }); - - $doc.bind("mouseup.slimscroll", function(e) { - isDragg = false;hideBar(); - $doc.unbind('.slimscroll'); - }); - return false; - }).bind("selectstart.slimscroll", function(e){ - e.stopPropagation(); - e.preventDefault(); - return false; - }); - } - - // on rail over - rail.hover(function(){ - showBar(); - }, function(){ - hideBar(); - }); - - // on bar over - bar.hover(function(){ - isOverBar = true; - }, function(){ - isOverBar = false; - }); - - // show on parent mouseover - me.hover(function(){ - isOverPanel = true; - showBar(); - hideBar(); - }, function(){ - isOverPanel = false; - hideBar(); - }); - - // support for mobile - me.bind('touchstart', function(e,b){ - if (e.originalEvent.touches.length) - { - // record where touch started - touchDif = e.originalEvent.touches[0].pageY; - } - }); - - me.bind('touchmove', function(e){ - // prevent scrolling the page if necessary - if(!releaseScroll) - { - e.originalEvent.preventDefault(); - } - if (e.originalEvent.touches.length) - { - // see how far user swiped - var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep; - // scroll content - scrollContent(diff, true); - touchDif = e.originalEvent.touches[0].pageY; - } - }); - - // set up initial height - getBarHeight(); - - // check start position - if (o.start === 'bottom') - { - // scroll content to bottom - bar.css({ top: me.outerHeight() - bar.outerHeight() }); - scrollContent(0, true); - } - else if (o.start !== 'top') - { - // assume jQuery selector - scrollContent($(o.start).position().top, null, true); - - // make sure bar stays hidden - if (!o.alwaysVisible) { bar.hide(); } - } - - // attach scroll events - attachWheel(); - - function _onWheel(e) - { - // use mouse wheel only when mouse is over - if (!isOverPanel) { return; } - - var e = e || window.event; - - var delta = 0; - if (e.wheelDelta) { delta = -e.wheelDelta/120; } - if (e.detail) { delta = e.detail / 3; } - - var target = e.target || e.srcTarget || e.srcElement; - if ($(target).closest('.' + o.wrapperClass).is(me.parent())) { - // scroll content - scrollContent(delta, true); - } - - // stop window scroll - if (e.preventDefault && !releaseScroll) { e.preventDefault(); } - if (!releaseScroll) { e.returnValue = false; } - } - - function scrollContent(y, isWheel, isJump) - { - releaseScroll = false; - var delta = y; - var maxTop = me.outerHeight() - bar.outerHeight(); - - if (isWheel) - { - // move bar with mouse wheel - delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight(); - - // move bar, make sure it doesn't go out - delta = Math.min(Math.max(delta, 0), maxTop); - - // if scrolling down, make sure a fractional change to the - // scroll position isn't rounded away when the scrollbar's CSS is set - // this flooring of delta would happened automatically when - // bar.css is set below, but we floor here for clarity - delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta); - - // scroll the scrollbar - bar.css({ top: delta + 'px' }); - } - - // calculate actual scroll amount - percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight()); - delta = percentScroll * (me[0].scrollHeight - me.outerHeight()); - - if (isJump) - { - delta = y; - var offsetTop = delta / me[0].scrollHeight * me.outerHeight(); - offsetTop = Math.min(Math.max(offsetTop, 0), maxTop); - bar.css({ top: offsetTop + 'px' }); - } - - // scroll content - me.scrollTop(delta); - - // fire scrolling event - me.trigger('slimscrolling', ~~delta); - - // ensure bar is visible - showBar(); - - // trigger hide when scroll is stopped - hideBar(); - } - - function attachWheel() - { - if (window.addEventListener) - { - this.addEventListener('DOMMouseScroll', _onWheel, false ); - this.addEventListener('mousewheel', _onWheel, false ); - this.addEventListener('MozMousePixelScroll', _onWheel, false ); - } - else - { - document.attachEvent("onmousewheel", _onWheel) - } - } - - function getBarHeight() - { - // calculate scrollbar height and make sure it is not too small - barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight); - bar.css({ height: barHeight + 'px' }); - - // hide scrollbar if content is not long enough - var display = barHeight == me.outerHeight() ? 'none' : 'block'; - bar.css({ display: display }); - } - - function showBar() - { - // recalculate bar height - getBarHeight(); - clearTimeout(queueHide); - - // when bar reached top or bottom - if (percentScroll == ~~percentScroll) - { - //release wheel - releaseScroll = o.allowPageScroll; - - // publish approporiate event - if (lastScroll != percentScroll) - { - var msg = (~~percentScroll == 0) ? 'top' : 'bottom'; - me.trigger('slimscroll', msg); - } - } - else - { - releaseScroll = false; - } - lastScroll = percentScroll; - - // show only when required - if(barHeight >= me.outerHeight()) { - //allow window scroll - releaseScroll = true; - return; - } - bar.stop(true,true).fadeIn('fast'); - if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); } - } - - function hideBar() - { - // only hide when options allow it - if (!o.alwaysVisible) - { - queueHide = setTimeout(function(){ - if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg) - { - bar.fadeOut('slow'); - rail.fadeOut('slow'); - } - }, 1000); - } - } - - }); - - // maintain chainability - return this; - } - }); - - jQuery.fn.extend({ - slimscroll: jQuery.fn.slimScroll - }); - -})(jQuery); diff --git a/static/js/plugins/slimscroll/jquery.slimscroll.min.js b/static/js/plugins/slimscroll/jquery.slimscroll.min.js deleted file mode 100644 index 26220d6b2..000000000 --- a/static/js/plugins/slimscroll/jquery.slimscroll.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) - * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) - * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. - * - * Version: 1.3.0 - * - */ -(function(f){jQuery.fn.extend({slimScroll:function(h){var a=f.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:0.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:0.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},h);this.each(function(){function r(d){if(s){d=d|| -window.event;var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);f(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,f,h){k=!1;var e=d,g=b.outerHeight()-c.outerHeight();f&&(e=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),e=Math.min(Math.max(e,0),g),e=0=b.outerHeight()?k=!0:(c.stop(!0,!0).fadeIn("fast"),a.railVisible&&g.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(A=setTimeout(function(){a.disableFadeOut&&s||(x||y)||(c.fadeOut("slow"),g.fadeOut("slow"))},1E3))}var s,x,y,A,z,u,l,B,D=30,k=!1,b=f(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(), -c=b.parent().find("."+a.barClass),g=b.parent().find("."+a.railClass);w();if(f.isPlainObject(h)){if("height"in h&&"auto"==h.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height",q);b.css("height",q)}if("scrollTo"in h)n=parseInt(a.scrollTo);else if("scrollBy"in h)n+=parseInt(a.scrollBy);else if("destroy"in h){c.remove();g.remove();b.unwrap();return}m(n,!1,!0)}}else{a.height="auto"==a.height?b.parent().height():a.height;n=f("
      ").addClass(a.wrapperClass).css({position:"relative", -overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden",width:a.width,height:a.height});var g=f("
      ").addClass(a.railClass).css({width:a.size,height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=f("
      ").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible? -"block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position?{right:a.distance}:{left:a.distance};g.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(g);a.railDraggable&&c.bind("mousedown",function(a){var b=f(document);y=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)}); -b.bind("mouseup.slimscroll",function(a){y=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1});g.hover(function(){v()},function(){p()});c.hover(function(){x=!0},function(){x=!1});b.hover(function(){s=!0;v();p()},function(){s=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(z=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&& -(m((z-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),z=b.originalEvent.touches[0].pageY)});w();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),m(0,!0)):"top"!==a.start&&(m(f(a.start).position().top,null,!0),a.alwaysVisible||c.hide());C()}});return this}});jQuery.fn.extend({slimscroll:jQuery.fn.slimScroll})})(jQuery); \ No newline at end of file diff --git a/static/js/plugins/steps/jquery.steps.min.js b/static/js/plugins/steps/jquery.steps.min.js deleted file mode 100755 index 84915bcee..000000000 --- a/static/js/plugins/steps/jquery.steps.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * jQuery Steps v1.0.6 - 04/27/2014 - * Copyright (c) 2014 Rafael Staib (http://www.jquery-steps.com) - * Licensed under MIT http://www.opensource.org/licenses/MIT - */ -!function(a,b){function c(a,b){o(a).push(b)}function d(d,e,f){var g=d.children(e.headerTag),h=d.children(e.bodyTag);g.length>h.length?R(Z,"contents"):g.length *");e.removeData("loaded").removeData("mode").removeData("url"),e.removeAttr("id").removeAttr("role").removeAttr("tabindex").removeAttr("class").removeAttr("style")._removeAria("labelledby")._removeAria("hidden"),b.find(".content > [data-mode='async'],.content > [data-mode='iframe']").empty();var f=a('<{0} class="{1}">'.format(b.get(0).tagName,b.attr("class"))),g=b._id();return null!=g&&""!==g&&f._id(g),f.html(b.find(".content").html()),b.after(f),b.remove(),f}function h(a,b){var c=a.find(".steps li").eq(b.currentIndex);a.triggerHandler("finishing",[b.currentIndex])?(c.addClass("done").removeClass("error"),a.triggerHandler("finished",[b.currentIndex])):c.addClass("error")}function i(a){var b=a.data("eventNamespace");return null==b&&(b="."+q(a),a.data("eventNamespace",b)),b}function j(a,b){var c=q(a);return a.find("#"+c+V+b)}function k(a,b){var c=q(a);return a.find("#"+c+W+b)}function l(a,b){var c=q(a);return a.find("#"+c+X+b)}function m(a){return a.data("options")}function n(a){return a.data("state")}function o(a){return a.data("steps")}function p(a,b){var c=o(a);return(0>b||b>=c.length)&&R(Y),c[b]}function q(a){var b=a.data("uid");return null==b&&(b=a._id(),null==b&&(b="steps-uid-".concat(T),a._id(b)),T++,a.data("uid",b)),b}function r(a,c){if(S("enumType",a),S("keyOrValue",c),"string"==typeof c){var d=a[c];return d===b&&R("The enum key '{0}' does not exist.",c),d}if("number"==typeof c){for(var e in a)if(a[e]===c)return c;R("Invalid enum value '{0}'.",c)}else R("Invalid key or value type.")}function s(a,b,c){return B(a,b,c,v(c,1))}function t(a,b,c){return B(a,b,c,f(c,1))}function u(a,b,c,d){if((0>d||d>=c.stepCount)&&R(Y),!(b.forceMoveForward&&de||e>d.stepCount)&&R(Y),f=a.extend({},bb,f),y(b,e,f),d.currentIndex!==d.stepCount&&d.currentIndex>=e&&(d.currentIndex++,O(b,c,d)),d.stepCount++;var g=b.find(".content"),h=a("<{0}>{1}".format(c.headerTag,f.title)),i=a("<{0}>".format(c.bodyTag));return(null==f.contentMode||f.contentMode===$.html)&&i.html(f.content),0===e?g.prepend(i).prepend(h):k(b,e-1).after(i).after(h),K(b,d,i,e),N(b,c,d,h,e),F(b,c,d,e),e===d.currentIndex&&E(b,c,d),D(b,c,d),b}function y(a,b,c){o(a).splice(b,0,c)}function z(b){var c=a(this),d=m(c),e=n(c);if(d.suppressPaginationOnFocus&&c.find(":focus").is(":input"))return b.preventDefault(),!1;var f={left:37,right:39};b.keyCode===f.left?(b.preventDefault(),t(c,d,e)):b.keyCode===f.right&&(b.preventDefault(),s(c,d,e))}function A(b,c,d){if(d.stepCount>0){var e=p(b,d.currentIndex);if(!c.enableContentCache||!e.contentLoaded)switch(r($,e.contentMode)){case $.iframe:b.find(".content > .body").eq(d.currentIndex).empty().html('

      Id`W(A8Bq#TwqeQ!0a+5zA;-X!?HGqEIe}mT+?3&v{}_7GFjGQb@-w -xR#W2Q|(yof0HE09NkBbiA~0lmdhFabNB%FuvzAlw+p-{5h6MS -ijhBQL!s%BC3SMYuYRRN19|SIdWCopJtGA9`I|uHmu}jNB>U^nu~aw-^D$aHRY -sz~W6sk#==_6@x!?xnd_mlPgp<3_xVGC#oVEad|H1eJ-4P#{N_3s?|YpPPON`!EUW<#}i?c6 -|=waJA$J^H<>AWp+!V-=GM&YVm)Uk>zwy;x0&_D>FQ)5PF+*=KGTfz?Ro0aA#{UdODjgQ++I>v)jW~T -SBT$_J#ky%<7G}nj}2``QK=91it^7DN>Qc3c}f_PTdL9PRJdnLYh`?;Dch2Askg)rFg$qjrp?(X){XGx#uZrH4R#MhQz`2& -?#IL(M7aq$j%hDfULxF;f}J+)5gADfGBZ!G4P_G#8cZ2v&(4YyD6W0`PvcR%r7SS&RO%m -cEoo{f4FNX|%4WN-+A{e@`njdCL{TuJv!b6MK6?8NTX!|K%S?rm$Cj^#c(il)wpLdsXK%2$4QMTc&E@ -RfahZcKihOGBSzfi9dF;}FLuoVm;+{Mp~H557+9@+J+pQN1JfFdl5``H=c&$`OTu?@Y`+Nzolg{fa`f -!m|(ao2zse?An=U+OE0HVM}dTFk`a$7h+}K(LVX_MEieYp8Q*l^C#xXUmD|Q^Mt@iioiGqXE2OIIT9l -nl0X>>SSBdJ5e%@!DeCLh%0P)HEaZ8dfkGM(dlo?njZaQqxMD1u7HMVBL7V1ZnkS%xY$}MsGSG+twh6 -EpfRPf#lU2e^^)Iq1tT@H$FcO*$KqzzR&&(5I!A@>vVDq5)v|4#8kCEbV^#L$FK<^|2eYik(li5_;B8 -N8v777?`ghFcto0fusdjk^&rKa_0+?0&^%c69j%oFK$T4$U1=wA3_F6VmxXcXrEW9EtZ|C=ZOoO$xsC --5ILPu9fdY$@lVX|HTB!w}Wvyz%zLmQSfZmO-sHZ5Wd=|-1>C8Y`X^S$&oU2&TU>bT -{x_I!R^o_iz4Nv33n?N)8-`=!|Q%zD2J@1wAr`vKDB_N}sqgkK+aGb -iOh%eJbHhK=Ox&c-;aBq_WQbEJOaKGW;JG*7Desfkc7rqf+6DFTI2L1J-M7cM1sFfH -e2i2&9=9L_h2{SYT)Uc>9GAW8M^Um3;zAy9{Rr0q)kof7o?zXiW2~c5|m>!-)e!A<~+4?y`Cu8bbrt* -Pq|gs_@=F|XmVRWYsujzK?zT&a -0xZ9DHjnOq^5+*@#!(q(>>i5g3%dDUs_iX_boS`X{V7@jfa%fMmC}j9#st=OU6Z;a-tDaLZM-~_buz+K-$g;2N+;T8j%f;|gEP_S| -T-z7JDu{Rtmyn<+ygFuKq&A;crUMHDkUPQs#H66{skq~`NF10dz)FCA{PaB&H-&zDGM`F$P0{RVs&Jc -5h6R;R)pa><dg17e@&+dGObSs1z6_zceXu0My{{9|cg*>)!mb0E#H|-!0rmrj^?gzyHX)McpoaEl1 -nMt&8gRt>3;cMH^Q{N+ezAQRwS3G^#^F-+Y*uU~6gv{l(8jB#QuWP|~{XrsPk6o9>ZsjhZ@~15fMLw% -q8V{=Nh+LDs5%)+8Aad0kkadIlXA_Upw>D9N-g74NCGgZ14A{wRL(srulbuHAcI|wuMaJJ)cb|S -04uHi!Ht-EQ^iw>*SZg}!3f+qBXAgsthdIp-f!?0zjb=t$Jf|ofXU%inp*bc9$sEzp)EM?jSnLDcU1~ --t65*0M?T^fJOwui{+T1cccDk{z_MLgnSH>m58i6YObA*mLf%Nq?Sch608q2y>dz#m-n6bJyvn^4{yE -)g%O+c)rtf-o65zC(Hsg%2kTN8e6=&gwGY0?+Pa!TqJJyG5BsydV55~67_3ok&6$*SKf%k06=(=sC+y -dT*~TgC|Z7M!)E3mW!+_QL$^eL;Trh56b0g8c3a^RxE_`P~=hXYUL0!wd6O5geEuP4ms6G`@}OwQh%e -MxPC8>}`>oCg?3Y`ue(@h?ikduHf0p#MUL}Y1lHZOErq<%H^%BPTd=}hUu^Zt8MnbQ&oo*(h`v|hr7+ -$HLpGxN89`C3@cIL^leq09q$JR!`;QZxmXC-879ije0LA-e1v>1tMgG+$NavkPTzySn(S6)2hIVyfd6 -5&fbw4dvo`vkf1K-7UmwMb%W46NDs;tIJu_eVPebmn47DmTh8)Sk;thnO)-yKQxmf64gw5?XmH{3n#V -~Yvx0@M$8d$WPajHF3C`y&gMN6LDaf9!+8h7N96u}dtFv%g1%C)z_*VRUt(O1)dT*ei7pamxxTFmEt% -BiUP#&I@Wf3ay`na^VFA2X?bW~2NEj*{&E`YluC|AD9e7a3IlCd2#6oO-W6I(7f2wiQXEG>4PuSGHA_ -LC*{^ExaXgX!CH9oiSScSk;#4=dB8$)3nDPi -IIV_F2yb1+5+V6O7IR@mkVWNL)9@9Y(@qf}J4%w8_uD>U4{OA`r+4-%*0; -VC;1F-?2H7uZ+&$v^hszdRzMijLysVC;rOIvX->okcu;Wkp%6Br8@GPzGr!OTrAd;*1tN~=3=eYTX(5 -6K5>=SydZ1zVLkf$+76g|v5cCKNl8-|M)P(!^~T*^b6D0bqreEa8}*E_@_5=Vv5r{Y=FLhlGvpSi=gP -;)QN3^YxhzV?^LlppnqP8gvsP14Y{!y+Ug-Gr!ng7Kqve?3@xwQ)Ni(Hr5hOG-K{#%jL7$$g^WrB -jFVL_9r$whEtf^~el^>WSngt8dRxz=5&mkQa``TGvK=d-RT*&2DY(s10qIx4Wf{h4XZSD|c%xUF!CMK -=^Ua%_vcEi-XOdXZ~F~tF20o&Ky~u!ZbUc+(*Xp)xjxUA>nH=vL8IPidO1;Cg=7sbj9AJ3<77{k<|mu -TeT)3d04_P5%Mjm{Df+~DgE_zV95JIFc(-|sHO6cd%5b&veNVRu;Od4^ZBpRt)$6;CUr4VVNtAaQ@iy -CI*U@H;gS%%W{hx{uXSQj19IktrA?c{?XY66ZF1Z_?KwHLIRReQ;eWpNe@d=niuZifpfO{P(XdIRMj>qOE03YDMs7I -#=CWx2;CZW`+<-L0eaaH$yS=4{2_Mfe=n_6qBzjmLtQna0)2n0b%fx?GCm`9V=dVo|Ma_}yXMUot_AS -G%=)XJ$wom>W^M&#LU|x8hP|X9=6_x$I~tx)KlvM%0LLb(TabPl}aj-0&=p(Lz()c=wpgS0q>HDD9fC -)?Kz39V>L@-#0jfsJWNz36@>`W3QdJ-FyBx2FpBs9RAKG_{Vy9r|q9!{Y}h;peT~Ym@g9^rzKDv3DYL -H1ZF1!R!kXK$%uL_1Ur>CLZ^)M>?b8)Nx1SDM`2bwmBDQKJb}p{aM4o)qaZ8`7X~vdjE>+e>^O1Aktrn3+Qt9Twjq^!hBi`pY7G9F!5NDS?LxVwI{J -|yMDG&Xv_|NhJ%@R@A$Lm#&%r>4;lpma8Hlb712V1H}^NeId)pg=}E2>yxAFC;H)CS3$N$+H;Uxyo}uSqsz^kz5JYuD(CjePTcjvW-Z*hh)jA4rvg@sm{JF=y2H-iuBiEe^J7iT9$SU(9u7}a*+HW6`QYE9cm#Gt_(al#Bb=HTp -CNziY@&JY4SP4Rbt@`~K-K3*641;x?GDxX+7MQyGuTO$mVKsS_+$Rekg7p1hf8VzwRcpj`fcel07hB= -R(o!})U!p=!Yci`J87;Iso8kJ5J4vTHw*NAYY9!~14wb;Po}>XT(QvIE4={{EM)bwGY9!23le%gL`72 -YEv0f+Bx}maz#03QGzWgmak$NG(xfM8(^O`UXuWUo%;s=}JJhzu6sGuSg0o>Ak_{>c-f3SRa#y?(%0m -)ZtgH1^fUBlFzm02Sw$%edcIJ1&D+Z*h$NjBWQ07WuevxYGk?ZF}m>hJ0I>d!C_h+-vQY(q&#ry8CH^ -y4VqI$><<@_XGQA9o;i4zLUka5Vk5YO&OndKs*oma3Pm$iv=tdG506fjs#9cIM%ke?*>`(}AH^$|aY<{X=AbQavWr6u-)AK%iuz1brcr;(exG%M2n865zS -SED=MX2KGX=t|yPg0VgSzC`}ETKL<(aGB8E%42rB0fqNB>{B`Nx6{7Zx$d9p=qI(yzv$$bDf{fSi3Br -o6h37wax6@drzYTMro??fXwYpQFOuZz`Wo3(LOg=94oE_FD%YAMQ;t0b!va7yk_?oqBnr7J<=~oK4DN -RHvo&5hEI|$=WfnoXn-P!@VZH(dE2D$&fZ~AK%%_qb;1D&H&mf7ZOko6v0uH5c@$cKH!Q(ZBIyDqfu2y~`o?$P0M(!6f-= -;zHPknb9QU@sVDSW0~KQMl@lg65O!9(gTX{u*@uqr$m9RXG2#!1-JC4^e1Lz;KaAHB;q769v!so7*>Z -UEgwDHlGTak -{Vz=``9gRzFduvuAW?_2?==EUr+78=V*7l&Wv38DJ&FXP>snk06w36=RC6b|2=o~pw@%3QqhowYjyH@ -DZ^Kd*QzSiUNI~BCLYC?l#6=)%_Jz~-<;C6Em$$`T8*{(w0J2@YhvH+6WjL<#t-0y-JUCnP;dPO3&|C -VSr^y##;o{oB#?`&P+yY4h+3_rpTx34z6d#wO2NhR;9mtl6!@$1nHO}57>CXy^`6`xgmHJAg#+Qi23N -k-4+r&=~NX1||VHIIZ0DqLBjNb(^Xaa$%=QGl)uo-EWg^Guek=LltO-i6l1oSUeEnK}6QaFy_9CtA-3 -!d|q%&@Jq|)Dt!!5{4$I8xf)Pbq)+SK6~6A+7`RWfzWu(x^e$eApYkO_@9H`&sTrDQ0mK~eDt)oDa&C -d7CFT=6B<@E0=7LmRWhQcC@N@4;sx>bo_6W9#RE2NQwQ`0j93ydM44sK!3T~4;Q=%RKJ6ZnQ`6$wX)8 -MNXWl)SB~HUYCrQJadl3frntbzCv%%Oi1^Qv(de8&xZV<4?b_trjrjf?)^KFXEojAUV-}dXhzbiLbZDnV!CxgtcQpiiKp;SNxh<8 -qq&M=W;f3Rgc8qIX3*Ny+*OlHX@}ejm)56bt)=>YD_OV76gtGaNTJ!0krw)tQxC3pb9P&qQ)ewfZYtk -f`s0;+hUo*V&%<|>@772rt@d(y50xs+2v&BCTDVxmpr5|70j3>!1k9t$m>-rc?S?us=I -zcL#eGZd5;|$Hrr4@B+a?hnjxM*Ef1JE^VTYM&x;E~E -RPR;hu@q=CGS}g&0H@#pN{QvP=kYgeC9*P4=bvWigd574P-9lv-LT+-o15uu5d1=R^jNLF2z+NvcHl8 -%%|zAQ{=tIjL5%xS3VB$0`#wZ{A$~~uZnm7D>{3}-jBnZQ~x(NYP#%?ec`_M-h65FV%fC605w%=Bc@c -=7zQMO*_ljb3IKYhG+c5+!UdvV=fX~fZqN+oppw%HQxt<2!ENNGN(8T^Rg)CDU9x!ELxGsKApKb`ESt -cv3d&7|4I(%anDEL>5K6z*Pe`Y=wQyAtJJnj90GXS1_W_^{Zh%cB0&b7LE)bgbCCcDNKEKX|g+_1xXB -)mvE}P~%e6uZEc974J7SprpcNd1~Xv5Ox-oVVJ^$W%P}+oh92s9NtXoA>PrhN(i`Y -hAdvLURCuZ5_a`&5v72A3ksyG=8*IUl046_|QKx?9Zb{es|bEtCfoUSS(fan!9<}dr}$A4ua5+*|3!o -`MEQC+h5MOa4W-|FCUKT;a!7>(mh^V0ZozF)8J#}!Fvr)JjLg;Hm{wk6*1u*@4MN?jRhrPs?`~FHwTF -kPHZn2^bxtMTXfE-$+dbuQYQ3<*t?#(=De-YtxnX>9U+SKxjDoE+KU=D?C4N)haa7q&ps`>U>0^#Rk!{fwTi44qK7>O&HdnVzJl3o13wksP1C%3X_EkCn;~SMy-bH&0jZm -JIi?184zgqDa^eOBiZdx7H>%+2*Xdhv6?5SMB(Za4M%@Jo -VjTtNH&!uCf4>X{5S=Bvc%sCv$G~Vj|3f&z_H@IFr?rGQch>*mJU6i?$1tN?MQiUXU%pqk8 -g=v#n1V5jZ=QaVEa{roX7bL^`g7T4A(Y@A3K5=RcW)%*tojjmfGY+8>Nj~5Vu=X#=;)Z7y -e*G-rIKk0XS+L*j>%(uSzp|dd{jx&XX;asMO~opwZsiu6C*9uTN)y}CK)eD>wkcv<>8)Pk5Tg*wEA)C -Z;CbNm#m-VWHL_rX7OdR|=C4@F@osjX?XCWDR&ef2|gQL#;#-us@oG;SkU -tT(82xo`6cqNa*^4`&3X+ThZ*#G9g$<$I-N%IKjeoDWD@DopKbWHN+SsVm6&B;=K~_RBo2epivPglV6 -L3W$yAAW|_XqD?ssdI^~-Fa(7nQm@*;gUy=3WFO&7E;_Hv(1?Lm%$u60y?lW$c8}cKryar$1VlSU@Ma -hsJc;ha_|V8hb%L1z%uP9|q>f?fc%S-?sJfcS*7i>I}%YNwS}ZsfhYM=vVJMKn&QIqd~xM99Q8#7 -u5JRF!O0%EdMZVyc&4@RErkIWstuVnAzlnTJ2i4;N^{dEbQiSN0!WRlUN*^m0Ntg)3I!C{j=EUdAQ9V -&V{XKsHAq=-8ggaj&k*yXX|(;vETdGcysnSq|+~RV=V5=inh!M>)l)4+vEJCpDFZtD@}KMRQ;YKkKvi -$@$@Z-&Y7akvIDJL9Aos6wx%CKylsXk4Md)NUXRr5`D -WItROFolZBU8xxZSx&H{=rZjG+-BmiOjtgX--t1(IZb~LDzcb)!g-yVVVU58MHOkCd4sv -s#;~avDM*>_W_rUC2{gmH?SOfhwzPdv|V_*&Wr-t)4 ->Yz84+KyjNG$BlTr&9sT2KP24znjUGaym(`3ungO;yRQ8&<>W;HMWbMwPuH9kSKSad1lD3pZTtHA%Mk -g!D5n)!wuDtDV?$k$S;aZsNV@EnIHLq|rS!dfUWgmMxxP-EgBxEsn54T|}lxSkkqA@A9#}nD9GgWW3- -DWv12TLARVQH+=mfsEYl2b_Gy6KKUWl#~)9_yXPpE@k0s?~vV>$4pchxGrY?$4SP#oDe>_?%yHpBu61 -yE|eZ(2EKJA_!;niXb38zkV~xrm|U?Syk`z#QS{_l^LrLrnpk(xVkY$kgx(X5$yS%ng0USKNCg&NAm7 -}xz@f&ir2(boG4V^HQ?SB%*0jTsP+Fa-E4K$ -L?9@3aOIYvLXy0Puql$PQ8X!?3f=LyVENU9=?mt?;x=9g%AY8hSA;ato -OJt>7s;1{Uyf;t`N#ba`sUrh{~MWyEx(e8X|>uOJ -^(e=6Tl4h`N8NJ?n&X4vo{JKGkFpjB7Qu|U(rsu%HH}ny+y0m|!n1OUsOGgA|KT}V4tmjJ;JC3gjSi9 -OiZQ;bm5W1LFgvkKWe5E$>2Q@(Co0)PXyK;Cnj -Fo%{OtS4KiZ7d;t%sK@RxOa9}-;<+0Id)`ubhbcHGVtcS&+lnGWG7(vl$xbFaZwphn$A`cuvFyi!q%B -p0=Hb_M19V)+dIGVn*NiL$yse_ME6bM6ao*e|8P^CiZ^M*V4LS>15k4QG=dRq>WJa -T3h~6|WlwKn5uZFA*Y!ejqjIL8c+I2$_VEy`geD*ySTAA1|3<&Gk=(`>*Rv4@C_KcQ>I7g$kRT2q2oM -th<=_}(*bxTqJlTMlOgAB`0AMsI`LB6>0*DFerWyThA%id -`TQ=+{87;3KGpKEpEd0aPQOpgQ_3R6}2Km45}*3wMXUrYFyDKckF#?gY4Mg)jUbuAyHI=#xAZz}zf0VJ4+~Vo#*ee>F*$$FW+(UCLWk`FRU{anDzkO+sdxA -q_HtGG^QMD1f+F5M(!4|G0Q3*1;;uC2`rwBjvnuDC{BvfSDwkT*kY`AaIeQUFmAOBXHz@n68gNeDl%2 -$jiNcr8m74D@pmhk<(puOi6!GVb>FqR?i^mofx1C)=Gq2%+jEIuJN6xx6vdwtJ+0enmzBEO^s0IhsfK -wUWv>a4nk`wKoT~1Ex@jojkUM>jenuO@Rt(Qhx!ZcXU<^tUQspvOdL$!$ty}Wx*&!i)PKHP>SG?`|HZrcfwuVDJNYhRKq-Qv5C;2@ -vKUi<1`%yTNMyXVz!QM^Yvzx~pCzNv6fhC-^jBnv5dTaD4C&1p6bGsFnrkE2){~Dm!XWXvRu9~*x3rz -a{+s?v4uaksLg~#ynn;1aT10`Gd=P^mfZSU6^kydtgs~VPHo?STmT5hRQs7#^x}<=}6dHgc1-6kM=@> -*3MD)kd;R!N){Oc&GWVxN`{DQLBiXX{AJvhTi%A^~3CSEBm)O-f -r?79Ro$Zg4v(V?!*)J!2^>+QeB*tIug`Wqze(Em-PWRM>UF&zpl2vii(#}pK)2&WQSGj`p9&h2g;&Vz -Oj>dvZl3$*lNTR%@z-~ip4WQIkd%>F5E*#tA8Q$(x)k^5_;2w`D0THKyi|kaMk?35^bu|h{$GhJ`i+! -PpFu>V!IJ|8-vGv}}WDXX*M&i!nDCCH@qyq~bi!xBj>+K}D$sQxc#6`5*A>Un&sjMP#bQ{o~oG64X?= -s>AqDvi*dAQGyp13>Q6cu`h6q8farFizu)x)3CBKed=>Myo$TkP!&VsVY4no3?f6TcyGrk8w=KFjgG- -;uTPfLKC&`e}>kBT;92UVkqSj<~Sl4_%MouzpnPQeFvhe=mb -4lg1|#?j>k&5iscRz4QUkjpDskojh6}mL8mr)apWFAzvdfnI#I-|$s*bOgKy=Wfn8T0J%Pls<=nYj|Rj*R>{(Zt#$Xe*nnWmKORJ- -R0C%)bwm-v^rZLfc>6Zu9(DnQ>Al5Y_; -fY(rv1woP+k|lz#$I^SCdhb*6bZ}ii;F)*r=KIe)k@;N$9&`&Kbv0L?FJZ1dP=@Dv6&gd>n1hVQ^Clk -JzdO1)H}s6xa*mEsYaAz9L=B&((U^m%X;&?zYUp%mJl+;w@3_@0bWyhTq^EPYr}UEcHbuR_kx=9{|hV -{w&7zCEv&e{8Hs;;Y||fb@Na{Ue{|KiUJ&2EJbb4~iQ*Vb6D&rd6i$!?je@^$gk*7&!cY<;5R4_Lj{* -k3I*Gw}FwmezLG}(@+kk8M7CA&9oLHj>Bn0r!e5@aZZJy&S0+xx=jrPHUWFJTq(4dbG=HQ4;9CGt%#S -y@3VSzT)F9L=j1*M2Ju%Iw70=-58*w)`?(9Ilz1+fho0Re6{0c8K|h#%U#_4W@QJ9gk>CMr|4_aB?wn1}@w4E8 -`&rWwOwr9+uC7~`Mrygfl@Rp&`(v6|ZC>cmS5Aq1u-A8QxuY$%5pyKYK6iXCu$ddz84#U#Y_tgN(>KJjo`PDvopfr*F}?S>G11AKH|Kug2~;lU-`!C9ipS<%Hch3uhu8 -3cK($z3!nEaBk`v3kaXh87fR0*O=?4dFyS??E|NAi2n({%>9T;V|{$rRzRQ!;|(8#aY0T>oQvPX7tiP -xq#Z8}b#;6FVpH&Jwi+u;FK_&Ht}QdW`^)cp@ygh_7eV`1=?yUMNOzgMW^}K4C4=AKHTd%!HF+F4$JE -b5ckN?8M^8#qJh6xQ#IM(Bcan4xhWwDsq&c1*M{6MnD@Ov$AsoRb@9jB>`PU$Y>aZ}kHI6H%ny>LbK~ -5~?q%n6f7Gwvd2m;GWj!KT`jOoR!%`Dbj5%$zEcerMN8@ZoinL3ttVwosGcnHXz!i#%&Xo9_ShTfMeU -a0PF2=-U%9chi;a`1z6_-|e -C)n5FklfQ!^f*|M*bJKJinhruBssqe~HZfr^Nxh9%rzxl^N0qr -K*Hu@L^KNIZcRLX+BGZuhmGWsj1Syy2;A0up=*IqN@C=rg&-)p+wufnB#SXZTXG`<$bO8vp!~qh7v!9r{YJlyv@| -zzx=pp0|iB#PU(D6#mX-8736-XB5W7GrllYeAjlzyVzw$ZC|9lpyq)qu;uwuvi$9Fdf9o!hj9a?FXc( -LR#v~oAv<3VM{buK;;_r$b63~2|ud6``iv*@+AX8#01HuurF(C3qX -sraiWS{?M);pSYuE?n`X3et -#;NQR6yIbO3Rl*2U}^oL@4%h%xe$^&1(%I0eHrzfoLvHtRQiPzbTyJjehAxl29~Q!oyx3Plx;Zm4Dtke -V<=1T@oj`gXoj7#!PE$8E{oJl-l?Y$VeXm1@_Oe<)ce}jV}Me{@5`^w!JvmthCpC8QH}2*K`2T&o|#| -z`Be9Agm_@AN&3Un|eOYfc_>*fFdW!03b*)08Ai5`ZO9Gf`n=Pd+S<)tcU&;nJC&o1xzv_fQAWDEgFC -ovyD)Ja_BazjFVfY69J~^nscpKh-2VyWXs4_Xo*u$t=$}pz#XiR$%ZRv{SjJx&@p}faXwl4fGoN02*2 -OZzqTIN4gLD<>tFVBXzS0ckn#yyR`^%|8UFegv;bL`Z;$2Q-^t&FmS5hH -ko?j3v^?45N{?_W4S-ooF1Nzea=aSzFRiO>gC&>Ve##3;(Y2DQXHp2}ShKe0?dI2ZbQ@&`H6{Wp-q!3 -lb#x)_p-iEiJAomxcdkBAuLZdKTgQYdHG3ET#88{}ndNfNc!^!V{=RjHLwuQ{L?lJ-(v;n~MJK}ObgkcE -b2=|p5nJ7)T1YE%%~;eff%fm&PuseG!p+my5hw`58Qw_&!Yx)@-A<2(%N8inhLh_b`UE?s%!AgR!i0L -Esm$q2(yhd;38_V$o|Et#T*SFOoPBScyNh5jd)=Z^-L3bRBJdEWk@v)cs_) -%TWoI0Rjj4#ELd-u=&n0Td6DtfU&{`O@I;@N`f|CvgRDW>b3zg?B*BFrht1IVj!;p> -MSH6;Hr83eyr(+NGS>`as;-G1a17DbYt^`TdNQa0kJjO=(*@0X)$sDG8*)c99H??z)qs^10`Jd#+qFt(Y>(|5Bh-zr})7H1-tk!ha2bSy7qj(SG$bOUi5;)~>^^Bu1f`3}i+Qc`J_lySF&g -L$kTa!Yqjv+jK58}_MyI0gMfRdo|K%t1nT<-1QGZLx@zMJm_;Mf3sN2e{e3?k}Y=$-OL{d^8YY`yPuC -9W$r)UEJX$Sq>N2!syNn?(IWP>Ns$MJv>6CPe+!S?MPNVh_-vhJ^p+p(_3d2lB$@lJZge1YkHv5PV+k -GPYe^*-8LGc9m1ef3_1I{7W~k~rahnE+^W+Ua@GiD5G;l)Pe&p|*_uXgzBxSM2e1)&nz)b!)*IpXv2c -UBMDflHhx_Y4PjMzrM0%~>S?3P8a#H7l&#O?rpa&Y;EAKr~Id$HPZWnu;vsY|s??Wkj=Y9P6IO=ScQD -rjk2j+_Fvzxkha*r{wrE$_(d;z^8Ra1wZTVKh^I6Axe7N%AL@efvhp!rpuf(yy}{ZY|Cgu1zdQL4m=1jh>Y2o8x4fL_TiPEiZociMM!dDw9T)DYwnlf -sD8Tc%%}c|Q-M6n=5flV3v&=JQ*I!dTaU_D^$wGNNd*+g^c{H-vyz)TJcM;qMcG>xN13}4_nWk=P1}e -Ql>X_e4nHJsbjx|9r#PbgKPN-y+@1cO%rHGU>buehyR&ZL5Ea~conjr-b@x|NA{DL_Bwug^hmkEclHk -a&Xnl(2Jr|Ph`Qau#YLUdlvV`tj=yT4r-IWEKb+K6r>23HtapnmbZlDHajjQ6Kt!k+ZY=R6c>In%8DP -?)$qPH#-AW}U}79}kJ!^=?fjaU`wByU`)z6+Zf?dNIW=r7_YM&Coke$rE`^?;d5Y%JX3;&*jx3QItO? -`8bRHMTcLwS)P?+9zdpwT@H8I_HKGi(fDhUkXpy~@3;8u{F!jk;mT!%dtdhK`n=)K4(UpI)MZa8F;PC -c(6h3Vx;dk@NW8IV@f0L!n5P}s@KdA=?m92*zQSIw -70ty>Z2tW_%Z&U21|cCNB`qhzYUoFMy8H$N=qRF=6-PsR7%+dq}yvW5^bh2>k(#4*;(Sh5&dDvgm2m$ -=qB<(prCxa#ye}+0=ktH2w^C83#cL>?G&V7jGFkwPyS8Fgl(fq_~y_@VqgSmjoc{E^W6OQP%x~t#!l4 -cOSAp}Ufs0TqfOWy-9FU%PIL<7On}xpv&or+|3&_&)+&cv$aMKr$h7}AA=7u{hu?-wzs=V3pR)D+NB( -ht%GN);8|d5H`Sxzskmy$#yYMMvS3$-O7(~M2$R~cb=^2aX>AF79$0V6Xv9zw7$g2*$G?N2OGsW@K}TKo-Lpk!pt5H9wluv8nIysbS9)5v@6M+(5T5tX#yUaP55OUDnMj -#ym96VVvok=|vAh+9`7>pj0F0Bd6S?eaUj-cnL49(+1NCY7@fiuat}H69zB+Zb2DwG)9^_k%|JtfvFu -XEKKL;A#UR3W?~iozTNMQ7DY*)k0Er_{kNk9jmsvF6W{vFQ5D#_^9MVA-``G`z26?y7VdC-Vy=Pgl+@ -@%A*i2APS`8zKx!76#cn+}@*P5z-bYoVc7sK$j>HXxN-Ql}CP9v5PWV7n?O>sDcvap8hGfCbrg3P7{e -s1osYo;7yd2ytFDRErhKJR|RcKc*zSDD^5gC_1yK4qPQ5q}>y;x@Qg85bl-8t^%H_I4F+`+7molR=GX -BO5$e_T+rzk1ED^a$r?|*Bf@Dp=phaR`!PEj7;@@&m7;^@ -u0!$WfSf4?_C+zg7j7_c0W}_n^*67Y33W%_jARH)-BQxE~e}+6%=IfzB5dFI$I%azAyD5){Z?gg#7Vf -q|z%o)(wZM_ZK2mJ}S-(TBSJ4x3Xqn00#d7>M+i9aCF|QQvQ -M=IyLlBc3XI -oTbbK=B`)G-c-|BGES!&cCwbYB%Nn&Dp1cVI6UTrw4%x+MVa_Au2dUZ=CR?%3z&)%%8ezoxL!h757*ay -o?hky=v1XoA*JrAMfEs>X)m3Wv;LD*?EpP$ke#Q@q9T2&%2H77Ts}f(=_CD^_aA}lgb-T4eoOZ_Eb3U -g=zQBR2L~i^MuB>wR>FtKBKH$gO(`x&-qn6Udivr!hta559fanQvJ`Y_?1`oPgeW0oC^UeJ_xgswqsB -gq6jcXwMI6{rjY`g+}o@48uWZT^o6saZWW=RAO(zoV=%-W1)%B`g&^#Sh^>eegVW-TGKPeppH2n8niA -i}&1oF;+9T?}c(7Rv#@kv5xR^*bP0mf`Ki&l5){qelqer00zeZi4tHN#~Y}*V08*U$MlOs<4D19l`AP -B4GKLug=AEhr%7X`+&xp(1>u$=1fFX>Bcjjg_fKi#+IL0?Y%TXV@5?z8wX7<|6YXOY98zY1I$uG!Lbw -t?4*wiUR%)`iZECa07b-B~w+_s6>0qXc=1CdVR+p0)0+AZN72&Cv>#2a6`2QspI5nx;928wD3aYbt36WT -RZiWDVU$B{3dSnG*N>I&)n%3vB6+iS@Q^$}pISRa&Vvj1E)1_d{#UX9b<{_rBOk37KBfQ4{*ZQB(=KaSboZqr -@LW;rJ^|Kl_)??vY8t18NF)Dm;6Zo^Hp4WecQ(o`qiGHr%NXLaOxnfpKA -H1elUqXqnWM7N_5&)k2h4Ado_f)>zh6Li=)_SkMw6PVV9?G8n;uPT->-MvbQ9NaUEv!i@>vE%-mx&5U -_bCK$;frbuU9VdIl&Q -F5kdr^Rkmjw%xrT_m6WU%^J~e;gZsz2d*Y#y=M*VhV7l@Mtr5*(QsT6ciCq1hi+6O{aea7K8xZ`0!(m -6o%Xk;?iwoECh84dK*PUQ&3%?KCz`YTiq3_(9PQg-Kbg2uk2)27{#|P3>j>L2gEiLO#xtB?=1z^z5r* -j&B_f&!E)=*D}Xa7!1MJ?h5*9|$TkO^;+s?(1q=chI7~8}r -{ciJ?mjLsF0r)*i%F;5O!l<4$PfG~vO88&&P`!x@B&)F@}_M -()xhsYFF!-mDYy})Fz6H(|WwAHEodBSk!?jLu`AV&}A*!la+iKVRY?ZNY|oH;NletEhLJ@t15Ezx_Bo -lHF8o=Yko)~8~TYEM^LId;QJ!l1)+H|RrKjok%7@li9f@r^T;gfhXID(>gzcqtTqYAyefo3Yd(ZQSM7 -YkJ>GJhOK!#8>L;Wbqy!Is_j+2W*_)&jY`cMZWgQv0e!rl1q(wlFc -CoM(j+?#G8Fh7W?5y*R304my$Xeds6!*DV#Jk!C<@2kYO -%U%-dBrR3zadFG(H&1Nk5=SFEx^B%MQ0|exJw)KQ(cCo -R=VOZyEE#@oZ)wL7%Nxlbh&t#Utv9_QtfEt`^6)#(O6mxto-pxn8qghz-MjH7|Sgc{S;`GyB-N*Aht0 -7opC>SV?v-m_IFtmiIN!(O!CP;FPT`LTSUK)vdo3TR5ci8X=$T7_VkGJNuo+L1M05TzYm$`)D>NLkZP -$7w@Rk`h-kPFxW(@VB=}utPko7A;tQ5I9?O%P8V}^^k+}pwSTwOr^& -@5PVq>dpKT*QY^rWg2(RFjgHaQ=`MS*s04hUsPKjpzomw|kk1NN=tGFxP<#M#%D*@);b@aPtoYYn?|M -{3j8rat)oLqG=(u -FgHs5>AQ-{0>t85|kR(OY?1#1=YpjH#TLWsF^knhPpZC*f=Qa^TCqOEm+#GQc>|?VfWQ*5AFxAOK;A% -ie*dnt}u7hiE2PQUCFwco&fOnQ4paMeuiiH3=Rsm=wt*4SCphqA9kiKJLV67B}Aig6bP_>CkU@F2gVD -%UQLF*t3F@7DKDHop<T{9zA>oaG|0tCWf -AyzmC>O -%fIRa6mHR?UVJY~uL56?HL6snv#4QT=?u9FOqtfuO`6@De}lV+{!eayld}CkxqWc=(6_h$_Xkyl!C^^ -vUs87nD}|{L(v!@#dxH>Un|VZCCn6yN8)cl|G3KD&#HKyl#(s}Ar$dgs_0&;Yf6sGILV}7~rd!b%Tgy -62?hZANOlSqpk;Wbn!(c3&kPm26MNin7Gl{C-JS_5rx;@g@|zW{F0_})_##U|=Ir7zcKRv)vU(-VKDY?0i<2rFi3$OfQ!{?_{?PUTo{#9-|V&d|4eU&F#fng -`dQ(I<|_E6gER}HorqUXjqt|Az!oeWo$X6K#FU_sHbC{Bvfw#TS9pUOd?^T`x391`T7s`i*V(~at5?X*nZcsF`cuj8OA)qk*FohHQe#Um=Ss^c0ZYNT~|!|JbZe -CWj?)4k#Ksx3EjO|aQ(U+ul6`<_j2yE$2BzED}I0*hwDm1$8SW$m%|BtKFPFyz-g!)?_CrcICSDuGZvhhg~_*Zxa{m}$LA9Lh*&Xy3WvpH@P*#h%k -p%O?a@EL$i%*GiaPDR_$jwBL=U*e?r7FKx>IuZC&UWPlvkNhDQ_4>rf0t%PvezQuAWq0I1Ewv-ZKMQe -jc^Rh(>6)6GOkzI4;D?lipZ2idP;8+Pp-B#Z5xgeaIeSd)8pQ$hh~gaJVM1;YW@!(*UYP9R|J6Wv7ESKPo-K$>6^a1bZJN(c -ppK>?VcTLs})3hXO}uE3TiK#gU+s}KWfG0awGUR)hxQ}#oJjmYp5ry>8*6G(T%a{yyoci1^f~Q0vxEKUEp{UUH6nDi_JuqzIWFyL7Xub*HoDp&I@xoGxzWAvmc!nUsV=Y -J3Qtb%(dc(q=C~iUBL+6lwK4;jsD1N5krgSOzcwOL!*aoh1mwR?sl+7jdQqr+$vymUC+BgP|kjoSXtJ -e(Tj&&taQgAnwXp;Oqs~(v8-uG}*EAEXp^vmLOT^+MXw#f1Yqu63tT1-WoHpFU=hW5@EV_FS(4*yDr< -d-}Hs8{hby^F4W3-_&bxr8T^G@7FnHW;Da(hIszg!|6ROmE*4LuPfDVaZFfQ*PdK&zS*apIf#m3GUJ$3;&YoF-5(@{p%ew!r2~E8DAI2=;3sA&1kN3$s -c1w4tZEH>dx%yXVKm!V1fNbpU7$i~{4T{mg{uKp1S%TRp-y25{08k9nK#)&LBLSd=6WiDvwhiHd^aa@ -rXW0##{)h(BRzsbdKNYFzAM%yGnM)z`g`m7X$rlSh6hM6{dhojEl6jyw3lQ^@Dpb-kR2XQ*al5RaGlPT_ZFk~>ih)x}q}ay7FLAifjjHD=Z?7xd~eGZvP2ML>;aM#krOnr6FyPjWy -b&Y`*ptxmPMo)KMha8m8z8b$))8a!k~@W>CA@xt=CJn+h0NcZs@&KL38K2T!sE3Pm~kFh!INzZ37RTi -pe6qjAn5s;VZE~8d~w5z6SqOvkY2zKyZT5%tE*m?Ixdp%M+ylEHLL)j(QE4d6ZqS4x0BKj8eK9>o*&! -{|N4D7n@8r=Lok<6Kk>ET5d2j+r<0;{f&57c6A#WCKKPd?v!^}NfNsDzS*Iv%2w!+pHe-ON-En1Si^W -h5?<=+M=Pd43ht8byI0eo(H0DqcFO3*|Cq+7b;@)5NhzS#GRP<}VD>zt4`KFX>V82?@dS2MvyMUjO0Rj)l_bn6WuP@O|=21D0dcz@=cvLjyj>LP8I?XIN4)o(X2z*s -P3-7G~p#1$e()sHlJC*Ald>{q*H4hWykl_X)q>SBj*ZK7Hyl~4JI!&p^x!PQI@9}zZGb!%#k}mL;%h( -L9P;-42n9|PnIr$a}`n_Xf+2RKnXQX$&x6wE9a5*`}1f0LV7k1bS19Kr`HNZ|c^u6e(1+qG1n0me$84 -cm)i7h%b7&Gc6)Gwa*`nM>+%T0V6p%^=Yx2AUp-@0d*>6)$xGaG}}55o|0v^svUTe|wRXsHA11d0)c*-P#9*@D5#^=UegQJobP;8#6ahD9ct|HNJeh;Vo -xMY;zDQH04Zo>objH$t)wlp5BtF~EZHJl`yj9rQ^@>c70;Dy;gz~;{uzyA`R|M}HFAoS-2{uxNeo2OJ -50~g*kaa-Y;qJa}67_Q#y2*Gm;J-EhBQ~3Lpj1MDG!4hW;8s -Kf$*lNS2E*aj6ONLtpPYi#S#UNWFRr%-+SU;uEUuA6y1gIZ4r1VLQx+5(SNuk|!S*!}h&S)#HLY7wpF -zNa3G+vgHUI?7$)7-a_kRtfpPHb40qO8BgY{294Skl;{MSGYr9b$<|5KobwhR9SPy_YDFG`r2g6f5bJ -G1{Uz#95EyW}U0I3AI`_>PD~F!gIpYQsT%9?e}$Abp@vQfe0W)X<=)#OH*J-|d)A@qDpvvum&~lOVhlT&l6w_WrOhnP5+H(Hk -?B;U1mXOQsuSja_59EhrsX}g0>1R|S -?Z0pFKyu+Y1cAcM-0Zw3nIu)m;F%YtAbpNua`$~Kt9uHX=2r}2nkmoLlW0X1MlO(^(ip#<|YNI`2)ij -gkd4I#|tr}nbkkYBPlNk!OZ;F`gZn!kRr9^(u%iao&PKC1L5WU2NP%Y~u-XxY*wI%H2Ub}~FsYUJsEl -d5_%Fc}0ELGVvtJ=gn>dy@NzVgul3PcJ$6lve}0)~grI@=d)P8nk@Jf3oNky#vTOA_?Ki`<8BQ~HN{F);iR$f+1k)4)-!FrjRzy}<;)B)biJfk84 -13|U9yf5QO075ZtS>{ntk>-`|WL<@{iuK*qsV4y5rFW#J~*QHnJ#<#BE`X9ED=u!&wFu|KK0IPwa<|a -=7(r^}hv^7azGxR82Q|v$Dwz=VU|0mpr|F7Y8p$Xa-+>So6&Nlt%4d0-T0q#@%Ru_Q{hx7@z#ZUGeXH -lB91^l^^x?Kd2w*SFO@EHr=)NfUhKkTE@0sGXfO6WZ-^~%5L0LLdu0i?y}LPoD(bl+6I)yY2S7kmR5Eci^}@=*8W32NiSVgq!xJs-6)qovWD4 --C+N4+t=B3q4agQRJjL@>D;^ICsW>!EutS{ghW+VK9)LCMrS41|Ph41Xq -W1aYy!Zhx1&_K6dhc$s3KQ^1jG}PBO|iys&CZ$(-dv=oupxg+_NfwRKM@Y-8=4#ki*{*ylsfAW!@45X -9bW2TtO;IP4bc@>bf*V|YFJkfWjJwTRljv#H^cT140nJ@)mAMImomm^(Y8r}=s==`p645}{^KP;mX>@0s#5R>u!Vb8+rK6ZS*kn3 -*Nb4q{u(pB6E1u3ORz4at-Y)Hiwok_hwIUm7=818PN$npEg?hVsHZH8D5CgsG!n)$jEC&StOUh;{+RO -6nu7fC&`0clpcw1cKbo@jBGsp?dos}jjO+iR~#VeN?Fp*>K-bmZ|wT%(wzV2`BJE20+7^%B8cH|Nm{i -h1>AYdu!%Uj93~cWz#AxasU;w+__soGTi8W@qx&k@xY|=2CLvAAcLW&AxJi_|g8!A>-?LpFwyNv;NH` -KVba-;@f_Ln0VOvFtBwxZ(sfB3IO3Q8T1LTNA;z=H_Nxks<(JsR$I}v5&npzyc}gw}QE -zP4;@t*4aG9P|NVl3G*I#F!hdstuR7anzWxLgLyNY2(%JrWEZUAi;NZ`(z(M~(_1lVF* -7aPgj^^*798$l^eotQ=I(}==aUsUj7hmt$v7m2O{(B4j5DP%RlT{rs1udL2<-iNYl+o#Yf2WeiKa0?| -1`VYa*sG!9K|CFad!CIbxW|*X?n2K4a=amjo%m=C;9VYaN5|T~I4M4#cvNiOD234cl*##kiO~C8mzb4 ->f%-U@>(K^6n%vdnc#S;w&}}BBGA|q|?NSrsJLVT-P~3t{`}6)1_$**XR>(GyGCd*y7 -QT;&{JQifj~DvNHmI1q5%2E+{Lu<9eETz2tP%XOO&;CqE)$Ki}hVCi(Lo5#3YZTr8}V9$__Q6Goi%a^ -BT({Rn$9`u~`Fvn^MVWLxx|ugJ%Hhwk2@Z)%M5KqndrBoK|@jb2C~kU&E4^~arPRzze(X095$?m0DTW -rPSiM~>SxvuV?w`NPjH{65(>UF#yxctuw>_EgVJTNdC!oDV`PR9QU5=0LB9en}mh))PX$k31~YA@nTfEY3ygtJyl^a6v$vc~(2N5YoZ#;XnBGV_&u{Y)*5L%d>+r> --|B!wL=-qB!7}NY7{4Ng&@RZH@yN6yhybE4g_&hHFsKS7Mu22*=p@3d>BJw9ucs{SfbEQ|YQbBlIA({ -eSBGqmHsJ8!RR#tPD8)bFR_QDW=Hxc|iA_-w)vF}ab4<`Uyhg5+9FSm&Cpa5@XHJ{uki{Ky(uuo^;>m -9h*1osP-)rbIm4|{U=;Hu!3tRlcU@P}%Cy}`CeSPEEzyPc-|`5j4A{RohV{gMX|UrsPzb+y7`EIfv=A -o;*mILJCaD@ry{+vqY>qWxqo&y -W1p*C3SB@t;xx1>28**6R@OUR@+)+IiG~c1PL)_+FF7r$>ts2WF5xo9 -p`nh4mX*nXk}lF4p@B)&3gs{dmkz@a;tPhl?P>UyyW)UA8k`Q1X28Ub -F7X@9EF&PMPWb%Tn*zO*kY1@<;+hlR4K@gNawQpl$l -xEvz+gX_C2^ySnW>E4bEnanaqD8=k6!@%+Fw$nUY69ln7vHM8SwqLe8P3zipwq>Y){&7H`;16s+@its -Fk-A;KJmbw-~E>@4!DvB<|2@>h=GS0cl3-EY?<9BDG>|E?Usm9v!buAFOkKezI( -AyN!f0%u1?y0H~_@tmFGu(V#7$h`vZw_S@cwH(ym_7sM8_~-k#X|WpU6;gF9>=5o0f=)K0*nY-}@StU -|Z9n*4ypTgzh7PF|`Rk;n2vJ1^100YlE+*2aRXhU!vBC`48!dX$t}kw?%dsdzxMnt -L_m`d-q1!OQvp@CE_Ln?G8_kDrjzuZCt1}wQO%!Ne!mamY2=4D->(fr0XQ_yUGtA0;Z?W%V1H*Kr1I? -*DK9(y^GXXvb(+M5~z*G87AO{GHSQbQB4+8)A5*&&65%djLHu2xRsVvARR<}TOiA6dz6@_TiJ(e#q9R -Y&0nz1=&Q%;PW8ug;AGVCVocyj|5BPGikg&@Nua1TnpRZ`y5@tyXF8fQ+fh9&wq5GK!%k%YsG -|Qd`y;-f#@&0G=rf5uIx1^+FAtM$IWE&nIKs15X!nX6O~N}?2`8Z{zS;SGUwWmtaxyP4$k!F-cNZAs> -k9L}z%)NDZ7*6z61iTT@f;DVdvm+2(#_yL!bRZN!A>^8WE;f5kYY~_R|MIs8{NLTk|L&Fc{pjiXCeKf22!E)1z)Q-QHqh@#$_-f2gcDwwxOzFJ=N+m0| -=F>p|Q+dDP-j^m>!l-bozY^V6xs^uFhjLN!DBjM+r^P5WBcwMn_^P9;F -O_vJ6QU3Xe=p4?uhB;Yt57($4ytpoJ3MaK+)D-+ZkJ$#ymO>#8BUP9iKnQiVm%JDN4)s -@Hk__!qJ18I^=X}Re45_`lCKwHQ||t^@FI6>@*}~T#JVlUJQ#%u-~8|(i~-1@#*n+?3>-WAe5#g4q=# -GjQpYFnnt#AcrZ6lEyd{-x)v)!5!^{>FUyb%Zrq5F(biFuajjR4zBQ#SHsJi~W|OURRUHjqx2dO8ORb -YPHS38Rp7(^-q8PNhbNymFMF^X1pA5IKPndNT$Ah3BFS2{&S7GXl^7bYg33~tcVHxpnz_K5X`4N_V?n -g&5-&QdYvsxoDBQTDHoPQ`#Jrhgv6k-~37Hp(*Nc~K{7gxY?n7x7$MhqmRG9>IIht0iiBUrHqqhE0b& -quuVUtlQ6hGnTAU>U~FMArmrHv-^A&5$vg&zQw%ZW -=gcGD=?f{*lYBGg(MD}2eU{LFQ4h)Pkkw=GX=$7@=CwUcP;ZZ6pPvDoh9^>Msn#{-4!mC?9NKG$@3g> -U22c-r+hrnnzcgslJwaLh+}inpj>ZkG(VmL%I~JLCB9c-hPD&pSmhwoRQ^Ddq9OAf~s&rg1niiiZdC@ -Q>1}iuCmJpgtW -V+|}r_gLMOERs4UrYY{SJY|eAv@KPhbk}$=%T=!570t(QtA<(mk)-%YnA3vB=|0j+O@lPY4qk^SI@Ok8oNPf{Gv?gNRw9X(KimqZOdMXS*S8aI1HyTMzQ6F{HX^R}!w9wEz()^F^y!$oxN7 -K^KLHZbO{BuO>hC6>ADy$$~0_+ObpO{icIPbmMK+#_GYMuniMp`och_~!`48OG*hKBfYm2k%Sb4n=4v -$b0AzN-=1PqBM$R`4pw8-W2ZVh!`4u7uZq&^0~lH5eFLsujC^Yr>8IEmR2~FS%$gX6DY= -W$2H3&8lOwpSp}cVHQf;s=hT`*owR7XvXM6fnD}#TW==jtY?c+YkThhYX^AlL>R?ojst8i$%*vJz-?D -PkRhu(EGP=vWBE#8@Ne-kAj*3HVZ+OjJn?sbENKcXC?PBnw*_`;riK34c8Wf^Cj#}|(_ZL6*#pp(d+2Pu<=jQA_Qgj -)&Tk2Y*d`&+QDG=l#VjOKs^E>IWYf8J*DqWS}F_STSiAOBGUhe9$xTX8$xaIcoIlc&DeA;zJNHNHnRn -Mb;j&_M~b4tBuu6^Jnv1KLljXtycBgWk9^w@D>A)>StctNAoc3n1VZW}t?A(MKz7fXK#PM2N0%1g&w+ -u}fBYvCR}mS|)x)pfe;m=ms$(Z2Al!p;)0Nwl=wkuiEg{1HPfeG>-Hvzc&M`%rZCu@%rYv$^FlB`C~+ -w>$r+b$#x1a&zv<;NH8}^`^7SX9nzoUKQ19I89h{sW5T_+&jm7l1${pw`)ipRaj=x0Po~tEwbT!#)}n -UvlcTsd!x<|YlPf;M}yHrWuf1(DLwQB-pYOR55tVx|FxIJt?|O;`tM8D!_@D4FJveXalgE!e<2nXdF* -q$<$ve!H*p&CyMOc -%kYi4k0y)!AdP|7NZ~|m|Os?AkYb>w+d`;pyxfhq6Ubw4c3 -<;FQM9rn21@EBWqyLCk$fN@JhTo;ein;OJ!;<+z8u6>c9br_lB%Eu3 -;!I3Ps*UjVXU>Ma6KDJ`aLS8%+9NOJ*=rv$Zi%g -+0HNtmWQO<9Od*aB;nlo>YljpFDs1_T`a;p8)B*J=N9_K;1cO|oqWbJI#f^p0W|+gcBvZruk3^=zH>b;Cw_dNz6aXO;_o#;r|2x&e`{t6}qCdnc>N@;I1s8lgo4XX}P&bHV;d)GFv%+!$Khj|P_gO81fq@emm>(JjHJAhz5m~nunkR)FZO#*-wdDwgj7j=cwwBLC%@=yNC=QB&+lS> -{Cl}YHQ(>$!#!h;;^a#~BCvV~R>%>8~<>}HM?y?EYz|y1eM`ZMMy0x6rXma~_Vm*t|TMYN9RO}v$J1a -9CLO8YOG|=5nb;~%d_*i%SI!JfL}iBIx`?WnS8nI<9C)sw-Fhr$!+gVLjRL4#Rwl1|s-9bqrQ7?+teTy_&7oSI(WT~pV-2?}2%U -Z!61?V{27(=KSvWZE2Y)_Bu=m>_o?`9bu-ek-gM3rpKy#jCG5&fzrtDc^$p%!d`CsmZC;Me{tgOY!h= -Y06+=bn`-RL64sH4{j93ylhHb!#o<0~ -;qV>fRAtYH#Vlh3X0cuZc>sh;JjuzHAZ%?PGdaTIj*vHsrRBvQP?xeL$Ct}uKc8q=zgolKz%o|Ce=kq -z`)9BG2w;6Y%#uX+Mc_81cqoxXC5~$HmZ}7)8j3vMA>f^%BmKTaa*EHgs>1+b-T4he59X>Ng28fAf&_ -l9+%Kfz7(#8E^+mUea3C2uM_&@AhpM*wXH40ev0h&)T -C_RiOu$m-^VHsyO(+bd8fIs5?m3%K90Ty>`ZW}<%gi^53Co>t9i=l%9t^iI6{RIj-5x}10v99k=29#a(7tipzxH2hQa_uB -t==#yOEeG-}1OTYYH@6P*TN4AI~{pw2z?1<+Q_AxkEML3s&P!;?c&x|$iZtR0We`9k#F(*}4ML>pEmMu^{6AknVp558ZMZWhYcTs$I+6+N@%2t=`wB9H -A-k}OdjI@Q;lu6FTqpbMAzhDE*&QA;Dz>zIpGMKSNj)$z27V=;(NS>NZ&Q_90#MGvw#mv=@jk(hDO^p -g{Ev(p+db>KSW*zsm6*7u)Shz^Pk|~~8jKnn=YsOYj^#a{rnd-)A~&L~P$|V)ZURykIqwVRgPgd&r>M@zXZQ6wB?nh{Z+R4BeJ*Nv -;DTADO-adUWFNcCHkG=HJU6JgMAWYp|Cx5&+~>f49K?l9CqD&Wi%>%8xtXz1IH@zp<_Ed5{2s`-)zH! -@j#M!%3{N7;P?9q)KAoceUoQ*HlS@(CM+Id^tgaM6*n8MTYMK8c=d{eV6S=y3l9>7K~qOrMTOJri!-v -kJ?^X6dI-hPve$CoDzdp;_ldabZF%g?p=^)iuF(D6(DOHq%EPKIV(xy>y_Kd+HIhZSjSEA&G_*p;RE< -46Q&UOXqb(25LfT`?os)0k!SIqsZuE(Ej7MAfs7NWUO-(d%CtA_Cm-oCRw8wgIAKZC|dk=QVE4s>7T; -9fP5=)|EoO0W7^r;}mi(+Z0^pMtxKO#)X%R?-;=foXiR%w&d&RABczZwTS%F@NM^Ci(-u!N}5n^I`Cs -qzCQv&xaew|QqHrJm#Y2HV_4-VX=gBu@_^IW64E$<;$#XSlvSuE^z5QUY(-+pKXJB-Obeec2t)|JWzZ#~`(YSwj#GA?c?$4hKIB1eXG4|VRGlxOT1H2Moh#=PvgMJ51{0pD+&%laA3G_$ -kSt6hPzRe9jCx+u$Uk|u1bON)#z*E6unBt8ID4_>@vWSJ@JbKpS12zcwXY5aHZh&{jvCzIk?qCA#R-Q -xErj&rOKwvGC2zo|PIgf-}psH&QeKugsfMElc4;Z$Tg+hR^D{~Ghg}^bySZL9+zjc@7H6#H(x4#NFy0 -LP;55Y-aOr4DEC)qOuIKi`p^n6j -B=cFiNwtd`8T@Ti=&R+R*xQRqnzuueZ5M$xOvi>_l3bBGoS6j&z+Q5ql4mW_v*+1btlWoBY^J7ym)154t$)T-Z#|3Qlgi*-?j6LGR>kgSO -r_#ZgDn@mdC8URrB+W|1|WOWhmpmqONO@?=D2&H*fCmCn;WxcBKDL>h>a?E#h!cdE -SGoYQMVrwqWbLN%7Y9%+&~L8K8Q&RII}PIgI9s4{t|vu2Rk!X!{A?qpjky{PZIWDr|eHN7Wt=B_ScO4 -B?}CEa~ZKP-2hYdHhXwBFGGQif@eo#E+@7IfXr|(sh=ix6{Jan=0ej;fPBhnD$g?y0M60JyV1O6E?=(1jmvu1qxBsOP=9s$3poJ=236n(>DX!B$-N -s=gKkbdc-njGFZ|LiVzHA=*r=rp;j*V48s#c;F>Z4Wvtz319)ehI`hD7$k=oVDC80>PE(VWEwOFP+qI10rE7Y5> -s7%_*0>$4P4R;H!VbnYci#CvsdvVy)k`D_q!BYGa#iM!p=LRRyPBI_!JK1%inpk|uNl;|M{~IY9_x)2 -AKaadd;1{M@xnew_4<$Bs-pTUN^O`9SrInG -+BJ4=hlzHyJTq=QJk;pR3yMA5?4tC3gHP*D?S2uRkQ-;l<|G{;^j?Xl0MtAMPF;XuEp{c#H -ke+|JP49{axi*K#=w!++nq?AFg&v81WLc&h(nCw;Ty@PwaE_nj@r2!_Ntk|J@IC25vpDGH+*ieYG|?T -$gQcl6u1C@{kjHOtB}unP`7r@+VvGQkoKnt0%(LIK)zu6m@uHS`n_ex6#=+mOnyQaInA&nB_c`deVbZi^pTKCbnu~Jb$&fj#!`Q=p>4qth$VJE}tWvNx -=fr5$+z@k2n5$?iE=_8(Fd%EjZp5uwYqdeF|Oz1ZQEcojCGJO11WS#=YV{`E)NFSM{59T -s<^b4uYbDfg!HQ5$Cc_o1p4v4lgRqKV+MnU4*OI?9W7^l_jIlpg%KPMpq4wLiIdLXZ2@bAw-6yS5Po~ -w!XUez2NsWOkTY8Ai%xj`|dxi0F}+eTj9Z8uWf!t>0PTiJW?(}h8SR81dA-F?tc>>Ne;>}?_GVJ7K}; -3qm4+B=^qBc5k(H4!ardF5KJ`A9B&;i9SZhG~$00&0i_707Gt7FP%PbYt&!ak-FuvD=hAjmVT0Kk^7K -G^!FpgI90kgDe(X#X|S?V(f0wj^11(lBgNRJ8Ryhq!MP_WmErO_QE{!ocx>xB>VQLPbD-YboaZLxED-@CU>$Yu4D_o>s7L6^IwNlkHa;k~ -Xq8RaS!QPLO=!)C*CJ96BO=PObj9szqzw-RQvjfL~waF&LgO9+pScDM2Vkh67krJmz)@m$}IIWYMfMh -*t_pl!x`?#tUNra^!^egm_sd -4&(D^jhNfJiYY%{hOA*4r27mG!aW+f|TMAc-wQo&TJbXyNTysPQc2r6_p{a3uDdSkL9!ZDAIs@^8!8K -3kY}+7c)%wvgw*f5!?c{UiTGe^n`AnM(%bxJmru~?-ak3&*}Emrwa+!C)LyHtuO@p934{qCR2Ouf#8N{G -U18_c5s(mxD@ZvxJ11h#bIqlpH|*^*h#x6&sv$_+Ds%(>>1@8zQYA`XDkV%&M%6$bac;FrQZs`!+vi}*x@IQCrkEr4Oq<_4h^lz~PgOVtY<1~X39FAicOHu@eam=?;$_Zq -^0CbR1P?RZ-A=f5jAyR&%*rBg2O^oj3<^-&U*M8t|EE6DN>$13Y#Vgr6g%NU^fRF*)WW>O*IiwK9P!x)r^TUw#&Ov#JJb^h_E` -~7!7K8YR`1>G13Ui3q_$Tb3Zvb|fg6pz&*UO)c2Hm2n?mfcny~}sxv00d>uO90t4H?AY7Eu%n -AGmf4B9&9!JK%?a0=+#jWaXo!?vxXjs8g#-iD6+yJLSFI`Z$1{cY&TzdQD~p(AkYztM^2$*~5xWA;tX -vQ$y6E(mb(bM(Ol>>|t8i@_|teRy}uaP`Ow?NDjMtv{y1+E<;KCw4`fS5CMthWya#R9nUXS -7o)`;niO$uIlxJhHp%^Z2l?8X|S4e3wzIAdjh7QMYp%-=7P#IYqsBB&!Kk=rbyie))8c>DiKUeA`h5r -e6$y&#k)=Y20J{#yu+H^H9XWm)x=XC;jD*&GeA>0Ks}S9>ySE>qn{bP}Su8Rn=k}v@=(RY`sc9TAU$u -!#3iHM)DN{KcdJ-?Z-a>(mm&SGTG1Q_8hj!1#EYZ;JvYl;GkC!PaptLJl_Dt`ouRMbR{63_?2)N++WH -UgQ2|bhrk_$zhFq&&-0GBI7%I6kL4O|4i|q*kJyDdQ_Px63}m^Cvk~)4@xC%V#diYbp3Cjn9~z^hvFm --?Au4OK#u{3xgo`EPX)b_i~ -aL)zigjZQwnrmSQIiM>f*6Xy3jS3Yn4}6)w06uDd5%gxSw@t{p87fRZ|!=|KD6tT=JdmbQKPLd7Rm9dFVB}!ym|gg^wcHKsH=?0ZHo%Zdo+goJ+i(UrLE53Hw`OjVET|V;HIexs_-;#f06ngsEEbN$aFl~TybKf2k>N~O7+*y -HxkO7b08~=Xo*ptDm`D-4XdrPY)kfz0wbCY5eX7Cw&7GlO=D?1v4no#ji^3UKDI0f?y7!DBzJ+pUTWS -(;z1|I;JcnNJ}b5r36h8iF?f(U6AoJ6@;-j2JMv)jL6Tn`GgH>vk82x1SgpyKfQ0Dp7I1t -p2)xX*rA0VkFl?VWzQ%OSOhZ*Ec@OFi(=;Bu=JYBfLLIf8_P|m^inuye%fY#CnE_E!Y|J9T7FW3H40K -NceDcwYKjIMDY(?xh9HhOVQthI_B!g85J_lj4FE5ZaOEzz3Wr&igK;;`eNk?Ws(UnqA>SZ8d+lvNhv -HhuCXelhr~Q#{}SacS?iCm95SwpJ3IPx_dzEBxvj+A=vw?J#;C^}J}-$_<--nT6Z+$&QGwJaOf -vT(bsW-T}EaQc_9bnvXFpR>D!M>XH$?*@)C)rzKA;dySe=9qu@qtYxMm>liw49;s`1SOJfg8b -{2)ajgO>?Fql(p{W5<`dzGTijBSNk1lX>na&12<@dDGhfy~KK?o?}Wl^Q-Z^NV42p;$;%1NQ?6NE_&* -=dq_47Iz$^yzds(*h8<~E4kC`b&d8<)36fj<-QV&G`1#w(-b9wrKg>0?^ISk9k9W_Ol+!NP91 -9+CGT*SdtVNwyUXcr@e~jAC5@94nkF1G9JIQ#yHjPJ) -;!I(7_ifKq*we%3#H=Pi@`%Gv1A%I3v>AA&_$`5II7-_JwOEi0pRigU&FJaq -@1TxGqW)5d$@b>5&)*gY=(Q_pfz$D2m`jlo+;Syk*JcE5PIBbrgU@*f1;0=?)ObV0;z#$%E0mw=J7PL -HP(1QORXyN{kf)=n6l5e2pVB^n60Nc^ZW`lg(`E!Td*U}~@c$$(-&OwbS`Mm8Ua9VIkj*>v -x8Qd^fJ|h6UEtKQ(}a@d{)PSXgtwLVFEZl*xKyUC{O2f95K#61$bQV;#0W_RsC3?6YiFSnG4s7vAHFB -1XB;oM=^uyFDSgbg|!aI@a&}zl#1kwBmcja12P$DJ@g`sWBQl{!tId}CQD~gSO;~n;mZW&IJ8;9M3YHIxU~1bsSHS8^kjUY}D55(Ia`CC;sT -hFG1;7P-BND%S%U^6I9yg?YVO;s)SW?Xwk?HyCMm|jrU~@lN`O7>9UgWAjXHcYz6y=>x4v3S)+XIbS* -M%#!`L$jBptSuH_XNDoFDja{Wt|LB5mfy1O#CbSu`XWXF?&G-??E8vpV199Lk3Iv?mZCVmk0_kBQwio -#Vg_nL5d|5L2?(tEgG^s?1s<$O&Gv=kKd@q>=hti@f56?Pkwlq05OsIA4<&LNt8bu1i#D^)V|{?U$S!ASL;&NS=8RmYa}V~L-z*3PU)1f -J#ER}gQgE_VO$SDmh~*}ipm{tgW_55?HUvk>%cO$A-A+WLT2qqG5&Sv7McAXJY1;gU(;j%>O@Ee1kS`N1II_-Np}B`ig3B>RW~gOV5R6>70Y%=926LN)b^BjGut*X#xW?F#{ -n_{(Vo62x0}u#RM3LA|NXSry%A)XM!f|3o=*Y5ityfKv|+3Mn)LO_57)FZWfkI=94lRyf*+z&J20#OwFU&2GYWqkEiWGFmTL -|=mzM-TbXuS1iER7-v85*&2OuwOgi&e@HlnELiHfjvH?&!7QuY7cc3uYuINO(`SSH^l<*^vq64(I6pp{-%= -A-_lCsu1}7!i)$&Dr8y{m;x@H^ijygwKib@HYDq@fIzVJ-#4Tas^M2zDtg9sU7V!&dd5y{--97M)M0#5b$Ay*ONNrJAx9wAputi;Ssmnke%;`q%OuD1XX^F;oKyLzM+a8(zIVq?=}x9+P6-(rb -Mc~{e-lL%e3Wy!RMdR=S{;)9y_WrAwrZTC&^g;!v#==)HS^$Fu3p9r>^CIv0uPK8Zc1?PvhnpcyVwtSB5>8CriN9hobT`=p;BF<0~|^PWs_(;&#l;b0=pJ35xkKk)NYBS|bnBKfFWNwvQ5>H@Ay5k8ux3UGNvX0tn7LjkE9z2{#FaZ5aj{U20mG -V`&3T#tNEU4QmAglsO753%858t(g2@beb9NxvNiaeYTzm)aC*wguL?GA}?^Y+?2_6&XpSLDVQ{d%{L{ -Z$)_^T7a7|7oaq=zSue7*PB>Us}`Un7CKrW6>22j|y7~7!-g=Z!Ylj2yQtg4q6X_wMCwF%4l?9BpfQ- -*?1kF63R;t>S+}eQdz8}Uc0s%L3g`=6qfWtENTM{PrI>iTq9cT5cG6mrKj9k>@K}hJJoY2H5ZDAH>WA -%PGgSgowlnDAzb6uryNYpLW-7gM+ay^7$Jry5yX=J$VM% ->ir0wGVO!+(A2RrZnJR>=FjaMrGr3un;jr6v@hs|!oB@N$z6@{YdY|RggOUpg5P7WE1+838KW{uWyFQ -!?zMp&`0Q-5nTk51k-#sntSGKNy$YIAasR202H$!N~^VK9V8b5Lc1n;YE_bFL9!<@kFNHOoNMOTM(rqvqpS$XSN1VF{Qd -Olg?#%;x@gL=HoAU1$M6@J`{sp+k)0QQCnO4svW@|>FuSnAVN%qZ=$ki?5;)U43ribXXGeBUgw_@G+RAm{6CUE%fZR@y?&I_sUcyp;!}TrV`9Jm>9BlXq -RAii?=)Mley1mTn)Nb-434#l|bI=JAGI6lW7}m!f9}j1}Lm>LWocMma{-XUqs8<6C6zYhX_J5*9<|xE -TL)TdBHv-g-+_$CcbM^aAS3b}X8bc`R0N)P;#)HuZp&hOmR8%zA@xB)X{6f~lOv}FN%)$q -19LAG-Z=@{svC}A2ev&pJ6u~=+r+F$R3Gl++9C-eHV^T!*&HI|LJ0Tsvl+HFI^ZL7$~SAf>t$k{Un%U -ECN{b}sm|$k;XI~_iso|k*5Et0)`NIxw(C7&mi_4l&|Nect*b>6Yps4CgvrnL25x?O11sWx7>4~PulE -&*y~CTNKX%@ -7PQ-BT~qL$B5U$buhF%2T1U5ahNlGYC9-Ie@el=;;`xe9vo&3M)8ir`VVLK$VAnF4KnEuSVa1(Xe9C; -j&x+ykcy|_y@w-5Lwesf6k+#GH1bWK>Tg1_e-(8^{z*voOVknEmG%~OynT%Kt};~^!8b5v2H#?7x_x|k -)qH|`&_BM3+9E30(9fivyuMv(YmSgnr0grZPV3Ema*^|of9;(NCcTpdC -s@M2Zrh|RBVOu!QXXtfvc(6?K75dfnA6o4Sjf40d>G_iewN#F!E2ZjWPv$_X(Tjiob?pDW3t|2M}|Ld<=Z8WB~v@W;vMdS}x^kVCjNIt`T^pQ -~yOT9?D6*Hiv{Q7~k~c;R8Q?)rp52!GZcU^i32T^msk+!wfVn7u+dWU|R63N{EaRI3Z?QqiVdCV`|r{Wtk28oMSWMoT2w3-uSn=N{9B27f8EB?_5r>kDM~ip)elXtzV2AY;X6={dh -+`L*aA1+N!B&FumAO;f7AVcoD97=fspGvTCuT;Ai}3N&S -oPZ+V)ZBSGqagVEF_D~PFpHedTCT9oGzV`3;6#A;UZh=9a6cS85x{#%{I3j$(J*$FKf)6@iev_2=-li -O#^!K%Pk91U%hBIP$z%f(eV*^=%yM1Pf~q+$Z -3#d2{#B*Mj&nVu;!sgaNCRevA)%;o{yYJ?Oxkor@2x=b^I8$=IXA`c2<;v;)M2XBGwZwUI<&!2^`4j( -qb7em;Pe64Ha+0ACfJ@RdAgJq-r{8z*@pro^K!>^XOsH%jhgPBH~c0{_YIkiQz=KN%kKSL6F9!$Urf? ->DOc0$rfFRlKJWg3XL}pW$1+Z&@bXUd7?A*;rzm?D23QPw9@z@|(Tx>8Mv}rT}KQtg%N3%-`)0h&yB* -;)=r6i4-3D^vE~<)~-60Ti0rxlZNrk8~)Y@697M*ee9)8(*$_1c02&DdfaC$M0$dmNTs=huOfEqQ0M4 -zQJp(W8%s1AQ8eG`T40Y`7GKGevMBb~+U;Z_qUbZ4T{IH8%Br!`Ej!O1THB1ov3snI=@IUnY_lMm#j% -_&374!r`gyLOmm9~kvZ!4<{+Wc~&W;d$zcx*A9J#tk<(hEHBkAJZe%Ic$(=qjEDaNkk_5$9GjIoaWNXVy5W+2S!;v+%pxNW*Wn3^)KRYddAJB8Wrf$h{eI&!_@Kkf&Mjmm -hkxvPiQg(@UHGZx9^M2EaI0ww<(Tlef>gR5LFc)p^9D==h>vD`%1VIjpW_eID&zG -%U`umI;A7@pUJM?zh<_YyM!iz)Qn7!IcgJ|2-LEPS)bQ2+(&6)L~PRWG5T%KaAYK7Tp?b&h^QmRKwU+ -?3Cs_gE!exVAFIBNKv7EdisM})Q8k4Q<^z#m;iO3!mqc)4H2@s@_!2cKG)QVh8wwCZT8$fB}#dMnl-=PGj9ZL%&g4{6p5MlnkQ#GoBB2oOkO5W1GOu3PBZ_wN7x`)Xd?J<=o6Nlar5h9ge;$GG}j$V>Vm0t2{eb-`FGA?*B1?Es&mRw_9%KJ*>xM7f(pH?{4fgv7Ge>9$23#D^wCspSKdp~Ly5Kw0SlfjiJAxp+ -Ht|lL=rXBm^6YoQ`-Gts$+w(Wo_9Y=kHl4o{o5I_Sz7Ll>@=hh&jWeE~uO$~PUoN)G{cB25=Uyd!o`n -u>5Cl^(qN8rW0<&f7W9f22@Mz`JB%c@?+sX-TY*OtJvec5R&CE@sWT})Xad?swG$n2-1=~m!Qt~hA=wvKSaHSS0W+1&;nF0_x=KIn&& -l;eEiZqOrGpt35vcDZJyl`lbklf53g~#TTWr~u-hI}5}jY8UmtPtcZ-0}@7yw1tM>#w_0hG@J1JG?y` -+w%Ox8_|Li@xFDRH(9`3MSn0>Xr(z@s71Ym$wyr|I(tgIbDYrKyp-=fH|SdPg_r!(Q4E3~GRR5;^E#L -DBdTs*o%ZIm8D)PPjc59=8(;O|JuA~X`OQh=;@Z}2UZ#&f5c7}U|1A*yuRQH1Y5E_J`85<{tL7cPO2@ -~mGB3%j8uIB%pAG@y0pYy0Wq^L&=?D|RoJQi`Q5uNoE_j({0B?Z^Jq8eQ0bXEAf&pT8ih=xhLC1*rxj -rwTybxdj9$3L*V8(38*C`Tg2}#hD2^k=D(yd!c+; -(rOn0;t}O>93%;{o=_|FRAc1rPCP5(1Q{3v-hkN$*Kdi7$WpJp3%CF=Wo~s^h!Ult%JTh=-qWh5tP50 -5>JqMQHUicek~A;zNN+2hP#KffQ+#YW>ZtR$&Lxv|yVuRIZJJaz~8u`e-HgY@`=7i1)y_aI- -wx;^|nQhaSr|$@y8`&Z=dd$T^Z}j6Nd{H(kihWR>^rJ$-akl4iHumRrUl%J2k3KGO?Tpr8w6(~qbm@) -3>q7yLL2ow9OPF`s|QyJqC+-@U@Gwe_jYdi8Ktj8^1^uNZj>yl`t2;>B}S{;rs-?6d`@<@|kr=*t60>Cx@lDHQ%36sit;`Nm3 -;On5<3b-8KW$C>9&OM2Tz4fBZ51PI+f06`*{@lR}{hob?rgg=fEpuZZ={tTX>pN);Ptd|_{GJ)eNbi> -^v%nmOvxkYRchYpf^wM`&_L1)jq}^C4&giJVWb0?_1bgK(6=q$nq34W{U -3jBU__@d2w3^2}KOXy*J~&jO6Q1vP1d~-sks5s+QAm6SV##pUZz!snt>hrE;3<1ny>QUT+PuTkXRD~$U7cXU>r -qP7xZi$43B|U?UI5n0Jxw!vAo6sNKz5t0xWwXUlT{M6i_m=H}QN7q|i%(onh;IHVH=06B=mj6A4iHMO -P*SPJ!GO{uyyJrhsJLg4IB24+UEKFtzIZlR#1jLsqP2*1Vhse1r%E<#>h$k;C$?3x)$2&p=v_AYcT3i -2^VZRMcVS_cZ(!jLS2at%`Pk!1$Nt??26qtBxRgOGbVCfN^uhwW}pWD4aX8RV}!8H~8uU_saKD@RCJ* -G&Lunp!XT`PWcIpbT;*Heu>??d0ycYH&o>1CA&>hqwVD>^ -$k|+12?MW|I3`oNmqoGbfF}bqazKJpS6IibGKN5t*P3y1(6aQ|Rhetorxm<2Sl=3n^X3eLr_iZ-? -9RQ69vCHJ=xCyE|-Y=5RNoPHxSr*+9Fh=t^4i9ILe-P32F=+YuQ%LaEB_aP7N|EXbQ{i=k$2!q@Y`-E -NNkW^chgHckzXLFd;!+1_q3ZQ6Q>ti0jnzRvo3Gme58vj1~^X!|@nWv$6Y753~|PdQ7^;-deugseedPUBKi%tY6mv30{r -b-zNB9=c{=MY-H^vtdslvkZU1(ElT%C3FE(Tu%dAO@m=I+dF_ItnhU`sI323I(Yc-#4FiJ^YTyyiivMhOW~WvL=Q+QfRUgOECQ -K3PllL5*I4#%9CUh;yk4}MLSqxv3113ji$wY!`{L38zy&HJ;MoWg --mG0J___X^KVKi)Myf2dPW3p5O$c1?BiAnB58ex0GgBO%$`Z$^$p=#GMKb|Y+b<%FYnTfmM`arbnuRr -Fmn&9mt5F}v*igZhHf$-$*fd4FWa;P0#)0h% -+~>;WlcxvG6(wWF0$w~{{d4c-?FJQxv9;U1!Jox8tmP)D?#Ez&bh4g`1@{DOR?nHYKO)EdjX~>NXimX -`=kxizJc$gOu^1(#;5cgr?0ObpzDS6pFp9wxOvBXj -gFF8LaF`%S0;OP*q^Ykfi4+iXz;RHp164(0WgEkwTDK$-3;{UKK&$}=fjs`T(^rOr6lIC^qipp -CTkDVv4ti+InW$C%5?`B#0k(c|&>*I0C&tey_N|>4{^QFlpyZteKKe;b)GW -a)zDL$XB7RsQ&A_c4A(fDD^cHaDv!rk#8uuKR9#(iH!UZOI0EUiT*ljxbTIu+6PF+b(j -0@?+xB?VaFy0gHKcc?2cg;Ar?G4vy-QI#rKX19uqbvU?g?*E>AhKOkw_UuQ$>A2G`IY8EF;ge0Z)4I!N(6| -;TO`;?I#NF&1GTX~^kaZ2ns9d#Ay&$keTE}pgNZSHn;2Ci=zmfa=0A*7LgieM;)w!#Sn;$%`m`ux`gzhQtM~osvJ&2ilYemD@8WyB|{1Pr8O+wTV -Ntz-P(5LA>~`^C{P=2S*_Xd)hFQQ<#w7ZbaFO%%{hDy`+X*(Clmf7EEW6uI>FSj26)wH9ei$;)6F7f= -c_l4i@xQNp+0ZersqRU+t-#-Ctg$(P)P|e{%OP)_Auf`NM`psCG--bmJyggbarTJfI~BX2EkoS}wZ47 -A<&K$XxDTwcKD?kTw(Jq!fp3ZRaS=%;_ZPl;PYo=;WP#B7?a+okX6s$F`YcA~j6pP%MuZ@8As&+<2v$ -MJ8N)hMb|c`{B;rm!!eRXNIe|5ZPDFF{K8CO6jmsg=BL|PQJ>1WXb@JePXd)cba -dSTfI_Qe)M5T)u3KU`FfYW!n%m1lPILNkRRrzx@%J=_txR!=-HIMGIqs`GNUKv!W?8V^-_ -24Y}XoOf%TQ9s_d1IJ+SeN%fHR}yBTSH5SK0Uu-yrk`LUy>G+0#yuYzlFsGsRYmpLZqE_R!$zU%R0{3 -~Ju6H%Yi!zd-Lcu5kKusnovrx#FjvmyiQ{f`eL;`MacXRH?`NvgT8e>j+L1qVr|M|X*2Z^d&(C|fXDB -gSvb)FTex{De62OxbV%=jQg>*v@!jT#=cDQb;C=1LX?&|uO*k%_K`+1X1JPc<|9OFlJz^@m@+1|yIDI -&9A3~UW`LGZ{9NBb{VikBd0iGh+Z`7KHRh>v0rA4x#3v%9xh`dI!5sVv93)rKrrXows1LQanV0r=uzE&a?up7K<_wQrOcO*kO+TAu~q$(2Fu3R;kD%>EQe%Y>dLA&;~`9+=Le+;JWPR6K+2of#$6D?tlA}FxQb9?~wxV` -5XHRAJl;n?yS(=D7W%wNh{v)zp23jHvTZG-!u3uOMHDhF!OIj_bT5dF!5 -=>tK~>fY{N+UK63)$$Crxp~G+;0%LWv@Ja}$}Mx1zAPL}m(XT$E{v(55$c6yy7Cm;e7>gTKy~7OqQ>J -4W*Y-q*{%wqJeC5d*|`IQQJN6Ku~3=45R{6olI!=$P3a%bsvAh)j6HJ?(u#q(Z0Pl7<=OOmz}=BWouC -bRUUF2e+d%V@}MR99dz`opXH1?oqU2q#ZPYWl8@~oK(5Ci|Do4u+g4B)_BVuIP3)#Pj*tPfTb@b{h71W|_UK#~L=&Hz!XYcdpJbnJAM(I78f#CyP*EWTzNrGnoA!p{S7_Z=`$H{%p&}1D3%O53xXGl -Yg^t6WL>B@EW@syT0H4(6@WN6%Rll!vHzca;@AM)xD&{sF6AwT!>4Si5) -&>5m8X^14#c&Nuel@VvffLgE}XrOfxZjjt+f_w!4=Fm-YkV;ovF<}iPor%bSOj -ZJ}9Fiyh#v5y}OW8A}7>~3wU63}hfU5#zT*u@q_J@#)jgs1ZHh}-4^Qh!50clKlB{`9|p*^zx8Zu+tB -`=315xAyLz&hs76qbP>c6hlxLOv5zB&@_dSB#y!`ic=`XFf>Ww=vU!DMgvJrDh5Rgng)$gFiAwNLOm( -y|1O|PtZe3p{yqCzDxAnbGd7FCuoN&p#ld(w4YVsk-(w%}D3XuJQK?^xV0E;@M){gQjX}&Bqiop!m5)niM@M>A!m7>8Q)e%W6k9f3U4Ah?>$rHge5@kVzu%5gRSy#ZTEAj+9cKDQ -^WvXIY<bJ)i4+EEP_DNgrD1rqKW%SeBt`wf@GO@;m^b3AR(yN5pX4QSvxK($Qj=ZDzui4=+v;jk7LYVn@sp ->T+U~9|lkK9*ESW-4*pbLynShL4#*AVj8^UW<`poS#-nC|{$G5CWnp3=moU+b(Ei`?9!6Qo)*e!KMnc -=d1E?4r*rmRIH51C%>er|kT2?|aLGQFiYK}yDMhe?q58m2C}_C_(oev|61`Fs@{-;uCqbCT5r;ksZ-t -_M`9_=rr@UN|SP=A_&_qe&FEP?d!KSYD8Zqi)_DEq4d+$INZ0?C2gEGO@RO?+ib*=(N>elu#Y7JL801 -uhbw%a>xyk986*Ia$~8$@24jXmyGn-9@Hy`-I05WdChGo9;dN*2}!o~x26-4xJ*2Sjok(A$&{c`jm(& -(=s7i;p(4#aF6)wKQN!73eaEy5UmP5qEV)9m=JcSq9{%KaM`P+0nsK5QLKt?R@WufrcLfqGfr1iN(H$E;Y} -}(DcRG(d$QqqFU$EwAdDNDp7_@_W&NWONnxXOh|_U#SR8M-q{?|CG;)9Aphxyt0^$4f%4qIzp^iHyaO -H5nDSAH=Xih!rkKx4CI$Sz9X5q5ivv{kzlOl%(!oVqnb -c{C(W}B^fKbwO^5c+95s(n4)9~M+Uw$Zc9iG6o^mt;k~3l-HbQV)i%R(GVd4GV|Bl29#A2ji}5P@ThQ0sQo927yX{5GcRB2Is^!Mv$t -$V5R!02%+|CD7vXKhalGlSdZ(eW!y~?|8S|0Cb%t@*H=V=_UIV19B;<)pHziGpa9;?H?^g?b{hHUR11 -vN1|GayA++LDmL-I1nw!9sl?_VsAVe`mxVL~9^Y`;A?;-P7bZMfetx?f>}grvdk5*%mL`zL=u_PoL}~ -IQ%Ck`YuYO5CW$ViotLMg$bIXNfaR|ioqEKhbaU{37Gz}W<*n~Li#G)h=zcAk29+SE&?cg6awh}*cym -2*zXkjwYx3>MgyXCKmbla{V1V8-1as#5Jn)FTcXS*R0N^h8ni_#B@xGdCMuZ%P9oTkSk>FpwIW3Wh0A -4aOC*?vpb~_9#EF2xAA$lEwpNj72JDj|;4Mi8*at7WVF{=oVN1*#|0+ln`c-}JTg~Vw?6aJ(vcMY21K -|nuZp%*lula)Yk3k|J&$|ZqjrMP>QPpWBRJ=`tTh%0eGl=Cd2*_lt3dY_W>jDIThJBor{KFWo7eg=U) -e*4KA3O(prp7ws;jVo2?57Nf9bed -q+87+5Mo`e?@k%jgZrg#mZDx5sHF9>H1z+B1Pc*}Wv#Hn~vL!q&M@BI-TPGqyYut!Jeu(thuk2}+jv_?$Gc+t)3XuGhcYxWEU -007Z=Jl5`@NMWjnmC-8j+oOb)}bt+*_AXZuk~rPvMR!3u4ygkdR{kDdVwl=i%yh_8t^E*BkWKZF%e&= -G)qej$3l)kyDZF~OlQg!`dwOrq@dDVjzQy7u3XH)50{+@iY{nT$uBm(9XDM* ->GayWZ$>Cb^)EEh^TWf7P?|E(RVqaYIz{#L&s_1$j;%YhNql3OQ<%;=Ry2QIwls9!v;aQH+($$X4grp -Qz8y*eimz&I??=%%Rkm(^=dEBA4J7nz9i*7Htp5htJX#E-C(QeaNEs2YLz3=&cdo$!7Dd~tfo~h(9W` -`#vqYuN(V=sFp^v&)2bQEo?;RR%l#jzUqHMJo3+_hq|VToyao$s_GSk^#ebQV0>6xy_Kq}CMdW_fpDZ4!ZrcVbn0rdM|rdi`y*GWM6HF3V -m3J4(QA$vRw5Wndo+2cEXeIb#YyFp2yUH18{Dew&Ls^1_(A9miYuU6FWq)jP|w{dHxf`0oNuc9OrLPx -2XkzGp+He0umtaRh8%GcLRgM&z-~i-!uv3wZvV4e -cljlu4j@~!4b|`nxQCKo$26j*168>-b{`<~f?fdhoG-HTO5|EG;ZPO#-Rb=eP!O8Bq -gQR|?EV*y66(4tK0sMYQe0e)MoQz!bVTZ=))wwqO0*sM=i8a1>oo1yu?~TeA%G*T8W4G_N=)on}B!^& -fzrDH-l}@}pjvU}ib08077WKO*3!2D-J%YPr%7SGbW_O!qFXisV9II^LUQ<*FI$Y~hRffS5@+mhV8)@ -@Q1YDHf_xb+ikq?Ul6rgK}pH3U?UZE$NCQodH>BB{I;ramuwiqBsyHADbv2VG1w;4vsaynGGa)VPm@J -@P^BU252T)QuU-Ocs|PhK4cCv+bjD+n0lQ9R1<6eEoYPu#M@yTP0(FbpZ-EnhTPJ3DApKP>@+=V3O69011KRSG-! -Nqr}f>q4-MSB!17KY4xKzERXE#e6NB!`6?b3xW|7NkUl2u_#s%Peug$>dEF|a^olWe1~T73sz -q|kPcZeyDMeQhea|@GwP2nKIVP}@iQjYL+}#M1{Z&{EROFMIqObu!y#`XZQn-M* -r!o`cMZVnZ`tUZGA3lX!5_VgRT$=HgjDg3ka}$2bYYChApAoEZ5W#(Y`8aWQAPyfc8=lNj?Pc*ad2zF -y0%MV_mG&btN7^u8(%#UZG -7n~mW=&{t{WQ&jV+Xh2WC;M{D~y|!|*tK6CqW5#*KjF%QaNj+v*gZZH2$~xb!_Z`eiQY-dU>yU`3H49 -`wN=4K`ka9!xQ_+A@T9#1{Bv%PKn#}SqvNR^3cc3G={FPSvlu{;?8oU -oHAT%(%bmV=cHnfF1^!e?0yzKZ*OL|bSrwuwXY51G~iWQ2)aVPpwyru95IPFiE8D182Og>CPqYf_K9w7GUm@owc -}H06dyisZ{Yb!2%%BQDlOaoA-gG2-HP2rU-eD8Rk*l84<;q1H`PwAt&qJ~MP*zw?V!!R8bs2>NRH9|G -Rl6)oE+|D0~{$=1O$-Q)x(di{9o<+&Aj9>0*p9};s{RC6ba+>l3r2-L%?h8 -^Uvj28Z_zYH&xNKv5m!GLL#F;H5JA{;WJEuq8N@YDDx#CQg8DRI2eYYP=KXN2Faj+WVa-)3$iVVAK=- -+ARz?m^($=7C(vUF!LJA!RCA -NnW_-cv&?*oiadYS)MSQKkRaW;-HJL9KGn^Q-;@?Si>o(N5EXjm(BD@Rxr%CJG>GC~mU -`0}ydn7*+0ID~Q6bOiT~)OY*@VH`nksAPbwe!!wsv`{bp( -jphCn%YYNoMzOf7jxp92Vok;~Pz_-ak*oHjaA0Pz*#psEnc;|;865PX9!uDjI9kf -hD`;rWB%Vf}+o#{rvb$4;URko&B*99=a(cr#@2-_T92|mps7)B<^?BUy`eZv^Ui;JCuplWG4-yRv12N -T7bSsngN^_$az^bVW*O~80A7<+9hC1=hHCRADy2f&Q^3bx1iqc@AIU3ZgA=#3{M@c^ls+P~uv=6O$nn -oZH4=a4kjklv&lHAdpIMVjETSPIYdx2>l2UTisV*c`(DBbjp;#Oy6&9s>4`?)e+A3LPF9(K<8sLZ%Rb -hzZ4;sCLt?vaG3XnGV>Q=9T~w@!aOW3-)bX`GL}XL5jA2E;LoFE}MPL}iEI%+}$@fr_WJrRBF>1;8h%f!?fO<9tfNjaW7DQPfjer4EAggE>P~l7gu8BYJq2m=X~<+z_pii(uK-t)C3C#zn-OxbXh= -YDlFSzfQ(fNzNSG~Kru!0+_0KT*bA|q#NjiQQuS|q^LXMxPVq9Rn{yM%b -kEG2=o|7Z5n0{|O%X1bU^Wh~g@#ftyx`;BbLKY|NWaX!FBeVu~R<*&{DyPP|i})V8zX)YU{b6ewg@F3 -D)>rcdf7J|@PU3Yy>X=tsvLUJE37Y29&S>{#*0v|ZfUR~f-k`l+6Z}PHPCCk-lMQzA_QJf^lpyW&Adn -xYW+2)@)puo?+1fr8%vQZza9=N|L@}8NdX_isHj_-OVG{pr>q@rfr{CXhFUK>K>z43xCq<6>Y=#3R-Q -udinX|q(p8aM!pQH(*xbuwI(PJ;2h$AD=TdRnVhn-I{UfAGpGW2ad#8H6JqRU=xceJ6Nhmt~kwu}#EC -_rI)JT}kj)|a)9Z%#}@Y$vwjXkYM3j@3Hq+!c?^D#v9_;|(4ur%Cee+gSF*o-a&BG()$var -exIP{vMc9Enz;C8QG>P%u>E}_JYS4HO-)|gT!J(8*)o-l;E)VdRzsd}+r6l0al*Ap*5x4a|D8`?g8Y*uO+VsCp7-5R -fYDr1qBc-i4F#1UYil#PesCB~j}Vs1I*cE~+?0c6Q$B8wZ{*o(Gfu{B*JC_KboS+DEi|wq6QzO}#L`n -aMOR*Z3h`@+{J#K%+X8H=Wb*Zy^uMi}s2G4g75*g>;cN9TS@8;qfyy+#CS6O -)lde7!OS%OtA0m)+Eol*ffn`6Leia!`r~S;hDVGg@%TGv9|vk6j)p3kvyxi+)XdiM}d3<_nN~;DY}PT= -;AO_He-R7F6PnuDkzB~qES$ -;OKurFo|~S>k~_g296s!LrIxTmD-XJJ=WmSn$_vEqbOdo3{MET*lJw!E`r+m*Lm7Kf^7}pQ@R(^m6gQ --Ze@q(Z&lrMt?X=@d{M;XO_Iw`6wv*f>%C8x7)t)imRd@)6g{Wuugd&KGcahKIT-jHv+H1T9F}DlRE|4n#*}7kiv1S!>NWCe=kjR>EHY- -zj=3FtvT^c_$-@mwQT!M^yr&8lW&aij(LQhN$Bu;C-zY25!KnxhfucqNccY6GO9&dkGPPX1$*;tPJc*bRDlxrL@Uuu2btEcVG*&AbScr`$4AihL5P|2)$$VPq)8 -Ot|i-&o-6&rx9m&dEl%~CW)gn;GMhWul#jpOIduNV|6ys4by^@%tkbH$x7V@)cnIc;s_-|td^Kt -Rn;rh+-|KMx$A85C_>adw{$qjM|0Vuke?wuI`0djfxU$a6-~RD`0ps)k`R`@(+n9oFZ?AX%h;ogpAlHT9)TjZBh)k_MvWRXA_lLomb!1N3>1V -Np1)xM4>K(rxNyU+0Jv~>vqz%VuTJ4}P@5l>b_&NZ=&QP49)2v7|LblVK%z)J*>U|?K3`I&SLjsq(yp -qIV+ej+OoDPHTeGz^SIm(U=K!E2NTAwx`qJR1RtHRzQtIWo0s=`8s-L4(hNt#j590VuTLFM|bP15&hM -|I4ZB{v~b=0e)+}O%v)G`xrV^{pqwo?*fogv~%yvlXHxk`o19Uhdj+ausJ34yB=5#pHNx6qR%3Y?Poy -SPbgk~e2zE-Rz00A;sIn6Yn^wRcE=N;A6=C*++cFwtT44Db8UmU${{fDX)c&P5l`DjEZcPfj;md?OFG -4{r`3i%_Oj4}^JEEAjzE^}{m&M?r=g^AhiG?QmQ{fkA{lwW*3O+no8$C{m+F^qGg`>|q%~$Z$y-$7ur -Dx*`fa13?3Vx2)8ReN5rp#(D+9iXJsda85PFYyL#cIytS=O?=+XuO&Vx=6+gY@eh^H=Hmj7N){X3qL! -Pb^-99LU`HQtd0_RKj|&z&mq>0Y?ghjfo)7Z=TDfqpllNRDuoRNa-9unt6D%e4TW@6c1{R=@V=ndu^6 --)M7u=siFFEKk%EJ$uA*;p{B@_Sb1G$EckmiUagKR}D -b&Fthc%GGHBHT7ADx5JX0-Olzj5IcX~)pTKaaOFK8B47fCXayB%>1KC>T{1kLvo1)i!e~iSI>8NGM(m -Xh+PMRUO4WlTJ#`xy50CLvy0lA%<1j*nf@r^^M6x-0q&TvN2je{AncMQz?J|&ss$DGSKu`DlBwPtz@N -v;?dScdZHr<}Mp5US3uAS)_Ih7o{BL^`&T#&209rqh-=1ERU?8lCf_T35f!YET}hEuz8PHX$1k}<{T2 -&4{9Ls$h}qEr?cPuzo<`SIxE13pQYL^3WKYCks;o}uo;KAw-diqBJ@XwR#sc_#vaA~;E>59|5olILH( -P@4I9v(tqb*Wa2%$a?m!+G?Wf@B)fR+mM|d`bDrI!;4xo;N-)*kJPrv;nRekt5ZUw0iUoI1yvWm#qtg -nHXAp(V@tFbghDv0wlo^~E8>~cdC9z0uQ&aTLOFrUJ;fVsUkS_EA4I8uGV##7;^p=W9@Pdp)<_Yyb^g -3^=;n12vy03hTg<)%-A>-1o7Og|iQ8S4(|g2$Afy@MU|W*wi{^?>!jLmD<5dy&!(rN0T|M6}_aeX4&n -Ks~J*_~<(D -;u1E|!__AkSP@$&yhm;hw*{uCy7#2vW)8ZJC}@9bScvR3?s{*}<+b7TO085)%A8id#=0BEUK1RzRrdY -{%g0irPm$j0XDgh6jjN0^YdDp4=a#cCKGl#mShlzso158*i!33n{8D!ACE3aG6oJYnnkSqSW}KPf)WIPF%v2caJ|z -_I?4R$qtjMf8v8b^YKY`5BJRuIa&_fsG9QJ`1Mdq8)%p}Rr>3qFn265Yv8-#U)*eYIQIm|A_ytel -z8wePLyf)?JKDdTj5L|%W~?$yNH`T)69N8?;|td6SZN~RK% -v?eRpuasNN1Wb;j*VdX*x*qP^+1A!F5r@eHX}y2~W999-2DvNlXuQ{G@mNW74Cz1%vy -~d#RdjXl}UcJ&|5eKB4ulKnAf>H^ok2B?_fgtMKVQ?INU6M#0AP*2S;qD3%Q4QPx^iw@>?gL3dKy%g` -W+>SfdJJ3LhGy){WWgnn<6M$GlC -HJ7xyZ@$xxHDNlCiEsMV#)@l@pb}sjC9&`M>R2U@^u1_P_nMLqGIT)?cu@uk=&?!ZF|Jr2J|B?{FEz8 -5DG%NrZ+;hCxvJOEFp$2k@3KE9@blIKL#(S-1+uu8gQG`#qyUroSY`4EA*+ng*FPMgtxbaBY6;WJm7- -0JTz%aRP(^*xDjsR_-xMfkB$Dp&E?MCV)AdG610$(1k;gvtudX6))>aSB^AHfYkz%$q=xn(-5=*fRz= -!x@zH|hX7t9z*Hk%h1(V&XMU-ZCJmqwO@3=ctE}F$vUouJYBPNm{u|=yTW$%h#q`QlewcxIQx-u$9Ua -e)r}!zq&pfQ-E${j!z#{^RN=}Z@)fb9W_yrhV${*vaf`S-A{xSpudAGCpe%pnUer!Mpw(vdg`CXP|Z9 -e=z%)Qr=quSanc+XR;d!2KHH#?#)@J1Nn1$TG}0YVNCPv1s#okmpNHz8%-SHxcG-t2X0Lbcl7Esef!?)CZX54eUhZe%s6DR%`;g8yb?&w7bvx!qP2?(R%-+XW`av -UqgP@BrRkMZ6oRjL7D0W}JnpX|il}#b#JhZa+=fXUvhGysk7`34D=a+quT9>c&e|?`9XA<7rUt#Ehna -P(ZFt{u54*3197WpD@t!+AyrbKb))h`|aVL@8l_tA6Be6RBIk~CRs|Xb>ODB(Kx!cSIR*Bp6j5WTR>W -|&_;fR9tYOV(QP;cd~eh$~P;jb5~&uPiO<-zpQa>!_}hh||qDBY!n7gI;C-%Y_z+qhoW9g1Z*OrY$7D -RBpfJ$bMDEA5bQ%tAUYXAPdnYj(BsAm`d;bL1FLzIR6(9Y=%5M!go5!?Wn} -TCK4QjJ_b_K1ULBGaoe3cDctKh7Hrqc%K*frbo5t_VVH0SCoA^n!a%n*pXJl<0iCuU`#aaWBixct@>RopV=G34es -`vJ`QYN)d>215*>0fY`_=nGyTtypGNy20Gf;DN8vj7zR=H;jIW9=y*3lOJw=yQM^H=*qU}vZL)+j=t$ -Gyi=T-B`ND4{K`&8hX8y>nFsdPXdKAmdpl`si2y>6q4JGBYO!XL;t&&+P5{KZEc8TO8%B)Mn7|#YtxL@TE*0>m%)?~ZTgR{*rdJ_U0_r|a^2ie#tEuK}wje)RIHe#xalhZlJky7 -1#Kfw2!*NR_PCKRUu!^d7ag(FNI-TcJXe0>%S%|S6U#=H4kN*6er7^wZthK*OWQ$`)PP3 -6!8s~!aPb#c<8p#JqSMol3^$;Ds^E{M}S4zB}6!(=m8wY<(gaJ5FskILmb;%v=c(S9y!8I+mLr%8xlY -HvsL(Qjh^W3}!NZ$KbzhsG{Rs^Yxr{il7bD1Nwl-+5}wmdvkVupi-d<^CNH5OAA=dZ>mFWS_%mu&)3) -Nb5s8ztq`TYO-H#h6GmgBc9hv=w~X*RQ>hi&Cvf;YBjx4K7LcycJVJimdZ(nZhwY39r}k?d4Hi%LD&% -t7P(ux;^h!W0WB7(Y!97)00P%ATS22eLSv@UGhRe^BjLV{qP;q}=|VrBB5pb<{E~@1gG(W)U+dvy4YvUq*bU2DGly=Dj| -XIDGu21O>wwjll$lA -QZtc1o>rRd;x>{E|C7ffO_k!1TTOtT@DJw2om)11QpmcsAfjK=4?#5YRwXWj4ekL1<(!2Qc&a!)Jh7# -)))+gcM=MuB;qjOhDZ)l)W7Cz%Q0jI!a2#>O>LoVAb7)o%nQ)gU~NvikTHw`>H0XiR+GVi!hv-9a;+d -Qfky^j14%^=2C>k`g;Os4E&n}d8$iki8NPEi)td%iM_fvW?_VavJD(K$A&?Aj!_|-FRnm7(2HJ2rpSm -HllM#JpQ4mOwNR_zBPM?_4N3j?CrbRcau-UA|UO#UeA?K$C0{?b2&<~{UtI_<1w?UsZ=cc`^l#GcRWr -n}XT4;TXp0)*TZgMM2d%Y%uSqY|RyTgTm#Bmcg21uIW@?{Vg(U9=l@ht2nfz*{&V4f!;(VKv-9I>A}V -#~U^GRP;-Es5yxBp;jbBvR=Oiag3rO{Lvz`+{;%xVy4QNXqVO%Pp%ODe;xRAs%NPKW`{Z^Rew>$Q!kP -f*qRlPK5+@DH}9`o0AyG0cZg$EXcTc!JS5$!G5E1}wyo_7vA -ayYFjeVb)PW1zbO=1gjto08LA(s{h9waq?e6n?e@X2`W6S7au|H!&q4;JBe;61MSBi{F1iLmzr!knU{m6P@y35ug34Jwjn$(3a$x&>UQ$~Sp%k3 -AG>N_KWc%xKR-)8eJO<)-b^?6NCA4aiF;_SYCv?}hkup5|gvY$^9p&1gt5p(s)eT-=+UQ=99tL*P3p4O*I -<4M90wBO?y$QAz~)L_>+wEKeY_X~u9n73Z@bP(I>6JSsoeVI2u^vgcS5;f%d0%Xnzt&=5gV3%2E{uv90ujmiTR42)g3&OEV9+`0s|(NlYo*j>lGFj$oxugXL&m()? --NE3q;VhI5PzVl*Cs_Is_yE(-|nQTt>bSzGb(P20D8M1IDpXQJ`3m0&0jbU_g1XD)Yb#t^92YP6=Xb? -MH0QmUk~C8Ib;Q^vMW)4d`$aFJI^DMqlOY{?Pr^L4)DFX5(8k_sQTtsMiJhyu;_(#NRaT`;gdyj5_;4 -W5=vP*eiM&vrm{_lNeI<_gq~k8l`W!JdijdN*prp#VtT%=LuBp^zmJ&;Q0A{dl|taI%vdu6D;UgEfN1 -TB?SUGDZ{M_itW}f6{NdG=DDDcy#K;V=3=X=tb_|WyLO`O+%^oljf2hHisKVo7|yt3AT~^Q)G;(uQXD -%SJsxAyw+1sjvFtQ6^)u-s9xY&@-anAED6db+4>>1E7>g_JQO!cJ8f21>suNX^xN_)kw$F4~p}7`M?T -kvmJ>H8Y!X2e%RO{eyQg2gZUj>93r)(5qh$BdW_f@ -D%4s`wCP{sV@`(gvAM&8ZF3zrneQnnusYhpFSO=Z{97OTUkLUCVxybO(-3FDY0K};R!ZIBaYN%yGYIt -`;!09KmajQ~%+8*PV(0268<#p=>4RuuvZ7q93#@cKCX6-$k$kaFHGX?`qO(&IJMWI)q=&EjM~qg`;>4 -c)$)l-xQ(0XRBVO|8l4!o+m05aiAvX}7QhsodBh$NX&YSD==I>r-d0TCH$uvV_KKWhP!qjeBOcCA|F! -WvyZMchbDhbqv+(DP!06&#e^s1}4&6-!&)uv0n207to@r2RiSthGkNu=g7J+>{JMXc*;%_~Ft*r%l$@ -|Q=fr#siOwQ=+0C%cXMYyWU4kMq@|Q=-W|9}Cx~_cgNHme*Hzl#$!X*(Q;>n=U@YdL&DWyQ;DCBF!+v -B^{|w?k=hCi|`p%rB&_KBa)E8`Oo7@k7F`EiVu+aE@kuf#{XJj2^5a}2tOZ59KvZhfhIcJZ@H%AUq2l -9zyFdhx4)7%u$qhfujjq^>(Vu^p8)g!!(qGw?$<;346h_ZpbWCWD1*Wn_#sFV1=4mHMN<@lGC0h@U&8 -BxP+788Wv(6IvjPO4(gKJF0HFZ{M6QrENhGHinETqdf~<9rt5*dpfCnR6^AUVKRj0A2MW>v~dQE*0PjhQiPSD^()$rKEJxoU~8aWWi4> -gaT>!}+ZWkEjB89Zw(dYKl}4yo7)%CXL~@mdV_2=`Ye*pzBYf1AmjTQJhP3$l=%>-{JLQ@X>o+NeO+? -6aBm5{)-cnL)?R&C}}O?hVXIVu#=4*q1kU5K=bP#}X`tR-u^z%*mxAz44`KJ8adjkD@Q~uwq@_LoM~7|kG3BBuwtb*&u%-#+~Kb{L)lxQA-q#^cf -oKp*RO5ulx`jgggLUg)B5bFv360ROfE-5QlBdP5%`XE&pCotp6&KYmWai_I%I!Y7-cDEivgCEm-Y;iJ -0;3O-@G6aMcrmsZCUdfJade?(SC5(Z^Y?Ex>V0u$J3F)Z!a^qMt?dh4{U!#P9)@>x4VSRKzYn=dibFC -0-YVyY|6NfoOR|EYguDnrBQoseGI!9Re{*jeZb1d}BtdhS~_=xh4DJ%{Z!iPO{qba=@;OTtquaCi$NhDW&;n#|^g`==8WjT -*w9?7uuAt5BBp*dX6jBc^>_JN+lQ3*<2seAMy&Uar)FR`K;{jQsy>JTEA#fYEv#$Ha8GwlpT8g`SJgO -i>e@tQ;&B?TwtP~ZoZP~F2TvyjZW?U32T@u84jb|RK>Bn$19%^3B>9-wKTg=FSM+0dyOHkZB -&Pzs6p!TDS0z%IX3So5kv<-ugHI@GK|XbaQoAh*ZLbqs6yaTzX{MeYM1C1WlQNF7>NRF1+@cpBKZ|Z- -j4owo%WWSTaoJW>8NtI$w1spf^&(=5v1rrcHd*Os1=IULnW>pEwtJLErA^t3x5_VhZ5E#W#N{T=WR^R -exjjcgb&wdzztMCL7HC|<4{v%s*kAi+y4dZ%wR`{fUox?v`}^VF@%`h3Z^o}#JjToI{2kVRI^s|H#s8 -nj`A$Ion=$_21;Aj8B5@ocDT1V7f@UZfA%PArzHFdK1V(V;%e0*=1v#k2D$WP`4;8><2O15<+B}e2gopJ8Q{@ac3Zetx$5jEYyJ+yW5bql7lQXgr@c~QHKu-Vx<5sargR{cQR9;RDXO{V}pk^J@ApLcV;JrO}#O -wa><&f5#K;gIr9!TU6B)ga24N=Up28|rFARdpZO9tn55FmNU9>EG(l|9t)Hqedl-3i|YoY?NN+8uDk?j70z62NZ -A-Tkp|?@V$>gEv}p}~u?1#Ufw;=Q36;UimF?G?gC}2-dmRzCk>0S$!%<~^qGT5zH7BY++C8GvauWIpT -E#C9(wc#{)=%qLJf||#r7xmO!k;unl&u#hC65&^iWXRnh7Dp&eY_mBmPs+?68@iIOJl8AO&=IAkCA@sDg#5foL!1^uDuRe -Aacu5HY>b5hGY{_iDrBcAJ6k?YDD-fkzCm9pipG0S4Z+mb?2`q|6r -wuwA>V8>|TS@4VAHm{`|0y{F5IJ`Ke(J!%!5y&<_M9P>P~x8Y5APSjY&Dk|a%{ -F!p6v#XJKNPz!P=6mUGCEAz?UgFgfrvp!v6sh&l2l3!&Gdo$M{7vDW-xtGracx-%FQydW6BaHt& -ck9?KmFU$WRzjBr=1R_J$ZaHg$OR}bvEJOsxfHosYl_7yJ70@+70kz37Ky6au+xS7s3JwyCkyY8a%s_ -ymq(B6O$p1rOzl}vafwSbwf7cG#^VWf_!ahOxax2`l=@`Rb8B7AF{#HB0M}s;)Xw7#GDdv?esPhelei -Ghj%qGHuR~)?QCj6v83?Q5UQX$r=K&%pmx2*lEK8U~~K+?(;{?3WMtMXqw3HjRv1}N*eA#2|v9zQ9Tc -yYM)x%m*``bxbK`lWp1?s=|?Fqq2&DybCj(KjFOPC=+m9B!kr&D#en7H24awi`UMhNyXIa5}JG-_Pd4S58upT|_ --#jWEEm4Ddl>Yu6L+3T*PfjrhX>z|q0qZo^F;cq*~q(u^1TNJkui3K2`0nEpeaUd7jCr -C*LObWxKB4LOxw=fjBqvrZydMjXqPB!hnXf?2JgmgMRk*vSblpUnYBY{x`}(5f9Tn$Rc`Uwuj4Y3%e -XUqDQAZ+e(ha|-@jBcA@y=2j*O6RwpsK-PiWyRR6ezE1$(IQ*3`H5KGqpImbu1l=~~@IuV_q&!GSRKp -*){5frPq!xe9PR2KX*Cl63UKjS(9c;yRg>YZC5JS7Q7=-j0{Sf_bVI|3%TvicaqhYW_76{^5Z?V&V6L -e$aHJK-(J?Rt7?#6Wn}_sWOyy0!NGouNxtCQ0)uG^qWu -e`qVRv1Vio0rK_&qxaRoZWYY*ZKB$)yrB|-3hnc4!aK#pU@;$)fK?&qIuQqOd27!5?%YQ~d3*oTlcK>!n(9c8qlM($Ju -lZoQRCJT4AhF|#aLmiHDC|*VJUZKYiiDE}o$P%-6n)_|hK5Nq5?-$}0MyX$%1GnSFcW-W0dq#I|(ARF((nP0kn$*S*UNtFpPO&VuDP -aPG6eHVnC1u8wS(IE6nV7^+;Kz@mbDClaXXNWUy=NSc!;$-HyFc-cuLH&%2Z=}p3)0+=%?>!$7OK`)+h>Ie`2{*bgSf$@n5p -i{@*mD*mNwn@4hOUF`j6+1d1orQlc*>4$^VEscj+WQXdU;3#%J&OEi9smEy2|mRA|MB1-8^_@ovA`ro -;xvjg3sf@rVouToOfUb@7><)TL48@qKx7~mzJO%8mIP3%DnCI24>7r_J!BcsV^}Og8vYOUwU`u10uT6 -tsSAdcYd;!h^=dCxUQU3%GjO)*D6b_A3&?>~w;bs9Q@_;r&w$iqP6D_t-#XTmK&^^l0HhbIWs4xdpAB -rq6y&f`s{^}Sd-EVPkhNHjqB8*5FagX?WDT_gm-g>fA{1Z|jUQzUws#SiyRS7kdtWFOjq)+2_B5>AxESE3|F4qJeHNES?)n+@cw(cU-9W -4{IeJR-^e+^BCnq?y*@hw2Kkwo2CN&wWV;=UWOwkM%7%KXbA{FVOv}x{pLPKs-yV1B5)@-DNz+^){Mk -pi?R5c6RKChN>{4Nv9DIp{5q=sSW1E;nz$e}~PKrGH1AFumC3@Bkt!QMeY1pfplIVJjX~-t-K}Z!(Q& -TpGthTb4B>T<4ZA#e=HqU!ep*o7GW74JpE+%zmP8YPKMOSSw>~`p(4VpjfqNS}Aexaet)2V#fhd9<*> -VQA2lXe;8rxXY$ORV?TgR2S6)gkXJvXkeld)PpNx9ODh<}LR^@6GGovY5c&lKrLonSJ;i!pqm -c3db;9A+v+bcw|qEP5GXLESD;Z~DDuJ~S?6Yk7$DAA{Pq9$KM3oyWi=9ro(+y_yn=+4Ldwvq$)!3kW# -vEh&!{L73eT$O_u;Sn^mOFYgkT0FKwR{g64QsCoP*VYxnaj>!D&y8?Yq#9VfMrT-9S-}k4Y-9{;yXT$ -?LJ(YtRL2hm-glH{XZ>wF0@bV~_pyVYtF1tV|q&p*!#u>95z0yUm%BPg(_m(WGSB~WPJ3Bxs&u}L~$y -_m{=`1atU3@d>iq#kN_bjaIvW?p8>3NjWi>5~H)2wjIq^}7ByR(sPA!o{s%UzY5steIAzTJy4havSTs -A$@v#q2yEVoTcHse66bYtCwf5Y{+GFXS$vD;0-kEpX3UZsFQ(rpl#A4Xqxa3ViNjW{(hR3Z|!Y#t!cGct=0hgZ54V_8(b04`Ej5fKVo=)Ors5!}SD5cPeDDqB -sYq8p)*!~w`_HW_kzuZgn1gLrcK~d>5{{DSW{r~9yhyOW2{r`~@zT^5Ip6myJN65wKWst=ZMj6l*cKN -qpK1C2DMw2vx;xx5v_|iSR#-JAvUQFN&29f9mHIaPvup+=Q%#fg7aIr=gK>bB)SPBOSyWnqz0oX36Rr -G1iGsjaP=?rqyGmv3U;;Z;G3=HR0mGTz=j}QQ=7gDg;#mjjYGZsiutuN?R2pgt=5HrVC)ZZGyJ_Z~upa^?KpWUkrihp_N -sGOrf%M_8CU{XAmm-wyfb5kvoW$Y8|(!lV|?gF?E7jLE2q-*{>vP*1jN9#pX@FD^WfGn7$=s8iEaTVe -S)Y1O`A^114^RW+t -&&`cJMreD4d>4;a@RWv;;Nf?7Y~RXAkUK@PJD8CMzM+GdB=KFb}a0vKbS;e?r{F$rdQu&wzBNsU -!_*#$ytH6-83oaeb(el!Ihb`u>GsJz}cZy^xLWS%KHwEd$B#t<5QEiddO~XJL@%waXMqlV}Qn8q0)_s --BGT%UGWQA`}cHqB>0scvFDU}uly!;FUDD@Q+2bn!pZE+L&(c9wisJ6pe&>{Z_GY0mTLX5@JnFM*%i3Ms1n_dzUJKJD8-_Ru1S|TSk5f)c~7u5L{*QwIyr@u$ -f%@&r-#^ZX*n`xj-L3e2wRVmJsl`#?UI!OmF -n;YeTaasld;wG)mkSd#s58r!YyUQqEB+)Y@Jq$U;}_Z7(5E=5vDmy#x-9Lg7$37XA5`h>?{{~x;f$mF -hH<*UnTI%>?$Cm1a&*wT^u_UuF?&-*f-}76Emj7Uk$Gg@F+)Dw$aWrT_arpd4nhzJu>KP$zQK65z_mE -9jr(RFeuHrpY=a?y>+8n)>pA{ziqP-o_`4}WznkOlrU?Cc0+#ShDVHgV-Ja*=!eSjxD>gSMoF?ylogU -o-<0qbw8rDEgi*X%n_GPV~y8N>6U$Pd_S5phUbTKd2Lw)I|ggq;SRr`=|-r~sVVf0)|P_Px%lvVf-=5 -hAgy`>}A2{vnzD!i@0844?VkK=whp;!*D!!Z}KJEUBlVlUUYOVQ@j!Jp>y)DycB7w9LSA4WuX^>Dn=I -!$?Wss%@-DG!_~zA8i`h>KZ6Ggayles}O2Qjpukq~hSU)7`t+>b+a<+iKoDxkDHXksF||K5KFODd;C| -2P>^5B_-s>k9$5`cZV|Lib$fz$Yi;an6~z~okgPJZK81|c3?AB+T&aN4l6@=);3|Wb(?W&pby}$L>PE -Ij9=BT3FmjOH;~&N^(%Y7@C#+z$v=6$iS#E@Y%Ia%dY1+Fl8;0 -PC5JNx_JDz?ve4(<4mZx`j=Ss=&F^if5(%tTiW==Ea+MJQX+P5&GRmT`9auLC -zD%uox5iNx@l}4wVgXSnQ&?#i{>rT1V_AMDFcusfw>%zQ~_Q2@-$aHo`Y^URqap`bdcL!hUeVrpOPf6 -3X$Ez72REDRrJkS@1RgN@1g!#A$&41DP;+u0`7W5A5QR@bl?a<(I}14Bn8tX3EEQ8pz -s|<)}(ie!DyKIGSeMMIIb#`6b^_5wswyq3Xo$4dP1z(>kBtP3J?WAe<60X9*q}(EG(uyo&)p0SUWFbY -iB6}Ud!J}5Lu^-)itqt9DbQ&hO8O(3sa&J;EF(SP*KNFYm2HJR1Jb!y>iV|TMOsYwK5M}F9D4z7ABL@ -U>xYmlaRGz)iS1q4}rs}-!T*Z1ei&+`EVjAa4}q4mCYp1_gJ}TQ7hin?2fCdg{{=q9t8d7w^a%HZz2S -5YDxct2m#3I`DnGMevc4HHf&U1RI`1-RI1Sc?S$W=1n-IH%SKPcKPRI9yz+iEMd){P{M{6x-_7xNQ-p -q=V_vg1S7qNmE|ml6!CAA3?&WPF?Q^uPyA+6Q;tAiC2yqYH*#?i8ha+_PQl$ -39~x#BmOiCE0=@E#1Y~)%MGB!7Vi>IS$hAfos@WWU0|ii|Y$3*#7mv>vBs4vc#Tu -o2$@5rCrO5<;uvr<2<Rn~R>49m=dr$4b3hK0vZiu>O|HRf|R -1I(4Q|CWyzJ(_1>%g-aMPt!w4cpRdlU%x^&!(%#s*vS6;A{CL+@e_DV4VYl}ccHQOkB8uV!0;4pAQ`D -E~xNrt+qC5xTPLPU}01>u~2IVyAn&`8bVaaNb5!rt*>g#|i3}T1qyw3Z1oxd0D+O1o%j))l --_UDsGE?2gH6stM*^%!Z9HB3bgsjwIZ4P4_bf)kX+^Dk`yePKq({#8-egh27Ir}@}92hcEnp!ZUL%;K -q~+gSf-!=dhG{@p}#faSm1Acel$#%EJu<=&Hhpou8RC0bT%ON9Dg*4S@@MIj&VoY74OR)ge+xT5*?ghHj8uP+~>hsG$)|}oEczi+czqgIe2-%Sx(=lC -yzsrTd7fn{AX=7HtZM1}6mjGy);gTec$ycG#=d`!renK47(z9)QOCGgvZWl0{|EwN{`V_DRh8od+=Eu($W-;%?2W<+>%KvGDe(+sKbOG4{8UHWsPA=XySY4fOu -7hJg5BN9Zhca4QyA-i%1>srKRW?tUpi_^0c6x@k%*C#JSKVn4Jv4eZ2wy}eGI$X`Z*x)>+$kg!c7t0r -J(1+MwcP(5}uN;wWOU|MF!nGgoLL^u==H9P_NbcX9wQr7Er+&*whZL6;!4qY$7n$d;Tv15`$o2lw9&> -BXrK3m^_>+ChcQ0wb#R=;wEK@LRwp_318lo()Vf7C?n_txVLGQs*E+1QT-(!;RT(&&ZTAf!N3cKHqks -{*G?n*O{3&%Lk{;0h$8@C$A25Ii?b38 -}a?ML*PRkTM-oL)3c`J%bufRWpDM`Stnu+;|W4X8IDM<$7Zo`wwKG0SC@Ta(rSmK&jlTAIe10)3gT~l -vehp4y^aYFy2%UPm-a~Hx8s~_=3d?Qd4ITH?BkGIO=YWI@fwE)%PgGOk0qKcH_=Tz$=OJwsWx^6imHd -BecT*;OziT3y4}eaoLYE=j`{s&5_EnX+XFR+jsr7 -%k;$lO5tIBm>_eas*|KhFx^S^XYSPOSo=O!>j_)FV9yLbCS3|2=c&mx~8_5YdE{g5F1Py2p`<*#-1S0 -^e+Ktezj%mSI97I(D;$TiCe$AAbHXe~qjC;!@PDGOjFWH>0Y0clbU*ca5;7Qi8jtwk*i4D5_D2hC_ei -ZHRt-v6qtZnBOFBt)$RzRX(HLaqi6wxTVC0;C6LPu7y(wFn0&@V^}euZ1&fytZ7XK&`s^tKMvx0!Hy$ -nJ!?qw4WTRU&lGCpMr)vUl1F};6D`XGan8F4~9Qlsry(15`7*Z4(Pq``|^N`dM#cJzIvC;I6~h%D}Zf --RN+T@2%euT4k^ftv_r8kQ)6|CgV2jq6C~9+^qw!0Ry_?@7T^2I&fj0_>H?b=INMwc#5&a520LK-#=Rz^D?*NOZSnSGZG*s$s?9mGDT|w{hkXg`o -A(M+d5_|&SU7V%`n=fgAym3S6|a1PkEdZXmcphLvjUrh -r;E$n-U#YAhvQ4(hj(JR2ON45Y@Md|&RxTHQK6lcOp-b3SYr-8$EjuULE!GwklBvq?G{Rb%)k01KJKn -(L4u6QX>wK|&N(@-a4p%AmkGFQC%hn?`!v&^KJO$q_JDYJTJ+kCAa|GC4((kF4@QJQ!CAW+(w4t&)6? -GD%r8gY8~%Lg;PVe%;(rKl3c-%?(P7UNJY?-&w=DDzdGyMIc;9{%-~45GlZ9pI7tzMcans#5BG(iTN?bf*{J~cC& -S*#nIqv)3En?_OAgAL#c1CyB)aelI^x~#D7UDc*nH}i1HeB_5M8fT{>FDNgu6E|F+dVKmkS4(uQb^Qp ->2Qb%4lCl_4owb^>*T@q-HgblxtC0}<)W$U!d7`*>XMZARTiF~5=Bhd-N51vWS@xLv22}FcoLWU*R;f -SgU_WD>>i;tEl*@(8yiti+eE0cc0(NsG4v2)7w;R3(HRR0bOcY;`Z^G!ry1IqB-&P>EBa>F+Fd)cm)E -U3sryI1*wTM&|5@t7dH)Jkx7Zc0_Y#veGAFZd^(pV~0gbFn|GJ&3=B-%_u?kPppxx|(Zi`X8*sIIG6b3~$%PC=?I{vG=nN?jKU6Xo1 -_AtK6f{{Ro0?1;liNQ1iqKOL}0@ZSAwPVS(bY^V|2V9o)+8h^KK@?lBvN+X$*Af?nH-8MkBM!;61q}80aQ@^OyL;l<95SVOK}ncja-RLJu;7U&gJ< -8NH1^=e3q&7?MImYHd?4uZddNDnfnwpiT-9RsmG1`x%kS8KG{vWqmv3PS#dbkG=(i5`CP@GFL_p(bQ* -ho?G3SqMgy~5jCHUup9MJ0KdnWV36qJuEdY^KIC&OI`z*sC~AV!a{%75?hx-46x%D%OPU0}J{yMgIDE -+;RR=rfkzvzWna=9Qtr*>I~-d(TgrnD_k;(DI^j(O?1Z{GOuPG3DRr#qu||R^tA~qJ@5F_X=+ooBht1 -4~&5Q=9)~LrflYDN9poL*l|1G3OsE={+AdyIaR;7$$^64`8;nbZ2NlL$lSXQr(1rN#2bR9LKI9Dd#{n -X(At*EnUj%e~0{D*m@SpQ`TiN$c|CJ^hid#^uL8{LcwN|HWzEVfdG)_`x|$p$Li+3=S$* -X&5DN3`A%VhCt{Ah;af#7u^54t2?{`6bXV>*{b546CmM-Ua}yn2hma41N}J7DvQfOwt#WVvF_n;*4CjpN3UhgZeF0qkVX-?u?vqoJrj`HGK$;fQZRoVAwb$mgMR%s`!u -@S|!r^ga|Y5>Ig!OHlL;PJKsU{qyL6$-Q7<^&UNweWZsXOdCLXqbmCkAL|#WCWc?BOMaEx1AR*FdAwL -5s1Ac^v79oSPjPgmURPXO;FZ|N%g6p~iaxoyZB#zpD<>0C(I@n@ww{>3IO0xI&1DYL=^*DAdDJ&tdA> -y*f+dOK8#MXo?)nBNXteKK{K?NR9gl;<2GWiDQ2Ix5e>f1=E89IWkW;ceIvvq2CZ&0~=H@cOZFPM~(^ -K4^#UgIle#&~|`btt38tN(Z6wB4N((O?mn61D{k*3Qe5pUR7;geJ>l*7Yw(mJ!9t#-ncFyOrUggE$~q -F^YhA1RaU??|k{cxR8)sHAxA-rD$nO|~bdKfYuY)=En3iuSVXt1LKS1ls-@Zt814K_ohpjB`6D145NS -z*5NZNj$n>;N9C;Y_RXSJvIj7Eym1spE_EAj9x%3=IR_U&WV+asc -*Or2rN$Ee$%58TP>_e5SS$Fk@0AkE(%r04Q+4DU`6P%@JX>>m2kj9$o9Hhyc)vAj+|m?(^vhe|qe)%Z ->NLcYlC+B6qDZITV#Nj!g-0n_G|bwN5#AJskiGM2whVfi-u$YofmoLYSnlB!hj`1;E7bc*ak33!&xS? -F1nYCc>H_BQfn^qhFfgMPjd$Eem#x{3nWf=S>S?kPZqtLT*_4fDMelz&}wqL}iBiBK!EV3~x9 -NFa-;x>0-WtuH2wgTH#cDXCc1?;#Skb(E_;6e+tg4w;Xz7PF!hh>P_$o1fg{S7m`P|u;2a$ -Q(LEytvmQ^RxJlCbIn;Wg8R3jj^IiS_?>_gC@PqH&k7f?{Q`k2E@v9S27P1)R>|0W@UmlLoLFtuV -maRv??!1jdY5SFLG$P$Q^3^uIT!B7?Ty;`fv*s)6C<>y*eX|epczkI-;ub!|}O}M(9&e35#;0~7czdZ --AY3)BRX_}{wpVq&|sNZY@uzgwD?jGVZKfN#5?zD%%Sw5d+U06?(vG>0NiY^+=0yx{~$GmknKEwm`UR ->tM&9Y=aPDw}{v+n%0{;Mj7Z}&-D@CP5O=*dB%+&tr!VSoJAh39q|TVf`bh08D}2LB&O5cmWmXTd_UJ*--5+SUw4^$uRrx$fe5nZ-FR7tP*>y5_x$f -ipo9sVHA0(;Xg%q5HVX52JbOrmqT*S1@85ek*Pv~_v@=lHS2#!9)9|?RB?i19-kzEb)k2Qn@2xE8?Xt -#S)XslWb@?>TwvdY-VDjbc07vgtk>NDcc=4M=!@|uWtM{d;~I}|-q4mGmN#7PTrej -|y?{Z{Omo$OX=AnMUIn(3$5M%u~bwVaSGUL2LHNEqzv(nt4#dI)C}M#u`)y1BCMN)X`sl&2|k3bqMEl -NH|0zRVl=sYxjlDPNnAA&7*T$ZHt1!%b|$X8R}~*4=3lgAsPhgJ(rtp76U;I?&ON_5QfS^5VFA1@Rpr -cDJq!G|SZX{>BW>oRYR$D!Zk+VKh3$_l1h_!Ri0z?oE~*RkN(YIZtut`ZGn}#Ec#!0is7(Oz1=pl8}V -pS$?audVn&kv@)wv&LZ-?ijU*Rn{$ufCL*(btGagGP0pd!0ruK^uf105I;Vu9w~%(!G<~Mru`Jny61h -8pL``9GHd$Mp-CPfMF3l6+IFy|58jraS6Dfaxg(~m<3BDho*X3QbBn(1Pwo`vEhmUN&&sX`%)%)_}AI -1P^FtQJ$427dGgOMn*j@bVyIf&Ll_lN|u?trn60@XBN&_aOr6R3ZYp!Y_(wG7>@`&bWqwcL-kB`en{X<{MYSfolu_pA+LFQenk9>rPG3% -1d-`;8LxV*;SqQ~-n|25KveuGA@Mn`3b+@o1n+%_+$;eMd5fg!e(B`K#&F3((uLng1(ryUVZ^09awWW -RpWr`WG6+`g9#gOz%@u{f$x=aCw+_%sl+bx7EJ0pXJ(zq$#^&E#n8*bsgxo8sn7u!m>LCDwC!HjG(z? -$3P=?^{po(54+;w@J19vNA5jqp -#S0JIT|DP_S;43YAs9T#2kmf>uiL7kUGY@sLYKIA2X%S%jO{GS8(Nm7Wcs@2y~n=7Pp4PX9A`pQxfq3 -ZL*CqSZ+|z^>TonPsnIvVaj@jP;;eRmR&Uj7?2!w0>`9-E&);NB#|5s`f2=emKd_DIwC0_+!e_2b?%k -7^rYA5?9HEf?Vr3`6qmQ${v9eqkdlUWsHvYzs`Uh^~Jg?d9eXbT{z1`WzpUKaQGVk-Uy(9}85!_sBXN -+CYt^NZ)>iaqP!ql?5Q&97|EqYYW$nB98w)+OruO4xaHj!{*&Mkg+)Y}s_=>m#9vT@s^AwH|;{(gCqG -muI)AsxgGPFqgts;pmP!t0^ex8W0WMCkm1R3n#bXu*4|iA?hSj^ -6;d~kBWEM83ymm^V2&r|nusQU8XgZw@eA%kUIJ1wt{kJv%-vlO#KU4ScZiieati(BtRIAsoe>OibnFq -Iki1qK^w^9xIYM{XY)3w3Z-_f~)zj0)FEoy#Avu_;or2O0e)%_xrd3j%c@-M&M!H3ZI-+QF@2)Z8SuP+|^>x&iMkM-r>$kz>i&~~R8m -%zkBOJ4{AsvN;?*2@ -^;e5wz&9sWCP~bI=!>ABMt5FiRF?pnF)M)`1`DyD*}Fw=u5KAP6EGwgtxQe~XyK$NkZ4a}@Hf!TiNLO -x-BBxzWWfqB_7|D}#MBG{ow(&}G74PO@&U(ye;x6=GxG}s<#|s0Ix~OdFv6~}XD(%WK+CN*ZAR_Wu&W -F&=*KibKWc6=TIQGcl|VQ#s$W9iD#9fnIr&JFw9=r;ORW6C8_m}*Bc(r75xl?}7&NX9UoGB_LhmC*(u -%n|5!{lKRLk4$J(5O{>4J<$5pF^M&I7MTQUX%qg(_(e)5gD(pBC{soLl9TvA6i>PXS#{8VTHe+_jQ>7d~9~2bu_i*wij%d1A~i7nxl%oCx8 -Q1{@{A>^_a~MO>ofxF3Z5u{lX=ZR{=XzaBHJ8r}QN}UJMgD5$E|rCialmB{v_#I)ROjqYYI%KOVE8SM -u$vfK -qHs&AaeRflpg|F}+}6ShTm(w>T? -R^UVF-l2l@%gqY!d&h$>mtm$|wu$}J^yA7zFZy`dFgu;ntr8Xt9TA&YJt)QVmw$~+{QTaX5j7Z<6n& ->}X8ocXa#!1YP~B4gg~kGGv^DZ{^D1$KCVGkd1&Nb+Y>zgxe_qc!= -<;H-4Z)bvS^FxROH@3E&p&tO`<~qcedf#uo1ICfXCn(NcjNTqu(j@oC2x??e9WV@z@MtD&9$Jx-#E*& -oS#HcyaXNp(qV5OT!hbGm21Y-%HV6bWZhgj_cs=?Ild8{=M&4y(oacT%c^8@G14SdagFtw&FF*$22*( -onMHW#mdphc6`po4ijqCR-A&#>#}h}7)S@LDn=?p_Z|OjgM4u20e(xggzvcTh)W{K~N>Y(b(O`VnRkvV<|$sQWSg=+4Wsmx+hPYElXUq3=;6vg1XT+i${*AB9FQF~FeQ^^)L2p=97xen!$8sAhph^7Gtv(> -*|N6bZqv7A$^AB3eI09fW3UDw^U^GcmG>R;r7c|VEIR2?DWRd~i6o!GeF2R7$po5!%8KZ2SXaZh`F!+ -FGKO6X5kS76y=5>|=>h&34d&CK#N|UQOBOr#YGo-|-bb+H_2|_H#`B}k<1PB_4J(7T7O|Re@rU1rWpe -?=1AtU5pD0r1_{W}6S4sFk}Cd(^KY -OD5W1;X%YCp!J;%43P{OA*-Uy+kb{mhetXUXb4d$R(;`dOy|q*N!X%O4YLW*^2sb3iMeO)U}2Cjr6QJ -iu7%L=qDTGw)<603e0g%nq$s}V9swc6z&%_DHVaf$Vs6ekni$UiHXMb?+pUS6SXg-a7zf6Km}$zEfgs -sTlkT}_SuRi`YIAk%e8XtOf>I|bM~br(C=4G`;J5{xYc}`9A@Yra&gg& -aGm$ugacDUAPb%yR*<(r#MOuc5iHN@og^BbmWwQXQ<{DQxrpi(pST9=ml7{d}D= -N;2*&+{RVx)&}yo;@C0Wp)#-pfQ7px~PF|JEwb?_Zt`AG<%57(%ry072_WcNU&!VsX>o=sZcz*>-O)HR?99NIh)b3?CbYfe2%tPRIj|pWABoZe6OX(xYb^LwnXyxTFG69~DRU9hWT+kqL^ -Eru4{Em&D=7fD0?)B(E!`}WxotbRB7eQRypTjZnvCgJ -Wansl6Cg?00iXO0UaLm?MrAU4ZQ^}(fJvUgsXR>=MA^UWwoKv-T`RY)l2S?oR!uW1D9?Ow^9eGfZ`^n -X6PlO{)0xOgu)37*i&KXJ%4{y4KAw1la_^O8;(opqrXUs}kihURn0m)`6l)4wc*Hy{5I&Bs1)x!ec@I -;YM>79EeS1 -Snfl6pErSfx$2eQ_QDU(F6(n7oup@h+Zd?m*9RT0lf^!I*_13N3K#>%bN7(@|Me{fC;x+M=Tg;fe*km -5ntV&S93%fUp*b+Rhc3Jz=4cF)9d^*4@Lk*;B~WgVvI@tlC2t+=qgvq#Gow(6RUa!4Jv=&r -OGNc@~>~2CX9m8Wk9M$H8^7I40aXo3PRC?-si@P**@ -d$PW+{e+}KfOBLPYwzpy(xr!Ub9M()93QG&G%EZ9m>rdw9;L^FIl`z9D5{sxZ%UYV&jEJ8|Ju`EK^0< -<_bM(Kb4dwKSvB(=IJ~Th7V&VTsb|qPl<#&29HCf@Txv-XqVZl$RYGMyBZCrD>s%1WW|^T3kr8d?DI7 -}2&a}6=y)LP%Wi)(uSA#l`L;^_OM!~pKd19RA5Sc!2T;IfHO$-HcvM+L`0oQM^M5l?nf|{3RP|cl(W -4>f9$cHp?vV^KwSN*r{4A|jjOod`2ma=!%GIzPB>8k?&(T4uIkdlvq#?oEDD5%NCZQaThe?c(&3+S%! -mv}+t&v<#jE02ca~ChaRgY13SD|~|6635$$yKx1Elin>dO=Z1<(jFJ$4#^m}#z<0ayncaprW2irlCBEP6x3S89%>jM_SAN|2_jrYb5g5g39EEWdp&1w>P=+ -88hM;i@!zq;f46fh=i0{!lPnQrt2nJhA8Te`dbzYs8iIqVEsQ;f^Mgte;Rn;m=!8F^ldYrBDT*K)A;7o*i2)W5y7nrU{VotCS(}kW2 -6~MEUq#^m1?OZaI4yFu#m;_zA{_&PaQHfrZYYtu!WHU}=DAYp_x$uJT*-bVr1dA@%1&U*Z*b+a6(#Qx -1!0qPI%wO07~g8V`5xob_Ye<#ALBirxB%bS1eJz2WvcHW%d9St#YJ@C-Q4O8vOoZ{e1R;)KLS~x^_44 -#wZ?yC_Q#*C`0?yC`!w#p%-IRz3%t`m1_I8D+XfAT-TcKFEB_3({Dxhmg{ed+-UtEKqQqqQNa>Cmj+# -t{4Gc#L^8MA>7PQ-ixRSSdOI$s>z9FY>sYgjTmaZZQ_9=0ml -9C}rZu<|K%xA;qI{#32qa7*tG0HbcONE#Z7h#tk{m7ZGqw!$n2@Md4N}^!5#T&Xgx535Nj;)nT-er4OV* -M+Y@~!J4^Om2UV;oY*bu*x9ao4k(9=x36_0&OhB;L`YuexMTDPg>KWdaB0me;$Mp4>}$$dKD|AkM@l^ -g7(`r&z@D!rjSz?`wKBKvNnjNmm?1@#IzwZQM4qav%p2q2gEknB-wN^g_6svHbxS=Ii!kYi1d~R8uBK -_HcBdN0o{`Cy{J>RcRrCX|B86^yOjNhL=jVU88HIea!m%apI3-l)SdExhL@B;Sgo`%ilt%b4nhi8@Ux -6QM{@t24D9THj+Yj%oC2HJop^bfyp!3=?{lxA$#11q{x18vL>th_Ui~73J9wof5^&f$ov=ZZ#zrANV> -cQ#Sh{5zjVj%Vfg1e{gL1Esaoag4uMB&RsSu6UZW~tr&2(5`V0esHe^+?gz3*~0tBGPf=ywNz9XyoF| -o$OWlu|BTz0dB#3cq|Fo?W#0w&`y>M!y6XA*2A*b5SYrbr3{VM~Tu6|`4xW+n!Ej8=0-fZAqzAs;dR1q9k!=dmt_j@hJH85cJuO9?z6A5FS}0%*SXhc0SNj&0$H+$q>5fevYUIdH-!HE -8QUCZ&Eok>E(8LQ@9~Hm`mY8kzI+p1c@He#({o;0^pl<1?-YAT71TA58csdxGfS*8Yt9z|%J*ff0Ohi -*`t@Z%9|P&1y^K}4=AXF?XvG79`nw}@-#JU(cv3@fb+||e(S?eLrbWXf;@L~>E0vP1tT%24$EaP&E!S -T54XgG}i0p$V+i6C`%J+whB*s8FkA1;IroKJ))Rp)Bt1Xjb(%yS@Ke^q;uPbY-qk!n&1Xcb#v62#ga{dqSxz|nD?5c+j;pp5#?kW`;a+iK-R7LsA}yIGu4>Tx^;SA}4b4dM+(#v1L -%KeY6tWy+*8#AI~L$eVy| -%=Xlbc8L8;!$ofq3Ddw;1n_fw+Z3o -(-}5v0zSpxJt)CT<=bdeQ9ZVf5^=IzIRdqVFj9X7qTc(zlS>=2BO;un#lUW1O8jY=uJuk)>4BhWS!YI -6Rz_r|w=QQNML%l@!mWsqo`oDh0_wB-1Sdj$n9PPNx((yf%3G>^9IVzMb@kEl@_<+$pB=pSpa*Wmjh` -uF_8xQcy?6&tpqAO8>TGt6p0W0V}m5UU@|8LVSyohOhO-tbJ{S)L0Ov*;$LUWC-AjhJ1T}Q^0j5{YVjK -gJ0?t+j=NhFl3VdEtx%Bh-@G}E~%(4YASByXx9mQ8U(KFB{U83Uhe-wkEjwMe8opuV;y@9-Q^pl{r#4 -^yiUne~9)%yvs0&ozLXc9!IB|QX^&p;#;jIaPXR06m}EPuzV#WB4aH7-X*)&cV6oR$z9(O_@s@9K&QR -}j=L#&`4KNpFqq{E%N##bM;`=%UV}{(L_CD11{RVc*n9?k?JNamhJfEY9mSOZri3Q;1Q-S%>I8#F(8U -d>QK&*jcO0B|d4GR=ry(F3X(L3ygg0P8eyz_=3LazG$oNOYG^F5XJL%`T6iI?ffc;4760fp5@0{z3q; -FBD5@dmtUMAB{aQ}G*!>Ws$NP-YSX~`+k-eu=}s=B%$Zt65Gy}=WJg3Hg59B(%M6TtTnC)#3n*8#f`2 -eXE01UXxG7u(n_BL<^JIE+v8zEf&7&0$$}v*dO?f>jE-u&GCsGQJTR;y!^xVXAS6>y%>aOF35s0JAT> -{#4X3DbL{oQ>%5BZi>!pOG|esuAvB4RicRzqnoVUG;bo`k;>+R0NbfmsqJ^zheuNB~Mx%;9(T^$v -Y^{ynUcp@$_zq&6xzupIp-axC(fNu%r2g`+Tb!u7u;`f!Rqj}P}h?O+yKm|O?%mfXw!oXH^vJq>}uX5g$ -qUM0+k0uuue)9mfBYALtV~HX)sRM*kch_RyzT2YnN=0BgOk0@~&w}KxBL<$FBixk9QtQ2bq7IsB8lV# -OZY}jk%VmE+wzRxSP=tJ(~31a_<+ZxJYM56T)+2Cn39}6Y7e*Vsk`V3-feC-)Ma<= -R*ZrKS2{_`?+n|DDcJ`ETX;tTx$d08dg60>fQoa#9c3lonjSY?cH8lV=J1}dLz%nD+NtgI3JDDpmD~N -f%<0V*MGV;s4Rt3C-E7W~QCWd2T%Ngy%de-qIg6yRr-_Cui4-m`PAXAOTxMDIr-IxRXSe&BW__<7W_< -U9|M833B_9LcAK&b2@cVR=A1nxHjG$l)rD&XBNE)Rn3a4?5{M>b5ooc|>nq;=lV1VxD+DHW?v;-_X<3 -QTv3}mT47bQD`keCr5w#4U^J4S03vCt{ -w5f`U_iro$u5_5mh2IzoJ1gTTcYz4VnKJA0$Cfr>Z6@wFk6B%ApBtrkXea-KacA{`K|vdN_JS@G~ho@ -!2RpN%|8uw#w;$6{OPM8*U`k95^#~%S|2~=wog==^~D)|tp$cc=I_8n!IymJO+E{H*U$PQ&543EYzb- -j>Od&16OgYD%f23cwJrE(jt&mK4qg8l9qNs?yi6_242$EI)^!4+_~Uec-IS^iUSemoa@3nBF)e3gMd? -gfXD>!E-dLVZcw<#vwFt?cI_Ov(G!j**bH=a(rn!m~p7aznBdeuW9Okx -`>rB6wh+Gs7@QPWa)8#SG?zuX6JB8ItboMS$CjedOos -EgfD{YvLChw2JMn-RDx9_pi5P+Xui1-y){g$6#P+E;hNPi5c* -X-Je<^QM96tR=8hWrT0N7>;(XR8|#UaTzQAj& -lC~kR5mPNs2a#Rzd!CN%hW0My&<|He(T;LoFF?gNWIZ(1Q7J4MKHe;7;A=7Zm4rJGwl{DOJ9ZiBH@Y6 -c`QB;oJhQ(1ITm_voItELukbdlv~*YcAMkn&JX247g%CSh>R924*(%bF%=e0qvo_O>XYp$HFs9II@w~ -LF>3V<6KOUBWP|faKew9kqPatLvbc>CVB$`_rH|udNyk~3Oy!a*Hn@mU5=Ha1e?vA&;H7*{wtRe -f##JQ^moX1>X$RjMc)HXtKRqQT7r>Pd`3J<;teqhyd4V4^tM-HVzK>KxBfLK;L$s=XKnxA8q-5@W}a5!up@z*?Tzr-F1IR4QYlTVVYioB83qM&5$5ZgqJiCCYA*#MZ!2meQF!HPT -w!lXbEK~3Gzc=$D4xoAfQ*DS4uU#3VJTN-RE5GB~C42Yf0A52r#IiGw?SNgVDhy=0^C+-d^2)f%zW_c -E5zh-ATb0Ak1PJZKsz8>lLI=w_ -p!IkL`R(t7NofF0D5CtT-6F!f2K`#54*ty>Pt<1;gV`QQQ61QoeqT-h_A22T -Egm}USATa`kKk7(ps_&ULTz_hp_oihjA*sBC?6!e3hs~h3G*X;^@aG$?DSeaQ{IE=u@E;{s8Y=(-Fp& -B_T*+O8Nbw#aT3{!eTT7YXwFuO#59RnS3ieH;dmM|<;|`Ght@`>lG5($E_4l6W-wzmmAB&;S1`KiAJy -Jaumx7LjGh+g(upjQ5~K}v52bkwUAf^vZpZSU42kP;yUTB!1&yyqUTY4m}g>}Ue!v*4qPzdN -1To7tmfv$V&V>9O4xY`{L76l|?84=J1wHxV -J%4Ig01095Xvonzof{HKQ+y!$nHhO`E)cyD%IDR1;cme11CAG5TfsyJhKq)3Yz+xpN+>-YvD%5~YV0!YQ%?|i=u4yZs>%6}?NAQa7%J@OhivciMj9oTH~_Ea`dWT5TuH -^zl%RM1m|>p8aOxG7HD4M}j|X$r-`@eBDIwQ*Id@r&O=Qkb7L2o?dd`vt?Vvz>6Vg<3$Aw)$$kLI!6! -S^^Ot^o2=tP!}4Z%ff?s)NbkF(4{k7t9byn*ac4o2i_s7u7aO2@FN^`DOsgK%O`cce?DpKzEOQs?BeV6s%bcqwo;t-@^cR9ZQk97cB91B5bn4wV>lw@GYNL9RRfF6D8?q$(_BA(NMyuQxN)QPi!kj -Btn8fD5I9~`LmZp(x-<8}WcIiJ$^HHRblCkbuDEB#U-p -0dziWV{0L-eRUzBogv->Z0^!I;jqUrDdp8Wmahrj>(FaPq3{kQ+P{p~;6UogNETRzw2l>Ne$P1z1v^U -D+To9nJ``l_sdVQzpc+m%eS!XX89N+e|?eI`{&{P1Ndsb?1;a;e^|bz9|jUWMcY{l+8qlvrB}zwga9QYCix46foX# -*13LOy3_RN+Aj|bB+FlSlzE*rlWL55>05T_Wz*kss@`BaL6sT#zD5zbbKnn{DE+Xk)n4cA;fcggo%2p -T*wu}hSV1XIXFG|-67)GrXskL!Lt~T7jTbuzLhBO94n#=h|FhKN725M!X2)1^0zy(IXi?$`uhuMC$!s -NuyO}cs39zMcV8`7+Nl-~L)ioh~T=?gGVfb5BrjP -?fMzC98>0;u*`#HS&iAs_u$c$iT0IG{wG{+n6^kkqQAK8=ht)=3tMICrSs+%}49q>Q`XASn*cMo3#Mu -2(zXbB`(p#p`pzk7MMP!GBd>J<+4Ec2|6YIIo0e}(jo=WrB5*Hl4=H>&<4F8$@LDV>wc%+F=%pqFXF% -j&7KK*<38Vu1Y1S?^(8^Lg~8>bx&3Ir`wEMaI}$Jcb>Ljn9o~1E+q8i~%c(iAN2BvP}HC4Aj>4^9LVtNqs@U4D5@vvL?W3bL -uV)xON+5s*~>xk@KTIiU+=*_I}BHH#gg6fFd86!{r-K+m$?Vi`%zvc)2t#X%(r%oaOX)_a%)vq`?jWU -*2I!Y2LpRX!%lJw!q2n-|!LfhBR2&n^L^&a4r9|&27C;#QT!IaBz&io>5z`_X+g*7<6p2Gx*Iwf3z%Gw#Z@o;#FffqUVd#lO< -Otd%S@17$>uNj%f?A&qzno(@tw5-h7IMAx2N?PWgJ)YkkFsGAfdusis9o`&oRF6%U>EkU?23IlS1dVO --P)v^(-acm0P7@~Ql&Jm!kL38(I>HH|j)HP7xx=+&^8DUz`@;dx*eD- -#HaArPTFauaI-0_d0wd2;sZ6IWdSUy+_3@Op7qRN1`@XEyA9{As*Wr>clPJF$MERLoD2LFSx;;X=(PF -!c>bJQE6Y$fFon{!9m)LyEUr)_BKlvN36XFSD9W~t5H(5qm7U_1kXK{iB>JE*QagLlxHn=IHn7+$&S= -2Fkzq~$(86za_e!8Q}uV_ga{9AHxCgxz8XRX!iYuxyw22qc|GN-g1PZgHkv^+Mh%hU2yR3l%m%Hp`ND -~}uNw%IRfPm+nRV(ZzsXb;7yIB>>tCmwd0AofmI3a3-e-)iGh+vR2uOwrC~mB*{2*0bvN6 -Y1|obv{401BRZ(pH#_8tYUx#TM#3ug=rfEpQQ=EfDf~&=iP7a*Z4Q}g^XJmkx--h@8?Ct-FzQ^~0h+? -eL?6?|tfu=tSN}LX<(7@Woa1+@49Eh(-WRj>zc4h0kQjziACTUk+wvVWeYVvPSmsmH9~zY37ASCrfk4 -<2@_`>ux>67m(6pk~2}EkOv-_FI!>X?U3}jbY;yD4c3sejyB@q=?j}M9-iyNv(uQ1O_Lx9Qdu*Mr41%=-=(Hx -d6&kk8k#PpBD)aA8Le#Gm9ytal?CjbIr~p5-^>$gfDl3m)lc&>6JEXRq|3CHhzx>lDI>%fLlicp&!Kz -*w?o{8w*@zN3C*4V^tazKQ0^X`2!=wsp;>I)cS@0;2Uq%50&f?Rc8Q0;<4{8y -==W+-AK>t?lqq28XR96$0n{M$tG8(kzEO|owY^`(DO3GWFvyao$F?$bFW -hMgZ(-4^lqTMwhTA1~f{M+KbLw%Ba^@coz8)HBm+L!|LLV#+hwywX0=S+J602X4y?-){EU -bHRw|ZD30a_B&5RC>Z0t2Xn*KkrJ{WUG6?I`k~KcNRK!g`KKqHVUMIIX?zg6d#x@TUr` -R7iwLd)1|M}lbWi#=xVIZf*cT>cAC%j2ucpuEohk?=JjU1#Ly|qqNH6bI2G=O6Lm6{l$phOXc^8JY5h -Go6*gqgHx$6W%pFKSG)ZN%`P}(t$0V;+E^c*&sGS2-KHtT(`V~exH2O#jzWML(Jl?|9OZ|b-g@n$-DK3z;e>ZNq2_&>c;~J7kPQm975aJJ -%7uLJ3!bp^Q^`&phoOkE**a>`|ARpW`-g+f?``>ckimWxWIpvnU(!!(&5j8Mc(r8|$a{&^w++Vsf+t@ -TFcZ+4S^~%C-6;fc2Z4MKvJx+{wHdTB6PeW;eTgc|D?VL^(9)HOxa?~pKiy9}odbHCZ!Z54e0Q$R1Lcb0&pOf+byMxU1Ly$oQL1u3o2 -IL9rvfo*<9da1GTX@mIRA6*3>JcJ5*=OoAhVun>YRzlsTgge?G_k31*j!QV~A{L -?{(3rRzpY?l#HJ(b$+&^!1p*oof0yoEV09U(5AsLQFniL-X?suHVYnoruJl3+>3n-OVD1$7b6yOTetJ -TK5??(Y?9B45K{Go#c1iL?F+C*rcX)=MTFvtrZeJYw>7Z&T>&@XRr8%(TMU+_&=UxlKx*Rz|T+wI!1ekh%I --{1XmT?iNH-ls;27-6X|2Pfm&=?Fj_vEV6cV2~N0Q)cjdnM?f*}W0#kJsI$EB}A_C%LKsp3mS&V90x| -Y=e|B26N$Oe4SQDzvNqV1`@L6kV~LMnJ?$GTw1hj{=0O3i2z}d{#r&>ojo&~#bl)HuR_7fYs^pV3y{L -T%yDbl0rq%n`cUorgC#Wx)YLR58TEJS1W!n2ovg*lDDlsc5C2e?Tn;it_F55McM64pHH5+LqKe|<72= -PNG!nP^G9OT}I5?0ds4q=u-pZ`YGDvgGWudk%)Kr<(oP5;3*qRDFv!2a|dh`!PU+6chzK)13(fl1cJS -=yofbw}PcT$HocThQpzLm~jP14qDE%tqVpG+U{Z_@`Vm_AqnxA5pytAK^eH -7wW(6-4|@W*u=x3kW|yf|M#=%_Dc3IuaZzo&s#=$Az9>OxePlr!;%XIYo7AJJAeE)!XZ}MhL7knUt-e -d#PN>$#A!2yWQZeCCGNfx&3Ws=LhYeao)DIb1b8Hlay$|lL2v{Wj@(o_ZM+f;sbO)-sLvWg&f=8O2fJ -)L)U~B^VsK`blBt+!M+~Z{Ss``^DR5wGnI{ZEo4u7tutV0>5a;@UrpT~02A -$n*+WfVT>8N!C+HE06kf#&T6v-pGhP%#w7!87V)ADuq(RI*$^uEeaRd7-XI-nbnhzP7W=WZTl53lp=;gt>XCil}M@Gm>bJ`J -b!3`MoY{i#CcPDc%V$acF1iBv==#pK1=-eY}VG(t}+}-{mcjk -I{5dbqr2w<)+o>MOGp5q>os*K-Bm;W3Mne-l=>#KAo*UUN)R3_j2COJKetZDpwQ2KBX_Zoo!41USFS% -U_j1c&)qA*@ZD|XTgWxLTGF7ZZGH+-=Iom6p?VBsw*b3@=SaK`j@Q|=Wu<=q;P47_vWFzsl|1Ih=s*pOx!VR$KHp!Rm~T&z8kLmvG%jMp!1q&jqAzZX&CauI46B -sjsM%}VGk?Glyd*FE0>}E}OYT7S1!zDUmNn -$RiD>T>518r_X{@hr&2?=@lk_%4TcHUPZ}4-T}_A3o-E9T0u+kbw{r?XW@FiLsc`spX?051!cA`Q>bii2y%ytGQ(8zg2-B* -6BK(y@Y=YvNqO4ZO9nW|Hg!KCsS@0&+B`Ak&c4}K%nB>UCpV|Pf}wqi}d)a32b1e!pp+EyG5If@LlRna2j%6T{7FZMm{2xY`a%$_Q6GQj^M4-AjIT{wUu!S)i -J&$~xdAeEn=0hVwxy=y%tAhk_q}^n=C#fi5@>rBHl<&G@GT+|}Jafk88U0Y6yuMfNX-0Z#x<0FDA>Y- -F{({~XJmBLMmUY$HLvd;x|)(I*D2|9I8qIg?<11;zk}HlqQM!&e<3CjJ>EAOgAq0GQ!GUvR--WDH=~0 -v0nIaDovA@C+8n2L@qM;2cb+t2ysFLV8}ce6qEkvg`riNCp(%fYFL=^CHK(6Eku-#8k6 -VF+jC3w*INTC6?_x+%J#XLo@91bl-rp#A$PLP5{-9PwY=SsYsDJv=26EFAJeG=m+`qrl!v{@hq1xD?1 -4QG4$aPbAY@p%8Hg0J(i1*AJ~|AF*{Rb0`miU~8`BEegs+2qNAbKM30BQ}Vb=D#KwNnK*0}xh{)rK?H -X(zhHWmDeTR6U&XMf}sM}XCQzIStw>f5ByB|+$1qPIPEZ(Q(c#D_!Grj>esNX7VscD-ui54~yFUK}L~ -3%n;T8VB>yT@D)t$5@t){Hdzo%WFPXd!^kgJJ;R@*max-nEuM#{Iq=Wu6pw;(VOI(=nb^eJPlr3Fn?p -m$Jben{h{6~Jj303y{mttda;3vX$KvufZixUN_0$99<9mI>H(Q|2F<`>=4MP)-Q#*>Oxre{=w-^ugWk -cUT;MP-PFZq-w9ce$89#RL(`8Vkc(bK6QTi8idt0Ph -%#Zsy@BJ6whr64ZgkVc1?YZV!bInyY8*FX0qL_3+L~NZfizhP)^}}wZwGHZ}S^cDTw2o{N -tk}GaxN~GpkU~^_h}>PXCJ>KygW!}B8TM@0t|pq_%-g+=rcx9fQoD;+LtO1g*>*}sEwsq{u$j$zu)}0-|OPrwtjf~;rl -kn&kp!#X#BYIn_?=CvnT`D{im}UacnWU$6-;F3O=1?sSG4pO0y0f6_0q*x=5uDh?9^loZDFvbGa -n!TheIGqLReU37iSnOTBbCT3%N((73iP2&!jjMd2s~nKZLy@ENt-)X{Z9ra99RLmu^TnmXTasW|(Ds6 -#);x;{}_d#le -XWn{mpBF1=4ReL_kd6*!elcB(VG{+8z;9p@`^|Oj?Z%JW${(-z{RNTVx#C~--Xq^N-#hy(UdKe*(MmT -f?9Pf-m^-M-sBcq( -oty28y6xV3@8emRzMox)d^NlPUJ>*-e*M6aTZ!B; -99m@+ceQNB6;5f{_=8eX;@&RG!$URK*&-FWUi!tq7HO*Rzo_Kb3y4?|LQv!=0cMxDBhr^aqhgC||poJA2g)TrCYya1(#I_@If^WYZcY_%eZ#c{G -Q+;c%FD&7)%LS5&3rDiFZH&w -PDP2}8^>hy)8T-UR*>0Zx%Ii`LSC-?O+O#*Z0@4oHb0z|>uH0N4?xYRx}N0UlW%a-yf21}k`YX{+ewpflsH4X!-o9vs%8373cpf?Qp6QBWvgejuB$DQQFeu)vA%YN(Cw -{zBNp>r8y?wou}zunZkg9xaxw4oFb%|!*^9^MEJjs)u8){XQHb8u&KNiQ(T%!`+MMrFRR~Jl-UpAhP~ -~_o&C4}9Wm^wR?P0%<8%l65qP9Lnw%V2}8WS-933 -)pYN%*O_C#YteVyA&N_dUBcEN~u@9ip8EiU^h=ZO?;vWRyW`6Z?F3{qF8C`i07?_|>AE^dPw+j`rUz*_9K;UX@Bsf>6uhDSh8h -)F;7qzcEiE7pQq$h?M3vU{PI#6~_~57c#yP~DZzIcUIga$+z#ao03SYaNv|o7#MHL< -YPH2gD+j~tD9WN#%qnP(^!qy-mbrcUnwH(<>oxaD{`jSqu8#*U|3zY!K&Nn=e2k^K9 -eM(V1^DhGAPWs;VC3z2?;&c(9f;fPy#mMq{(tf1Z7hp3WZcOw~Q|1Aftq{h;fLL1 -P+sq -I-hYwP!QqK7yPJa;Vo`2w!1N?Q$K)RlhTR=%MCiHy(b@ih?rRuCe*o$&l0w0)^x^*9S-3mA*=w8mN!v -W&M9j!QTHhkK4e7;xNzqtAP%!l0@*5AtPqNB&Gty3SY7zXi~*1s?b2+b -s&4s5bh=5q10$8qECNe^ogGuXGTF9}b3nBv#G6boIl8fDSw}2d~dnSGhjYDp;OIk$2|1`});ZgjWdXF -5jy6p~dw_3~~{KwV)2N{knu2zvZV*EUNAecR;*t*nEAek)jQ+mrSBD($3>8cT^woTBscNm3A*#BPzo#8BNv -dEuY9SrC-7@mM-cm@!7)0ANdWT#=?jt8hu$iVe(Sx>>Ou)(%P^S9I{jCeJ!5yU03+{6e$FgnHw{Gj)b -V&#dtZcJ!Df)tgP1{|hd??k3=EC8dOU*?IMM+%Q7mM+}bbmDi2RB!v_>a -EX2x;j>saGG&{WA5>da!Cu=~=d#$>pac0}&Tez-sU*{!3}sPjjOn{y@HIf -j2Dbb*Bp_Hxg|>HTbMVSBYF38ryxJ4H3sL*$@y8b(3{Gx_5y|Zx`-HlWm=51KzDp=luG3tdc&|UmS?+ -w5Lg*<)+xOp5q)6_PXCY0y3Xyf#q3w676}viPXpQJ`#9Q#9T&|cW=XtRC=|G?e>x$Wu5FZJpv&v6G~c -gl`3X;3P^g5qmEx^I;=d(NoVGL+^XlioWs1m|^1y`Qb;wq -HF#+_OANK5=ZVI`9|?(!nGD}I0MUxJ_d70x!fbV0SYq&z|=Fw;M2h`nhIk?l4|f@r%nu`9iFqdteOpX -ibY8>I4jif2hlpn;4;hEcM=Dl5+7+w=1oinxljkLp6kax+mg$zrQ}UhEpxlDppy3%Vj4yYvGX-yOCA5 -JKnfw|oD$?=hJ97+0 -VjNv~4_mG6`x^NZ;3NyzT3v;_5>R_k_+@%myueL6|48qe`)sVw`&xF`irbXfxu%)3TLL1P=K$Qx!_hP)eins7`c6%}0K3CGAHc3zcmJHAf& -FF^w<~3Un*KZc9=59SSiHdvDb4|S6$xQocYg!e;24k(U{i_rs|g^Kzjpq4L+Q%m8Merh7yK$e==}u6( -Ga_lFZ_N!NFX+F@|Q86sJ*j@xa99L4en`{T|+S56AcDjHS+bczfyheXDaD_c^Qc~O`AoR{yN7w5O$y=97>>e=d -2glj}dqwGFzj*^+FyrP2baAWW6ZDp1>d3|3$U$MHvWMX|Io+;TVZ2iPVe*MExkpgV{VZV_; -uyJ{^hyLFggoOehhMb;`aneDv9RNSuM5)j`PLsbw2G?vSM95Ads!`gij~!QlD&(!Zp^XHGg%)VZHY64 -in5HIEi7yF;?-3+r_tY?rGC$*0H@!V)qF-2gJ5%P-lBG_ZzIgQ}`v8hr~a=s26`t%aWE)yZmpsfBt+! -BtF@Aza>Xtw;V2U+WsM3hD!@>S$`0*|6~yOuUX5lLE>8j2%G_NB2@5FG|gf-$FV3yL2#gP25>)s8zjS -gN&&&nibZf<1lV8M@LwDWnG*?JMPXBAwir8*5zLgrhM3Q-OEV1a)Ng~T!O37+mw?{f&{l2fbOGm}-a1 -$)$Oz*QrdR0*oc<>$0YxZ_Wh(VHHamfQ6f6duJ&R$P4-V4CmOjn|ibP;dF@~0F;Qu!_HgI|NO>#^@V1 -hu#z=IR;bmCu*rQAXaIDL$zG<{w@cW8K{8yl^=V7FVR=IUn@u=!qb`fH@P8{!92WXLD%1d3;I@bfi(3 -37N29x)DX{{&(n!hlUa|HlyXu2B9xh?(CY2A~OQEZFvzEk+gxIG93)E^vQB%=bd$Pay`b8u@@2J0Cai -5HoQOEzY4}Wk=obQh4&Un`CYZQ;WovbC)e$66&FkfOuzg#UvQkAvb72G --E?}{hx^nEqb+4gMBWH?;5iOd&!G(Hpt=IGiLtizxs>q?XQCXyckdV^<=9rBuK -g0r$(6#BPd0Ef51IgM2P5N?^RelCX6autE?opl_AhcnJkk*k=oa4h-5ta2(WsVvD0x^fRAVxTFYLv;q -oCEQYZmx`>0AFYXWU!6{TiF&xwoWs3m>w#>Z(cX1I^%3_NfI~-j}FVn9u$alfLH2q8F*}#~h{FohSf_ -)mb`8!VzOtXra{I-$*ILj56{irA+*jlrqdHBma?zmxJC5_i3biA}ljLzLp69c -Rm;ElhBHd=!MdB-?IZV2QI%}gBO9N-zbZgHSX-@w|n)S!Qi{^KO7X>%lyNTsy?X`WPQkabb;M6PGJ-Y -^fR}oQsd+y-D5|78cp_-zh+MX9icQK)N{qP7cdO2#8=2*}2WmlutZ9H+o7 -P$;h`g7>+U%6+49sT_gf0D+JbG+@&`?MSHP4y>N{O%FI3pM|XE$tnJ{^qj2!68`2q!>7>7-dO{#W;XM -G{I0fO_C^qF*wbB?l%r0Ct3UjF-QQ(Wbt(%p*#qtD={eh!N_GK74{f@ZKV$wW|s3iF#k)g2KKuK<2vOA-~1SYF0uB`I83x_AK5ONunfpr8n#6fB1>&JBR!GK= -dFKrir@Lt(2$v}kGpfI+LqUvt|Y3S4RR1BXnZkpoc$WKEW&W~k(%QM4blNME?^;C#YuXWsq5qAOJWT$ -ia+9~AD-ff+kQo&pbco_-l$^}ZJ$g0n?{t+Fwk`*?Vl3eED@v~77D^7g5u6uzu~$5DF;SABf%3c6X!-2_WSO -FO*X0h(;OPVmr}z1wjm&s^T1MrDy)H%N(LtIG=ki8|i|X^#yXzRB-c+a(<-KC7JB}XP -bY6JpujQZfPhQ|%IlQZ*kRRkxKTPA2RYOHpQEXMHM-)cc5WpMxOe@Jd!j-3k2$op89Wc_&9a+;l{ojdk-&A9m*8pN9V*;e*t?3X>1B+~N7dZ#7~wXq1FoqFeZ<) -oa5U%LwH!TZ8r->X&ql1e#E4)}4dhbwM8JgYsYY_oZ;kTx|ZJr0Gd8-!A$iP%o9y>OmF+O7c>M$eZOWSOu+hc9HwKbTLoCy1v-gDMaaZFfbe&xfjkJB{^xmxB -Si*a|qzu6@r%=x*Gvj+G5q)-a#VoqtV8itPzYiT`Vo}Qz_AOyM^XIrw~90-IlaM90XlB!ncT6~11`8P -8EAHl)9U(>OVu9x_C7%TY?0vP5$99#V_xXvE}t$(n_ucI!Sz(@j4JR@0*A}ExmX^Oxwj-@CR15p@FqA -2yLStAj`Q7Gx+pq0I`|8SX#mMvNT3`RfLLZ)&2U*zW%1#nNY3{n9h5Su~gDguK68=Jt+A})b3R=g;}@ -dSE4#@xS%42rynpUwZIxy34E8OR31rU)hw;$>JiM!@<9h_0ZPjD`gUaBXr?v(bw+3BkcM1{}>zE{bvr -W*+cmh7DK*oQ(ZzwRZvQ&g1hV>e`XgN+-vIo^yII>G#S{+x8Ro|N4G-=HHFDV8Dg^lZXqj<&Q`W`CAd -!=`@<-mxybgz7E?2DOxPR_!&@V%&(`1|N5%B@E5@Z0;7o~ewja7rr=m@>@5QOGG2SmN5hfHxAEF1$}8 -VqK=}G0|B)B)>!HAu`csJTL!cbKxcUwEDFob)%>^oVSuE#(G!QU-6RCR8ysPG_$6 -v=j5SQRgLJ?!y2$Dn%MITjYwl{yV_$`c#vGOp_~kMuDQ*`GRjeX940OkdxQK5T8(cyp9}N679jo_n(p -7)m_4mcN1K-9><(h9!y+M)Z%GsXCk5lw?AJpsS@K6@%%KZ?hvgZ>T5HQ2jy@^4eGKWQq -kMLT)p5f48j4=G&ygq+@I*g?KcZeZcO`=rDUVSMfv?$%Uwy^wWfjfX&F+68L?)d59?1CI}zQfVuTcbM ->}9Yy0VS%hcDSND0j%h9ggzC~ZIQ-GjTR+Yaqz{%=4!fU?~^UPd+CUVr?zH!xD~*W|zdq5Qx9M;G4y{ -r_qI{r~EQfB!#kFbDB|_%`bnV06AYpt^*~zyIGAIL)Vp_W%AJO#fG3`yG1!&UL>{v{NLB!||dRjeRQR -iYb^o2bh;-Fl7#bY_U6l%55BKr~pg?U?O6e?_k-_b=ovkX91L?7OcdUQ=;UO1n1!3G-$f8RPGZL<{7} -%I0jB;;C^OJ3E&nwB!{s1He80HWhlgH3WeuNQK%|U@C8y+=z@%KP+kBv*cdDbz!~2x)RxmUToZ@GHZT -CPBn^}N+%Nr)Wd$ZOh7T#1YMx39T4U_Kk&b!6)c6_SN<)Xke)`Dfu86Xw?id%)=d-I -k}p$J^Y-19Vr)1oB}}HIBWjD*ebj=8?wGq&*bT?b?K%QjN^M(Z%A^qBZhfwcak?m2V|*ejHn;c2P&=% -C}(xN}t;N{oM!C!nrmOtK4cm3rT*sYV`#f^XY94!f8B6`t;UI3~z((%wKK;$cQ|?8;)Qrr|G?k6wXEv -AdC -2knD@(-ew#tgNKEJwO$PI;w-9xV -k$E9XAot`#Xf!Nz+ZU-x6F8(PUpje}ejHq4Z+8)o5Hh#7vHxXoaMf%uSK(%M~{q)GUgx=Ww#xYi#2?9 -&kw@6|}R#&gol2p{m}S|-QmnJG5-@y2*2d*78C13#{mhqP{YC5O=ZmT&ebLy5jI`3Itd9cIoj@V#crvm^YmlC;*Yj@i+B| -_mTfP)I|>4unYX{L!HW_PVl#m5d@jqsqlcT1k6X1C@qRB}M}e77YurFi+)BbI|L2AHZMSBM(R&6Xdos -m*6l7fp(}1d3;i6at5)CS)Zn15X(Sj)+PP=u7Wg>gGalOiYeaCs)q^UINJ7tq+kIUWZLccqlg4ijj8W -)k3$X?@}UTj+Bb+T5*&N#@Gu@6h8Ida?N`bc{p&03|c0!*>@&xmwOLzhM@AhWGCi%0|(>$$k;&HY_+q -~kzf>v>RTet^%o*kG{Av?DLHKv*H -cAG>)AGL#3L)Zvu%hBO!x372M%m>;2-s8x*RLSkorQA)+EHO-{gTJpLvrht#KY5Rxu?${p*u_qp?HbAM8`>XlPbR!2&?WLZK -U+S(Gf6Md;#ENy46Dz<@~{;w1Zd!5ctexcECW5OSe-EoPv;8BXhFppQkom?{C*3IQ^L(48zi82j0%C0 -MSA7c&hKt_R>S5y9#O89{)BEzcwj831BK7fgC-zDAcJODXJqj)+Cfw-|8%y38zQ(qLr~4GR`@_Dhe<7 -c6))A0j%L-(0-%he?32uporr+eaggB&UWjzI#BrC&DWHvzZ5~`-16j_!Us09(?T$yB)XYyZPkC0l-*5 -m2efD^&G${__}F*kE#NX{9dN@`m@8yc96T0fmFO?O9U0+s- -4K4Y{L^x8U{cl9D-5vc5Yvn3f+_GH9=!=V&Mm#~lVl{$;9A(;6l- -LDh3x!T9#kdB5X9G{}^Cp{|-GV(AolRKNM2Vk+{aT{%t9p3O}eY~D%|8lvej6OE&oESTm#>$f84&26& -(qMB@bZA6{P*!v!HiAox>-)jLgZ)c6p0m>>!W%^{f?UDQufPlI$1K7IWm5Bfx!B#q&ACW#;Tk}TDtR) -Q*o_$_aq<(RDYDvpl-kZ$iajTy*DY%U&Z=3>AM%B3liZRiXW)#Fn~RS*k=Vs2>%r|8{rWij{HaV -iaubTAh0&`H~%WO~@$4R?sh9Gn-iGv<+tK8{1?bI6lRfYJI$>b%uE$9E()2P -Qz3t%hKg7lJ2SPeD&5^at=By8dxn_i$skz48c6T+Oi(WJr_(|i}vgORr~wrDPP?;xnCYCW*^dsKqvha -v!@4m_EqWld3I(s7k{1w2EU^y(;s8%-4G=Y;xP}*Z>T@=rv^cI3mo{ESs0*GLTY2Mi{kJ_2lyAFhmC -SK?y;-+w@a6)?f#OZrP;Cmy=>m;2=ZNX890e}H&2h-_OTW6tI(54=C^aju%qsZu3#}QoZD!}u$iX#^-xY$t;{;ZS#*M4E$}7`xr4$ek4+2xfs$xC;WsKE6@_xP?RAyg)@8pxR5cRGdHSp`wveh~j6 -EZQPa;vpI1oMT_2kAXqWB!Eb9P+Ce0$ZZambbaT!p3N%(v@MA$zQA?2c_+^1*v$NE2rlM8Sy|gWn{fk -i~s_*p3@94)+g}s!pawTyO_$ov+v+h?OEDJ|h4|cIr~{84u(68MvpJn=5m&^QV5kN0-*DRu1dFHg{J) -x~~6-x+vJ2!@+*0TOvSSoyE@u{Bb((?aB}r(s36>3qZKlu^4ayNo7>I#2frrPxjKX9Ib}uckz8zl*>edzKvp`cf^i& -SY%O+Xiy=8H6af@5s*kePUs3EfrR3WhWORffy1+ERR_IGPhLqEB|A7Mq0J@1}OWn-tH_YgKM -!WIwG6yRtcwkY(;2}+Db8;Hxw;K4{QI@%b+rfR+_5&P&^fr1oT}i-0dw99=9`6m(%GoSJH7@D{~ -t)IiZVBft%PDK_+Gy`PF=1wG2h!_pGa1EN_}iIfZs+f={sQOUOBvx-epCz}|9NXM+B8x))>FcE;Tu?z -^Nr*}GkctCCt=BH#7c=XmnxMn!|V-D`!1*z5{#oRx9uVwpdHkxg?jL|l;ZeGw4?h|m=@A~t;R_MYftyjPX_Ly!O>hqy=nyt5sATpokBD`bM -gj%SDO?qZ*BegF1R9(W5ls--mWqGlv~aitI5LUBF9X|dV+34H=KSikb^lfM_2;GSsKc(}0eBK_AFMZg -UMJa`9|ea0==19aQf`&T6K;d@L3egEKFU9x*Yd#DbT-+Ax{CcQ@Fr(SLfiUQJPH1puEDX#M*KR%khAX -$226(YY*V|K#{H1gWkcy=>KgEnZeyP>0YrOd~^TQl-Q(YKB6kAt$V)|<;3^Wtd8`H-lq>cJS)Dt4wPB -Fh@jb%(IMO<@(xe4`Ay<1z&49@i$3vA3$bMf+^dIW;FW_DV1pU!?A@gF24)<8h6M0>C;<*rqdG9xvj9 -5IHaBo6dB_@s&9MdW_oQ`9nmJ>L6~t6ZrK`3ct1LzS_M~0g*4UbDqQ^X=!kh>^aWYf~P$H&?oIhJn3u -gdYAl!^M?z1UJnWmMPs{hZDPYo%auKHR1YhCwK8V+VfJcqTA9zlm}H&|7}2_=BIj0WDJn)W-u6_O|2| -l5`o8%$dkb)ox8H|+bZrVCufDWZ+E#u09d!QQBi@1Z%h6xsD93RaixDXM8J>pW;(wOF7V(T-+Pg#8kQ -Xtq4v#NlNP004C8&Qp>2(J_G~hlu?b%l*tBG=}wtl -!O0+v%~ZV0d@PZpTZ(;`gpKWbyx5Yi)YzHzT|iz5Nr0$#o`MFkp1_qRuEoSrhQ4y0v -DBrjyl;bep&5sRHIF9oWgT4*uM32#Nc#3qNu=<*!}Vp1kzw%dYc>s#2$i+LUfs9-h0$o?erCO*?T&8kdIz+z4x{R)!D_{WY`pg<)Ud;$EJe`rR7G2n+JHah%MeN3akpBN=qXM&*K9ml=zJa4gXa*TlgRGg$ezb3&{Il -|bJ;i|$0%2hojPA*!hhv!(ZsW;qmH?L*ZW~`?_2#qjZXJSUsC8irjCr7eMvmpmai@t+3pa0nqBV_L{c -n0DNizQYZ4=7_KVfZLFB^`ghuN9XGUr;Eb`t#2YkO@3MsH6XP#8?0_B3HFc<6sJbC7idBT4sBh*FkVb -Ub+uJJrLXJ86fUgY_B1Yb3sPhjJm>hqx~G`uSFzA2#a{%90>_%+F;3gOj}4|Ad5H3L2Xd^P#R6e@TCx -VXcMC_KRoe?I+qVibW7T&@i605^2JTEP{7E1urIYVa$c!xcpE0xHVy;ECmyht{mfa$pXY1|AsX@XRe- ->avm$t_0i<4s784Q4W?4z9wHz1Xs44ARL7mj_LmD#SxUk{Rjg<6hZ86Z=XPb{A2uL$L(8qlp%s>j(W- -GcY)3|-4DMDKIZU6T?3nYE_(tFLIsiiCUJo%Jm7>?T2gvFs4crSx3Pc3*8_dVSBCKRyVpk(>fK%mRNHr6#+Z_c{sGxOc$yK-Nu4M!o`FvVJ8B --PaKBn4N7pc;)L-&F4Ik!@9ajoWtJ&#Qe(8#|g|bvPPTb_X`X(Zdw-Y0=ge -s=WOC%9WD-2%p@=eYErL(uM0l?hmi~^VJ@z!g$b6~Ku{rcw7~%*{=B*Z^%5a869?>{U1E#`hpJUOLIx0ufR -F+3>FW -9y&tmVy#O6m2zw8^byzi90i{u+}oUe|UKAW&F(6-%N&pN%%j6GQxc&ZFDwyW5Dn_seIeN?p84o|h8+6 -q(3e0bC!Wq|}f8J+EYePAwESUd9l)YoqKF5YvJJs7< -Z+FGJmF&wOH`0$4|1Sl93Hb~*roVs82L~2>qOZmm(-Oz8QUZn7c!U*BcA-$YsHsjz -vy}o_)QA(*7oVjf;wAW76Ofz=&-01|uJTCVu_}4Sz9jlejshMW< -~_9=99x?r#_@z6!|wVhD*;xR-H7?dtTR^Cp2m#vMAv1*xyjsbdX=oQvQy8&Rbt-za6|bRjL|qqt2rEg -~0A<@wj)yDV^ -`t;tP-|>8)VZv8v~>?=2D@CHm<+QMS4h&8@O*MJX}*BIhUkLu^$>V}2R7_9?wfQGn!~+ZOvE -m2z(y_V4TX|NJx`Rs0`M@ykpxoLafa%~Bld&cL?IqADS@4LFL)dB^^Jy-|6nxzl}cbMzcz1X<(EJE{ -gBTrW&RX|e>j~>GC;Jz+hcLjfCauyZ!;j9jq$$qJoYB}5j1WwvgK -m9i$XX76W@l@n#htRe;rN|;XxvNtT+_GRs-il -ZH#X%gMWIvDw-YW!ulD%bzAmpqaSkqGB!H}}cfJ3pRexTsiNJW~bbqQsz7Iyq(uC|x7a#ER}hrR*7W6@tg*K)_ -71bX7M)3>gHqN{aV2KKx#P$sje`8p0QWb%#NQGWTd_C@LA`q>p7v5>VYnwuR9z+~uW^|=GTZ$+O(<0l -RV^V|P24HmOUiS^V7!ry! -~gj5)8X_#j$8dZ9QxIK1Df|ZP?2ynb -HB21;S&1@5Az%S^fiFxYqoMYUW?@PdD$NLJngTEhW8ow{YEfac3s|r}>qv(d-iv$@qZu3x6pT>mcw@A3|>3_X({iTOrR+pHr -Hz23sKfIPT5UUa{n>SJKj8dEQ1mAl@oKbp~C(k@!P!FT~CfrYFlfX -800Jj=d|c0pEv1aeU@fZONpoBNxSEP=qi~h5>J2hM}Lj&mAofXA~jaFhoK%G$QSB}s7+bZxotNkYW1! -n9{qGQd~ZnIXT0u{!}+l}n(J3{c;Z+264ZUF8yHm{Fy(T+p7<@&p>`q@W-~s|jb3=Zyua)w)6O)X%PG -^3YIa4XAlkY|$DjeNQ%Hspy9)g>B;-3Xr2&r%pfj^5H@07FSOxw-$9 -Ly7vrSYp5RxFk&hrwgde0e)d4_7?2F@Nl<+Ml$i$SK?PbV=GSVRmy9T!-PVJ+{4!opl7aGn|m~s1+Td -NcY4ocvkEkW>({-S -T6VXvwFkDicsi+Cp&*!nK#s~LW#k|d|PI8zc0Y9GFF^Q&lGe<{RJIkj^k-R=%D^JJ2(yQj^@4RT--!p -8B8Sm+4;aQ5pW9E;@r}k{$=OMS@OxkT@N6|T^)#vqi5-4JSb+(iFDWNRBlaN1}W3hd8o32add-yzYrg -n>Q*Ju=eL@a(ukLH2|g3XzygxrEjZr+gOaW{U|V3x~YcdZv7T&zH3J0Ot_wVc;7!m(Rib66}=;CplkR -IdEV5Jos?{IKIY`{e00l9}TzC)WzsJ@ZiOj@6ZUJ~ZPcyL-8-mJ0%Zvvvwnf@t97-j$<{Oc7M%JF7})c#__lnS&t?!yZrG)F9-!W_KF3fm8%iqDb4=pL7<)5N -vy1WZc^ldJ1;wnnq`iUPzVbfcS!9(KEkM&{@1nn{~& -fJ!j{j*>`XS;wPst$6%n-GKmG#{zsa9$adeR!`HEO%i!&F!#qvCR_2&QPh&=Wy(C99>COV&z%YuC{Zoxj~UWe!C~|v-bDD*P{OI9JBv~vw -ht%-~RoU`R`izP=EdM`8oJz) -C9skXqFCtcM=W*rW#Af!G{KeP7-k?s0(#1WM}Z%+CD_eE*h~P;mIydV=2u>MN0{6WPaxWUSw`Gu9N>D -=<4K~jy_OsD)2Q(LeQNo)8oiwu1a0pwvDDICjr`O0>bJ%2PX`RGl!H+xCIR?0;9hrRNYp*l0eH -JnzgiXs&9GOwH(+79{dD(N=^QGKtz*GtSHXkixy15ft-UbKVjY-08DdKeamln}6ZrnOy_41=z8 -{G33cDNR4%ndg@Twg53;3iy2(c}H5RE~P;bFWYyU((L-X(2!2tSaz=@H#y!MG>l(C~M>7wcA-EkGgf+ -Q)(8U=_;by<{nc3#PChggV(#LVwY`YmyaqtDI;;Z-mGG0;twm?R@J5P>YI0tO3qoIyucUm`xc$4^E2K -cxON&bZgce|?1oi^n|Rf_%3NJUlZRf{;GUO<>!9fWAV)ilG8hA(|8 -Czeya`sR&29{WLIedekdt2d>5|*h%MEdPV9?Yu;9<=YjzjW?E9?Q+O)+n@9ZwHjkIVh^X1^T@9$6E9` -H}^?@!(y@K5jWPu?C7+5f^z>Re;_LC@RhB_XFIHOBD*6cJG=*1RO-G9g>8fzv{W7MHfI -4Vhgs(GA@EbYIjzkoY(Q5Eb1h>(GCyn-O|jFp;f6I9-4Y@fXF(-%vvGWb_bMEmR%$iQQ@ziAyhfy-f{4 --@n(Jxy5DgTLM?%)t4nQOS`Ss0^so)qzDwq6eHKdA56=Ud=K}<6|R{9IC%A!*ei>Skjhe7RTMd@ySg- -oVA+7qAr#SAc}?*D-EX$p5e(i?sRq{o|)lbs{k(of9OF*jLL*PiuD4jhk~@OkDF{yNsT2PN#a1i21)l^f+EM#YO%)`5=xyWT+R@8kM1!$>dE<;ET@AgW}rj2`tf+hEZQf?5I`;!B5lNpTOnj|)J5wf;vN -SUvZ9yeR4Wy|2CiV=g7q;bXl_3V$d9(!PPRwoGu{J7O^3}F2D5&E+;}J>%V1jW@Y?u=aSsQ|LgcztGNHm^3&2^9^u9}_AK+)GucO(KK^-QzQw3;%xn?@Ebbn8HYkCJ7v;DH?_#oQ6phf}o8Kp#+M(nb1%BcA}j{?1UlMw@!V3-z6pAMkISi -8G0K-C;Ja?ACaHe_q;uvceN3ENAumNIez;^k-MrFh3(8`J4nVmlM3LS#cb5(T_pUgI%8tzGtgUuoWOU -16!=|!1ch&FlW?~hfx|t?y_-`Jd)9onfqqkWmFjsq~ -A+@Cu29QRCu7KXm=icW7bY2Xu6tZ!JbLEiv7>^igvO5WMjhmh;`Y_P1|gbo0t!;}IL+6{%t2wweo+#y ->w7?5>^#f1LDS)d1;V(KBA$zP8wNMBAPmle%@>{_K35WHh|_%iZDUDGUCA*Nf(mbrsV1IC7gHAy9XTf?rLhB#8aJI`7 -q4qo)g0W{B!Ve>>d^PMBgEGOadPJz%%dNs3kx`YA;CpWMUEqrk~K`u}1QG1llgSqloVk&JwJ>-0TAlA -bLiJpU=BmvoTAe$0M-Dx0t&y&uw?i#b)hg;6~>nT62!WiRrvXMF$Jpy=tukH;ceQ|!O&)8CC@{}6pw0hCghnbM{?o-8q(wWKukK!dGQ3=>)`RKrh|MUhX&%M3nI)W7UwoW( -AR3#Ms?kuN>kA10(x2t420m3y9~L!*ha~T>q`2;u~fkRA!sEG3i$m(bmwdFy+`CX_znDS8~6J@-os$3 -X9rGRroE8f)q4uSweR{_AIe|kZnyE-!;LI$7t!d*R%@^`A*t&n6!My*s9u0qap3&(ct}sBN$~I^!U~$ -J9h`FUNW`MiXSP69TD@Cz@Vl~B86 -H;PHu*zX;tS^B(f$c>f(TjASvzCh-wC+Lf5*vfor=xJelh^IfJwD23;Fs?@p!0YCaK8Q5S9K2){n4c3 -zZu|*%f`>o_!b~B3dKnXMK<<}(Z)E0MQ37vb-qyUl -PTyxTzAaQn9KyO?!@;f-u>F#4fyvU@oD{~_PBoJ8IoKlFZZn-d!R787rKn@I7cmsMq%_kXN>&1~-Uw^ -evo|CwxlqiZbokrw1;?PenLc(26n+X5q5(AixZ(aE)W@1Xk(E?g0H0itAqsPCAFeev%gWL%s-9+Uk>K%h6K!X{NigB9RrDe+}-(`f}$_lAC~s1?-lsc-1_ZX$iFteZV3IuYu}?2@Q<`p -o64wRakfq$;&@|H(ifJ;BR&{cL&$3e -Zq$%n~8!6%>=PSF;y0aj=KL6Z;E9H?Je7;osL8v4jMrxsk8b)<36 -0ZgYN%al~lOuq|WdWn}e_rM3H -?`B9KBt;h5cSkH&`}8rKxU)Ff12qtUnlRVXKMO6IEZ=(%j_4(rlh4eV0fwuP0_Z&pBN>I0_k^2i%k!I -p9KOs`5?GSah(!w%49ia0MfD=YZ(d0C`bD>HSr2(s_50SyXd>L_*qJ&~h&h7iT@OtLMSnAf6e?Zf5>x -ICTwc{S3|Kify-M}I}}*BzyB-%%1DZRI!ZGl_S%NWc7xlf}On0@*kdL{L9gD*a!K^QDUEza8T{foKRL -5fVda64^~AQHuJh2M3A1eTK1JBOwm=oh={Tx3YX<-ye$KCAcB=E+B$7MEm*v)?1HiqgiOOpSuyg;B7= -4Ub+R= -1F;cXu1dp8S(_Mi6-Qf$|O-fc9Y|HQu)Wst;u-90Q{DxMs0BFS-BEb*shg_H9Q2?BN&WL~w|$XVud*7 -EG^h7R=NyJqI?%2(gJG36gd7G4upa0Y}&W%R1++b3~%zA&It+87d|<@Z(R8RX1=NyftOOee2xfOdVGT -Uc8){uecoj#(0KI3JkBvxZ-1si!SOEyO -*rNIQVY20f(_7=|yRCsZIzShKx#X`C?pGk5E#7Fji`!MKZ!MjV9X4&5HEW`e|Nnv?iF6^=y^{XoA -UqLN>)=r-KzM-4wu{-u7jxeo|IcT>G85*AaUsoMilz;i;ymq>#BZpaqeUk8QddUb=N!-Du`Egr{0O@` -?h(8q%foMdWtucN&fr>Ym#Q_v)&K{>KgfhSrW>3Vs*_~|(pmz -Y-=kwa$FJb>vz8lBV`*HVWSob8{WdvwokL08u;yqbLlL)m;_9?mrb&er89K~^rtP6#UUG<6N`>OK8qVl1Hy|=5bZ1|lhSI!#80%IKJqjT3Y*b&%UbUo&y2l(A-ySMPB?8r# -i-cUO*62(O6$8nuu&`+;td*|+bV#{|g@Vhx!5|~{IYzuE0jbUbn4}Vdoy)C?KL_aSTgod~6*GRysqPi -LL8l&c(ow}61T1$V+`LWa@6r6c=#^Jsw^ZO#5mr|>f8wOd(#0sxeEoi{6aH^uu{Xx69PtYq)x7Eb#G) -^DmK|$ORobT6}!{_Ym!iU4FFiE)3+7VIi))jgY>a||%i^x*XwFX!+sfiWa5CjwF4L=3kQ-X$%M%HLsXy_h?^O+sl{{Fe8ZMSx -+49KMumIFQ@OFwNN{Q*Hde%wZWka2`wl9ZBA@iAbW@U@k%>yl~inCj~NWxs4#+0!y&=D^HE4CMuP`l1 -qnNzm0c~vZ*okdYz4!vsTcqc6k$$Jefn1?2IW-~G(-`zO|dbC+HhyWUm5%E%x^r+LcHwm-g>Nr`151f -3#=*+_qGYNr#%FREJPQFuCj0EP0~8Qik^tFRyi#edtV`U}xE$BZ$>vYoS -vx$!6)+$!71y;T@?i>Jem*#jddobSR!`I-FV^fKNqdx$k+&FK8kz^LG6S3Rh${vaei3TybWxD&ABUXs8rMzyzr$zs*ZKd*o}gcZzpVew{J5|152t+&7{8wKea4@}2^1o5jD}E -(MlcwsaU3NGilAv2gSNQvr$z8v=odhHcAvuc5G?ZdZTh`X9ou6=l-}bhB-!IEg8UEp^N?_Rouu}ybOh -g9xnOGFWykzIQ@?i!!|y!BTQ`di_iP7@?{!Qu{l(_(@3w6C9?gZ}u6aVgL%;1B2ze*$-$hVchzh?Iy5 -Qg~i~i2UAnzZbxAGYF?%}21Jy_^lY-9^*BkZG|{(%U4sQrvAVv1E|de)R^~FQK|vg~7L3c-kS>q#a-z!XOrtRv;r1H -7jLy^_anW?n`E{%ng*kDhe+K3#t;+M!v(7?)>7S>tNAk+N`Kf<8(#L*K>R544s7p-CV%(ZFsL&v;GnO -zOvQQI8K&|fP9hn_)U81n#D0Mt=Jq_v6pb_vPhJ2NH(D9iKI#CK>M8^bFx{9tM<=V`(;td%5^QqD<-F -dae(h-}azHt|h7w)07Quy9vuy79sJU?}R`(%&R0ty6V0Ilj2wEZxjk*6Y~L_$4&>=TJf6VLNEAaKA+7sLLv5ano|oxlhWS@ud!kn~D -MVbK9L*Zt@7Ru;UQ-pk3gM?Qa!PhM(`E)4X$x&Z=5cRmk}v20ROG~M}5tH&x?nZcn{AbaE>)YdPIew7 -mxHNwCL8%TH$5GF%CbMdGN&gU-|_`{cLPZsi)bKm&YF8i};=*H+K^{Q+ro718u&N?_*36Q9wfeQ1fd)Hg_)0vA$E;EvN>u8-IUFuaOcaUw;%wl$jB#dMaNkb -Uy3Sr~V2j%Ap^(Q{oy8I!uWLMJIG$-l5;C|q<<3xW&l!nLF)pM6P_uKOGk6t4RqH8`X-h)y=es@;{B2?*={24&!NRDo}?fWR*1!K9g@Z -sF}VuzV9NRE!2_Vvti(OWJNXNr=Ak!aq8+lIydMpUougW<#6WA*HC -j$btuTl0<-Ii7>g|!J&DDuiS#KY3-rltrkUU -+kGfn?|L~5=##&zk$}Nhtmp8IzEo>);QZ}F@oywnGrtPrw)^Xu{KY-1DsIF0V-MUkl+(Ja+oqY7)s;z$TDNnb>gxm2g+}ongEuh@1n10_^ZSrvEObBG?TZF{1)s*$$ -uhr4;S|e`FA373u`fCk2Nu3pKV0#b@{uTK)h!Yv3TDW+oIL&;C9PhfgsuwqT4@1=yy@#(Ox-@wd1d)p -r^~WN)biplm5^4r#FZh{uZNMZIRc6FFLA(?TW>oo|Cz3^;{>tqt_*@u0zDJnJ1ZxciX}}NrV9T_*Rw5 -?=D=1)kik*lR4*?6Hm5a?H1?n!A(su>^)jERxM9aKr_2Z`rLy*E3C1w{I`RBjuKBcQ-9uOlLh^`o%7g -zdI4FYtL?xTyf4zr&s$~cC)eAr&6{s0xJAng_^Y}6M$f)ExZy4KW9ss%Iof1=%E=-emG)#fZIhpu>>d#A8hBPk(Qv_wH-sLNMSh%^+aNyX_TFH3 -v7_2Unb^t;xSp6ry4K(k8*dkvlQPR3vF!;&E0&hIlli13BR6L7F0oLQ7ng525xl-rg(hQW5pm(w{wpQX`%w2ARfc!+&bE&oVS>cat+<#0;&b&EZ!|UT -Mz)oh_{EZpURzh7%&`wNXL14_Fb{cijqsF5#!~9L0|pA&V%01acgI?k1I97U% -dsnA$}Rz?G$X}GPU3^Z+Sp{t`Y9ipa!d)|WLmb<%j*kAQMep}QyTd<%CmSPMyAf~EZ-zL0ECfd_VT6| -`+MAC^s_LCJ6t>5a*HJhq;W%v*GO()kGe@lGmg_@KvS6@@%f~OGY+@~w=>=-z@dY|+UtX&$8tw|52WplBi%+mOHia>TBgcHc=*tODhVfF@VbDKPpygGzg_+x6LjY2kHfMs&IkT}L6xO}RiuINM+*$_;|lX{7Z~8j73SYAFu;#1%)eb=f -R7dC!EpwcBZUGssx%<^&pjG1#^?6h`=s;CvL~B?cea^(PABI3{@SDTrN8#Wqya6q_bm1s7F6&3qE9J{ -Unm=I7^yH;yU6hL(r}6+VNoTg1riHYbnOUdK{7X^e|#E<XX$_P@G{t*zLGN -BQ@FQ+-0w(UzDHd@|Vu<2{!nXW^%xH4z34HGaW3HsP6eF`@`FP>lXt!{M$Xe^clP5i{VGTS^d_^!kj? -_!{BM?CMz*A0>%>s9ieT;X3t@TBE>plPw9Lh+p^G#;48U~YA4q4bKC1}hvBpAj#-sj8JoM~}Pvo`dsE_@ifT28g>tnllq3CxLP5Zr*=E5#?Z|&w1%gZl~0el+CEJB!FNV -T=UBR1?H7<2eL>qK-7R`88jvttn0_)!^P(!9m~f>`$9#0QOSP-FFKxuluTiR7-f-7PS;2e^B-!KMI}S -XtQhq3&)Fmu9tKm_G~-uU%VclOuk0Q^h+*`LS$|J?}R*S-Df>hD{?a -16#_m?Tkn`Z0#_`)o65p%LP<#*i -DSGdE4d3ctKD;N0@nBEkCd6K#?QbmOS8+d#?p12rDA>Epc28B4d$rs)RhZZXT{aGYV7rbBiR`rmTa*v -IjjG9DzZvp&oTid}T6--7wO_T(FNk;k5&l*p)kL&CkhDo0|DBj9v@oOO4Sv|s`?9^)-6SH^3z -nD8?-I8ui^MS<>@3j(ZjcDbu^4rw8|R-#(n4;-(vOxNTg?`P*HS)AI6OIzn^-N~jJ-8=;Y%zw!ec`QT ->h@uO7NZD&AM-IWohHk=|Mj*F?5)PGY9aOE#M_RgXU&8)=$WN7=-9^0aP2+q^@>AA*m{3_VQ3S7`2&Tev~rS%M-?Cy4kBm|Hn)S3A0_k~l50rSd0&RyKZcd|pY<6 -#ILpHM>;s%!Mf_{2;XQt*Ufh~NYMIz7=Vuqa40xu^lDw27ZD*tDid+wbm${+J1RRN%7ar%8OCk-Oac- -DKZ_C&82l^aMv48UsOGblzjOGMyER4h!+vS&z|lbYLrgJ!P`W!x7by)H~M|8X&_#vc#jk)Qb_s*@bQa -LhAgB<~}+|B_C4(-loi&5mkVh>pW6sfnOe33Z|gY49{b4Aht!%^b>m0&vPTtN(M}xL|WUrl|zzdL2KZ -f>cLU0P?mKs1Yzo#sPiF0Q7h7UcZ)~v)RVr%4ty=^hVPy!uyVaxEXC!EZ%8V>c4<8?|E1Qb_HA7Rz_J -$3g|G0~k9NQ}Z9BjYbscOrcZOTevDinLnzQoJ)8wO@{%}6<-32d+?Oqn!ZseflzwcKuug*KA{>fC=J{ -NGdMe7aVam+JBuB9yLa9As4P#fvS1-6yvx`qpzZHvv@c;qMX?zo=^e4JR!!rRP!AKkGzN5Hf^gtS%0^ -i>En_KPf|WjK2{|8+3nZn3sn2!m#YlVW@pH^e{HB2VAM{_g_k9})@=4&V%4S))q>-=KW`7xDh*a3A<@ -Yw -(+)14J&lR}ApsPv`b#mfMrF8UkUR64Bx#DTSP=Fz4(Oa}@e^m -YFt&wz-n4WBVJ9Lq^g@NW_29o(S53yM!NaD&%3k`f3Rp&HoK#9IMvL7kU)FN5uh_JFA4kTZql`15+)N -VXRy{>?dXephGBF7hJ`pAODk@YV$+ZwMDx>)JRR4^Pij*>fBK6m&0il6LTeq-~bIMK@z0rzZ0+S?j6x -e)j5@t8cF3VfNbemkP+$FW%B#e2{+nJmpwhl{3k&P4l|Tr`#f{ApuOsZxXMnkop5IWEW>8Ni73u2ysJoL=)OC$n7y0@M*J=^$cB5k -+Rrm8HU+3zSh!QIw@V0vb8l*O+(NIBhl49#1rddgI_mb*L6M3A-cuFoB=8}OH`F7h>DYpv>Gph6GI -gmf4#hN1M-jnOV;4p8Gejf^W5yS|sR;6V-Ik+N7gVD;uzw!zKmX$WC|W)>nS2qZiNDIye0IN;p6@gFq -K%(Q@BUv7^@RZZ;V|D)fuE|pZ;>?W@1hR~vWNRIu^0SOZ)w5Zw&h*ju@_~$?RBA_OFv-b9#Q+j-c*8o -$TCp-&cPOM@6{r2yS6>^{w~)DkzE5KiS}DjzY@aPOGmJM+hM!)HhLWFG$N$l{HXK&(C{R$P4+Z$@^3PT#ikDq9y|f{Kt~KU1_tBxcI -kb3@YK98jR59N<9xy6ABSC3nXWja_0UyNdyQ^G@9=;RPm9^{vt#3mO}dgj3qk;3oGo96kA`~Y2L~+z$ -fXMQWo~|;BV-JMI#d`{9AcOCH0qV1e7 -hP{^jx75_ndv8>FzNh&NmIXx5qavLyXeyLLq#6Pb08j9E70UeO_g@GaQh -G$br5z7Zolhd0R20tJh*r<_H|NSS`9UxN{pz&~}kXAe#Ix+qil^yo@sszE0pHyS@?{Qz!E7iOlUpbmu -3l7^GQG3&1BD<2|;p+bw(jIhm50*j+ZKJ)aZIb3H>eEU`3px(t1kXc+~POzRMqb+1ZOF|HXP6&9OwOJ -m^o93>_q^`7Tb=!CDhjE=1z*Ew@KhvfW_dD4PWO&b>RUTCGxD6TR|CeZW!bjsUpEmeBch`C6ed0=Q9pTuO!GQ@NhxOE{X?$?vq% -cdRsUWC$pDsU>gpnS!xTFsnbjStl_rNaj?a8y6Z6KR@UH}^K#Es)CRwo2u`H+cwA_#=DN8S* -BV&r_9<3eo!P$-7eiMaZ8@qr$?$xL(|hBsi_6%L5KUvqCf4c-o_AIkRl4zozKqh0crTH5XwVY|f%lx&d -ut0K#{?|c}%WfR^WEW0GrTk4Lc_g0z>z7cpAzuV>dNux4yT>_TR6@Cr{Gkvnfwc!9z`9x?@Y$Mb{@w%o~u8DitYj=YP_4)$wE2Y7i`{>H=mO|r|Z{iHp -=)tzW!Ty1%AZWukcF!5xfFF;_Khw)p90z`V6nL9ZBN8Sycv-kzS>14)_v2Zv3*|-p^NYeS71R%;#{T{ -O+P3;THHE-u@15fe*Yz`^mUa^z%UN9+WOl%ZLZ#*z1Hci0Dci?dkjEbg`Y`;at$CTLtLz=^soj1!~n) -qE&9LBZ8Ci8p&g`pj?!dAc?q7y9=@ke^_gniQ_f8^zDsumBwVPhvQvoHG_fU**oB(HCTu28kQj^CFw1 -^*6s0;9-|GaEfw$ji&b^Ikdey@SGgA2d#CH8M-8 -kCTUXGggH|t~k8%!1>yF&U8w^ygHx&mPZGOqySYPoLAZ&j0{3a&n`W&u;gQiL8}a&Wf3mx3*pP)yiiy&$171E$xG56XLdohsONA38ue -h5)Acl-pZ61UGRCWkah5nkv`8PL!tG9Fc8Qo1!>QDajwVE!_Q|8~^VB{HJ687KveU-#6Ne(2{*Oh=AY9|G^tJ>D`b#e -(StqZ+Su=`6&`_D7#TfDtQ~PhP&q(gzYke8;Ik{F0DZL`?!481OC@c1ykRg6?IA*#?0*OFu3ofvSU~&DU~~^GHY7&q9q>0qNBo^g@3nXvi~l_mle?5dAO9A -KEB^mWB>vF<{-hUFevic8SlRr0R0jTu^?pHRFa0Gd1OLQ&{{)qRZ(;f8sN7BG&spJB`5u*#>jFgE``j -MZzh=aLrbeMV+PO1cphG_B0P{*1JU_(qd|VIeic_h8Kn-y2(o15msE^*UJ6$06(<8W*6O*d)=-v)Ub| -^{%3u@o&t*YU(FuvSX13m|bK(?X^0jRlg+sA-Jtlh4MuEORQarEwkpZE7tE|1rdDxZozIoQR|j)pTKa -m-37fnqr0X7CBHJDM--vA*_qCe(V1tb4l6+j``WxS0gpU88K*klR$-?O#D0ZP+p})QhS}RWl?pkeQj1 -NZ$FmHvKEO4LU~g#yO;zhr)z!(!&uqqJMNS -sO{oKe5}QyZpExe1A!{w;j%WOz_7O~6a1+Tzs8iL4}dozg7;6708JWn9%o_YjMJyMPrwQi78HZsq?<{hZIqDNo8tgKa -XI?!1U;?LD6lD(S4ZilY_T(G?X*k0`M^@SgWC;se`FB%g+J^ee)bONGK9H&W=CNOx{kN9aFIQ3!C=I^ -B%@mpb+@^@tO-%7gp+Z&C-K9z6;Kd%GdPT9C@@b=`y@EtPg@a-8M?mlX}wlDObDBMf7iFn7?kldN)?l -nsO+A`-;LHS!rIQ*Cf^oDb6zjy<6=)>tJewTT_u^)e{QlP|+&;A?x>35EM*EWXUN=V5*8=w3weA@d`n -Ok23BqB7Fw%EVvZqrXykWBsu0g1QV_$On=T^5&v#OhrKcr};krbC+fNqc6Oa9};w`>058!uq-b`)VH` -@V+gV`>xo1pqem!=$;FZw(s@5Epv9k-W}Aw9DC0M_?z(gznls1c`ARK$-i;`q_h6wO=0^qZ!r5%)#D^ -B7^;hGVJfQHD~f5mYj;Lp%Y2!OjhTuGA-tl1A5ItGI1`fO$FJT(@Y{r(rWYvcw_;I)F1+W-(p~%0C2a -NZdT5N6a0o4rK}(T6Eht~qy#)dv5~)jjJ`{xJhU7G4#kyVlQUf*#kH;Bvn*W%{dOnVNmcX%dNe`uN!{*IINz3%uwY<0HaOy(H -qJ|jhYqW3La$QW9Zj`yj@dM6l^fytV&6*k9Pd4h5~)e!h(mciDBPdkCzv90O}dL;9hkdIU6Zu>R)AN_m4U7!{_|%zs87&(^#J&Gpw`cK1-Wzds5?DHuX3BP+o&#gBV)r -}eZ}k0a)coUhgCyk!)z1VUNmYv#eZz3r@fp5@dw%p_7@7`u!G0uLp!FDgz@x15;+&V8)LkFOiMo&TnQ -EQ&)hZ)2y&lf_f}Fv0Ff}#s@<*e=o=mw=pka`n^K=U6IBG8y4DSA*HL4(wc}T($wsc1nndUwo)sr7WM -bZLIt>XCv0zqp@(rU-r9Iq|Gxaa**S-M&J?^Jx -TWkyHA4AMPT=FxB`Fi?y5JTf6N+A?NB72)UN#Z}%DEcs63;i7uwndwMO9^4`jXEmaMPhdmzUbY}y%D+ -O=MCxfzOEzhR3;Vd1%G>X75Pts?<8%Px7)ZGykpdMd?QvLdyuGEMR{Vl}2kNwX>%=a_-HxSdywx-SD;NxcJBck;@5BZ8#j(v8WRH@agYYN_-u -Dxxw#^4FHlKWU;mT-Ka3vgGU$?g^*i{);eiTIHFt%ioMsi$z6J!yT&2)@s+CLzB3`{*6ij%e%BhZEZk -gTV(1PH(F=mLoaTjwOiK50rSpT8pYZa%uE!9errWmz*DU^VM1>qB4XbaBu4PFsrL&s(>L_vqUG^^t>@ ->#vCp&f^FgREW?*@MBH0I*SK+%^dvy8uttDS5vygIq??|p_>^e?Vx1+5htqMT4XB?g<0{1>zdh2EK3$ -14$UvwE>v71LHh;OkB85E*MzEk)#|u_R(uPqeLMta$AJIU+h)XhRn%E+c_zw`n&Ib#}SAVLA2Vkhy6q -k(Q9BpAyq5mt0`C{?O$mOleJmRIPG~8D~wc1>*8jC0(b)z4;@fCxha0v=KIRiZ}502>gx`QJIDx@T?q -jq+k)Mvs^CfuXi04uby1q`C)tc?KG7kOqo(YrQ}qFD#PxI;4nh7eH}8El9Ij98e**ZLA8Bk6R!b&Au< -kQh{QbNz*vu9IETVwAl^ydC4K2dL@u5a_u{$BxoV^G3zmRCJJI$VR}ZIAzy{hO9XX*n;rdD}C_9F>NJ~Q!arhB=a**j;4oEz>LPDcY4 -_9!D~`XNvUGvEN9qfL`yufcce(?5PbRlNO%7o#9Z3AdJNSchn@}F -5PV0aJ)8ONct!W>oZm{Fn0q2<`66vD2lvS_TdCrPzd1W;JF*x*s^9&7J^$*~%(MF6ki`hAYwzE#{ohc -zz8%#FN)vs0^ -hpf%O3x+lcK=ewAPHQp&SyU$ZC102GOiPO{3DaB{b}!tMtNEF3h+jM^ykM`&8wj36Z0UW@}r&6rR0H5oQyu%0TMbN^bIAEOSv}7xa&n_-Jw1t{vZKY@JztZD;ALrPZZgK?jN9xK=DWmNFZh*6%&PYHGJB*SkVwSfY;HJYC$P4FC(6ekavrFKPbuC)9!M$j^ohJ8lxnns5rGo9-amiNl^Om#EK!SnzR6XfG}d1*k -eA+*P_^d0Taq7gv@vBin(+}+?1onV+L+?{NgnnBdub2#Isp$lLV7}fP-tnwH34@=hVO6@k3xp@v^!eA -9$ma_Zdrrjdi-5+Ki*+6AFuGBNnh;8WA>t>>F^NM5rv(lsU_T54Iv%pSpoOfW+(d1oai^>gv>2-|OFg -Usj`_+i&)+$$e4Lj@vd{;2~^Lkm=9)pV+f}Bk%rw#*t?}J8N?56@rX=ff4v=eGTj~YLAQDL8b3_GXk7 -s7=M+KB+@t78GY0|r?RP1_e_`7R6|8!gqW*w%`)g1_Ldc2H2c0>`l)`>7kT6;<z$L7l#aXIC9MCfgOb>$7S1M=p0WVHo@`@;m(&+b5#US_s&k>K8ZO{4Pd}3 -sQ@3rVo*ebzOZM)V&>RV`f?~APkTiVn1J}=^T|;KmR47`cdyGJ6y?xUbfbyD0KzL_p=M;)H+-=JM8Fd -R17nCa@DaXFmQucDBgx`*XYl)UL>P(8y8Q4IQ+aNV!2Ri#D_cOR1gqO$H^xfVcl4#7~2w-8SuQ7K!8g=HeD+?2ah(PF*(w -4x@Wob&Ghmz$xBnc=YqqBx*M$-y)YcgWj{Sdkpn2{3m(<9!zop=ivM{m8k-TM;SLoSlu#qSg9EjbtOw0c)K_V?uShv^JO?co!=8>s&-C}IzLP;_ -^{W^|RXe01R-LlIfH^2Yk^r<*mNnYFx_^} -XFAH}`%zXb+V3e!9=cG{JdqQ3BuZQ5qkO_iuyq{`nmn0_-{@1q&zdQ{*LHB#rOl!05qfyIgjq -)pMgyCvKLqx^g^WR^{xHZ}eq=H6?|QEc5Byyq$Eo<3W6v&Z-^@F1KJR=UF*AtYf0;*I(_`o)^1$f(N9 -iriIoPXFCKMvlk`%wmDi`sU~6bU3ZFYL0U(QzjDmjEE4T%cPa0)M3A;UX`D&p|N(tIptTp4Gxb69cGt -$I(`J#wh|9d0~wbZ#aQnGC#H%&RJ)jT+NhUq|9Tw)* -SZ03PO_)WO`if3?)iOQ_|Zk0vLI@ss4xm<|sjclc7{nj^jq@SSco-*7r#mf!Auvvaf6aUy@=8ZHtFTd -ie2?wRcY^{g80f&q$eNx29aLW-4#&cRMuy=JN5^;KRNi^L<6t`w%gDx#A%Q@lS{$ieqBm_p{uD;y{dD -%zCoWLAiGzG@`VT;3047{b%}a6gf!Atx{!9#5*3%(|I7|AeL}@5gP$c&{IM_8G4OIvMu=^1FJ?$J-B; -8Sh5px2*5SiGM>B_3JZr&Wqf~9bC0yp0;#z0jF9)peXM@=U6Z}wMZnSg(j0drtJGHN7n^N9DNMic -KkQVi5;ChveHiU3y@tch<$OCkoVB!h#?WN!vfAW%YsLe0(l-ENb~|1#7#fntz{{kisuyyS6Tb~UR%@o -BWY37M`oYrj|Yw?T4ksdIFEZhmHa!m263mggC3L7B$S-EM}okRk-?7P1g2zb7T%{s*Mw-`6lKn~PR{7 -K14MyVe7&Qs4YJCAer3*=B0?Os@mb?)XNeS#Ard_5wAI)@tJ41VP?S%Aebyu;JmKnvxw)lxkDpKD+nM -K}g>7Yk(xLKb5PL&^P9e&J@0p11{UQ6Woppmh``n0R~M9+GqLY(u$wY<6}iWw&(8xpg<_)s{knURRk0 -SK#ASR-f*3opWIwTB59u_nS!bcv~MZZ3<#@C4RdCxHWJ^dPzP8U^?f8nrDQ<+g^s( -*gEk33%jAL99E|U9W5JhgWoY1c8DxGnVhGsOBQlQ*>3?*=&K0mmjO^czV)t -Qa~^iR?bsTT>a0e|7c{7qM6h$(&mF5F4fS+;X$pL4JPJ+Y7P&y|8^oq_QOrmu80w)HVkdZAQ(N>AwJ; -!!1*UKb4OqU54t{?0OjQQrnSX@09qHqU-or$HK(8(;S6bgXWfx_f_GF3fbj_~}v}ccMliaLhwczXGUR -2|HF;h3yRY$ZA%&NF?OF1Yqu2i&i$!$-@&3VMD{<-Hv=5d08o3*C4t0<$kILYn#tPwBl&QEWu?9w52; -cV77UWdoymUeN^z7UYR?$*hnrfmMxxO!+Y -5ae~d5KN%r-fRA6Mz!v4*LwKvzkd5r^%(!J|MRzFoYq~wnY{1zZ#E7=5bQSs$61zPk)PGC{)a<-ZytX -+%nx)RUy6kkAUH}hAnk_WK&yF!?kNjmr68}x0*By3Arg@P#a}1lasarqx7rByR=q0TCv6rDXWogucZc -BS5MUHY>1|_YIIv%z;v;{ujzDU<02A2YJh06aX!OJ0J&EMIhy$e8-mHYcX+VMfqk*vnHWC5cgn%&w96 -$n^LF64n1wLpDc*tZ}1iRl!gMbQQr*QW)abQx=NAB|86bpcO7EQA -?9k5wpWs-XfFGPyL_@vnCgecyKi=9^At=_(f6tAfy@->ivubnWcvpL-{v{2fSbB0K{eyHQTu)4w{7$3 -r#_2gtNo7M5Or}7AozHJ$_P3yV26e}Rc0G97<&`tZ -U$$OwaGM&92i86lX$$)+!%GhIaM$|ga@7PD`W?ChNIn*D>`{PVfQRBC8?{=;i;O!&DLRhu%mo;NDYTlh%W -a87s=It9Tz_(jisP`IEfG7vFvtNnWd5Df&gq-Bj=I}b(jzprD$DTZs*kh$aT`aFPi&>2+V%(8@-aW~+ -RV24giTR`s@Z3+YkV_=>m4=2_ -(9YQrQP89~mlqqp@bk_BFKPI6^@?GLrr-t9|qVb!{K7`lYU~ASXD5!Nkq3w;^?R5|$=fKSDp)Jf7)z| -`IlQk!;omCp}u~xB8q8)OoU(_>``}JVAx{XRu*P-qWgF~ZgVfA1o%M#lY#vxXLAlxdvr -q1&hfV~+7D6FTJJ>v_JcQJ4V4xNi$HpuYXSr!>K}Y5qm8p`%k?S65ioG9OZe20eohGl#{XB)?j?Xa6X -%QA8OI|BmqGT6Ez=!_S!6*FqI^`7J;HT8$&vGd^MHds6O2B!;`b~|or>^+q$$-L@KmSwN>+cYR1vSRG -!Y(d>9FOcwlWcTp=5@F~29b+CWUo01)MuOAtO)gk&r3PnRxR!=SMqf}b^B5Y4t(Oyu$nW}VSGONoNz#QoS$jqCad# -ILf1=MOWUI{06r)}Dvb=GFL9)sL%1gkBh!ic=1r1;6#3=R$46B7^bK6hwNqSJuokPw9{(vZyl>>2zdh -K~xuKs}@1v3gyCYD+6g70k&OQo5xvxxB -e#30C7=2oadM6l-G^0$^4kjC)Y)M#z_mVgj|RHoCT^X0R_e<&LpWkS+;h`1UgN`F(1#whgp&9ZdiM?+ -D3K3IAP-^^9E%}oo_hm*LfxW@3+4&ptE#K;oGab*8ew>{(#zSTYGTh0Yml%vA_}yloX~4#X%mv~?Zkx%aPf);Z+CDgKlRAV8;n_0((W+bRtV_@tKRV#KA?LhWnF+al;B -;h%Bw31Nx~wKuDfTH;d8OQPW8>@;@jZI`oXC3hDBC* -geY;lUo9};N+C;^ZM!s9g$`%3&)8sDH8&{;*^Qr;v0d1( -43Y5NHFQXo0LLCfv*?H3?RD4^00elOOSTJpPrb -?6+0feBzRUXbE3F=;_lP4WO#N->CQ#OZd4;|4n{}Z>*A8Myk)+X2Bbqbez2B^&B^EPlWZFs0kt{<@r= -q<**au~>XnT_);c=6u0n4bT!t@-oRKW7g8cc=b2bLhV__02#1T}1@?iRYOA;5n86&oMA@ivAcQ$xENw -t=Bo+$zBsO-pYwF(LJ}nY!>M$V4z_+^dksM?%!QLTfMV|#~ZY#fV-y^k8 -D?4w$5Ah%5B{f>{OqPcs`9v2#xKOYYLIVZ7Q>pqGjQufb7l$n|y?R-s_HEorH3@LXToKsq8qLg($dsb -j`ugp`9%2j{iT~x0KyvNRpBO+2V%6C1Z(XNCAk3^|Xv~wQW9o=5GUl7M+(*8M;WI7-xnRD{xnZ#_SK2 -Vm4&HL2(k|^0^e~rd`A2-4S_BaN8r36jeroUVuwWYY*GZc$*4PUn* -36M64|&U#%OA{KCjAcbZ77W9lil7WT$!idwa1rn^JPJ#z7}X969yIY1}q|;)DN(54kd41%D^y$3WW!w(S -=%V8y8p*dK!9pafhI2%>?Jw++c#5RKqOhtoM}-cH=EBsoA)tpR#y+d!}HX9B&aqJRUylsGOe#fnqRZ& -NqH3G08lHR#KGQ{NBieZt2xNB?y_dX7KA -MoAB@=re%=*Ov>e@wO94p9ByuatgMn|uHLohlu41|x1Ge>`P#8(CbzEo~nY4hA~CA94w7c -uTpAv?r=IAO@L4B0AN8dy_}5lWc#R$@|kyl=0ZKeEmJ?h5V>OP2L=i_}9S++!KH#Up|otmhzketRS;Z -+}))8s)tbV)qnoX^g(_u_!tmN&9k}mGm`wlyIthXK7!3onk1Q8x2uw?O|~B<5_y5zD0-_9LZ2NrQW#< -;BztX9cioe9w(1&#(1IdysDRrXO_w>9w=pG{njsj7_*XVrS7LX(u -KcOSYDR_dl3tT-*Ns&1)L${bfkW}WPKS~|M86{h(Q>J$F!oiF>Z&Y9x&zYrW08GLNoVCV3!-->_z=GJ -MI_f=kx!|)o${F?t(Uw_Nn{4)0c`b~_-ynE*TC9nG5lxv~_DEsrMKNmRszje{yD}1V*%Z9@ -xD&{I}ZPIh3Gr3nY?=xNcP_e`{qf*LF-+DfdFTLf&?G+rcP!VkkE|Zao6-++p*zvprb;Ah-plNv(We( -?F?v%`0L(-6(j`v-@C&_E}Z{Fvh2w@M2mB#%%Q%7X!-k$) -T{{(R8y$9%*~QIIIKR_*m2PmA=!#xM -!-h=G*>rh_;&2j+-UeR_GB)x8si6BD<~D7)Xlt=dgNhgN&z3xhUR8c!%c(Q<9|dTe-%Vv@&`M=Mlt<| -2W1ppvp>3Eg6!xcL90cE?N#w(cY5tErAZ*S^;jRC$%($^nz?;PlKJWLyV1^^oo9>(PG$-P((PH|luTb_k8I3a2JL_k3=S#GY%1T(kS -SkfLramGJgF?z~)6O5dOHQ9ozcP_dQ(I1My#A9CoDCOnKeL(qQ0B5(NRQJ(&iXG99br|4bUZSOJv@z>l4)z!+}TCA)tJlkqccYnaj2gApmYrb -)ssGMLn>8w+yAF(6|l0%Bj{Mn=U^TB1m66FeJk%Oe1Z3QQ}YO}%C7^Vp4w|G5;xh~9rrw@vD#}H?4Iv -;3{3As@g9wGH|^WiZEwEf3cwqm1ymKjf_|D#xY~#PB+OGh)!sRty-igB9S1tS{>1p^ -9AP$2IRTsJ4y=WCPX=1+m!Ard`-zgr7#g{ -tBMtS-?vZRqT848Mv}DJ-CyC&Uh{DG91p7_Jc5&lBn6D2WLW5u*6NeUtaKqhJ18FR>M6A-*s`~m2PQP -ltE|=u7evf$;=bb6P7(aIpsjv~%9e0TyVt2g>T-QWOK~|vr#c_bt`Q;Ys*oq@V8AdE`i1>_mXL~KTZ{BXH2P|}%Ez=D8AJPdSsXZgR0uU$a00KIoi3T)tJWI&B3{w`5xKv{bFraD32y -wfQTk}ROTj|CnYP5i1R6n*n3?(e(ibm!FJkcIqx5s_B;;c -O5Mq0CSG^_AqG0;YIJ~WjgGk@8Z2B+z?Zt5`D0YEFPy2b}9Q{{T$~nZGrX4-jY=~j>vN}*@ -%TWED0a@AGiOQY+&ba8a|r1km{7n)xHTQ+5+D3?mZYMDAMuVbAL~<+6M_mJ=QzR7cmL5+Q`+?L{hs+F -HwxDQmCK6*RTlqvH8+J5GnG`y$Xj89!g8Y4d->T~!M4OnMRJ|1<3-5@IyoJCswx8g604m&hBkC-x}r6 -zS$&nedbe=V)fNw$`B3g{zp~^xZk|lCB$2v9b;%y>vN}<{kedEZ8By1rp?J2O*+m$6L?uf|<7{)>e$@ -;oa}W6uWi5ZM7)MhHkxU23K1ez(uD^1+e$hwV7o#}ax0G(%K`V;9LwjJ-aCNSirTJEl9xZMq}xUyM6_!pk_w8vV9LH|bXB8M}uEuD>Dp-*&{*ylwN%O#H -@e??Zmweu=y6w_`r!ai3PdY27f^;{)o6-50e0$hv{@s --#RW(tI}6#Y5(>SIW@mo5S;9}<2R=6+%1@TbOgo1QNEh8tuWdyH!log5hqgbeV)Fo4Wf9B$8P0~+TIp@82{A$i$uZ5sd!s`P5z05$1`2{vT1J;acmKG{b%G -y+uLmiI^fg_(!GwDWrFake?#pRo;J#glRNVOW?Sfka!==~%ULb!b-1Af>|!Wv8p<=bmV>x?W2tsrIRh -`xfEe9xgd%8tT9oyKW^bDOL7bWVI}2|G!{)zI`DQJYnC*yb)vGf`an{i3Ou{a_VEKMnF`UlM -v^Ui{H%A0kAPHWeSE<#fl2t9KP{Nro7=r@uHOZR|u%7;kLuJmSmpYISwLUVJ;gv$9p4T=EgQ2S}Dg6} -PCt36I0bUlZJs20$=^oHRXnHX8m`Q{sWiI{Vof;qgA=JoeR2ih -sdn-c;PTPu0J0?xNLHMJN5A37?TSH?nQQK!^vf7PUpy<`R$D{uE8bqIHfF|2}R^mAv)1EkxRn?n1wxeVwWbz -k6|c>4_n7I;w_GcD^3v78;OEN&uSY+ZxW?Z}y9uS+{o1o+ajvPVWFYUsdtIVYojtYPUJAzxCJ@{#yLv -mY=}NpvbUz+A;a;FK2V=Sxhm%B{_w#D4&kgB7nKnd6_iV~{MciF8cJ`oJ$IAz^!n-?b -FLd{P)mo|_1;>8xDswDBxegNZ2x)OvpMni^Q!3>xApKguz5Fr?|6RnJboVF{_FlP?q54(!{`i&AuL7z -oGkqxjr4m4^goXBz3rwj8f6HArZEEBej+5oeCZmqpiKhFfayfuFC+|-0g8Fy-wTea -Yc6c{;7!X{)>ku*K-JBi2on`#p!I;0hCllbsg0y8060Y&D#9%iMoyCB+%e*_jSqd~-Qg7Q0_(MN=v-?*|(-be4rX2DI@oV9Oqq#}RkPdMPtZdV{fnhGRu)XWT-tBKm1XKRWV%v%5Oo4I+;H_L^9T8+&pz -2m1q$NXov8G1)!KdrNPd6__Nso4zjCu8W3+kTk-yW9PLGJP<6=zlVOFnj2qF!tP;M7q1zi(&6t#SCX( -x1NyiO@+|*`}tB5!l0!$zS>=qP@Q~khab_KI@cn)`60C~5)B$3lJiBl+_?}97%kDd2qNMaqnY|bXx6d -50->bM6@Klwqe?a6O -}yYr(S;T5wUOi!oA}i#`>ld{68i-``)_4l0Fo4QC3k%O&I2RC{5on_trUC`R&X&QmiY4?4-%bBPwGK& -pe|vpG(O=8$pd>E0($zj#_msb+nAZl7wx-1b9J#+jOW8(p@j52>6iFHpN|!(uK|=84hA%wfW0D9M>tD)dOX>?;;| -M3goy5?4^?lk(a;{{y?OJLT|HnBZZAxhC}LREDI0s!L#4HQa4e -|EIkhH{XiTAwKn~r@+HE-Y!fY{`8-;L3_U4R>6jW_bEiO;R1u>`kjcIk^ZkYq#`?TRM`9nAGwGq|L=XovhBq-ab<`Y}i$8>d?AwGOYY^r>5+e68lzya-&AIKN6ItMfNCRlc0%8|V9Dt -=U6ebe-QE24GNaC^r5B`bGztcM}Yig1h --;tGYgv`SCB^@2I#y23O(akH1g3WE8La%_(6tS>sg7h?TYK7BIAs(KfbHIE#y_}LNxh0H0xVQ9>23xq6^;X&+Tfq1KGISp^l*WH@8NHY4+Sy=abIxsFB+3r| -#B$C#Cs_?~e6~~G4tGz+ZZn6tRIY0UQ^~gGE7cX&1(UH2_?|sO44afb<$8%{p#=W?%a+S#k`Qh@>ZZ3 -0dI3b6oU7TZYvd>vLdG!7qNGWWo+qHt&gN*L*IM)@i9ufaZ2?ygv5yp*v$y#qxNx;C^D--poYRkW$@^ -~jGHc(~M*BVex*#7UE8O*ZHVR8dk;)`nnUI}r4w-taP -itFye%qO-qDZkz#vyZoNqaFhie$66%!mWjo?LS;^`GW&-?i8#LqWPmsZ^rt|E88|sf&{ifEi?&+L{W;zk4!agdfqJBHs -hNlSBRf~j)j9eW3~}~D$=#dy^bq`dYOf<4>cK7cI;ApV&NVNjDI6NnwbomGI$hGrC)tJ#pZOYLMO~>- -?Ww8QwHKA_+>q|!0uy$9{_GB7d5`N|dvV5K2QSai^2b+3n&(bAh*m0LWpP!jrh%UBMR*);DG^L$Nmaa -S%yD|cyVK;4!}Kf)bC*2OUN;Nb)Sjj+?Q#K*EK)S+$X!+rLXJLjLF5aP$FR1fHK(Ry*sYX9-?r?Q+S{|}{uOfB^#h4fUc2ToOZi)+02KKW0%H4}P?0A;0$R`x=wmJMjp9 -_7*pIdwulY`H{mPRRgMcq?=RwQsLtyj0S*X6IHu=)*+*9+K%`bXos2Y}UT2Onv@rd3S -+`1_b~^-xHaM6n5}Xgh#5A|r-@RTXcFB?%hIu1qWU4!A;m(A;vQU#WTrUh$TfqxE;C>g)*AQA`5q@4c -GvfCFytjo{-QA<@gARy+u%4N$T;|()Ci%%mLr-%rj#(3f?)P!TN%3$XAe7f$utSSOHoq##84_kxMEHJ -n9QMEjb$c%nOT^UtekQXb466fQbPqYOX-ZV-^ejOI>Y+DSI56rGXgB6Q-js$2QQP1r?hL<1ZO@pes~T -)3O{86%$6DmB-~3&#L{n8VGSr;;0*9%BHFlF)Oea!>9i2E55=RbhaCpkW*d8zUtfzb0?zC(zPHoLo(J -CmZ?noAN&d2SgwxYHlwe=+Z{faW6mNg2uU-Bk>)7^R>VvN}zS@rxku`cT|ZhsKga_h3&R_QO~zW%pd< -a^Dp|8#-x4Ix2(N%Q+=z6G6%1jyGH={wm?f#d;(gF-cue#=)P?;QNsVTu?BMb(>m!{1yJ1P02l(*pED -W+>=l-0Ta^g6%8=XqBjsoIKDN`Gt|oQIP&;-x4GU3xX%bhw9in0l|JS+sB|o6NrV#8vk=awL9_hLk59X!m|#fhsmF -`aNWCdsJ}pT7Em_}c((!)Yz8f1JREAq89?4Qb_6lz_x(S(|$_ -)4!vID4mUm}9<9EzVp_{Z^hY(A|95*0UtY`YqhwLEi>6sG<)O)KX=n(c7nDW2S+KKN1ka> -nENlz!utZUoxlx?4YDI=@owoGAUDLcu+UTEZYJWsQ*XP8_B=;Q^KcC`c4`hGz9D#F9d(!73DCaYQRDH -HrcHpqnk6HLzS`f0*y_$HmyL)lL@=F%WzFrf+`NtIoJS@njcM0W$MNJr`lBZAk4bcoc*{(?jN}ws;U0 -$*YKB#)-^J=etwwOY5Bomjii-}**r7j;*x@V@kyS(L`jnmz-V5qr@SP5SJf8X!PuS%AT)S-A9m1Fq<@ -nK)mDYN91E;c+Z(WEiZWHQanh^Jd&lFq@Uc@Jx+nM6=JzI5#H}lz~Sly!RN1DUuiG5{Pk-uvwMhe8b% -QcUr2?w1a7_%P_WsU>mnC_!~yZx&nKVsTYi6|-qD^v(qb<|0!IBRM4JLRxr*h6n6clBmnt}vurs(a1o -p?AEw!}Su)&ci{UcT&65yQv%Ruqvu>cf&EOw2hefuNf&2(m9F9|uVEg-C~MliPIJ2p4gAzb;{#y_is_dm!?>r=qV*J4mGe -lSNn;XACisJg)03I;mg~-%2)((ow%1vDbGgj_SO^^YJpdvR2E9Bkjy$z8c2!ODhQ!jrabo&q@*nXJZF -V+D9&_Ix3;pR}P2_=1J$D*>P* -gTyub~JGQnJ8_OyW|X=mD6l-KMtTPe=z{oPMZhuO2Xg*#UYUPBWEyBnKFtX3<~f|_*oN7O%=8kDAYc* -6_IbnNNswx?qKE8x9t$v0qUuAmp3!TnauYSmg4e!{@qv6q-8r{e+M0exw~EG8dPV2N8)X{18LCaV+rF -Po)UCm8JLO7f06-xC=`O+>5mGHypv$tmGMh?iq2IWF4gI}v>IqT{O% -b+fAy5XvynF3deY7scS;Cn!>b=*EKW7WQh|g}P+U$?U`gA&9H*D-_WNln+x@oNL-f3#G!;K*4E>Qq{= -%TXBhV7p+;$zlKa#~kkqeUDC)iVuipkuSo(#>QaV&gYf66xAa@N%p;f0(ZoiFggK4P)Fax7|gY{x#qm -{#}vD;FP8c(w3@y7QkdT-qaaMGLOMHf4T*m&n7b}9#ry+i*j -tH9k)%1c!`k|Gq3Pis>g0%;c&*DEve{%3>}bG3|J%ETmEp{VaLYJQ8FKV{(d*}mqObQWCnR(%#?dWWz -Ug}9fydk19;M7q|zbOVeYhf=4JubJf-Aiyg>GRdw3RoHPl??vPg^xE&J%3Jh0~~IPrt}^yimuI%Hy8A --!^znefMEUoTaAKh(ixoYDeU%~~%QA>;l2>Rj0Rh9UPm56chs*_LTN>J4f}!6ZTZPL-;FT(+m*D%g5D -WoAssUb6O&yV?6S+gZF2V1$e!wn$zb^isshe4|cv>7NPX3^AF&h3BVXW_2PG3-0y7t$ywYwsveIT;?S -@9P!F?((OG$@IhcFn?SjCib)c!#O?|eudrn<8${F{9&7%AywqQM1;4BQ{_Yt3Q@`TN5&o{z@RKqy$$n -X^#DG}UhRWF-WC$7T8yj81fC?t+ot*@kLkysJiugJ>h62B#$bdtzA$1CWYft5%DtGfqHfMtU;L(mj5R -1hBO{d@=DBk^*JP1%fj6r~odV4MGo7xqWKW!e&2QMuPqIvY2>2C8IHpk>+*LGz3ri{?qI}Q9SfTmlUchSaobYs7T0JIA@P;EeJIEi5eM6%?v_H4{lJTK)${o* -@%RBF?HiNT6Lm}tcdeFIaa2erPMZ8Q%dXCqZ2IVB{#`EN44I=a`?7P9L3c>A+?soHqzGm6>Tr+9#8XK -*}5@UUaku18)gq}BdLK`^e=n4tKmHX`kNZk2(@hb4vknlrNsF$LsxqM|?t*cgr_N?)wE75gAS64U}Ea -UVOhC9>M(plqlAa{_1T$Gwv#7RzGSj22AW%0Npb-+adO4U>AkkLavxtX9L*Q5=T2fMmbw>hAG6HN;Ige4L-$=a0_jmpBqA>Z|R*-ZCo?druq29BdOnVLNsLE2`l*NXt(vASg;HD -(dJ*Sgu1@wVTOX1r2)Nx`-vj0cvy#{v2}Xcmi0g?_{OeHlx=T0-7bFZM19lbtl9^Pd@Sz -oJq9zDgSUs;0_iLc~#~Q8nyVRf6f*#QSRYO|kzI;jIDvPEn^?(c!fQt+$6Qb_y@kaE?0CBN26wlCw(F -QBFt4bSV_u%|#};U%d4U>ku{|lrWZ5SYCF~>N&=IaL*MIKhH16VoI|qH%Ctj6n%=}e0)@o_;{D@`doO -4f7FTy@(byHV$bM$OfGxklEJ3-au0ZN&4fdQ9+6dFHajiXm^14ZQ5}B+DBaxe70AZsGlDq^DMQyN13kQC=NvUQe;HT8SiecDtQc5KZJBb%@QZQN%Qf4{`y!Za(QNAl(<~E2 -pPvh{#N3lCp!#*RiKi6F=h*PR`mv<kz)SZf}Vl@)m7M8S1b)8g)_-cZbwx62|qLvX6?O*~^)={m{hi?%IkRTgBKp&rGW-~0-@9TfXYN8<*lgTU -0i={kB>;#NGb=H*pZ(p~FkPH5!ZaCTfXwLLW4n28^o<0UN=>3KAF9v97w8r$--dF1`|mfT4iKb*$aii -{$0h%D3oHlE_A*F7GF--H(Y#J;Qi`rO00|HU#mO5r&6bM@FiKKTDs;y!!#0dId2^t-l<0SKy~K&ck><_g}>6q0~0EMgm*{RMDh -V^E2<9f6S`(7VAbG66+lWcF{C01)UyusVHH+kwJz23#+p0OuU&_ew$j5;Xh1Tft%kG)ooln(^%h3Fa? ->QwRbGi1J63_n#`1-oVNJ37Od5DrFmR8a^9peWwe^RFPLu2j#yI(iY9dYRuJa(q&tN^G}io8QG(G#8) -Y9f`IGt{>7|+&L&C#FukmXBh0m&P4rV=?T2kM9V>c%D7tFk)8h!9(NRo6J&8Zp5h|<%=~<8Cs%74 -^h=p$$m|%PN6qCHRJm@qXw(I++smj?KCKpor`(1DBN&2iQ08u82Tye6K>Au;t)UvVPnN~=-4yWpAMbJ -oG~}k`ir`chma8OW8o|nWgT~B2H!&1_VL1R896XX4ORpeg-{(++;j?h)KL>ZmKqTN@4I*xqH~xkkgpv=<(V`_ -!7Ym#nxAgt9hQq0P^SoTw=MfQo#Q)$oio_xYi6Tp$zZtz`Fex0Kp?ly7LdEtLL%OUK(T9gD*$z|EXGJ -0x%HJiKZ0Q9cau@l_Xtdm#C7?hCz!izhB$kJtFj?)})PA^BK!{N=tw!x!o$=1M4PA0_nt$}ul=L5+hz -#$2Eug~BMP8-C(1eDkQ(%Wg37t~$EVVdvHBVP9R?&GE;ck^i7}u|9GR#Ya|P5sZ8wPQIp|%_K_5(X=_ -V=@tEH-KIL7Zx+P5K%wt$QJp5b*;9=cv_3Hfi=WlOglRNMj+3c0`O7+82Q|oZ+EKNAU1g00!nAun{l90&>H|8%NnS-MaiL?=KF9NcjCm(y%ZqK? -Ah;OnG;7&mMU^M*Nj2B-NLDy{^(eds0K7T`q>i?8aX2yxZ$`ITtjfr)N46F!F`P*hp2 -0)GG4mwD75`=G~)xoQzW@b{BJ(_K&^Bzh*MsFRjt12BNY! -#*mY8csl+8=%?iGqgv8SGF&o)o0eIfn;sf?@n6p4%DHO_|6Hh8R=#%M4fH1~L{I1+6y8SALTrNOluHQ -)E_W4%$Y;VL4xm*GGfJo#aFzvB+PbL4!8(bmCY`%Hv1+&D71f0+S(*RyTq84LWPx?utU>0ofTw%XM_Fa@$xRQ60?SWIjqnLMdQ%cp2UJ*9$DfDqmVz@oEHjpzr0S -?=52(*gZulzrypSp{yzarf8*q@!4m$r!P160@B~N=u{r4H{y<7O0~+8M=3S+pzjbJ7(8isoUsH_5po6 -ZU!B2|%R``xkAohb2pfx>t7tU`304gvNB#&eEeW_nXneq$_w?Qj#C0VTy8RAL^dDsuiMO~xCB{vdh?F;k?ePY|3nuf;$V_Vq4fdtKE;77WeJ+ZidmUvpcV?3?% -MpC@Brp>h4cnR}CEN3m^Nu+LXSGt*@6i9%GzEF08FqOMVo8bm1}%5O=_`wMyd*?Z^xSAw>04|fmu6A| -~myq4zX?%J?`1skn7W;I5`vKcSd&fAe=4^@)mX&sL_FJ7wNs;{q@Zy%E~&t7AD$Kv9{BR*bfAQm5Ok^-b&oEqtz&cAs?0ypq|SedTl(lUFnXjtFH@>M)a*f|=yaI -Z&=*!u3Rka;sF6J@fo(xxGYKx(Lq^3XxNrz$4TgMd}3uGu#ij0?%?8<@kF -CGp#u1Qs^q938;{*8_HAEptoG90~xjH(GE`**<-# -ZY%Zw`{JIFO*-ivaDSxON*vu*M=-;G<=0{VfUNyb%4m!7qZVJ;yFJK -7q#!Rl=0AGxXQ)#@kAftfxmF_G(#r_ABel(W@zag9t9a)JK69|;4D1*BXg#&@qqEk9e=1^ -=u4cxF+(Ob~#0mM*$~T6YUql5V&AGKXQilQYB2B37Bgi$Z%gZ)RU8Z^6*5>L~p4$ypQp%GsX`bKbRQGriH`Ta8C~r|gmK6dPd7!z0D~49oc? -3WN2~7U@d|enq3d)GVrU(iy?XJuLjmvyr4!C*e6tnds>~My!W(dKrJ4ZB5z9QHF#IfejwPWm`!c*o!z_d1WUEKvYil!XdM7mXzkcDDBec7zS&hQND!-ymeY|e=&V^ -#NfdD)TLG)2kp%{vtPaN`N9Xk@rHaeN?>FMdHVpZJ9vIQfYU -L<2Xa;**jnrmuOE+BfLY=|Kj(Fvm4fMx;&6-p2JPH`vyv(?ljt|0YQv!VfGuAzjJoaqsUg>M8{J*%$pYqm4!8?`%?vbifvggW3_|1Xy6-@ -m%OPhz~EDhTy$rDJt-Tk_(x4+2D;4>Hy< -=DOIV$MT$c0`i9k7fX-A4|#Qz28;41a?b6jxbV*u4yy@%P(5SqnL57Ez*~yAqBtLBVd~ZkKcK)Zp?XK -oGZ6MY?I6kytE{Dd#=3^Y<9l6*XaK8M3|cMj$5L8)f}B%~iQYl9N*Bj^u=t|j3!B*pW&Or=#OX!$1H1XV7 -^tW1PE8uWwlWO)NiZABf^k(DnQM%Ut+Se!yk)LG -Xo68h8uR;RHYuiNh55rOBpA8Ju{%k@mY?cq0f^~q+X>Y^``z8v}=?C5{)OrLi0PtNk4sf1tzJ` -pg1;TQ~pFbNSjM8en!fe3;)k=q}Xz<#PbbVA-*>%`8TgU34~-RW(O(swaFoa{y@3HNsVZ2$I -S$`#YMXH-!2Oha4hVS{%;0;j2}bwR1aA#_{H^^MZ5HrX!42ds{~iW!(V=(s4uQVagz$I5>CM+pe#kYG -dnPD))7fr-VAo(q-?ja315Bd(Ww!Hd5Mgg}3-=HBpE3k+)NW9RuLf0j&MexB+Dn^gd1)K}gow5IGsb3 -?hJLJD=MC!{CE{$l>5iP)pY;OINhL(AH_ -IBZr8j}#+~84In~r_7D{D8fg(8&x1|UKMdK=IMG~aQM0eDxKQ|2UqE_ucQ`!c2m@?XASihaIQ)4==DB -!ojqLlGjsb50WLq1YjCgIbe_gDW=7=Tb;y)I?+8uWg%~mk*(?s2IqpOv9;^jM8IU&(B~a?AA7em%sYH -=qtXi%whnb2k4_DHhbXk+1^3>0=`3Mg=!QBrXQm`I(JalU7zZ4CYLqk?L0Ad_?c_s=pqt{z)DW2>`*+ -FEOa}nSib|!d2E6oDu*lze_M>-!IPiBW#J@%dXlZfp_`}JUBe3d0Po!M6YU$z(@n&ic -{|AL^i2h|%zUFm#8O|>Ux0U=_9TBhko$HZ^KCu%RQ{o54*0!iZiG>pQXY9FzCg%pkJxL#`NwAM68K=; -XCKRLKCr51cG|xG#qBv;ydXHhNV4L!^HB`}+kU30v-{+pIBmxBJ+EH5>m^#ORHwLuXuFl|2YP+T)w$C -e%R9yoT>v;#*w%lLGFZ|9PiI1SIpN6PqPU!#K~ORyRG__=!H{H7f3x9!fGYJG($Z`O@oglg`ZDM((imv?AU{tV -7r@gg(c!H#YoAKRQ3bkvLn|Xf&2*L@w0b7Y*V#0)oR_e0l9I7h9Y9J|=1sF6C5?Bf*_-;NS3u|HuDnT -rI;kt>3t}&Pdx7<)<+%gWtqrt&`VpX7JB{tAgd9{~rDG-}`_5`|iE|ejr^`S@GLH|L-b!760?!iu$)P -*|&Xs7XHWoGbT+{{PW+6FDI)uEBhPu-~Z?T_1}N{-=hEhH|iNw|NQszx6RQ0n40+i-Q>Rd-1g_`ziZ| -D^xd^*I~H;B{J<9bv484_Z;t8at-|2WBSc_(>1_b+Ig*I@5L(%5Jz(NJX7g)*u2;AjX#CC97h=2j8%M -iM-#|lv?5EjwZ7%)hPH)4AHy`|tQpla-2lPvVzWX5TO-}SdJs<7>BnWmi0D}A84LxkgW^?fIH| -hQ6n(rke*jtzIJ$S=F>6?#e_vW!LGS!=#_h-04+k^d!`zHkQ3_Y&gQD(tU3lBT88Uc3svhB*T9A@)O- -|{J!adYLKAC9Tf-L}uZNuL9+d)+*J!w@3Zz;m8N=Ij&Z3`E;MKXSd>_uth4>1h&l7k&EPC6}GkjKf?2$Q4ZW`V&z}uKCF0r{LZR7aQf7cDY~H8qfZ;BcV$!t -KyNOg#t-q9+zKdGP<{T_L!61cv>6AzIPI<-RPTP_*10O=y+Hb9RA -|ike(UtTm^`+Y`6jKf^X1B0CU;rthNW4&lhrYz8kK0HLmxzzdy9#0}g+l*>}bC7jmSM9|D+Pe2Y(He) -@vqW@rDEee)Y*0(Wi#ljVS3n5$T5_y(?CXYp2jJj^dYb16G++roP8wwZKiF7J{W+Q!dSRBzA7#Cf18P -T5tEx1HNn-F2I4zcUj~%KFy`h=C7g!U55;hrC=JpHG4-zC@(?wAxFoDKc@+5V{!(mQ?(ajX5OI{Gfci -Vrv;J-UqH$KWgwJ3K0dqBq#8EW(Vw)g1u@wIaKMf2c)qX -eU^DXaWf{8Ve&{J^!;}!@d&V41q=X$c;?h3X8#M(D_z2RL6Z&&8CITS7mf)J(0{PG;Qe{P6F^rTrfG` -Y?2I_k?63_58o*Pq_$xc7!7H3-cbFkX$X|OO2IInTCUayZhjr?$Gtmh-PudIci5(@W4I2)V#lJ`X_rR -CKm480vvGBH9i$$Eb!P#M4x#HHbbPXvc~@}6F1xu-{-fG7E15D+sBUtas_Ig2IWhll&|l;>sQtH*Ak| -1JSB@FQ{H7v4a9Gteh>m|AfAvSv@tlz1M~O&hi@$6lKcT;n>ncgrSbi%bA#OLb*?3a -!kkV9>BW695~D2?adD$ZT+?giXa#C`7 -g-!Ldksbx^rGk96o;K86kJsUU0x@qfCRlN%Io`&nd3cNsuGf*71ngm%_dulbbdAL@*;^3~2*GNhEq8m -yd0G?5l`18cMXyZf<>D*kSfP!mC^R=)D7X(EX#&BDb$B%vE+4A$DjP6SwYc>Q4&AtJTnU9xic)wQpL( -dv^yq)XY{j7L;?!?+bt`+LqwZ;RqD)KLb5ca=)7}M_p}<6fD!)gv7aXVUmy29H -z0z6KP8jd>F3|ol^FRCBHoK9gSP}QLGFSoo0q*8D7-~fka%;he;z$2_S%Oa+;z&3H+u~7Zj2}1M{gcB -6z;KWnB0TmX}VtrO?SJS{;JRZ^bQ;Zr*~)kX70f~c8|gDiqf~mMo(`deDuu`i0#!9$-4`mO!h;Pw=Qv -v?G_#(_8UarjKwIv6aPnlf!udrSLd(JKFj#p`ZK;Pnfp;Z%-{jpuqST%Vn?Z&`;;jAj3EC`H80EJ&S~ -<+V14@RK=>|wpw_osBYS?Y^r}TA`~>bT@tbdMPbw=zij@c3w&lldz|W@jcV-3rY+65`)!$*pRn*1oNz -6EqP`zlFS{z-Qb1#bZ6asQQz!Tj*REp({?Nzm@BDL(Utyp)pNx}B9D03di#P;s}^^UA2m+M;gOpVHwE --=D!9H^Aeg@w;)=GiA0c$wnWTPup@$uRAg`&*9DaORAtSK%(MwSNt}wG$ZPdCn$5cO)bT(pM_oqD*oYAN~hPOcVLfwxa|aT~s@FAQs3aG0{@;zR2{|XcaRgYu%y!4SYk(i*=qpUNU=;za&ETZSrC-+ -pDb5?;nbtU-G;&S@zZneSLlReFh8_CNr~|ZSWfW6&c?*P*DNfG~f{a5+U0#R)px2j?r|>9t6$(zES(e -K;TCX2OTyzJ^IL{2P9a3#UF%9X|zw1C-3j?0z|Cdc4BY6r0?&7iQc37k948mL<|i^e#2T>+m$w=UNKo9iFTk3eEme@azi5;hHzJ^MH_AhO`84%Cfu33=TQIfCX%gSrS2QF1`!E1~Pg4RQO -IREu%!LN-b=lrK^^)C34Y~W=s$Mp)i@ -zRi4mzqh|H9&RGE@V!tm3dife={s5($ML2iL?=os+C-Qma`vZAHFZS>v~IY;jfrItKr9XN -Ut+!*O^4^XX7R;v%5j(Fd&hlc*dXivjmGaXeuWAzR$1wItAyUFV8U#V*aqx%OXia~3)t|*hyy}~2Mc% -oIXkUFWSOFsr;q1pFz&|e>cOc{pc6vm$PF|>MS?2>=y0^|+7`P$5m9)GIj=DXHHXm^8s=ccz~1(=cI* -=sVaF29$-Ah!MDLBc$Gom)NC0A{AH*x`v&75H;0uAbFRQvSor6gaU-$fjjc}J^H#`$$b9zN2z`n8Era -tX{diIyfk)%PqENf!qGlc|-O$fu8`iAjX?eE -jL#IL*#-=^{4sMhp=`)2~vb=*^w#@9@&e9Hvuqri2$A@7UeFls6~7W_zW)n@AVD18*XY43(E*)3es#7Pqs!G6F;ki2O7e|h -u|z(F$^?b$}#=>Nzx_HcZX#O?FDk?}SK%~1De^$pJW{Yu{#1pEw4B-k#9zL{zW-V^#kvK!#|T{cIcJF -1A1w?x2OjP4hW3^=%R?r%;#e%g@){MIf9gSST>@0|-cx)bqlrzg`roWDm2;vJ~`QYa6JcEZ2yU+A>c@ -ulzXh`ntSf0x}wJNk*U;RvRq|-%ZZiGBQOD4-ZV1)7uYX-E5ZN|p+DV*3mV;&XD^14BhCfQye3MqUlkA -IX9)2@h;JfK^yOg;CZm!Q;u1~h*N&lFc#I2nbdvq1mZ$hhKyQRU0s~k8B#y7=t)fg?mcosjN+_b0j0Zg`}DsUk^L$sJr-&AalG7s-;hSN{tm%GKr-))p`0`=PSm_oe)R34d( -jbrJHa+A_uq568((9d2_(NlFu%CfyGzr6mEJc9c(iNu&)o5eaz!z&C&{U)=(VBrek2a?7>4H2*p);A% -p-FiM>G$i5f^*s-1(Lo=-0ciPo}gbK_BT%ypf~oMYgd?KUkqR)fzVp2zS^7eIYQ0+&dlkJqlr6R96xJ -fUfi5pwaP4T?5tolkvoNoTEAIh7C|`t@==$a2`F8G<6=Ic7mX%knN%?l#JXrwk7kr9DLW+9G@dAKSX| -ROq#U*TX}D=DNhD>$w(S@WI>`-n6`+fB`UsVx~fo>Uw@n=c_u(EqlG2Lv$4Fm%fl=orI1$=7$Fz;B0= --dQoosn3Fy4p&e`y03Snsxoxk_U}l~b`KrrNG6V?_#d0sXC5Yg9*G3sT!sR5DY)p2C=+f7&f+39>T#o -=&H=$!*9ea7$ulVrd?*$#Z;eB4Futb-~{iOxPTVpnTUoozJv*=iaq2U%u -wht`E1%RCOE1FW;*(_f4Gay{PQ6rhJ#|tCKrrhPUgs7~`4WQc)Q~4!*66F}r7yx7 -BEsjdJ2YJl8Wf)7*~Qft_M+vvu1bdb3b`FI#W+#J79PEs(Vjy17t(=Foh%8)41&-_92JcDj3lcU!KPJ --_S2+^nxO{kh<()%Kg(GtPUVxr=VMgl_92mjSmo!RxlxZ713m%=K5#;>VMJRC0f#WBoQ7HGhxxhgQ<- -=3KnJmYaz-A$%UanIR}ZKWofQ=)Ln%dGu+VdyF|k`mbI(KnLmRXgY-qBOfCuS;G)}a4u_`L5Vv&;0b -C7AqPaKiSn~JSbAERQjnPFW{^TL#}xD+O?DEf*l|GVO6~6h_T+qJo{JJQGdY>(@FLbgC)O7?HyfU(c< -ZWD&Pw%D=;YOFI*6?~skTHGNSTeOp2-HE&K) -JRm`Q@fKsXsy19@VKFfo?x`pSm~xbpF$3JFu~=)61Vy!;C5hK^G7dn`eA<7iWQpo2VyC%N-xXPXDtZ1 -l6Ae@{6j_!AP>`F90IjbTqis;JwDW&Y$h>P((rHwjpI0gbF7|A(mg`#Dh)o`wUQe}&*VkASU}xhb+nQ -|+ew?}R>TMWQFeD!E0^ryyOVgy*ke_ZZT>7yYu`Di>o9BH!G~5^b?=Cu$P(u>M-lKxIxpi5iD*IM#4j -qNY*QvqaoLSV5NgNqD40ymK^lo1^3fztbT{|#wf@V_Hj@`k@Y{KB+G>*5Z%Xo-+Gn|KNZV)qdm(!A+y -mL)RFi$k%x>=PUp~PPKJ$O+g+JZr|J+5tbGc!NKyVVr@t?WgyC{A9)FrSOb!_j1`>wVJ?W_YZwmZJtt`8x;y>1TNGw11B)n&UZl>EZ=hN8F59=0db<8W{M-(2a< -8HeF_9sm0po9m6hZ?(X5kNEEl{lS}8AKCZf;qLkGk^S_|9F^`#`ORnF+t~0w?OP-FIR5J^!#!tS2jo{VSd7Q0?sr+)dILqTPhIz&;r=~P-Y}P;f2mDp(aq -W0`~q{=-!(R8cTZu`>diBd?cnEr@>@+Vq08@{^Vg#FYIF2>r})08{pNk40bt*WfxTbtwAt%PS$AyI1dvvB>vk7KPnx5LZN4uVdHH!q{!0FL=?t-I{`%goyDH-^b2ShlIxx9y&x?>Ytc7Byp~`On;jR -w^y8x58h8}7bx{)THI1RPF?8#ql+j81X)bR+gam{hz^#n$*5TS82VEOWN8?jh@wS&nxB;jj!JL%mljQwC -NaHUB31&)^c1XYkT1FNm_y&buvIa`?+YT!hdqs`nl$I*ugGlg;`)qPbu=&)E;J{Z!i&djOf=8NZ^bpp -ugcJMA780J-)&T%)p-WV*R067#k!U9VB$QZ6V*4KpX) -~)d3$-SmhsnQhd$AEm;AC!%k~7d*BQP+Y2;aFH%38E<6pXpxYtQ`n4{q2vL?r^0HCmqi!K4fL>3=Xn4dC&9tBQ!pR7Cl6jh -{G<4H8N_va3JZ7vQPyQ35~Utf9`BWH2CLpoI(_XL(5-jR5 -k`4=`G+^E|B$4{kTzSNKZNDTd-Jl9u>=s%q2J0%$qBMA_FtKX6!LY_#N -AP@+JArMAj@C3pbO#U>dj)uGJEk^D!kh{T>d -cdjxvhh@Ey*`O&@>68iuW-EAfj?1C}LuS9XvH|gSDH6QIQ;?TRoEqHH?-#PN_V%u3ZGasXSb6t4ar?= -DiycrRR_aWfB@Gg2+O8#Xh>5R!KDyYQT8z6dXmVszu1(xLZ(cv=_$hyEdAkQJXM -D+Q?orLNjl^AqDEANsziE^1E%A#o3-EJkmJiQ;Go!PxQn$~*J69=4;3?}a9Ppu9uW!cuL%#jP&RP^K- -}Svj?j&1A@HVsWZT4nnKeow&{#|qfplYR+jV}USdxT=jtr)J>Xpa?d*OVFgQ&}c5gsOSR+P_g40Nxhg -d{>^s+bvYl%7rprenw@?Z=S*L9eXCVd}`qWe?<(pvM*|WfeiE|Uoi0!oZ%)+L`LOD?g`u{kX<`XmNM# -`VEua6tWH;b&$+srNr*&4^rN2uU?iH -GO%8^6cLn@0#mz#WqJHM7952arw>YYT2hEf0?{KMvLA%UNvt<7f_mzOH5YW;kfnaRCOY{2jgcYMBv{2 -0!oC@{jSQf)IVpGNO!0L2W)HXJ4Gz>3a1dzf1tG&|9K4t0~lHmV5M&N&Es8 -3M3i$D?W9iA;s$B);OP%#Kuo>bjmmXM}n_i~zg~7>|X%v94llFMfzDP+(>k>bSimz-uUHA4 -OZV0;Kh139Giq$D7SmZ`cHO@5RtvtlC;xlVjzCkw9oe)pKVwSLsQpMQqy@ZvkCL%19?f%WSJcakaxN= -zonkoO9Zxc8T_s)Tk#PHS2@T<2do>6#dk;}pn4TW)yaC>DjSAh>9`nsw|E)B%UO@{86~(`nSuiTEsgp -!1!i;b$#?{?``3oTmK=;MqM=8)vzv)Ao)vzWFTE=Wk0U&NAiiC)yxo^tEgP_@EgA>oaq`n55=()FTf` -yx>}qC#-4sqteXxV}b7m|5`nFVV>7gAYSCyUc4f#9_eudkmkt%(lEPeO^rOR`J%uv^MJnEb8WYr$HuNzbUvYlx8!fiXZU -*{icOj!bf>H-vF7p}f(s{S)s_Y}-E8j7AZeP6apW18^LHK*%Khp!Sn{zTj9G- -&`Sko(#vl@TMsHRcSu;$voeErydPM;6SkAxQ$lm$#J^EjLHtm?RahgKRS1@+uq1dE2dYl@Uiu`T7sH5zP10=0Y$j#I4_l!Hq -=!EAbH@Oo?+)CFFcQrQWJKW6i2@f?fshbw&>hoZ(J94FgDe-D_0!Ync6@t19V9hk9PqTDe9=(g#V1BIC{4 -m{>IL*kRXG})H%OE4Qe}Urir$>P3AnA_2XK5io4GIU<}P;2@V~>lFQow=bqDjz1#a8{dk*Ql?2Tu9N7 -^GBr%C+CFR|S0{EpttkI)40C2+BqMt+eZ;U?w2>++W1X2VV&yh877kj!Qu+wOGpiEe@aD7^hdx4^I9t -$3%RPk75ae}uPtA?J>80r~!OHp!nR?PUuQP13`vxF-=h_HlX!?5xTRCRY#mgUYc@$esp!yC%z0D~%yyw(A*>Hl -@gOojWVvx_}gVsc#WjI(sI`3*0jr1hv%Z*))v(njDt2`O6Lb&Od_NcL=dIZO04LKCi8aun#bxJ8qX#n -Clnp}|Zf@q*9ci?&TWh#g3Y{Yk&wUy&D*UVt)j~yWu4*`N*P)*0D8TU&ds55y4&{S$~Mdn^&TB_EfL1 -p3sS|Q8ec%XuYe-H7w$*QL|%G(_d;ylbrqXptE0M~1zk3bRE=t7iilfL?j7d(z01ZHkS?dUUUGupGmm -)8pdf!M-k{@sctYFLfo`&>|AReEc-6c(17haBhitEAhQ~UG3KGUNiK -c5jfRsMLAzmgif#0Kb?`z;~FmndltA6K8f#Dx`@*dIAr}G{@)$6ujSgB>XA!<)82_32 -)w|cfZP6*LP8%iOYP^KRY1hY+&-+&-Y(u{MjFq^!({Wk`pmoe+dcHGhnty~hH-82n4B% -8Kn)x+6_BnVr0PXuTxy5mr=!>lssp`>T13f30)z$wVY#u2JnmDo;>PyzAiWbN)!AI))dTLH8GI;*Zu|C#)b?U#ce -K&?{L&TH3whN5e&G|u;f^pOYfs(qnHc1#Z8_0i3XEXBF18ej$#8j7xOGM)@l>MRX=*N3e~I(yWCG2T& -=%d+k>+vlt##2b_i;h$m+XP*F`aHfi`#@v{w718+e-8e8|D$}|pN;*Rq5EOncR -9Bch{Es*#kQ3e2Qg^-|ECeZ@ZF07L3=)o4BkmMa_6N8-?%A)_J|pV?`^PA^ba`rDVihRTom}}A1Sd@M -ZoVu)CAqbdg^P2$cJd57*lDcxzM6Pv8c*My -xgfR+Vh7+GzL7g`bBR62RHQ6?-HQj?7MFJ_Nt)nw$QoM$OG_A$&cW&Ub+;>#XS>T3fIn9Dad0 -*p=J7na(?EeDDwu|lk8$XwQ{)t}PV?yo-aw+Z|)Fts;EQoHD01Inmjrx~N@wP?JD;g%S)uFgWrzJ+nG -|i66$pYCtC9e%QcvlY98a%oo-WovF_1FUH84v4&Lkz^CV2HDxOiMu@(MvFKA8NZNul8p@d-}-sWUNTO -r#!gx;c26p-qNDk-I#+pxD0OFhb1;Tjv%7x)m8E0s8RVZcx4YsQI)K-9xyJ=YL3KXDIwqUt3 -9&RNGVCw;bp^#GH+IE+!fT!DyL -yW;GMzl6PjJ}5_^gUN8S7+h?CPPOu6N)WmF_FTW3Q`DY2KpgQ=;g=qOym3H&9H*ss$c}G(?L|0W&LVF -_b6qMQZ4!fnGKXAk~sha-U#!gwm1$76wi;jBEluXk^E8R`50 -M-9$4~^xo`;Xneh6s~C!_y!l1!(m5Km95~XdvlmQDG4L3r+Pb|iXk@o-_?X;2$X@zi*NX#wl^ERff`$ -G7)r%aUk8!9`&Of9!q1`vQdBORk_8OSP$1WSdnD3hoU%e50sZE1ANko0n -AS3-%6N)UtUxaRC5YZqJgdnSA{TiTRKv7qr*Ki@AG2ee0rd#!xJ(jgvHR@s{#rzQ;(1}H?(Gwmga>6P -mOqbwM;yKmla;=fnHdV4zWsx$X3pLurK0pbjct#UYg~#fcUs*z7mPobXi)=jKkbDoxGBnC)=gU`DWP{ -0hbVxtl|*4<%f<#^w#DNcX-Yc`sgMGIv!@>Cm+Cb#t%|Gr+E~-)R>!a-$=A&QIBS`< -h60TGr~JLmpSBn1aVOh+Yo7`XptYui~?GSN-n6BQlL8z~i;h+>5!QX8*3z&g1^NhquSYm-6!3NrG}T4 -mzkJ(P0lZ9z2#zmt<~8;gx7h`rv^8dBjay!(CC_%2Q5}E3VjqcEtt~H5LIn-lbwD6eGkjD%O~CTAzz` -s8VDuuf&G`03Dm=PSP6eIQdW}bj0$|lnj5qB!PH=>m|SsIYBlco=DT_0F})h9INW0WxOi=N1+n@H=xo -V#{L2-eHROZKoo}&6x^^jLLvx4z(4O1g0Vdol!ou7;5Tz8gzuQ?gzhvP2=QhJMfNdB_zw{IDO3v49S< -ep9;pi6;&91nPgCw8G;%+|E{2Ql1RbZhCLc@4H#S1|Sk?*N5g -AVIns(t^UN=tv5r%v0D|}?PPLOQ&3QLLV>GW!K<{Oi@D?9@S)r -0OUB#7RWJ^dn5J7n_@n_KoJ4WHABoTg1MhU4SyW^wg;&K^Btoh?!w{Wk)6DjAbSopAH18E(}j{nO%#8 -hQ=v!Bzzi?-GnVHLUt2WcYv?866mHPBsMMd?iT8aUO -xBz89vi8D5t$QhJ9UTcZE9f -J<~0R90geN&O{3tq!EH%mKbHGXU82osR5?lTci*jMKj$Hx)G(W|Wb*P54s7o(fShF!O%4rwIsiawX*a -zbSxD!S2oQqbzFq3E3P)- -$B&<#)b`5|-Qkhcw%DBf!kS^`wGaVI#9_X)ybzxmyaF>9}Bb~DIa5t3K0U4jN!bVnbUkOOn -mwke%qV$b~_AfUoUK;bg(_M5$Th)i0tHLkb^{>wT_8k$WM8%Ewd{gkS+Q=J=x1n_yt;YtmR-JxD#?-N -KSqRI&0g3}?scIk@Lpz=%>6V!?D4CWnw2gof7{0kSo>RMy8gY}p;$UIn$D!#EOwV4F_P+gJSmt?as%9 -YvPyJHMj1fp-&e9tw{z0wnAk-UtaKfiPcxLA!fT&)lAK&VAV+R93rym06ih@r}+vntRPe60W*`5y+=YYcsetJQxacU` -_(VBi}rC>FKs2^)fOuq!Y_aeB$p795R}p7q7~+qWU -7b^SxK^Pzmt7=KwX@T}1o&Cq-IQ_tU=trGH=YCrtV-^%n{j24 -hHM!$ky5FceEM2=Y64lp#Bk*!AD?J;Zv$76`kCk74M(*GFd`)emgn@nf(*kl)juviM$={%rf9k65w0kyvzh<&a+ls-JB;65riD=s(e=Z}^PLcPAE#{gI;|Y2OdTN%9?Aq3kXSw?VB9_w4R2WRLYm -Kb$Wc&f5SG`Wf~^`vd)t@JK;cp68NpJ{C22o$&r@!u<*SF7R`*8}Yn796$I20@HM -~T~qMdBX{zPVMq18BOy97PiT`FtaeiETP0+7g>+bp;0)~G0RxSo^tl3uxn6Sa4Rs6nYi0U -jhz=nQCMDwmB*qg;}yKQXzl7r1plj4fQ*C-p&G{Codow#3vyua&?c)PO4e~ow&=n;=_=stqyatNZnM* ->!e+Ba?yqjRHYrf^n^cQmWG4MZ_)7Q7V9z3E8rao0b;bs?k-wS_q`BZ?&!SX}cWxj5i$9HlIOnc8_QL -@w>lQ;`j3Y2XZk!N-I7z=TdeJE7k}GFEq1-XM;=uwAO_fTj$qGC*ar+Sw2qwS0EeCBMt!GV?alcy~s; -WY?hL>UJ@E0JVzsTuU;rz==Ech}L!*pVbpm0W)d -R*((mhxR(9xo=HIWiTX(*@npLZa)SZW!$eLSy!{^Rhl32)iD@28!U?1fLx`q&tY;ikXN4W-B$9QMA5O -fgfF~n8<1U?If{{-mcnGpTZrHuaxDr@d)j6$5sK<4_>Q -6h?o7S~1AoPaj`J$P{z-E}BAwm;d4ym6@*dp*$Tcr+z_7<%4IP0;FWwl|v*9ET}t%qR0WaTipgLdv?C=L2+JZvv% -*)X>U+K~;B;;LR339eR~Zq9yxlEW;iGW+?+{Rpc?cBUq~Maw?Ud#i;;_Z8USFb~f=ieKTB&`+<^yjdT -rquCf0sRrm%`w60-h-X{Q%bv#ZN~gjORp^^b-4@04!o3ag7n1fB{D#CuYC=35qriAaxAp}^zI09ecGM -AR39+irZtSZ6O7ym;)i3NP$1wEGCTqk!7ZKSby8g`eTLD*9=66pCX09o}=b4(Ae)HD9Zv9=(6@6*&HN -9Wa0E4{o!I785XgC6X|5HHx-{Z$jO&LyBVJ`Uv@`}i(I;AyVi=i|Jc29apznJt&Zaa_nU3@>>Gkt5Wb -oKIAlhaLWE-e}y8_wWkHUV0(vm|y1xl_5vH?PS -Lz>%XX5vP`1K^fh#S;SZ5|n!bk-Zp5KUYQWCDcK-k|tvkM4d9_l9K#B!GJ -ZIRy}HZ#`^1<)0Rft%q&M+t6d1yX_;{DpdQ(Vp~}EhPQ^KeFV`y(yiP!g|9E-&(KAngRh3pHYb0kU;_ -jQAus@#fgl3Y1{e@spxNLv#eE7kkc_?M_D2uh-f{-G2?!m~C-4SJ3bKjA0Z;t+jSP^LTLYgTaow|vzL -QnA|3G++6$kl{9&SrFTmD>7IyScv)~<>C#mx|4o8i6{9t`PAut1rd({?XR=Le^DVk|rIU+D-xOSvZ7Z -E4@)Js;V31}OH4w;ddtSZ=WdH@=7)e#DSO@^)W*F=c#4VR-B{3V!6}{)4R%d@W^B+=(nod;V0k&-C9v=+foj1)@lOq}NX-Ddi%hXfiC9rkv>Xt&4ucl3P -RA~Z7?<7lDVygC@frej?+srMLzo$Hz^@dICk{257TrgWj>!uOGQf%PFmAGg^Ix5apNO*dqp^{V$b(q+ -ZGeMfO8K5f&354N~jk*i9(wNnU(8w3nk)BAmPFxYd56|NfecwfrOG(RJyVe`<6F6SZhxypP?wJjavwXxgyDIMO?F9{YY -Ph5Jq?Q(^+@&l0z7l*NhPbV|Pu|kGYRY>BGlh(}+j%`;m5;x8E7Pdvg4MnP(Rt-LBBpMz;7}cV;%TKP -?|MC6f5L`CKSWmd9GKu@?HAqjU+@zCo4#$*1kWV4Kd_h|Dn~Rdp}Rv>huR>7SBsA$H_= -|K{cJ8mJnX95}ntD7UbU9mFd?CpbDJ<_F6m(4N5c3iAtxCAVsNik`}rvZo!O=Lm0@%0lrPqvscQaa$g -?1z+bW+W(mshLwF>+B{)Bu>O@O7IefP@*zTf6II{V4DCnq2ar;g%x+GQ3eL3jUS`PSFTWE(VP;Ys@J; -#x5ov+^0Mn+l0m-HBx+*r1h!uTQHi$&rH$l#e`_^64H{_kZad>;JJBm70C=>k+AnE$h%yZ`!e`R|es| -DTHAat!~s(qH2isox4w7wqo;r1L%fGN<1i2eb%!m4M-;YmruQBrR4pX06Nd5>EDym8QSsxw`0?DHUlK%E;Y -JKDg6omXG8f#VktGa?q^cR_Nte%-5>iy;BWdxi|L0U((HLB=^j%^7_0fKAu^j6mxMkNOOp6Estsp*Ua -6D#lPzOv-OVToY?l~pMEr$@=yicO^vln>f1wB<{`SS9PO!%eI@tUUcWMpkyWC%l6X-u!Cli;wRf<@}r -0Xi0AkDiXY6^OsXdmP6$3lWoWIj3WUAILI6&vRzr$?k0q@uF5fZpk~TkCvRm(xI3B(}W0_^q9y*Jacu -QMnH16+(bsxK`vnvGBAUI3?tnr_o$dx9PePu4w5MhNG!+1{@Z^*ta+LHVFF&+^x}9|Dq`6%c-LJ)qIib8?jOupzJLHpiv0A}*3sT=Z1Hw$LkL1R -d1HbK|~dhKi%R0yN}E`2+No{63>eoc5C|-SIu{GIkf6HOf!L^lqS#zmzXJEf)wg)nWqWXEW%*CT)w#{D_ir>~Y@Cozs_)OkCCRaa -&7mArJHcPD`m$DR(5OoByJU1q?}`I>qfZMQ}9ceO;@x$he~*KJZ&jTzu&M(x2sA7xD9z9A&Vk#`@ae_ -8OQiS>%V!RHlzAV_fOVKff-Rb6H~f?MLg8vmU)hHqaEKYy}KPRBBnq@6Bvk3wLzOXMN&l-JpQ1!DJI& -2`{JSnX0A&II0384T0B~t=FJE?LZe(wAFLGsZb!B -sOb1!3Ma&&VpaCvQzKX2SH48?bT3ifWeyWq~Z76CF8MTP*Kg6x9MqHMM{4oaR>$ -)O`}bC>Yv51jPuxweV$mc?~c0X%seLq@AbWa~e+DVOn?{$`3Po{_4iI-?JY7JsqicXS++@+~J0f^)yO -VjFT$e6R-TNz!>* -8%@4#~09*$LPPe)@scVx`zjECAzr>lYb!wG;r8Z*rpgAWgQFs8RG#vB$0gR-RKYU%`^P)h>@6aWAK2m -tey7DrUx#oRCg006xO0015U003}la4%nWWo~3|axZdaadl;LbaO9bZ*6d4bS`jtom9b&+At8k`zuCpS -hfmL1(ym5_0aaPhiWUKo~kM`juXrp+iQVqVOJ(X6M6Bi?+6rTn -$%MHEch(4da2!*CRo)&TcU(O2S_V)DXFY=0abHSgtj|Le7@NYpdno#rh{9Qo!cAk4A0fn=`&tUn-v3khGFT{av!LX2WU?wk3u -?x*+W8n@!tBZA2%iU9l`Xxx3shmV~H=i#CsZMk%2h^j(hs1{xw6MXrdY8y;UX!!O_R2sFaoG^~-@516ArRc8IRfD&YBMgtbpf5_oL>lu85OtEFB& --fqy7?;jqA`yn3@C$Hz-7|XF>$@5;8MX3Z11dmmPFquFP-)ANTuxi)wO_u{KL2lN1_QjwHP`jby?l=JRX1e)7n8N%OX>IAw?E -=5K4`IdR}Z(`pzLiQ2&=UeNPkP=japw7!_m-m0sx>xxRP)h>@6aWAK2mtey7DvoU5zOBb00 -1XL0018V003}la4%nWWo~3|axZdaadl;LbaO9bZ*Oa9WpgfYdEHyvB-2e=)&=?BQ;&X)t#zUf5c8w^sTs)qPVN+>tLkVmTmi}WUcP}Ht9v7My4{NhspU!-qFfeQ?uMGj+g>>>=7N90GPsBXoSHpgP-1zRIFwxkHi?S|^frXckZ&<#I_U;1+VaY^5Y(MIvG -olb%zX7)A7WZ$j_Nv5IkON5OSH2N;3<=ymNZxkUoY-gise}0pOF=cg)Vrdj{;jU0#!1RnYv@xSiR8X$ -ihF5yLv(GeN+r!os9feNQAwb%SB(^h2ib#Sz~XGzvS?62jOa#|;frlQ| -GKH{j=>RvTP?R&D&1aN?&y>6TOm^1ISl8tRJ9cY$9#ox8sYn#;yoTrfoP~`%+HsYfKq29}W0}nU$;bO -U^HIbA$Epado+>4^?blYiF^b%+OsU3(YJiG%-JBmXAiy(5$i>0_ld4althTX}!J>+iFnN?^Ln+$T09h0ll7>> -^z559lJ^U%JpKU;Y}(%KP;Pet7r4l9WEQPr%moW0qWy|iaTJxRXnNJ7HuPG_k6^8AEMTRu?p_ZiFOO{ --w2KYQQ$z8ju-XbccZLJqVhr(EsvR2s?dpRA1PtlK##0=hR)D)TM$a -Kb&kiRH~y1)6ZZDyvNQ#BqpnJH?sG?$TBimFOyf0W0S_*m4@oZzQ?L_wK=vWr^YL+spxA0%jjj+O$;9 -%4aT{RZixvfdTtBbvvt9U$_8<^nf4`aRE2p<#~R1DEj{tUlm4`MO}j?gI{Vv!O& -S*FNbu!QW5;bM)3I{O&<|FR5%pJ2v0>Qs)Zp$cmH%Sx3i@t^%_7auoDY~%qX4>Wt#0qz!5~oAM~h(Gz<41eoevmd;;K;IXBB+Txy6Pt@u11DJnBvTKy#3Y{M75Bbdbty`gZf7& -d)o9wkE8sN6kB9R4n>7wuT!cka>Y~#T6#>1W^f{76_;ii1rd$Q*?$wFyPdxN) -^;H{NmD+1&0!1iKY9kIa?9fSgk7pF-M2;12@0Cylli^?LEr*IHyIN_vjKuCfC7+dy0c5SCIej4kK&Ty -XZ%{|W#>X47L5eJeQI&GbR|3p!Pdj6o>YJda`lBFoC5J}V%fVIeSTTZATxgb7WjtF@LnEH2dP}S$;hw -H~^n6A$%sPn>U`2?21YNkr`jRN%Uw>%5&+Z|n1Fp20Sg92x<&d-+2*iMXWaZ4;ZXY -g+2)+g1f|^U(k{kO)HDx_i(rt^=B$)NyB*l>C8%l;r5=TL%Y -(S78oObVOFM$04E7?5IyH2->F3?!o{yE~Pq2me~@FEap7A!Dk#7P>~APoh#!QwgU9~ZLVTZ5<%#MeVg -|6wr19NT;%Wpbk6$Z3G99bx$_7hl$OkOo!MY~pcf^&^qO=wl05ckQQ?761Woa!2sCPWKh&_FkzP>t#mWg^I#oV`VS>JSYz$CVH&{DfljK -0eg+4~|W;;XUYg)Z0R=!{Sa!I=iwlH<0HrSoaTA%R!meg-yE!V^r(puV8)W+)th_9p7)~9UNlk>I<>e -tpEB`ylXCz_#Rl_mf<7<`I8Huww*GM>^Nm{5?Ax`-1Y@I;bcd@j0%zq~22gkN|+5}7kEd|-&-Tn@NC -uo89OV6_2lv*3735=jC+J#q1PEao}%lb8Z4KZ}{sPvc!wz0g)EfMovd@cyL4JRVB^djK{l+GBjB=jHkP*c%Etb!fGb&* -@Od+Le#{0>oo__Jh+!~oJH0D$nJmwUvuu>z$C5POYRik~B;H4%Oa3_i)+EMo$Upr7N(^Wuqlp2qx4c( -Kw)(p<_7a$Tl7Vo5!T}Ov@C0*yXC{1|*_xE6=WUFef3!6`{;8d@vpi`o* -X+!C2r-|#F>ZZ7hqL|T;x)KtpBg`Zw?mF ->K>=bR_+v>EKo8K;hcZ3lzSXuu -n59(bH(k2P&#J;qS62s{Nh{PzI)q-b&UK^gfkQxnCB9icF^qfzS_1&WXD{%OTxHo26k3Gd;(0)nDp2_ -T^K(1%)coUgzezIzHEJ!Kwa`x|hiRkza|!RZ>BTxc}>*G@ZGnU -MNZrlZyn;-rdEt3YKo^&5dQ3o$w;Ad(GCj&V2%PS1uzfn(;QCuXj;I!ZW=jCXKWsjEc{9Km*V(`y-yw -xkeJX;@(Ru#Yr_HDMH*nXoy9lgpab!#Fnu<1$*1XSrZY%)#Tz;!#iIVMur1(S3aT9@)Ks9s<+9vb(WZ -8q{mL5mGq7!cs9vh#!@viQk|a7j)dz6{Y;|8+FOmsZpToSrg{&E($z#gWU?|2h0%g8tIf*T%*i+rm`k -YQ#48a{CF`fuPS&!QQ9+$=U=>y;xKh5Iy&|^Ff?T%S`3x7J&Iqxb&x4mq1;QnY+|EBBvBa!$wiKc04h -EfM#U{EE86?5FH@Llgij|mf9$FXKI=L8B@yUbt~r4KzhdLNCr5QK@)xLmr^0;h!B&x -~ns~Jf)kE*{OM8mK1vJ{|74r(scdFNX7+pTJbU=UygP8GnN;6*AUC*Jbix5kKN9@s6rZFe@x#>dwiS+ -O}hibOpvmwR&0olyq+6-uzAB!JX&zdB!)JT_@Ts?M?Arm)O+Up#CC5^k%nYa>j#oe*$jw0pfD)Lt?o) -T{fd2Bdh__GCg1m8=}gz!f6&=A5|^RY=IQQx!95tEx@NZDU3rc`*d;fNkz7iMtCm#UjUO1$~DEg$3SOP*%lwcR4~H@#};H-o -XT=O}H6d0lajpPA)^RR_&zo_NzoYj-7}Wb_E%P*Xe#1nXZN$w^l66?c;Isge)5)b7aniki8nknn_;e9 -8|n-Sj%ca?~l0!02Q{xQo3Pw7~_qguvd@vr7f}AWWScs97@POI=5Y`{^oChBRZK{zCjHGw=kJENX-xd ->Od0XYQ1*O?VnlN4Hmk%FdGnsMmngDkB8#K=Or?4)Sy(0;v7quKw9ZcO8kIr76bOjM#@^OdXU->H|D_cTUbh@y`sVuml`L^sp`4u30HQbldvW$rFJrg{ -CZP3%|qkqL`(c7ylc((*E2^qpFu%bd-QZm4cz8qag(9+;-mK#cM7G9`88xNUpei14lNch|P{B5u##r(<|G&yBJt -_VeTD^}(XvRBcZq$AgkGM4pY-3u<$Ay?7zuy=OnlK0-Rac=^)p6T5)Png2e%9YB}O@TGyC?wwa_#bG@zfFfQ`8uLzhsM-!_y! -W2u4X8bT@?WSs_Uz}>#Lu{)i>*_*Xyf4i$A=+%}%Xg|43^{qA@j?UU$?qnSYheyF_#G-29J|gWImeI3 -~vJh}+*leAd!QD<*xHQx`JwH`Z0TkxnV64$1x<`9~g?2satY`@gg`LvSja1I;pWcP -2|AO5;3p~x62-Rau)>LaQhpq4uX@749KpLI<0I;~k{~<~HQSgRO-uH(&=Y%AsHU -f)kE#x{$tj5Y4z2zYRyoU)akCV6K2e(3Ht^1HPLQp?4S-F11~XFT-;rgKuiZuSoQ5Lc?>H(0H}uQ?nI -^dPKRlHafZc;cDrjYHrgtc|gx%(kQN?4VVJO&@_)(QxY4#AsQvFiHaNEV5SzI2%WkNo}P31>(S9pjq` -jjJk&FSWG*2{7cg^JoVk}8YzlA_8J)MCnRESl?T?3_ -Qu2QQP)h>@6aWAK2mtey7Dv(^96)3P007kq001HY003}la4%nWWo~3|axZdaadl;LbaO9dcw=R7bZKv -Hb1rasl~zr2+At8k`&aCwhd_q-(o2V#9@;dWW+rJfg!T%;T4NPka`h2H5Bcp~$(F%Dq2+=RyYIdIl;6 -Ph)iq>_3%MMFv-$Nqf085@7Z-`fUk;5mDZXS_TcM;$UJpM>GA)FGN^w^rVM)t`G++w^gBDZ{lNRU_wn -%Bik!w{!TC;4$mS|F^%Tg@f?l6L=YNaiFnNA;XwN@IKfsf2!caS7WRx)EE&297@+V_KS|f*bAt<7PNnTQZV56K4NNr+LA3!+Zn8R!)q_DHuz+jn=;EL&`p|7je -+CQ}#S{>c<9k~crir;vk9@fGZFmJi$q?r3(rlzFe9Ms|`W>lM_u+a?OLqng|svca%Hdur}{Er?c9d@4aQ!vA<)g8(RI$9%&4luTz_CW?Sz|gX>qneIsVQ!R^R6=q)3$|l>3h_~^mrVn<2fm9{d#h70Pfz#fK%_T1g) -tQsDrZjwMY9+O2`pK2Ap5kLryFLo!jGKwo28*yi?W2w{{ahSi(ogV$sNyMk1VRR)!youcMW#JWrB=%_ -JOn=uOn59@$IE(6azmKXS-Ug-h?QXUz;AsKic3>DeL#Aen#CUC2rAXNl_KK%Lr{JMU0l4VL5sfjRbxu -e<#MlQK=0ja1n=;rj^MJaAp|@8Pu_|RMrwVtCW*r#rw#54e)((?*$8LjFX-HOxurpYri9O>)`{a*ov6 -?yEZnLQV*nQf}D(L37+aQ<&j9gj>bKt2Vo3V;3+GxVn@6aWAK2mtey -7DpF${k)3-001-t0012T003}la4%nWWo~3|axZdaadl;LbaO9gZ*OaJE^v8mkx^^HFc8Pz^C=E}Xcg` -A5PTT;Fc?hOd=sg$y|%%cbV=%vv3>Skl2+}uK%4e1|KI)ZGKTqd4w=e@EEmw)V*cPFjEzPkrt!T+V@* -;ibu{dIuo&A^!oW%8ZH>@qbrv}quoXha8-5VAuz~`G(mwdw!N9}7T#Ut2!r0@Pi<%#Z;S&qS_Ir({QP -SXkzhFRXL;5}jB}&xXVh)8?C*VCf38oo)TCbnqUA -S8HJICed{_1T@Pu=5#>w$(Bu85_f9y;?7BhDDf)lJ$jN*jo{%;Wn$hm-vX6SpbAB&AH_>m`;x$T$iSE -O8u=m8BLb^lLX4FP?Bp$r(h|_9y9_os!4SSl=#8i_ZoKU)T!f1NQwf;hikjLib31GDk;%Azn!QPR@`u -Fb=>t3rD?|NI!&X=4Rep$`j6d>;l}R!`CHzt^g5N!NBrNI1`=|0r=nYs%EAlXz>wU#>ftvH`+d71`U6 -l)0|XQR000O8^OY7y^(yW7<{$t7_;COL9smFUaA|NaUv_0~WN&gWa%FLKWpi|MFKusRWo&aUaCyx={d -3zkmcRS2z}eFymCB6cbh|mV%5IvEt#{iblQ`Fz%Vi{5glyInsU=7`-cIjtzxM%v07%Nt&duFvCb5N&2 -jJo1eFHuc#}AIhs><^6awghlef$JV4h{|v4-abj_g1P#C7UXfg*x~z|8sC~ew8Z$m2DvbM%ko!sYG)n -#kS5jX?-iIi(loc!Lqaw+v-Nv;++9XLmcFrZB;kWyC|S#UX{ueWoaXud?ODI)^)WJc_nnk54Vj}XK$w -BL#f&=7Rl_*R@NzY=f=rZRb4C7A(QL0Et&-t>ISN*+f~!n(zbe@DtT5aS*pCrck)HPYV^=a+BR3F*^l -SvZ+}QtzIq0Qx_$+K^9~Y!{WYx@SiQ&q(o|f^X2BJUE171po(lNBy)}i~@D=ZxEQOIqj8q-IXu*Gt*0W9R(v~Cvbs@?#C(=h;TlNY8lbWm~uHDitC=at;j-kC1(fq>5oi -KD)(>k1b84il6S3pd>B}_+9R9-6vlsE8Q75Pf4sh-KNswx -+7u%`kJ3$~Ue0W4Fb@&ybHOP^Rm-fYvxUl7wLZ1hyX?AwyYrr*`J$Q$~N>1&D$nTiWMpM*Am4Cj<*rW -V`V)2UcprFABu7tRaXwmFbwx!{g)0{!`@CT&`^K;X{lf-eULM>BB_oJPq;RBIvy!L7Lgvz)wy!v}msq -@{pOs5Y?ZRaz9c*nL}9fG3q+0Qah8me;WB$-%pqFV5b*e15)ofBx+JOw27704OlRoy?}f`y7eKCy$&q ->#8k>+MGIVDqxcJK%2)-n?~Y#fr~E8d<~`ODYmi|0Rnc>TA<`?LRe3FVJY!~^*6^qYgT^Ox`Zx<5QRJvbmz%G%9VK?#0I=*z*u!Kz4=GMv -erw4d|Oc^R_^n9OL_e+HbxoSR$v27DPP8IA@}P^@IJ)~)aZ!r=#?jf}+!G!k%_fo?^sWI~d|w1mzuos -XZok}Z5UwgV^nQ -#2W?qn^$nwFJ>siYQ8ctpLZ}^8SoxAYW}{b5&&)$qUW@;pnCt6(i&KQB7Nhc!qijJOmCK92l|9l{QVSAwF>V^33^OmR9-Wo>?2t!%+^ -J8!TAbew=eASBU12gi+;1H7bydpYRvik=AsKCkpZGdq8jT~;a-&JG=xdT*6W9VJ0e^deiQOH*b}q2pW -HPkzR&2(+jH$>fCI3D@uUk2BC_>3`y1B=hM@>Y<^#4@!PkzT_FRJX8HYXKUPke}a;xQdSZ4BIp3(#Qy -{~3VC0i3Qe5+1D~JaK6b+xhQl(XxITAHJfMZd#bt1zJ7TF3)6^98UZb-D4@v>AGu(7r1yD0jC9{q=I| -mD7J4YZx-52@EC$E8)5{w8NdBLaT?=l`fa&fH||gU^tm -2$m9!Y-Z}(s+N8&|QMxbG)NZ2qPm|w|^pQfv3IKbQ6$Dn5mY;##5o!1p?#uz8V5q-wMf@GYj?O=U4_| -Cz#`{}m&PR18gyM*nEFs8aa?*KgB2Vlx883GbA|9;0QFWB!q+;Lq( -L*G8d>7l;RZ_CTtgF_rXb`3uKk=Av3JA}?PF`PNTz0X8#;{-LQI5-LQ8tPm(NQ_IFU$cChQ|~(jxFx7 -LVv-GMHD6x^l6swN(rd?W60g{0uxM_#(6#ZK_fKZMcBYO3b}C#5u#8d9Ox!{1EB<{@p%L~Y`nm=zFjN -g{c?m=h92Om7WFSq2+yNxO1eEv+!dtS~K)9P;Ab_w{66(zaf%#o2$m$}0+a2;Pa-4V?gxbng4l4(ybd -!VWr2)fciNmkdVI;m1F_pQD#ivaidFnb9ljp#%(b5k{vzzBf0{O}893f&@FK6JRQmPM9er^aPv9v2h4 -_1d$9+|IRBkmi}=$Gu=3+ZgxwwAlRYL&B*fNq?yXk*a7zARf-&)#oCAk)r2N) -A0M?uKT3dNhq`h64)x^xb4X@T8>WecXCUsK1&tt>@H2EI)W<8}FGzVa>Ns2K9^!lb%hRRyVQY2q18TE -Ph3MR(UYXjSZ@DD15Q2iIOCaZ~e07C-h(d}6Fb#RI>Yc1L{2A%3f_3>ByS4a>@qM_>z=W6?zX*WLyh_ -c~W~A)`O_4u-ZHfoGusjYr{AO6?jOrO3ziVX?pjg%=K%iEs4-q-ptTQj5IUJ!Bkf0ZDtO{|q)_S=f7? -5Pt>8T(qL~6GZFa=P(8sN)fTcj%=Bj}Zy(f@SV?i^Uej(vf=%QByd2bVo3A!-oyj-i2r5ce>HK)nYA{ -lGJUfdgPBWmdq+M12S;aZ0ArM37eEb<)8Ff9zU3r{ce+HBQ6?AcAF*9i`1SmokVi2Wvs4_aa?gb1mT< -I2Ej`1dY2@>7}$s0Dhm%%!z;c^r`X8ns|{@14SU@Y#_-T%;+yK&m-WWS532>J$#5iF7h&|>dS|hvax< -J4I$B|EjH!h*%BWC-lwMr=5TjL@FFksX0c#aX&DEfs5vT$T_GH%pv0&Jekl=tP)2%(U&Is>6e0lxMSA -PPp>Y#}GNfuMn#?+O3pNW!w}jkmn_JpcMVm+FHqRpQCQ25fYgZ#o*3~^{lraanF@N(~Q&EU5=UH5VA2Zz`9Ov_fpeUbh--#dSWjoM3x+x^)dquxfDmBCdR{<5t*J)bdZ193pHpD0Wb<;6k@S%ZIj+?GMV -6SI0GcC3HD!*`KZj;Vl}?oNo3v~(V)=h0eYyXaNnq}(+@aq~I%=^CTP2EYWDE114t$G`rza<_I3Jeh4 -mUW`sxsjG!f3YPR+zRvKlU6&28^Rpd&*){1z?zShcJA_iXiH<9CYtEybppR+e@qAEm85O^{}}@bK+VJ -xTC?QBD)T(I|p34Mk7$~;lgICC{p@lAdMCsR}U9v@L*KxJJC!H??TXhG*2IGBhq|OW=uV8uha5;?QT% -3GoMbo^RzlgoAb4}LG8_aTrJL&k(-64%;{6WNb;&RZ@tO9=-7zU!8RCnr-T -$<)krIir&#|SX{8Ym>z^a7kREghL`S3$9V3kqy)nrfK>_ZLo?lmV2r#G2X=~#!z*UJ6gVl;`AL|gKoL -(dp<_I|&6MCG%U`myELzWqIys7GIbp5AVfap=Ofgl*3RX9jLe|Uc`F00_A;m8TudwTq;#`Ki7$V8fD+ -L1Pbb)sqdfAR%dRgW#-p8bGm(hkr8mcmQO7l!;2y>VZSIGr*q*R0vI@yrA`%fI;V -;q9wZ6#a#ge$3(78jXVSsY*t>|FY#Znfr+s@1h$_Y7NteKd+Y3yQdw4C&60ll>CijnrM# -p)$1zz#+^z`u)ch?*bFQIoR`e*GwH&XW`+Lr{NyD(BH|Az;|Bs)GX7((>Zo=kW%12$FOvh#{ImigkEV -zK2hr_wQ#1XK7LG?7i37frRCI-r)w#g{@hE6Xs`8Z+O7ldVbW?hHz8%&9Jubzv?|Muit -*auW~9RxR3BKRe1yPp?}v>qmfP+X-;dyOB+B&{!%A0Z(JCrx -jtx0gd3A8KGkC%>KiOa1!{_zibYZ9YXJ4n0UipToDZzDl=B+*U2{wG`H@Esx($e*e>9g5KS<*`K~+u^ -l9?@}bh_Wzt_QqW=y|c?;$*c_ehLKC6w1Qk%Gy+UZG -Mv;ems`jU+yL>$t(VwFb(ASI$7X}`hQ3${lz9t@rt-QtjfN>c`U%sbhuKTiE%*n^ -xhkj6-Yf&oGFJTJB9=N>hF}QXo_?It$%lv2zXsA721b^R{7-CNq|PegRO!DaYVCoYefG|05d|-stxyt*fa84>sfX85@L2 -IbmOT7->pGGRTS|@Uj~mQTKis`AcapSg?CwuoI^GhI-v}mTMlV`a;DSM0xX*B-5k!)4rP9P4*1a5k)F -Yn^NY4I--m9&O-6?4?S@6rYzVPkjbR5C-bxz?gNdWE8T(>CPb#< -do$f>YpWCwf%9guOYO?wS1<>Dyh$KT*%<6RgL%Z4@)W`!Hc2>^Vk`*0Me}kqCkut@xH%w1=e}iJvi5; -+S$JaQ!-ALM8V^aokV)nuJoUpYDB+6`EKuZj3pf<7u+46J_XT$zZ2DvY=6eyvLmh_p^`v+`Z%xC?3Q4 -e0+0rb4-G0b4?$qG}Re$?2%G$wTV!ri@z_M=rp~&%x` -7Xm94d(}IkKDB4dh^g3w*AO~7c1O_-@VMv&mxs1nbHj{Luq`ZzMw3?u%kwp=b0ahj0B|e#o(@B3r?#l -!S5RMQBcQm{aPJ%>0TK^~~Dm-@1G!X3IK!*C4@vdM(u5;JyzK!zz`108cu#K5gJkRT;Y~paJi8=d&S& -e(<7o9|XVjvejlYn*P&!gymS`b;5Ls}5&G@M2SlN~rRpk{w=Y7En2>Nq-~bT$@n)><{54VY>${f$Jwl -}>%=UE+1F6}nw?bK4W)m$$L`K5;zR;T-lEmW(^nFL)o3vKZiSa{3YHv8BcF3V19s+I-a^wbxuv+q>Ex -KcE46?5ilM8}5L)f0%`rHwv%ymUt!H_eW^=00$UCNFTO%!=DHXLDh1N$*;6i1bz@C3mv*rzgQ$Kfrx8 -c(i`NR#4F99ED4`v@6E$4!yC}{P0Wi4+=LtMMcdpsyjMw~B;(!Y#9mg7w33e+lUVA&@N#K_zlOps93I -F7NLuvjb=SBP@uDU7x-E$mEKB8=crpCSgp@5Xa;WRON431PxeP3~(gNl5EvE>pDf#y}Q^HwFXELNEd3 -X^P$DZNqO4?jaU}kjR)LqOMXKf_nS$PXA_(EYt$@h7>SOKhjxeT@ta7oLgNCof~U>$&XA=hiVQr(uIP -VpWdGV(jGr``ifwWRCeur^qZM9+55)^*Ob$&_(6#s>U{c<-X0Y-Q?4tk+%-??s9(QtKFW&hr$S>v?5< -U~MY+Ts!OYA?%M*Il=@xX{E#IKj3|!ps4meP-yh7!^T;BUW`iT3?eDwojrR&ks^)Se{0gawMb1(nnUh -}jdfs6oKreDT~c5R9O)k@q1Nsem2c2L+$ws8fYUV5Vst>cnT(Xme%ys7O<C?IqFRG$ay5fE!Onq7J(f0TI856bL$qFBy+b67#w;YoDzKiypBb>1w!)s(ZY1mr@OP5NNbD@QuXmlZ -0j(m)ZhXz#Md7NYw;&NTwgdzM@Nj>4rQj%cbQR#^AC0^~tbs9jtdH2*6<%V6`UsY1LP2!b4|Enmop -6rq&)$pqVom-^Ua<)meOg%)3J~3>MRc>uiT2A>(AHiHCp>il)6>*69t+^6zb4o6N)IlASknXB=uT^m{ -0!celdfGw0??0Kg!Zd4@Mwkx6q5ivpi`!$+rI6_n=HJ=x^p1ZFg}-LG=Y+d^gA1dZHX9#5ciVVI4<(K -#H(Nl)znqy~`eoq3_3=~iY!{DMGVxy_>A6^MM0IW!(>5DG8n2dHm57W_ -@Ja89PRrJAuQf#i~Hu`Gr4CgjmI&hXq{L!1gMV_^zXF`Kk*X~edRsKWP)&J6H99bI}iu_5O8pIb|odY -a%=86exjtxb?^@hfePM?^!uzHV;={wWT42EwjQ!EQ_;xBl~aW5cepB~(E8#ySXTg@XA%awh=Z2(8zee -Aq5(U{lW$fBSKg%Rdf1tA5IbB*ydSa`&Dbm$iiU-wl!5rdeRpKhxtHdR&Zq@AByI?`}pN8-q+e -Nh;MAZgaK7@(2==HBS`VFpg`!Ml6o3(b2i%NPn~Zvj_Vl&VN-5kveRT2$;j8Q9Icpa9XD7QnaMtw%N6Q!*xIe#? -OI=p$%a!%*NpZ!^*9h~Gi@e~wtk_zz)>i&+s!}sWowc{*;#Qc+x{Uc6oA$bt}0n1bStJ}q@>l<)&=;}PRqe3OL%_u6Rb;Js`+kgaPz -oHH@>Ky57hVRQ}Lc~$pr&;u{r?g1UX(R&~G?pwJbXbslSSQ*^y2Dm729m;%geJB0x2E`w!5cgDfJ(-ZJ0QnT@`zW`YMO~;Q*6n%YS$QReC1A6?CmMC7_98||l^vTjc@a>M{k<$Qx+266`P5R_BWb8vJNaO}g-!ZX;00U>&)@a%SJz -Yy&S&kkuxf+tPRv>(O4&{TtRidXYNgr@62nAk5{?b``GP^Nq@Sm~YrJNJwG>1JaJxU1auUZG(3neRfJ;!H^)>;-}S;Ejp+g}H(#i(M -uhBti^oJ)=x=pA3K3mdGSnM2w2Q=-g4AIb5GR@w^)})paU>b*T(IU}` -vPePx#I3K7;5#iaw#dMBU9_%so|`!4(_~*7lSG)9OfMbZ@Ve{0KlT3yE5>CJwEDeMc65q#cWVua1m9t -vGwKA6fPdK4o#0w)nCe!Qx~T)68|Sm?@5(4vfNl;nC0x);CsckjNStIx%Z1{MWz0V4-&`jlp7pESK7P -T`s-68pm!4ef`csM2olH(6hsA-KeUNV3k!IsZL0E^x=L*JG)(J0o -}q?git|JYu;ye_L7*tSb)ldDpU9pIgES})4m##zjifCuI#%Jb#2wn$tq(JugdR_CBNQ1T5$2V6I{6VV -uvx<^2ix8xf@_!Opcvrc=OL2z1~sGJw2>)%gw+zo@yHB5kv{QGOK%nK5jR?s%pF}p5MIn=`>Jq8?-m_ -JrH-JS!+e}Rkmn6a@5H=KUbAHK)8JA5haZBDEb-EFf(_M+xdEy>33-wKR>s;cXDtM3HZ>jINdtUMD=L -&{o0A&{Bp9=l_fvb?0fW?{2BTry*L-Cx)c_?*&K0<*zGR-=WHgBpm%Ncq0_I_gc!PT6GUbQ24=YA>Ys -6>>H}GhZJ!uaf8C8_j$1-otiJ=XV(*vOr9m*XsU*2iG@r_jcH)4p_#<$2y<9i@&WM*Y{MXjygD -B5B^ibpNThg&pIt^B+ljq&|l}E%LQ=y5&df9Si7gr;@PB_dagh5Gb%qw$h2J4#C80(2lw?o`(5!!Ko# -q8HYcy~Tn^@A?P;f2r0Y-A8Y0s!;y#ch89AeCdC&?JI@c-tHkHAptcFB6&lo)kyX-e#N+8fQ>A~u6e9 -J(BH|LB{=j)Q4<#nt37v?YG=UU#fDS6Fv2K6^0y}T>JyuLnF7ayVPC*8Nl!JW&ky>Q>aMqm?Vp4T!N3pNV4B+ -OHUX|-zWS_Y}V_};;Sq{?EWkWWPZ-STfvPQ>@~zG?Km_`^wH8}&hbrNr|hM-jqjR_GhYA+)KRzvEts# -w#R$7@fhl_nN_bK5hTp43L;SphF%_i|p8MJGJCLcl>i?v=@~cdN}eO8&E2+psZ}5(^geQBHo~()Hr@B -ley8UyPU<2T|iO7htiRwn{+*$uj2jrj+KeLUZ#2J$oB{Ms?|)qXZc8hA-bmv%+y$ZUDkYe=_PsKE^W| -!V=p+Z87(<{h3~%sP)h>@6aWAK2mtey7Ds(S{wRtX006pP001BW003}la4%nWWo~3|axZdaadl;LbaO -9rWpi_BZ*FrgaCz-K?Q+{VlK=G-*h!@%CasmV -1_avg;231VBo0c4q6UZdX5Si3A!ze|MvS2jbw-fk?_UE3T)ash0;&@X28C)mL8)D*00*Rjnc=mCDLu@ -L$1aFt}P}O03JY$)(s-O9YneKQ6{yhORY45_tIHX*n1~CFm{WTGM|`xF)wMJY$9g27gUszfy4OU!tt8AxruM<}v+qydy}X)ToIO9kI6J+Xy* -z()ex-q|0H%eJ%4OW-^^6`)M4Bl;M6#max_wh;?U*p*8@Zj`#`!GIa3~8v#(*jS0WFHS&Tb{**U~7G9 -}~IpXvlcFD$7@KvAvLKRsoR#zmy8k?C2%JbYGFC7|cDENWTQ&!zL!U}+O4H^7Q2 -0y+T|zlml&9CRTQ=$~)jDVZX$I4h)K2bg%1)J@gW^fXrTyil@G87>X^!E#p`Z)#Y%Y5L;o>g@?X8}wn -2myM!O)^gTV*+g8+dM1n8tSXC{76pD-$hu-?od~rmn>?K@wwqWf+l+u=Q{rf1HCXjvJg`fN>qY?r(sn -WQV=#CimSqKOmT!@Wu>4f4fY~Q7H~Dc>D*YQS)qT@^doV;6fuFa -4N#BbV&HXLZ70}#EAFy97YoT)0f;3K7swzQg?;Aj;^%g~^d(z{n8E>GmxW}+Fw+53+Xb6;wtw(^Xa8U -v?*Bl1N1Ta(in8{WCPp&4j>N63vgLMchQn4P3!5Io8i8SpM22r$H-{`uqdnLT8*3)1H -Ny&1jP@?ZZPBbHy`$(Vx&j)ClIVzk8g)XTI0}qksAMgCr=%aJ+e5`*2$pT8moIKg0~?1q~i##5{nX?0 -qcmM&}yiHphi4F@_KOIU?r477GB6CZj=;vt5#+3M8xs2_+<#jVgu$y4yWS%hffo$IA~b0sALQ+FWsR8 -*dMTY`8M(<>k&bY(<4%i0-p%y7NqOS;ZYx@-nZdE`Mx4m^LH+Fb?>8z3+S8&ZJYkW+E-{i%5T_N|5G-DXi5iK;F*fNkFgF}NRMUqFaXxY&L_9}|K0BDdLQj*|z;OaHYF^%f5fB5>F$58-{y~N=m1Q@Hsx;#X+ --c*Sk3iR**7OIiqs;)QF!^5;(L&z4@dD?A14gjA*(2{2{h&ECS$N%P^pZtCz?j)uvFb)J;jN(NMintE -xjsA5x_~A@`cicO}?pkRO17eoo)ZS|#A4ETpkPS6U)Sy{Zl*xJ-mDTm(s$S=Z)i -Oa=d!Sg94}Kqg8+{utiK*p;%IN1%lpKLVn3WWOg>i@ZXvG8T9lkg_dETc7tZo|qaCS8eXaBqeI~`M~3 -4UUEr!bk2mY7;mn+$_ih;C8{zEvp3Ab?p#kt_OI-yD6dSk1yHs-JGXYg|I4n-cNDwS4JPKw*|eI>F&$ -@%GK-6?&HJKBg4RvH->~*T;I+z;zsO(dp<2Cn0pJJ2%3VF)hu}X9IxsqY7iEf09lG3pYY -ntdSLj!t_y2IV&g3xZ8u%C5!TVRaC4a5Y*eey%`i%3vz-3!uvcw9_P07h26IluE8`-3B07vJNz@atqS -tPzQ0jV5<)m=Aeg~39Cc!2Ak!B>Ng0G3TyHQG}v!CS!Kk8%xQ5<$vjF|5UwQVtF1<1`9T(U-*@b+A9P -S$+z^j6XZxFFvN1$(xXUuzB#kUG)P4VfT!BJl92&0Ul_pfVMCo!rKDgF-1z=OyEFq04R=)`J(P7E87{ -k-Qn<{czto`o{k(31=D>4foYX#f2FLl>#T@#%Nl`m{Zo%*41zXlW0s;Y2XK%{Efeaet>-7`b~50<7=gdY3&X9Xz{S?<;ZfPsif1_h_5RJf-#nC$ -r%&2PZZ9hd?dj=N;_#f5(i~LShEbAOy4n2>LqSiaYd*LHnSyxFPn(tQ0%&g3|jYk%b?VB0zh6TV|<%c -#m@C2|&hIoLJ&?7Zb#MbZxz_+bz)U}27h)zC-{j(;0$-I#vpXB8G3GG{1uNl0`k(&}P@)I)CEUpWtQ*x -C&WM~vjRVowj`xm`u;VHRqeZx!B8Is0cgGw~w@C>exS;rZ8AR^iV6YK1HRg+~B>k_zv^fYFm8-= -zMt)9VciyX}VP{ZS3GmVzUiB=Hax@r{dzfmy84u-R03&lxe@6VuFJ49od{thlVIog$SV?K5Xx-laCa_ -)*PY_ycW0U=;>$^}#jV9Mc-oukK(Zf){b_T8SK8H6)TgU<987?xQ|sb|kx8uuBfR -J5AI82R=wXH3=D<^QeLWp@*9lF)MXykSPAIy#E2~r^&D-rCIjd@?Y_YyCaOoX@cQyP#3v-^jE&Ip1xe -sptLIHG8elzNh-%*n;&BA@5QQ!Vhy8(D&3v28)JVSqL3Ypk(GX+bsNN}IWX08t~S4|tqxMW{lF`(~oI -pUp)ujO=VX8!EiGgAyBs4aw@> -w#XY*FalWuI4dr%hTrp^K2bABsMeD|(yHaTs=wpDdNQ&<6fyWb*$`DpLQ7iAp3#oU@pBv4`2Wm4uQ6@ -hjYu-aN{%Feq$ejyeePQ`FpmeC@vrr$jN`pNLqSd*YZfAWh+5X`={6RsTs2xqsLJ6hp(4o+Qf-20T^o -q4~$Eu@0SKQM=C%QHOx1oPAN}HkVIlZ -Q@BbN)h>cANetWclG)kR*a)Do&;k^Sl6^pzFU6lw3m6vdhro&gAmC1U2LLJ!h9GzJ#}<8j`YQgIt(&z -dn)O0f-Y&A)P$H+4b7@QoNjsRTBgA>O&ah0&k}ll*oC{l{NNH=_Ax(pcdI}6?yra<4!vKeQ;L?&xq`5 -lo^}qN7wBA(@GEamp5G9hvpe})7023l(bO(HEeV(u<*k+Z+?L!%w&Q$miw#jJl12>KMlbKUuiAF>%O_Xdtx<~fz0qw((6y^WoTzA1o;Si>NxO48qy!$<}tnacq)@JI^WB3jEe7Jhg``g>}y -nBJ1tQBQs5*fq(}MOLj%HbdCbpM2@H{%8&OL_7+rVVG#{Mn85k(X!?xTf0NQ{8$&uGN?9JIdU9SKZ~c -q12FBbx~;3YP!w4r2T%fvYjLugRre0KbFqq*Eorylbe*P2mF;sdOr4@G6$LbC3u}P|j>g=HPN$^n4O% -)v=|E>L!Kw3Zn527*3pSJNM=w&G<%PxAy^6wl&_@5&OiP8Dxj4b{Tb`{z!frp=f3$bAqr?w9dyKL -3GuMHP3nbW_@=n*~IhwXnTvdq4f{zv}3>(Rku1qp?{ORk5|Rx|Fr6_5t}63WZ5ejVn`bjG90?YEL_Kh -93Cy9s#=D)u3qIIEFr+`x9ke-muNXK*K;f9PPL<`L7U5fSXoi+^u%YZ1p{A)Th(@e#vBu_og$6g#)iN%(3-fb2@Z=O>q<=a6H_RK888FYq5* -1XTah;cJ2RV@TooUBkK#Pr-tNKS?w|D4nsi{_=)+F_S$Mu?G39E#FnNC -WL<~nRLBcp>J`>^yI@f4G~hjDs~u3j2p8Quf^PCc8?#*7kYN%eLk+ZEBUI4U*kAlX;Z9s(};j0|dR-1 -h0D8hD@%ghg5A9WBGUeitY0Pn!8yF$uH|4cSU~L)@+SuoqTeuGcWdxR!W4ue>Xe<-D4qz{XR8Co)kki -R^q%37vUYOxPBALuV))h`RZl4zJkEjXjY@owBeP=tP{J%)Wc~`uWQ%9R8Bj -@r0ouv#MMqd4?*S=7G{GM$tyD$Nm(~m*NU}Wgr?boZcfEcnyfR*9*9(T1JN#eFeBwU})VlsJyzY9wHkqiu^z_w10{NSJqqIKv5|= -{GWRL%dPK&8P3iAQ*-;F)OeatWzwTI5lK?rhcozTm;%|V=p!*a#8J%Xz%o3yy_2_R?kUUXNaZWhwbC> -5!$F2X#mH{?(&JupSRMN-2+S3$erN!$KY--vAu9k1AR*n^TUTs|IUa(Z{S;{4(y+J7bYp3wH_QQz^WO -L9M{y0@)e+~tApb~}HS&-j-|f6;TBiZ@#22>96`JLp4}^SPege2xc!rP`r4G-932;|`T3WP&=ukxt4n -Q&S;vh`1KDtQgh((fj7@)%ly(m;XSqgJO-7J!nSNdVd^aN&Mdrg7pcry%?rL0=v<>DV3)o+StC0azBT -3Iz{k*h4eiU--P2m@{esC5e6~cFzvSw{5}uyw`84OHlR}zE{!Sc#xy2BqnA0FUA*xbhIse)#Sedb>b> -hDULVEqW|+T@W+zvtFaANb-;`>IQbV`T5H6Lu)F&zKW$2!ty*#@*`+s5TdU40=+he%MBlh+o_o2+*Bo -pk3MDAu9?*OGXJU1u)I5fhb8E*;7e%ARR)l|BiHO}wit)kjz2N<6gs_58dTONXav6iGvn?&l=16RIw1 -Ct&nz*cWLWg+8z9ZZ3kTLrSWgAUJa(Z}A#ZE>1g4&=pM=eUv99uYvKHgtZH3&!Il$?&WIcsE;?<=8~( -9p-x=erWK9qxd?;eM$zVHZsA|6|s!797#f_scoO`&ZcFTfER*YO+J4ACoJ-zs?5>w&t*egP!?vY0R$B -douwx$ncT<}%Rf2Nb$8&*wGZvN;LM7ETN4oMv^pT8I8FV{Ker`TWOCY~2Pjo9?(C`y>h+x5A-l!8bZL -r@Ht(pj1{ChHHk-C&9oo=s21~lxB)BDnwnxm3XLP62lEu*i47_3(Q?u!&+Uod_#hV*m6&8)U6vjoEd(3 -7FsdC)1fP2ybmL=fdk(qX6N&*4^hQePO9fbLQ9SKcIjsVQN39kLF9E9htam_d?BY~d;lXuXSJ(=uy-? -;oVb4V)jQ_!Qaufxfo_Oz_WV&26%Ox2pz7n&dQ}-E>wvu4R^f;b%=_L{{1n^qLT49Md0JO)l##Sb@f5 -9y7b~oc>1Y~psSPCzQFe(T9HCw|DB9Z!=4k!o)7%IfzWSMglPv>GHZ8-H7NYGDjW^}WUt%J5Fsq1*Td -lR|A_BvXkur^cQ4uIuEnZ7$jm1}#&p9&njA7a|PNvPb{7KDK(N2Ep$c3^vC_Um>+YIjSA%n=r^AvC$i -(HfmDcRTtwxjA6E*T|Vq&lws55NfWMAn96Q^g#?4z5a1DMD{{DMV|pI!hZrmMdy+SU4EP?-ur{$+9%! -Pdib#g%cD|7dP;1cFV6n$-Pz^U<;-qt4H0J@2<<0?a0*j&d-oKlVZ|=;hIR~kHaGkNpO%q5N7!_;j)v -dMaDA^gZ!zHaF%r`2(Cad7zXzSrc0Kw~Y=1Ff!qm#2b?v9Ej2h2qDs~+x=jdTd)A;0VLs&1z3V(P98w -aqV8-<(NK{2q6SUIFac5|hiWCc&ZWFIG{%hUG&y`^?8B`3e|Z-0-0qekC3{w@e|9xo9^i0Y=(IgAs#5p-C^S2*ypY5J&*9A^?KW=S8mBQq8mTK!C+;1(?Jcg4vaIp8H=a%MKg@!VNgejcUE{%eO&tUf_5 -K_`(%lLmK4rFPO3P?YuCpXB7jV4`tBJzI$P)h>@6aWAK2mtey7DpAz -004jt001Na003}la4%nWWo~3|axZdaadl;LbaO9rbYXOLb6;a`WMy+MaCvoC&2A$%48Hp*1nj|fkz^D -9WRn1UYI`WqQ`=(zL7t&)Av4mfq)FlyeTp7>>C^Q|N|72#PSRX5qCSxne?HNl#N~IFqOq+uhX*l+{pD -Sh%w~IMdvWE18=EjX@Iv>4bwT`W?bA5?pqnt8Nj!%;U&SA@nZUnK;wQ7Wu2(@@qq-{+-dtZlh{e3ICT -KIl{9<{LMUl@xSUi$rAo5(u1{a{C<42pX2|3|M{zEqB}JXRDd@7wBmcHrh(yHPPZ`DNHvC|bvj_^ -o?hTM@1 -GJA^Lk?kFf72CF?u2eG{B;H=0m-OJG@aVoN3pw$kV7y~Y`H779JX^vK7#bi}$PD^i}p_Kz*{0v^Pql} -U;rSo#04^YDPb~J6Jg|g)Vqzy-KR4w$80Vxqd_SjH+4fSD41zsiA`Rl3LxGin)ZjT}!Ahw=zF-Uy#Xu -3%A6|$&!L@~}+t`yKd|HXP3`&e6z?J<4Uv7c_nk%);z#GK< -GgG*FFV!B)PGSiE+_vsoS4z1BLBUL*d{fZl~K8Or;_xB&AZ!FH4p;oRc2V -b}J(a+uOddje42!x05<;=pO9Ixlf-Nc%LYC-|43 -G|K^6`f3T)<^M*p+fjNX@)#UwN>2C79h_msVb?s%mMmRCYDtD+2Z)#j7;x`~}6XVB$`9S -tqvPy>2Kvnr}hkCd`vYy+@7-F3=2cR5#jIrNq&YgG*A<>7}teMgbuLHJ`I*U(6+$G{dpFj;Zwd?eyrK -+~3L+RNv>9LC@Q!M$~mAssx$al7Rs?Dz`&g_(IVE}_Y(U6*ImC-5S*0q3zfc)Qe%&lxU$qSwWI}Qh@S -~x50BrC|fca?PB2OreZiV8W_1rpY2Vhws!CSk^|sgRHOdVrHiwq5J%iW2j8vgzbzdN7gW25UT|x3)su -bNK|MS7hcRS4t?%y4f4_ufha2a -8irsK$paGrLCW+3$5j!S(?k+KRZgOu;*4+85m-vv#`I$cC>CK+7KFy=8sZfRBNS{v%FXE2_ -SZ0jg3v`(G@aF-Jh;ei|E^vODFN>=GQ+I_q0k>FAYX1XJO9KQH000080P~d=M{JV`qiqBL0HF&203rY -Y0B~t=FJE?LZe(wAFLGsZb!BsOb1!pra&=>Lb#i5ME^v93R@-jlHV}Q+R}cvnk^@^s--@6q5M;OL0=t -W%NYRIEVA0ap=7ts(l8S3A+Hdd7P#4OMx2+%ISUht(b7rVZvA9}@(p0M6T#MGP7eCOGB)Pb_NGv?J;J -nM7w{7WL3oiNl^phlSrI%s^3BQ$IG-eN0{MP#jE)%tDjP)2%Ybd=kwM&wu)Y3U|Cmp=69n?;F^#X5I> -9Yuze{8*6Y4|9c2D6=ACjvj@l)i68iRKG6+KZy7&_z)!w0Z(zR$tH&ra|cUyGFwfYVU;9TI|4YO@;s0 -l`suh$pM8~Gq@+7*e|V0?(BD8oT<|(RNmda`}LlnuVIC_6!*4;!A2{G;#Ad)@KK;1$H1SB#b!#<8WFh#S -z*5(QmPrXw}3hfUiyeKVgfB-Z|k9>FH*PMQiLH$y9&wgy!RA~>JpgN?M61{WAb+pXENBmzRz -atC6MVl`H6RE_dKpsI|8s-KOZAWSld%~(o4Z<|VbAPG=a&#lzT9}u-`q*cgK2saK7DS3l^se`b2C2S? -Cfo;hn4+06u&4-FtfEa}lPy%gT!CKWrV*RM&Q?XpCTKVNNbD-CAfvL%xPo_qmudbf<(r#S0ALv7ve91 -+k5~`_C)S9g+AUPPVI24`Sh_8Q5eFZKuI*kG*QFb_RG#^8P$iY0cGs^2y{EnUDaV089@)Zy58VS(GJh -cr{vub^45F;f{ztoWn!b@#%L*Ra42#3jEtNsDOJ?%6US(H|s{pK|LDD6(9=lni={}}tKK!3v*o}P6Sd -!dEXxj4-vW9E9|`X6(#!#Rd343U~7obyB6UX!vl)MsPhSr$2n?4o^sY>SHhKzC2HE<-=}%5VAR85$p! -WH0f!xQQS$HsI>;4_1L}&n5_>-~=^=9C6WQHb5qv!1K^KgW|GLbvQZ7^*2ezr*kp6DknE}|6$;n{T)I -KaM12(AUje%89!X%P({;l$NOkc%Y)+(YJ69sN7x%_58Z<4-;4O=Yz#ixu5@Mac0Jyye3#tt`FPOc9gvL)%o -#e%2cQ4F$n?i9$Is~-_c{G36>mf~1pXfz>r(syG;VkkuJLQ(x7M_qEnbNhZwzO`3UuU4w%XH66P25su -+BYO5~a&!jxoamWopK3=y|mDJEzA4e%obdG)w*gP)h>@6aWAK2mtey7DwZ>xD{O+0034~0012T003}l -a4%nWWo~3|axZdaadl;LbaO9tbZKmJE^v9(JpFguHj=;VufWQiC6!9FEvLCuiPCi)r*$`tvx(jAo$F; -N5|U_Bq?RCUt9|X?e)9p4phP+Dws-HXUsFjSFc=Kx3o`@mh{5B52(u_oXCqM-)4?-r>2$i?ZYP)jDy1 -rvR~B)iI=?plI-Rq5ti&RV%0!A~p54TeR06xk#Y#-eG%VsQRic;&g$QyfN+lz48yE9974J3ZPW3cMRE -AxqWg@0oF63Py^E5~Rxm1;lB?9vpuTH#JW_cmPSzLY1A{nasSCUAc-ZaIT`Ic2}%OogZs)hNTOY=>ws -!l2kuVqpFD)KU{e%%In3WQUg&NR;!!V|jP_itpbV0zzQdlJeV7R_y8wphaA4KhKlq(3i;rJuwKXrhGA -ZTQol%OH|@>qz%sWmd?(DD#8{^u=UVNYzJV`{Fc*aWZ-phXr&=b>CR|%hj;o5p92yGERy(^=bS}7O=T -@F#^OdD}SRoz$Kg>uR4r~96yH$f6d=kMQiI{v&=b6Ed039bR!Sh$;r^g5ll$7k=4{MRRMjz3@@$4h0Ahf -ZHOK7WHguZ~|Ip1(Qsj}HB>&fmUzbL_u6Jo^T^(?)x@bD+Ho{W_7H3S5j|WWK`L(onilZ$y*>rhYGBX -@G8!ia6DrZ~Djs}Z=5#SPe)QoswQ%+NfNMohSrOf?A -rf#OkSuitPEk5*p8>$AugEkPsLGY+$K;}VvYyW8sPcnN*k*`J#zTz&hp3LK~upsk{HyotgI|psC#4VT -6DJ(2N!ZqO__tpawC7X{8s>++HA}Cy*s|Wn&tN16`iaiJkuvaN<{C9-(W}f&8W%1+`IQs*M!pW&;zO< -6lGqBvA;TvdSj`M@En7bf%n|xEuWhG9cD3_pNMJcOY8N -56;Uowwzo-^#tuT4jSiDs2G<>nwGSuA88XO|70yzio&%z#4%pXJdR0$&W&sDPB7d~WTMayq0SRNvh}r -FlQFfMs`LbM0z|2-0Ya>3-z=Vzgmd6h~wFI}sbw*C_V(+rEUCFSZ!BF~iYvg+#%9BisI1Gv`S1wM`TP -HUUZ(}?bRPuj-#50hIUD8CiS-#0#)WJtWxO+8Nz?}4z*zaxGe&On#8o*`W3>{u>C`)%uqWj|Hl)kKS$ -c{KMJA4aXNkFa&C@>+hvmgZnnsx!)$rcy66c7r~sU*dODzv`_^Hw@ZBCbl5%5+B>Zz}5!4>?>e -k5gC|$XO6x!>3ZrX=Xtuq_Fg24naA`ld_QOYhsYBSwWnXPZ~a0NH?2Y)tdDzM^B~5xKp(b>?krKh*qm -G3Y<++r#O^4j8Q$Xd6-;*fxt%a9FY5a#(=og6O;>3EKb4Jpi6*lecN-Q4%mvj|EIBVUN{>Hi5?I3`T5 -H>yQ{ST!ljks|BQJdN9$Uyd@wuYY`SEBEJ}czgpLU>ln?@&Rv>K@C_Pw8T#y!>;I=QpLjy5Ey$Q@hFl -ztB6X$7y1pvmc3f?&bCr&l{vhxf;+` -+bj8W5Wa73@ce=ATn^kNyWY(k|M>>We%@D0sLpeWyHAr@>>u#TnL-OQ*P*7P1f2_FI{H$vQ>j8x^!r;{CBa>c9L-~*FjSwHvb~6gFc;F3ib;Y7giWpB;MZ7>{K-+|1P=$#=VB8DDfYeM -5C~7p$=F)IXB`SeHR*Zr?5~DByhh+2-N&QhP6cpf1&Txth&INtZ)f6OXT`kcU{1ml;{n*jY?pY>6aLE -c#mx95u-;A5wz(52u*t9-|;;L=X1dGbWvZ9p<@aaX4kgFCv=ZKa^yGu;3btsQy^)X_CjGA*dGz(A>=n -VpR!HNyflDI9%ADfY}hS(U1hu#+>aEr!c{yx|r(GREVG+kVRJ2v4l4btahIE~yNfqT`nbQ|L4Az!2s_ -2}7(fgk@)oj}o|PwND*OrYocnzfceoIgZQR4yb4>5a^h>xr^pIKi2xlPlRqiytwPw27HB&9ZTqIC>hZ -c^7@xeB1>LZe@}f<|Ko(T4KZtxu2qX#Fcp|s}72SHf|NI(tPbY01??*!*qIJHE>#Nt0qSC$3kD9MnT( -XvTzgx=!6#jHim--I0PTjG;K;;V|8dkag(yL@O6ZTy8qnrWJI>^mxs$6&h&pHZwUE*d84`8^!zr+Ak2HOX -Cpyf#SX$5sK5BL+AK)0B3(q@f>#TJkq>A+3JM_G=s~Tlim+{T`AkIEZSgG8&hozOHTHLNdv^eOtXT4kmR0m= -8PoWV0~63sWo++_7j?bTPASO%NwWi9n6(Xf(bYtD#L&Q>LiPHtjb` -kPL6f9D_Eds5i1J>c(54Y1wu;g>4<3biJIGiOxDC?BRL?+p-$Wm(-jJ -UI-I-TNakIrP2fNL-S7)Bj>in4M7G*zJS=Ek<++*O-iacYeRal7+lS;vHWBpMjlL=O_wRG!1+37i)x; -=A+Y^JmR)Cn~^NYB4;fwbPK}Ge5$g)0%Q%@ztboxnmy(I6b?yi;c#z+C%L$6U7v&WSSdZwWONRAnx)e -Ss5lWQ-P>bVNEFxuSWGFbM6Mp%DV!2MVJg9LaF6hyBhe2>?>QD%FOT+lrI2ZQO4?j!QVZjg7r_mYKso -m7)^~JihPrJv+2>d`?e9MUZti;8@28u4p0S7oHDP8f;{Lo2Gl5w1V%r!JIC`V3k0#RwI@x=UJWavG*Y -Loy++;D;}jy0VAx=x@XAUz(b*bLc!rTc+ocGOJ~zo#^=D#nU{v?kzR4P?_}Pe${_MP1Y}AC;Gz=!|?% -@~Lt@y<`K~t<#U231?E3r{P-n20jOp>T5xOzSKNB -J-ZX}za*|Z+Cq8Sa&uS^3>d44#^y;-RK648@D$3QL59IrA&d%P6Z`j8{p>A@%hBdNvZVTtPYfwVi$D< -UGSVO{$vFqq(1AJyhz0e%l!|sXC+1)5+6fCefBAmsZE>2<3-|kmWu88jk&n_qUw5yMIG_d?K -(epyB4Sdh(U1f#oRgha5{MQ?DH=M`;Mt)D8S(Z)h97B2wSa|8K_UcOk-@ogL;n1yS~Wlt^7b^1dl<*Z -+bO~EOM{fn2kuMeNr-mn+ARrOOSi)v$hC^&vWOb!?BJDcQj7n{D|?mAkmNA8i$@sxi>X-v|pgT0WzlZ -GQDm`CBMOH5QgUQr%T-%hpGIg4f*`0vkk<=K}8U!K{CbzeU;#{0aZYFqYyV=C2=T~%i6y$=qJ{i%!+x -vJtwpZ@T1^F!(AxmVNSeN+HIL3v+l8ln8#R?1}!hBs6waG*0JH{3+Ok(zMnNPsH5rhY}|NgDGbe9tS= -15xp{kqhBi-d6f|~d5`?r_8cb7F66!zE4i`w^+OOaUB|X^z;;%kI@k))1@3A+zXDm*ofK11G3Z%4N1hxhMdg6XHa -3lYJ&KuHFDzmmi6X&cU>D9hAtTXCtAap-6ebKJKG-_u+tu?$%ti`~ha0`ak%hbf%#rgXa`_Ss*IsV{_ -XHR>b^SAGhKODdR{`i&u;rI+_59Izy0s|Jzw%x<8j$R$V{`#AfZ~yk@ySJzB{{H^M+4=WB{Num>Czym -F>$7=$b)78IZ27NT73IzC-RdWng3m;EZ-033q%8|`2=R;1VN=lUrNSP#R|0mG;p@7$+{|-N{Y_=dMjc1-9PR8`O#k-xA*w7{_g1c_{+ -auT>iS&9fSGJ5$yvSEV(0eB$f?I(bP$n@vH}&VYtj1V`S4-UQtHQJNK%@*bWb-wQ!@+eB|`jwIvO9x9 -Fiht$VydtA-}7#lv3k50dk?7#7peo15In$Z7&EzCv1=fG}(%gn0M(q`DzVB+Tv9lf=mk#EgE@Ieu}^d?C}63f!ip#Gl|UVHuy~~LRg^}fgy#~tcK?f^xBv8+x9{z -|U=iDUtSp5H*f8Ui`)2(}-DU0#pylyt!tcy4gf(n>f;=Cf -6KsdR7TqI(d}4cXxu_VPufIyF1VN*W?e_N*V{8H+)hvpV{x>=bwA#-(F){y$gGHQ~f9YDcpVW;)OUEi -hN*m8+Za>!xk85Y -oFB$fZh-53tGDEP3A#+hl&N8v)rFuq%4|xERgFGfl@T{V9tV>|S~;yIZ185wl$jh^W&a-UUNb*3@*0d -%=1LbYI)`IxnCgSaz*}9=kzvlt_%_l&8mC4r^oSHW)=+h -kD!B9{J?^c?_BM%jNDAEcnOw$X&^BwcSSR}z>5(VOVgtfRby@~TIrNA8s5*AUfHF_l+xpKM!f{@^-6~ -nPZGo3-EVl&L&@?8Z}#Tcu;?rhSV06Y%7qM>gUx|P2+k&u47tj<;<5h8io71_ -}&Ue@}MTc03D8jiQ8*TT~rJbfj)0+UtF*0Jw(_>v>G1sLLX;dX7u?NT=F7`QGyrfu_}fymRXi%%i -0$pqV^a3}a41<6kf{nom*Bgt_9;BT&CV6MTmJ6<)N*$9za3Vah~l+X>*VhccYy_QSu%~vv>a@rhb@>< -6=^b7;yawNP^iUDHgF2$0E9&UuUNu&`{hFxhGsg;az`*$?n%$O$Pq!BdtGHWxB34RPBM=_QmOv>48g- -ba7ApU_g;mbSvqN>u+Kyco1_1DmQO4K4xm2tyDN~8>4c=E(49$Z4AHLY+d!+08p8jy7Z6V%NO#p_b66 -TqY2$byH!^e%Cc#BH!rRE3?(8yO@T9-NQjB3>Y|u(BeN3tfoZFglt9;|4`sW~_#z;8qc)%F&wzv0S?; -Qh~D!9dIx=Z`hl9+neUGPA!pwZ?`t@O}Tlbv%tDHW&jKWdbS(!2?J)Kq3gL?ZDf7Bx4xw+r$Lz%KHiP -0(Ql{sX4H{KSrZ`v>p@Dxsqchk*+E8n1-iKj#Su?;pX7Tj#Z<` -5y9~r`KtAn>sC5eV4vAOV;$`kK;qFWuxeLq(@+rwj{zjYb>XH6*oe>WZ#r4G^SVEk#@vYQ12g -w}s!WF>BQ6ZzI@f>(p -UH)UeE&g`dniN65|?3Z+Un?rHLvN&o -_qDnN0dZ3$ZeJ+UxfzmxrNXfh7uc#TqP`(jQX0tKGhM{GzMNmG66r0a$3OwgS2v0MEOPqUKK=-Z#MD* -`z*?5UJ}LJJWR0g>l_WKBk%4ix)42ReoU>$O-7Gl%vM-A;}r*Lc*8^a^jFsIO5>H>doa4 -0>VmK1&Y3n2e9RMOQJk^0BFb4(Dd@C$Hruda{^AHWb7iI1`#5ulCfUP2DZc2UT+9AOC07F?2GR{z#gmsVHe97vN8w#6!q388eX<6X#eTjf^_57MeRS` -x+vT?+8GRm)1*2sNsLwDV|5#gy)7$sT6D4{plqQCemqvyuSf -@M+{SXlZSYMVW0;Z6{dOk;xSuv`5^GpFM?UsJ9ypoj;>KQIYMA?Fq0L{~!LNJ -+!`W&$hC$WK@yyfW8Us`@3PFmyMqbExUF8S5@=XD)@l@@I8+L-H<@xr0a#SXSTHvT -gA#Oasq`d31Taz7yHa+jonOu}t+8YrBI~UmWcVmPR|j(o-BdH2O)oP2NH#kNtQn_%b(rh^CR#UYb@62 -(TsH;qn&A|~T=>c(4*b?HZ$VpxrOChuX@M8|b>*#n1(M&Oq%T6F7f$C6^S&0(Dv?3Yw)K5A4bO<)#WW -Ts74Pyu&p_@~uVyn(%v8N**sA$blYU(&)!UrQ;ed66@brF_>eUKqfF}{3qc&9?W>unXypv{1#E@3Udb -lnT-fH!%@6aWAK2mtey7DtaM>g6*4002G!001cf003}la4%nWWo~3|axZdaadl -;LbaO9oVPk7yXJvCQUtei%X>?y-E^v8EE6UGRh>uSzEh#NZjgMEz%q_?-Dp5#GD$dU-ElG`s@VU6sK< -e~h(xpW?IhjeuTmVo@0|XQR000O8^OY7yacoNbjRF7w4+Q`KF#rGnaA|NaUv_0~WN&gWa%FLKWpi|MF -K}UFYhh<)b1!3PVRB?;bT40DX>MtBUtcb8d6iSaZks?5z4H~L_z)veYA5QYZYp61C#a5X8M~2B)&fJ> -cD-xuE_V6*4j7VDNu+j8Ff;G*=FQOSy&W(P@1i-(qDeT9Lm1B%lW*`&Z_nw$y5I%`Pc+jN&||Iw8dzJCLs#B%RP=hTHEb6@hl{YVU^9{_<7^>Z&M9l;&%S7;$z%! -nrGziSVq0X5CGf1iiH?4)ltq_O6%jkj9&}X*RuR$GZpi81F5RBAyNZ -)zOg6Byy;Ig4D)Pcq-h>!+7aUmc!K~%V4#RCYxEXg5_qlT*RRd5F>UL*Ji$D@{`3mQSKEv -nW1G|nDgjcTCX92B7=e*k=C3dKaxBKsXA2uwL_ugk7iziJR3R!o`Y1@gOlcTJ665kF0nlC*Mmr=z6YO -%)Wqa3K`V#}KIJ)4PlZz2gRwHUZhZ&{JGdGS2OoylgCW2srp$W*;r#X=|BRmF>~`&y>~?Si7gzqZKe% -vmt@dClQ!i3!+g;L*%Un5*lVM&vjH&IjahbcH9iSi!`u&%k@CEwU9t`T6q$4w28p~vg4alQkiKi+<*Q -G;f2)g*2`p!g&q1Hvl(%US(X$O`3q=eTnvQA8!y>y+1s`0_^T -%ev>858H(Th%4`_NwAAUA{U!y_$^p+!LXA|2*DwM&ttkITQo-w7c&L2=q0|XQR000O8^OY7y -ah$&~caZ=9qCx=xF#rGnaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT49QXEkPWWpOT -Wd6d0fuVuH9VEKN3#Q}`LxPY{L_9ht-yKAZe*=1J?yVu`7e*XTOH;=d9KmPgs|9JcDx3BxZ|NQ44-o5?$^~d)g9$$a^_RYJGkFWbPpS^r)`o+7qAK!M%e -|+=rZ@zv1-J1`O_kVnR{2P7t=YRd?ZpFTc*{PVwi9M@Id#ozq+XOGXn{r2%CpZ)&v<(u!{eE9b_-|RQ}`TKVtKfL| -J5B-`y{{HX&Q~&1i_~+Lj{@dfXZ@>Mw4{!hc_{pP3`0?@a{o}WP{rIQ%@9y{SsrvTqA3nVP@KrHy#0Q6-xKli@%r62KYjn9+yD9fH*f#=SAO-wyKnk+81=_DAO -8IPr#bwmU;qB`t2f{GNFV?7=G~hQ{Wib-;Sb-w{kj|f>h0HW-hKb(@%sD6cl_@AKmEr{{gQ$F?jFeFm -+!lKXZP;Zw`c{^k_?$D4lh -c>B(7|I~BeKXixvqJL?zdi>$dWi=bh0*`=i?4qDi{Jh3@yp+Q`S| -?t+t0uJ>WiQM{#T!W`S|Vczx?fQe)o&d9*^I>dGl$Cnasa6$^Xw3|FOIL^ZTC3Z{B=-{r21M_pAR)FY -os~z;C~K{OR?-zv*TE`pw&xsK@KxBH#V>|JNFR`~Ka(`M%xcKPL3=A8-Hoc=!I}tH)nHylvTO>HD8nw -|n`I^?lVs|Mh3D9_#22y?*!KzU?LWT{r*b+dp>Kzx?+7`wy=kKYRcEM?U(`pLg5mc^uE59OHRB9>4!x -|K@-7zsE0r{g3}2mCBD^y5pa{{kO%2`0qcwdG~coBAJ5O`dB) -MdI#+!9)yi7@Y8~gNU*+7tI-cjee^uA0NyF!?`&U=48b08QZ{DCjK1np=`;uvX{KKcte){9%C-;wk_x -OkNGj-3GJ;wKc{u}Myb;BOcPk+4T^Y}^s^mqU8{OowHy^;RBV0e?z49px(dhZTkI3H -q)Pf`1((eKebX*fwa2$@*lr^dHLBF|Fr(~tAF|J7eD{}SO5BtU;OT?FTeQN@4x!uH^2VZFF)`9+pn;C -p??0S*B=n97OMaLn-6Lsmuh$L`Okj!i+}yy7ys8U82ZTQj(c5c^VR$RXz>q^AHTH1JYF63?0?oXUiEO --t7DGiRjcHB)qlPEpE~&|UajY|e|Kc|=bq=Q5!KCl@m`&E(&Bi&dZ2=jco}ufZZyWLac2M23*G;j{e; -JyuUdNf>(MQ*+5a4sua1Mi#=2gOEBWvluf|-*t25Tv{f_hHU|9Wue)?F?SCer(WP8VgqS+&_{>Y=ZHZ#|Yah!wUoILBEhkCyBYxK-K7q9zd -J@|=d^{0B!$2_|?X5=`T{iidXtjJ`%J+*sAn4sV%`n}?%oA+QA@^JM!_dl#SLUHkaF&F>zU*m~99IjD -6dJH;G7GwW`|Ew(!{R%HVz5O5OC?32JwhN)?7rI6-#q&B@=N?D)*pAur(7&5>-XED0DU6=4tLLlN_t^ -cOy>3VLub)?oj5-3qn@2K;gSlBf`{zhr?o!y8o0c2D@VA`x#(6nFAdIp3h#lWNgzBF@)%0^=$FZy^P1 -v^V=(vG~y%E4aUq>_ffsRy=hS#z1%I~vHLyeOTRe%o;|C1_B)^b`2(5mWoOXz7VfCt$NkrX0k-V*k3D -D>YVewMxaqf?o%8w9@6w{nPVLVR=B*d%=r!sAD(Zt3=XX7|Jyf}eY||}lgG?~rs$uFp&o1<=dfDNC$eY1+52s>ArtL%v8G2Lm%TjwEQI*t{aR24l -id3UIq%=~Clvc)@%lwp_uFfJ_gnSSAHYhukI+C@x&741-BGVQf^yIjCBbeSY^w+s6pa!{yu0Q+_dJYe -uUqs0`wduF-ftexG@pu-CtS<}lRS9wr+py0Pc%h86%&mp@HTn(dp=vAoott$yc7E}Sgn4c9+ryPE^8t -q{g@VZ*Rpz-^|G`8`d-Cyquh_Z-^PfS9+skuSwK6@e!pH=4TSriokwq&wtjvw(->6sn|eW8VE;d$QsxZjugb;WxDDtpRSKcPjT2Ys~8Xw -|zIIsGE02ljRKjI=_+X!Q#Ae-8ffS$DtfgE7nfIEGcH$_ItVgJ+=&0?UjMPt-*g&tk8%C^I7$W?XgE1 -Iya|&gZlBy84!uH65&Au^_2Fzo?EX^{F3Nl^$Y3XplgxjOh4~G -y>3?z|0q`QbZL>eep&vC7S&N;E%Vy@Vzyt>T`~_?@^;GEsfb6iWXX~RQpkc1RStH(4Mx96zhRI3KtJg -)VNK8|^ow6IdR7NEr+4LnS3pT!EQDd@NTl9pwR7i$`Y7C|S5YJe -5T_Tm>IUFdb>aiSkkIVUsM4@80X=lZ969@;Ny0cC86&SJF~R!_l&#$xv}gl&pT)u7=)E1(nSKx)e_7k -}9Mc(z~C#um}RmSwTQP};-kX2}-L0lL2Z3`Cp_v(O$%=SQG*dl0RVH1=E07JkWz2e!~%2P>Xo=lyEYc -BpkNny?qId&64yLJcM3>UC>35TTfuHjVe#{@H53WH5w@#%QZI*a*1FJ?P1f?#Ezk^&fB+v!`k@-tG;j -s|EI84to&p{Cm6;J?UB}PRR<~-awSP5*eW}iX#l3|{w{tGYs+;(%}m*6@)F4YDWtRIhShC6}jelCngF`>A8Ji1>5|2v -%#Uz4G-VOth=zwMWt_Qngf5b;7o)xg{LQ2Pmi8uG=vCAO^J5Odd4)owNN@bq`=n%l1q{E~hxTzf{jTw -PoOKCk0n1SKaT-b=%aqaRLZ4)vCrah$Z%`P%Z^KETUlxA#I352*nRUNmx;mdSWe)aGa*>H*>yKNU7~9 -7Yajs=Z;}aP4`B_Dfn;m@Qm~Tq@T^BUJ-#E}P?ERj)(qcd?0>+TkFG7y4Pf578rQ@8e$BwnNLY`B9|{ -{fl36FhC-ngS|BrQ(~&t5rrktYd}U>+JpC+yNU&6a1PE*vbB%EKkYi#_quPqhBja_x6 -GoH>m0Z8uvxwtheg5>G#IWaD)EsR?muhYl~!BIcY8(*wl%@%#(5$#5QcEsyh#WAll9yI26`*QjZw6Ll -eMJ;3QsRg0lY2~YavjEYgEC-cD0Gd_;F{fBJ7Dj!}Bs} -=}lJnw$-OV|Vbc_n`mjqz5-PX`Vx4&>mKh?#pq(J|U4+@ICWdbtPhfTkK-9#X#~_%)GN8w@_L9b%W^2 -t5cWil;_)KwoUc`Z0JkX&F|99wUt*5$+xbS4L87lVTBWU7Jr8OpHsrgMy7>$8XnBcJ;3` -NsuC2P;pdYlXgp6HGJ=f67bHy0iHkAzK5m23@o`JRp|_Y+F;$iHA2Gq=8LkQ1WA@x -Y&_WNqEZa4ynZvVtvB_S_L*l3#|xt%N{BcfMAv5U9KrAOD#hxxQ4gL_chf2j6Lx)J)JmHUYWZLNpN-0 -$o*Q7(z;2D=wwza}BpQ^6v{QY*27?HKKT+b_Y$p>T2NPZb`j0rxWY-trxiwTBEbEf>==CPK;H9@Fi|T -gTqV)qcsi$9u6_-BG!ZdAeE;EYqLsS$*mnPDjq#tE@}Vg<+IKxq+~hR(;D^hp?<$f;*(0s8 -mCFAOMDM8cFE^PNK{fZ~ltQH(d;M01+3m6nETm!AoZF(SeN`>@qbbn*#!R;2d<9$kfF~n9PWDKu1~`B -`m?3wTGcTV+XcB+2bAfZijju|F>1nMP!Xp7USTUMml_C6>B|*dR@w=P%rr+viRp%Z;JD0Fj^~Wv4$C^wlie?`iw;M<4KW8X&k-7d%}ZLuPR0u&y?nY4F8;yw#qe -y`7g)ff9}I8^oC`&cTlYZk^kkr<=C%86zodn(7Zx&p0At!EApU1>jp0la2k^QEMtx#SL%;O0a?7fIVL)Ws~2M?SYo -`vd#k1k;10q7irB?tQV#7`Y51Kf7LKh*Z^K`g8SD@kw&=LjbG=<_M(@(Iiht^?u8f%n#KocIR9GT8oW -?~4xX+s>c(iJ0!hv&}bDaF6ZI!B^{R9)Tn|jaS#Q -y=nlfa2O;Une=dT^9*(jH4mq_o_dK*;(vA2{Z?J{^ZtczPA%*gMiUV)}2vj{gUnjntP~gc^87M!HycPc&aR6UpPr{ -%pL@@iYtj$8b-PBg!3Ht{I*|mOn+_2!h;hmf+8Qp`0FsdCbIW;%Z0+k@4#w*1P>c_aGZC)?U$Ua+XUg -QV{bafp;^MEE-~451=!$dAUx(t>^{&BhtaE9yvV(7qy3UY!;aJ*_^`{M8Wq*LOPq$qM-7SK>q%ydzmi -d!AjEYj`+GQB|Mt{$9E$;juTL1`f`~6r^||wq2hkF)dV(vFt^s#FPCdW_jSZ|NGjJX|FVfw!ZmL=3SL -X604#1g#mz;)`q|y$v1&4bZoJPFc0b9_ezK6g$cfWyso4f%|+PbtQ3;_>?m08Sc50&&CDpDJ%jw2X3K -^iBa{1V{aJe3p<{i3Q*-7vyGq!vASTn>7<5%AOmt%4tv_2D*A(cwq!__+4I82BZS*q#TxGJGcB%`rBU -C3HK5wG4l`^KiXGuqMencq+?cI&SkFsBh~@JRsfe$E5~9BnhhV#m;n9%_$Q<0`wtypAAgrfn&Pd<>wA2>2j(f5yil+B-(tZlX=5+&jY+V~+;Xsw7^vKU(shN`&Sff>%ucZx87< -0r2T5WI6^m6YVT^^9-154bo3;k>Hwb%i2q<;4!7`A+X(g5C}T+MxBZe~hPK!jPjjj+R66Gb)kdDF{Ng -E@lVfTPkEW7=*%t|dsO`7dZwqTl>|<>Nsn{O9VI{+Nhu|>+E_5Xi^-*$bl#UpHa10Zq94ZZ;;2CN>grc3v$DW6P9E$|nAL?XW$$k-XH3W>$P=I -H`KY^J>q}4wq<4n9_tGmvmGSw9=oOHCn&1%!1aUu%YHSWaG)A~HvHgc=zvLjb+3^}CYbVQaL<-AMvPH -rIf=OJ-HjH>`u!G(Nd;|_pFfvRE-}WNS;~-eh17XKxM3a6WX!8SvH@5LgX2})wG3?pXEDv-7Wj)T@9w -&YYxw+#sh`UUQATXwU_5c?xlYdy+%RdkZy32)Pg;1DFjjhkpJdT8nr}L608uKK@FxUf=cb@l%@Xu0Ah -R<(thk{~#3HmH{-l^aI`O=%j>ICdJ0`!*cMO?^>gQX`GIs-mBtzAe~gl*a{hef*Xe%miuyz{bd<ZHh+&(5OY1fJM#_l*^Ff)fbUt-D&39M$1XjxSfroTgqpxY?-Jb7`vUR<*aP5j(-ApNO{y+BrBaBI -IQ@aR%^5q6>aO0;vS9r4A&q&vPVUhKpxOxJhUfwaORkFz6H3N(ZZr&*+8&`k1l?R_*colI6&9X}45LK -y|mvc=wSg&-B-WRlpcg?PR9B#K-t&81{jtSP0+*Gd~7J5LTT9D@gjg -|Jmcc$m0xa=^%x9IbQp<5BkMj0)w6m`oRW2Vwc!pf-uSxR{;IHKIw<6{gM;=(wjpYb;09(0^Z(~@M2_ -e0}-)7;&Z@j7Te?`&wCo9nM;VuGf?N+R^Y7^N1JNVUpM%7&p!9QmOxx-4_sqRYfnZ8mpYNbz*X7vg3Rztz0rP5iz -=E#E_E@sQx4+;hK(sdncE>x18kh>z!|d4QJyIl2-4JwcR`WD)_VW0Ea6m(C2v>(KTig=CbbrE-a*paU ->A2dA{8`xS;5FtOFh-H&Nn@M$FvYCg@}xqmF{^nobLr`r!_8D4VEdmivhT<5SpiZID6Av%1LFqv%d9t -T4`&|)aMUB8JtOgK5nE)0_g=RLpFy`IPRmt7w8j`auhtNZ@k;txMN^=Q}^Q$cZWqe@ZW!<@>lYok_?d -e355xLnLb5g}6Zcc3h%mCKBG2&kbM=S~<0mcTMQM}kwiHm5zQdmSZVkgb`?AU~tO?9MY~Nho$4N*6+G -=|#cq(M5~E{XDEdsJmb4UU6$4$*Wl%z)qc1`tLUqa=1f1V{HS8?ioT=IBxFl;||BTRTK<9U<>4$d -;>usrA7W`D06b+7X@Lu(-$P6X8KWYC8@m6+q85^NEQ^~jYLz!s%A5{{vQvFQGmGwNO^{@KB{BAi1Ip; -lx=Ql|&EoZRbyQX7DbWrBrhWl|`(PV33=nk3BhOWiAF95dvvLs3Tw;;x0|z`}ccQXuyPpRCge+(apGa -N@pO{(tj_le$;3aA+1b6W*+(2bb$`wM5WtE0WFp6^4Raqd~bY6*uY6;6+6ER?khv~u^`e#t?y=&%ytFxTc`5W?kIR#>=3-~f~`ym4CFxp#C)+O0> -2SnT-Xr0%uDN~>V-wiNYCs-oY=8eN`JVKWiBiM{Hu)`GGH00N%kW4YhvJrC`dOz{ED5BV9ga$1OqA9G -?xAAsS5`C6wj9pL-vmaux&LGTe=Nc(NSWKx^)m=@Uc;>k0Mtk9*7QBN{dk}jvwXj!Lb#=|-_643bT=k -t~a>Runi+^b0hY!pQvgJmCR$1#*-7X@N~3OT`K=OGh5t^M(@I0d&~GR@;)hkz`Tmd8G=vTKF#iLqrM_ -(@A#84M3w=kgzYFjb_`anCPxujlXx3WCUD_o9GkjpXoE*bQs!vO`arm{=wt*Q)7p?0PQi3GRNWd-d!9 -d~%JgB8`e!g<@+C|6uBZ^G>B-A|b>d7;a(6BkPNsWWVwfroaj)osOr;X(9q^@N3VT3ssB~T*%lQG$ON -xnM8z-(IIjg`2T08%CQulg>b$Hfh;Hf#6l&e -0d5u8>jn|QQZ9ATeik`JqlcBRQFZ^V7S<$=1_gMj$NMLdB*4}D{Zf4hi?!c(L{A(CgdhLxXo?t%gb-D ->IR_B>GcdKlwUOnOqPG14IvUcCs0g?cI@X?Yc&8_t(o0`JX|Z8z53`+~aH)A&u4`P}6+EIa!RZ);J9J -UtPzbU6X)hkf7;ne3H)5z~#4_jvJ3hHHBGrp66}|3t&8Tp1CyLMPU59F_ns9YW$aLrvl9<@4`;7krXs -w@S@qiejq$hMSMHMoRaJq*#xLA-F{VXq^eufJAxu1?-OG_t$yfLe%Z^~0Wk2xK_|M)EM2{K)7|6T9NLbV-|ac=#G1F5?oR!G|10s1>^FSXIi)KmSiv)o4I -gv&Q4pzd`dQH;?AWGV6`mze|{P-c^u -UDf-yeK-x|PA59px_hHNoVjNyV3)hzuITI^&8YfjiVZh4^Y^$}aSYIyLO2(MXyiQhHVu(eAvl@a!v9y -Xhf30<<5G}znx?4<5>jV;#5gP7rDk|$4KS9*4r!yrpFOZDoB4S8r^JvDmC>WnWo2M4#boyT8C(JWNiV -vVNmFf~?lc;t)pi>lOuGiqGdPIQU1m(z`i@4Wv>-Rl579CAF*VGq}N5$|EOFUu!%wan4t7<>GPnzWOW -*T;0KJp8cFQBic>_L%)?E&ipLdh|m1A=)N%8`c?;)}Ed=3)$YOz*^uBLiEt~?N?j(N|pUFEx0v7Xo&# -+4kr*6xMz9@?&*#~d$6=?$k!1gi&w_BHG3aZ_qv8#lVAsN8hFBw<-y7=Vz`n-a%qg@W@eY~QuJ~&D?I -Gbb@xksiDyx*B*(}cqQOHDM=h-920enp;fe#&bHZd#@|DM7JtPsIRUh~HmXo^ILoP>VX;9sGoT>{ek4 -XNQS0f=bjy-54g9!?!TZRtqVK~?G9`EJ4;R)($r1feN8E6qPD`^KnCM9?l6{r)fg;lLs$bpe{2~s(OC -$>IIHUfy&Os71^LY0l|5l*(`5+B1B7XihAS2oH+aQnju#m*NF>s~Fv;F#usl^qzFgDULfR*bBhXZ68I -R`5MSBY;y$6oh#8s(3E-x%9USi+sWvAoWMv}o^FgiTf&P -6ME0)=q(m>Vj7r%skvGCZ|KBa+EC*d_|h-x@J3}`NM+fw55u`|>Re>;`*vNR$Uz5obZ;&Tx@C#s3#c9phVrNUj$Yh9ty%x*A8KcO$-q3b))X}+?fY`P4mZ8lQGF_=m8QD?2zAc -tV6hQF~7JNBIXf( -N{tMN`TPTjHgTj+Ho^ejFJ^>75+Yv-658v`-7n{H%t42z;jJz5(CIYV#kaBmQV6i^CaE_=Sj^qisxvD -i$>1K_ZsK^qoQG*H*3Dfuy+Fom1vEiBQtsWm&($Fw9AjBj^bgV=Gqz+hzn}VTzvLA5&%@FZb~JgEsfs --O$u2QQ9=T1QPe4AET6Y=wSX{X0=GDWxS5E*u_k}wS#+)uu69MD)3Xz{_slVsGsA=>-qcF(YU2NDK=i -M*oajt!A7A=AcQ(KYpgwxJ_Q%uld-qiA1*e%dxA5I0cOhtU3Cxb)7qcBg0%VQxV5d`@p(mD(J-Ys1MJ -yC>>D2&X+kbuX=Y%0F3KB*2$c4DkwM+- -Fo;>EKeSdl!NVo?{XB{0JWzSR93ZI(Tuun{nyPek{oLofhjp*R(=wL7E89?Y4)L6X7KiGa(%<0?N|Xo ->ue>R#Qd!~Vbp`lJ_dHnlYSCqx3PnuzickL&{~j9xvpk4^&!?thA1To+vIIJ?66SrM0{02Lj8nJ9i=d -{WPS|sKc@oCJLJFZO``DUm&-)X~A2{K|v%`2pYmR$<&EpWQSjc9HuKJgnleLqa(qvTA+T}6Ms(znR;I -!BQWp;ucVi=4?^vAfsi@(Z8j5wpQ -_{*5Rh~v4lqgtnZkQp94%f}Wz_*`vWK4xOfOVfb`ECT$e8iSZE_WJ*u?{%F9v!{*{V;>N*GbqsJl;y3!qR=FiuU2eUmJ! -{ZU+ye6!CHCL#v;xZSp7?7AbFkox0aGO|*L~<1m@xkxblYlj)cDDd6Z?u{AyTjafpESk&bWRm-Sm$H$ -Z%b{y-`LUs>;Vx&9OdLQelQV)exp<2}IL_&+?J3t+tR=B~#?ta7jOE{nPRJt%Sxls_3eEKX-?x7@>7S -|0%?$?AorKyA1dU`T)ZGMLBeL1W_U*0hw-ZZj4TsP-|ok#H%&|+@>fnW0Qq`QQ}girRuy4R2iP^uOREGLnto&=H9+|%gqoPB>{roA|Z -Xvu4zrm__GJdnr1L0;3k*V9AGo>Sl?+G%MjONME)B+08i9#koNOrNOyAiJ>kWW<&;>Ry+4oFl@Ee-4T -^j>Do>(vrd(uE03bECk{GcC)=;#S;Yp1YOy6$8XfVKD>6$TY@g(9EF%a2pwfaq!{O$*)`< -stEdS9Q-2GDbx;U8dFtjL(0)Y?&8NEijxvn!JmbUb#;4#?k!#LIwb1nYXlhnN~%Yw0yhbNy135S&sR- -p{ngXoTAQe_N%62HX4lGs)7^_lMTU=D{KRM-USVKyrqgE%AN6(|H -z(M2ub%%!b8g~Kd`uj0ramT4=+leF3}%OUd~0Eg$FST$M|kyo?z+rD-Rp^=THZBAGJ5AV_1R0qC- -H!`W9K2+bb>1hPD-_^y?Te#C;Lqw3_*SF1jv>L>RumKag`k -rSxxo@&+G;y7&$jfSo`K8d}4X^r+)EEKy4>!tD*X&HtzH=9v -;m+43zde;ALU2kb*PzMJ()h&mNimy!|NZUWaE1A<~25y)`WZz*n$J7&rSImJ#A1xS7o^59|BzAMhEM# -kcE@v#5K0l!d0J6D95@&`qm408oaXKohbzQ;d%kjKd2x%p8_oQYJLEUrpWXNlJK>JZN9yhc~jkt_9I0 -nL~`futU?kxXfDY5-~F0)DJD9+R$1o&(o9PQyE01pH8xh1|w%3lVBE4X;^jfv(Q?p;QEH5kOnkQc+zbb3d%U#(I6FiT>E|&ug){is{ml`_ -KO?OlMbZX;IOj6GXtA@Qls7Rkh3cI(2SAaWaq8r!C93RI?>w`mGclThad5kP)LWlu-yGpU&4b2$CnT5 -ye)!Q`<670V4HmM1{j!6sm0&~+_JSe6+1lBM7h+w>+q&^uTS&XM!OOY)Q|^S@G|CMu;o=Y9DO53Iyra -t5Yqv}*V1t`OZmL#mpsn$#5e4eg1(caz#-x~U7k}N&b0zhufgTfJICZuA%x}35x4ApF|B)5!+L9zM^+ -fjDZ27Lv1=a#@PMiHo}5lrh@rlkaSqg+I!t#R2+k#TQ_0h>W(qVn5;DN$PQ4Kk;CURLB4+jnQ#+}gTl -yZuU~kvMOzK`oI={?=wGkE`do;>2ol@_R*1@VRHuJEcC9HPc)8}<;_$9aeTK7ssH-~4jw7sXN(@5`Q= -e=}=619V>tT}Y%%!boZnDRp60n;-#KbzFOo|JR1rGlQy6#LT&^+s2A4b1X5_GA38lBx1xRlT;yJpQ&9 -le*W%&Om@|-(A&yA -QJXL(7$>Dau1mW=D=@Ua(%?}x&Nwvu06-oT*0ZY2gF=LoYP$KCJAJ-u4orGo>o^2)kY3J`2m^<#JG6a -YwE2lL{d7^YIzwDa2asoWXxa^RPcDdMA~q=!}ZnteJ_F{-;Lb@Fb^eR|a;pq}^Kmv>;OciheS$=2(8Z -1A(8lw)|TqVzc_8Tw4Lqkd(o3NTB3X>ZY1G9*)S0*5vF;Vk^1xaxPI*p -g4a9a5Odgk0s|JE7;!!P6LND(N@=9ZGV8Di5`A~E!+})Krd -SXQ@EF@@s4PtlIaE)Jd-IjYPg9+|?FDtOC)w+18UEOFPtbW;>}cl2CBvmAh|+!b0KCN5&>}pVkox-DZ -c_KUq(GDlodlTYX|RLF@=hmH*i$DI4X|&Ikqa_F)CH%4c{G-5*JV!YUO^f&ExI(+G&7psyzRx1{*}jY -Y{6T$$dwSI^=oQ}_Eo-I8FK3f>RuPqe(F|GWpo(e?fXEyQUdQ-9`F6Q;NwZYa(Sskdiy3`w;*!ud%q@ -iuji(c)_Fq*rV311#fiX>OcR=Ecn^dKGe4>jwZeW3xt(3NGO2q#DMNb1zLmufV27kH@K^CFM}bcG-P- -34PN$`%mS&GIHAIp#c7AhG_j-^Vo)*^d`9*R1Nu~9&bUeKm5Sv3>k>Rt!+b;AodxTod;SzQ)6TW?7gcHX~py -lq!P*M;krEjsdrL9Q!qd7$ofkXxDX$rfOK1WqN8@_lncQ*vPx5XXs3(bHk3Mzn1WuVbi_ -y)-&R)5Fl{MbnNHruWvb9p2xWq1y7lJ89h?t8Bh-8fJj&9_$$*Sd&4W`*@$=Am#MW5`qMnXOOViIzh3 -)6(q)jm9NwiQnFofS7NwkKxixLx8H0~2bNA-VyN;hT#4n4OYKag5hYQL#O$s2Z%ffQs-cuqN%G2X;@Z -6am<}$ItaE_fX^r?=Oxo$uzXLywnu$mmfa@ -?NU7e{!*TKf^gJC^CIM-6pt(q7u*75X(?+wflvanBv7ToIur+q~RdfcY0;Lr^*THPobvjjSygZPmlhu -7ryPI&vWZ_>Runh2u8H<)RrX`oUWOkskh8+X+gb)KtMvO5}#sl2g~sGq055UeV&YL`^&?^8r2qeKpi- -|%UW&;8JX|XDjbg}A9^ii;hk4#;UVqs+CZ7y{-kxUmmA$cygD>W>!0 -@XX93U=nVq-4L*45M$r{5NCr+7$ipI^cpMch1 -nrv6xn}f_A`I>lYc8<35RvP*(?!!|Z5ftq!>w$A5iRLu6W%C1B9@J5d%L~4-Lzl(3z*jc-@>>XCBJ@k -$>+mR~H=MD(r}u+T&5hsGaCmVn2-EZB9BUF)d)NE6Z!QoCg}csXQun%Wx5wO9!}8$NU+$+{KyVpei!j -q|f=(RX_ey@1*jA^@@`C&Rok`v6vF$AGiq}_q3GeWRKJt*bI)gHnd3d9sMfbv>aO8yH67FH=+g_Bs1n -2Tn@2JQvs+AoOav$Dvx-VbE8xcU6Avaw={qhpX)c!h-ZQrbWjs5oQ0TV*bR$58!l~5jxbIF+V^snqoL -ZJ|l6OkavEt$l3etIiW(*cU6Hi@tOBL@clT{Fs#_0r|N58 -9*U|yRV8fj;VBhF(R1T|Uq^aSQu!rDb2r}hg1Xmp7fkAF63LOIAD8x!d_bBM@RmcbL>WF14McLeRz|)*CE#Pu<(?pUb@e|vtMYUjNsrnUx0dR7rc^iZMNxsFWy6c_X{t1>b-bLt;hXb9uoi(TQf -RZ&|Q;@|6-8~&XmD`;D==MIc~j9-Rof99-1ug5pbi6O)dWkJt_}_Oy_~%UwL#3`~4=QJ;-LRxb*{duY -=^k;WrOh95g*rM{bf>Vwjb(0@lJiFI8YxSE?)tqcF15;4q)}c)3?iPoF?xc{APVeJlGrb5Qf)K4Pm2m -yuP$C8}xdi?GVJ{-b_a*1hJI?TcR{0AxrwAUC~VZr}0^IZ=r4L6%p;l(!s0MZK2(u!7}Nzwi3>0jl*H>=6&bL{-oJyC(2S;}KEk%A+$K{C%eKC`7Cw_`F4p#N_IVT%48hdZrKBjuD}vPjSXC2P)7~)DLTDA&xX0Um$r3)UJ#T -bnTxGx8G;NkUj7VBCpV6m7-NIhUGx%S&Jyb_Sua>3M=D9n5QF26qMy8Go`HID!q%#vJNxwFC055soPG -IAgQ6m{Yc9B{T}K`Kt#vS4U=so1A}y}!g+HD>i*GtX*zV2J#i>OugO`^(RG^zcp|{NKy3Um(cw?vZ_u -_uBWpx=FP|7HEJJmi!ff;CYSmq9#ctY5?@H(%DyxG;JQV*nSjO*7bN5PO5y;d-l=(>0*2C0QF*!?2YB -#`tI?>%a`-ikmrd_oot@UO=Ru&VGN*F6S+JM|Ae~+R^E?jnVHlMnHroQU3kpX+p{FQyApZxKCWrv9H3 -wL<9(k3PmBz~xc`CK?34YO}o%=RSJpMy@dknF-y5+h32aZd%ed9Me*L1$NDj~4)8Vww*r4NM5cY -1ioFB=R6TMg)z6q4@qn;fEfIZv;^v~rEG(lRV7k03I0?pbohO$%zWonOc6P@Yzx(0CckjP{!K&^7U&w{S2};3Z1LSmS4$%Jzrd;wYVZ`aoT>>E;ge=xck -MdP*=IET~vvivm_y~jEcApaB+>zqT*t4gW2M0o5jrx%j;WERjY2}OY!XDr0eqDE)H2O?Q2te`lo`$YvH^^1cm%X^nN>ajR|u)M3s8zQLQUKV77yq0A{6xA$t(Sp{lJNZg&QuoUS!MrXs?o!cM~wZd4?K}2IfNc9FM9S~ZGg$LVjUE -*4EKrZ*L`Spd1)+R^dj6{9wxM`!$8u=icn(_7c9MCU0l4|r9+8>xX^wJ&uv}%5Gd*H?iX1>_bru-_ZW -MtqFacn+64()6o)J>o>`RMFYg}qYF!J$tyH=8m$H$B?S7FJZZcb5zh(uksW6=Ag;iW!=de7}#wp6hdB -4Tsg+&?dqJ(={vUcqv!DaC*`K5)kyL8?#xl5uWHPJ8kdTFgaHfX7ZDePUijEf49C33s!UN@3KdWIS#z -HDM~55V#}6uiybuL$r~d=C6CPGc`hd;`!FTE8nw0=V2Z%TDj)HJIo*Tje>$~5RmM1MwTAs8#X?fD}q~%G=la_;L4O$FZ3|b6Y3|j0WD>!f -WJ7_s*IcPa)IcYg*IcYg*IcYh0)}+Ox#iYfe#iGUSJW@OxoQV(WzJsEy;LLb%5IZ=S6dXJV$}9sS8I( -8#a535U%bwXqmK3S|%-%mPyN`WzsTfnLI0LQM4#p6fKGtb+22oZbi$YWzn)|S+ -u-pdC~Hs#1i4Kk$xunmB9kkty3R{_HdAV%Q22VQ7^x&ss(AejK7#C_>J@l^MVtblFF6HVd#>z^4NI5=84kkRJs3LC_jEq$fz|evuV|yCC!mqMaZ<3B3Hkbq~DNz=I5YzQD-~JgmT -D2^@gHTE}rayA;m`XX1mbZ&2JBoc#@sWCX=tL5euYgakookO&Nt)j^SMP^ub~ss;oq?k`csAMJjT6-r -2gbbr8cf=D6oz5+BAV5oo;1>h!#;DZo62uFjkF>p5GxbAhkST|&a3vh#Ln1Xw2gIrQ@{xUdc9ONznG! ->M{2X18Gz6Ax5L77uf>=5^ty5h6E1QB6yfnIP*H8?vNToM{wml4#z2PI>HuO8f66PAhsZ-Z+b0#q54` -Nz4FO!zF_F9Ji^L6GhblIB4MDM;!D*G~j@Is}{{III~Q(+;q6a1=PG91RZG#JMj!!)NJ!5g4NCpae9? -;0KA}Ai)^m&Y)&HD2@*5FM~S5Ad4Fmn+4ThL0MLu`%)ZymhKmUAq5}g`+|f{kQfOv76G^qU~51vf>gst-veIPniJOp?@z?cCK2t4`VKAzyHVZet1)Dy6p82iu(KFdpRZ$WVIDyS?EDsF?i*`Pvg`W -2setU=~H$Y=)HoPbCMm?k*R9K>C-_GJ(FEZr}XM5;VEQ5c-Y3r^z&r`v+VFTpvMpd3Dc^g#(<5NZTyK -7i8!H;u6mP2sb2zX%cO)gZ$%%O@a7qzD3J8j!dE6a-Of5S;~~LQwD&lqv=F)-mQi-u6p^ymnBb7F1dV -bv;3{BB;L!=wpBsgLo>aTn&ozg3^?rbR(#k49W^)#67?5mjv~BK|x-Syb5Z{f&!@^fg6+*1?50N{ZCN -96I9j&WhDXA4(dpPN{Sf!GDLiq?iWd-)FLQ^2+AIUl7XN+AV}>8>D?e{AEf1joO_Te50cC8jg$w_2j`BvEV#daNH{>xC{y_g3`pGz%MMuDu<8Aa11Co1{C*~{Nl58zlaX`zJO&0)v7@S -U{Hns3CMfQowUJc>3$I%&b@@kS}wmH&GDxH&<8@~g;(A*vtJxB;t)w -t2_L|bIp@7@_$8bR2@ZG!3F?5b1y#{OU2ss>8I*qnl@~$cG(3G!t{@5t#udmJmz2NmliNqXYmU-~>U!E~xGe3L -S&`wV(hks4feNv4YHbtnKgMvvj|R6Djy0OC2P|f*e(l6BNOOUP%Xn#;G78HdArC>n;SinJpBCnuQCSuz++?AK0_A02V3d*R0GOD1ADyX -0eE2tnX0a^;Gq=FKt33v&rpMs=ZkWh;_?(yQ6P%0GE1_hNsLAgkPn!{5gxSkRAYez^I^*lipPf%VH7$4pzu}Gac#%Pp+d*1q$z_8Wsr -W1JBf!Q()}WXWEq3BVvqw2GJiojFGxoO$+jRz7Ual+d{~eV3ld*Jx+_R+#a&E|BhvjMek8BLOGvPNL8 -2?+_#vf}}!_R0vWDK`J3gAw=%Wt?)s*UxbK^ -L69N{)4>LZqzGa&e&3l5rUC=p2jD(n_5rRBAbsR@kC(&7#+G3C0J#UqJwWaOBo82Y0LcT89iZm`S_f= -8fY1Si4$yPdJ~V~<@ePE;$YGt?CBcQ$UgFWnrqi{SA$&}V!enSw|ML^>eS0g(=fbU>s7A{`LvCNG=^%3kI@Ui -=cUbbzG;EFEC!D8KA-|3n`M7Hm3T(*c_f*mS_81123X>8Q;K@GZJu1PeADu<3wJ2W&cE(*c_f*mS_A1 -2!G7>3~hgzKO~OMXG9F=8137{UTie>hO9T{YfZwK&b;t9Z>3kQU{bepwt1S4k&d%sRKG4cXAuwqWeXr -pwt1S4k&d%sRK$KQ0jnE2b4NY@d-RY)d8vwP<4Q+<9goX#V-L>2dFwg)d8vwP<4Q+15_QL>Ht*-s5(H -^0jdsAb%3e^R2|nYa>bA6evu?l^;90<)d8;#cy++51702Q>VQ`VygII({H3kUC=aV$lz_v~{UTEk?0{ -TPU3KtvfUg659pLM@teBjBn2z@6_)i21TN>BqlQ<0BFX9Bt4p?@;vIB-4FzkR~2Mjx4*a5>17%J_;$j#6Rw?}q(c`aa66wi^FJre?zoWR*#vSYkUN3g3FJ;7cRrnrMaxCYMa#tl7cCYo7A+Pn7A< -Z+isIP>awm{Gf!qn?P9S#zxf95pK<)%`CvZETo@*-pnlwwACC%=*kmA{dbSI=cA>9e-PDpopJfVEQqI -vlf&5NhnZ_%u1Ry4c)b&6*b+@0X=1a~L6JHg!v?oM!bg1Zyko#5^ScPE%T!Q2VvPB3@gUy6wle@Sq6g -1Zyko#5^ScPF?z!QBb&PH=aEyA#}tPC-gg^-wFLr=yyWD6Z)Od?}UCQ)H}~zw2uMqevumJcS64t -`km14gnlRVJE7kR{Z8n2LcbIGozU-uekasB&)cu2cs8Nm3H?s!cS64t`km14gnlRVJE7kR{Z8OfLcbI -GozU-udgpoj)fCSr^gE&73H?s!cS64t`km14gnlRBI|1Jb_)frg0=^UAodEAV_m}BmXS-iy1?HW8kw7 -_7C>p?b0=^UQoq+EId?(;L0pAJuPJnj;ymRdQJa+aa0pAJuPQZ79yA#}<;O+!>=g@~<{*~rP3z$2>+z -IARFn8XU7Gh_+U!(@yo#5^ScPF?z!QBb&PH=aEyA#}<;O+!-Czw0I+zH{%y9ge`+WjImknV(ZC!{+e- -3jSVJf(zmC!{+e-3j5&;qZ}`eTfCj2F!BTQPMCMXyc6b~Fz;5z} -|3HVOHcLKf>@ST9~1bipJI|1G~H=o3kz9ir~0pAJuPQZ71J_b~g(C>tPC-gg^-wFLrz;^<^6X2Zy@4O -F(U_`rLv<=`p0pAJuPQZ5pz7z1BfbRr+C*V6_-U;(gSa-s@6V{z`$MYD`?icxic_+*}VcrSzPMCMXyc -6b~Fz*EYCSh$7_a^~-5-TPVV$OY-8~fS)B0u=csbN+8VczMX_WLKwA)o%0K9C#0cLKf>;GF>Pyf3%He -s;ge58yii-wF6mz;^<^6Y!mY?*x1&;5(-ikK6#hCvjmyy>o6piOKAKjlrA;Bnj}HfbRr+C%8Mo-3jha -aCbtu6T+Pk?u2kBggfVTj~BlL(w&g*gmfpQJ0aZ( -RNOwZI6VjcK?u2wFq&p$q3F%HqcS5)m!krNAgm5Q>n?o%2OYv-iyA#}<;O+!>C%8Mo-3jhaaCd^c6Wp -EP?gVoum^;DT3FgkVFZIVzcE3mxxI4k!3GPmCcY?bU+@0X=1b651?U5ia3-k_rqWA=O=i2@bhO+xbk^ -tWc_)frg0=^UGo#5^ScPF?z!QBb&PB3?Zxf9HtVD4OTj~BlL+@0cXeSUCvg1ZykosjN?bSI=cA>9e#P -6&5GxD&#i5bj*NXcR-){USs_?gVltkUK%!3EEE3c7n7Mq@5t`1ZgKoJ3-nB(oT?e-d~c6q3nJUBG7h% -wiC3SpzQ>0CuloC+6mH5kamK!6QrFW?F4BjG&^G-Zo*K$Bvd>7Haf^jLbcP2L(3;1Ng(Y6X(vcKLD~t -@PLOs&vlE(~vFj1Bk=-vs1l3Ncc0#o$SSCT+3EEC*b^@{!kez_+1Y{>5I|11V$j;bt7Ur@0MUueS3C2 -$Fb%L)Ge4XJt_!#5{UY+pjgjXlLI^op`ug;rSV;;L-)d{LjP<4W;6I7j`>N$M^a- -;qSOy_;+F-EcbMScL(37byXbi$?+ES+HK1WPAGIw8^tiB3p#LZTBAosj5^o%hEmcE89EL^>hT36V~Sb -V8)l<3Q?gh;%}v6B3<}=u8jEFfHKdyf2l;9=;@4I>FKjmQJvAf~6BIonYw%OXvPV-}EOsLX2S236oBk -bmr!Wn8NNCA%aaOY&v1n37byXbi$?+Hl48PgiR-GI@6m%94cxEFrB&cBACMN7a@X8Cu}-l(+QhS*mT0 -C6E>Z&>4Z%uY&yZw364&1bb_NZ_a!Kp!k1xK2b)f>&;%wXfI8E`=nd`vq$6YsN}W*Z^lCgqCQxI6_HfI0!x36oBkbmn!>FMbJZI$_fZn@-qt!ln~8ooMb$tBSUSPd36@Ty}}uNb=?FOnn{F>E)!&>hyZEYs>f8gbH=sZUjT3XjsVr)Aya#V-LyConpJ(Fu& -s@=H~H0`dcqPKb0uq!SXIkm!U&CnP!{(OG$q7rz7|oe=4SNGC)(A<_wvPKa~@qZ1gNK0KXkD3WLUMA1WTV-yo60BY&v1n37 -bx^bb_T5ES=surBex;PMCDUq!T8c_a!J;weI)O3H5J$9>D@oCxAKu)Cr)@OHYX4Z%uI6A@6364%kbY8c8qwX~!(g~4Hh;#y@6BwPq=mbV5 -Fgk(J34~6yqp}BtP9St%zQ}FgsC!LdbONIj7@ffA1V$$?I)Tv%j80&50-+NKoj~XWLMIS9fzWw>nKTx -x`$e39(Fu%BU~~eb6Bs=eXNYt{q!S{YqDe?}LZTBAosj6fZu>^vYeJ+GBApQFgh(eaIxoe^w?UFFMW! -XGfY1emE+BNlp9}t6&&?6BTQ3ENE;w|-p$iUOaOi?V7aY3a&;@@k_;bOZxp<79Xm-%-pxNe#n5^#ir1 -?p6uJmK$7DT!r(gl$&h;%`u3nE>R=mJ6)5W0ZS1%$5q%R#YL-S6;qHQ4kq=wr~wpbt)K%j8)}3+Fd!k+eu!)IGl!>sGWZS{5yfmPN~=Wzn)|S+u-()!}jxKO?fujo?UB^D;g$e3@5g -o8}L8Qy`)?QD8r775S!KMo~U9jnbO&4ssVA2JXE|_#3w|%4TwP4c)n=aUN!KMo~U9jnbO&4ssVAFMY? -??I(njt}e=>kmGaoacQUJHC&;NyZ-72Z~1g36t`SI`Nyx8i{)r0GZyBPex2r|Y=65p}Nxr7kFSL8%Ki -U9jnbO&4ssVABPgF4%OzrVBP*FzJFx7u2K9eQ5yp<)vWL1)DC|bit+zHeImkf=w4}x?s}4HrcY`S361)DC|bit+zHeImkf=L%lx?s|Ef2km*rTayGVABPgF4% -OzrVBP*u<3$L7i_v<(*>I@*mS|93npDK={k3Q9@EnOA~mq-f=w4}x?s}2D0M-p3rby3>Vi@il)9kQ1*NWC;%Jx14XC<6)di{^%h7FKjX~*t5h8eX!K({iUGVCHR -~Njx;ME1ME_ijps|#K|r-Q!yhi3ac83v{MMTmgb1+*@pb-}9(US06&f>#&3y5Q9XuP%6X!K({iUGVBz -agVqCk^){A(7J%u1+*@2H-oAarub%C!7d|lw{0$&&Sy1>^pHaEgbbiarb7`wpO1->rub%C!7a$S(?f?OBmx**pDxh}|cL9PpOU1M`23 -`F;fBtftXa$S(?f?OBmx**pDv@W1^0j&#YT|nze3{jBlf?U`Aze01Ui=a;c7d@Aj9uXC0$-naj0M9k7w;VtMJE}(S*tqW*f(^*1pfYt@HuKTiTj6wH{`~a;BXk -9?-0$LZ)x`5UNv@W1^0j&#YT|n!CR~Njx;MH~WYK*~4!K({iUGVCHR~Njx;ME1ME_ijps|#LT@alqB7 -reUQ)djDvb?Y7KUJF!Rpy~ou7pS^G)di|9P<4T-3sha8>H<|4sJcMa1*$Gkb*)_&gbC<=5g1T)fvO8s -U7+d$RTrqbK-C4RE>LxWs!Ic*Dg{gzV7k`MlcD&#Ujzm~T>$C=P#1u@0MrGbE&z1_sB3u-Li(RHLt3E -J1)Z+7^JM7!?iZ;6P}lPFT+~QpUr_3TQWuoEpwtDWE+}IZhx}ekrr7mLjf=*ZLJQ+&YV{US;5>Vj7nyt+Wu1*$Gkb -%Cl2R9&Fz6Ysd-)djCEcy+<6>*m#H^X?aMf>#&3y5Q9XuP%6X!K({iUGVCHR~Njx;MKM7Een4~vwdC! -ZQlKIg#|!o0(1&|UEu2iUsu=&H586A{0My@Sm5gdUl-)MVxN~rk$1ny6a>2<*A;e-OhK*-a$S(?3cYE -cfM9{I3w&MR>jGbw-^oS4_$6TM0%I2#yTI24zAo@}fv*dEUEu2iUl-)MAlC)CF35F3uIs*p3ibU`!0Q -597tp$Z)&;aKp!KQ82)QoEbwRERa$P{{0$LZ)x`5VoUy_gd?tT#`pmhPQ3us+H>jGLA(7J%u1+*@pbp -fplXk9?-f>)Qf03G{$7Mi>JMVx@v1+*@pbpfplXk9?-0$LZ)x`5UNv@W1^0j&#YT|n!~?N_6@yI&*;U -S06&0#z5NxVi@i -l)BR1kQ?Z9-IuJyuL^@)8TJn-uB(j&lS<*oxkb9cW;641JU)&;a -KpmhPQ3us+C-N^GH*QG*2#}wqcfYt@HuG)1VXzrH+UKh~1fYt@HE}(S*tqW*9Aa4b^F35F3t_yNqkn4 -h67v#F?yvK`Q0>Lf_b^)ymXk9?-0$LZ)x`5UNv@W1^0j&#YT|nysS{Kl|?z&9$b@z)T0j&#YT|nysS{ -Kl|fYt@HoðS{Kl|fYt@HE}(S*t*dVPM%`-xuM3)6%IgKwfs^5>H<&~fVu$G1)wefbpfagHeImkf=w4}x?s}4HrcY`S361)DC|bit+zHeI -mkf=!?D2f%azrt8}0hfuveUepnQx&YJ#pe_J)0jLW=T>$C=P?tv8Z33V!0CfST3ou>R&Xb{ayI1mr7kFSL8%KsU6&K&V^Bke8vyD8P#1u@0 -MrGTu4^lwEoaod7L>Z6)CHw3D0Km-3qV}}>I*=90jMtk^#!250Mr+N`T|T}fa&Xb>mBM|F97ugpuPaq -7l8T#P+tJ*3qXAVs4v*`1)IKL(-&;|f=N$c*9Dlqp10ni?)8FAU$E&5HhsaSFWB@2o4#Pv7i{{1O<%C --3pRbhrZ1TE1&O{O(bx0VJJh{i5a|mTeF38{VDtryzJSpeF!};UU%==K2z>#eFCg>UtsAAEPa8cFR -=6lmcGEz*VCyjS`;mAd7$p~dOD7xWzn+!@0#u%*^wpM&9L92xDnTq#|30PpxMZf94VyG{2gultK{&U? -%vGe13Ov7$7J@J={3`9rq@ibnO-wJR(g%}8tF9}nU>I*Z{F$WUehuFHqjt!xFIR?uk$omS6j^_=0}Fj^zi>N%~R)9N|jmrZu&{2RB?X$75D&}jvoR?uk$o -mSB4i(*BkT0%$b^PMmM#_g2TGCD1z(=s{ -&F~UFe>J3pF>9mnfo9MKOPMheoiB6m7Xy=_yk$>YhKkO9MbA_~#P8;d8kxt)V9KNEp=MQN&oz~K69i7 -(E5syP-q+RFJDe`aJ#;LV*T1%(3blOOt!;dyot)brzLb+LZ>BkT -0*BKblN}1`}wm@jQ`ReI_;s;9y;xz(;hnQq0=5ZYzp5~v$TXxOX#$OPD|*te@^@7ct3C7iScjT#;HAY -+C!&3blO9wJ#^Ybr#*DqKd1e3+CQiLbJ{t(tMC0i4u9 -t*X%C(D&}k2y_RwJqu%6+jWpr9br)6|nLZ>BkT0*BKbXr2EC3O6L9m_pJL$BOPCMzGe -SPap_&08Y)owcNrgQkXM{ipT>a?3qyXmx>PP^%}n@+pwuvubHR?}iS-{-443I2`SbhV&PyXmx>PP^&T -hBqy!(}FrJsMCTvEvVCiIxVQvVmd9RbN0Nt^WWdNovd0=rv-J`1DdcM9uXdbMyxG$+ES-2b=p#=Ep-m -Jx0BTO`RY!6f8#b{?Ud5;CVejvrfTLLGTr=Sp91a!Yw&pnJEOF!POIvCpRev*_cw08nm#a?m(tLn6>POIv)s!prwuoW`DMD45d_0^r`{>E*@+E=H2b=p^_eRbMbr+sw}Ph)Rj`|7l>PW$S#uT -J~ww6D(BS9gZ{m-f|ZU!C^VXdtU~<2Ft$t<%yvE -v?hi`h;85OtraAo9nc>PMhnrxlWtww7E{3>s-5@tdrZ{xJ^PMhnrxlWtww7E{3>$JH} -o9nc>PMhnrxz4xgT_?A{aT}sG*lBZ}HrHu$oi^8LbDcKVX>*-6*J*Q|HrHusotD;VX`SnPee365)ABk -kt<%yvEv?hiI_;~|zB=uz)4n?GtJA(Z?W@ziI_;~|zB*rD-C69PU!KXAi(b9?X=$C7)@f;-mey%$otD -;VX`PnVX=$C7)@f;-Yd?S13G825UZ#I9Y{f*oFw69M4>hSsMa045nmey%$otD;VX -`PnVXdsF8PV0-bv`$Oww6so3>$J2^OY5|>PD|^wv`$Oww6so3>$J2^`|5msbtk63 -+uJ0yrA}Mww53j4>a?X!Tk5o>PFw1hM({oH6&rhH-md(pQAEs!prw+&c~R>JJwkqnV< -w4$oGDbu&=sqW0BkU!AY7?sW7wZZp-sI_;}Zc#0dWmey%$?LBJK)#f^Ft`#1%My&O9T3_c`7wJs&FRi -iD8au7A)A~BCuTMLow8Kt2?6kv9JM6T+&cnYpU9GRv`a0kDfpjMN8@It~jh)umX?>m6*J*v7*4Jr$oz -~ZBeVx|VX?>m6*J*v7*4O#I52W+Y-?*KaT4Sfpb=q8a*N*;Quijv_zE11ww7x#!1~y&ou+t7Z?XdHF= -TZIKYuaU}U3S`Kr(Jg1VTV`zcGzi$op#u1hn;rVX@?#5kqQq%Q}umGe&?URaht9d+G(MkcG+o%op#u1 -hn;rVX@{M5*lCBIcGzi$op#u1hn?qpee365(=I#hvePa*?XuGjJMFMf%e=J6PK)fc$WDvww8&12?6kv -9>+5{q2hu6$Z`{U-Z|4usVB^&KI<2qM`Z}$z)A~BCuhaTEZLZViI&H4QtoVH&NavV;X@i|M*lBZ}HrH -u$oi^8LbDcKVX>*;H)@f;-mey%$otD;VX`OdHwsXwixD8QD>$J2^OY5|>PD|^wv`$Oww6so3>$J2^OY -5|>PD|^ww9fZE4V_v3#%+FDTBoITT3V;2by`}drFB|br=@k;SEqe-+E=H2b=p^_eRaORx--k)xQ$Nx> -a?#;`|7l>PW$S#uTJ~ww69M4>a?#;`|7l>PW$Q;9-HsHx}SSZ%j>kXPD|^wv`$Oww6so3>$J2^OY5|> -PD|^wv`$Oww2)0}&3rv#Cy>8!o0>LMq0*pI;B7naWBVTT91hr*Hr{md&WN-Bp3=K12xqq6=c_wy{0pa -MoUU*p!s{C^W4t!;%E8pn+{rx2l*g>Z?>oQN;ni%NtkcHdxXlmI?PGM>T&F*f{lA7NTSN9(orYRur$u -(!VW%B-+F>W(>svqfns(V~mz{RmX_uYW*J*v7*4Jr$oz~ZBeVx|VX?>m6*J*v7*4N2?4^iidzj2!+zU -*UfTjSLFI<2qM`Z}$z)A~BCuhaTEY)eK<(+)fBu#@lgt)F`hZx7mKr(Jg1Wv3l>+F^$dyN^TKVW%B-! -oDXDKhoA`Rle7^e(p7GwbNER -ZMD-@J8iYoB0DXz(;_=9veP0vEwa-hdwy-QdpTT+%Y9AmXJ7lL!{1$8vj2JadHA*2?j>We0XW;u{n~2 -x(p+-g;kv_hhwBd4-8Ds>DS8|+M)MVRzHZNb*y8N>`z{$xj3!1CqlwYj)2?NAFS#Y`l=^L}(0QXrF=M -a^-Osz5J7btJ%ov9;4r3g~I2`|Q-NSVc*F9Xf`w@O$*xnhWhdB&%G0??87Xw`kbTJScOSTK|B?DdDh> -PpqT=(X>?61>GyqDi`x_jWSy?8Gf<7SMTF>c0q7~^4#hcVdlxSe<}x$eVt*&w&QcrUr`0&nM)9_M9@m -oZ+(co~C@(Atmpk|gh6Fwo0D>`ULKyq63R1_%RW=gWSswtr%vFwp)l0}<3As6$YPptd^iC0iX5&>^5~ -d;c2(It29lICrO+?m5%#q1g!bH>8!#X?`>NHw;8thqMl9ZJ*vf-?$OtMi5i>hW!oM{65{?38#l4qeDi -AjPAaRLq>;;&hF-G#vq$)7WmuU_l9f^*&MRjlHENY;4ptDNvBQo3BMFWWasP#!3;@c=j^{SBz0FOown -2cGlP@YA+PLN`J3;JWj~PHKk?ZIew6TjyP^`_A-r?#zcLWvWe>gVgFu3Z1kY|wNpjoE|Hpqa3H2x>cu -4S&;32_7g4x9MHzfFb@}AwAl_QYgA;Cj}ThRBC>+IyOkda{vMINn}l}=?-1UW_SQx&d -&vM{0Ft}kYQoIZ!w}vfylwE$d3IOq;Zj_(1$n=+>pc5&7ne7e50`r-{*`&QO+H6CodVc8>c_62KapUO -V3A;vV3A;vV3A;vV3A;vV3A-EB=Mx}cYibG^f)9~B$(a4e+!0ihzoMihzoMikEmMnI4CrvcLOJ%(5b*BBQ%~s>r -CAT}3uUHbpi?Hbpi?Hn;O<;$&v|*S!n-fb5SmB#{-76_M43VxN5?DF+ZK5nGc&n8Wr4Vtu?w3@ViEI(##QVRyCoQ9qTa(*EZV$OVmje__uU)L1`oMC?B73JG5{0nA++p2`8)ca8_otR5+}RyF$q4}|7Rc)%xLxKwvC#3Qaxx>@J7IDAB1 -95gR@2jUc7d#~Rkl;gt*%It`NbupTph|JFKS+WP3I6UXrv~r-G@~%jo@;++%$eXJ#)lXmV$2?nzr%cc -m~Ri^J%slV-ore5$n9aCJ>>O}*F#>>R~+e2>m#Bw^^np-N)Hq3A)tqVp6u(5IT<_z^&+SjLA?m-MNlt-deI -&71YV@|Vs^cL`!@{0o^d?-7g4?DyEk_;aFN!Fv|gl@UC9q~(=~g^XhilRvKNtM^R?f_JbRJSios=tV#;0(ucpwu1amexv`L^X^|UaqrJF8fm@uJ -`vQ5pkB4>P1wq -XV23PXMEKOnZ*t3K-M^d2-bD5$viEPdnP&{rdUHZ>lhT`%-lX(qPQ3 -{z8yo*8zq36KLA?p;O;B%wdK1)}pxy-aCaBewv%k(aDZO{Eds2Fn()E?Iv)bWo@Fuc1k-drRO=NE(dl -T842;M~YCbBn?y*VMcnNDv4dK1u_fZk{CO+SF$KQRVDy$R|~P}!#bcN5f`pt4>ddl;ruHWL4pUi3XTM -D-@B_jfLEaXNSt*_+6+SLu%pNB8~s&BS_>)|<4lY5VVHV!fGIZvuJ~(3^nX1oZyS1uo78Z-ROgRJJJ3 -J|3j?e)srGnuruLn(Zz6m1uslST{jYxyQ|v= -jt1~BO|Cf){eD{S@!H4iZg!du558-_XFMCq|N;cg!od0E<+5f+|WB?NUFvUJ3_tEC;;#BYqBTCLi>Dg)oxA(A9DMU+lSn;Y4`6TVtZQtklTmcKIHZx -x9rdQdzf7x^7@chHlF@H`R)y8gAcPTdl~;8BKs0qHZ=XcMD``JFSF~*?D`T=w%Gl#A@1)bpf3S^3F!N -s3*4L!zGU>W)Uo!fV(U;lvC7UnVWaIE38;}29viXwDmu&84rTj|uIK=ZMo-gryz59VP2Jw -8EQ(t2F63drZzQpn+mM^hB>5UvjvcoAPVZ16NmUWr7$B=RMZZ@zoO8R1JZUy}KfO!gK3y(IHxCVffdOCnzq84?*184?*184?*1 -ncsJBI3*0p49N`149N`146pkkks*;Gks*;Gks*<#rn4vCA(qk3I4>39(!i=fi04+HTQhF;6khkYbqTT -DckbbJ|JuJ`0J6Dn%<{dLdO0QBw@7;`zNelcqx*uquXFoavabg_QSY1gsc8d4fkns5GmIVTKh4QUN&4QUN&4QUN&4QUN&Wk>U0NNJcgLq -J17LqPMrmwGuT3_%S+4YOv*X!hychk=Y{?+Muq*$mkX*$mkX*$mmt_g?DdoDjGg;A()Y0j}D+a(TGCx -a__}_x|9+<;x`l41YfiFbpvJ?xUY}@1GcG7^p!V^ol*}d&wAL3^9fnL)-{)U2$D;U2$D;U2Q+qPruJ# -R)bmf-ET9x|I0vTATy8|$P8o#GB@Hdz~Nel8*#YqH-GlS@ck2G9LCtU`g>&tI{g2|K>ZLt(VX9R$!Hh -1M2!$2wHnlFP^&?$X6RM})rgJLNpTNDTE)|>y&h>rs0N`LglZ6~L8u0y8iZ;PszIm*p&Ep0wDV^J+~W{bNNOOd -fushK8f^*)DkL?K)Id@LNev`5kkmj@BVwtYKbzeihj>C#qm2ylgro+N8c1p&sez;hk{U>AAgO_*29g? -+NbmgF*#7IEF8=Q3^5OF3k}(J)BsGxKKvGkZGX2HiQiDqkE;Vd-yB}XCsyzzv1g8d^8gOdBsR5@3oEm -Uyz^MVJ2AmpjYQU)hrv{vw-Ts!S_Bg~7ml|AZaH+wi2A3LKYD_F4sez;hk{U>ASlY5@Ke*I$8eD2{sllbj#M8`>Xw;xlgGP;aRAOmj2|x`1HU8$$t|sW87=w5MQ3FH`5HǼs-(4G=XZmKfBS? -M|7o_lN}4&v$QLB0x~ls6nF!jT$s+(5OM928|jtYS5@bqXvx{6HowZ0I2ade~Pn03~FjnXTBe0Akqp% -4G=Xz)BsTfL=6x%K-3&k3P242HD@+!=A^I?bvV7BGkeKE%%4Ei08s-(4G=Xz)BsTfM9m?fhk#;FbH4f -0oD^bEgFy`jH5k+!f(kzk{50^>z)u4|%^{$$)4)yxI}PkK=bJyfGNFHB41$V04e~U|)8G?BIXE4cIhb(|}C_HVxP`=X((~Cx)QYfKCHC4d^syA4xI_It}PFhirmP12#>u>12P9fL5H&?h`;Bdlb?NKM -nje2R7Y-i7W;+7}Q`;gFy`jHOR&Q2SZss6q$3j%WnvK7=p^%$Jvv03~Df_Ik4&83(^Wi4G=Xz)BsU)2 -q*wG0MuN+y*G!mLLh2@r~#tpBB&VDU{HfW4F)wA(<%Hk7ukfJ26h_QX)dyP%|17W(?aBFkf%YO26-Cf -X^^Kuo(6dug{&nFeQ?I@4+WaQI-0r-7a3Ue|A~{`F5Uf5$-m_B$Go!Jr0%8VqVMs -KKBHgBlEKZla1k4fZtH)7<**4JU;d)L>A9K@A2qH<5*(27Vg&Y2c^1nNAU>L7WD08pLT3r@6h)&Ba+E -@-)cPAWwrl4e~U|(;!cSJPqFq6PJ=iN;xzZQNxL{JM4sj*t)SC@PIHr1ylL>Jxk)R|G&s} -XOmmaXdmnAG2{Fz6>}%V_Ss~OkP}4w7Q))WdD-cw?X>NkLZ%Xz&?IxfQ(?CoEF%85t_q(rcHz$Qq(?C -rFH4W4>_ojzQ^yVd;B|z`Sg>2$XgEP%dHX){gm}VCNk(ht|)9`oV(p(-cFD`E`A1+@m8G}g_Sel1KVo -HN44W=~D?5n}eSs}JGwI%Nq12D})Jb|SFmIhcFU}=D*0hR_>nul0oO7rkZlY392ZcYjTrU94+U>bmF9 -x@6n4X`x8(f~`tVj(^hG3e5uOM@;Ax-`3Dh`97H1Qlf(lxa|=L7Cc@Utcd5J8FKLCC24WhBX& -|P7n5M+!P7DUaX7?s03Oz~}aMNoK@-)cPAWwrl4e~U|(;!dt5?RD)5T`+$25}n1Y2L4kdN?ISo(6du< -Y|znL7oPA8suq^r$L_PWllw$25}n1X%MGDoaVj1=Z14a?>Fn9%OJqT(0i6bP8qjH8=2Wn0z@~ZkTBHg{&nFePXoN0F96VGsuLo)HE!J7te8oUX(8N -6wh61L3WZhq@@oN2cI#F=Kh#ocFu=eCC-p8KAAPrLVx(Z12y_a0#q-4m>R1&5esC+?lac2e5;V}BKQ- -wB@E9%pYc@r0TNY8t3%pr#3vD8w`n(?CoEF-?i-Y_*9q4bC+A`Wu#)4Bj++-`966G735k=rq|Ovj56J -&8EO6flUIN1U3n5((X#ZllrfJy7{|@%a=>W7{(aJ7{(aJ7{=)QDV#|-lW->COv0J;`{qy9mk4hX-Xy$ -9c$4rZ;Z4Gu#M&s~Ov0JO+9*Lxf|vv`31ZUE`#ahNCjAp*m@y7x9L6||aTwz;#$k-Z7>DB@u6wxd#dR -;PdvV=se@9tlB7jK%lK>_GOk!D-FePD1`cVZv{PoR1H#g#DfSUns2Dll3FEijt>|t&OdKl>8#ypJiFv -i0e4`V!x@i4|7?cusF*L}I}%XMF_%a8P?@Wk~XL>6ySy~*!BpX3&F((F^RcY@sFOv0IjGYMxBE1?82X|~H3i%bMH32GAjBl=H4O`@UD?5 -*CLy3aAWg_tBJQFKY@lF%h-yL_?8L@1M30wsV+0Fzh(C16Rwl7J-vOMI_oFS#z0D6k}8Nx+h{pT!f4O -eB_?@?fA$LYagziFHsymxL|}T@tz^bV=xv&?TWuLYJgH|Lk+|@9?rEs7X+hpe8|0f||rSC_zkum;^D2 -?>yrbPdJlsCgDuloj7z^2d++t9|poBq*Wl@5k1V -0IW63e1gaWdyzf}I3A33k%%LCpi)!;o9}N$`{4C&5pGp9DV%ev(eCGnJG7<75TvGMTrILxiclaMDNPePuAJgM?z+IGQDf} -g~yC&5mFodi1xcGCII1rBF~@RQ&t!B2vp1V0IW68xmI$03{WlUVB{*h#RHU?;&&I{UeNvCu^Dlgdwrw -MB6920U=M?Q89z*?U|rw*$x0I;PePuAJPCOc@+9O*$diyKAx -~nNlW->COv0IjGYMzXwOzhgYa+Z!c$4rZ;Z4Gugf|IqQoYIh{t|2w*d(w?V3UeX&K~!hKUr!bDotxSmI2=nS?V5XA;iD)}*tmXmo$`Cu>cFHwkYN-XvBy32GA5Bvv>HViLq8RyYY=61pUG -N$8T$CEee9DVCcEWfICHlu0O)P$sd$N$8T$C80|~mxL|}T@tz^bV=xv?zK>{-b5&qP$r>FLYagziFHj -vmxL|}T@tz^bV=xv&?Qxu&i*!+n0gr2n+R$W)Fh}$P?Ml0K}}+DlOQHROoEsMF$rQ4#3YDG5R>kEe@9 -twBB)7Flb|L+O@f*PHHpJqmP9N#5y~W#Nhp(0CZSAXA(PN0p-V!Sgf -0nP61pUGNi1Lzu%vrGOCpw>2w)Pxqyp2)cZCkbLMEY0LYIUt30)GpBy>sWlF%igOM3RRBx1#hP$r>FL -Yagz31t#1mxL~fl}iGa1S|_GOk&ZJFePD1!jyz52~!fLBuq(|k}xH) -SV?e_p8bvpvEoFql3*pVXi0FA;3UCGf|CR%@x`;f$CQLA2~!fLBuq(|k}xH{KH%(Y?X% -wzA(op6U=qM27A=WIOTv_dDG5^&rX);BELIYnBsfWMlHer4NqYA?BE*6d!AgRa#G)m^NrICECkdy~wj -f(pAW1@!gd_<`5|Sh&N$-A^Su8jaq9hhA2}u%?BqT{lk}6534TR~Zg((SB5~d_fNtlu_CB6Ga1Y*63S -iU5dFNx(#0+9qF2}BZzBoIj;l0YPZNCJ@rA_+tih@|&>|IUIFv3yA&l0YPZNCJ@rA_+tih$Ik6Ad)~N -6_L*NEJ%`&B)#AJcNUzm&s8rOXde>NiX;h15|Sh&Nl22ABq2#cl7u7)NfMHzch}O16(>TJ#PTH}Nn-h -uKqP@kDk7adA4HObBne3pk|ZQaNRp5wz2E%Ff)gQ1V)>GgBq2#cl7u7)NfMGIBuPk;kR%~VLXw0e2}x -4+J9fl^6NQzZ+yK@v2~HAgn1mz=NfMGIBuPk;kR%~VLXw0e2}x4E`I7}FLX^bvB_T;dl7u7)NfMGIBu -Pk;kR%~VLXw0e2}u%?qV6iIq!y$!RYcgLooIVvU(VB!Nf*kpvI?=w3+7s`6p~jE&1%p`=KT`eZ?3M$#9b4B*RIDlME*rPBNTiILUC5;UxdqS&m!T-;~WK7AJk})OEelJOHV}Ez{9~e#CEaHhN8B;Q -*M$#9a(NvF5{+7|&} -$-t7e7HZa;7+^BMWPr&4lUcrGOv#v%F(qS4t|^&UP6JB@mJBSpu;hFRV6}-^$Yg-Y0FwbGvyjP{k})M -?O2(9oDH&5TresXXn36Fi>;8_@b3$WF#+HmNnKevi4U>^1BT23#`RsxBelWYjNrsaQCmBw%_Om2rwTa -70*S@e~OJ+5bF(qS4#*~aH8B;Q*WK7AJl3C4UILUC5mG9oXB!I}mN@g{a;UvRJW;K(MBqK>il8hu7Np -dC0yzeobWH`zGefOrPgoc$2E14xthLa2@8BQ{sWba5s7EUspWH`xil3BoHB+1^-l9=TtMwHA#CL>8kl -8hu7NpdCWTzgYUE1YCF$*g8Fl4K;wNRqwl>dkT!BT8m9laVANNvq`^R&Qf7hO+!AfRHlUdSaB*{p -Ukt8EYMv{yq8A&pdWF*N*l943ucJlme?+zJdA(N3LBS}V*j3gOJGLmE@$w-osBqK>il8hu7N%C$l&(H -QaWRx{bMv{yq8A&pdWF*N*l942{hRGn3K_r7n29XRR`LInCKl`tLVhrL5A{j(7h-47SAd*2OgGdIE3? -dmsGKgdl$sm%?H-EC=#4KNO5$RleBZ()Ha=eswY5+X|bZGrnmY -x^x<-wEil8hu7NpdCW+Eacw$-6f_|J=inQCP{WW-^>)Rx=q%GLmE@$w-osBv+Eowa*aQ -gp&*>`8?mf;e-%YGOT3QFd0rVoMhH88A&pdWF*N*l941MNk)>4B$>5K{?<~O^(JNwlR+edNCuG%A{j( -7h-47S)Xt{ZGNplee`VfUdEYhd`QL60#NYkv<-^~-Trvh31(6IQ8ALLOWDv<9l0hVcNCuG%A{j*TZf( -!s^*Ce{L^6nE5Xm5tK_r7n29XRR8ALLOWDv<9l0hVcNZzgP`MVy6WP(TrkqjakL^6nE5Xm5tK_r7n29 -XRRnH5WHzcss@z@HzPH7CZ8j2{_4GJa(I$oP@*BjZQLkBlD~KQew~{K)u`@gskJWY(M*KQew~{K)u`@ -gw6$#*fVR;u$(JbY$qr(2-fEWY#GeE%NuhcxKIsQ6r;9MvaUb88tF$WYoy0kx?U~Mn;W{8W}Y*tCNft -`TJfxv*^UAkx?U~Mn;W{8W}Y*YGl;NsF6`4qee!Jj2f9WNk)tOeJ`F_bz;=WsF6`4qee!Jj2am=GHPV -h$f%J~Bcnz}jm(-PqeZ@VEwWj4V${f}kx?U~Mn;W{8W}Zm)#%!?0y;8uWa!8&Ofn0Tj28L+-oLZ##Hf -+0M%OkS(2=1dLq~>=3>_IdGIV6<$k36YBSS}Kb&~J_IdGIV6<$k36YBlcY!cB&h;2p -YcearpAM*>6kO1>~$h;5eKeLPv&<3>_IdGIV6<$k36YBSS}qjtm_cIx=)*=*X-|^1a_BX4ah;Ix=gMj -2am=GHPVh$f%J~Bcnz}jf@%@H8N^s)+8A%^0VJ1W)_|pH8N^s)X1ojQ6r;9MvaUb88tF$WYoy0kx?VF -9LZ>rpZ)y2S$SgA$f%J~Bcnz}jf@%@H8N^s)X1ojQ6r;9MvcrOB%?)szSnG)o)|SUYGl;NsF6`4qee! -Jj2am=GHPVh$f%J~BeVXXF86z@A7DOtjJiAu_ -Ckd$QTjZzYTlb%(taM|JxW~MY|wx*YxZsX7_`w-+Lyk$XJoFB4b6yip;7bV?@S?j1l?W&wQBGC&r456 -`55>Mu?0M86h%4WQ52Fky&+QWXQ;nks%{PMuzQ>!Au>W_gvbby5h5c*W|@(ZAtOUZ -hKvju8S?veMl3%uLS%%<2$2yYBSdDIk-;H@LuQ$gK_P=e289d?85A-oFF7EOxR7xn<3h%Tj0+hTGAoRX2N@4C9%MYoc#!cR<3Y}L?q> -aoaUtVE#)XUv85c4xWL(IsFfuEQ3AZN|eEI=_NWJt)6kRc&MLWYFQ;vz#qhJp+Q84 -5BKWGKi`kf9)FKXYtWpcoP|BxFd)kdPrELqcY8k)a?%L56}11sMu56l5sKP>{dxuQMx93<(($G9+Y3$ -dHg(SHx!E!;Y)7-^9ijdCV^3-_N%0=Q;OdnEUY`yq4o|lDGx&c3NnV(V)Le{TF`f@xOon`5*t|fBm=r -`QP9F`XB%M|NP(o_V51zP)h>@6aWAK2mtey7DxVo83Y>x005K*001)p003}la4%nWWo~3|axZdaadl; -LbaO9oVPk7yXJvCQV`yP=WMyAWpXZXd6iU6Z`(K!z57=T>Wc%o+PI4X+YNe<6+1Q7vJJ -^bk&{77Bbz8i8YGoK{q=qHSF()*?CN9==RMAQGoEhu`bWdj!(>L&Niv${BN|TU$v^Z?Znx8=<&J4?we!?VZfNl3%U__lnjTTC6lEdTQO1t#6PHINiP7H5O#_)dck?$Q -M5(YpXd%_s%9=hBD)i(HEn2@b`lKILDY>!2w!yW^GLtive@0<<)S8A0p~-S7-H{$fcoMq&!&u;JQ_89 -hp+=XG6RP%XYj^hWVYZ?vJ5)*!tl2`%qS+`}06diiYsVxU?L*A%UYr_-Lh@4~G&Z0=xO+z|aUb4(V(S -p0PtoA~+KI7G=ygx{P(Ql455OA~-I78#>=_wdwctf*Nm3tZckmuRKnS7F7%SQ^HIA!B^}&E#`aW5Ho3 -EA>&mQS}oMrKB`FMw1IE`EM@5m(UJw~u3sIo%)7KMW#9c9TkAmZUc^AiY?S9To@W%(BF>hRW -HpU5TCB3gJRe0wIrG`#VCFTGFBVsztPPwj*$b)MQTij=>rkL7X(yf-Z7x`1qDbH`vTy%a50%l|gI+*h -480>+kv6_h&sJh~Fnw>j3znDu_A&HD)Thq_BnkaPp#?eMV_AWEtcp8(~&VF&YJz=n2q~1D@QL9Cuv5i`XO?0Wwx%zc-o~GDUs?+HdN;r3j9gFK-uNj*HivnX&(RwYhZ` -SLcV^y8v;kyou{+)iw4yR~cpQNVr^@{4=t5V+}-{}1b-@m?VMejEPi>>GpyvW+JU!R(|)}rR$@6aWAK2mtey7DsuqS6MRz0077d001)p003}la4%nWWo~3|axZdaadl;LbaO9oVPk7y -XJvCQV`yP=WMyYgMkn%X@TSG=j -0v8jDb?2BDLF?Lg`ZEOy3vb^*UeWuZckrN=5kU7AYil}nO8f6BINFw2qz=<^oJwY1R@oM|y&@`E7^%W -uJNG-a?=x-wh0xVU_GNiTj4rO~yj=nRDO^xfWl50HU$rBY9vFVgcQ`B;NCV-l28XU&G})f|)`QdX3c( -p~SNwx$K=DU~z{1SMgmDC*w#7K;K@%N&4QI@9zXi}*e#SfxF=>C!8s=g@0Klwi>)k5)EB%(&C8I%yq_ -?{4SfAai{gCR+h3TrBz3$QT@3(Bexy1utxLJ2(vGbFrY7f5Z90?@8s$8%MgW(_2FZvG*+K{)gKL5ckKh -fgC~?Lmc^XQIYIiUI%kXsAb;21B8EHQ*fK#yu3}N&Y?LPsyClf~_V@Mx -ibmq6*7lTUsMlf#2xcr)6Ut4m&NnzVQUzr|~hYs(LWoh%t9@d%(1@6yo9hF@uMT$0v>daQP@w3aXWU% -Gu1Hft&B){?}&&I-DkMV=CAF}=J+jDf&bH-BzkeW*R(Pfb}448ns()K@#`x9RU{$5;f@LVdizRxi^U-Gf -_gOQR4(=_FP<@YK*P76xTC9M7LVqrsiTGn!Vkyb!Ys~`y|UFTYivjZ?S~ns*{M_IsGz&) -EIWxST!+)ichiSU*Y;X7`$zu;$WFRV$!)ONrSOHS?qCAHJ(J$#kL$0W7FXc6io{LEOCd~pykwS*)c0{ -}sGv@*v}}UU3vft{PaAipxAERjd8X+Vwo?1hJaZ2DINTSY77O@6aWAK2mtey7DxDy!T=5l000Uk0021v003}la4%nWWo -~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyS3ULC2M5_7sx_{f -ExK;j8?8=*YS*{*5A*=-LGFOMV?noCj%48YR9BuL8PbjVL;Ajh=gDLiNY^n+lj}IF##X8z#G{@nZ6Cmx?v#$!T`e3VJQ^%4$FwL%Gq33aqQ-{u^#WB+PhW -#YCV7dfzE5qY4XG_cp}z?)I!RpxM$5qr$IOR?GprEZIQk3SNq?l}gboQB8ZwIR7G|u1<@sSMUkLQ}dDfzUY3- -E81X7n`r8D}qpv6VjB|!tusZm#j!~ZMy5V?`}Jd5>ZEpm5J -GySw>!)cnFpg1xtFuIMNTJqu;~5Ar$mI8av+v-0TVoM3I9KnJ)J7p|66GJukLw4El!TkOF0jG}jW?0s -2zj1(%I~ivYb_D$=V8h@9Yy4;OT>{ZbCW`qEcQ7pbN~!=yJ=>@6QxD&@n<%W{RN*TKp|A8NENo|se)a -=D>a6Do-5@<{(Yl^=W^-vGroRK}@>US~5 -3TfZg1=sQ28OjNp1Wbq0gBe7WmSf~&W2R?ENAvl-G>JNrlG3B2saBtbYr-QL82_jjNG?f^&*u+?xex{ -~xk8Q2#E)^~G(MbZE`ZBSUP>8fF-2G6$GzO<%$jLSjTXY>3%RxXqlGQszj*P&uA_o7TsRh7U%0eVcJ&OE*;}2>)>`%+nhCa`>(6XCA3I@;*Fd0hP8=@7680rf$6yD078PZP;>B8cnO>c3TBf*)C0!I=VQfHbPMfV=TH~9H3(3#j<@w-Ag|Tf7Zo2`3o}P*16W6KtM|`@p8@jw^Zg -hOJ#2m!-MqpfmHOn<@71NFVo#t&$YkVKARMg8C_}?3usp&!I_#Kb(w_K@0}I(Gb#%PQE<{PwEoClCSnhFQ|2R*{+2RIFPr=xPU$>}HzLZd7p -YfL!3au&6`BxhXKXiLhw$_Lz>KdBd5@9#m-L5PNMw?$DFIV&aDeijGOIoO56 -5CW?eOVcGAe|_VN$4frZ_D;6qzW$ql<3yR13tu|{uu!rG(n*)?+Q0WEI8Fqs{8Kdv2DOG_KclU%25Ai(|3EEHqYTg#DQ^}wWR8;Vylpdf}0OA;ZC5+4H$j~#nV+rV>or>Blz -Q0&AuuAo9qkg^~KWzE_z5J;V&&DxIuF&7>Cz*--^aMFGA0s}rv<3QQi+$x&!M>|*3VFIu$OQ9;_Hzbv -YBb*g=ETsxADADV;(q|lAKE_$=0W*?70k8r)4^OT|7Bo~?n0g|nlo>E9)ol09%v6d@4Oe<6VMUArviE -pJpT=FE-r;Wi0xt;k8!x?(|9k~aXTO9Yu{8Wg?&RI&f^DyfUotQZ3txCIX)HuTep#Wz<1dBGvvb0v6=9PLhki4Zcc|bjKm(@)FuLpwC1FqX#}RK(d){x8pU4lz0&v7%dKLxx -;L!6ew`5*;1i31EJ=;>1Ckp1Notf4fiEkMU2$$gZkuKF{b&SlCn0w2<<2YArAYfGJ}|w%`+ubWg^|vq -()+ugEU$m_sPvQ}DOUd;8;@e;?cu@5d0J2SCs0cR1QY-O00;o{l@>=iiKU-(1ONcf4gdf<0001RX>c! -Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FJow7a&u*LXL4_KaBy;OVr6nJaCyyE-*4JT5Ps -*c7zsrImH42ilP*p302ESGAP9)6sCPn(Jr1jyU2Aup$oJRZtZgu0yMcQ;KjGP#Z@>BGhpE@gALtDpMp -GD%`h)3W0KM^J{~J{J)@yZGZV(<7f8l}!(3c(p*D#U)@E~CHzTHNGyUa)hZop9(aLLD^z$|toxZxD~1 -z$0cAu5nQm=aL(pQ6z&3-JJ#OQGpig;FIi7I`LBYIhYfgC4Bo1hIG(Qx+?X>8g!^M!yN2+uJ`0qSW1i -ZVs#Ki7WsUrhdYV2QP|m;RcAJ0V81+n~fB;R6G(Z;A_QHY<2S$B53K -GH)3`Nv5dfF0u*{&r|_hN0VcfPq@wt(^tc~eQzSgf$I>>awt6Sx!}JNpsEH~(pg=|G%%XL`T?!s^7ll -S(8bWK+n_Q})C9=qfz)%u=BJUj_r*nJvD=JME_~>+Yw`GVeplUamvHYo=p$%*j=@%Jhvo3)TpcMn4K#gh0OVeYE`g__T!X^clW)=kxA#`FuydBsHB<1ydxx4XFz~ptKYdC -MMhO(1lrdz8v+R#@#v0p60X1#lQhrAnr7_YL=tt2Tu -G>iv2%l(-OtchXZ!G^se71~8kO$Cg`B#bYrVj#s!k}!qjirxYDK}gerH^r%YsQ(J}C6v6vE$VyMX~7> -Ia$@3VKs8uU_>lVqJq)B&E$B&Ytm~vpvF(qYPWz_wd%FYhv>;2>1B2<8GZ#y}R`ZqIf@3RY=fe$6QRB#w2AAfRisZv;#cBRmtA@tF&+PU&@^ -_BC_D=TAS#7(np=wT}E!;!<^e{!xboArz)3Y9G^AJ(RQz!D7N`bXKIYrCI{F>Q;%XzeHi|#ZOCnWPr> -_Z)uIv$(t6CPgPtU6{10lIyuA}lx+Sbn&N&ZP>ypjl;&u@Y>Hr(&g3QGs@xSK^c4N#S!3g^MStT>xeu -g(gxWC0wt_zL?)}MSisNrpfTiBb|a0&0HlP(MyzR0qaGF`drivHu5Mdsc4E=JKE5nPvs>4FdAXy+9?Y!JRjgX;g=HoOI#P@O4D-vd@sDWtl!V9kk$2-h8&Wvy3)iAu -HH|oT96izZWhSxTjw(!7nvP&mh1oL?R3ExD{t@9q1{o*KVnF$=+p5x?Sk)Fz2w?oebf#s{4Y>T0|XQR -000O8^OY7y_!;PfTLS<9ZU+DWHUIzsaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4C -QVRCb2bZ~NSVr6nJaCx0n?{6A85dF?yF;YGRbg&0GRVOv-2OyB5BY;>?m0nLP@9r#EH8!%nNwv9-n@C^nX9YwAN2uAo7?GxwwO8Q27E7KD7)m`HwEJP2&ey5pK -D=RnDA~5vi4b3XQHhSj~uPgk7GU495)VovYAP^)~GPS~1LEXYKlQV^X2J>60Oi7v0WI2~^pC3wj5<36 -gSj2BkE{iIdN}Z$LP?l%AaYvEwCrcW$Ln(C6nk~}L%2de=!DE@Rc1*(2HrU+yB;_y=i4R0*XaK*H|CU -(dKI9JVhlOsU&N15ov58u#E_~pRc5g#q1EecbXqP=kMrS2BRhpC3JJ>avgFgU7q0e}Jlroi$i&8a#0A -KntT6~@^7u20R(wFXh-kmHSZ{dqp;1&(uBgxHHNdTiNE3~gb8~_i4dH*vay1mhOw0I2choi-05XUr}& -Z$eY?tC%oFUQ?E&6e}oG#*4~F7r|1Am%xdUnDL7xiL@@Ln5Sd`_doLUI&6Ir?q%uv^ir;RZapgWLy2G -9x9_(yLu6F67-g2LE88xJzI&lgXj6CyFfYhw~499q9%Rlz)9%u3N45cK9mKZhsqe+q@Hm;xIT0d+rH^ -^+O5tX?GDj0hUL;ngUQ`Hm(NwLR#*&86dD%BD#NsUG|bfw2GFk6G9?_A1NKkMer8R|_G1lW2bBv-5{d -avlDcD6H1_uJZ4py@@v@k5|Jo%Sqhu3%yjJ>jN*?juZpTTzIw7psCx;c7XtCkfV3vJpHBF4>Q&7R2?; -M*XdgWz$0o(-|7f^p?`ihd#h0IxJmqOc7`xib^VK9?5R$r1rHKSE^o?kdZ6U&h+(|USc|NGmIcDwcM$ -DhN08oymPDZQraL)7b(!T2WUVMY_ytFVF+#U5t&-t67hSJC?U|5Lv&FV@ubZh98?9*$_0~0{{RH2><{)0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FJo_HX>Mn -8bYXO5ZDC_*X>MgMaCwzg+m0GJ5Pjz>O5$N)L)anFN}Czw0SHV`xQUA*6pfJSt_CY^8`)-9_Ure!ySZ -eBNwR*T>vDYRRFx^0uODi49(qIS_u8G|v_q}_sQrari7l7PG}|zZtXxYi6tzvvBps#ZU#XO+8@r|mwt -DFp+SAfYM1JBYR%XkVOhWz&2I7b8T_m;)Q=0CyjD(j)JAB%$vDpWJX>4q6k1Pw%F|7_6;>)Xq4OrU)u -G)C2w5!zk@ZoPjTn(>NQz@E+SVt3fY@ayJD`^|;tz7NAu@zUngN0}y>~|VVwYD;)w*-csyrJ>IZ;USL -hcrsAtgwfmQev6OnZ)lw?4Ay0N0HEEIhHPmhY+5Gj{h_k`KgIzatNlKj!{lv?b)X8sNutKPJMP@N)N2 -rqMGq;rDTNUzKmEqCgErsY;JQ_svC$*3nJ7tfX~#uCzkMsyPw!PSm<57alEZStdX%)5kBxoH@6|N3ep -Es=!QLJ)~`x%t~4g8GuREZ#}5Fa&^^Y8R!lp`$xhXPfLQw4n|&V5XVe@n=xcK_X%1(Ld&EL%c+tNcNv -2yR0gS4w(Eb4802p*8?a#<)wtD^EY!TRZd$VC@I;HMtLQNVsC$nCA-fvE5JfDn5(@vde%6ybKhDI`PR3!S|9#0hSd4s6v8Ms^)+E(g -kNxOmqQJ&PI<>J~kWad!{vqJ;K`qJ3WrFZkg^m)PRrtN${j7h_xaIaE -yP|~0OVz`G2K!ARba=BV>r$3gyX-{hVD391L?Dni6_;18mHEdty}Ba8AJEO?4>g_7o1@y*U(DE#&}Z5 -x_RQ?@7klyMBQ;JTmi^A^YuBA88G0FBDT3t|PeB|9%XB;8SgtgC=| -CqYxoc|4#GI88%C#(<2_D0E_P~f>8ZDx9+o_*N=`u_b%vUi2tb;g>W}8J2W4(#jt0Wu(3DKp*T`}J)@ -@t7prrc?+WI;~I+MZJ1a(gWctP51)K-}h>UbeCDK -{q+&4eCXrzn1h7+RdWjxhRp~v`#*S{s?M=4I`RGv( -hN?KY5yRVwR*%Be5>SN1cyJBHleD4a--)~lF5{KESUP)h>@6aWAK2mtey7DxP5z|Xb<001`y001%o00 -3}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyl*q-AIw*@tZd@@7Za$FF$k_KO`wll2M%IG2KmO -qu=xew%uw|v1OWBxsh5Z8kveoI+~h4QYk?TEnnF>?37z!9eb+SbLowx63}kz%#dj5C1Cgb%F687l3A0 -#Kn;A#-j!m{2<>(UElc60(GE+yH?~=TnC8YF -znM;SY|uUs7`85!-ZTpcjqmAn3l2+>s77n)18v2sT@gbqDaHy_IkWa}=zK`EIZ!DyS+1lz)`wD_gs#3Bi~OCb4GNgFbX}eW{dLk! -%E2#$rD+!c1*(2KE&MiL&|YzBtJDmV*~m|{vol%eyAPnM}!95{<+$Tv4dIZO8C$}?B0jOYcySxf?f8U -8LYgZ!N;f-N!{>n;SN5)h)LgY{%FN?aJ)XK4j6!?r=)nCEeeX#B|Sx17Nx~<2rRt7E*w5G$=zN_5MwM -Ww6D=Q2&Qp1dPGKamrRmk8QLEwMH=Thjb|A}G>@_(87(GJM)O5BpXG5E?lPY>4r*Rf`Ca2RD0c=@;+6 -=h+-deD40h;HRkRha45LfNy{bsyjO^?Ga#0z*X$D5hhoVE0YtqJd=*>!;9vsk5{(|Mh;STOa+3nD6A0 -VM$6gMdaihN*w8QPwOV}N{9L3yu -DNM9@mTa*oEkr6d=7xiy|Dg>iLHg`4I=UGjL08nSut7^&&6XFV==i8=iiOU?6_V-lby4Fcn3qWh%Th+TqvkjNShLnC8Yd_SCZQoYA`4Bfh^%*cxkB;i|2tPIN`R+uMHua -WOogP$`P*SVu8Cw$Ge3l|)8+E7zqrw&Sk8!a_6=_9xAy+E`i8HG!cgZ)jfmt-Op?tEc7Ml9dA1zcF9=k2w(F@H+Oa76-Za4&<%Uc3@%D=t~4 -X5_pn=Nj}HK%&=-smt(i*4d8xWUKrHhl$&9^_$~C1wp -}h_SRYqI!%xH7U5)(xNPh?m9Q4f{Tn|-}VISYD6GAC_(mtL&I>|pxdbr&e-{&q3+Y0#yAdI%Ewr$P%7 -qz`2d=%F&kcByZiuR|vxa&Nx$dN4h^RF|8t47Tdmxhf`Ve5ZiRL1ch;;?Kl)ccqDiT -|>{p&6coX*Xz4wrV?IQKYd5l^i(yi2dOpErOr1nf2&oKosr@5s+RdWr1CR$;fH7l2|#bRmZW)5BB<8P7HnzKSkGn!Kye^JE3nE3h%rodr -rlMoh=4m8`kw}6y!=QK6Id-M(A<<7@6aWAK2mtey7DuKn(m8Pi0046g001%o003}la4%nW -Wo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyNpU6=U0r>7m#QcdbQG -RyM3S(TDA}np}Oj>R>&k1ux?^UwrMZ>>vxBJagtFTwK&Ya6fn)xiB8}2d+1O`|-5@3}> -(xjSE<85T=T+xnL3WWq`mn#PVMrMa+?E4L;eNMgbiOZa5(y@C_rGpaL0!so@~Ji$?n_K{CbhR&bvgE` -_F7l}MGo5HZZ8%Iv;EW-x%&E@eEuiYd#L?C7eEfo8u2-RtY`L{STOpch3jw^$8x)TrJt$TI0mVH96&j -Z{tDx*-d|gsGn}C?!;zUeYDJIO00w;pWVBUWskKX-gJX*Zk=!c_)JM -cUhPUp~rS#Q1=^v#B?506fG(Vk>5y$fd*~QO1A3wh=`8hEDzByhqX0JS4XMmNa_T5xG -$P6FOErw7Sf}}t%U;l1;2{WU+VHM8^$vC4Np*>3U*9%0z3;T)_b!2$_!&_NJaQlMkf?`|l&TH)QX31M -^vJh!)$MjJyWcupfESM}=N=fi51(8j7mY@!WDJfin4KD*hS^ZTbZ$rO>$o^O+gxrnZMxzOLThT*^^0jQo6*6?dc -5mu2`~^Drhtse#Eqff%YpGH7jqlVr<+2hOk_6T2#wrQ)3k7cKcNDP8C&x?3=TU^B^a12Y*)tI*ooWcd -Pw>(BpD^+M_Jjr#%izSAhSiW~pdln`Wy~3YQr^RP6v#BJ42xgFn?VNd3&o1 -pok_9smF?0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FJ*IMb8RkgdF_~OZ{kJ} -$KUfQMwb_tNSI=q$BX)caFCEA1Od@0_oiCxb+FFZbZv5?Rlj>@`~a8?1lntRssf1|cIG!byX%>M%-I? -Lf~(GTZvg#XyE7Pf;HrP${sen`&kAQSnMt@;?vv{a588n(!3|*^{N{R|CXEF3EpGS{B(MlO1Ol+V -%&7E(drK*YpA|ACA`ODrS~&F4$swM66weuy8{B2e)M3=G3SCF7QoB9b;tS8>FbQwc?}7Au@;7QuP@0` -z9HfgxD;60|%IM&uj9NQP29OFLOfJMbgrPM1-j&clljI0A4d)K?g~-jj0YpaEtWK@`An70m)aT|aJ(= -T4PSE7~PTNeN-#MBgy6OIQUeGQ>>b -TKZDqYKF_H=UNE&T}%3*1QEi5#=_ZVr@EBLI86k)0fvuv_Y$OwcAEQHst`xODCya3X~ZG~3eH7D`QvF -W2)w|gSK#4ksEjPJTd-NF4Xz)Do#Ec&9~cl9`VDU*m`YfN(ph>%jDWuIxi`7Ff0#gP@Cct;{Yc%P#ANs8k3?D|r`* -EiPFqSggV%kh@lh<49V90rZJ88>ExL%kn{Sl8h!~{JXX5v}mFAr$YOQU8G3>L6t5SN&4ylr> -wq6bMfj#%ym#>KdvUrLWplnoyy>k{5vn>m3ID5yM=(ab>pB>^>ji--!c`DP -k$o@d3_c#&M9vBYM+I{zSy;po9#lvtN97~Okx-bA>?lR4$X*oQ$wJ}g%P*D}!q0GC(2M2V8vv6mWBrx -ug)(Prkj-IjI&pf&>3JJ*I?oxz8T@<(aR$$s#F;#25@+&Ug}4gORfwzbT$Q*g&sB-5@?4F$8qd{;tMO -c&xO&D_@V8ntG8=Jq2hT76CR>BJMxD12*WkG(aZR3U64&H8L7d<@L7d>ZDREPtn-VwWIg2=p=PcqZp0 -kOwdCn%z<~d26R<86ii`iiQlDMQ7Dp?H+Hb1&^iEE#~P+4nO) -H}vJpPN6BR*!}$nNLp(#NhNzFE?r^a|2ybY+cjg?j^tK^FnSSSE2-FLJIh^ -XU(Ctr-OU&6`bslQ-FWv$q0k%O8)d_257xck_@R2g`49E}%KxDE@7U7bZxr+I?cUGY(%#S6vfj_y(%# -S6vfj_y(%#S6vfj_y(%#S6vfj_y(%#S6vfj_y(%#S6vfj_y(%#S6vfj_yHobpSlz9ordOz2D_q4E70y -up*;2qeWv^LJ|q!eYhEU2{@=-2lL;Ofa;F+9JT&L0{;5^W?3^|kzh7jc7A39Cf)z8i?kdawd`aOT%Ui -XtYKf09>!I0k{;&Qc&r}Y4!891)962cwllYEn`gVqiEVy3hgg)S>*2ru_1-}}O7-x-{D(yDsAs#wU(dyQxV@)Gd`q|XeN6+Bwt18W?0$83NCM)6KS=`e%Q -{v9K8;8M@YeIhSK0Uge(<@vIM5!@J&RIAMF -%ID`2H;ZE^27c7LH^bxp*NPg#G$Xuz`;E~L26s7~g4JXTMe8f<0QGpD=)L@YP7>)MW7D*IEvEUvvTnb -Hp)mEzX4*|nOs!Z-FWCnd$B`IPx6jK&!n^35Y0jJl5&W8_w5k#%I3*9h;skPNGMUCna{j8Fn6h`q?Y@ -~8@^PD6ABc{H=gokUzBX|Rpp#dXdl9-JYdHqC9$XAM~#Ih79M9?xYPn6gNBr*n%2~g;Boxu|k2AJ^wl -#2W#>GL45qFDG;j?LPjigdx@$MFJ&s3}wUhyoQ=Gl^Fr_sDt3Jro*&Y1mqs-t3vWv5Cy`MBqjee9G-B5+6TT8*dQXjZTVK>A*{UAUp^ohm@RtT}iAP!r -EK(_E@Fu%Q9%%MBJhcDgfv^$>PUyv;^O~9A1aep -?0o4YA=VbYz>2ff9xJB7(&I=P$mU4R*4L9r#Xj^rK10YOHRnDo&w9_p<0dup$y1VbM->=CKW9&(x}V0 -1;c$uIRVlwzIMOD=mtFMtOiq-nvE;xs!neUL-?Khow?GC_VMv_wp`s3>tE|IfFgF0oei%xVSP%;7+a*0Rx+EDKbd9?C2OldS*C09gIZZ?WT -!>HWL)gn2% -)wyOf4P05hz&^kIYoQ+1b`NBq{;e|}=Oqdno)YnIghxQIlSpdr=r}ed5IvT?um)leC=pLKztnEK{8Rf -K$;If7x=P=odYlWNd)TGPPyg4<&_k0~VmuM{eDO%5lggZhq!OPeDCk)i`T3%X}o4f<;&ksnEnqz$ -+@^&8Nw$y<>prr^YQ{SMi|>8`A!|gb;<3YIX{{SGZl1bXV8tv|Fj^fu}w69^SwEe4c{Z4a;cB(=MGn%!|mGcL@hJ2xH=+Qx&9MA)lGWVL)G`J3bIoLnqb=5fMub}gQjIlH$tk|# -UYv$XL6vH2KIxu>KRk}{cO&@}R`TfWwQ>Gf(wj!J5^6aFIij_il`)FRZKU>z8OT6~OdETjzjh -udQaXz5haWkV@AU2_9)PuqEru{74?8eb&X6KyK#C0BiH{mMa%ci}2c3G4+>8?%fU7 -ONHM-dM(5>iJAo&6an{9csBOm2cc)Tc -hh-qF<;Jar+xY}ylyuC&vh%m4dsGMkIO!t($hj3^K5#-;r%LAUMgqjnt$6I`qqxdNq{`{h&?++8m&EQ -v+*BLO9KQH000080P~d=M=Inlk*`w#0GhJ^05Sjo0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgi -MXkl_>WppoPbz^ICW^!e5E^v92-EFUINp&FT@Ap@v#1~sC(`QGlm&mbtB#d!)sWG4e)beN~t0*q!s*A -eJt-@~R*Ux@df<2Pm(hQQ*bxvl)-aBH&+Y@o}e(!t#@&6uw^P~Ur`A;4{{``kO`pM6K^!S?}|MZ9d?e -V|(?DyV%@9~S@zJL7m(}#ch@XeQBKYsY}*Y6)6zJ2`t$N&4o*I$2m|NOh({o$JrUw!%A$4`&1zW(t3o -9`Z9-JkjXyFVxW{F@KoeYjKp?fZXz|Mkb;zyI|3_?yRf|3RMj=YR74yKlex^7rrmU)g^6_|3QXkDq@3 -@zeZpXZ-lt$4{@{fA#78m*2hr_2XB6oE-oCrM~&F* -9`|ab4_usz%^v~~q{d$rge*EUUPal5uhx;-A;@iLc-|pW$9)JJkr~mQz*@v(H>C=bbJ^t!(-{E(U?>; -_$_Q&sj`|+DUJ^x))Uw`=3r!PPKQK|jr)BE?2Z$JL#yMMWF?5`hx{P>5*S6_bf`1JnQAHIEMe;34ek1 -xOZ^?&;K=}!N7Z~v{N{?3j3{7*OX_`8pH_EWll{doW3e&4nK`TeJF@83Mu_pd)+?N2#= -_PFc%FTVWF{ol3udkO#YzUeH#zuqZ+@He0T`14=`u>+`?Ei3A@VECJe*NpmZ@>KK_jg5q_ -5Q;hQ;#q2M)LbV{{O1QuRnhCPxHWcl7B1FzkYo9&EuPo-+lJ@mroz==(*$X-_`G(%fHp|XLs0t_5IHt -dEFoS@|*wh^<4))zmxynhu_>;|J~OgKYse`@i!m8{mw`K{s(v3w{=}_e|7D*>+$&I&+p&-um1P=(NF& -N|6{lEy?1xUKmSr~-B0zKPal8x`0`h3a=rci9pV4;yT|W@(%m}0y@TYdum5oO5MSTVclQB*xJ&tNAa? -=&?)QHXZr{EC>bKu~{QBcR{ZXdZI*-R+{nh{ec>8`o@1IxJpMQR?`{%sYzy5qmg0~fa{>AedA*s#(H$VQ-KmPpl|KmsZ@9zsP<@Lkge)&n%+!6DC{q)mxGGG4c>-Ue(9Sd(_+Wv&XuY-(8b%-X*XVS09D+x -})cv;dR|VKkui1ocrxNYd3f94?fy6Du&B7JLDeGZ+97Xx+S&Hxm?9(QhlV0q>JR8f4zP;pOZt%q1<)3>$=mP`*ZIedv30Ly5_& -+;0_<>si^MD#dR0jd2{P;=^15MvYv{%>*KD8Qa(A4>{2S=y1d<&vUkx|RP9PVbu_=bGt8;cmj6UZ%ep -7+(<2|DJN0-!{2d|_4kFphn&&=3si*qyY*hdKVE28UrxY#MBe1VmhIi@i*DpgPc;q{X?+l+V5^DbbbW -WiOk=k+<_Ulc7tGvG6+UV_MjAKJ(P{w -&#AjuerJV)7M>l_kSrgH+SwQx!&%Qx{kKImDG8gmpcyc*X=*Ui`#s?Q(oH3QCm;{^_2BI-d!}&b2%Tm -riTy+Pc7wW^yj*>(c3&+7?fn3tQ)qL*0Tur4M75r4X`6? -h6)yKp{f-WI0J!(!_=w;`wpK}ZM8&4swCLWr{UCY;8UJ>Y)9$WMYhtN0eDNVoIn$UBe@xI6-Qs+>vB< -@l-s+)dy--94nf<=QkTINH{9lh+nE9DUe2(fv0Hp`Vfo(A`(eS{7pJXqXybU(7*?daV?L)}XAZOt7jf -jep+uX?;M{Lni;CUSKc_wVM0#aK*V_ck4@XB0L@pu53&c>T$0-Tg$G&hF&grcPzb;N{0^}D;L((ybeIHmKT`8E%rfCTKi=8X_uvgvulEiGMIPo-%6Yr@88x#m*y&cu1okFGqur3Q -V(z}-^{5xGtop1GX-=fRF1`&v_(9_1+UX+xsuD87dlu=O!IpGU>KA@G!3rRFHk#peBn&f)RUCA{*Q5z -ajbpk;)6zD;lG4yTXw#x$X=Uzi?S|8dVcWO&!_T`5|{42loIa@F)Z6YL&E9G2*N>ep6JHuG}d|8-5jJ -U<>6nOfGZmRzSnKLv|9#r@oxtU8)%jV0@+f;2$nT=Ui3h2`tH?^?d*%1_n$)B@g&%QF=*WL`$4YwFg+ -Uvs&~p0+$?sC}Qgx%-iyms);mB%x2!_1<-6NEYl*y~b1Dx_WvRxoXA}(+2vxkj#esc%7LpXnHemdaC- -Tye=K!Tg@-QGPhGAccUdH&#czYRq?#^_AG4xy-#B<)A93<8to-uu$`xmOuP%3Ad$Cy3FUy51$79r~dJ&Q+(zGtg4>sF+YrXsJTea%wbX} -dQtQ=?7ZpW-byX6HE*jfPxkgU1B*5@y{u*ydWh#t7oQVPVpFb{KJuv`b%J+VQ;{`Y(1eH%_NgsDYkt( -ebu`-qZLJCCnYk-#Px4gO(=*mo)ZC%@^quQ;G$uzZD9Pc6GI4?0O!Or@BA&h&j|ou2lZ*qjcwgu|OL^3qFPlB{X(lf>L0YkCcrt63J!4bRP~Tf -@n-r$2Xxmr2B$72cj%x^!-Q$cY&nd&1V?WItpE`>*(d_}^^%U -7q{QXQ?#vkLPom-g8z8Qz;W) -h9*^U_sse^{keLZhgx%`S8Telap0jd*m}mLr96yq4_)Z}$ohQqk+r6m^}93usBUPY!O-0S!OyHT)PgUR9tZ7l&_ru`1G?M$}9`)|m@Sihonk>!4ex~L3r|& -mRDPI4j@hZcf4rxs`ipI<*M4Q#;9fx}Cy36K%TbRxVFZXaw%*jhJJZ3BnpS#DI`$gYvBwx!NUDG9-+g -wJ**N`v+>Yf~|E?!qI5fwZG35--I -b(x6yu;@Hh+OaLxHH@yV9yZXMrv}fn4gH*GZ8kgpFZ+Aot7)@$;O4J%3_}Lm7#P?uHgZ^v-EhEhPs~f -JFRD8M-bPHj?>6{28~HOouIH8p1G`8^^}jPE>U~OlVYD0s=gvL(QC|P))wOg!m`>k&D7r=K4vBLHnSH -Idd*b9FnT>_wL87|^fr@DSx=!&^~d!7^IzW8Qtns9nJP(l{BZf_Xwx;nGb`NlUwTw8*K0j61u|)8QEu -6CgiTBv5*RT-mh)l?R*LWSG7BaVKRvsp%+h^bbETRW>y1n25Fu=8UIv1uBlBeXrdiJ}A!5ROcOo-=a5 -*uMXD(+7JaKowdq484GF_#;{c1?w?x|bl)#_0QK0I=cQoTxj#*2xk$>24NPLkmtBhajBdfryptpuhX= -WYz1=1$A1Y+30n3z22X@HnqZIWjyFPlKMmZ*tVu)DH-ZuXBiU{1p1Td -qOaHTQzt)hKJh#2nWJu>ZsF+`o>OKf(P2!9`##q->t#LhrQ~!amy!K`Ly_h@sA`>ckchnW71vnHB%4` -zuHil{MYRIS`^C(3uIIjHf*|_tH}pWy`LFgemy@-=?z&szx~45_8uyF5E}y=8u650vaq`zyjf$+9plN -#aSV9@zpBZshB7>r0dS?7Fig=xR+EnKzcNCRA?3#kqeO>c --uN$7<$x#1v&DG0=r^~q?@y^hYql;U{fptx9V;Wnp-+9KlrItg>p{ESzzZB9K*$lU4U-vH!$?mWxmS* -y*p-yjLQMj&|k?;9Y)@Pi{eN1GTg6)aTGk5r!t;*|+QW;{v)=UQWRDe01e)BF@xf+*|&3&7mRu6PN$H -{eHGZvLz(2D#1(HQJDwbn;WWzG~#FQo+Tkx-X5i!|$?p81Fw>z;*=;r?z0Qz>eBrrl+ZK#Vzc8zx*~nqA4|Km^|NSzLYyy%@AkNHIU0#=9C|_$j0=*O*yoX -UAR`WWa2L-#Eaf_1uU^dzpiIYf -SZ+<;;WXKekb6={0oa%WPt;xnV8VCdB=s=`Dl9!<5+g_jtv`Oh9HqX$Y9!a^<_$6MNM}+b)<)T%(PD@V!U|hrys9Ss;Lz7rXIkZho3Oj>FyyLgWxiYIuji; -fr`0E%g}>Pqfq|+TG0!PYqmdPdV}F!NqQ_t5`z?^yccO&&x;b~!Q?gV+pNUF03kP+kYZg& -*7(VfMC+E+HNsdI4uYdVLFY0IWj;9;$~n=@~#sA+n`$mf^QN~~gP1E%L8?*R*JE^G=9SZKCj?c$0q -8NicSG27;WN^HrXPKJS|Or^t?3#0~tOrTdy4*z%w{#k>7k^{e2AF=e*qQsLSKyc5f-$MXyo#?n~}Yb47S-n{_# -c>B!d-KG$KprnC~8QzONjE>LNc#Lz13(KOlU%L}3;lBEPhdNkY$$^4am3?((rG!}+wbnPEC6e~+SqC!R_luwUEYI=plxlkY9!jqVU*J~MYb4ONeX1E!Ia#5F -sodwv{Z9L<`|Lr7w_{g`gLjC%Jk=N=S>{(VAl>(KYy;bf>EwI#A>%F<~qZGO!(z_zQS6Cz%JI6ILz?t -ambW==FPr)QawY9?{}wW}p)XUc5}XRdkQmu}m@wbNQ}W-ohYV>6#NF7GKD^RU@9o0%w?zQfBKHOt89m -8K7yIf_oCEqwMoN=-AKwlEN6FqmAG+>DWXW@NLp9D$rJfr-bgLB`2nm101e(+BaoymzjV#QAYv+^apD -c+P*#^43KRCpP@no|WdzV2!sA*m(!1C(|?TX`UuHyJv7S6`62;4s+hOgqN&oysWg&KQdXh73nR{&g;hyd7d6cOcJ&;IPd&=Uq4jN~k6z)s^<0SK=0!habmQCR`+e~Yg>(>k?rkORPsyD8ACvY>r;wzUoVa!%Hh!~E#Ura-2w4UD7Eqp|%q5HwF=(6Y8%Gqn*%N}i6>~?hrzj~R(ooBw&LZr=g^qDng4RI=o<2$U3dfIm2=i?V -$59G)O^jHI$q~_dNNc$x}cfc%zU9Hru8fa;>UAhdg9eoZHDBS8NjSdrv_gic4o;TnPnim(Bw7ZWi(r_ -nm5?w+|m@yOwe?zQ>1Uxf@k+&ipJ)`V|K7+T^F;Oo4j798)oxZ4o0sz7BmM!wk`FQv%fs#F`eD?Qqw_ce-8)5mW -FdDk@Yn%ZbbJu$dI#M>dDoGXL&2M*2KhA=9Gwgc-UcDIq4?DNusN=!?*IaqW3s^g5Bq4FTgRXdje|0` -I^?sdQV%EjdkxRx08;`nTf@d?iac0i*m|(V1Eul^_+`*o7L!SR?hlH(=)ppczDcYX(T*mnQElX$!pf7 -W3H|lCY*D^X{MApOF{FIdYyIh@G)R9pLSmcK?B#tWUkl4&kA*RSZBRFU|(-Tj`Oy}DKD`zo8N|j$DB& -3*|{NovlW!)Sl3vv)~_SJdmG&<(q4{CEhnMwm(jV|w41D5N#{0OnUC2Mo^7kyo*k*2N1WBDjn9=+UD_ -ksTTa!jeChT4PKH{rBPVN4XE-i+O;r~iaPI4|Um1$fJ=+I!ife{iQ<0pzHb&ZqStN0d&e;LD<`|U){u -OV$)V$PjRHlktnM&D*{I_G$d;bo37K4xj-MvRfT`T?mQX -Ru(7iL9ASPP?7YscJ*abSwtryHaK~H&e1v$=Pmk<;k!{2PRmavp~{q?>Xp-QFH2+`OMLpl%Xx-W%0FU -QsNZXnj?5I2Uv5Kt$N$6~CdMYk{5Wf2ccfe$bi -MCT3$|mqYHnoBa>UfCrjfhhDYV%Ym>%1r;LMo`ZEFq(l+8&yl=tjw4(UE8!+F~S==N$r$FNYd+xgl$8 -=aFlCu`57Q>@p2iNNpuX%{`~-S>X<&+k9|@w?ypV}f73|N7&<_(PMA{xIV4;hXQ?e|rDzck?G2zkdJS -`>*B*{qO(q>GvPMeSbfvPQ=V`Ij^v4%2kKtVb@T-o&Hr*33@b#otKkntEMpZO#0!aZ@4p@Fwr47HMtx ->T8;uPLc3~;Mz`bK_NsYoJ&xj84iB!HnlOBGiR0PJ(aGg3%9>r+k#BpP%ldLTI=*J|;*9*7{RY -RR*6hL81mDw4-3hbhIMlL@zZ^_kWMs|y)$!9cHgDE(%>d+>-!jc#_LmljTNV_{nDlO$Yc6rVobO+bp) -Uusms88j0n9a6I_pVCeV5~`i+wCKxU8m@t?6YG>&{RNJ0QCpHC^`F*PQe>jxE#tHC=!MT5C2P$ofLV% -aC;$;FcqzYtHVk5l)NbrE^^?^=ET7g)XdK~PCVOkzsdMeip2QkdH9W1+aH6& -5Ap7d6Gtpt*wVV=Jm}^;jF9*%98Q2{!U(WWfIY~ZSmyYZ%XEc|iN6UbAXDCjb!d;Hau9+57;bnhjalq -xI_i{RWIe5HgW78()a{7BY?7T?fa$NS^a@24+kF?Bruh9UvD2v&9M_3ertqzI(nV#atv=dw6&b7S#$Wq?%*Ag&Z;hFRhP4>%URXstm<;uaycTi9D- -R6f2>)ATW{YPiV3TjF&Z_VPz%xyVSx16b4&eSbu>Xri=%Q=HPLy>^m7TQ@HVp)$bXW5oxY}+xm?fltx>TEj|w4F- -WcKWydnT-!OzIeAyXtv{G+i|h&u+e2Lu^ndFPIhd&!P|b^ew%qw&hIQ@xBM>|EE(XW?cCRP?rS^twH^ -D~j(u$>zP1xz+Zm;8mwMaz-EWi4mSRh>rPxy3A#rE8CE1dMBq2#i5|V@@AxTIQE)r6N6gh3)yD6CyC) -@Jr%3+W6>3N>lXXNnuog7jQ<(egNxn{X$Nl{YVadBrjBgrJGd6BNAYw23Lmae61>1Lrb`M1lpWbMa0L -hcNYbVs^b^-X;oiI2p`Z64{4bVs_U%RMD~O7@iEDFv_J4vcJD``gy_w!gS-EpB^D+w6U#$W5R&Y}!^f -+e%|!W3D+Lk&Fv$>!9tt&7PBJ7KR&hZD($_GdFwws_;*rJ6Bwl}#QaM^a2w{3-OS9II9zcUmkHf6VsgUygPIlFE3Z98JyS%(c(H+SDQsJG4M?U=)zp-8}E+cAd?ptoI_ -?U=)M%wgL++KxGF#~il94cpe@wn@4jZrC<%_8e~5YgR-xKT9VZEaSJ$=#BWd?YV8|Y1_cqsCHwz4Usm -$*;r*;Dc>0i2aDfrIk*i0d)lAV0NXCZw$HZh{%`oc?Nx4@_1o^?UUM^|!3N)*p>VL_zU{Sd+w9vm`?i -n1ZJ}>|v~7}a+v6KKY`al=w!(Ar5)HP(?+k^5ZSZXad~=~~M|#@;-}G{0f^Elp+wtCZyf;za_O-VS>T -PR!ujw3YMsK^%+wSwWv%KvrZ#&D|w#BxAyloqA8^+s)@wV-@?YeGzZ`&T!rf=`It(tA4W!pd5c1^b3i -EWc$1MSVIH-Fy1d9&utL^nj(_;3@mO=Ip11%Y|%Hq+Xs6MF`qX)Y7pc22iF(`{>X+w9!-b+*mUZO3KX -?A$gx?+n$yjm~YObKB_LHafSB&TXS}+v40dF}F?3jb%4&-ymj#*KJ#J+mXC8RR4Tx^QvusaWnSobze0 -v(uo0Egxl`mCfM7?;I=WiZ3%80fp><2z~0Zcsj}_$ZF_y&2H(a#+XmmZt+#FKZ996~j^4JTcfHC&49s -TUwwbqi_qLh0?c;6xc-ubSwvV^%<8AW2?cQy>ciZmWCgj_e-L_@7ZP~rs$Y$HA+jwl-ircp0HUZxD#< -sn&ZEx(FO0oI1ZFFsWT-zSko_%4pb!R9XfYE+YbWPKiL}1w2+BUT|aoo0fwymsfD{I@t+Vh7t(@yPV- -5H7wy8zcjg8i&*KWoR_jS#UVb>YcvUuxsfZC`5Jm)iEFHb&cs?9Nb}*pu2eqPFd)ZTo54YT9<0cDy7> -lGlr@1q&M7Z0iD{mwx%qaMmPt?{Mh0Z?x?j?b)%QquajGjwyz@O#u{>qUXbs&F6YD6h?FUDqsI4u~4# -ev+dbzdp6si&9-N=?bK}hGu!^mwm-A&%Iw*dxu*HpmD%=Uw!N5bFJ{|t*t1#xHdQ8`?7M7REE~RW+ai -0mJ4o)f+abgI)Al^J{f%vFW82l($bH+a*fuM+&5CWaV%x0Pwj*}V-h%2uQrm9CyG^0Dors;Y-(*#$m2 -cY-+a|=Goh?$lXJ-o+Z+j5i9>lf>vF$-@+Yfh!Yu=Vvd?EM^r8iC9%y`4!4Qw}?-Qace!p#CV^4pkh& -q1Y~bH{T_0*YU31hMJErUTo8bz7WnOVVwnvu7GUv+bF|nz3#();mM7G}FhKc+F@(gW!x68qS`EGl4DK -wiw$JV-r*pI};&l=FU)@yb5T_Mx3DZjnemv(&u-AWlmwf-W4$EH=7dn~ZKUy2SnU+dS7y(-`Syq??g$M!Fg4W~7^u?l~Vekqk;VDBYlRgVN1OHz$3 -!LFopi8;J44ZdNB3)M|IB|$CpsAEW~7^uZbrHp>1L#xk?t3fsysw`XDCGQ=*FWPk8V7=@#w~*8; -@>0y7B0q@A;VN6(ik87QdmhSm0>*?^2 ->7GAL*7X_nd{EfH(+y8IJl*hg!_z(AU@?6pLEZB;7Smf|)QwR$M%@_ozC#hjQ8!239Cc&VjZrs7-Di$ -X#k?z>06O!?b2IaX0Ai_kh9U^2ZkW1Z>V~Nsqi&3PO}EWbH%r|Zbz{^`P&Yx{1a+TL5rn!C>Ygu8nC> -2YndOm?40rZi2cA>L#e0pl*V?&!`AO-3WCf)J;$~LEZDE1T%j>>jA#H=L-R5WdK<>WZlo15>wVqSvO_flyy_qO<6Z(-IR4x)=gPAW -ZjT;L)HyhH)P$(jaoNq-Kce=)(u&&S>=<~YlczWy611*H*ej%b@SHETQ_gr -ymj-|&0F_)>kPlVb@SGZTQ_dq^Y`hmaT&Vq=akYE&=iX(g0367Zs@w9>weDt3n1vaq3dR@o4M}ite1J -~Ra2%0Dd@VP>xQlyx^C#Yq3edO8@g`jx}ocyzk;4M8+g4l6hY*5lh;jNH+kLUb(7akUN?E&soX66@av|pcZSdTSvs+UUpIc;_%-lr;Mc&ffnNi^27V3v8u&HvYtYwsfnNi^27V3l8ss&|YmnCbX&SD-FBtzN?VF8#g<}Av88}%SIxbLbRk_x7t+PNA -zerp(uH*CN-0H3ky4}-{-7dIYoOLZt$|u&zM7||fJ(ZOuB5XPtSPi|xtfp6kJ8qZVY^;S*V46g?RqT< -Tf<(#TZ6Y=H5Je1#}JQ8Z0%KYcSV$!CQm325$}C8mKi;YoOLZt$|ttwZ{DY9QX^|8n`v)&-> -@gL;|`7bPebl&^4fIK-Yk-0bK*S#x;j!a{fy)!9rdGyasr^GZZItdbj4@1q*%+{2KT*@N3}Lz^{Q{1H -T4-4g4C{T*SgB@M~OCEG3CJ!LNZ|1HT4-4g4DTHSlZT*TAoVUjx4eeZ4ajBKS4%YmnCO*vZ*Z -{EsVgtkmhz$^XXDB*AY=GDRu>oQO#0H2B5E~#iKx}~60I>mL1H=Z1jrn7MAh7{r1H=Z14G`jBMFEN5E~#iKx}~60I>mLubTXY1c40j7kn=mT;QZYKzD{>0@Q@{O;|33 -iG7%shY53-yoM=Qn0v9V_)nP(IeNH&mcAlaBd-KcqZae-t5$p(@QBpXQ -f&QLfo*829gaV8%XxfP$b~kps_(?gT@Ap4H_FXHfU_n*r2gNV}r -&9jSU(bH1=KK*ub$tV}r&9jSU(bG&X2#(Ac1{L1P2N#{9(r1qm7(H1^JLeijZOHb89P*TAoVU#}T~7; -G@uV6eepW4`gICat&_gAE273^wp<;Mc&ffnNi^26+wg8sznwzk8gv%wU7T27`?;*kG{1V1vO1gAE273 -^o{SFxbGa*F*z@4F($wHe!CK!@#X~hN6SF25OC%=$MBW9lSMoYoOLZt$|vDv<7Jn$QqC}=1-4;vIb=h -${Lh4C~HvGpsYbzgR%x?4Za$DHTddfiWHDF=2Ul3)&Q&lSOc&IU=6?;fHl}^P}QKSK~;mQ22~BJ8dNo -?>bt&$s)12s{y>0{1xpQ#8U*!1W_O13jyU0{!BGRF21X5x8W=S&YGBmBsDV -)fqsE-m)@*~N-WduJm>MuOU~0hBV5u?3tj+iXs0L6Cpc+6mfNB8M0IC60?+ir;Q4OLRL^X(N5Y+&x0a -PRB9z-8d4WJr8HGpaW)tIjb4Wb%EHHc~u)vM;=1qN0Psv0@BY5rMLDuM%^2Fwhc7!dK!P;^kMn6t?># -V15iOwf)%9DyYQG6Y%(Vi24lEYD-Uu8djU843~0;;_&SE8DQL4U59CxC?8zu-J;3;m_oICfYMOp6RZs -Va#dTm`TLU2xb&FxLss4rq7@LcDmK+RHh@Cb~IrlPGZVuilJsqai8(ZL3Ci%z^Xx11E>a24WJr8HGpa -W)c~piR0F6+&4iPv22l;78bmdSY7o@`s@IGNR5hq-P}QKSK~;mQ233ukF@>lGQ4OLRMD?2Cq+T!5i4L -k7R5hq-P}QKSK~;mQ235T?6c|`Fuxen{z^Z{&1FHsA4XPSc^?DVJxIn9cRs*d@%@;bq3Qb@D)&Q(g^9 -?WaP@;pf#(Xd0HI=9TAgw`KgR}-|jrjw!psYbzgR%x?4Zs?JH2`Y>)}X3ERb#&Tb7r+@HPC9H)j+Fvh -N1(j238HM8dx>3YGBo%szFtQss>dJsv1-^sA^EvpsIICrP1wwzXV&XoiNy(D4Za$DHTY`q -)tE1E7GrmYf(5V!U=6?;^YzR#o20BkS%b0$WsNzAI#UYL8l*KKYe3dJLlHw+gR(|XHuGu0LRo{d24Ic -(>%EC{$QqC}AZtL@=vk*w)}X9GS%b31DC;y0${Lh4C~HvGfUE&o1F{BW4agdh_0G^hGffJ$25Jq|8mK -i;YoOKutkF}q;smV*S`D-sXf@7EMc8Vv)fiiyhRRlht;T!>@w8jO8hka-YM|9XtASPntp-}XGn^qu?E -%&RtN~bqtp-~Spc+6mfNB8M0IC601E>Z|jWbh`GhdOYQsCR~<1EB^&4T2g3H3(|J(}1S|PXnF?Hw|tY -+%(QSou1^(It82tHw|tY^F^`KXTsB%uX~=}lb{AX4R{*xG~j8#(}1Tj-`N`UH0Wt?)8MATO@o#OC=Es -$j5P3Q;L*UNK}Um*1|5y(*cTp+`JOgCcremnr16|%0}2F`1}F_s8lW^lX@JrIrNK$#Ia3i(8jLg;X)w -}Yq`^pok;WM53>Azt@Mz%Cprb)YgN_Cry)zUOcr@^6Jm)qiv6vvEK}Lg&1{n<|8cZ~pXfV-WqQOM(48 -;T#4JaB=G@xie(SV`>MFWb)b4ox+;LyOKfkOj_1`fS56cao&cxdp@nAs5z4IUaOG)QR7mqN}Ei9-X21 -`dt+K1jpnouM9M{*Y)!P%;{1G{|U>(IBG%MFWZk6AdOBOf;BiFwtP5?-Gh86iq0aP&A=v&bLn)p>w`C -#4w$BH1TNS(WIkEM{^FRvb#IOOAePD?&wHHnv66VX)@Aeq{&E=ktQQeJeqVg>1fi?q@(XHi^622$w-r -tCL>Konv66VX)@Aeq{&Eg{_xbiB0*^)(wx7;Nk*ECG~Z?qucV84k$4_-(xr4MUAkOKmXcY()a%`nVM> -?MrF7+;lCGpH=}NkJlDS+-QBsr?Ek#SwbB8TSOVX0GB=EfEZd$sQ?nrn1?zqyC>_~PbJCd1-BpFRInq -)M|Xp+$+qe(`Sj3yaPGMZ#G!Dxcf1fvN?6O6t~GMZ#G$!L<%B%=vMbB^Adza<$>>(VsANidpVG{IkT=i90Ug)O*)!%H0kJ_q3FP)iANKUCLYae%3`iGS&I% -lns_wvXwuQ7qe(}Tj@}v0=I-m$(uod6nv66VX)@Aeq{&E=ktQQeMw*B;5osdQJ44aINRyE!lS{M7oG< -jMc}5`uN)wdke2bS^deYLQrAbQ@mfp48^BIuoQMhSx)8wW(-_u2P5}xLK0|4Jif|>+132GA5B&hEap( -Z^|c$)Au;c3Ftgr^Bl6P_kFO=OzLG?8f{(?q5@WSYn{k!d2+M5c*M6PYG5O=OzLG-+wl(xjzHOE0UFM -5Z}pn#eSf>1D-o0nmh}2~QKACOpmgju?=YYjO}V1U0EkQkR_Xlgd{PA_k!*K}~|11T_h264YE%)>F(= -q*IWSzlh!x#rpZl{neY7*2Ws7X+BPDmy~O@x{VH3@3&QT3W1r4uI@H8E;p)WoQXQ4^ykMoo-*XD -Bc@YI4-%sEJV%oaLV4o2+#rmOE)imNQt+h&CPSbXWSPJ3}!s?QfdiG_z@36LYTu5)<$=;c3Ftgr^Bl6 -P_kKO?Y}|C>-c%!qbGO2~QKACOl1en(#E?X~NTlrwLE5iD8181od4a)I_L>P?Ml0K}~|11T_h264WH9 -Nlw4Nl=rZCP7VtdS@sm=xM^!gr^Bl6P_k -K&H2h{@Q?&G32GA5B&f+vlba?ty)zUJ+%&mqa?|9d$xV}+CO1uPn%p#zX(H1^rin}wndXpb#+1W6^4x -=PpruJmla?keOFlba?tO=Oxwri -n}wnIO;DPkG(l;C(gdXmN)wbOC{0kBj5HBxBGN>pcZPz1ktQQeMw)mu@o3`F#G{EvuW5vg -G#P0!(nO?*NE4CX8Hxl(nv66VX)@Aeq{&E=ktQQeMw*N?8EG=oM5KvGGv|xaW?lwLlaVGPO-7oGG#P2 -;+?UP)k0u^XJeqVg>1fi?%;_A+Xp+$+qe(`Sj3yaPGI~u%gGUpOCLT>NnqV}+XoAtK=^V&tlF=liNk) -^5CK*jKnq)M|Xp+$+qX|Y6jAqTMwdY-TNJf*4CK*jKnq)M|Xp+$+qe(`Sj3yaPFq&XA>0dIwBwTlf!h -u?4&B69F??@*ms7qp&1Se^!pBDIOah;aDY3Y}id1-BTXDB9S-Sy(p`9fBeK1+{T3d|gProS^Cof%oZJ -|eBSm_gid`|hHkIRnykm(w#&S2gYSPwz@M?DhID(`&&(OOuu+ElpT@-=PqprAbSZmS(*=jQO1_PceuS -WSX=zX=&2Zq@_tqlat;ViW5+ppfnk2GSXzEiANKUCLYb2NoY-q`-PDvB27e^J?j)knmtR|p0~?OdpTa -Do5hMJqooN-6O?98#GLsty{HsgnzS@&Y0}c9rAbSZmL@ID`D6VlDrB1TZ}Ta%Ysw6sCOo|}6hZVf;c3 -Ftgr^Bl^W~;J|K-90h?^!iO>UapG`VSV)4P^c1vgD@n%p$GX>!v&woiar9Oo_Wg%=XA(B1iFi-aS>Zg>?b7oH3^IzIBJhFS*&8z#Hfi;lb|L+O@f;6 -G~sE&(}br9PxDM~b0!C|15cBiCO1uPn%p$GX>!x#rpZl{nWp%tXSOi%hPsH|D|;zg}Eem|)bLe>W>RYI -4-%sL4?iqb5d8jG7oVF=}Ge#Hfi;6Qd?ZO^ljz$}~A@&c8b~9UDwdn3^m#S!!a`#Hfi;lb|L+O@f*PH -3@1G)H_4bflw2nCP7VtnglfoY7*2Ws7X+hpe8&`c$)Au=burUJ*h;fiBJ=vCP7VtnglfoY7*2Ws7X+h -pe8|0f|>+132GA5J40W4*B -BjW=!;~Z?Nl8+YlB6UlNlKEEWFDfVC@D&clA@(>BB;P=ans_a#Z8Nw7B?+qTFA7JX(7`>riDyv{?S2m -jpC-oP45hkbVs@)-BY?LzWLx&x~D5WC3(8iQ;Me)0)d+rH!W`ZuE1$=)8eMZO^cfrH!W^j+_aEsA=5& -pWolkVp)v{;GOZ!gqNPPki2P+C@%Wu{o5v_NTr(gLLgN(+=0CoN8TXDA#%X@ -SxLr3Fe0lolv0P+Fk0Kxu)}0;L5?3zQZoEkt@}C>$7RG16kB#YpR#^{i?Ir3Fe0lolv0P+Fk0Kxti5k -d6!1HN`UNgabAz{b4cEVx+}L3y&5aEj(Iyw7_UF(PE;-MBfz@Ego7tv`}cF&_bbwLJNh~>oBQn;?TmO -g+mL677nd7odXXo9$GxKcxds^;-SSui-#5uEgV`nv~XzQ(88gGLkoxA843a(T0FFPXz|eEp@l*Vg%$} -d5?cJT=3j9#hc5_P5VRoZouNnopann+fEEBP09yR>dX=VVm>v#-76dH_S`f4#Xw4VlKfdQ*QN8mO6)? -15Xu;5ep#?(=h87Dg7FsN{SZJ}(!k~pg3xgI0y)zUL9JDxSanRzR#X$>$76vU0T5IZNo>x3z&?2C<$I -R`<6$dR2diCq=^ip2h%kd(yj)H|23oRB}EVNi?vCx`-c(Y(=!O()C1w)I276&a1S{Sr2XkpO8poKvTg -BAuY3|f2o2n1RPv=C?^&_bX!U)9|6JVFD576vU0TJz6d!@|O#g+XgiAHhM3gBAxZ4q61X} -d->PajT5NHw5f}aIH3w{>-EcjXT$NW84TJs{=^brWO5NILLLZF2}i+~mZEdp8uv8R5NHw5BA`V;i+~mZEdp8uv --EcjXQv*72Qp&+22ML&yv7W^#uS@5&qXTi^cp9Mb)eir;J?pfTk=4|LSa?| -s)A_0LG0xbes1hfcf5zr!_ML>&y76B~+S_HHR=zWJG0f80*Ed*K!wBTpK&w`%?KMQ^q{4Drc@U!4&!O -xnrp+!H7eir>K`dRR^;Ag?lf}aIH3w{>-Ebdv{v$$t*&*GkUh9Uuc7WgdgS=_U@XK~Nsp2a@3wajuEaX|pvyf*Y&qAJsJnswz0rM>6S;(`HXVK20omKNE -NFE+}7V<3QS;(`HXCcq35v!i35Dwt8xMy+C;+{o2i*^?6EZSMLvuJ10&Z3<~JBxPScPI!zXMxU|e}}x -MltcpUEZSL&v+!nN#6pBc0t?&~uB-V5(re~z7_R7A@vWj*#f%Dx6yzwXQDCB&MDd400cG`FH3f3!4u! -+4#%A3yGx3>k&$N2xoimr4`H{In&4gga*XiS@+n!!_zURKCkxW6(gObf6n*}usY8KQis98L-cxK_u!k -L9L3uo5+yKu!bi)R+ktnthl+<0d3%%Ye@F$-cA#4Lze5VIg=LCk`f?=FMl^|~)T1j;OwStzqmW}(dMb -=RVUXBNpUl6lR5iZcsm-ghWEcxLg;LYaj!3uP9{ERy -$}E&wD6>#zq0EAq1u+X^7QZZhS@R8~)${KUO?8P5idhu1C}vU20+_`wi(ghx2@8&%r=7bN96hTGfLQ> -u0A>Nq0+sAW;hqLxK1i&_@7ENW -S2W)9f0uw`M(!j^?C3tJYoENWTQvZ!TI%WI}c=(5mdq05?YAT4%T?6TNpvCCqY#V(6o7P>5SS?IFRWu -ePLmxV41UDkX9X<^I4mW3?~TNbt~Y+2N@sAU1m0+t0Vi&Yk@ELK^pvd+vLU}eF|f|Ug;i&Yk@ELK^Vv -Iu1n$|96SC<{&&oGdt5^RJW_oh&$6aI)ZJohcwa1e`25S#Yx8WWmXTlLaSh{tkZHJfVD7h_Vo65y~Qz -1t$wm*8J1%(>V~zdQQ66kCF)lLRo~eo-R# -G1t$wm7Mv_NS#Yx8WWmXTlLaRWP8OUjI9YJA;AG7|%wBY|;AA1mqLD=-i$)fWEE-ufvS?({$O4fCB8x -*7hpgw!zCdJw$O4fCA`3(oh%69U^Dlo-2TLQ1Miz}M8d)^5U}QaK<^Up#K^B8723ZWU7-Y>q-aTsu5L -qCyKxBc)0+IEccSQq-yfYLIAhJMYgUCxy-!!smWYfr|kxe6;MmCLX8rd|mVPwO|cTFRkMmCM?x5?|0< -dWo)0{_dscpQ-N2VM({8+tO|6wsc#%E#3CH?MmB~wiF>nNZ}}FgUAMv4I&#v -Hi&Ex*&wn(WP`{CkqsgnL^gY-PBqd2nQj(M;B}qwAE>cpo6fH$d(NdT>G>B{v*&wn -(WP`{CkqsgnL^gy#8#*?0Z0Oj`v -6*8t$7YVr9Gf}z{6ljM9UD3}bZqF@(6OOoL&t`W4IP^~Hgjy|*vzq+V>8FbjdzBso;NmcY~I+sv3Xy#8#*?0Z0Oj~v7uu#$7YVr9Gf{db8P0=^M# -=e9UD3}bZqF@(6M=A^Ty_ljT;*`Hg0U(*toHAW8=o2FAQze*w*5W8XGk>YHZZlsId`aBgRIIjTjp-He -zhV*od(a8BPjLjIEF*aRny4YZ`! -D55O28#_A8!R?h?D0;Bx28#_A8!YyGVQ7=ZhKdap8!9$aY^K;uv6*5s#b%1l6q_kFQ*5T#OtI$+LmMhKRBWi -&P_da}GsR|#%@ms{HdAb-*i5mRVl%~Nip>=74AnnWY^c~!v6*5s#b%1l6q_kFQ*5T#OtGz@+p?=IpV| -`W&QSfEF}DdqPYY&>%@ms{HdAb-*i5mRVl%~Nip><8DK=Al*HE#cVnfA-ip><8DK<`QoY*+Aabn}d#) -*v+8z(kSY?63qsOnK-lf)*8O%j_VHc4!f*d(z@Vw1!siA@rlBsNKGhLFr7#D<6s5gQ^lL~MxI5 -V0X*L&S!N4G|k6HbiWQcxR~UA!0+shKLOj8zMGDY>3zpu_0nZ#D<6s5gQ^lMC|!~&!&hC5gQ^lL~MxI -5V0X*L&S!N4G|k6HbiWQ*buQHVnf6`LsbtE8zMGDY>3zpu_0nZ#D<6s5gQ^lL~MxI5V0X*L&SH@51Su -0KWu*3{IL09^TXzc%@3O&Ha~2B*!-~hVe`WtKWu*3{IL09^TXzc%@3O&Ha~2B*!-~hVe`Z0hs_V0ANK -fR^TXzc%@3O&Ha~2B*!-~hVe`Z0hs_V0A2vU1e%So5#}AttHZ^Q&*wnD8VN=7VhD{Bd8a6d-YS`4Usb -N#YhK4LsbN#YriM)on;JGXY--rlu&H5F!={E!4VxM^H0=2r#HNN#4VxM^HEe3w)Uc^xQ^Tf)O -%0nGHZ^Q&*wnD0VMD`rO%0nGHZ^Q&*wnD8VN=7VhD{Bd8a6d-YS`4UsbNFIo`aH24VxM^HEe3w)Uc^x -Q^Tf)O%0nGHZ^Q&*wnD8VMD{7gOW`Rn;JGXY--rlu&H4K!v=;83>z3WFl=Dhz_3waqrygocZRB-6*en -uR@khtSz)unW`)fPn-w-IY*yH)uu);7!k(|=Y)sggurXm{!p4M+2^$kOCTvXDn6NQn1HuM`4G0?$_Iw ->@6T&8hO$eJ1HX&?6*o3eNVH3h8gbfHA5H=ueK-hq==j%9|5H=xfLfC|`31Jh$CWK80n-Df3Y(Ut6um -NF%xJGR~5Y)7wAwXNe_N*Icr8bklnE?>OCWK808xS@iY(Ut6u-Rbu4D@iY;b6nThJy_U8xA%cY&h6(u -!&$3!6t%D1e*vp5$v9Uo(47zY#P`gut8vRz~+F>0h -2(S@gBfv(0jQ|?~HUew}*a)zD26_hA46qqsGr&fGP5+wyHT`S)*YvOHU(>&)e@*|I{&mklkN+C~HU4Y -**YvOHU(>&)e@*|I{x$t;`q%WY>0i^oJ~Pnczs7$J{u=x>_-pXj;IF}7gTDrU4gMPZHTY}r*Wj*2n}eU1AX_ciWo+}F6TabJ_Z -CVfr%n)Eg4Ytq-GuSs7&XP_s2P5PSjHR)^8*QBpWUz5HjeNFnB^fl>g($}P~Nnbx_peKDz`kM4L>1)# -0q_0U|lfEW>P5PSjHR)^8*QBpWU(YebCVfr%n)Eg4Ytq-GuSs8%z9xN5`kM4L>1)#0q_0U|KWCsPeNF -nB^fl>g($}P~Nnb<0hI|eA8uB&dYslA-uNhxIXP}3C4fz`KHRNl^*L<(}Uh}=?d(HQn?=|0RzSnrK@m -|kgZXdpP(B46N2kjlSchKHJdk5_uw0F?nL3;=79kO@G-XVL3?A;k&l3bEpl3bE3NtPr_k|oKKWVy(aV -o9;2SW;{$4D^TU9jbSz-l2Mj>K&?gsNSJ^hw2@wcc|WhdI#zqsCS^=fqHj_AxTJ*lB6UlNlKEEq$DXx -x=2cqQj`=WMM+_xKUD8fy+id5)jL%0P`yL-4%ItU?@+x%^$yfKQ13v!1N9EnyE8nJ97&EON0KASk>p5 -nBsr2C7kNtYl;SDHQ;Me) EBBu`16lH65)sNSJ^hw2@wcc|W>dWY&AsCS^=fqDn(9jN#2P`yL-4%I -tU?@+x%^$yiLRPRu|L-h{TJ5cXHy#w_Q)H_h`&QR4;y+id5)jL%0P`yL-4%ItU?@+x%^$yfKQ13v!1N -9EnyE9bvRPRu|L-h{TJ5=vby+id5)jL%0P`v~74%9nP??Al+_3jK+J=Hr@?@+x%^$yiLRPRu|L-h{TJ -5=vLy#w_Q)H_h`K)pLdRZsN})jL%0P`yL-4%ItU?@+x%^$yiLQ13v!1N9EnJM*ti9IAJy-l2Mj>K&?g -sNSJ^hw2@wcc|W>dI#zqsCS^=fqDn(y*ohf0KEhB4$wP5?*P5S@(#;8EbpMagYpi_J1FmM`EIcn9MhjCU -~J!FUJb9g24--l2Gh;vI^2DBhuXXU{;7@eam281G=bgYgc=I~ea^yhHI0#XA)5P`pF&4#hhZ@66vtAB -=Y}-obbW;~k85Fy6s<2jd-zcPQSWc!%O0igzg9p?GKhLF|L^4#qne?_j)x@eam281G=bL-7v9I~4Cwy -hHI0#XA)5#0>Np?_j)x@eam281G=bgYgc=I~4CwyhHI0#XA)5P`pF&PRu}$@eam281G=bgYgc=I~ea^ -yhHI0#XA)5P`pF&4#hhZ@5BuB81G=bgYgc=I~ea^yo2!$#yb@6P`pF&4#hhZ?@+u$@lMP@kMR!1I~ea -^yo2!$#yc4AV7x=|4#hhZ?@+u$@eaj16z}8=^ce48yo2!$#yc4AV7!Cz4#qna?@+u$@eaj16z@>HL-9 -_|K#%bb#yc4AV7!Cz4#qne?_j(`@eaj16z@>HL-7v9I~4Ea4D=Z9V7!Cz4#qne?_j)x@eam26z@>HL- -7v9I~4CwyhHI$&Ondx4#qne?_j)x@eam281G=bL-7v9I~4CwyhHI0#XA)5qu -;|EYn0|XQR000O8^OY7y1+&KF83OtSfk|H3flyiO3O^nl>QmSZmBUfjOPq(hpV&G?=u^ -}?-F8ImlCjhgKJZ63ccJhKq#IJ`hCNkA7cF>IT9DLx*e$%r3jiVX8Dm6irrL2?t1b|bOW#L}Z?ols;^ -`xOkJB`sE*@`@3#W04{vD8HwNnznP-TVo4Tu9^GDwqesEGTc@o4cF*bhgG=^)E!I7=y}d7Lgr$#NX0G -+(CkSvH7>GUk)T!OTl0pDiu{Ss6H4uoqIfgY-wV*MXoaXe*u=ZO&O@qDbHu*)@OFLuK@4uNNh+hTf7a -NgLm#XDcx~n7%jN1e9bGBnkaPp#>Srhq46pP#I&p)HlwD)Jcrmn@_#o&2{gen;y|JL*%` -O2GhI$xkTEnR%uN|QMJyu!aDXlYu3<@{)L}tQY$a}jpqcX8Ts+RdWr1CR$tY>Hl2|#bRm -ZU^kMZzaE{uLpKWB%pXjL86PU!0e;hkT}zA1ep`32s8ecz7G9|#t!(Ia>kwqd_Ic5}#v(1 -8%r}NI$fG0#Hi>1QY-O00;o{l@>=OPoosyKmY(ZhyVaG0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L> -VP|D?FJow7a%5$6FJ*OOba!TQWpOTWd6k`SuO-Ei=HK5>QIfSgC&mVof{r;m5KK%Hz54Yd^{*N -F0&+WhX?oS?mvVH!|6>iNsa ->PbF${p#)0i!Z*<$NcG=pZzl5*|tACfBLuWlNT@l`t;)4?dMze@a^{Y_4dh+Z@+o{>VEzls+TXmczXW -yBct~9)8pgz=JnTaf5?vgYWwl^_uH4xUu{p1U%hx!&F4V8-JZYt>KCt{^7?OIfA!+)A9?HhS6}7h(Cf -F4Pv5?IH-`WG@t?NeKfcMHZvXuF>hUR`=9BNgc=_VXy!iJozI=T3=5c%eX8Vr!-hA`-k@_7S`Rwk<_P -f{FyrcW8?eRr^&b|Nk`1B^<+4_6!-QDgMpKUqUKYjj|{^x9d$Av%3PXD;Q%-MK)cjbHka0veXq+e|>U -fJw7IrjOFY%m}6hcv70i^uKzH;-R`|MFS3kl)?@^`p=K<&S^*e0%@nKX3o~{->Y5|MBO4{#AZAM>;>v -`Ky**eEVIR;8$Bd)zkA=Z-2~=X9Iuu@Y4_eC9in@Hy{1}qtE|L?|=8v=O2Ig*=O7D{`l$k{`SfHpML( -)2Y>qg`=4%~{OQwA{`lF4?`_*>kB{$$n8Exdf#LRUw*ZH^Za -j*In7@_zDSGOp63$z?#KVHIehv0)n9$yyyWi#`m625*W0VtZ=Y>HJiSQUN$dMhvzx8_eSV*%(SP~gv+ -Zd4rRT5y?PX5EXLdQ3C=U=>htd*7qgn4}Z^!nTFix+=AwjW+U{Tr6>U%zxA4D%PYTs_2r9~`NjY7&D*!%{qiS2{P4qjk6(TN-rFC38SNL}<`qxB_$Th&dTiUzfBsL~{@(2 -UZ249{&UbGeD-PZ|T7UP}n)O!O`@G+ZYsBQjea8LPwT>80{YPItKHq-(&eZALr;Pvh>vwJa;-~HB_dk -EO{kp%WQ~ES}n2-FQuX~jjW^aD+(_`-K=lQRn{d#||?MJP!AHPdS`SKs#?)euikAD0&Y>hs>++M%R_5 -0>6tL)qFzx-zVCcT}WCH>H+zy0*#!Fl=1=YRg>qYvKy{a=3j(Py83`q6Lx^!Z1B{P-`QzMucAXE+$f5 -59T+gw3VB{rexEbWlv<_Uv6F@BilaAO7XDkN($(c~Rup-K}%o=db^M)vvdoKBPZw&syyJvv%y~v+VTo -tj*D$rN@qE`RSD}(fQZ;Y>l?(2W#c`_Wo>~Ex(*I_^ijCUv7MwGqYxY7;7AP(HPH0pV?Z@cK*5Y4%?j -1(zr+dtL2qf-mABm&syWt^SGXkIJtE{pN+Zam(Mw>-6I|v-O4ZIw??)x_cQM~^Ts{fe7243)^=R^UUu -$TyH0Mi1^u1*uOpt#e)%AL%45>*nmG>n)qK12k{6A(p0%@a(aHzuJ=<;Bx4dEYcjounjGZsfXXD7>8# -|rueKHtVwR`Ok*$tj~^KtWAv2vv6Vlevkj9ce}=TP-HIz7rOW964~ -ox8&r%u&8K#$u@Q4zoVcZpt2F#6u2m{?SKpLsJ0xVzUM=xN%?#`)1KyWElf8*$X?|gG_jR`=9dp{!(+bd@7f=>E1S%R^y#w;M?P -Oq-@_nBK3~Vg@*#7c^45z^G`fG}nD?<5^GjpP+l-^^A>w?Iw -vkCV=$qt!6Rp|t;YEFM)$kzUb({C$l1!l$}ec!Gq22%wv8MS>?a);4QbtZhiwEl!q8%8IRugSI`e^#U -j4mVJfsZ{h8C|d7fXI|cUD7V#_7jNyXj}r7hshA;)dBq+8OqU{kCrJY8_uA=WRK$_UOQ{Sj?SnZ8?pt -rD5gFco9aNgOLkNo61KDe9MdzKaw+@y{>kT{UINmc004%b9~cC^1)d+__$nx_!w8zKKQiJK^#(kxsN0 -7HF(U$nD<_GcAe)#K1;eXJY0UC)xeTyhaQMQj=_xQ?QjT1U93|V0{?Hk>Y?t -X|+o`jm&3X^vCC{I??tz;LOf;y4E -)H&Jmh=%<&N10lc%RRnDe0B{OWuddZ+F>%FA=Y8<#Jx%sb@dV6p%gV(%brAF^ATE(?JrH1qj#Vgq|Pc@U;d-x(|zy!p;BZu-gXVB}aF8G`Z --XSKT``#XFahcIvhIXx3wP3JS|zRyQPX@Gfa{P!3?fV#&tB_zq$6c~o$-b1%Q-r@F}@&8+7N -rtb5}I$E&Dc%E7xw&TKuU|T-?hz#A?X6iBHmZU=IyPvoYM+4_8z^sgtspvK8D5@0g~{h#1Bv?kYRBqU -<4^Mf!FAXheybD=J4MzkjAvOaJFr36x9}kCdaW`QsSz=7-BPm+&BD<|OUaF1Y0EjyR38TnQC9PZ-;9q -Vj_aBMy8K$?EgyJjj-}{lHe=I$G*+WZQlC~Utf6zDvgHJqhOieH -&LMiLQuY;6`Tmy&OoBoVd({l*&UuD1fln-f~t_Gr2Fuv1eg^R*%0T#E*sSRC2P9Es3odn8B+}^_`{h( -F5iA$KhG#&g2vz0@ZkH)gxSb9 -v&~5@KLZ47|Y}<5|OXaRCDz2N(SXk{Q)*;*$K9GXpqDCy@&w2Llv2#n3A!Dlccsh@~s=8I53+jwXQ{w -nV4TCG4p6mTM^2v8y3*-!!IAf)~Di(EUNU>EPc13~a*7E3IYF)e$*B)7az_j=YwRs!Wrg -#x`YQ`Nn5OT6PI)s^+i7hi<#A)u3^W$9NYm+%4{*n=_@Z_HsLOZn*@cNCwNc5RP#2#CH(~I1id_P2zY -p2TGt6T6B?FDI?H@;jJ-Q@`jHc_07&cF&E0O|lF5q7iP9lp8A1m`0H9+|@dl_YjVL<^Fy1w`i(8YP9Y -g{Q`<(YUBrZvi!E^#0*3`MCfv@R2=j4f$GDXYQuzVa+XAR6Djyv#5hgWEOce_CzaM(+{6CfY7m(~U7p -@YZ72_G&}JS+pxFgAS500bw3+QGy`q)~o-T+G|WvPu`3^QQM_7y;u~-Y};J8zEO@HRSR;c%;SCV9A&` -fIt5vD6eWar#Srs2yB7$7Y-MkI>8&HqabGiFCGgwFed{~hS)$^m}h><_qcVhJT~1b@eSl5q&+49P+W3 -~!%YOW7Mv^N8^kx@UBm0OvZJ$3ocoeqHFo!sKNzAu$o5P=EX#TJI@XvJBdiAaZ}57KWXdBX~@_tDI!PkI@qwM;RC0sd@aVp5hq%DS9T%#M-n`ue@bA+7Ntn -_w20ve`5&7v#d?T!YNaGA}f~Vt}UHX+eXPl%L{q4!?J|3obc$3_|e~hRw@0fO~1W5)(_V)XbnGkm7U{;rVfb-y>Z`hFmL$Z<6w$ -K9s-2F{l(nz`25Mc1x!lq91y`={T>~b&|8S{1~ityOU5GN -^NKBiEB1oyhzOYHC9f}KkoVY`nh+G5Nb5=+?A -MjydP*HZ48PY?pR2)Bm2)vVh!5!jboZY2i!RjtOn!1Yma=!7rnOi%05B4n9Uz(5GX -Ob-TGD6pH~EXRS=W;yTc&@-@ -aB%){Ka$Tkw1oFF1o -AQL2N?l2l9{z(%={E`Lv%budp;bQoZmCkfblw`#y6woL-)orM=M_%FLoae1Jtl>elQp+rp%-W#+C>QB -Y;1(UC{iyaY$UU3_JmGB@eVi|- -?_$}K_Oqlo=2Lk$TkTF}6#vyo;Oip=ErhPljANfjjZ|!BKbHoctlcVM>5|?z?*=_(1vE#tNK^}noZC1 -$aEFEZOL4i?t7nPBa=Vb#F-J}g@H*rZbW50@#CPM^eu-fzKaZxPNBbRH37+!#$2FIC$nomeX?0}8@6T -0b+^8qf|$c2~D^{^fwIVX3^%Z@L~g*#z=H@x{qh;N{`%r|)v*AHUCjVCjs%Q#=?8+1AZ!6p>=bu5`d& -Zhxo(Igb@kUJ%fnPl<#TxJ9pe!A=-5|>Pq^~)t;h=mSbPr42=Q08F=Thsy(KSU+P1_r|WAeA+ -f75mC4>ZmfFiFN9(qcjfWPh=d-2r0F5;VZynUG+1VcaIF?ed7AmK#4@;u6e+z&fD=5-a$mw2NQI9cGF -}^4l>i)`}~H(nUM%xzr?a2r9vL!6i-J$an||OM2bu+h$$j3>P>vk~NK}dO&)z`Opb=c{>?i%?UHL2EsgF%hf-(>0p5kz6zL -X2H>Vk*R!zHf)VL(|G*z|+ht^?deqyyaahb-uC3`5<32mlb<}9VrFR@N{7$o4&|KS~|5=4DQsYDHp+V -jK4dUDMo?sz)vG7lZ+lM@id8P%pfx{&st3xKqx~#dhfYmZt;l^F@g@-w1jc-Ej^pgj}C{u|0h -RtXUa`waTgF%SLBw%w?*j<2jyW_1{d1)y5{CB(5ak`}}@Z6-f(RLvh>l5TY1yd~b3@-fHu`_)POg{}3 -l*MOUx1BX{3E`i@)P@bh)zLVt&Y`V3zIX~MA1wM&OBhm&2;PAyi)qZ4S{IEv4p6S&3_8xz{NL(AcR=l -yE(dOL_()LTq-TYR0g04<$TO>5amgt^X;JCqg|#JIgQ;ZPGAIHxSt|iI4N{w(^d1<6PJw3x|$#q0_dR0!xc?NOD_j?i9ycV<< -}1wH-YJDx=2_L_^7!?wM!jmTID!>n*hP8EP|v-IO87zDNqSu-Thz(Wi -c@98@7Bm5>QmBBptl%)Nk?P*^n5cRpB3NI+cR%G-(@WZRF7DolX7>87@Hmw=470eP(a{zlDKZ!nRzp} -ZRU?PfYp9FTiPn_xQSH&*O -rd2P#u9E!RrF#2jziw-TrKVONiguK~)EYF(BVkKXZwpot}#}^yd05+Aw&YvV24ia&|N%wo4snmHlGxq -$d?!O**H=J(5%lQkKoE8xVrJss|?Y)DvI8;oF~O`t`6;*%?qUU1px_d}D=dmqQEtvRmh6QfQ-F>NzE$ -!LCq7-K2NF|zNMK31CU#FY*I1v$9PU}!gS$ ---k~r!me`V>62;qnxCxJP44eVS5vXVJIzuqgsb$=dK71Ph9+2VkFm_N*cIyX92H^l`oY?pvas>2m~1e -vS-t-3+@RrK7khvu>9m8X_q>Vm8ipdGq<}gnLnski@2^M%yd~rtHL9+cz$JBCLwq?3gOd=1MOPJaUHX -ScERl>CMCpoml}myDvd*qia}edxQ0>@vJY6h?r`^e9H`@1yfj{rnGDjzC3eJ!7QTL($sMY#6yp((0qy -x^orEUN;<)a1(U(LwjbJr&o7CRvIUc@u$Nb;}*h>xDKmr=Fgai+?s^U;}|HO2OCk-eP^;dH~uuJl32D -!`F;?IU0;34+}fW_j6f;R&CY&CLazbADZ?Y&jmKI1VnxLD{*Fb=T5pE80LOh`@(J;56l<3&`xyrR}|T -IfUXrCws5wHm9tbdVBnTUIr}N0=$h7%x1bk%RSv&S&Y1&U<`M_!3rS-WXY2SF~mac{Cp! -Dwv5qOfv__jfDdrSLp^5Nv5CNqhK&`-c;K3HWF -`tFVg`9L7z0S!F@%Syplhk2p}BJFd4Q2dD+pJ6p5j4I+zfF=pWhR|RPpWZ -T`r6F~sLz4e)H*v`TS#{iD>tb$Tg36ThvTumiPVWGSnAZ9b35b}Ru_?G0POWqxQ{C&;ur8u7Yo_6bGW -Pl>P6C#X3jE^ohV6}3kxtPDF2@=sP;wQ2HcR)~RmVbZOjneByI4o~9Y&Sf!$3PQC@18oGL6DyPR&!`KmaC?scJD%Zs3PtlCO@QE5Enk|+QZ -LA%M01wRW56r0mAJ2%vqa^>zJFP&F*kOUUIkT@0`j3Fh5y;*wT -^2lY_^Ju}rq?qIm?oow}!E-(fIsRm@lXyqqK&-ik?^G$TG9d+11EH-%Xg=gt_|Lg*(rfz_ByyWV3jK^ -rQT-!jR-Ao5@=ACDudu6^EcG0~KShE3&>vG;liC4TFpJ*sn)5uDtlF^hf?ScYq9~ZI?MHn}JK=<0=cP2%Q#qg{{SB8TQ -(Erqu$w85$4UDpp$#ueFe&E^$*PHYncf0THHN;D4Z&?rOYGh--ZJaEVzN^q1=92Q~dJ5RI -yvNLqAlVVDv2-m=U1MO^=j9#TL5hub&AxCJ&UXtlbfVzJYJ^=DSS=&YTiUyL5fNz29;D6yu8i-~birc -s=!qM4;k}!|A@B*4#h68_2Amjrg+lO^;R^KKWu1ow@yi$DcmatI~82xsM<2z3hB-Vj@tFI -0QA?ymrkJz9(q9D3>NsL_|?Fj3nkowI$MWO9opjPce|(SO;?65Q2B#{Ryo0LiX~IX+8z+NgZf*OVpHT -NuBSNOfLh}!{rZ9KwV^;7m)L?z(Irl0K>|O90(+LY8yMBD2dtK@^hJF>1ofS -4DnNwU6#f`vZ?aCyzTFZQmaNXH^bNnqrV+^PK~ -A}-kl1b~zFoRQ76;!_$Jxm!W$zS`%Ox2C0X=;gs_-%WQjO1QbbzWZa-e%{h+|qe*zzxoGjSAhh^cPRI -UD3S- -b(6SV4ng)qRf(9C!QfteWgTKRcf=r0a;P>t!B^I}=Z*b16a#Vbn643t6)j7wTnRsESrF2=%l$*Q46Lh -(dM{8*S2bVy$phUh)hCdvI{*xxkUaQn3L9g%2MQ|TP~tnXm( -oC1KTv|RX@c5SjQ~ag+gha64}J#5RMnFKG3~(^T^fo04`>FL;>KG42LRVUr?j*Z7HgCy}>9dkc-lD$& -Z#jsCzZ+!U-(ddbUV3*qX)?p2X+{JBwP43I+LjvklF|vEj>8O;P!s(!G)zOGRB(YKF`sBVbrIs)R%C0 -P1<1Qj^vTmk!CNVG+42?6}7_amiE-M7gFBXBVoD1^>Dfv|J)Uctlv5h94P}1t(jga&5AhJ1z%q@hE=s -K=;~Dx0|TV0I4-Yyo`ZQ+9l_Reo~VJ%1gpdCKwZ|^6*sOQtKGqYhH6={?KHnc@B_d2@!dZwPM_~jH(j -hlG!CPQ@$j=)f@V=GyQ3GHlf8f;1G(|Q0)2;oV_THyX^LZLaGG${!JdQ)aRbrQAS(7kpN$7Y -z`WwPktCHhBe;kF;kvu2*a@?IPq5QDuYO#)0|@F@M{f$nvXE3LD{z2apouE|_LnTtzc{Dt1lvcoVl!W -~<7b^#a@?sb9gwZUoSq!1M0<4a8jGgUiB6ew4wL6kBTV;wII0E;6cEj6|`Z-1bBU8hX`w9}Xv-jPy3K -8R!P?g3XG$Op!B!;iQNhumvpN6G{Nj&|Dvy4Mzxuv#PDv6)`G3#N_MjQy}zr*S`0`;I8GM1fyFoUQcNW0no$TT8qxa}9+Ya8 -yIURWj^GIL**%%(Ng{FCX8|0!yzsK%-r+g1`*Y71bd1NC~+G)t=>&sL4_0>#^tUS -l0$cmO1JOD(;nzvCwo4Y+f^+*9%|L62@q>Gv^bV9@lBzO5flLoOfN}>JN(p^-s8Z2oU@#(fd}6;+{Iw -`aU6gd@{z`lpFxlt7lk=fb5i~#uf1?@SM94i(7i52{g?Bm;=9{@+XZw?=_$q>KEV>?>FzjS$E8%dOE? -o`EAKwgy>@E+qZ^OGbEL}?c(;ltt<8&|J@uY?b7Y#Q3S1W_E{FQXwyK_WpnDzWxVv7=5;~-&Nz_zBtl -ph|ObfO6f3*&vq0SoI+;SWKtN616-Rl$IACOctRkQ3X;o&SdAdSU%Ug)Mfdm<3|9LK4|K2VwC=>DSPr`d9r{`_BjN=L-=Wk=X|-g< -VL&@vCKxt2W7a93b$B6zYX>O!UiRG+3(OLvUJ#b7P3?fPkf{2k}fy*7|@C&3#gq^!5 -)-oT~bQRQzj$BKg#(DDP4S-0k5zqKi{>Np3w*Eucx8AeW3CCs=rE^<~=9NjFb`PPfqAg5Cpb}2DOx^p -;QwJy}X0;CuH7)znvWoLK~s!vkBqUtgtFqcL5K$=jryo`QshN*q-hq_nw_LLt+Z4Lsazz;UdOI?P}z5 -2D@h-wh}Ds!T|qq!G=yLit7-Roc%?>dFg?!IQWFtKeb?KgCf66{IF#b8kE=)#|!l+;b9T?D%B@kRGaO -`(Ubm$(TwUg-7))v-m=U-RMBEV+e%UlGF)R>((nD%l$a)32Ul4s5f_q*6mLUy6aD#f!MH{ -G94<;si%Qj(0Gj@3wN(Kb+7IpI`uoDR1UpS$WNkmv#@}}wV-(ly}@G5JWHO-{iD+cYQ3R*oss~{(m4E -%`;Q5>jcxsd%w#%cDy2vcJHm*rrZJqBuw#Cu>;c^?B6jEibxgVvfD<-lS)0w{bLv20F5HjK2Ht+UelA -x&b;#Y_u(giSy$%XDov7U@rnH*uoyc)`5%vJfNbzUZT;d}6v(^3&DNhrGb+^07-%c!Fpar$Q3p%ttQz -4N1Y1-aY2Xj}+Ha@&&H7?!esFvK9!*PO$%307>H7T>h -+g_gaG#*Sh^Wy4MZ|*LJB2nLkM^cmj4QFLre=_b?-nTg&CA#E~0PBk0q;wN7L4>nFO`!JrI+!2&rq3v -N}5!ca)SHb}H-<{3gb5FHY{#&B*sDANB2T%jKpzK|7!5&y>dmh3#^OffiN`~jHO$4=T)_!E%z|N9 -q|n2yuJRf~It?GEtQ3*d&d9Hs(H_`hfC&bOl3)*_C+9dr^P|zZhzS -5Qrl)N*s>>rVVTYhNfF9r^euR2qN@7XCY!0S!U-EBUafpdonJ0#CxB_iSD(LZ4YWkIXy%xl2pi$si0b!BsJPmf_a%VPHfQOp6>7i#M~P=Y8=qLj; -^+ybpiVCC1eYynBjI`@pR9so0IGypb~zPb7$5v8+A|7ez!{<#{|B%o3N}<(kxCR=^QE1hWqN6Y@{ulw -RrcCK$T1dlkN}OhINssc29J8p3&j@1RF=8bQZ1^R~)lvnk;p!E-OgVS?-wm9WG%2ckK&3(Y+4JjT?@s -d5VncHLHn2W(4{j(94pMaYfn_u4IEny6sqBNR3g?k+bydEAAP?WQ?7KsL^lP5Na1rn@R0@$BLfu$VimlsO!g5hyES385 -A|>%bjyq*Iv#j+sGLSi`F6OOH}|#1q|XFAOU%6dP*~=4GynsoTO0ussLc+b-dnX^D~w_rRL;mOk}F_c -}ZZ_DcGvUe5a1Xkl -su0FEy-m$n-atDq>nmh+czUC8pX&fqN7_@a9q*5;;B -5GxQJ!iaRJsBX!}J?#=^9!`ai=~0oxVjWa9=TAiO1n2Pl5>Z)!MHd2q7gW?0(fA;WZH%~ZhVXZ7xf%% -GySbE|E?Na7YQOySo1c-CD@PjEd|ZBgbr3v$pN*Nih0=TsdbZRmwc`c7m~F0gS -*{}^`@7Wd}IQy+NVGfu2O%e%!hW$oQ@A%?RMyS0Z#FG%OCHycz2|3MMmgx@peAP|QS-6DZQ9bXmR`QmI@Polwec#xvS8DK`%CL_XIF|X--A8izlo-yKd@zH@==RH -yM6@?wxTqztI?*K+PD8bUsfVi_+-i4vW}u%kp#4c4yh#nYbXUbmwT0>rvpAv*VZ217iQr;2m8aU0z&m -U;9U0c~2kR_auGxf9*%Mtp0Y`6k;~$Ddr@L4=@jVh@+nRG*ooOp0Q;iHVFv*T3%Z^;|XVS1$&RnO!J% -2_o2#b?GGhfLz!ThcZn!z9_GCn{(HKDjuVI&ZbhVHegVUUWqm@K9v%SVQE>(r7Dv>1Oeeb671C;_l2cNLBHK4Zp%r0R({OQwpS=kx7*Hx1;JqJTQf!>roUZgmZ -UCRRz4y8lbbhry0d`5)v90TTN#U1C-y-qA?_BzDL6B7umpr^~CGlT5j-OCER`U`nXXgApxZG`GokK$o -YbgzxPr6CULhr4jV1^dq9Am1G-x21SAB3`UIZM#4Lb{`)5-7fkP3# -$~p8v(7k%O4=!VcI)n*HpIP*$s!r9v0o%szQ2X90VfwdE;MnubYBJZ_hJgVn7B -*j-%Xac2oWmODXohNppd)-)?3yOciJ}=LX0X1~<-rAWXI(4&zNY8CGILW?mQOV>tJS@OCH{_?QT@@M9xcRNt1d)iiXN=%0|j7>8>a -vxUsX&c{67IZFAJZTxg!rXL}IZe(q>U_Bq-RpK4Y<<$= -`7M_1w8mJP`=AYRpRjvN-HL-=dUT69?gNMVIF7qr_TyN(-8JyqpK5W~h|e>eeqckGg6C1g^pm434|(> -q(C{3u(q*3LUZ+d#a3irt^;o(@4O_zbs2*X^4qG9IsLBdafEFvozY&r7MgHNorJ0!#yC5;Aufq9ucq{B -7CRT6>_#}_v9Qy&q;9iHBiG-u{=OwXk7+z_ec)=YXF8KfKBnt4@ckX%I$X+y4Q|9G)hU$nu6zMa6VUu -h?~2TOvcv@OP-qt_q04@PB}fy*x0SS7r(yHz4p`NWz4QnzI&XAgs-PbUM}I`u`28oAYO6E$EY)+6=S2 -L+SOJSu3qR~m$h2AJBP7>Z$YEaI#8p|2SCVHNBl8p1uGWml}A<_IKz0k+g3OewZCPddtGkkw+P2Bu7*8KPvY$Y&0UZrIFXUTk}0yH#vE#TE*%{Pc< -pz);1b0-aI!` -4penH4pDEx5+cG`Rms2EOf68q2BCuoL=KI_#NB87kLso66gV&z2F-+N*5haId*r#u>-+F5^f#HLiaj7 -!?#4sQ*95kb$R?YVa)S|mbZcOr0CvEln}+RyK;G`+tAm0@d(T04UFOxr2o*HY7Wfn)$k -%`{ut`R$LKvPM=-^Pn4d3}2;VTIgPZD=#*pW(fvq9@QNX%B=Nh8y>^Yc8b)Whg`=1Lh@h{It7@FHvKj*{E|@uC#&yVRM#-mq63TIybxtH)jbh -exj?R`6`h`hYYM`$bB-LHsmA@dW0#T4gmXe)(>feZp5=&SVd7%w!|XrDn7)Pej(l+#0qdNl7S%v!%Cj -tBUKV)*HIlDQo88)atalX<7*Kit{P^9NVhy+baz)m+3&E9qwLW0rpRtcMViOxlcG=0b=W=LKq3RI;_ -)EMBQ+0?snXa{vuD}Y+R{QlhNh$LHH -@qn^uevm?o#Fx;5*T}|0H(m7Vm4*YVPyckb9rceyW0hqH2DY0``zPkPTd>%Ub$X!3Al8nPW96ahXc<% -oHi+(@I0uyUCu8d>1v3a*CkGcia-3BfI7j5uhE#OJC8?snlz;CB{P@#e`OFopd -x3QOP;^9;6Xo}sgvXJsSFA4_Lx_+s)#)ulPeA>$@{;N409fjMfY6zr068aH2|a~W>)fFYa4Z7tbDJL| -yK-Nvh3bgvy0*=wMdvw+KS`AIPPJ13x)!@Ub?U);23SyUM=g?P_!yGmEVChPPM?!)%SEvOtSmtxo3L{ -hOlV##gi9x~@C#U6fuq`9Fu@9eH$6iC;te_(5D`UlUl5EHuOg#^sFf^`#77@6)-{2U83{gnfwrL3KTS -dXt5rPpBFVaEA75r`$M_{oztJ)uty?$pkRLv>yp<&35&_@2W;7}w3$ekXRAJ&fI-C&6vG1M8B_^{_~P -rGw(IiY;T#;XZ7Zt0%g+o5O{LDz@$I9tU);dzQshQDq!%HlCfB{6ce{y8f) -sYBeIZeqZb-Gte3;|A8L*D29_ifW&k2-&K=;~B&OCC!Q-ZoG!2DL!dBLimEn=KXj -c`)LQb;tAIipJP>GI)fy`g*U?h&+B3n5!9BI?nF7d?2vHHXLs6Kz# -EItf@#9eqCAyE>!(I)KYi~6rOnY;^nBqW`8{+gHSO%4${VlFO2zVKFw`B&Qx**zcZaEVYUZ>dz#RlZ= -!ph>dZY>#S$wlQ1=J{H%Onx&4a=7gc5uwg}K<>u_o20lX9cv?I+Q_4o^3|ToQrRNDYRjLs_t{^e2MMc -csdmX*`NrA(I@5>8cM=Z(tmldoy;Aszhm5OrehPJ#+2g3R4X -5zMJ`i$@$_1)i{o&ReQ^`#-7e>YHXowXL`50Cg`I^`eGz0R%@K+ -t}C_gs0!SMU58y4NO$QRnPC7$yq!yCt?u+=2$(9a?$fdInM;7^RHN?`{fCTxSE0q0;ZN$}!$u17XbA9bEv+Dc?&)|CZ+;I;r>i&kEAKc^1K4Ea -zgt?eyp@2H;EpWHt>EWK8zVzmrbMOovSknA5KEwD{c?+R9{n=t@fe8fmc}PbPFVrpo!RPLw9E}Gz`q+ -kgaLR|5)2LzBdLx45I)*re+Y3}aL1}&hRvVllN32o>U>q(pBcBULQw?R46jV7|gnzYam*2-B+vWskR2 -}dNZXC_<7?uZQu3-_vGc-NX#beXavW!{hgPWHwzH;}MeZpt?81lWt!(=_E6S#yMB99CYt?YHBFE-A!g -g?kLc@Ml(`~w#Hu!Z^=gFWG<)!7vOq?ApN|@0bGJ?YwLwK>@@JFd5k^& -?DB>bCsd+&^0xSe8R1O7s6hk2wBo`2WzL^`__xQWAK!lS;?-ZbFCJgM{(&Fsea)}SZZBTFeSCU+^VXl -a{p#`UI*2Z~u1&n`yS% -L~?u-77x>j!G$fTxI7J5>Y4EHC*EZmT(o2Umh*NYTaXkZAyJ;;|`3MxVyzmZJY -LYlXeKW2v@DD*y4v5i!ybpB$fp{;Fy#!!9sGvrx6ZZqfEHAvnmBE!RIeZ7j_dr7&h=7AUGANNn4LmEA -5F1UKVwJbrAs;AadEuSB5+zo^tp%E)KwT5iH~~rz#313a!kmK$8ic~2S{szDqF1B|6tleW4p(AR$N_? -ieNb`_%HVCtQFMxdDGg?G3TTY>)!n9YF247kgHZ4B7MfbR?Fw17zqc(H(#3MixKRRIbVv%K&QS7IyV|3 -R`IWa2?49;DYn+8iW1L9!KOFhSlBqyPaTk6xKnpqS-_ceoN;5srdH12`BU!4NKicLMYhpqBtx1ehW~4 -FLd%e%lz4{s#qLpsx!gQh`b%C@Tjg%K#t;ST_Kx0l5%R3PD;Mq*yU3LkkqMVXB2!54=rq0$1?6 -H^IrsL8&>|bQ*>mgaJWOAQ0vT(!M~G5XceY-U%EiW_jTquEbW@hZi{4fQ$$Vu)%R_!N#6IWF4G56%cR|VwM-);Yw@;kwsA54eGK%!8oWT2IPIf=7yOOu_0h&f(;j8c6I+kR-l;Wg?G3TTcH -jY)Tsg$Z6J9K08XF+4Ag7^ITz@d0=ZJaQU@in7^R2{6tleW4p(9;RF;COMZnAlWN^Us1|(s??FFP;z_ -JB|QozFm>`RQe=j~$Nuod$9Fi$5t4^v*U(jaRKQzsIeAR`D-5kWkRn*_>0h#9k#Yk^{x7v5RC1TS2Pj -gSon>f>PhL_p66XUqi0zyu1N;5?8(FBcql5wjFffnt^y-r-7Y#e@RkXppuC;)0+!9aIg1a$Hc+2>@Zh -p#&*buq`|8ljZ}(EHAvnmDmcqeuMqD!T#G|A8WATEl|k?J2ZnmhrzDGKuZ$Ti~`j~sFkE$m=;p9puii -bhXR#NP|pc!XaRv4WM}~u6!JT87-0rXJPuUHfxIcnOY5}jH4qy}Fm!lZ;Krzb;?{FoyLPa|$ItNwbfM^VgtwD`6sD}mx!k`2g6#N3RK -Pa=sapMvcv%K&QS7IwL{sCDTu;l@n7jR_(5f)@z0q_q<;DG21xX6HpjN`^7C}w%dcd!)*qX0gKTn=na -z^VkSO2BXgY(~HsgcJc;e2}pR*>fB>E-!DNEm~pFHADd8<(J%<%M^+5?hfPgw_jo9tC>OpfnzwauOU^66}!-G^>F)GsxJ3^e -^sTObZmVyyQFB3I&5e!yDAZg35D1Py|3aP?H5Ri=h4%@Q6X`AMAGuWc_j8xCF&4FTBH**b1eYV9#Gru -@4gvPF)DjQwVk_1&1F5l8S%~5B3@dJ7wd%aS4i9UU-Kqu@!_2fi@zj0SEP@pvDuVZb5PuBvCpd=lXF@qXcz}5#8ULX+*O180XT!LbjmwX3XK|2u01_GuzARK}kbWp7f3Y9^9F{s=HmAj -C+fL{-&^;kD9K{3k@6aWAK2mtey7Dp|jI8+$}004{z001-q003}la4%nWWo~3|axZdaadl;LbaO9oV -Pk7yXJvCQV`yP=WMynD45=Il9V#?x+JeyBgVA5CdIN(R$(K>hJ7`Jdj%ZMWLA+%e6p+)6DJB_?N -*j!N@GDkUOgx0E3kwN9xcExknM9Y3)$6hznh5)y=2C5~Ea -{rS(33Ybul>&GMn9}ka$|+9gG+^FCT9x&3}Uxbn>}ShljU5xBRq`oBy|4XSk#v$mqi^yd!0j0VC~tK? -&RV9bVXx!U`qF_*+R{Hzfm$n@mOZ89g}cWg_zsDI5iAJ(uN2P4d4&%-V#fkhr6HHIz;G0)H~hQAa==E ->IfhBqnlMIyaMT(6uMzgm7!A?Jb00slhg;?9n8lI5TW!Lb3_}az2jo9xh4BJPjIqvd0uKO8NmgEXb#Y(X*2H9~=q<^DwDDbfwi -45W`Fqu0puBXri?Pq5F8$X-lF;83dXS=gC<{Ojl`*zUedBycoy4fU`Oxd#T=zcS^oUj|B5yr3nBM*68 -fmv$g*7Eb)2P;Y@iaFt_wo+s}srgiv98S`3GC7`{N&s^n -yfD>G!C;jvAMSoRh_R4rhh=o8=Un+)b~>40U#V6rQ^L7p>`1S3nKiZrmIWrGp!Hf}=d9Nq$Es-J;kjH -G{hof#4qwr_Y{X9J>jmANU%9?2eWmyZtpED98=XH8EOw(u@GNZ0e%&;3twqUy3bgF^R?|D&aJ_tZ*ZK -)iO9KQH000080P~d=M>&o34eLSx0IQ4u05bpp0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXk -l_>WppoRVlp!^GG=mRaV~Iqm7QIW9mkQT@6WF&Kv=*A+Hz%PL{`-pvw$Sa9%5ukpkxfZHwHzvtj17mO -_Q>r`Slymlhk^F@c_HJpvXSw)X9(dc;k&Xvp@LYAOE*~{ORwXeZGD6?2}JF|LW82 -KG?qg?tc5?>ESOAZ(h9KK6!j~zdgL&{_yyp53gUpsDFR|{f}=RUcPwu__V!z{c!*0-S)EH^Wp91k3M_ -z@a~~L`P=)y-oJkQ;r?lR{C0cy51v`?|NQ>l+m|nXxc|Q%`|$YYZT<7xXZiUOfH8s(t%(f4{wb{ -Px}7YGA+FetP_Id->wc_H_U1;q7{SEyTO+#hX{ZetfFWfB*RE;oG11(T{Il)pQv3yZfi_-~POYzyJJ? -+h_N0Yoy!n@88@%)oi}}@tfBVFYCjfJ-obs^Y(sw@pk)xpS}I=?<@5?2J+SWfo#8ftjD{$zuE2|>UF; -RulG-H>nB_Pu>JgP@1Jj@9GKl-tFI>ef=+A{PFAUqtE}e{o6;+pMUiE*MIs=y|-4nUakFGPkQ+NhcdxeTg -~d}#hZ6O)xhfkfB5wIC;w8P_~_$jpFR8fPmKO|&%XZr)33hTe)q-m?W66>kDh=1?2|u!_R;h0%RfH<@ -{6xN{czj9y1)NJ!z-FnL3_xG-h{^f^vTef=Bi#PxNy0+k}`uOi -2zO6_9?)Bs2)7|#*s($j{{kMJk`EUOpgUScDdhqW*?xXcuwzu!_i~s -nsLdWZ$*!Nf4%kN%1y?BW&y?gP^>-*(_^)n_|llzY^o?iX@+ICl;e*Av>?my=-2M^AA>h`N&{m*Ux@V -NM!f2kMR-sAlXSAYLP8}&lpxK5=zW@9}cR0^p-4i-~wq`u#IZM3#vtQRn{`wc~S -MUG&%lhe9gLq!fUBmsaAAD2qVd%f!eld>B3MlojU;4O~$MU70eyEW655M)rH#kDi|AAGlu|2*iPks9i -fBOE%m)~vQRa`TMl%qZW?ep7h?ZBVE{?nJwKKbagKmYdGS6@GW_VFLTe)h%Ze}4W^{m(DI{{F^~KK|^ -}KY#V?e|^eyj=BH*3S0B_yL9k>YrohpY5(4d;KhCy=7kY&us -pYWur&G8?AoU`<{2VdO|(0*Asf?dAG$;k3Q<%+f^SPZT9+E?02!x{jOd0k$%ltf5dS&^4#nB{Ozizj5 -B&Yu(thfJLh#5y@s@12k$w~yPVz6)i+%^Yy9<1Q6_@h)L8RkaOZi~YS?%E>@}0vue;mUgE#WZQLnV~s -7dYhrR_L^kJQZ0Htx0>&Rwhb@T?l^UQcaV`~93HJDn%F>7Y6W_F%6+kVa(X4Vt3#??o!`8eBN -j~Oj$Ehf)zXV#F8`rMZOMS^(f#W6owcy_IhKY+s=3!=X02=O(Ov^iHod;{R+G(oV?8 -xG286{#y@@d-yFBkAc>ZY2yOydmy=|-Y8uizjPQPk!gT*~Gn;Q1${1Nrx#`o1|YKeQR<-;b*1_Fzz(d -=h^UF@|MM{Qp13{Nc!N#Oiz{FczHN7l5EXSxPv@*Og(-pvgu+p^&&CP4Ih -FOo<23uX>rao66X$LE?*92<6YkD2~t*^R^+DJB-eXC_C6X<+)ut?=rwf30J$zwF#dUV@sXM!Qs_Dl?~ -zL{<9?;W$=+%&w7VY4)~O7+?LrZVi>l-dP$Z`9W})@xoY#(@Xmt+SS8T=lmxds)M%7s{h*5+}=W)$)~ -X*4MR;Q?z7u5`WmsfVSxfG06%EHHL%5J}>^Mf8) -24O*zUs$|5l(JiW7nd#|D6tQ7%j1$G>tpOx8QtGI0CzxtN5oUq|x0}rV2Pofkr?0gQNWT{%Ray#FCoc -Mfwd(@)UrkwS18394XU8n`xMr}aUWAAdu#96*UaHzOhEpVCMv++zB*UepD8R9kz@8C|fF{V&zV}s -Rp-g#K@hcnq?DhFYhd0!Y6Aq6;rS_0_=uGUii#j)>giZgV%=O^amrXKLW2#OluHK+u_dFG7Ljz!-{-9 -f$SvOu);kJU(r}ycJ!*rmxY%HkJFf6e_Ul>We&`d0psb7NMA9GC!B6d#gCnB)R!y24K{$O3@oi4SRRH -$FwvtHvJA$@G-71%b$CC|KQM$NeKf-?w<9BjU%y0+!2p0Cmd{JJ#Y~7%WMn|7k*fja4t(2|l}L7`|#Mt}YR&Y28W8`-6q0;W^$<`0}C7#Cr+0yw$*a=q$}&a4x$NrIInl9*3~BXeA3*iFy_jHwYO=&O-xE88^oyL -N#mFeJ9HCQ9nS7`JW5^@J?s*G2%Z&{Rf5kSdeAl{K0T43Z=VJa`a2C);zKqBeGcNfE`%^G;%ZeG@xh{ -z1qgu91vymHG?` -FnP5kxtoLAA-FQ_~xlF$`kVXtErxV&@UPg%KmI3?9k!2hBWXHN$m8k>Z4*>#u7No{c -2o*))veypm!#F5`S`b+3J!Oa1DM?^U;&dktt?j`bcf3giFl(1L9@xziQ#1^u2-meXJ-TqA7W~%uv+_Q -6f11)jFIG*Abz)x?1PBCV4b0{+K^TxQUt)I+i>KntoeR?>!vn&UBOMraZSXlTXHvP5{t}xV7LSaTB$dg$LAvJe-C}4r+EASi7FM*~*nq3TSLHtvc{6UPY@ -YT$9)SE<+296n)eiwxazD5C4PFVjmsOS~Kj2$~X4j=8;H3}b=op9f&0y-br4x#RjIRi&mI>AbJYjjq) -5&`uSCc!YbDVVGg21u@=MhC}GpB)5n61|wK{t9NygT}gwObkO*tsN6dcV0BX`jh%D)&g`_@sN -spkh#VRdr4t}{hpYXU<21a@ikC-2QZhJLtU^c*iKcS9pm7E)Rx;taG15XWf#;%R9CPAHBl^?5PguLfk -Tb;=~R%7gqnPDX9sJFjZLYw8OG6JDGNgDIPV7R02fy_#He__IP$=VPu@HZB0B-^vID%*)Z` -<>gBA#1-YmZL7UJsuow!@azFC&WPh@|kkoL77xGgB;sg1{ZaN{|1|@vWhtg>WtxW21+%d53lkhbg*_f -0-vTm$E**!x7EXC;t!$S~!v_2Ac=VMJ=)IgmFG3>zgDm_wm15)5)DiU|$8yIdFA|rwv}BK1a=d34$nr!}1(BCkqx#ba89edILkiUPITTqQ{nk61!7@ZLskTsM{&Pb94)9m|gw$ -5)hokL%s>x12jM6yD34-mkHKQD1zPZ1nbiQQ_Us0=zv%zNd=sB13y=IKZ!dsS7vDQ0KtK0bzKqayMf= -@V$VdwP^R!)1uiU8`R7Uo;1N&`WJEbW-rqzHau8FTZ>3I|gs(}pQchL1D4r@q0J5~cz=gnz{0&9A%G( -3pMy9Mm-WWUNtl?YB<_=tnP$g+hc)X4XFE#bq36KIKa+|S9ULNT_(5#rGZ= -fu-er?fm^cBw5?9LE>m4#*tU3Nk%&7rdDAqJp5!xmBc|G6KnkGQV#Dyv(5H+Ce?Xi}>lARzfX`1nC4h -zlj;2isD&lA}QL^8ignE$tj|)GN#IWwQ_f~@eaLRL0Osp7#e~_f0dip6#4Duba7M&uHCEY|J01o)1W< -P7Ob23fTVl_Qn56&GXal>r3X^5sgNRrKA8N3{hn9{7hi8c~!P*ofJVdVi_${@)sL-5)$>`|l -6W^kYy?PQ29DKok_oWP0aCl5RzPAKNbu20H98Rl%&&`!evIuYX5F`f=8X%t_T*JzeZNor<`DJ9%F)pb -Qn>Np@IwQ9vSNfH3+395KgJs#Mv(sL$bYI8m?OLzy -+CluViDp`mKLlennmcVx*%3;Rt$VCN(h`U4`s2^HD_|9_*04>q-#$Yl4syn116?ye^mj=KuFG)IbJih6t_o6CM03gtq2hZJj$?%-A -y($4$=nGpiW`sDlyhq;R|Kv1aL(d^s?w4HKO2PH7hg$E+-8W_9I9TfSv~LJHVf}E*RLIPZQ1UsOPLZlUB9H_} -2ixao}wD`3~ATI06W4HZbi9!fH7@@=;3D3@ESpSn9p`Bx~u`p2RI~qWuM!?_pl>#vAL-41x0Ixgc81Y -+`F}(Y*ldVQ3><8fmrar1&*Nn;>{l$uZ`pZDtTt>1Gc!_0$ezG!hU{g)6|ElaOnGe84Wvv1r%p+wLtT{gK`ZzGMJVQX30zs|scYjiJ -kZvAC0I7aHnLR!h~HhN?i%c9`L{f9E$$(MBb!OL5VC7vhYbQU3^BBNsZ(~^0MJIRoa!975ZOlS*$FaP -=FIjJh?^}vaYbJ+A0C3vV`H$bDL#TZ30-#eQ|!Xy&?|1iu}k)MWeFr7ko!``FthW -Ns-kwK=D`!2gayo4l{=P3bO}neKNH*G=quDA2wWWm -#{D^^)O0eLGvn#WK-Wz25!iSp3vRXFNBt?aXb$5V#qZQk1_z@gBE6`}2b?C%I?-us2>0nfny2Ku+HNY -b>?dLAXPjHZ8wh4@3sPCX27~PJH#hk&KoC4_D<@jw3&oZZTcm6-D#*DmU(u0ZS}Kn5^)3r5P -mzC7|)8>N(#z9rCQY{h{L;-hk>8HCFgdfNQQ08yu-@Iv_l&%q*XCp6%Ukjeah#m-vf*-rjHE>(Dq5dP -!vJ8Vq=%v<#N$n=qewFg#&Y>>hE-4QcqND)a+VA*#NQ{u{DN4s@r+Qk9HeaT@e&XOGo7+#uGA0KbHtm -;6iMI3bU_g&nRS$i8d4~8#GQwqK8V{Mr>1ck)jwZK|)WgJe7ulJrMphyLUD;aZnV{Z40Y+n1I0WQW -=WvQ&Ay|nq(kawq_b_fY&l~+qIHPuqhlG -c`ss6`@=WoTTvvZ%PxQ9joKRTI+xEHW*JJ{)#T`rKow(&!#Oyn&^m!JJr=jk79#VXl}|by~HFGab0$A -C2DkoB_>_6ARq=PMSxxx!{8e;e>GoU;K`Lq<@K51DXD7|3$T4oIYNNjqO^MQCVUHoAA|4be8)n0cRS5<| -82g~NgUsEFdSw|msjRM2!QbDRF6Ld!RBS*qnASEtcHPhqR=Eg5Zu88&DD2_5pR4Ga7!wwX57M4oHgo_=e7CSlg$4Ljqn0 -Yp{c3DCWgh;2Ce53MvZ+d*R5&8_k%$+iURAvWCoL$qOg~sbV&W(oJ8^X)_wo9!si%nF`aIG8Fp}qzR0 -;918;_AyMUrMGZ-Cld&@@0W0yDs#COy?i&F!t~~)m(6bI70FkKrHrZtQy<1mi#-=w(B}g9eVUtlEih( -w|)-r@$*#mh;sH0lnUIzX_7OG`HG}NUf2qM$8IaKO8N1zGjyzf$6^5i&#+920L(}n8pHXR{TY}Dh4od -(SY{=9X|D+LStDgX?ySnVmdgUdEsb8?nA01Iw)c+}6biSXG~ig(ThDBzOq@c4o)b){&^Kj>mQ{#{zaM -uLcpvO-;1w~NK*p{nX2z=y!b-NVyN%f@4R(c4AFV#g$LCRaG7)h;_q)Z)3Fv-}L@=z%u -TXih9G7GAVjXq3g%i5`;kcleFwb>OTr8n?Zr`sK{PhFMUYF36!2|6Rgi#6e4Wlq<6w+6AdO98H -lsF{#ZfP#ucvFGZ*kfRsBsRhKC&p_r%t2PFb2)(;N|7o}5ew)fOn(n_>;hwE-$@rzsNdt5GVa#4IswgQ;#dZ4Nuz*r -AX@K357bkW(_-k%}*k&}@Q7avJJ@0&G+Ty9^uVfQcUp$WO^~Mx!($ZS|{%(a>0Hi3b_S6SE1KjkLE2d -D<-;RP(AAQ}!nr2n~YXW;!H>j)ZVq?G^~tFBEkqC&+COnyTHurb0xvvRESJP^c -|VQQT))pm%xNf0EnZi{MR>@XCr(=u47T9L!HD}i%2Is=hBWTVCKoqg%ItP{zO;M6AiLZq~*O^F2`SVN -Dr5aKYAcCLmQHb=fN|0$Lee0$zv*?{;^h3}b4V~djDV8KLVs!~I6yvGzqa#kd!64>)XA>&W$@(?VMUI5h_?T?Gs{E;55%u9bLFoGDeDUX> -pM7o8G3GyDOQWk5iM0bZwJCx)s?m!4k`-7q!QWqQmZyF|8LWu_%bjL0aJR}sbG!hpC)rRhJ<1pmd)sV -^6su-tb)h<<<@=!!d(nMG3;-?MQN>J3{76j@Y|R1&oo%P9acfQcHM3KWY>HLEJ -7DFGP`fML^VCaUQUcb{0_n1mN}FL9R-#!Ni>rVx>u!oIT#Ga)a=%10>E?NAU|Q<|>Fr`sa1)g_Xvdne -A|fKT6dHE8Vb0Cg+>*FsMG9pcA!xXrN=A3j*jb2rzy(ikj* -!V9as_(TXRz>`>#Q((O|wpG~n}jw&hAV-FI`a*CeZ+dYT~XQ`T6l^z|RMhmIQE?W#wQKt=u6|BuEGEy -pzKxBt{Y4~(NG=x+?JVuCit}R8W0-M#3XE88-NdTt|t{+Isf}(trUTO -5+>S?TVXc^PiPws=9U{UP??l<6U4k%0C%nq)cXi-z2}kd>Mxg&>DgV9H_)_EL}5tWXKecFrl9ksHUZQ -q0p=stvGQ1tVxxIkL@)9E!O;<0WrHK8Ls2*O5C5UD6@@Ha+m7E;2kX0t>d$*7nHP{LCOCee>|bXmhDGumJ~li!;vg_IffWDMV_!!;Q-g^7&NuwK_3kcRA>Pl+0!Z7L_C9F!W73BNoQZgZXgWxqXYzZ+$t=oYW#SqH+G!Xi#ZG ->D+Knyub&u=pM_p=WPx?)jJ|Vc}f?lFKNi(^E&DLgGt77kzQVfUyNY4z;UHuX&J+Puk#-F0AbKF+ -NXae4=jF?W=*!byw&JA`)b!D#w=z6DTqf_RP*fp{%b-piR4zp>!+BZDuwEefO|OPNe{wL_(9LG!UwL%?0_-_8m<$JEF0~c-Bv<+%Q!-Y3k|Vl**UISDSS_-*VaN0P( -MW2RP#p(3-GS?ty4n^;0@@w-;*rhT?Io+SvH+=_T5{9#=84tm`V|ra)01jIqev&0{JO=Qu6=rgAEeQO=3f7FB@Yaq?=ORBHDoU+qacFBj%R>*UVUZM%gT%F&eJMO6*U?YL&#|V>n7o=};fZn -Lm6Mw4`>lgXx}o~q0~Vffm0W4`MF?L>Nv-(AN}5*M);v5sm1(g8=r%mHJZwUV8HLw;F_Aac!7=TX(h| -5>aE_!-?_?tmZA7=t2Il2y1G$ziKsWZ0jXg=w?Ke`00(`9&@M;dc@R(*rjDV;6Zp#JxHTV_lrSNK#cM -MBv`~hqU$1s{IJ#U;KJ8xZ)!OHB4h*(3~ymtN%^-q$gP14GfLmn7saMEL^g6Q2NidKs#$c3Jg6DpL~2 -~|$&5;auH12a1*xm`>9Ks(#JW#I1MG^he>XrY;~C#7n{J01vWRF&g>3?qO$3F6^WJPd&lvs<}=vSMBG -V2_OnNP9KaYHknGMzl`jSZ7r!6xBcBW3A -G_5zmE3P=TQr9mH=Tc%~HK@qK=y6x=9;m5|^h{jU2pQ`=$ykFb?Bw}Q>fmR-;9Ka^SJIy7OOxU-NPo9r=Yv -Et``Rc!%)XWPOp5$Knx4D&BrtD;f-@BAPOeg@!2~HKXwux0*25%c1&J{@JdyO?l4PG$vY}p<8Yj{4C5 -6XetU=Q+XbKEAC1~>AQtqD=oE+1b`1~XZrrJVikASI4@NB{oW-Og3^1y>BmxZLK-oc=^pnW=}P{_jxu -azFDg-Z)MJYi1)$;5yh2*{>@Kn=9RGn8S`+J$br1#mhz-xjbB39mIVhap3N^W-`Q#}fb?p`#ON^Rz>Z -6%lEtx03`dq)B&hf+G|BnW#}GM;e0Q7O(~x>eV^20&oaW(_{@N5jmOs(1C*jV3K<#U4aR}3?TL-YQ%I -twJHH=kxBqKt2n8dCz)cvJq7?d)05<|2m!N@mu7>~ik@AP0Vd3PQ1(u+-=uUIHouS!CvYTH1*z+UlDS -PnZ6dEr1Yx0i42+T#^aBnnU|Iw2JZzYdcoW4;K-MJsrl}Ii0xvwP0~y8ex0+5 -v?>n(1m@EZ?cXQ{m9%2!q*oEQW(h+&=sk0rup -!~ts?t|1lnpa2^X`)LoD5_jS_$qo*Crig!%0z2Rek}gbwnr;c^&0TcIl+ld_lZw>Mm>y?_l1@k9tx0h -exy&9N#Q1OXhJU~h&9u%w~gCf_FyagI$WE$mhvIZDeL`&95@9J0|X~#lG1gW+bDh~XvFm5)?S^mr`9?YA3NlwoaHa7uJnd^aI4|bH -p89|Ad3RY>R&y{B`6Bj9S#X9z_YvN)_-Rf}41k>S~dioz%*Kz1AaZq=n)*Y93d6}BZ#-{Y->175aROv -iAI#qQeP>7W`u}EC%vNz3sqkW!6REq071yzEVa;r&_ouK5T>yt<(3fr8h`gymB5?UqM`Dotmv1ZGVw4 -LUc*vF%8lh46B=~oXstZBv;RYA4QT#*tV#lxn7|H4jiauJzeiDr7ln$zS}!!Nt6)i#A6gj(vL2_KfEi -NKN*tUo{)iO?!pi@ChBx#<{kHz<;%5cp1nW5JFl9qBwA&2Enqi`RP?19G%U;XG)NB?vQzDMsH#$Ue*! -R11TyVtBZZY@A$glPI2p5_%4uOK=J13L`epqTfCt(G#k+M(7s|p8#x1rvk}J!p43RI65xp$lBxNL1QS -<@J(of>E)aB2r4*W6VzUbFlHk4?qW^!jFVzFff%Vfs$4%^Brd~*K}!&8yl)#~HtI9!XNK_l5-NmK!N2 -)th_VD>Os~K2YKWC=2niexPH5~2mvWmz;>*iL_&yhsj$YE+3tF$!E*uqUG*4}?0Ym4dG7y@dYu=}82u -wRYvCn)?pD_4?%t$#7&zq_}5T^#YE}=puO_bSu6$b+i)fy(7)LAcD#NJzRt#>nvZf!vb4IFN;d_gGee -kZm+yf23V2cB}8^+Kz)3xG{`e>PdUMxyuK2ah4#J5jJ-dL36XTQ9q9rT{lQeIp^rTTNs%*-^w3gGUEE -R>Fzp;elQU7yR=g&w#_IJInPh({t$wbPZbft6Ml9OhePGBA^Rbqkw950@_42nE|x7Z@++N4qIXKN -HTE(ku;yFX$@N+ty?58Nzw!}ikZ=z6}J|~=X{#qqlbAlxb_bCqfs`SAi2gIvY -LqZUzD=Yk6FwmTrb&N4rpV!PFIi2_Kcu}xOQQdjgW0_`QL*Uo -{*=S$21Yfv4r4i)$`i@nO^lsD76hpxHF31{VQo)CDbZ>Kd{M2T=xcaAnoW2&-8tf6JPTBt1dN=5N&FV -TF;!rB?!(iXXt=5xB^q${c@FCv?Mu;Ku!UYTNYFaW!9;&3niw7pvO7O){jgDNN)ke+#&5IRE6q5rkkY -h-ys+@LYCCIJDIS4*>9OS1?hhyGj<)1QoTSZ?T0Z;X^^i&H0@la; -NKvt3p3mR{X;vfcjhW88|TNWZP*sZoi@yg!PHp2z03yvb7oK -rruku<8iBi3DqU8qwp27LVfYzOL` -2PYAk$>mLe4(r|Aa>MMDAy3)%fYeUfMY-g22{laS0pGfy-C`ed8Zjv)HCGRErx*|G`0sV=t2 -AlaK?mu&$JZxssmsE`lE>p%-RqX-j(|OamtS7EEL}46SHG?53iFG -)|&k&Bd1{7zKRi%=eo{{gCNlM8*#&oEw2K2Zo#KTL@ -lA2Ain#4H8Z*rI+Op$a&Iljf2G%x?R(83&KuYomzwq?TdObZj}pP)~e^u~gN7t>8|Yq_ZCVR>R2j;EK -l82CxQWFR=2xm(tIL6wlzXX&h#mMnt|Drfd8N#Q9e-lYQDB~m<>-$Z~|Eq-MMM)f|SP|{E+Z7wsWARV -}V;}?SPrNj=#B{~Ap3{<$`rH!X-(BYkO#uzZlx~2_iKpMr}6B?%;D6}G|OgS0?e_Di4z>xQ6szm_Aak -ausd0#xyT$iE_kK!qqLw^=j0YRf84~btQ1VwuC)IhV6h~p-O!gRJCa~6+Gui4o}qSG}bkx7jKk)W%Ck -e1d##L-wL!ltV~;O!`cEv;KMek#f<$#}fUA`HwDvmp*w`u}PdwzX`BJNPrFv`aIJsL{4FbWj4C=keo=b$mrTMeG-fX=4yH(ZZ5>3F=B! -Ux?$qdE1M4KF=NV=Z29?g79*xz`=^11U<*YIj}a|jXCHk|R@-ILgYqlw`YgzDsq -!y9Y7w5lt`^z5@y5byE0AvN^-UlKslvJ1F-5eh4?FG^F&)P;0$CFcSA!}vjNSgS&R&Tk+7q6PllL_OX -}b=cq_GM>hK95uvdzR%qvyflAH3Jy)3Nd69hZ>^!U)Je=Ylu(17CK1Y!DKiHB8ZtPiZ4#AL(0$%>>}| -#;=}@!js`QqtvxV}Lr}zz6fG^7g&^VgAkyksEc9vAKVv!RCeNEdf$WW3BFTAOMS0+h)3OJ1rsIJqik# -{o=bL9A3s+Xj(Hm7Hd&-HtPR499S0_cSh+P&bA;tthA?$&iABnvleU}|F|h_nXrDz`+75X9EW*`@)y4 -|uvc<;gw5=Pj&oYwI397&RKtNfRn@y#zEQ^}ub&D)@U`=$t34LV67{;=6II`;qJx5(vDFlpPHDb%2)` -rAe8AzLFz@!(U^8&rFVOPx@kcd77)a6&fDc##)bVi`R}@=(7ED8sRwgmto!ve<+ivoiLV}xlOr -9iMhj+N%0_oP8ke7PpD#CPx6lPGxbNaIQTPcq-#ZZ9XmtcGk05tn1sCs0kgpe$E-9eVQkn2pG=8<;mV -<%>l*xV+6e}0QV(=XAlVZJ=gDZ|4pjgf+3f8LzyS)1C`a#5M-C>)4IF_#a*U7!nlSdi=yQF5XPmyVly^?|_XwZ-GeZVmd5xx@Wk -*AP&cYBTE|HaoVgh&|4*gvF%A*3Mbf8!xd(5r?0X-_J8r2!)3S}E87TY4}TXKXF{jk6ueNvWQ=B!jvbobSK*@#P -&xs1CRFj1Sy;ak$cp~(`c|xcu?m!o-mFOFJgLf3ba&Yo34cA3v-O|{j}c7r?U#fkmvDvhT*U4Pk_+U_ -2@V*${S-wKnAgIQY`<7}+Bmqp#LrK_5)YG`$`#5Ayn0Zy%@t3?g1af%@)J+*zRKo-BTtE5Rs{%Lo3gG -#!%oZ)6jrpPvy1L5%Bd*)I&a&c0t~Tfe2{i#T2Vaaj=HuwIscdrgB -;HTE8dDyF@8(!(~YeA>3zpPl=_nhK=Zk!e^!OG~`e++GAmHX+}>u9}-FVa{3FYoRo;1nq+OT1GWXD+} -r7S(XA&ycd@N$6=0Wa&UiEKCQ+qeeLORz_p1KTIOX? -aW04sBW!?y`})lMrZ0NPFc&PO+qC#?V*RfJPZg7w0n%`nC(m+$7=w2TtkEb%W5D1yNTu2R5@|@P41Z6WO<&^ -^-N@VAZSkr3;n9e7@{+W&Evh-o+Fu51`-YBH1M*{97I=pP71>tX0qV-e4t#63TmZ-~ii?mI_Jmd6c@Y -g^RE2y^hl1tm?r-?@RD>qDNr+=1c;3f^yfFhXw_R+Lk=y@%#l*hbQPs-mtX8&|5{vxx7S -BNkMr0~hzG80B{bgxl!-!LV+;+WF#NEZ^wfR&gWCvGe2Lg>0x3h@ADA4cu4mz9yVic}= -~$J;$}DMQPN2IB#7w?~M#c0ufrxyxH1VhT387kon8F&JzEM)(GeX@TB(G*$5Tq$7OtlexI8g&JphOjq -<09lp#xHryX>edU0UKf4eesUomKLrdxei~r6x(+9gGVbLGTWZjPH`*(Z^>?U9OX2Qa36qOtNG3UZ$|VfFhcr6YVPh -4YPELC+cC54$QXg?A5eZK3ae?=p{uZ3e+XF$cGdvPEB`w_reTZ_$=9q0ocx-RwBwEhyuEy5E0m6eC;|VoZkNK8G51$AO>@QW&1GsQ!`Wi6B%5-?FfHi8+O6=pZ;b;yA`2BgfzD -oJ7Oo2_&ik|`eE5}xdHB5?bcz_NfBjAo4bP;_7aoYW@6ZfEl>~78*=1eu_xpt6OqTScxc7+(0Y7U{v8-7j^OR115d40xnDJ? -7*Q07)y+iqt)rD2Rfyo95D{3U&f2TuNhto0P047la~x$>l8>NN}tFzyrf>y8gbR6u55iD|CE~+46(|_pyb%ZG4Vh%pMw|}rROH`O>ESLSIXkBcc$%KV*#TuQ>ZLD> -0`$w_L#(FTwZT+{h>?`Yu9Oejm`A*M>rbx!vID7?=eUZN_Yx$*cC7jC?y~`A2Lhp%uo9 -J2>h0VR}>cc0-?k3MZICubYH({0XKFp?ZDXs<_KH@8qy)5i%l~2R29LY;@M5I{(8$x$Khm{`$j<-CI~ -rqX*-n|9zj3?G){lRm03e_LhYQT4a3|$@sP#^e={y^pYCV_K3tqG#BDhL$5i29EqOuF#S$V% -K=jYnPU8fC719=qv9>*3mH!2(|M>aQ+I3JA#2bZolxJ?hQM$~oufyc+<79XbqeV`3CZ(NiE-#=E856I -(H^uU#p@Ik+9|RjFgqyBAra9%mRf6knH -2)_@Wh4FvWucMu?xvDbxG)NDk{|auHzsuo~t0&<%4jP^qzd(8uc!6#4+UjggYNr+9$^Tz);}>b)BWN8 -MFj$hVqtNFq~IIIRiUJa-U>_LiI^Pfvsai4rQ#Rqf(%k`d^6M1?^5DUsFJ*+QVmnk}UaKAGyi0N$P58 -*p+dMbvHepZ-ow3q|v*PbIv_ge$U|uBJa@xs(`n<%xWF$x1C8F8{#r)O~>~sEDRlNMK4qb1%Ir4z4BD -puRU7t%@{fVCLxOR4#9;#u^Svb{>n7BHNor{jHLEETH7D^{^B{G;-H3OILW{Q8fKqBy_l%gfvpVIvse -MDGpN;s3+l`WP~A7z-}qSo4t__EL%`y8G)~`d- -6humCM?IEg2R4kahnE-Gnd5~oK92}mrdo@kq|H -sP1I+XvgXuV4K8{rOMZo5%lnar@s;O9KQH000080P~d=M<2D@_8J2K0Fed&05t#r0B~t=FJE?LZe(wA -FLGsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoRVlp!^GH`NlVr6nJaCwzfO>f&c5WV|X4C;#mxY{_y0^1F -GkQF;M)?bip6ge5RG_r|Oq(M>%)L*}kw(M*gcd@IJG@N;S@6Bks-RlnxM~{;^O()4{o{eZYT_k_eFLJ -w`F0J-V3oCb03q^@3n53i1{E$kC$k-j_h((=q>O@N~k@>*StjvKenUee!4CK$*yIdR?p{lC2%!QXmJA -B%MvBwVp)6&>eJhv=77qo4Ti0`iwHeekZT($SqOKxcJ`STxuxSAeOtQ4go*HOxj?K2lAC5h4A%5Ck9? -YWyj5h0oh`<<3j?X0ZmBY~kOZ)n;0z0s|HSfk|D3flyiO3O^nl>P<8?x`^~M@=q?(ZZ)*|zWGwZB5B$;1Lnyof>4p@#Vb7JJQ&&8Am0FP0N8CNk#|sdl^aXQ7Tc+A^S*tz}kW1 -ettFMdoisJbbeT&mHp0A$nkqfJFiUyvLWOYyyz>sBy_6?W=U^YsVuc(NJlj&sj6zGp9tNAF)XuL=%re -&P2Cdqmlr?gzB%SASdh%)B0$HC2OE?+z@0a+PXS+EyUxmNoV8tlMO6|@)6j7H}yF;gV)lN_4=)kS6W? -kE@~ua4f6EJ+*Rrxz<|F}lFola>@MNzfQ_rf~%2Wz&_j|PU{XjUsPhmGe1ry2X@@wBbMevx|TJcg|j`Ce* -1mnFxOES$_vC+8BtTm~;pbzAT_y!$k`d-%smjE&SdY@-W5=c>2q*=&Z5r8=El3Fq42iDBnP)h>@6aWAK2mtey7DwZfttM*{001vE001=r003}la4%nWWo~3|axZdaadl;Lb -aO9oVPk7yXJvCQV`yP=WMy=?r;F-Ex8uhMB7D=vCbymbiC00#~|0HRu)%!eoG^NFxXsJtUDixc`L{(9$2unu?p28$gsszhkn@5 -utD^sdsuBttxvA+4aU2gD?PKyjruZyxuirlKGG`cdenr)cCE@fRBP+M(4d0DC6SzkRrK7IibdzX*YI8 -D_Jt+ndLSW`ZlSQtMm@~TW`HN@%J{!3=s;ourF0$<$D-z?G^Bb-k&UMef9fg3@GG>T*N6nwQ2XT -g=^zh`K01UXx0HQYOKBI-87%C+hj=#GmFU4is$K(-rX# -p=V-4AT1jJ-AI3K~2!>}$Inkrj)x~d9G@ul{uWQ3`cdas -ufH*sJUcj;mqn&VE>o<^Vg~79Jqn>SJiIm4H9zzV5$zQ$YW*T}Ra8@WqIu0pCdn7g%4|iRB+J&NUfma -EeBeFN9TgYG=0}LMsH%0EZpb#pB2WGURl|$(MXeWx97X$V29v5uMINlx(xjAJ94#_FX&oNxP5Rc%O0% -Z$HK|)>4@h;5g_GE5yS3csO~(t_OL5{A6T-zb%;i>DWxgPkD28M^<)p*O?YrTRKfd_e@W(@Bq<d211#Fw3U}T#5)Dwmg%L$omneup9IaJ ->(T{Cdr`>suf7332Y6oMk<1yc3DS;+~$N5S+y>ZVCHk|$}3VlnaS4pH=oYg015{a!7(Eh(nbi+lia|} -am*%g1r448Dn4Z)b`}&_$6tOt9v*-B+XZD=TVzIMiH(qNb8;-UV1_DT>Gj$mv-xGBs-az(D4BDp$BB* -*#7SgXy5RVuj|u*;%OiySLRU2eh4yyX0W%RX6aR&LHB?R`lTETD)n!MvRuP^enG}-U4coIhLpn35YdS(ntJBHr -iCaOU=yXxQB+G2X5;R+_F}6Jh-be0O>b0eU%xN_>bG8KIDA_G6Ro0|)iqpK|EhiV{qzZ-+zC>-NqX)1 -R!+vA987Yi7>?A0)klcuks6!7_NlMMDxaV|T1P9exx=4D2FF`@H5!eSsiGrwNN30FR67Y`pz=DSGQr%P=L^DXqGPE2QS{`zfb -87pSf{p7hmX#SX!9O}vC|&9H2tKn?Yh}va}G#H5gv2o6%Ii2GV&2;=#i_C;+J-XqMghVKBL(3)`}8@U -8Q>CXz|g^x?puIAQ{MC*ozzAr2|k#Vp@Uyh&tytAoM+Ib*YnncR`KcIHPt_C&iLZv%(6du#hNapoP2u -Tj#Ems3^IC+l!Jrlr;q|1h25xJW^%@pA#f90)w=3Kx#wWW!58K>*d%o52!(6XFJDffufeFdd2z6saDU -5M*yM#PZ01Rdu0ZhC{Jvr9&(g9T8TuDS{Y6mvWFWN=!`#t{m#64nassi0&anseK#C40j<@UX -+(zwDrs(oDSL`?RhYo8}aIyQ=tb3l1sTd&J%7(x3LeMKzX2D#DF6>h~mh*eYn@_7 -cPjDRZ$V;W1)jx5L1*}Ro#U!bzBHd$2GwlY%Owt1M2bu^n`9`&4tLSUr~Wu(xVog!)^dkNCD1|2&4H0=qAZaJSD-L@Kb0`o^m62xZ$%7KIRpU$CkRitBb80upngE+~@)3& -oWg;Fy$e(Ja^fc<3NA>iqAq#C%rifb<0W^Di+G&RzHgx_e&!|Usc>tjnEm;q?TV(Gabd$Ea9QoTWy{jhv(ow#_9;8I5h;ccluFD%65>5jgdV+7*|1Kxm1`78yL*y^8O -3TIW6z2e)?~z&9N_FQeM^A;~GtP3dn>SrFV7ZNd(MP~-^7=LDogHH900ZEvF_JzzxDObWvMIzTmsEhG -TB1PS>ycdxTLNgZr<&~TePp{62b&1U*RL|y5m92Rru!5~Ah7|M0(?kXXK*qlqTYDG3pU}p0Lzd%Oxe> -KhM*h4(3>`8mitdCURd;kDK2>kF_>>td!k83Fi%BR76UrE2z&5bS){6zz3dfhvF -*2y!<_zH`Vu9RSUkDQWZ)zTm!^W-goqr8HVy)9^YbfKUP|tV*XC$>s1DYBORd+V$xV4aC2J$Sqq2U0th*e_|G7`No={gphJ`z8L#{MaqIK9|3L@GJa-Kf48Yw_`Mi{OE;W6FmD1NjU`^$j~pj{^qgi -raH47F-0)V;fb&4JQ(r7Ix~Yp%t?NLEJnz^q*10VQu>c;33o~JjE|<+M0z^8x)%w~-i~kXUr%oD##d( -~+>5WXEbjBa@(R4hkTDNpX+M+GcdyScL;jG}P7V(KIk|lg=HH&5-kg89zZy^JRp?&_m+#(8&UTk{obu -q{AWD(5I#Ji_RL1_x1A^MInXCJIXr;Qp?@?-W&*`VLe$-vnEaG%}pE)(UeDF$LA**k%5v6}+2_nH%z5 -YSNnLOBH%Tc=^M<5p6(YI_m=<&&ga{lhR7BBIzDeSALU2wT#RibhhwRL!H5Nyw`@s4v*c50AQjQmZrS -GfuWs^RLvxQ_@*qfAd6atNqt>80U1NtTe8yCz^}fNvRqyNpF$$F{J1@+)+{y;Py7VA^K*xzyvU#AO59KIvbwW6PCVArYEcw11_M6t@68uL;imi`x5lp1x^y%DmR6)&5Z -sEy=Q6$3%4l|Wu;^yME);mm)Dog&7Oop`ni70sjStpNGdS8(wTBbehGX^@J?HrZ(zlzt;9UGEUqG0pM -%eRIoer8Ax)Ke8b+3s=ZivUD_M_`!bu>^%=%sYFI^si*ru7VI<{=D20(R&qXv79G3+|ps5$@`!J>#0M -P{B8FacJk-AzNG?3P%l?+`)Kun;u&=H@b6!B|KH{+zZ(QgG@3IAkZgN$Mf%!aW|?ad6zGjHT?igyfY+%AQ`Bs$>3mhK5&u4N -p{es(o2lAnf$kt2L+4*2!yoEw>7M%+>Nx7ucegn$qn?E>6eund3*t<>*KbS+t92=TlL><% -g)@Qc*1Iw?5^W#-@Eg_uUM;I9eU3Tr9?&#utuouRzJp;TyZ`?r4;*nTLS6U@`ls~VabUTtilSPe8miy -2qzc5hJ)KDL_q@D=wS_owp|11-B^daUCwwvhhZDRpmBZOIJAfku^>i{KjR&_yRba5j`gw=+iGuA%|e5710q6`8Kweaf7%0Goz7p}!7iNe5E*N+Y+6I4YCtjh -32>S^IQjz@sv9%^81WRc_p8kHjmUKUnt}O1c@TPt)c3* -@31x(NTjevJqK=KA0g-EEr8Cc^&u@{kYmEr?kva;R04=hD0~_G^@RbTJDQH-SoJ!wd=_aQO&MFZ@TP4 -GJ5xl0etsWV-9LE`2y7gw4sMl|E?`3Hxuvd^eXGL34eIv7&$73PYkPK*z`;^lXb9F4u%!OuEe|D6ZCx -AVP5yH@l19QzN6mX&!&)OukWG0ei}Z1NjxxrpFa&xUWOs{`4g1;Qr?SHvSZBB%Ps7x(#HueYZ`WzXyLCo@m+*?Za-c%$l3sE7~upU -|$?><^;Zuen95^}Uq7OKbZ&@__$+YuzevauDRp3+$(9ckDmbL?1xk`8qsC8N5cWN|8i&vYh0rfS6=1) -dL2IQ;$>HL66UG?T4WaPNzic2B!BkM%|v+JX2FY9rkGarMq<8sWm?byWHe$?=(?nX;SUn2V*9usyvWM -98Hyjn#DA1J!>_+KZ1u}vt(Fd8iN0LrJfi%zT8(I_KffLlKuNDHT)jByMx2fQ6|2e?I^24W#!wqcElQ -tEeU1tMMn?Hl57*=?_8di}leGTb-Q+1c6;Rnr{&54Af${XM#F2>xAE{S6equH{<}zP#X>z<{ -Bt`=TkB-8j!3s7!BWbYpddJ(j*>?_$YVZ$|q)gGR-_gS%eqvg)|~1i8=u*MZEi={qL*#)`fpEBX}Ox= -!iOPWSA-nfeBGcXEV)v7O{_WB4Oex>J4R|E+>Q%J=ui^L=-249IDDM@3Kj;|>gz67jE4i@m2ja(DAy? -K|YR{j|-O{{>J>0|XQR000O8^OY7ym#>-*zE%JL)3^WtFaQ7maA|NaUv_0~WN&gWa%FLKWpi|MFK}UF -Yhh<)b1!3PVRB?;bT4XYb7pd7aV~IqmAzfBCAXEPd4GOI0Kxz^Dy`o9T8r#LHz2FzYSs7)l8lD?rjVA -7%85#4sxniq*8KY6^Ds0Xpxi*WE<$m}o(kN)<5*DpW&$IpLz{rdAyKl|;MpIyKF_3u -9YzpwwrZ$Ena==$o<&)4tXz516|Z(hE>K7ISm^Y!Ze^_#c<&#Tw3U+%xZ`|gJ~ufBfy;qANY>({TI-+ -Z{f-oN?y>8GNfzj^iH)h_uD&wqJ-{r3Ckch}o*uMdBt&i(t}K7V-s^~>*{|9{oKdi&=6{`1}UZ{PXHu -K4=>+jr;luirht{P6tE^`{@L@ju?`Oc*KYzG>_UX^Bvew*H{LP<#e0}oz_4Nh6eSdxN{Qmjf -U!K1?Px9&8Hy_@;`qK~lF@N^{=l^+sa$Uc9`R-q@-@khOFYjJ`cm3kpE&OnOczgZ+#}9vg`{sWB-Bqt -&{psDycR$i=-@bc(zTUt6_QSvLhW-8ZiwyHcf^P5<(qH*)7y8u{C97^dG+m&eDu -ScZ}#KR>JQKFzI*>uAO7QS|8V{K`TcI`^^ebQp5N`K`TY-ndj0C_UHI3pzJ7l5{`q?O{`#KJ-v9ZpJ@ -qRZ^5xx->sN1g_4e-HU(c`h_uTt0&+p#vPpS8+cZ*}tj*TvuND!+TXd-9v-4=-Q6et# -bQk9&CE?*_j9=KAx?zdY|@{`&dVM%49kPm%9`{68AQ*Kgnai_g1@{Ix^>{(AN8_2%t|7uUbPd$qB%(f -1!lch~aQ@qMvD|MkZ&u2J@nUcUL)*Lw)Q+{J(O>f2rQuU@}>`|ic{%eU`8@YCOXvdcbdDUV;2_9)l&h -cEXh|EvG5&wl$4|C>hTqo-Z*moFKt{Z!w+d;8t>@=pw8ef(zQ`+t78z5_^mZoc0b`TF$_+djPB&$lhW -54)51^w=Hv-Su(HvPG`=e3nPam -xsZBX!0`%fR`?nnwg`uypm)myRYpMUd=G5TqKF!#P-(60aTQ)SnGx_(xEasTo2{duV$53Jc2`!RMW{> -QR!_K#@NE?8HLzl-{Jv;EzSU+fQmZpCGtyMOiL_uJh5t^2>&&-s4=*3bXpi>IgEY5)AyAAkS(r=R@#p -a0?WFTeWY^I!hqtIvP;+kgJzll{M4W&8L+cYXTjm+$E7jm3Za-8+pJ<8Zw=HGJ~RUw`(`Uw-~SKHDXF -i)qD_`ReUoOZ=DXXHVDFA1}7CEnMQoRc76n!Da3*>KZRJz~D-@rW0##CXw -0*(I>tC7$*l<;AY7zNooN?qB7LQdWCWYmFDFZO8pueFQq4jqp@4 -sG$6Yd?tf&d1aK*r5oXo`+nI-L<=?OQ%DNb?mXMV;8Tp?l0P7KXakw*>-dKexw>}*V6KC?~145Cv`u| -evIIfv|~SM-=Nq(-Qxj9>Yi#eb%KJ$?|81sb4{LW@?0~lx0FhIZIQoXbQh1d@3k)s=%VDJ1HcB>1c1m_ic1m{c)hW>_(J9d>0gMXpq~45O@1 -W$M?e5)xUAuwT+Cx_RgDD(LSEumqf;|jO;YQ0BpY4I)Lw@kE3+#G>dND73Lu~(Q?K!aT&_!qg`32+ -`kiUP;g=g4^-|JZ6cWc|pUFCk5)4%(3?9O5yIfWKhtYPr1jo$~xb@yPycI{!?#i^}fi$>X#sDaTvb^{ -A^>_g4^w12Mw*|jBg1ok0!v-W4Sl9^ZR?qx-N_ZMdN+Hh`k#x@5PlY<4U$FA2opBnaIo5O7tn2^^sxD -+k-p6%D}!CeKm(?w&C!~U^L%HXrkzp$s&OMg-CUQ3>^!uw+@Fa8T7yzzUrWxWlfO=B)DjT-{fplw&B* -q%Rog>WG|IBWIsgq5I5J|6yy7G2cl>eFcI`(LB74uTA(Q^CAlU~fOsU2ofVa@f>8>=$!<<9)Cg -?UJprZrN{zXSR6QRraNw!M%2m6wLh9%E50N_36T5?SI;XG__Jkv6K12*|4m)upToT=+)g6iZM;Fokbg -Wm|FKI}Y-q)X)@?)grE%$81{ZqTPId`Q>fIA;&k}lsR$`ANy$Ww% -Otnz0P}Yk#vlh|00%`vGaWJu(l@`h#&}Rcj0}rgvL6>ezj`;p0HDk^?pjx;?<&m2_Hg!* -JnRK{_k->dmZ%kh2kuabuW(_}D#uvsXns -Ve)~EgZ#BJ1pqzQXr?clOAjGeA+6Bmw2+KaOWtB>2!8LeF<4P*7K6#K%Xu> -e;`h6R|hA9}VG(_e!UEWDM4x5nLG{1S}ozEF|{xcX=;z?B8KvH)YJ_Jxuxqm^Z}VmQF)zEEOPVxDmu_ -$9c-0|#Iv9dc?ca6$l7U~+FgXpA)95^$&_VDp@RA2U=3wm~ -I*=@ZgTWj0{-DqIg%W_Gl{4Q4eo4b)Yv8hh%LXnRxMT^~7fRx(HSpNLV*`&3JT~yyz+(fC?Y0j)9@+J -R%LXnRxNP9E;i)ws+3?gFP;5Z40mTLs8&GU`Y7I}V;i`rdKWdA`)AlZQ= -9_zkP5=eGz2Fv5VP!cG1o~H949Vm97*nwiN$KT2Am+U_%2_!p^>_D;u$qpomXa|Aa(9xq;_k|Kbu>-{ -p6gyDt_j-}rFWG-k5=eF+*?}aX-o8+h;GqM>4ir03>_8E3dS5636gyDt5|;+J$F*?}Z3)V@#>NOmCEF0qRTkv -{Knn~WP+>0kwieqSgFMmiYjV5EbQ4n{f{!KEJqj0`X`z{mh2a+zEx2}WQ&228}jk -sq#Qt}6qK3@|dl$N(eb_N(XiOZFd>1SM{{gV9$CBe!7D+9ANz{mh21B?tXLbS3k+zX5 -hFoNT>FO&cyBhI)@{E`7y23Q$jWni`j7#Uz>fRO=41{fJ&WPlN9j(wp77#Uz>-0{W4FBxEEfE9wMeW4 -^68DIo&eqSgFMg|xeU}S)i0Y-EkTjRN -RswqxU?jjufRO+r0Y(Ch1Q-c05@002NPv;J$76O2qSGQr3MBcwC-B -K6=>xKu8U%Ne(dU$Vf;0xJuwEbPewBMXcyFtWhN0wW8IEHJXb$O0n^jKF*DW$=t!#V=W4Wr39iRu=XI -7Ij}J2}a0E44A@!r$6xU2Oj>=!(U(oW_7INmz0WMvcSp$D+{bF?8yQngbe#aNied&$O0n^j4Uv+z{mn -43yiGemz0WMvcSp$D+{bF?8yQn3ydr<0^z$almsISj4Uv+z{mn43yiGemz0WMvcSp$D+{bF>b$Cku=$FtWhN0wW8IEHJXb2zjSL%4xv*4hXRAmf -YjE{gVAh;giaxap_zJm*A3ICKpO>j092JzEGl2qEMnx;`k+HhvU26LdinOLdiur>5lx&o2lx&o2lx&pjld&1iKIkQA}NuSIDSdl;rOn -1QgTvqQgTvqQgTvqQgTvqQgU&xMTtd;MTtd;MTvEf+hW`nB^M>Z3N&QEa|N7MKxYMXR**#tIL;u87G% -)^PC6hdgDhH<+b`L1@>7sV3leFSp{Vp*$4|XZJ`{?U5U&(-53t{umj>Ywq~3zm+XeMd%DukrIQgkV`& -698iVxDTB0=_~vG85Etqu0@A~q=Ctl^b4g5=7SY!FWsKB||KcPcwhe!5sjD#oW0vtG~!mAIi2z+c2j# -Jew;ocq=rH)n1y!Q@m})Qg3uK)qfNY=wDrVU;d??TSYQ)3jT;>uoS@)eQMXY98*bGEJ;^`y~ZGs<31>@|y+ -A-Ee6ek?MsXUT~%^7T}8|zTxX$Fpn2sRD6UA6;|$icNyeySiB0!$P4GI5Yq$+tc#er4BJ715JOW5gD- -rsN-SKlq7`DTvM_W=KkMCoNyC6t=0JgAE-VlgrZUKXHKtmJAFNQs1unE;Pn#({;?j$>KWrYVX%<+OdTES%@o-eG?7Yk3pA*`_P7p`n2cqzCp7a>4d -H_o=tMPAP*pwXT0hVyuktpse79PJ=Ch>8H7qOd$)4Cu8?dyrp+^{6=%lL$ -I%KY6mmXs(X6JEkA2ur1@8&`3-~4V1!+=E2@ -^0DmeB&eS%wK%29F@85X2RESMnzp^kXgeyx4K_whx#&n9w$yWlk%NO2xcXXH)@&pmva57A?nIVLkXUJ -ov?|vEJ>MTr{Dg3ApgF;F16lCWm39FWbY6Iu((MXijG0^NQW8nCMcqZ0*dqKwkpGdf8NB_Y2poLI+fO -^)l4~K~l+JHhl#I7Z-V%YGMJ`tPnTVcEUH^5x@W}ycV*h0RRf|CVhw?z{xD -^CJgr(w>?Ros+nA~{U{NxIN-!S&~lOpwYvK4rT8Mx(8ys@fsSwSc -R(YacF!DEw+31yC1e+QlY;(;kz_A-NlmTZu!OMvZZ+cx4@Tq7beZR+tX^WWC!jDWR>yY -(Z5N*yoFQ-D0BMpcQ9a(q=j@`apqAk`Vy2kb=Vj+Vb}*^;ffh(-Sy&34uD1OmoU8Haa^e!Lq*8R0-tf4=u3t -If`z%?^Q}Tbm*Z_=zFDX*5;uj^Y9;Ym;lVpemy480VdZG#1KQ*06!z-QxY4UDEf=}OOFaxrMIBBitQd -sH1@&-2XG#wthHqaqqgzxq=I=-S#tFuMP_HtQ -R{@-gceNhJ@%%d!l5IL@>)U_udF)?9otE#|@^kK)Dtd5;)d^w_C^2_wDiM=mxP5M4)g=m3(Z0Dyhd;c -{p(y&&BB|z_ -y6Z(>qJ{xJs(_>mO0HlmFLDaSX^o}0bRyJhLNGQR7O3Y!pjH@+C^vq$NAXm!>&?Dg$4jS0h+^QpFS0^ -~)JcJVE=9;N%gIy`_+SgMop_2+-`2bRlEQl2;K2*Ruudwrk`KLDMlZ5m4WM*b=T=UYe5;=t7DI}Npyk -#v?T+cpW3uhcW3oaGTX2ys3Pg4VhU0>xuP{?(YCw4q9O?2NK-R&$I2>M9ZSMqwHq6!E0f|9E -(?*83=NxgrMp%G#{Ga+OlX1?J03$#Xo6 -0ymEn&p=cfc93ej{;Sm=e_}6Z+yJ0xsk)D$2Er+@!#bT-HmhS}>&-8iQ+|^`fGCZOq=wh|V>VdscLYr -75*^_JY-+`Ri;|tUuwHoo*jRa@ -yFaZnHviblgR`-Icu#yVCbQJRN%2nMfDW}R}R8j5JA!&kNFb&-vdUk;kBp4t(L50)9`{NWKTPTXvbfu -|x`z45NfD;{R=jmJ{Cr3zemGd7+|NMY$R$k&8KobD878`tUaR%^lMDd<8AH}xFK9UiPi5dbu7esLHAl&M2m7`2tmXa%voj>Q-YLqA-bwKSe*$|(RT-9*_63Wc`Hl<*+lEbFVP9 -aZEGZd3f)-4Fj%qf!lcs~I8JRC=qsdC@FpGd(0A1bIygi3dI6`pq`#!(nyi^S8{B_k7_7y@5h08~v2a -1lcP#v6Fd{t1y>1@eD^E`{vccd~4MNrFz_LAza+##?>sK1G;6z~h>%#yHdKZ0asb{|k>jpYqED_NaK6 -E9Q*-*w@C>E~JLC1^4Sqxb|mlRZQg$}K_I@dhD{+Y+D}gyDuBLoiex;_>)V$akMA3ckYnR&bX( -v~6dC)vl{|Kd9brENNk`^o^ZlH*H8rdIzA}ympnmBK -%-ggC;yt>=F{gQ$f>B1{(51(}DRCX={Zx2O3f_Zlqko9Y1H8C#qK5mM!UzZ*`^9|i=MTT_o(}L?;Nuk -$t-WzA7y$=bX^SR+V=1oyI5V_Pmwsz$m+2S+kU(hvFnJS^C0?>Kx3F5*L1u2To$lv5KD3*x;Tv -Q*Xscl2L~_<#+j#MQz?jm+1IA=w2&Y -^$VSDQD#6^9wi6QN0&`mGuDO#FDZBwjqd5FO$&@yA^mbqZH7TARv#y+42vJ$h$+bvLNr_`7OsBsrWM_5nXYe|K6T -!1IICDagz%X8=FTp*S(N2wwZ={mO&;E{!Ss^pIeFfS?)7R0>-c>r5lF7Hc=A)01;U;(Rf8_$%;g!mY%Mn)(7hJaf(7=ubmLQ7i8EtFK;rRY;klM%Of_)TI!j-(c)L$c1A2Hwmcl1QF)$){5MRI9iXI~^!ahv5wh&nld0Gs<8z@MGROIXzad)Y=oka -IqApsiXc_Wp785O%LY8kUOJCq1wxIYUqf79<|onP+Wa#WeMw_lC!wYlp|t1#S@!zfhg7I#KEpyas9;n -#6VcGos$O-X%RVi~MmK@noT+b^lZfXP4*qdkqWB{iY-iU7c)>Ly|WdQ&(X6g^}(Knr)c`M#R^CGaqk5 -H6Gi$rnn|izT*T;V($d+RxAuoOZntmIKxyY1lkF?Cx>feo3%B@WS=HPW}Lg6JDVqMQlhBi|HlAInCAQ -V$oP8@(2~^)k5@B`^gtpbgxB*0gK$yG^V_q=KBF1A!%Y{f&n$f(e?Y-`bP4rObyb28`p3d -q6#0BNq*HO{EUfrF`^h|T6vP;jD)0Dvpryq+9L%`H2Mn+ZBO9?kdJF&=IT5qub?Zl$^C3yd`hYttJXg -f5K(x%urR_l98xLV2>$Z!)q-|-u|*A|92$N3@zfJ>Qf##V3NC4BLeFi2;hj577LX)5Bn0{2!PH*bXQw -W<5Zkd|tcxuje4fv`L7p`*`9k#&~^7|`Num`V;H(huiz$Fb;MNk(F)92tIkXeYL7fjC`0G4e3xaFZC3 -PMT75@x~p;5xeTyk6zKe7PCm^GTFaVFs{{*1y>o)iiHO{mMXQdWTUTXC`J%x_U1SnH89F3=(s-F8=wTWy -Z{%3;)~?|jA$-RosmMib@Ovqly3-DjFO>@0Ffc`qYiOh~yC{rJhSmoQk@IQgN9?)5@fR$PzyS4CkKl8 -GmurJ0A6V)J0Z6Ru%EeDc@WUsfddL-rHLHgvBw+|FJMh4f?i0aVa55rX^(2EU?aW5*m5!2pvmhD?g=P -o8awk5eyv33=1v2Ib~nRPcj3tP-u1IQ8N{CJxq#wpp!#7`tbiDFc!XRjWk3@Fm2I#UVahdF_Xx905~p -HpFBg69LD+;f6Jwv@)eb?CD`Fb+?y14nn%}i -2h0@?{plw+w85z_2?CuHGHFme#7@GjAMw7|8fq(i}iBSjc6 -iF$YWWT$uDO#rpeg$BLX_(0M<7%@VG{1)a57fK`vA+RXr7g7L&IgzZIIu(JKKt69Q_Z<;s67zKOMJnn)Ozu_wsD{qowM$c2 -(!s%ahuSFl4lMRAPg+r)CMjX`KSs~J$)xgS0WW5+a)EO$ -Hu+0tsxMt*5ZnxB4PtvPWayW}<=w3Ei^#}C)w>Is{xmTobb<3@27K9BJTX9#P*BRJ*sPXD5Nt>LtSdX -SV?vzd+zvABgK0;_nGSBANMxP0Jj^dlgvI1zVy@k`hvcIEuR2=Dc>fL@xn7?HeY-s5&My3j9jW%p+V^3OT8Lduhe6docV7h(IB1=!#<5zPU3URmGgq+f%kRz_G -)f2@CA7)c=8-l{4k#X^+(~>FfdO)#aQG#4=8j_rt`aA~d`wmmqLPXB0y*6*tt -2zJ#3{wVB=@L|0~V@l!dYqvH5?*IslTy-5ON8esbC5`gNRobN|Z+t9r>vXxcdQ9qH8tYMCWdYecZdI- -dp<}ct8iy=SBhHI%W!Gx3(2Q+lA7Ylo}f?l|w8R{%v^>L_pGb&76Ge86x&7jv@lx`K#E2+%_U)}2QqZ+!`Ldk*$){J;m -v3jV1Iym})eV+SCnO4M)mwXt`bsNX{kn)!j9P`wR?$tDL>I8QQApV7YF!CEFxZyRLygim;x}Dwwn240 -62qgXT_Dj&cws|}X0B+>DB&czE7$ZWbG7P7x#3A$r>+8euH6MU!K-yjNp2z53FY|BgyDdwn$A}%Qg7@ -YTL`WGfRA;5TCEvUZ>y<5GS3)VK9d5gh?zNgcM3_(&%bKNQ_uZvR*nZE9Y`811g99DW(Cn8y&KI7rCta{!DAb1L2t`C@-Q*;Yrnbk43mdxELayLas*G;>Qc@f`9TV=r#9VjLaFtL -KVa9j&(v+SG=PCip?Wdx9EpTO5YS%GfN)(u+Eu9Tm*slC%3St6sl=o`VWO1t!U14|QLEWpwx30Z3q`V -Dkw&sx?vcBwms>6eM!v5lsj{M2sUuKo0>^XmGLhM_{k=5+7c9f#>85lY2_8m; -lw3_+2k~oaIDM`v~Yr05y~Uj2qB_JZe~lW^f9p)s{3j+c7-IjU9ny-18XSYgsDzG%q^51~x8t7+hBC4 -xQF;FE2RR!a7*bILQ8JyH$Tb?*83=Nt?&@b+nkXE^V$ale3Acqy?5RRn)^K1NQX9sji*&NGdtugEMun -RSHiZj}ukEdsRM+bf&9`Q0^z|;qDB=+TNttoa*uf3Iy-<7~ShNoX0p$I_QW6>NtvM7j_8`O%rpaSsQ# -`mBPgIn;W(J?)XC8>ypO7Y{4E@gDAvAWD9_Td3OnFB$;f&5YyzKJ2)@Oc1`H6lYeXKUb|-i4s8L*kWi -mS70d>FAjO>Jr10I4K#*+0TDgF?F?~7D`iAbcz{Iwt9z_tT>;mfe)eS1M)6^@~zEm~%#6BU|2oU6OsB -#>=QA787O~qwM8a&U7Ai2WPSNNR@4|6ReBW1AqfTKAkm9+kBo=lAfdlJ?#MWjU1aT{K+pa7?1AWr`D$XakOHr19{F_vibNsDndeINw$E{obzewEz*J+t2**ZFF?yZ-_X5Y%D!(&5VY -y>*PXcfm~IV#$e5n01efHrZZ;Zog)HPDztiu2NcEGlF92Y=zSw+R2YZ^Qf!-|2=8%+hS=Ut7HcVdeKJPeVz -p+AYgu4GU-O*Pj?)aE7#^XSc^;!Kl3#-K&;peBVGl5NzhUvicwC^>$mY&H)GthfyJNAn#H8IA>j9i}I -ky(oD~$~N5g4BacyERUvsM<-aBg~D8;ZMR6sd#XajARQW%AQ_b@)31f8;B~hbzXZOoz|1$-A)`mRJwq -0^BI*S+*P$YRr=nF4ltc^)EM`|oD1C(VkbP7bLG?yzFvFnU6cwzb={uAK7o=3dIVtXS(^+07Vyd}Rna -XzR#V?_bYQ|G-1dc#EEGm5ys^rXku<$5{z*00K)E@RZo&@pcHP&74_Diap$eY$&rH5;}QhV1tQJ|*}b -HWCvS|yi-or*joGb*@sHeKB-SZ$sycv#2L&A*P$XPQ43WSvH}Xl~JFniq?uXmcB5J%9@^%z-j?-U0{*N(Z$o3>~C?W6pONcDr+ySS(WZqo4k%|rswWagW}9QI+F3JaZPqAErk!60V?f?r!-qH -VD;I#22B;6QFwV=sEwa7xg8|rd;QV2HUZJ?oPlKuzN~f`n4P_jT-*9QLa)38dhW~``upn5>NO&f`fEn -l_JGERT~nzjdC*(fvQJgXK_QzP$+X416Y@%f9U95n`tY~>nX0nrX}4u2N&86Mc|>UO%)GnwB25zU+*l -_MXqtzyZw?XX;D=#84Jr-Y@H4FUlCFh(iu#p-ubCoGgCBU^Ewk;zE+Q5{`;_q -is*D%Axa)-SNCvBqPnOQ8LogFh(l=#OWj+P0wn(L -PZltgUetU6v;U?=jy2!-D^>MXpRz-Q;s{q)9Z4nRrgd+rKxy!MFk^7T$O4hS}6dk-RIe`=VZq%EP$q~ ->xrM#LP-bU*(va>4kHN`vpm&KBlti1d5M1q{@~2>UeRO~$kM6;mcX^?4d|kpo@M_~!HbO|T^QaFXXE5 -14dM*Q?|wjE!kXIPayZ_RWx?gf=mzDH>!usJxitc^qHo2P)TZnwl+Vegx4Yh$*Y(lsm+wD##N|hy{pI -=Hk01Wb%K-lL{QB*`^PY&eyx8D+_2$F#yXXBo-mvh^^M~iJJ(vFbAKrcc_WkoyRmcvn*3ylGWE}_`im -FS`UMSiZjv#<22wb(mi-=+ATpARFxJ4Md}X3^Ak;*j5<#roWDOHdv>F)M&u52aZnw -_+ZEbF-NdcH4q*M?1Dg`u{%FlM1l-qK#7M(B2({nZUTb4^dRV`}V+ddqRTYg(sBCH22!BV0@ElzqF+V~4fDxHg+l;Eh -{$b~SJs2C~$K&a5>zO#xO2kU$g`)e6pG8XfU$a|6UW6synd-FaqC*{IT(F6!W{8tG3v!=HF-oDflUk~ -SUjY#UOcF?=5pMF{g?MS74}!&^;mt&I3X`;fTL}_tK^Cm -lBa`+sOgCAo;kMj+ULc+gi1UshC7@UX9x$4Us68cuC?oKsJMw^*CvHzZ8(eT8rr6^)M;zA?&qi~1L-% -7UH~0WkP-?Bq@X=MefNbLmSxV24IpT9h#GPB~1g*TpV%Ll9fG!Ew7W}~=EbgADfo~Rga2*|1Cm$EhUc -#6-BFzPs`L^z04e@L=Cjuk01ePs#BjB_)I>QHV{)<)u1vtdcZ0OQ_hA?+h0U7_U7m+K`Z#1h!U62l=E -hj+_9Tx7}h3x3*TRwb{ZoS-fSoz)F!MI81rr%Y*!}E4qHPDsRBE8Vb(zN3ELIpgmhz)QscF|4*boVdL -4H@)a6ob0pD<>P;7=&#nOCvX_GM8si2C8iQSIj_z0_`w -?frH;5sXDrs=1CUqkR$Zl?gvf}!f$N&#ewG(coU)d#yWQsBV+)&9s^c4G_Q)Iv7Le0?0F99=!$1)R$% -oS7B)0s&BsmubfL!hOj~Xs%fC!RINY$|kixCq_6+fCSBp1o0!DDUrAdC%Q*a(0>_e1{!=Y0!Rjy*dbp -LVu0{r$oNfdmuEn>`w08FcA{7;19Kg_;1eT~_jC>;k> -q|>#1LQb@f=;m56?7S-3^_q;R#|s@@k^Qy#QSPU9EPDuI`1*sP=C=hYL2RH)9SLc694toG+_1b!-+fM -**1M&!ti5CYX6ph(&x)n)jzG=Z+GPwq!7doo*miGp>G}WY*+W<=@n?^0wHCn2Q&RgZYa81VSGdd9=l?$Iy|Fi{9>j&@Yi8o_7DY%FeKD9>l^@8kJ3LZb=U)5^5T`w@yS6;IgCXFDnT --V{m!Q^moEh#M?cL(vi4&g1Ab2~Ftl)-_;_wT7jb*rt`A>Sa^U5(O90TlVzI*6K*wXBxM0JZwRs0 -dmCDOGz6DU;BoX4-U>8kv1z7rcEOID6`T-jrHp%<&AOS+~AQ%tA#?a9;c!4JG+3)_{eo1%Eo&#lU!n8 -^xQ-mjMPOhlEd$IW#3HP%juZfd9!vRR4cn8CXXQK;Um3np*F%?RRfP9ZGJREWFzcjs8R0y;REEKF5VFMbKCz(6_?NXG)=F(6`sN -H@@A1~U6#*HetM4q@EsG%`&AZyV%^dmi#>AfD~+N}$h@Hk3nZFdUyvktkaz7Qx5Hg7Ncsi2x`0>?Na1j=sj3+EYlV@~ICh6uWbO7cl6sNDLFu;0LeyawU}MOpclT9woitn>R|(SRF?` -@7PUaO^dmif{;9CrD?Bik;Apcv~UZ(KyEh@Nct`{DHGSt|Z{=|gb>kx0p+U>=`@z4}DRrY@T2gvkch_ -(34if9p&V>q`5s698t^RXZ9aYH=Y(GHR}-oNstM~;W1<-eHGu6c*b!i$Al4?Ma~7Pq34hc9JD$EjDp# -P$+wK@|p^T(Fm`GRrFDPdoj4zU5FU0gyfjV@U?$p`7E8^t>2r_k*4aYsv5p2TOD8?+IR(PDfA&&!D2v -U0v+qQUk(j-N+jDeh%B=rBc)j-ME~`RK)%@W6+_mlGaB55)HZu$<-aTSfHHhuJcMw))4{mDxh62yEaG -+qut>LFs|;}NdL4Dy+pW?j+=;I`q~aMh;!!O{eXD3b@v)+v^6;dD(5Ub{-u&a?}AiZJBJYB?}SKZ@Xi -T?u&?*#yrFm&Bi{)4(f;Da;cdB-4HpV7spF;uo3q_TJBJ+b4wt9qG*o=kU%ZyqWlf9s(`aEncDk**4lQDC!Bgef)*E!%)14*xI|&+@B4tI%)`ngS($PYRVUoQQOgEH} -*T^z}fbrOr7B55HweiM!tIm$ZIvEZF=314}1+S}&=sAgm2Vbi*Ix6%r|TM8Odbi@kaL9p2$WlGL9H7$ -?G@N}dV}>jA)VTvU%a;R`&k5X8D)kXLAI;y!$TcxWtX^dLJMWWgdFx3Do>lvof9gmUe}(9y}M0d*};? -oXr7=Dgvdu_64@S!q*6mlbhCAKb^aS;W{{T}Z!>$&;7E0=9b3W5lyfs#rEI^pB<}@H2p7cuz=}=O=z) -y-ZwOoj4cQn&a;vo(=QL2mY>aLK24zLMJ42U}-`|<`6Hqe6TN}s0aGG8ph<~?gzxPP#Pie;>Hor9+NV -cb1@Vm4hW}Oy3xm@70yri7Do)`q~_sEc)7|`Kz9U0MjQ@fieLYvUYH94tANdDdI69SaME1--Q>a@&L( -kQuCnWeCc`TWBKz)EeGaD#bFm73!qu7}nFuWih$D5nNXTNJ;`GBw+VFA}>ZMBDD|4Z#&`=2p)V47lkx -86b!f3@YnwH=;=O=W_NrDW;vj&2YSRpOK>e@Z}+AxA(pnC{5E@z|;8IBNZZ#So*OQM^dM+DEyRd#zFw -==!{7o-%k_w4ec8wwnuZdj`mgVzwO_`&kr -Fiqi_dncL3IW%_qK>psQ(l-1k!y|nrHww@5Ex&W1n5L5YGlPwQ`6~FkOS`+6j3(+Uo9Uh -T4@^90jarTZlhyjr;ns5#(z3MV-1^`F@oY?0(cupWCczIIV -mfUL6m@|bqd#;p06Pi4;MkN-Q~Sej&u90z!Iw-o6NVpCCGNyS=b-y1?gU-yMwF@R0ANX)$2pvH+0*>w -ja72wTs$vmCl7+;Sr$uUbJ`zW>x-@;LZMy`PdnD=p-`u*59X91<6}>Y)Y%c! -W-{4(#;S1|DaV7cW=AkD?Bo2<&7(APPU@`2=A4G~CeHa6Y3-;s6jA-v8co&C6AG|6*uBUauk_Ys1k!F -@1qH;c_+38h%SR+TDaPQ;y6M*qz56A0wXa`VVYqZH6b)+3u{I4x{zbKP$f1q83eek+P}B| -i+Hw%UF$pZa2;T^o5j-xvY_E%cNo3UcV+4X!C`0yQ40rRl3wq)5bqAeV{dU9mfE16t*-cl#yX_dz -UA4j7IgdhX#s5&sXr<*vhu=x(zyxWfP?5H5CS{{51Y;i0iCN`aUolvAXy4Pf1J=g0EEOm5?rCXER>kd -8&^DqZ8Grs$<}m>e%x+4HR#h0t5JylS)?qs4=Fe@{*$ygwc94Y>_8X!xQ-klFh=l#G|FJXOy*)0bx-R -`_y*-g27coy -?QCWDI$pp~mlb-BUN*uUaeP#{c52N^@B1ZDZGCm!PED!aYu4`?7}mXv$fkdtK&Qo=!YEJ*u?IZ{%UO| -Q@lqnS83;noko!^>6h`zVh055wHxQevIYs1hd$?muAb0}e3Y?_xP__%ucukSl#2yUxp1c6(XGr6o9_J -&B6*VVtwaD2Y6iptB>kNy5K0#FMb&6pLfF0B2 -@_{qe_OFS_4rSLCr!$kC;^7AJ*tbD6;l=R5)qjwhsWH+dY*VS9-8guVg{jZ(x8sPm=1~$ic6U%RSxQq8wppsML*a| -zo5z?TF$s3o=wj5&4+Mec;fsEo=Hf;*y^D?&Vi18OM8PVgZ2jX2KSG<-tCvC0j+)U6lBE`EW*wvq|OWCsgkF`1bzfcSk&nUTxRQgk+ -3baf_zY6}!riaV`-pqC=bSkm2Eo=c~V2jZGz&PiX%$rpLQbP1u=w(CC2q -`0vMcBv9X+Q+_fPJHx999Fwzv6(e^SBWH4xoAB{5Z!sZR2yNzx_BAM|P=d&Cx5xmD@|*^*AnF$B -dx?eNt|OSb=OsOPwejA3s<(IUWEXD#zvyk2H6(vto-wfQIa!bp^}$pDSWZm(DgLGOcuspZ}M0(p7Ut~ -)vGU%%kFgx#V!1TT*xf=BqV>vbEIW4in)Ywxlj@Pr*pCJc$)EUM$NHY8MA_X{V7%l^3Q-F``uhfH&c# -RGG2<;+XCGC$lc2Cy`s?yuE~7NILfQzDxIJ#itz3+kowbi{~@RU-Cdbjfg0JIacF^l77cl$d#blG$KPR_}*UT*u_&Ev>vVP1;4K^uK8_B0dh{ORi -F(V5n}Te-AFSS9F%tmn{8)Bzi3z{Jc4BD5sDPl9?>v6L)aDxWd8uyKUTN%&h4QTBC8c$?F|=w6e^wtF -4}9&QrCCN5voU1Kq7WJ~+9w&L)x$YFH}C-cNIzV7E9H+8STuPT2eT4@BS={$Cz_$&!Q($iegIwX#CCn -Rkij|1JG?&s_$&r3f2sS~8u@MSd2qh)(NpMxpyVGG2pi3^qZFNxQJmWB)L+7#^G^^6<3*Tiw*_(FbfV -;BXN8?1j~W)lON7{*Q*+)-k5q!+0PVGbsfsK)KDqkB!^w|sD8H5~8ZKy`~#<=Id`ak!^(=8vubE$RM* -r@8Gfy4SwW@4Z+hd{FpP3(#VTTzf_z2^nG*H+KG08Yi0%WGi8K)x^fW8rH+tP`J -S6`8}@C{euws5&oCBPsdR6j~9EceE$nr4W@TTXU$5MhoolHZ;o<;yv!1srE29#KXRI<|O`h|6)=RCM1 -dLBoUnCZ~IWGih1#{_37hkw(zUr1p1J#!T3nI)}sp|5BJoO!n7&|g|6yCr{<~BLahC?cZja)XGo2pS+ -t_MDfJvqLB4E{TcsVCStK?I)DuXyu;qA9Rc1;kfU^Stw|mjQ!^vFj>4RT%ul?X>YQyo|1lLQ>X>g%U44tC%iU>9_PglNm`+hY86hd384Ll7HIm -1t!SP6Zv^Iw|3E6O_vKyL!YFwb2yYlah@p76PQmb^bs{+Ptgt`| -e2k{t3T5s{}mEMRc5+2-UoyUZl1W?E!vYk!LknOu4(sxx@2YsLZz<&` -WpNh!+65=)8{b>VnaBRLWW^|Cxz5_UN>ZOmI19IfpS|rdNA}*W#fbl^zoT{Xk*2dZElu#AB{N1rT>Rz -#bsbm@oFVUwa3e;>`7IpkO9o`Vl{u2ulv-HSEce&GLnhrt-{MC3b#bcmEBbenjt;*mn?w7XG2Xif9XpQ?n4&gRjC)Mf -`!#h;^+a>6BL&%Vx`ePBN3gX^cv~TMyyypbYB0Alvmz)9OzIE1IK-a2f;QcNsNT_OKF*N5=r{FozECD -SB`E={EVfT#iiG~AMi`;c2@qRqmt*#Q%ChPr)%;ryggrF1u2G%F%e5NPpm#CyxhDIy4OVEkczzxY|tb -mB7~-^(~UtjjNNYyPY}(e-=gk0JVx-GGQOwTpK{{P^c%$^tSZKghFpgldE!k1l<7G)qq{n!r5@ -CFbeiTBq(kLkXi9a5vUigx3HqYHE_#pi}q{Xe=Z?ThvN5iv_^jLkD8x9L9$d2cg_u(H9MY~=c13@;%3>>AFX(sREbZha>84gAbFDEJj1@=iOfT62u -T)uh)El;SpvlyNCS_kGwNlvN&kr^cf|gMVY1pZ!mrMsPxd-B~}3^GQFrIrF>fZ4iA@}ZImVdSF>--d60c)d-gfvCs<+N~k3=psd9*JSF=TZ!N+1EKlm|%J1f%VY93PaOnH -r2qB??}TVqQP$FLw6tEvrf}h7(c@!74mrwK_ODzb|CS3QjNzsYF18%TJP^Aq@tqOo+#3>pNqy -N4e{TFTu4>eEA&byX1n6t3Ig@3C_CpZtxtJ8fu4JP2yaqUi7GUz3?SNCv@3m+(BE5-*w(nCO6K+C1IR -;miULMFNhyC%>3X&<*kb+-g+7jwGMLnjuDHI-pe>PJSYj0nI^?fW1SzG=xJ@f>(OGzPNI9wp(ly~Vck -sEO;)gE1xr^j)|^4|DLoXO%xtnYNr9Ej913`@1P~j%_PLKF6?sZ_PL#-dnVazQy9# -*vzvr28`ON02yoV}Dwdd}o9CpyzH;&`I -@!(vl8O2_;A;ZP&-qk>Uhyzt1 -X}@&=f`s>atJp*0&M4Kr*iQ$5a~mhgr=CaP{X0@RZi!42E(#XmEng3f!Gb42W&NW2qOccSG^#oKODkY -qx<-H7osoXp;)-SxtkKpH3fSsKrquE9e{-{Pvbhd?gTVW$%8VUO%NJCuk4o?+}4?d}J3ukuldtlM;;^ -ypZ&GB)K&-{P_2&|6n2-Ob=gYJiQ^7g52a#Fn?BpW#u%V#WRi$gyn|Afh%3$gSJPHt+ -S#{M)3C=HSsI>4h8OIO%AHGss5u$4;Vq9prBl)p(*BPqgA}jN<~qNH3jt6@@>+Si0MQ4suftY-=}fnzua* -{Sq<{2;YY1OiDSz9VF`V?s*XpTf_>QW+|8Vr{!p5gtI!3)*tN-sgN6w=q&o> -uG01?8hdUr1enAP)n&ocq_DhBdFU0AIETX-Pa9Q!T^>iI0~o8i~$)JhTRfj{>#3UhE&r^F(K!>ESOP?89_LXP$6yDf5(ztNX-$P=Ke%Ufs8DC~N1W>62MJM3i85q=EPH -64mJ5ojcejB(@$c#-ZbBafblFf#R8?zk{Lzoh!H#r-{Zz^IUo&J=NC1al$Xo-#7ae|c+W2#);Yyrhrr -+3igSipGQ$QLiV!I9G5J+}y!pp9C~bufb_8bK<%C(sX(9Ej;+PlR@7H0C0!112Fv+)azo5&QEBdFKcn -r3X3N(bEeZo+}!p7-D~Rg>K*!48>U~^{Ybl(-DYv3HsneVrUdaLUO-MEPE%PMbDsSo+~lc;@5$0C5a2 -a~7oJp0j45kO#AK%C)L{u{jc@krzCJM$x!I-EObDn+U{D0TWWI|4u$ -o>*(U!vtp#CwTkFHz|wD!oLJm*y*_?x5Y0KtGL3?|tL^f7i?Ujs7c9eI=rZYHi(Iv=b77Q(<8g-L25_g`L|39VFl}TK)wooexS&#1SCzJ#*@bL+up7P*u-YJm{bDfgb&?hM!4HKR6&vMP{_IJ>|rVK02U -qU%1j7aK`K^&%}pEMl|UBbqt#2O@8N}@@M$#bpS-$D1vg-<96U?6W&nGoDeDqw(?N$D0T6*&|Fij?|* -@JJbhb@JU4-7A+Dlc0VQwok(ANoYKYg(rdQB;K4vnUnZ&67fwUxk-#RiOeSP*nFIIexiHj!Y7n0lq{6 -2l&qAjl&qAjl&svVQle6#Qle6#QR46q6WuEpKA~izWTRxGWTRxGWTRxKWanO;5}gvA5}gvA5{Flw=w7 -+-2_*+52PFq32PFq32PFq32lpD37?cP~1SNtJhbNfmUb*lIC4-Vd$)IFVGAWsqOiCvAN=hUpk`hUYq( -t81HW{}`$w|pc$w|pc$w|pc$w|pc$;rJIB^D(XB^D(XCDuJ|i*Z|&T$Egt+*p}t<0jg;i8gMch?}T;C -c2f0V>1SCzJ#$NS -G!PripNAB3GIyl_pB1iBf4IPMYYFCc31F5NV=8n)T?xC%RWId_qaEg4AfDGMc0gCSszAOlTq#n#hDED -wv4`WupF=WaTHx+gT6qInljx;S)-N71)7EbTx^jCQ6=(l4qjinJ9TCN}h>yXCmF1NOvY`ommgBG10wp -*`I(F6d4mS#zb5((LYQi4HL1#L}M_~6HJonlT7v`3p`2oPI9^P*4a#SuUzN(PtV2K>Cy4|^|5$)c5(Dq@kHHcvuEOFrNl*3-j`Le7Dx3$iLw=M>;Em+>q39u -Y<5*SFS@!B^L44JPRwE%b8CtUJ|gTFCJA`8#o@T0K+oT2-pitGV3Wt;@M?d{)j?)hbc6Vr$CU6 --nyEOyt^4M4Z&R`(C;~303OrX6(rs2Mx^rKj7Z8T_kFew6B=|YrM --|b4vUVqRX>V-aNScy9&cCA|O){*W(*A>5<-n_YZcOwqZ--}-kudWWyZ{Gi;>uO2st6G1yr*gB^5L^h -os-~#AM?G=f!Q11jqc^(6;mgyr)0_8Z_9v$|=f~IA;^g8=9E!`stDDoKcV~xJ;_}_q<;C^!fe_b9LBv -LwQ$qG4Ug|D4wU*>Ubw#;u?b6?C^|pF~>xEbqpOsegT$LJ8qR=L?ef%aJuIuW)U$1UL0{uypOHtKbBp -#YlV@IQJq+Q($={M4#pC3dbm%36>eOhZ3Tb7wrW&B*Gu@vInwJv$;p -Ey2$^_8UZY&Kgq^+p`b>&@1vebd{{LsM*T>t->Voxgi~dvS7mba-?8`r_)ncp?6K_UhvN=Jv1W7r*Fl -&*kj+{Nml~H@8>EXSX+Ru8yzYT%5hqS7aQ|-X8wXRJp!zdVcy=cm3+{<}kRL&45(>e^oZceNh!6c|Kn -ijcC>1cdD9e=@xfu4SplxYPY%5`qI)<#e5~^N`tmh+eULnrMaW*dRyGpCzn(ZY~razjW)c?-fdEwlChG^3CpyyFFPySGBXqXEpqs+a{Ss?Vkc_mp1U8rj=Yzsl}+AD4Dy21AUo8{y)5u8bH8OTf -2*h1$=JNxUX#8)N!0e3_dmAOynBiMzkk_@5;pNUcTyWmj%1p-SI#7zJ6YsCeshLG>9LsklH84uN8Cn8 -XBMN9WAwMa{@oaj38N&<*h?tsk(Bgnl3v1gz0%17D>v`Z1IgVYP4?)s?}_^y_x0@v7+-pcLKg|x;a`u -@f0Jwpqhxu~bEtH`!KZ0N$d!y!Z424IGRLy9Yh~@->Pz}%Ko3dZN66!ZdRt-^-(ytziqwD`4HQboglk -v;2tV<}LL_7ROWdMj51Yg<%EH4cI%Wom+4PXI66G8^v^=brTRTZKbJuexe@rm-*Wkn8&r&y?bTk5IoX -la=dL{{srVP-a<}6Te7W}}aO4q3zkXPk;t1#<4?cm|vLTO>UGkkKx(8k$ -MN&E9Q9Gb?rP56hI^gmJ?SS@aN5P{2#G@&9q1@Le-g^1aKoy0}NrbHi{mvZ1tzO`hh=!!ccj%cYdP1} -i`_hzx5}K&=19Oi&!KXJEiHAdIA2JG=SHhUEqC7%S$8jiom0 -DQmtP_fffYoqgoH(45XQItr>OZHxHup@4xB8e%G>nai%DH(-Z@*Z3!c>X)D2!O40lwi&g3p|`s3+nP0 -51(wI-Eyy&!fbr3F88IDdGqCEV`aMZ=d>iEQN>(7EW44iVRjGiARTlGl(~Flau~8%EApq;=*TyFBpXQ -6cJX;g_jpQ2MsOTxoibX($Pk?!eGrdQ6h8FRi7yQ -?M;Ii@#U5KSdJ3IXEAgV?Er;`w#G^xoi=9Ub-9fmsk`4}-vfXwM4URJ@?G2=p?euGOg%S`v2{24R@a! -7j@^R&oA;GV34=z0w@jMnn9&Sv0OO6?3L(fF(A&F7|E2A;dU{A%vGy({@O)e*b6tOAS0l8I1gUFP~0Y -zB(AcGlCNSAM&iF6vn9>R}K)(MDK$WKcMP@QwmFa-11k4o{X75;H#>f@H}ifQ@;`qiD~nFTs)0BKac7l}f)Xvi$y4NX- -y=*Ka#V5?qP-J;r~FD1j1;pab7Et6?!pZiJajTB8wP|xELkewnEZ3k0Hj{C45ct8vOJK-Fwy}{(cL@{ -J0kP?`nCp3B_`*#kK`zm~dkXH&??%F7Y1Td0LY8-vkPtP2pC~f9yoLkCSXztb=@iKj#2FR46c5*}RRJj#=dq3SsVC~+$T8Nx7#@L_^6>p6shZ5t*xDN-Y23J9N@PM9C1j57i@$|i -BEmyz_q;DOyxzM-#5f@ScDa=u_zAI9(FT@=2{QJL*(oc{i{7auzv^)fIf%H@;UBn%j&X2K`3OyLb4eg -hIFNr9qdZ8+rM>#Y|=)|yFFvWixzHd2zF(eQ9V<{Q(k1&YLxsvuvVM5O4k?6Qb64NoU!UL1C$G*mrT< -#1>Hw59&zTHp2>XAk0Gm`ACVjL8Jjq?n2niHL}-*9IgpD6n%~C -Z4;1iSKlkZzM8+59@UfG}?R0D!C$f1&Pl(;a`<^`1pk0q-OBrsW$&pC**;)X$h6Jd@x8zIAh7%>4=WI -xuj3h!r7D(ov3G$HaGn{D{ijZ8%EJ0PFF1)K9-(n1h7>0Y4HI1FBQ-3XqXj_s;l%JkTjpMP*@r_JMbk -GhfyJ=$TYoSx;u;~TgQ4!00KB|;mLsjUdafqnhpxhL+%crq*WHJ}tIZhV)6(hjuqB -rZsqr097lFb+?<6R{2UOxTXV9KxJENfv8Q{6Zi*+R_0kaKOa1Bv;x*67;ZPM3gWJoQFBmrz53lJ`I`k -DewL*uK?L$0)lRs5Jo6!luYHYVgzK^Z-z?)9VJYPaEs)-(kPr->UF}LO6ZyL(GaLk2nttA55W+^;t2W -qFYQ8kI5U)ZGOEEMe0V0{1cXC@o0YH(p8+F#Nj88c>V~SNkIqLmghzA$ -QxyhbD!5EUr%@RW49ds=Z2odOiT#U_)Z)Hxg}ZBXI}PeDR<2-@uklz@=``0@78&(NJ;iY@VM1b3vg1^ja -2k;lNqqnYoQjXgcl>8#1rwKN!rHoA}=4CpB_qytgJtQY=D#?ccu33`rme2bBu&j;nl0W+i#X9*b*{|= -vJ9^MNLdDJeH@o2bb;`9{WZ=z|C3&7nCP!qTiY)s4%CeVg~Gj1{RnAZZ#sD6Joo3D$u6+ai-qEfAL=i -CmfV*S{b?T<5||1H!~+}@T|+1=jmwQ9ZGx8>%a`Fdc^&~;&gT#D4Q8MRzb-c0wbE1g5PuYZ5QD>uZ0vF=w17Hs -_t^FQ&UZ~?4ou(emP>P*ur+5n`}2iVtzMerqN}1Q=6Zq=>+L~_N~wi8^!cf(AH+)kY|JTK)2=ne?Wb~ -U#;MF{Lp#WD`sccboBCQ;G$#|!cN-(gVWl%Y8*}-hF^7=N@k=wlIow_MC3=qAMtv^pUE5EUP4aYU53D -ZN#l2aeR;8KQO|w&xIW4Q^=2&WfFu1OiIr*#=P|er7{_OFpXjxx(N>zG=3pJeIE7SCaI4RbxBHS$X(t -6lLqIkJ8?`NuF5YpOU?Wx@SYgD&usu>&Htk&sC3;tf~Nzd78s4=JB)gtO=&y=O-`Y2j$3q}Y1@!)Qyz -v#jEqWV7D197VHP_&BFZx&TIqI;-4U@R;+S~#+61H(?s^`S?;)=h|s9xfIzsB4d1`x&#|%vyT<==tbb -Sxl`|qYi}lMfJzl=c~GI`$NZWv~E@Vs)6Pn%=y?}Iz1QIMUtHA-p+c7(jv^U@3u5o3cg6+s6Qxf>}6A -YQev~yHoPc}WQ^5D=Ae6Pj)On;tJs#+J?o{1d#7SRkN%cEy=k$AOLC1J!M -9|(!;9M+)#=?_wWl*)>}{1PeflsZ}+OZ?XT<^*nTK~EX99`!r)die%Eh?q9^{IQaA+Y#_%chNPaXde^Ap) -0bxJ9m9w4*!PF2<$wIpi|OOX>9swfgT4(Bo+hPRRn@!u)$O9_ilNK2oHik#siX9)R}Du^$;)zK3~Sga -9h?8#&T-a*W<5hO#d^Loe-J`YYt3?f7};;91i0<8{^n -@?f?8hC>d+0t7DJMgI-QzPdt-t>hdOtaQqW34bc&NOi%OBF@yDy-TrX_iF;>2tMR -m-==4RrjkS#UXN0r&FT*VZM&{#)(ItHrdm<M3Kaa<9H)-vv}U0mBkdvd;C%5=e^dvbDT|?mA__< ->-gQ#&zIkBUB3@#k1%%(%pFc5{^a;80Ik-#>ru}qPc=+`x4_g=$~-cyz{bc-zaE)~@+*<~%AK+Lys4Y`4zkJKwoA+8@Pi(OYyPPUd0aCKLT*9UKeoXw^%(JQ_ -q_LD?hkZd6?bfNRFdQnGmkfmiFU#}46>*CEGR)qK%O}hh$uyrE`G^!=-+3H_~wC@R_Oxa5b9Fr_l4o`!|5k+q6;7uA9 -Sj7M038nPU1O~PvW^w3oW8TENQK{vrHWkkjpg?ag@P)#qK+yW85d-Uv*w!MW`KVysa(z0=a%2m4qMJT -$17&fPN4OvXL9jon8uTqze(JmDxLRj}I`2K)<1^#I+WyLf@08AF*F8ZpG=DChhQ6fT%EFYef!z4>@t9Y -Se34JHx8B|!=TeZ5?z^Kuo{C0dzoOkV4XRB-k!%NLcR+7kgfc}DmS3?%gVav4MND!NYe -UNtAulk~s|H>axKKc(f -J6ldESTWh#Wlq>tISLh6u7}`zy)!jP!i(A15hdnaS3s7r4-~8dm+?9sD)4qX$`!L=pFLmv@#RH3`7M)1w_OMvEsHEfl8{-5q$>jV}OS#F@gzFtxS<#P?@jX?p8$ZU;9!_0)1=>m-vC!l#mHAL^AendggXHY+;+L2YYn? -55mH-Y!Y^EOYmzoyb(Q|X7NQhUm@$BU#fvSGxSsYGqD3tlEf8L7#t&ZXR~M@nl7wMS1gm8R7c;uA)*2a4Fht(Pg}LSio*60LiZ -)BOZMF9N^TK?>cvM0$b}d5c#>-jf!}wxgFvl`8G6Y<1VN3UpM%GIo0n&-4`cY>BN%30t!u;-kgDiaO` --=8s4dre>cDueW0xI%)Ea>r;y^wZf$X4hztppEIKx^U8lRf-O1V{jV4fGe#uK! -n%<9VpA+?+4$PJ4#IW*+g)0JGYI4+4#FOvTX4{>0sGGJY}E^W@orrQ28~>EFMTr+6br3`Ksug&uoCT- -QAcV}gliOP9ldmh?o0N9jWldLOLkW^sBA9`>`c$<#&$Los|mLkUak&;HRta1GxbM`CM&Axl1H+z$!Gi -J*=+Z}f;9r(8R{_(`a5p`fnvUR{E{&fG~H3x3J>pP>R{6eK{oy9&V`Lrc{~2sA+)CupTCm%w}&qG{h5 -{6K~V3yX74pSQH`MM{RKE+-Dsm$?6;W$b`scW^k^?Up$-g!(6{xc8ecpsJtS_Q@qsMx^AGQHPyN*321-{vtZ6z99H -B+AQ%|YH$We@dM$$htEI`hExo{d^E<2INdmz9+|3fW=C|L9tiX!|hm1Lo0^XXi7gSgqZ7ih1KrY;bT!+{#df1A7WJCo|RY#aE< -nbHlQrn9sgEv`1=_1($=66{+DsF-&e@tvTTSc92v&_TxPKy5(4eY?hc5V%CS^I)J3-1;{N0^hB__DF5jf$ -0Tz+Ht612Z7l^SRL@GY`1!z1&*M1BH4LlOoq%`d#u#&9zRAYCg#ovp48S@w+m)JRvl&jU9mNWKsl;GO -UT90gMcTH4^!^d{%^}Q@)D;s!#wXX>q9nSxm{^$*5mQHRo}NeyOpp;z^lGZXa8{RsRNfTH+}qDPZqjW -zTL~1@i<*P=dS3MS?E)+l=dNLP31Zvp58Cz5Ru+m%*$I4}o6J7to2*|;-t$bs{_&A0pN?9O) -Amo1;|N^E68b`W&yefW?k?SHbmFE{E(5QHt>+Z?!O7S06gMmJjNyTJ@1a3@fE_PKM|E%`ME-5TK8=uX -5Q4(gj>>vkXHzP0E7)yB`nF5?__eW6zU2;ei8svtmT7#RI;(@>7vE&M8{hN)oA<^%Y1%xWV4h9* -wWppoWVQyz*d2(rNY-wX{Z)9a`E^vA6TWwF=Iu`z(UtwLeYAdCz?T~qCw -I3)KdQo}PKvnhAD$E3kIwW(G&|Y@6|9zj6#Ic=t2Byqas|q4R;v65Jm*+fohRN2J`-i>Te}8zwjt=+s -PtNz*yQ9;+4{V9-mbb+&Zen(tC)Y_D&DmZyi&;{z-NY_VzAKrcs&YY&uWkv}9ArYJ54rJC5=%>@1mI=gBR5&0t~4%8Z@emp -573_>WM{lgm8H?SNGI)m(Ji0SzX5YZ -J}cL{^TP&iVIlE-p6U2!<)0a%Xu=z;G<+3r$x-7f-R`8xY3b1AVba@L)bwE^;LA=vN*wgn)_><7wBPf -Td3I@jXp!JUq&U_k8Cbz;42t?&*sQRu10P9xyOYW8$;IclkVT|%7x}9-CASMeaK_+O9;M|y42Oc_{mI@R7_s~A@aXX3Gg*IdcyY3Se$E -a~Cv2CU?M^NZ_dXu&PT1MU$=T`o{x)OhajZg2!E^<=4e=FJ-e!p8EH0yDUevCCMtTbvIG?eb=xdBLPv -ZoLVi8JYalcj$=UIAP`HLYspl?}n#nP)5Fp02_TbR-$mCkVLhHxrQJk%G$kAzM~g)Q -w=bg0dHlws0h52z?ThR*M>*g=`xkrZ$uRUE*LIxejKNL5h8lMxHG-l -aP~;ld@7Xh8hWR32{j=fSAM(i6N5CF(kl{07C+(4j>yqHh}5?a>1}t6G2S?@c`mG5Z{3~k}r{biR4Qp -Un2Pu$(KmJMDit)FOhtOB~o*V5KGdCOBl&u0TXl!#zHmLQ1p@i$QrC>aF{WYA!n!%M5Sg5HSnDY5~bv -kN}LNChK5)%#DpOxKs*{`1Nuwqp{jx33~B&3Mn1v`2KX^J#^3-WgW(XP^4lRyVL0N!c1Rxg5ib_hYGS -AfNQ{QiOb|zm7=a$hW&uGF;sd(I-;kz51F`{KV2f93uDJKg^S&jiK-8Yu=$Vav7B+e^4_OSfF8dJecn -|STMQba#$7^dmXzIGH^Fdvdt7;t9c>T%_YH}dbpehcVil%C&N~emaDkp;3Aqy1eRpd0*yhnsZB(;k31 -X<8!x}YITB2i*BVmV?sf-^B6F<`}d!-^@1U9gQ#((svFp2_8zTv~E@=7ySJYZCpQ&0ScL%WX8>yU+2I -olKt@=9ytO#V|j``!mP;)IGIekesLhBiL*uWfwQx_I -d92FPQ9MwbEd@e#%M@2?-NA*I6Q}I#7Hay{(M4@=1Dy#~RI~6~6d84Y-0k8POTSg#NDOV(-iNwVtURC -eJyj1hVzEtOW3ftjx-2&WiZYy -EvW3#T#UZ{{#J3NnVryhcxevhuebz7y7>7a>o>q+d(iI)BQZgZSz+3!?y+ELHE=6Ix3T|u`R;4Ip-KZ -xhsk!N{^!Sy0(|-kNd#`2QXrs*MDWxfWn7{n+LCkse|K?N`Z6^kj*fcm9-66WVvr1(&uX)tpzR{mRlg -3h-}6J9noc>Tb3!*uiFB#ehik)u$BelDOoVJ))^7Li9D4j-rle0Uo#7?*m!-P%^9WPZ4F;xfO%~sy6! -%*n4}d0ZPTMI5RbD!Azb!iptGRPM0ISg8oSZ&=S4-`yxJrm^lLymdTJbKR5)U=x(?UCfo!;#H_;YNkE -#XHShJ=D55_=YOwFRBVb+3ZuGT{0nptpFqsqHF3*1Qjt}JNecaJ&>B<4cqrdFmt3)NLGd~Rf+c2ASO# ->FOZz?(VyeyZH_HclEB%C1dVAX^J$gMNib-p*rJqiC)+#YmzP1G6H7HU`p)5O1U7tvjQ`f<6xP`d0^5 -bAoyO_wYeC65Q7;q4FXcE1VXrJ|4L;>FQS*4_Y45d{E=Tu;4M?J1wyN7M6CkKT=cZIy4k)APcfx1(g5 -7U_FgQ(bk2zPHbwYYDPe@eqcmjuL~NDn?j<^iK^0T)T!T!2Sq#kQVYIwWwH^dqMY -~}#eu3l-p0k;r#hclp2P>D^;ToER;qV}Y7%|*bWT*53)&Rw*sD5NsbB*Z==>@q*fqg@-o`*0=k=Lq#$ -8zEb~ED6kWmYLLA6r$Rdp;-RHZsKb&K8^H+~DhR}oYYHw`gK=>veJe#o0_?jVe -;joQ?{X}5SXshTWvCV?CW_01rR$?u#LEB{_!Tz{OWkE$rwu*XLa6xzZRh0$(T+*#|UHyS03RVo<#nR2 -Yj*h9u>#xlw&blDC!@Sui7L!h-F+&}LZt`@<8yuKb-bLmz?;9iv1BtvvgPjFaLE!6X7+J8fW)6`Z1zo -1_6x-NrsH>k_b}9U67dQZGpPoU!BdcDj8w)8aS{S& -z*CZ6V2LauaD-_fzF3nS_s*QM4N5Y49gSP -xM2EbCafFnz8ax$pjSkt%7(U$e}@Hq%()TSAKb)1KZ$lZ(R9GvJ(-E_?Gw%UZT{=__HdxkuB-o{EVOH -5*UPo4QO~q|7FYBw1y4Dw7;xWS8&@0OGLnmx-R3^Z0+a9TKGPn(b~v&itU0^ZEww<+XmgG$2R6O57Ia -CYE54GIrEjl)57TM~2dgbuo(th~^TD&bz;%htML50x_PJ288cJUOiDaF_cy@N9z#S2@$6J4M+q1yjJ} -DbqbO6W@*FZR=GdguKpF3UKF -z(F)GVqY0m#N|nJ8>9cX`bFg5y#IOLr~0)%_5JwOuDIU;{K3w^s9E-{cukg7E*(|x5IDQ>g?i}m47gqbS{56Lk?2zFBJbLSShnKgb!Cb=*(0$Raqey!th}idfy8F30w$kU~R -FhdGsY7y@6aWAK2mtey7Do{wLmg!a002}m001`t003}la4%nWWo~3|axZdaadl;Lba -O9oVPk7yXJvCQV`yP=WMyB3I&kTpOp}oEKKYDxm?);K2&QDG+Z%*m$ -#ns6l)FHd)?9uImpsO^z591)BlVmO^%;m)7vXQ>EsF{itAf!I_Pq!MenhN_30UY+a{n@q-lXca -%8<0zu3l+9==GLe1}^U{-(B+k?DZUr}AW&20yA$lLApXoY`?$hv*UK1?LDNpEnoj)Y;#(z*1g?DL?t| -e=WR0ztFMg9cC-q1Q((JY8574tAF;Xy=BK|KF8NiqL1nTLzD>{`WhxFfC3Mf#X24&PmVpbL?~QhFz1k -;0qn)m;?MF!>^!i8vD!WVDoh*@I^4Od4{tF@(+%z!&VkArWF+>i#0q3_ZjTn9{aEbP2J3739)>L~|)8 -?!)LcMTkbKW*)Rspgo;a7#FY);2sYEgriSLE4mZ3%EV$7xj=v{eLTPY{p!Ol9bbN;kH^#L@#XEOH;@I ->7)AU_r0{Wx6r2;hN`p9G!*Bq+Kb@ZZjv2>q&o9nzKS}G)&TlVIZ*J)9YD&j+eLTHAKlyNRJf-Uo)9b -67(*vR#Ar!@u%r=rMiWh)L^*CeRYvy~5=)(5b7|v7r#zL -zDnbw+drag{dfo5SIbpA%U3~}q6KsXc_#`|!P!%i&Wnlsh&-(1iL~!TnS^z|T!xUm4elawxS`5YiP_}=6PrXmnO1}@yuMt4sp -jA!}EBA`v_wk@)&1wUg^}pb7(X{mz;*KF@_GM_yBE!Dd?ME+(X0EE^CGxYevv8@&F?n0~GF)Lo}%oaE -DOCWgn~=p^Y(ii2e=5hte8pAU+<-hT-8DqS6`JBn+(cq=oJLNSIMS0U!4RGuh;g5921@?zu7=SWX2k= -{FdmfuBQA?SrcU+6d31&9q?&!8}QO33KN;s6G&9vSeWjx(9N)%pLg|V@N#$G!4)vVSK0<$S9%tlLBUj -Ncr$@Aag>(L0mdGK;KYCO(uYxJ}LsvIG|+;BF~5eo|W9pVGV~EVVDD1=7tm{sa1;M&ZQ_ClMsNG))Vf -&yblT(0c%Ja26QI7po!#kG%htt%j7f04$(#uPO1Y8A5|1DJZIl=p2C=+=SMaAQH}o3s}agZ-_=No{HR -7fRU@3W@m(%bCnbE%N^%@$Gx6t2#50i{!2<7R^e@5`$GIWn=GbI>z{f+T$FT|rh5$Pld0sJ`3XGal<) -3%p`NN4Ej>SFBXgG135*TKK@z2gX9F9L<1o3@os;rcr`?9Ma03;qRzjm?B-K$2uP2J -L#@0&^o>9Kd(KNYP1c0rNnuTwl>=wuh7xPfoDANT93A?vfu?Aa0|0}NeNcdt^ON%&_fiwn%-ugIi^@C -IAA+lz_wXXqN)L!0~1M?5P|yt1N?)#zKuW=@(MG&6c~y)bs1RD-w4-%kyTn;;y+8`{TewwyTh;R;Fgf0@tgtem#=|JN9Ot`_>q@dib -XGQITFu;`6n(L}6P^)clxP$y5~l7StDIqPbVwW6U+{G2bkJzRm~rn%9;GTEF_-c|K_4KOenK#7lF5N`mKU@7S&ep0G;2>=Zkkoucl)l&CV{5U^{Du+Zvwp7f_g==t>MPl){12A4d1;Q% -}AS>XJ;S(%Q&d-#mX91Y3IiN%{Pwrn+Im)_bdH>eIDqO_qNr@H^)(KaL{>1`p&(PS4^nN?^|HLYaWVO -arJ#lW3IU_?DL9_Lg_uz06kdHRu9yA^DCXa;)EN_^vQu8JX4?EHC1CKz>6)=mv8v2>w;#ayjWF@Hkqh -Dsua(2F)efjpm2GO6Wwz#}%MB}x&7WB66Iy?SsjmfZV}}`yZWbKHJ -g?OnGmNJ1t@}b-J?Lh?B@eijiAra4A8MA9zSe?yGHho5w&|?S0jua@u9+KV2pb&e-vjI@sC)aWR8NhH -#A}+GF4)P`LZbbZ>stpdr|xfEugXc@n&`De@~cH-uR(n`&oBM`md2|LYnJsU8?4sXQWI?`oeA9d+!BR -4MfG!lX@|*B%kIoJaQdWTgE#VEoA*t#w{XzrVRt=HBaSA|^t~ITUNsu4vAJy6E*y04KJ9yi#es>rjq% -R4&|L3zZB46c7PLpfu0vgy!9hL3>VNl^TeG0PWzd`1 -Uf=%2@T})HSpPb7u~=N1)wNr#-&r>foJ|cO-GU8_&!Gy*{jp^ervhMr-w;UVXlO^_R-qG_%^1>2$+_u -2kyUIsPlY^8C*O>^qy6N{e?B)O!j4bclYLS?_iIazw3fpSn_XDc>)i%hw&=2YDKPg|PjuLm~BeyIzK~ -Ai7SnP`)EEmG8zv)H|4r<=Yp9&}Si*r}4dfXZ%9sxkw>!7DSnFl}(w*FM~&c{-4fou3nGF!^!K>PtLy -_=VSRs+77O?zq|Gy^#vx)lc(&pw5#xDj}}qzS&WY;PW}v>e*;iU0|XQR000O8^OY7yAEJ8-o(TW|HY@ --DH~;_uaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4dSZf9s^Vsd47ZEs{{Y%Xwl)m -mFm<4O{K_pc}&bTlA&IPP{55=N^P!+{yJ+!R2gd0LsI0c(t%V>`oSSNq@hD?3iNZ@H0uSXv$1-PKiJU -Av9Ex7YkfpU=KrT+`*n>Dl$&8GXLIIsFH<(C%4#bpN90Cib8G&x{Chg2Z2Wqq5o6G31&tw -UYw|u#wt~#G>T~i(nG7@a1r{c53)biPZdNH6;t#?X#;D}FaGZQ*C>RnF!i3Nn7EDN)Q`f1MzQizHKxZ -|#-q;Mixn77W?=r3(*EfINyq7eMI-qkodf|5nKq%JN>uz)jdSd$5FY!FQ)slG92{rpuDtjM-TJ|E?7z -}SngA805#7$xmnh6A?p|i-UJ&tow9qiK$($fcUc4~$Ug$iEA5~JPqy4`h%*_Xb2mWL1#WS}3Q>+vv(N -p>cEkDsLn$pM%DOO`Y$+5zYDS6@ek0{3a*J$iN&3I@Uj$s=%L8{`{q;SEP>j%123Dl-9DpWBb+)f_@e -}u)C{z!$1A}^r{k0meK?B@*RZVm)`fW625`9#XcJj>?bzzE4hQAnF}w4pEUdnw~bFid#i0YJ|vfNSGo -&?SGom_vXZzsdy$@TsBPoRa{FpFTwIr*= -Xzz1V!6?97nc|J-x>Y+#r^f!-5s6Z4C#b!Plopwrw^AWL%Mw!-rn4u9m3B_6(( -k5HW_(g;wP|tjbKTnkmmqGU4L$cI4`K4D39=I#LMdqi`KT^l*ofwm&+%{&UUJv -}b{_>~@dy9F6i4;V?_puQcP(0SCC+_ny@sLzPbBFdKG{DVe=K -g75xh8jjMbmxpM^dcpEhWk!X~-lBM%EtJRPAe{${@0%ZvqqpRv08j*W_&kLa&PWw-aVY?!q)aA0_}qJ -sfjYL{{E%1tlL_vln;2;e3i=!ETNt+2>z&4XBDllZfK78}HiFr>_Io-BavZjOd}1DgiIrXy -VY4(=tcJa&YR=U(3yLZI_F`VrO)pin|k?3I2?_epqbiz2T2a68-_vFVRpFoSxHu^k82lf`mJb=97{;V0F;mbE -*-vyqz<#iGN*@rgwFQ^TS6Q%79I2g^ibH6f{ny5p+X08JFEuoUGxDM3dYIAY%OL2W&&3UX0WD3E}IUL -But4(;qU|&NFK)`5DOqfa;UCHKu#fEUGnl}g5}{ -xbv0uRe5DB&*Vh6D#I2BeVs7J&|fPf87JdS4qE!4J%!xn}jSen>Cf|)@Dj#n6w2%V#aI5tI=HG*w5=w -;Dh9dKE?;sR6@8yt$F6#GS@{+g^JWaDK=5lOLmAc7-(O2K~d1<8<^qQlnE^eApfI1<%I{)8&GxnWN?6=h$vTlZ~VKIJ8Gce4xYruFWj+2a!$lH7Ai-6Z0k) -S7$!QlvcB()lJTuCFYPcXJ^sG0;oAse%cy=TSnk!+L;K%8VH>25aev-T(DJGSC*_>w?Q3=*v1C3vPEVc&DL?CgFHjv7z1sRb{>gr3&%uYdO;de>X9hdMbK6c@;PDn;~j -C(8i{fZ6v8fyU$cQ33GLaa(XQzQS&2qn;4EiR^F-zxEm5wBi3I|&v^k|;r}Uc@l&Wp3HE~tjDi_Q)&j -nqPHfby4Kp54)^hUAmh~{iu76)bPtUw^9hyRuR-?u0+tB6LNtkN9WrAJ1>+yZdza0V_g-O* -2Fb)VVVBIut9-I?+GO@h!qH`Nz{lyR^*k(nleF{URbpgu7RMM15FhvpVQ$tw}D2m$?h!M5SUoph1CmO -=0+gPHF24|@(D_}#yD_Fao`##^iiNzk?JRdw%A({2h|)X_CeRcpbx!<7es>>*1@xKUnuVobw#Xd-CKT -Et~aY{0a>zn@hleF%Q>1-9GDfUDIQjMK`#>(7Ry=XBCX{zRyV8I((C)M`P_c!-wlGY71|E9Eetk8(D= -quue93Z=4)U1^{;r}%w9ZoSeQ~)TO*4D9dXN=iO75b6?GeI+N@;~>#h7!W_V$F2CP8fw#sWqm*=A}<6 -vt9%@wIo%glym5gU1-iG}4D6{qZh>JFfz!Ng=W@BACtp!!davW&LMT(UuZPcltr8ntc_t4Y_Uc+~$YD -SN~+xou?wVYfxTDN|>lK9J=Wd4D82l`}{aigGn7D$=eH=p$y`mCKhd_QrRg)|bg^I~A0S_`YUU>wa~o -uF7uAg|cZJyP7!FP1iA=76(o9)l1su;m?eLdP?oW2CIpdMMUkCW}cXI9Vo)u{D0$oYuh}0*6>1E+Oos -ut`JmhAnkH630vn%4MDXIJI1|9T=zt7*rji6YpGzqY}NO`dU0Rrh5FJJ22rn!EybcJ -6h`!}$`+FsaxQ)@v`4Jos%=nOS%&{X@{-wrlFAWKU%0$mSE2zG3PayFWq?2Y@3m`WaIiO?S5x!-WPP;uI0kc5&VBJkYxs9F<3qYJ9ag7$ -|LiG=DSs>*Tl`TW6fNsD`lJyHj&q=LLGr-YaWIhDw26pHM6p9Z(eJ6ewPXxGiVyDo|u}?iTNFWJn=36 -G%No)q4+Z4-xkq_QR!o?569H}6&HU5@?pZC@s0VLhbu3Q{a>K2eD9Evz246z{>Te%qr~SgC5HSB8fcx -vL7zXu$cTO@H8~5P`PG?zhbb#Vq3t?l9Xf1Degm>P21qoBuG*$`stw9Od?c~y -pr71cewxk9xYKMCE9VeJ}eHn8mjeUIDGTw&5#bXx99&y?@m6Pp3~Xs@yYr13B5bJIQ~1WvE2*y=;lGv -MUmVmS)9^wK9iJ`^eO*mlBO}PA0HQ4GL5UeplO=OtfDDw_5(fiG)t-kBY%_MWSY-qLHQk39-pv3msL5 -9=hAYUvUGo8s2Na=&jWPxZd7q@9L#o)7KD -zj2jT+&?KD<2F~?-h{i1_-^+;eN<apQ$tGU0)qQo5%`&`e~cpMON{VJ{$eq?j52EGR9C8fwlp-1j} -DKL@FD9KiCAHY3M;1Gd6K~{7tX;I3%MLK{7*wXK(HygwqH=F3~yf@wTO{%TLj;~Wy -45uz&MtXcv%9DF*tI{t_eNAFJ0PH(;_^zTn^&QGqd>HWnO9ns~{)y?Vg=d+_Ly8L`~d2xNRPjoG%rdW -~bBe|vc4lW;aFgcS|oTOzP`WK|P1i*Ag5AipNG*4v$MNy0rnJ-_I!!*zCSMg$qA@nUJca-JTfS!s3+J -X9d*@YLA-vLBF-5<~ahf$n;O_73Y41b^8!S(wz&x--Q%gaicemcTfCOBtrc*r=>=WE -;-Tv4h|0MvdUAMKEy>lg?P$Z2#azNr|FVrxhz$HB)>y9N-#=hmHb| -KAA-|@Xc{w00{wsz& -WXB%0`WWbBcgK;9{hVm7(HUg#-s2gGRU>Dd%bs_aop3lK~$w92|$h5#ku)IKVN&F~$+$fZZ5&2$zpxH --_DK2nS;rj$t^4;TVQv7)CIRU>LzLf?))Q5$qz^MX-xt7r}1A;9vs72@EGNoWO7b!wC#02unGiz<4ql -2*z+A3vlsFDxpacT)2;>R~M?e=si3vp0NDWrDcn0AKh$^5+r3r(P&rZ|K#c-&7E0Ek3KfHdy5?<_1h0eODa -kl&{@+dh(rzODr@P6Y>>|2}1l=y8N>OzZRW&>4CZjF7iE0A7=_X;_O;jEK*Sd*n6#Z^8Y`V!o(@hi_( -R7p0>L#jDV0I8$cN5iF#=dScd~r9yW*0xEQoU8d@0`5CezKH*EMzv7dxZqzJ{y192O3$HeS^7mZCt2twmO3Z*x=891dbH~z6Jqz5QG*2u^R-uM&Re(%*~zqno`!F^&$wLiQE -1-2!!+9&rO{#(Qr^-dl7VJ>Bha51D_svGo!Fnp*aZGaj-3d9tU0F_K}%0)*uVCU)%GhENq1!Y*bdy$u -0i%Id3>vqr~nk&meFkw$;y_I?1)>1%ZsaVqZ0j^@YTmN)woHCViN*;HoF@LC -j((4yUCe*>`GEJL?AL;+M`qOm`>}Ol3j{jf -rU%tw@HWt0Am~@3XtPpRot=TOS=M)%1z-HaSp$qN?OJfU^5$7Kp$p91CT_bcYbA0EmqxJLTBudWt@+K -lu%3(Nn>A;#jcOuGMu*1WZ=wOM%a%G9p~(K5qZ74oJNaSOvPcWFikhUvN%O#a2dRie7uRTf -;uhl8#r?ERVD6L+D5`i9AZzS7-?wROmvKHzSMcGDAmI~1dNb7e=rlihlo1-%k=XV>4R8|a*9Mz%u0J! -cjIVP)H_5T+WrHE+Ey;cZu5%fSnkXyP%|7PdKOR_tCKn4zL|!`g+zG#c&3U}zRs?OE3WYn88!ZEU=c; -D>c!YQc0n^SemT7dkVGogy%u-_%^#u0OgzYmI0GX6e}#0+UFs1H*x6EnG~N4$R*JT$#E9`@>gKw%NB8 -&)T8P8f4sPw}EgVy0dZXS=f1^9R@~!tW|`b)nKc+u(4PO`ZF@?f9?dc1p+(AymRHMv02(gXZCgMn+$a -j=-t1my|9he&5vCNreAtFaFf+%#O5RrZJb8u_H3qo2n&HX3$_m2Zsg~qLBOq5Q2!P%Ixq;_a9BHCV1u -+7w!?Bo)XReLCmiqHYIJ*|erk1P!$W_reqrhJfIHn!?|_Xe4F{n!)X74>TwNU)epu&uQwv=LHt(CV;H -d?dgMK@6F*I4w!qGcHdq-||V=i?D%a3~pil>g;~p -1halm>?+aDPq)c+s*$&;vejm^;AX+%Kn&b|z^!X;Vd$=n7Kz(`JZmHGArKA%SEJosLQ_nAmff=PtB@H -7`k`9`E{?U;Xcj3uPGJpn`*t_2fv^m_D(iCK>cC24SM%#S(#C3Jo>_&1K=(pnU3qlCI{$aunrCg)(d) -mF_^Zw>AtUU-Wx2l}bP>3yoGiFpchkjtPuu;0uNJo3A9RYz-G|ux_rcp|yZF`CC(Xss&xDO8@a+M+ih -HIO{8DkX>2CWR1im$)yP*0Jv>|j;)ov*Kzz!xiX&ib-mi@=`2_h(Vxy`T%UyB=s< -gPS+4mKiK_fvv7XLdH+`@8xJhOd1v@72aEbah}j>B`%3@H%MT>}=mp(C;SvDb#fr%OP!k4RoN! -%+(veGxh$%r?@JT?-T4%%S636ai!i^g*n@w4AmO6jwxc$@V^~IYgI+(l>KL!5|g5NuDnQabj^E+vOb!b30%b&_O3gRlbJ-SQduQEEMEdL`8{sT -};0|XQR000O8^OY7yOFe&GZzxytBVZp-u3^Z52qi`uju0ZpXsl -(3&^F+*B3iTGnz6RgWd@o$QmCOb#KUcldyglZ0;d*n)0Vq4KY4UR! -dKrDY!9uVCh0v44aXqRS}%LN{^pkjGE-3jtwCWkxsa@-a&r`$1I_-{(=j)~qdZrKrdjg7JYKAI(<+_A9F4kE`BPyy{CM?=E>r=e^iicMhc!2=`y`%W@!^ca0raPv&Xh$xD%M3(DU`7p`Shss_|v4p;-ctL4a`t&W25j%*!4evsV^{ -6A81i0#yX^ou>ztd0w?Y#`hK_-%|VTZMnj**5+{ZWeGlzIi_-|vekgniR6>lQ1}Fl|86TouR$@khN0SkT;1QZ>3 -^dx9K%el!L{GzTAdR%%XgFEL(9-;)yZButoS4A6b3 -pD|HlqQpe02V-IgB_Sq-P!eKH2nFE*1cW1i!Nh6+fJ@y0@M9fLxIz%Y$%F|=L(mRILyS8>-@(}TXov= -Fk&eG1u7F6@AWYEY4l$6>uE~^I5&A}2Aeh4vfB>xtjY1=CTaSa_5w4>U0zd -@99*yYK=18p#=MZh+fI_WJa|2G$CWqhwLM713p+=yi3`EgTU!heKq){C}faZj>MqEcY$6BCvt{$TWY7 -R!43{8}_4HHNDipgUgtNIGT2yF>2B>0jLEJ3DOJ>I@fJC~@d5|e6B@?<5pmO}lxQt3<;M=&w?2ig~Lj -?{V}B=4KZ!6-Z&*?z?FkPR3QLNOleZe+%i_*DH*3<5-m?oQPMvM+W&J|Y+d!w|x!NTnB1`cNa)i4WoE -hs_b-sIT^yA3@t@`@Ep-szue$vS}5~UHv4RGpI)BKCA#fkPLxv(73w!RW^5?og~^Jq9RE&q>A=lbo2+7gV66Hkv% -$PW1?uqRstl`C|b@r^MdK@9v;`{S{SzOwEDSUY7CwQ6}Bjh_ico7-6n2Y6Rf^&BuYlEXvD}yylL}{^| -F!L^|@%LZXUvLu!+FLyKpQHc16IM=lpN=f{iRAIb^>!B7*kbBJ&LA0YhML7$o5q7B)C=z0H@F@kcivL -KBH0(`j605%lY?aeHRT@cd(1_}bt>6*3`SAGz0-0^~By7^=`y>4b@bMLuwO*B}bf{ESCNP*1< --K;1Ya$Uch)oG%%U5$LzZSuY?D>sp7q`BLN(P9x8V{8JFwHLUyey{hhMYa}9G6{XNp#-hHVMD3GWu8U -T>KU#LZIXFK^m^XK<%LX>;h(QXo{hP8%y#6-cDhT}wk*_*StlRx%wUr&7jCcZzF-2x@L*S=-7VxZ7@S -D7DW2yj8wo)NOBIPB1LbDr%~;%I#n~IBZ}(%k~(l=Xlm$o{{YPk=-vgx4dd!aJ8A`WB04RHjB7q8H=9Xt9~e?t*T@H`;lU^ZK=lcH&M5%t|o6wOZ^8piTNbMw&O*KJAv1= -Xvm~T>EZpb@MXZ8pRW@_q>Lky})09ZLw#IUbhJ6ucw_i7OVB;sA#q}tJN*Gjn5^UXrt1OU`h3D2MZ)# -3GGg2Pb9t)f!SJRkA0>h;iZoB`SvdQ^TDPcw!JU3f5DKxt2yYfZ{x80a@<6sY<2Rt^lnD%<-qdZg)G@ -q{mVVnL0}xoWp`tvKUUf|*IH+{Dzj1Va$wp-{pQN0zcwa4(Gz={xwmV%eP)a4ZMBkT|Bh#+@@&9GKU3 -la&H&MghOQaB#j~}KXtnWL!P;$^4_NODd*ky(W`)4iAQoWP7k&P51U%QhgBK*@pr5qow>QTNyX{3C0Y -6e?ZXkG*0OMP`Bk~yBR`f|Oz;y6R^;ITprc}NX_}@!5%b<|g%6|)qn=#=Ccw;2;!bY-R(eX;)^H6K6v -~4@iZU#7i+1};Y^w^I_;@`d&y0m)RS9>3|JsIhTIdK1bWD~55Xv-_l{|Lbw1-y2GEjIpN2)g@tPeKu$ -!S3Cw5bR=Jv$@*+mlO3S4qi*@3trgaweNNMdIaoy%|}`K(**Nb!oNMDpJ&cjT0b9A-^W|N9=X&X`pxy -X4wq4x$KUl>{-HxP=xMrM#Jpi)zpprIx4ZgZ_5&LY1Y;G2kpp3gsI_g(| -P2Cx!N(faezg`pNr`{`g~&L|@e55vAFmk@sIvO9KQH000080P~d=N9CHTnR^BR0B{rl05t#r0B~t=FJ -E?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoWVRUJ3F>rEkVr6nJaCwzjTXWhv5PtWs*g3qAm -QoB!NSo6KaB#~U0vrtOWHKGbu|?3tSX36taDM&Sm9Ja_p24wK`|YOGqx+S9o<2i$YEQ$m7=s#PPk&<(lbsCLI*Ss<2 -7f|!BYV;c4QOhul%WGGrJRw4IX#YGt5t6U1HU(hfNg^cB%WUgX9Jgv3GT`E_St>qf2<_gNz1=MRb6HV -+@uR<#bU_`nRj9A3vEA!(>ED)OIlB0Y5`cSGzQB+N&yp|T6QG9*lz`z{%|)m+ocS7mZXjq}Wb -x_@B?-cm2K-67a!uKtNyZ=&Gxdg^-@;m~z;i>8%;!VpRGx>3Vn>1!ct5wqBP0h` -xEG~2t$GIEMyYthpVT6dkF4vkA)EfH-aU}qIsT5n;dZxN5B?nUZ?*S7{_tqrt+f%>QyskODt9}Rw%oQ -{Ks-H33!1{uOYy4$rM@Ln}R%2A9$$E&apW7fCe$pH*7z6Vz7$XY!y_{0_wuA?)b-GGKNLS4@9)u-ClS6K;GNkalhj@U=K#nf?;bk?pl*xYXrl|XgF -{>RV*%JX^JVC`;wfcc!nky0yBw|#N|O0hyH-&jnKishq?R8u*@FAS>=O^9kN`XRl`7p&pKX&Ozfs));h!iq+z66*_f&$7|QlDa1zdXw&QDx_~1_Nepk -)M|~V{mDIigG2U|g8~J#&aD#l -*`blJZ)Wh(X1*6N{eNw_zpqXZfD0vG!$GK?N}L1<1X#ba -TS6cx(`u4RB(sGM>mtF;;~c(vyFxEsRRXX8xbGtcKUiO)QruTFgR^ZDw;S3jSxL41w#`5MI6DDYwDzI -P+sCGlOxd?!G19PwS+XXCDj?`kjK(fF>2?`k7H=e--@u8HqD<$D*B* -QZJv>EJN#hWKu_`vn)4;*++OKWQBC-Nbx3)%$(+h4{Yg@MSLQrgKa|)52SPWHb`!S>kwb -3c@i$YX&mu&QoccE_5dV{&n7yIVQKr7p+yR9RF!6nP%h2uS8rYYNAJbHO=H#)N~GN)( -d}26y2%p)?h=^++sHi>_3lc7X2JhISsw#fw(B~Rr-PFpI= -&dU8FsaH&o0^OTTlTc-bkTDoMW)m3S6Z!t3U1*4Sh#7Y)6_S3to?=$P~6NOaIwIeyYkG`G}&iQLwCWp -y^>6=WC(w~@z57<(I>NhRsSo8&lvMHqylbxRRq#2dZ%5U@c@0D(g9`4!e=^cPUG!xRMxNzMMou%PJSf -LjnU;5lCrx|eN6ZDW$)tm1`bcve=-0r8$TVuP%8bJLJkyGXECK2I``z-W!S_A{#hEmXRNSl!-Otosw%< -1Dp2)4>)*JJEB_NL;2YFjSK%Cxk)pvj@FO0#^>0}4ZjPN+W8ZGF -F}B(y7Yc=>=1H5=Qlk}DYh -15ir?1QY-O00;o{l@>>(oN;rV1ONcU3;+N)0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow -7a%5$6FKuFDXkl`5Wpr?IZ(?O~E^v9JR$Fi4MihSMR~#u13tE=KR((m7N`#OE6$s*@Rg^|(u#aIBGlO -QvNxi?m-?mZ%fzyTpKx?I~hmMj?0(Q%99P1Su(h<1=*TDDL*+8rqqUADCG7wH`W$|iO+ -GHR| -2~kg&R~pE8Zsd}_5i)e-G!0U>&?-ZW7AgKjti4|E>dhF+00X0Sw9-&X?dgx<&YGXV*GuQj&OHXf@WfXc%8{4oP7Z&*RnDaGia*;*D;u&*>EsW -P_(zmwkWNvstCz8UP9P8lwd -xnBU0=uJ2;4O_gr6bspMl!nXds(WrlG{911iO-7KMd#K&N{p3ZuD3#DDzhpMGrO05ZYP69AxCRcr+sZ -dLX=U^b1Z_Yq2uJJ&nXptU1+lO=Xi4nkP3rhaT|Rol!ed#{r--IgiL)`CmMzE8M(&>@eC-&u1Npbwba -}g-W^miYMM!@l$!qFs#ivl*Myckb-WhdQSmz@{{amk7{iU=^)Zl)(kFz|0><}1@lhAwXg1k09itLN3E -c8_b%=!K2g6Hg}o4!w#Sn_G@D|CC0j+ny?Q6+Jc9O6V5cj201R^?2yQ}}(A{`_DE=3GX253L;66s(DH -xM^^5%9i54+|+ty=KEQ`RF15{-jRdr{bbj;ZHzu)aA&gxO+%g~^E@b{Fts)7@QYw-+2UvA*K)K~3XOB -mSNcMm{aWAxvrmq2jb~UTsJ;@KT9%)8_NV%i2XFY>(s@8eU%MXX@H2c6ydFt8{*cp-vpvq!bv|x(6+7 -<#M~2L}d}QB>^#GpEPS&Wz7*^|s`2o!{hM3Yvs-KyG<28D2ydY9Giddx&3<`I2w?hXWtJ@0lsc~!zsQ -y%t^|Ih2s&OeXERC1y=jQ74+2wZbu7HLuA=w>3#FtX;xcOGBx43fB)!XbN7!A8T-Rts4Mb5RGveL-IXS$C=I81^ -si*WeP)h>@6aWAK2mtey7DvvEk2_fd006HC001}u003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvC -QV`yP=WMyO@Lq8!kx)LwKSj0=>OfMpv+(dmR1dkx -zxUTb%q$oK2-t$`2&mF_G>if7)uoq2D(wA;5I8jYv31_t4;Ba(^8AA$eAQxrJ -RJJ2lbDTlF=#`FI*dBk{#2ATS~d*iB*~sKzpqd!z>q80QQx?aH$HeNo8bjPy@f<)+DUp2<`V}E)r&i$ -_-w1p>+KMVhWT##1qY#>szGNdHk#?mNuFu -W$*9b}Vw`)bR7nZTN%K^gLsO8?63f%ylt%qtr6Q|bsLWG{;AXX4@6Ad1>0(85ZZIEBdCoO@3d)TX35w -?;;kn_&3>7YBc4vJju94{22u&2|YftWp3*_C|ZYL0-VQ+9c?a0`L0MudD^^YAWT;Uy>u1LZ|eX6`I!F -ke@L|)VG;28b^AqIWLPSS=`X?Rx3E*OBN$65Ssxr)hKJkg^UhTbB6x(62iAPd(IOk!V10b)$0S#B#d4 -uXeq=zl|nH=507@ssO*GK&}ED5A+SB##0wjA#C8?u8Vr!eAMVdvKidlf+KUTOz+noPlz$pd`K=CZsux -{sems8k8yR*b9fv3CE|F62saQ)&KHPs(f3|i;}aT_arjP6;|$53+xVd_R3wboc%rQW|uw<0Al&Ggar} -GCn5v&L@K4bG*ZSo=!1va{%|npe;9o14~SL~BENcQy!iSbZ=`msm1%rQz2k+m)v7ECtu~MV7P_y`M<( -KS>M}u{IhK?*``m=C;>qU*#QYSd35mYXq6UPQ$RbA@4=0-lk%6TcY0r@&NAQNJBiyl&--_Ca*ZDti}b%x -O9KQH000080P~d=NAcxnnoJA;0ESEe051Rl0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_ ->WppoXVqql>mX5R32;(&N#u23vi|KG$ll1Ye$y6lCZ;W?Z5ABwFI -}N+d?*(&F&WCW=5|XuhuhsuyG=jX>E!*z6`Nk1O|Iq>b~^oZ_K|7owp(qsxZ~_o?BDvK8?duz#h -IV5`{$Zxj7onf}Q1e&*$b;yC$1Ga2lxPF$U-2~Y+y@Sa?(a9D@42ZTg$cZkAEG#W0 -}Zq5D3-^)n7b)ovE?>vvHDSNEZTb5!bjbu?Dg3jW{t-VG(lGHvXdZSGf_8TGoJAHk*{P=&Z01l{pBW& -;@8QWU*HI1mu~zAyY_?I*uQ56g9uZWM(lc<-bG>Fe;As;U&d~{6{EC{IcG_V{2u0+F)!JmfL-=6bUXd=JP|-{WDznVYZ&aV) -vpkJPycWS$4Y&Le0(8{M~z`+$qje&lfiM_8|G6`z*3*kMu3Uc0G?AI|23Aija1w=96O5f{uZIRyKju9 -zQY&ECP-!ynKfbo2=>BevvhlkoK>=s*ilmwmoi{PyW)!A`Eeu+Jy6*~!)7%Uh@mBMm5=KiQIh{}A}lF -!U;R!*mOQLj#wS+1YQvI61wTUM#+d=+7?}SCjdioqw9K6Lx(vTU?yoOiyO)`et_hX+G&PHs`z;VlkN1 -An%5F4NcxhFp?{tx_*$zu782kn?QiUiru-798R;xeYm2S3%AI__F3mJh{D^fzd+d!=v(HmSs0}q_7wY -Y?ZDMnIlIux{`_{}qW8KTW?N9n4gUz>6wHBs?ysTg^B{`i4m*vKR8+k@0j}AzEYq<1rp4IJ9FFK7Y;y -H$LlJ4WTI)EvXI&3&;uKC)BF>z+efT_eV~B@O;#h>jFVf_aw;+zwi}!Y`CI0>03ljE@y>7uR$gGa~WD -G(!;chfX0&crO5Ir&TD;$ISAmFz!x{q$K;T5(C&y4K|_FCJzC0e&e2sc$+@GU*RC-}XQ9vA$cp5GVzz -MkI~{J!M(I_gv41Hm7R^tj*;^n6?JZ9U%>d|S^S3jR>f9}50Z&mRf?h~mrsj|6`t`Gb!76u2Y!&Pb07 -zN6=l1%IsPj|G2R@cYVB;I81ilHaFr!FShMd@1-#J%1_qOFiEcd{58!1mDy1SAxIN^H+ku((}3Cb3LC -6KG*Ztg1@HtW(EuTdfj@Hi$#*|v?3RkTw@BUk?j;1RkTghFh@!gd6B78eNi;w7`dj9Q5-JXLWM_JxBO -fC?9Pp+JY2ZTfQ$ZtbXnO8?h!MuGrzoqFIEA-|9a&GZjxlRU;V-g5$$C0pogq>?t1Vo2kP0?3ZT|0SK -3KZq8SvOs88)i!HXTQB3!AV}RV2qoR1ghUGUU -Wjb;WU^2{K`L|c2{uJQ2X;~{2^F0B1gX7}V0MPelMTxUc48|D6`UeSbu9=Z<;nJcI@xnCr;;$z6Y>K) -{j3tk!e4qIBW1&pf~hei%Auq}K7$}7u@S*U8kmWkyhC!8Yr~!LE;~8$#p&KEQAK`aNAx+XMTzPQ3(;owmu$0vG#@TRoAMhd5vMBBWMq__3n@ -68dl! -VT^o*(%M(+P#+KRcnMQB48{)F_^a`u#XSQP&^|WrY6Yhgd0&9NP_vBfFvG3fm2dBfFt+Y&Rs1?8a-MxXuZ`PgnK9NUeGiY&0~H=qdGDY06y)lP{Wp8cZqn&oa&M5Rv-iW+s|EOqXnI1d_#b2dPY#90mcf -H;4g?ZtWVIqTBmvyuu>=N4=h|VR{Jix9`1E{1 -R&jWB2&zvS>?Ve-w_GgIjDHF|IiJYRST4z{N`wtq{sDWW+S4|_sQlqaitgi;&ct-jpE$jVhuW$8QEm< -~Qe*eG7C#ZWCdsaVFBz->dV|f-eeWhFTk$iGZ2zi!%2}sY!o<-rSh6CS}$88LZ;Pbi -%9IJb3JbpgK>1S9by3wZ__)m11<9#Hq7=RLN&SlkM+bRxq;YgdAiBA<@t%&XU0PA@gxyj`O-*i<;i0!>Zs-Qv1h6O!wjHtOkv;Kj!{(zK_$xoW1vYo -RyKFxxi{0=x+mIJ$I~t#O5Omo*%G*!eb+-F0;aRk)=rYiIOw{k@*Qs{X#O~GGUDI0c-kV_6KbzQh*}! -+V5Z#>W;njYStir}+b!p=BJAa-2{^4TYYR%!_zm$tp_|I)}Iv20b3huxE2)ti$aq3$Vc5w>FE>7ae#o -OjrFm1Sv{Xp)}^h1{X9o~abL_!HV*(Ts5y65b{z2ym8MLdyIFA7sv)Zc(oEVn7|vd88d^F+UDcjw6&O;JtjF@-=M -+MrimYf`->ALD}?^vW^oH|XtLM4HOY*}P|*PFgMT$LT~d6>7Q(n~Iqkf|*T7Ql>)jv8l+TeHBNhLh-S -wm>u;3Et?9($EHH!$W$mCn+k~|Q=xEdDkP3fg~G9^kT^0G3dg2G;{Q`iO;sGrJBcHCr*JIqB#z{r!m+ -%QIFfe?$MR0%-)U#VKtb$CnU)kJH*M?@SP= -ct8sY6Fkwx4H+2ji$+!t0wxf3!c_+HDr5{9{*9>wJ43ArhOzJ1t87x4Q<(##9fi_JAT4K6tY@H>~051 -liy;x54R88~ka5KW*@*4eo4kI;n2)Q)PCfy!(DGXqO6lda~?-8W!uU+03A=&5Pgyr{Tf -qrTL+;8gE|J;ep5^)5L5rY<;rh6_%g>4MY31>v0oeOsJ6&3~d>`hl+d!~H~;!hfV4iN)-cGPj8Qk=j8 -2Eq|g*ZICbTda2;ZA1NIBBZ-&%@q4Zy7Qdx)&~NInKkkw79!LIY!L4Nxud+{Cy^hr{UW1Nhi@R9>s$B -~4(9a6ixE{+tM23XDQar{vZYjp1nvRX#w@>|K_qhe$1M}i0_REPc{1F>oPJD3_JDaR?Q?)2{M7rcrW6 -^hve$5$a62-tY21iCQaEyU=EJk!uYQi=R`^YG4$FL7yowZR6O=Eau6hp@tYR6(s7o{dfrZGA)ijiZC8 -sDjO6pm>)M@Hc|hNBw`DNNO()Wp~{#z#gmc8u|}#-bX9YZ~s6QMiubHXaMQiKS^QkBnmJ7)x?28vm%Z -?U{ymR1~c3Ifl10H+pHvL@)WPB>Bqz&j2j@F}`rAVcv*7amc@WA6huF4y_#JK74THsN5y}%2AdbK%(# -;P)h>@6aWAK2mtey7DxIT6}Wl^006lX001}u003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`y -P=WMyNV*o*^(Y9T -SyBm86sU{`!5C64xZx6t%r&;!{_w4NfFCOF=erm4USqGs&;F1*=)7|anig&?IIB(qeo6_%@^ya4g}cJAHB)_XgZq*YxWzj^7E~;b?kyA9!v*n -B04=e?RKqV6)Y{{KY}}dz0S3;Bi0lCf(`e$fVi$aODi$yY_1)%`3-$7<5Mcpxd4VBk#ubuzq>fbcWMG -$Mu5IZQ#5Aw7Xb8I5Jx(8@(fl+V0fMs_8gR7%{EM7x7cXI~&7~c&Q#eLDZmFXwU@(fq*myK~?i;QMV$ -)qdL0N&Mlu`-?GTgc+6HjbG;tQnCJfXcZAzGLaXhJ>{BCH4JXW(z45=LkD6If&HuIh1Lhy+Bb{lPQ`=Qn#ciK|?PB8LsA2HAIisJ-Jymp?NW&s{> -a?{^ZQ3l3HZS%O>P){E4C0NV+4q8GR*a!q(3vM*M1(|r-2v{{d*UX@2R^Wr7l}l}l&Z7ewLitpTE%6n -MhSXPK1aX5hLZO1=SuEvF)Oou%nP({K1r;zE<_7$E}(qjJaI9vcpdk-0dEqF~4j|&@l9CrVFnwB33uQ?>f&PZtMY4MI-W!`>eiY78`%>hd)v(H-@u7w1uFe2FCxYj`9E=m-h97T^%WtngOFO8s5FhdIczE -EsE+A{x@SsWJjw|EonE;j{%r(5;z30BUZP)h>@6aWAK2mtey7DuGq<-a5Z007$z0 -01}u003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyQ+(P;AQt;n0@>1*Tyt|6!aHSPAw*l}3#p5v8etfEwx>slZ25r*> -c%3uYLaeWx#!%RN;fLogN8Xg{My`(#g1wA;mk`NS|OG(M`mROtf}!(6IN?kh?R4PcX`jHj-MvRwNFT} -1}!{RXsKEf*;&%^m1+4hw6mVL>%jFEq$9=}Tc0+r*e(T{r$h3BZ)7XP7g-Rcr@e03$SDB+L^NNs(H3Q -G!3hrPa%~eA5c$1;UbYwoybSwz{FB6toP@D@J|?iHyM~0u&9H&irGg3=k3gAr<0xGGJk1MX?AlUz?Vp -YNroH9?e!Tp&CuFHhygP-U1sKbOIdPr4C4^vINIW17IShjj%cR2MICJR~$dsP>3}RW8Optw1vm<^8R79gzoGK9=n -T0ceZ@GLtAVGYO%o?6Wi@MLt@NI5n&Px90{g_MgJZV-QIXIUOw6AhvVgJ;CV27SU?x%-Nka;Uro9Tn6 -DP|2XEkDb16NP*cP*@$ZsVMk#Z-olDH&Rw#MCu`zQZ=C`wXvqtE@E44*KK`qzqVX}m4}jZ -2L`k67hXO$wOXifX`K9S*(w?D_eyTC1lU5mXnoXp)QqfVo@#Q4-sGUNy~o6s(_Ug|jx2#V5nCT`3653 -8oud2zt3NW~wmWV=S5B?62|pzJrn3Jv_~1;iu%h#hU`qV5wASstDg=Zz7lMc0vf`4&G5ytUe`6{VJ^4l6y%gm-z@Euv)*M!8 -vcf#rRg{`%9W$qXkG+8&hv$UilM#``F`>*gcZjB3dCVYu1Kn|EEmE~HtMPxmKW$Mm+q&qRV#Rv+t#PB -?^d>e`t|lNDl8w4eQ_7-$MxWHi(iKPzHI#8F&DT0(QHh|6^`oRto&IXn%5D{Yj2j$*e*sWS0|XQR000O8^OY7ymtp -W${R992v)LLZ(?O~E^ -v9JR&8(END%(cuNWyGYE4IJQaC-hP64d1mIB* -;${QG#@x0UX7+O9u0<5ZwTk(o5A03#P+0h0*ej8jpA!ASOfzZAaD(_{LZ6@xl*mcCz;#YnT`ZEoGdT! -5hJ-p1u_KFfI;?CG}>odBvBkEg8R&HDK!06TdA@?1Pn8&a=EXN84O^RW{CArOj)dLN})CeoIx9UpFjU -W5RK+8^rHyo)>gwDHL6Dp@=69$7{ynKk;>8SFC+n&F!ca49<3FR;R8^H28@JRYBo|7^%FG_Un!r5tSwhd~|!eXa!;iqymQ-n?H4PYaQE^bP5r5L+w1>M -hXs<2EauIyCLrB2LV!{Pc%lbLP#`*Nz@?(vW2gs#r4hY0{YWC_}ZV(`_skUDcKU!q^17lNIc#~oPen+ -#e_*IaRQhO=YwnV=%0_qqs5)g{&KXK4m}SpZ|2a4S%1D54Q|K%Im~Y7vm0;d0(gi!iY=K2{M+ -%WPpb8Nav;BQF}Ed7zMClk4SCyk<&y0qbssaf2xO(6zi;Baybxs3OocMO$VM7r`e(Dt96%94*l)W(ED -x&e(#YH6Aux!z$5od9uo9rB&F)Wxzxs*PWt5A{n+buKlDCzdjPi{Nsb*DPA}fLL{3^Q>Xf}MI@PUE$r -#*tF5sl0=4|rv?Y4_0Y^RZQ(@ --9m9J}stH^IdlTZhc{%%f@yg;IpaNQ59OpWjk*&q4gFO`klt7?PX{}b*t6#Bc^p`n-}La*Gx-?b`DKg -2+Jj>)wNtY8l$j~+tcjmzBJ!k+kfsdE~uKoSp#cMsf3zmjj!+2x3i;EIt`%@93Fft%vRkL?PWv4JsY{ -;ZB&$Oe~?T)&Kk|Kn9-$RF;+t=G>H<&;A-9_@1WQl8+t>~CI|GMtY`p8^&V&%9sYK(f5f}Galzk?&Jr0@X(m{+U(v_O!wV@!uW~vvdV+Pjj ->paR`pEqM$Rtyy9@(}cAHeGDWQ|IcLXkJj4rrY*ipg!H?vWYDLB~uRdrQCd?kQ3>irxFy9I97qe|^ee -AL)y%$p6cI=WU&@m)<-wuk63ZWID&;FwzYz|535|eWgk5m8!J=KmBx}+1Z2Kzmn>kDlano0KF`q-Y-y -}oqZP7HN9_ecRwxJlB9_D2Vm})*iYV|T3u<6NfG -h@g>Pg3Sqkl4-^>?-+r@HmJs;Aa@kP7+E4RM!;VBhddASbhRNgJpm}fHx%h$Z&?JAYCcP+l8%D#=GaT -K6PJ!a3&E{)CswcYv;P)h>@6aWAK2mtey7Dug|Hab@a006ie0024w003}la4%nWWo~3|axZdaadl;Lb -aO9oVPk7yXJvCQV`yP=WMy2g6N_(T#g;$bl>B|mBfenIzcR7<#L4;t?{a*1fyGnre)a(p(Qt=9R -x5|v;xLN5dMw$sU}?(N>1l7>Su`B8SVgFyZkGRXzoV$Fjth?ZZfM5&xgpz-PHH*P>L*T@xBE26iCBY5-pBYE~74zw0t+wLOM}3uAlJJ$tjC?t~g#i($ -3S5$qaJ+sL&jacq^MHCJ6a-uWk=hf>ohcn9$Ydi3I1J$v^M3+D@m$@l+>blZH0|uR4PqU21;dp}esp) -F7;7l>8Ul0|&p1u333i(LK*I!fiO#_f2#AV4VfewEKrF~24(f=2wD4PhdUbOvNPx>pbH3@t -iuzh7&{oACGR52&cAic3eT*=FE$dn;nx6NFhO>QE)d!Y7~^&5Fd-G`bsKrDrfpjdyJgt`w-eksw4gV< -cwzB5sZT(l>X$V(X^ -Y*IuPlZnN85EmFxbne|>vBn_i83ldGG-1)PIrHmwR7#hkQ-N2%JW5QNRX*%fkyMoSl%$27ciSqtfRA;AxN;OrTc2BujXutXdNmuHU#Cw^w=t*0Ws#)yZi4St;YR#$9bsM3aqI9A -vWXQYPJ6S`;S_QX;re(ISg4yiexz&fkbx?c@mE0UmCT_R?l=przDQ7n-^apTV4MY4e_q_PAO&8yYzDb|bw*4$} -+#N=DsWpt|gWsw}}J&*^E@;F-`EC}%v7u3P+#QToOL{|39V{sy59#*z{?f`qiIRqp$5{!Katdz<5afA -(F-V=Ei%*(WP`^rf|IZ~w6xpQ-k#hAd?kUgn(hPC>3>g1RaUrBa%)_Q>R^G$s-k#UBUAM+Qbm-QUzbf -Dva!fJfn-c%wz60h$P*2biN`K}nY_I}u^MS`u2ry3bs&Do%*lhbj)>49abzeLm))~$d_iFJ^KKE+YzH -Bz^lgWkU(bVn<6DlW?HI6I-|^zm&HcU~j$yo#l=r^@C1cgs@$Rjrv5Su-O{8n;q*fzxw4^v-_`Y;MZHT@FEB)EfYcaHPiu&c>yoH@)(}nmwDq4 -DLIMB#hG-UJ_*lv%ach6bk`3Mvy7q@3OtzAs`ZU{1FeNA^*xRH$lwgNDX|B&^4JEzfZg;_hdVPVBJKV -eF0Y0lXU(gqn4(>XxjLGA3rPh3+=FF3gU8aX%t#zLI3=ykWGJOXBx&cLa7&?uZ{B3JeNsU97 -Fz>w)K|^n+>idpYF{yNenjZvxgVhH^VELcdy+apNRHk&X)bMELncXHZhd(`3 -Vnhcy5y0_+2+TbS?I2aQPUT#y_L_eqrh82qxP3xT3vo5p{Ms&7OKa*b!^Do^HupZPsN1J}J#CQCPhIAFL@X?Rh%Owl^QpUd^M(?Z#bM>FZYgvK!0 -=)eQdM{97c>jEnH{R4C4rEEKR`~}|O9KQH000080P~d=M_>COYaRpu09*WppofbY?hka&KZ~axQRrrB>T+<2Dd|*H;WSFLvvwb{1PCn`Qy -qu@j@dL6Wh^lORhYn+Qc3B$d?t`VJ-eCOeC6t0!x8&dixJLnc>Ommla2o<>s`kNShDKY-qN*8dYez+O -355UdeqimjN4IP_(Lz%*p?Z^n7#O0|NRVy?4;js!D|kdOF=Ty9W-Ou<~pLHH>e9Y-6aP?qI_#gSoBXn -Iu}sfrg$40EZ2gclQomUBDPMDTOB#sHmHHzT_+>@|eXaG(x0dV`F-KaB66U_>~YCN=je2dk@I -yyRH3(N>c=G+|I6Am9Yglh@v_`N*$Tg-pZ&3 -!q!uL_|JX-|NoxZ^LuIF{9!OJ~i$!YpZ^D8s4Y{MBPrmj>Z%$9^xg2}+^KNF+d8;wW7i&Z}y1=E4=!* -J$77v^0r81)z9t_SmlH=p?f7r;l{S!~U`Wb)qPlu~AroJ`O}jO()X7aFf7fjohA^oBI%7#VF8M07+p+ -n<^tmts})OO%75_rOvR(zM`RG1?v4zO(64mcx8owDhstf-fBcMdFpy2z;UsSxTvgTuRk~p47%dCtc#U -Z#td!b?0-t1F-NZ^3el>>Epk=M6MhsRWbwD4$PjKm=3d{f$1t9uOp?=Y?NG*D;20uK_AV$2=0J%K*Wl -;2D2z$Gl6?_@x`}aCgqokk}YGcvmI;^3~&9(gl-`2IJ4;>q)qX{xi{;<1GL>Qj^o5U(z*bar5h(g=q{ -kEfCisJ7&5w1!my!{r&ZiOCwTW1wFlWZH_R&86RLjRLE}hmjj8CiGL5FQ7gGj)sN@Lpk&J!b+V^Rm&C -*HF=CeK>%C69a)$~FUWms3B(Bw+Mr`)91x1SEY6fr5VEr@#gF~gp%*j^PjehAwqJ~%`w>e2=NWx`@L8 -gcW4M~CKw`fyl47Y9m7bz0}B@m;Ya!c>|Gp5d4Dr|I=1iu{LlM@CQZXX+NGdSw28Wr`_tUYR&`ON;5| -N}(vH%uzI&@a+L^&gn8LN4O^vI%Nrp*s{MJk^SeH7xWiF7(9C -edKo|d7k}%!TNhkg{)3p>>gR&9S1hiTySp<7PF?x~em|9JPXV*1fNt#-HrlNVtmb)l`MtBUtcb8d4*JMkJ~m3{_bBvizmrk`>!SyZS>AisZxBhpW}9=&e%n@H5=O{$x?qcTO}2mC+h2FO7!I7$x-) -gs#EjUGGR>#fn@D&PDG}#&Ql1uzsy;iv#S?TXTkuh$8Ev_?tV4f6Rqx^yQlTl&nxYOpfoL_TlY})=|L -p_KLmwk^QnRilVWm1vVuV@&Va)#(LNkK;Pqjzk74l??}JBzCV9WF@f=b&Z!4QnImOv{8C{TY}}}5q{7 -ZPe>KpRsgbw6^0E`w^Tyb=7G8|@A<O7%7o;hj1Yyy2lmKS`P|?TnZ8YhdM|IswWYk6~R-G=D{vd -jsNZWDTni=K9!}Ue_zQ2&>7~v0{WAoeKiK2e^UVKL(RjMv}Pdysk!q -sAInv8Rd`1AkRktg`}?QA#-M>}ah*|hv3C|e_p*9XLx73YglA9OZ6Bwe`x8P!X7I^j)2rZEqyi6pic& -c=p5x&x^-F3a-6Tj7-pfSknaLcLR+Zfv^MM4bxqw6ke23aEKBzHaO>7^3(E%BIO1#_D9adw -HwuM@zGJkKYQdu-6EZV2lDz7z^uyojY3)F$ix?an4Vb2Z!;o(PE3U+LgrkryXY5>ZSZ`;ymHh{H3!>| -2_z!#AV@YA3=+uz~?v(K1z)s<7qt_nJf-cel{RL@>#yjY?;0#<4UJyH4-|r?i>X(^)Bl31}38rt6cO- -c&oj54uIq0Sm9*@Qj53?xYq>sqo=X*kolvnD?m+6eo-M>+)JZd5qRhpA2i+=%7O9KQH000080P~d=M; -Ssahs_KC0M;k~05t#r0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvaV{dG1Wn*+{Z -*FrgaCx0tZExH*68`RAK{yDcP1i!5eh6S-gUhAOHE5d)()2^&8f&h^wOMN=Rn&TSd$|98&kRY4dhy!6 -{SsLk4(E+C&kVD!%Z*6OJXdL>%fbk~smi($zsRc6#m!v&vTfulSMKkVraoMp2>jNxu(_?3%<$eX`|@* -{-kqp@s;WkOu|jzM{QGwhe7Tf)zFdlhxQxE26n4uGzZsRiF -N;R%Le0 -ik{{APQieVkJ#Pn^j2)}2fZ+2TZyJ*CfC;+xi|W6b$u;JSt899F)Vi!d~zob_)CdgNzQENhkXd45<)V_c+z9u&i-BL{UT?M=QEWFW$XBj~-KD;7n`CRJNka@fE`a0wovzKSE1(v69vC0x5-s6E{*qL#s;ldl$ID*zE{LuRDeQx0AFw -#!CgQJV!;5g$f&cB`a)LVQi3l*FjqE42M8ob?8|9i*)G~u5o15RCdEbN<5c7$e+I!Cqu9cK*++fEl)f -(+iOgP;h6eu2n7L&zx{C~^UjLS;lQWwwUgOs`duQ4sJWc@2kN+VmO^dKSlhXMa~ -@IkW}56tk=>%acsPtWE~veO!wj<(RC98Yd!7TwlUDk!HSSoKlpH^}xm01H -DAlTiH8rnaYoxw`0L|L^pd*jw`wCZIcWQ-17a&q(c@1}EYdEQYGo;S-br74-+#I0vo>S4T##>{JNjuBNt0UB3TbWPp -VD;j@hAiz-eQVkXCaQEIK0wTXv*i_XM`Kf%26h%Ha$W=MEDE&)pMJbTWU@1AGd?9U%dW4P7q*llFU!h -l3uw@fJ*QE--;^fwk-`T4vry293Bl@Z3NJ%Z+SUis+<^iB3ym+Fzj53ULpB;rxltCOuPm#)G>sGR?c2 -BhgyFCb4&`h}LYl_Wuc|qFUzT@TQAf8f%f(98(F4Tr@>$vvujJp0zqb4RnEEoJz(<8TL#exIZX<$Q(V -J*Y_v;T|J;y8l>P47~mi>6ud&m7}$K9@U{M%M#q7`u*xbv8cSFdaW2=cc}gTbP%`k=6Q>pG-EYz9buj -c*inbRc6#J|FmE_CU2k_N@*}LWX{2zw{}fvImx`Jq(hKmqDIkk{hmZHh4-C5TX%V%zCA&qek`Hp}n8Y -Mcl4^MpFfH>MFu2H|9MX%0e-j{0TflmHP7h;_4Z&vZszCo!T;B*p5)Dpb@$C`w?s>b)pc(g=S@c~QE;{$pj-GgfgPhL`rdX>m-7tnID0GZ=dkVu^ -<-Wj26zjJ8FP_QU~sOn2=hcED2=| -1~V3&kR*Le2}1LXi877Ooci*$)VUGaR{42NRqK25tu;q7;tF)43t1m*!GL+huG|8_sXg@zb`nH=5kW~ -?>9?>&$miD*eP9!jwz{~d(I71XepPu#){e~mFKlsnj?v9z?6}yQXH=Fviig?Ud9b>T3kq9xDqVQk-)= -doN64HLq6I91nG1y>`m0pd*<=D8=|0W;sNUUBpLQb*^I$;(YykYHVRK9{+z-7N?jkNrWoRPQf?D>LYa --V)=#x41)rUYX^m!iM)9)xcBh(Xh$ZJ4v(btEvbg*lh>XNWi)LAC-Fe(a_Y@cC+B^Mz`6BMNOJD@U6X -N>*K_6WlFC#5QP$~PMvC4#;}-T`5kcED93-YKdj;6Kg4@NZ>De_d=j_QOuIbCMNs-pbMgHm!gzh0ybG -M$yvjq$RSWT7^_2xfKFDr%#gP1>)Ws0ZexU(h;*c_wW-aj>m^C5D=<}6&!!Eh7mWty?4q^4kdFM@u5u -;BrAev6s1oS?C;bWX -(k$ZN5g|gY|s&kb2@E)m~lGtP53*-R$F^1760eIw&KoC6S{7dP29>70B(=_=si3*5P5;kDM&?-OhWC( -0P|>j#Q4u8pcVx(+F`554|P+NGuu2L)T~Jf`Zth+t=nB6+sUC;l&8Ul15AEOpzidM%@UpuKC0dHp2HL -o8qv-@pQKPY@|=EBk`ZWjYDZ-xTID&uK@GA`*v#F0YO_YpUXK0-gv4&(G!1KIob*6&(~a)FoSwyb%ACDLE4mh= -*v6UTL(!2e$KV(^R=$`Ie}IG0utp16+ihk>27cP19)GQ2AFuD_5&(>e9o?div7DFU{;!ycBWQY$BDC^ -OwuH?HoDYC^2kQeWQ>Qd);+6T$yedk017_k%T+Vqbt~v|Be8L?@NlpVpwv?+h#;=h2T>&f&~v$TbKS? -GmsUAMox1A1-&+Y*8i9ctT$@#nX22R%g%$XaM0{XTG^{AI@2~%_&S{aFG`W-TkaS$7(u5@iZ8u08u*G -fc+Pq4Tg_bsxr-n^4`VMKcsL)zmA7#AAsg{YYNb@GPuJOh8%nG?`2E4 -bs`=a2THV^5Hge8Izgw{5^nt=Br$e1D&auXMHA!pmBn+5do6%bkti?q1)^7jUwo+Kcl&{m-$+-o}I*J -MrkI$}j9PX;3vpFFa^(iVwGGGP-A@AE7k*FDJ-Lbz=ym#&N`P@JAC3M|<=OD*d8uGSAMhMufpPPzL2* -d;{k7A4P-*-n%wUt*dx&r%OK?k?LX_jLjy+uo@r&nmD?E?B{(>ZNqGvr$Cg%?;OCHHhGzDa{fP1O9KQ -H000080P~d=M^e;8_>~I)05c;105bpp0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVly -veZ*Fd7V{~b6ZZ2?n#aerF+cpyaU!MY(Oh;6z(2kupt)`wE*H(I-y0*_&n(5>^G(h2(6X-6?| -!>@kN_#i$vx&YnVJNF-No*2A6PVBS6nEPQN>igW`o?k%dKo4d3wjxU?KS0J`?)|7w}pUD#?xhFf#*g< -%WtfFPGA+jVqeo(It~^xy&C110}W-LY|YWty=Mt91aNl^!$}lRh$+%D;tJ?o6W9Hcv-SkeZL+yf --!l@*Frq@(JbXbp_G0oUUb|U%#i40R^oJSOLSadv(f+JZ+81u~H -(R*NW-)k+D@l)q;!lOIfirU*ze8TyPXD);xeHkiOt08|ZhVC7*MIFO4FtrgrSyfx=994m44LC4b4QG1 -;)8V1#BFK#ZtWE>X*B#YjolOaj;#z?I~Rq_iY+W;MYwBV?;4r;E;rQ^y5RGsy8II+%Dn>nw~uvN7Wb% -uQ%qA@XIiUStfQKiq7kVrv|KZ(Pa_v$Phu+BSouj;F<7ieybyx=L1DDpZW)7>+v0YLypyQ7D*Tk{9h+ksf`6mNi9=V9dafTj^|NPsmkYh0ahgi-7*2lRU5`i!ix;vXql0cZQ -#iuQO3r{j=>F(B`wGu+itkX0CEB>tH3UVf}_+n4gvQ?zO2!8oNG(M7us`L#TzF%P7$aqpp})&u;TXf;o6Yf*rr4&#Ln!>ED(mL(UkOYB4v4$7g3{D-Zl_q -U)r_CVKF!Nw$CkS(tvrO6c%WF-i~kPZ2fv5FiQ`8~v{Qpa~q*#>u~gmFU_$*l9`O6edwnY0XDmV8n(< -V*4)ScSjHn&sy5Jh{0%`EfcMlV&LSaXP&^K0o_;icw@7EdI5X;8Gaz=oX40z$4ZHTIVd-44H4W@CXJB -6YC1yKbH`HS-gzLVBrtH-rkPlCi)CKKqNY79+5CqelQ`@3iEtIPA%iUiGjN%6}!p6(Cz>1>gxJ(cA0= -}8U=W8!2N@4fj}MY9+A%?)=2z*#Xw8KBzF&FkZaIC4EQjG!EP`$p_@T`H=D?1V&`Qbz*|~K)@Y3+NnY -kENdVl%VoY98v6S%V#ofls*#J=}QRAy$4*M0V``vBgidWIlM8M%#mp!8v0I*E3mlESZ5W^7KDP#|*V# -taD)TxW`mQ9i0F&%^&QYdQNp>l)*ESUlUf)7Ja1l-0}#x_C2#uuD?N1}rVn*pA0`x*`c&Uq493xhPv$=88ZoUha-o2oA@(yFCFlq{IM~XWJM+BRe@gh}nZx&@u=m5 -;OG+i8TsPrE!p`aPj-VKtt$_^m0(aIvlhQ&J;OtB -V-c%p&)?9;6IFwVg+7n9bve`w5(^-VUnQy9!t{_t_c`@wV5*<&?X8xvnH6)f+)K^#o?!QT`-`vM%n$e -JtFI0gBMg}4n?!Qa{>y_ARO}u-4AnY%f^h5D2PPyNl+W&R=nL)w#FatM -D}#Y%mOYLx{3?(%q`LCY>0by)mF#a*vV0OjF61gmx7)2Bvj#lb%qqJO_NrzO!1MAl7=98I(ug(eQ6pg -|BEF};RO6oyI5=@V)?>594?m5f0zt~x?nj4>y}k-K2_H8n?Y_ulgXVhR~M+c}Ia)RG_0FTX!NPfn+Ak -KdiolG)i$)5~|Wrf_PgeLMlQGL9WP^Jj-Rou3oP3ot=w(Kc{f#$;$8!wHQN&>7vcp8~Jh?{$s`LP*Gv -451juW8V*)L*-14t7=*<^OBKQ@wf55JyUV4R5uv5QVN+{depSt0fxWVOe)=_T5@9hruYpa6ds$;q^uc -ve)!ebeN1u1Q;uCV3xNL}Sc3^RU}2ZgYv<^h<51V*j%Hib|7?r!UFg5*!T+P36~Ehwtre6>+BSer=GY -)Low1v9??lifcSpVHW4S)19;CXz6^wbEEq}P*$_g5uXcs6#G&zg;&vnB_Lbt#Q_t<+Y= -r)=cuaqa)oJtGnbK<5J%$rHyMTF}k)6{+GxP_abe8AXKJ!nI_JnDm^Q2FC#ewdJW{IzhUhgyt)ivrb4 -^g+H%W6n?1D+6`@|t?)KTP03brRGhUbF15vj}6_UK -6pdf!_K!*hZhj$*u_qAKz>G3p1--pxudBRChohiu~#O|4sX0pG@2f&&OloXdkcU(~=WOYr-y;MXSGoqU+Og&U -W%-#_jG&dbZ7K|#q>C(3nNLH{lzc($pHT?}p%mv>_eMJU(g_EdYD4(8i{q}?$eDms?M_K5qUDxA~;g; -b3^*ja<_vDKHlW+FyP1jzIb-mns{p}kqbO!l1FJwF#J_4l9t!{5lXtD4fH$uyecLM}?yXWqSDeRR;yX -qJZnb*_5zdO60o_^E~fZJm=nnkK@q7KkuW#O*)f1-Dc;2mjY4qeKmJCo$zmG`?(6CibGM9=TfdgL@RV -2#&2{l8WG3s6e~1QY-O00;o{l@>=wyhb?lAOHYwb^ri30001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L> -VP|D?FLiQkY-wUMFJo_RZe?S1X>V?DZ*OcaaCzlD`H$PynZM6pLCnCA9M}tK -YNF4D=!!<=}`KTGIi`~C{zw6!9Sd+9xfgJ>nM85NT-+eq)n{C_mnd-WxJ*oIh-LBVFvo>G#UYn0MMc2 -R^eR8tu+D)e0G2EvI?eiOquO2Xo`2v6c654pa?*GEi!3|K-tPOWw#lBHWbj9`{M -SzHl$qpJwQB!@52o3R&9>i9vu}5GeWE@u)wa)GQX`uA!VU13BL=|6(t?}AdgrvBy69JJw|StqYFVwS< -wf>m)s*cG0D+;9^W;_AXfwo^#(P$`T9t3xwq{t+!?#`Ax69xWts`poeXILtS4Fc{rT6qzyDV^`zZUgQ -dCy-LpWi8fU^vfb|NA>tlmdG1>HGJuyl?6ImyK4-U8mkDI0fDR$mc&jnaI|+#qv|JRyx7rUS6q<;`Ke>Z8rO7wu8X#!-u!tGy4ACfAC -k;!HQHFzp%Yum=m35e=4-HP|93m-iv`l$M7)=7I3{*fXk(}ZS)p!!~zBK(EEFtIgZB>gfyty+3z|fY}TWC*QQ!aL)YbHl~V88=@cqp9o6gVYxK ->1n2S%PXK=>Tp4gFBW--5IDmkE1EKF@IGph+sWwzV;$_}hqh7lg!sg>TEjETRJd)aR@r=BHB~>KkF}~ --(+nXxB@~|F0J1gWI;*T{durew;$K%(u;G;C$EQEE)I1ZGq{{qsa$@_QWmkQ_t*gtdY?W?Cz|gBtfOW -vWuT+!Wz{h4;?@E$ET4_5Nu0E&9W;AE6`>xuKM?d{CnuLuAd1kal9}3W3fZ -**J&~?`}+321g-kZQ9JR~6ui&idjLAQ7<+M6-+Y^Q(2fC83?S-THjVpU+oSthheWJ+wcoAOG9qllf&04}gQrNdZAp(yAZ-MBnlkPrrNm@`q_A-+p}a@zwJ`y?XQP&%Y -oeVNQ^e_Bi}HjhJ!7R6bmFAQ&I$Vx?kkLR -v>kdVl;5=@_k?QJN>F^2tFy6&b9!Drr;akMf5Z?DA3m$nXAJ -V2Xcvj;vT+1bp~SQ}45zw);eEQq&#es8;Ky?PzwZ#fBgfIqZgKjo9kQ74jay!jdJNDnOQ -ju324I<*x9hoy-o2?(o;YvhsuSb#U7uR=1*v)8aqe -9>f&a24=ywW~b}$~K_=R6TJR*t@R!9f@+-=*v~MSP=7DEU>RuM2Rb8@Y4`}{%US2;ODS{B@Efake6_j -0Ifa0Ks5qh;(AM9Tub8Z`_Z)up+}1kU_lFUkbuR>dOmb$Cp9gth_|{}2;^YlLrWtLRP>H=>3H+(N7Ox -Fq*bR>D2rg^;<~76ltxoNd=y(eAg;`gwF3cJ!-yWE2HfCXb*fec9gC4vg`5Zg9&{bGT0s{?d{4H4WwP -AWMR)L|P-TMkA=^Y{ia>l*Fx!OD!;>QT2y}uiZUL`Ihk{<)PF*A41yXHG)SW}Yf(z)hCtLUd_B2}C4J -?!dyU-74y}PCcwJmD_c%2!80E;x~c!c^43~*WX^*)>xt%pi^vyugYTUb@=T}PlWJHFhb?m>DzEyOGW@ -tx?AbqRm?`4(+aPf`*2X7n`s`0f>GX;8o2Nk0s# -r2&l#;(!z=deaKK6p}-xnC&cz+dnsJNu}0HWbc`A4!2|Yy2$GpF{`~oiZ=ZgA^yadlOB)f!Rh?+KiaBsyBt+YAWvA -}a`JO-1{KsCz5%)HOhESQrLV){;k@dc2`oe?mRy(=$g%zn)2May@S%BS$P8$>=u-AS>Z@n>Vej|D9vg -O)G^+OiCah9TB4lhYn}XAr=)u@69@`S1Vnt@UqF(4p94N9S&v>6Z14vIPNw4w>;JLuXL$2}R^iAXjQP -IqGzCWW(&EvAYVPY@v{EcRd*df$QMIl|r+zL(!&zv$3WKNQNsRvr%2{$mx@9cik3jOr3|@Z+4rxFZ^c -N!?b~w8p&Is3wR-)0t9jZ4tI5yy=cgq{h?UbYJ@7`y6u38Z)gM918`xAOtQFc!HU?D=L1+}vEG03HQknBANJxnGTk9dZ;%r -Kf}KmFo6H5zq8aF3lDzBMl%h$0dZiA6Njckpn3H_IN`7InMMt7g@XPr>5r2xDMTY-4yT+xT8NxybJ6) -9hZ#7{^1?Or1w(;$bVcFti*<7d7O6&%-=s_$92TZgU`Kl -MSrY4R~t`>y@>uveFu101lHn@6{(AI_=!UZQCmC%RulKk;+H5G4(sgfN=0^bv0$c2Ce30&!gaAAogU_ -OjEa!YpI*!2tYLzGhm2mrtq2*f+B+lT+UJ4N)Ye#t@ -I+dW9V|0`3QpHRt(RMOw4e?5b`|Vao%2DREM4tz-W+o)n>QJ$N)nOFqZ4-k)tIzUf1mn@6~UIUM2+Qn -=9b)bv=cDM;MJ@^}8Uh=b<;Ezb|87uAJurZ9@$*08K*IWtzc$K*j^~0J+y7LCQ+YYu`!7z6#pvV2Egp -k0J%Yap`v;>U(0-(%f5tFldkQCK#G{xMfLztOXz*%{|RV#jbBbXsHGy)}u)_1BsvF!I@{Zv#>5h2!b| -bP5sTTXYa>;U>xJ+oA*2DUW4X@&=EOooi`w7Ds+&bN`+S4z(BAEBzbaK?&-vd8=&qnNt*j)J;cvZ>my -J)G40E4P{n*6ADx=dKi=*_-kx0+h$rZ+b&mX)g<|s%=AKiSonzJ`xZHIeA|v@L5OfsRDIAB6!F~aT=o -N54yR!vu);=}jYY_?*pR*P<`dvWP+#xNA_s^3J%y3N5Vp(*hM+28?iH>GewvY>{lKB9#0CKa%ByC4PF -$79z6PWKLsf-Ip4E{?Bn04%3I=Bg5q{zBx57uoru#sUgk%)v)ZD-Q*OxO@31@TZTzE<5Hm<`Z4tg(cd -_fs${8kK)RRzzxQA~y1bA;tq@T17kz5xMcBsB2QBf$=n*tIt{uNnCiJ2P9?nMpNr5!d|LS_zNE#J8A2f&cjf^q+xPSY^`dZpKD&6YIHq1 -)0+jJU(7%A+U;`Y{4g!SPOBYl`A$C=G@tQM=KS|;lfoX|3R;ae15b3YF_9lqy5m0^DfYLe5dY5x+B4eLw$-{qi_-6`d7BMo5WauKTjUTLs&u|f1yNkHzt%#g1@2fiMV+HNr%~)EFI -(2Yjq=d0d{!oT4VSyM_A?tQt#|6t!^dAg_5nPyn;ud8mSH_XTpg7ahYOG@YXznOL1hv&^phSR=U@HP; -7&BWDLyIVi}M)!G~19%Ii%&8VU>q$v-|f&`8Gp_{_Q}GRUIZ(deW*z&jf|5GG^hv0wp@CmwVFgyg1&G -N^hVy^C%5Pw_&g(mF!4A#H|5*#6Q`ei`Y}7J{aUs)SlEvio~Mm#*|7k4;^F>%fvrV!pm-iOW4O9g{G4 -5{;eL8K#)!cWBoylKh|?xynl~yw!!|}os8B&Oddw37Yil>LKp{0pgveRHP9i~=#?~9vL|~<8B5{{)Ft -xx1)g$XEO1zqyrn+(o#dx*u=K{~HEyfJYJH^kk!lrd)8jy>g=wi1WQ~dT@OJ;08Hi?HM=3O6HtXB{6V -s$38&3!5Jm8m(q&_gPnIbMROQrtIhwCI|Y(6llsbNGDN&wK-l)rD@Oby2u{scJejbRYhQrt^a6Ll-2A -+N)vG-Q#>YYM11%E&`xFe?ez;2?YRH$ncC!89A3aU4zQxe1DLK8$|;D}Sb^+imuuSyz&lfH_mBH^2eo -*yy?llz_-1gKb9BEb<`p$W9x1lG$WE=0vP|hzdjgRaO@%sf3Y4JXlcgS17IU1puRs8w-GOy|LM$9~{5)RO8pVxa*dlA+`YhuDP{qQs!b?0{}CD4OrAF!=K){=Hyvz*r7M+tVczX(3YO{jq{UQ-ySU`N(Z#_4^Qz!|u+q#TQy<=y-lOUSFzS*FeWB41eoG5PrODK -JJLAtKu2o0`?+~Fi+SXnU+V@F*nwG&DDCu*UeY@{q$n6ZKK=Rhp3dmMpHKP!NJOFZ@Ta>&DtmHBIp@3 -nrXgz8toy4;5_yap#;NAFM3(E>tIb7@yBmzdJ#IoE6>z~(u7+me(HejK{t6RHKt0uvx54f7~0Sdl -5b$lHLQ75@g^d;Vyln-BjEN6SoL={b2=E%YlrNA;h|a-8*d=p;~wMgS9iImk}?vllr(9^k -zz0}J&I|WVTDlg=lrOZO@g$U8+J-^o^_Q*{hhN_IVK(^QQ9mNii-uNKwi@t55Xh@VD -C*oi3}m@F!JbpO8LYlr<3aq5Iq1&GVgxfs_)6J*ajkF4*J!tgQBR;{j8&1ubuXrcjH=LcmAf%1$&WMe -k6*Kdz3)p0UZQi>ZmjlQUAJy^Nm1BVjS(F55wlt|lSV$>Eh7P<-})soUn8wL~yy?bd*D`<6Hm7zHgD! -MJ13v&+_w(`zI{$y*zXvuT^1$zBDF`Ei&*yP;l3rlgu$~moL;in%ARSE^ekr%P7&=#W7H86R!2cJCM1INtJscOJ!H{&sR4 -k>V8af645vLsTmvDBt%rNqL{Y=RLq85{epM2UHqClNX(X>sOkB{us(d%;v -Y&>J0p3_SYmN1JUjVVt{`u!)(x$5fb|UqQn2RCRI^Ws(7UQsIuOXAR~0BCNni9lznfz3*F=t8XlC+T0 -wC#jeC0FUlX5W_lb9m4b!=6Nipxnun6bffA5SV|Ka?1QJ6|mP8G${Uh?7Zqjq@qFup>qcFTcuV@}h1d -N&=3Lx^C4Dd$0_kNM3gEO?m5Y?;i^U_bU1UEL=osp$f6m=W$aL06v0*SX<)H -EYbHn^+R&37*=QDM2?nDisw0u>#OeQ{Pyy6YrH47lK;%xba^+7s(q=UwU;htSHiJz}gJlsR$70dt{*j -C)fEH~NZU`D#Sx%WKcLBVoHB}skWzyt8WJEwPlQXo)U>!v;8%>FqPZk68^mAaRh1hkt1WwXq`Vh~>7I -Bdw(N+AbS2)c@TwjYrUJj%64OT9>S|2u{`Ri?!RU$>ETtzjRCv1dC&ipEuf;4o_7sCe4)Q+H{W0FuvCy-A6IyNH-U=OCw5maYp+a1iuJp~mh&gldmZn@UPa*g}R7tWKDq~l%l4Cur)noLt3XKqi^U3a*6RI*u@j@gd>ET(mr)O>SdmF892wXg -TCX=4Hw%X|m8Fy}fyS}7I>|NU5*LZ6mF*6Q`++ox1_RSMGR3VR5#;sszqu`7ab<5F%=k(&!Hbdh6hG8 -X&^L#ffj1pyk#~YqgHub<`Jm7r$9VTEFagPac89_x|IeM!EP&Ln7%KE}$KV`FGRD6T!{rLYIqs=O%!4 -?sFV#gU^Nn)V$JNH%K@k^{3=C70*!`%`*%{>_P*MZ>sRx+-;aal{Z&ahb9V~JjDt8-4cLPQj9S)~uai -BCNOkfU0WR*#w5(T3$nQR4vyppOD4Qc@q+PL8h~)q9O{VA*T(=qDI~iP}>YVKdG3(%p -DWr}yFtMDG)-a~K3Uxe -s#)W_;Kb8;!-sYek#d$S#GV?e%l;FT7lY?`+>t11c2Y!&y9aiA*%m)lWzTOnSsX73%jQG8+?IP -7xbHM~vK9hO~kqe$V*!d+){m*2u9+CEBvIvs= -fvLM`$&B|!RCex<*u(JUzL5nm4YLURFUPFI%Qo=8#90TvJ^g(cx%lIW8;zgLYq|TC7=Z*Q*wHQ;65>z -N+GDOnH___>$_g^e(4+9=;ggic#5Fz3M&G^oFba7{h1@)7-PF_kjdQ+pgpc4zvEaxcud6a4_g9LCHq?Rw7vOQUsT4i++&B;*;9Xu|fr1Z;Qo}7ae>Bqgu -HG_fqX-toqH%n5dCfUTmV$b_?YaX>j*<7m*YSD>PCYe(#hh7{~ZzJP=A9m=1NP4EQfkT2 -rV5`dOGH^N&9vnhwtDKnu|B>G1=od&f1jwsuKNPARa^hxIx{nY;zKJ=6nEI&Bw5TJu$3zF`oyT;31kO -_&I7K$A~TDW7xnuSd3%1Z(+0OaG`1RWU#q+>aK_PaNzci~WMYjxq?sQp -KnnfAk$%IVMhOYQFYJVxdy5{*`SdbqOHj!?|HDG9516;9_;YQX2IMUh6w-?Cm4pk<(BER3+rvnAuz1%!zs_ER5*a19nJ>S5uO&z!!BAsaN&E(S%`u60A$iJ8U` -z#wjo@QT7v)@m`OpNeq>~Pm#<-b2rOX%hu50{YGeJAm!FLa#_EGx?LFro9{9;M%K7png&5uw&QG{|qd -6!rb!t*9yS-n-MSsD3d~sJ)px=)$MKgQH*38cM&h5t`Fy^b;MP1D&_>@!cy+kI3p#&Aj#6#ZxwBO!~r -bq>Zl!n#&Im+5N`vrS{3An7z576>LgG$FNgzk7s#ewIc6ZoZnuF=Q9%h -5Y?&*J}d(89>nErUcmS@tL4Bx!rv3&BhSX?KmGT)Ls-4MAu!Nyf?>8rwxDYEMR -1x!oX?w#URQd4E!t94|0=)YND+Z?dS$@qV`DlBaeGHWd24hac{WPBVumK(wdcix=QWrymksW$*e(v%&ixR+Gwo6SnGO6YqFEP{oIsHl@R$5*4n|d@!QGfV{4DolQsJz*p+nf?ZV8XH7 -`C&^14Pt#qCAEdkJR~8~ICn_o@CklKrviJy`!y+d=c&E|!e2^myBxh_3DJ+;WG0&@EaWtGqBNR>-mnN -uXvoxa9kssjH#=Yy@0TYobz6g;LQEdn1jT)^SO!x9&F_-9<>mZiROqph(%x|JpAoG7?}2E#&0{dRS29 -nQ-tPg)M!iZ#JJg|F=2#(S%G{*1l6QfGKtGV@bh_Bab%ra}kMT}kd@iv3%dchp=9_N}-yg!Kkz6abZr -e3Txn;XK_ihuw&YjWZOr{$JT7X%Yh6V+XD0&uV5G9FfFH2NVcgWM}$tBjphzzJ_sKR+;95=-O0Z>Z=1 -QY-O00;o{l@>=HHY}u+1pojR5dZ))0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUM -FJ*XRWpH$9Z*FrgaCyB~U2h^c6n*DcSVYkhiKP$whBo_9O1hEKGy=ALBxdFUR%Yy}Ka!xT{q4Qi_Lvz -M67o`{Wy9FM$3FMm<2${J3-&WNz^1PmR8}ZydcCaR#<1^;#luuH8H>KV{B9&Q?2Sx5B -Ve<*tBH-_NWtP&3}2TuUK0gZO_d-b;A)ZnQeygHlD4pIx#+JL*-hfvzEU8N^i$zzcSRXQ)K>R -1ig#)0Hw{Mrncu>$D6TTP{68%jJ*_?v;cgqwlLk+zkG5U~J$nvG@jeX^z39aLcy*85l-Vncx=L{4u*T -?~&;AX(n+DiNx>pI3XVL*yiqkpswEFA&K+(-3jr{xbPC&f}~k218v1xWJncTb5R&Z%9CCzbCxM7AtS2 -WB99u^>UDPpj@?2d60?e=O=|;USLk0LQ#qUwn>(vYZbgPf;}Rlq#c33QCQ4e6_VZ#_!D%Qwg;m+fYHf -lURRWbJ+JJ=D3eSThTV7Ql(F{cXSqJg{q`_2ZRtMH_F-CPuUg9F;poPm;&N5yIzjadeif2#gIXRkwDl -0tTN)*EGM!iWQGAz7q2O^jYb_aajVVb}3*BMwHbJnc1`n3I{#FhM2l&)mbl`GIptx1wv01CzUN`xHpQ -PBFh;+mJf490BH&U$j9v88l`Ib*-C@#DX!;X_faZhH->I*S-V~%p(k8lENRoG#X6;NBWqR#A!{azXQU-E)5$@czy3&>ML* -4DG+@cySUmzH1pf-R4v;}1@T=OJK1u%f&8>kS~Vzf-@;h$V07^1l$e8zhD=@8+e^GHLAVqC1 -bA_6as%}51>tNhko^27Gc#v4vh7v2}7PPPd038yw`iTe}P1@Ssh-55C4<{^IgKx7@H5;QY)7?}E -KksBqltAG~m}Zufr<*?XN0o(aXU?+jkFqHnSv&Nkv1XOR|!tekxd{()-~;g5IJg^eb=^j3%JGolm)*R -g}c~T)6fJz<+()!?Dp9k3>u8qN39*TUiAL!MY|zRPFe>*j1+5M>7ju-;cq{P1x`svtywN4=G@;hG -L~b!ca5v6f^G@_I@M}_VlIB2-cM(@ljU?a`+bHx`D7KUmCIcU6gFZ$`RVhA>E!mNbN=6C-OenjasB6b -b!yE4D-t`o`en26;#r@Lex@q|^jei9EE5+p|1ROLjZkA9qPmrSHbh6Pu@11i@Jjv^ZzLzt9PrfuN5ac -MEVwQa&v)2$mE=wzfHHoOw<=#k&cu!ym9~OVNN=3&q2LyCUVZ?PUUpC{;l)SEwb(cvBq)M;^JmmLU!h -kj?`#pG>&Uf2?-e#nPCh|CXf@(P)=|E3&HggLb7o;RNmS{a%uA7c@qs0Y`{CA$%YRTy0|XQR000O8^O -Y7y^G0R)1qT2C$rbqUqN^XByWzoCjC&j5U`+2w*YHb^yR~l1U4;E4jV~SMJkOqY`=YXBqfoOoOH$XB@xAY -?(N~-(Y&Zctq3b9&!a~1T+X;zDtN)vzG8AV%W6@OsG`X&-7!h*2FdSdvsubAvTK->>qL}_m1>PbVa9V --(t<4sY@ki9;(%6F&J(J*D4&Q#F?B3e&1exURx<+6d_LEIe?c^&ZWx)rG?2$10CG-5MkqnxXr?!=Dq7 -Qmw5kjWJ|94~T_s8w`wk#Bl9xNODnz>4bS`fqSAq4Q$G^x(DTY`HEywFKfWm%IW$Y{GHUv7AE1Agvq6hZ1xUTTC=l*ec9UtU}o8|9MZ -{MO`?pzSh({BjAXc`m+4^6u43a&mI|bV;bx0J7NuOBGAWc5l9(K7UT$Gvm~==$TKSF?BR;fEq}c&fq1 -wu4*I;yRQHY@F75uabv6~^S#F!ZM_eymnM*_THNsz0I38mP016HGOKMwnNnar_8|n1mlhHuY~F+U)zw -vfRknx9P(vaSV-g(6czz`30XZTb54x?Y-uH67Y{W`5DGaDgI1l>$>^@5_Of -K0_iRP}+<@yOFCVKnF>57o=$lJZTf&88HqQ>{w{OwF^RCfH_n%M4e%A4J{uCoML6Y4EXGARb}`aV9A) -8Vp4>lHX|Ne(`eckDAzR=wgZPeZZ&1UwlWvNMuWMO((>af95|MvQDlx_8dV*Ao@aLyM82ZohtkLSGP9 -o)|AtrMG)rlFmvZDm*+i@5`!X@nNmz#LH=zlqc#~pKB8>G#8s(8s2r@1L1Izmd9^iD?`O)PTjHEv( -8L&@@NNo>~v50{;_@f%UXqSc_^ob!Ql(OP>IYw^LC&gZxT^mpit##*QUp>-)HfBoHk;n_Gg6A~Dr(7r -AV5q{Dn18&@iv~wSu^IA1k&SaS6a%sXeuJUf!3=vlvZngQRsq>s~Pa`cUBbUS*lF>wodav~mk*CnL_f -U$p#xYm%dEZnxAV?%R6tM;hFSgjP(*{~Ppbj1Bam)6WvZgRfa`xtDy^2ZE=0xCB_d?)I^yzR15>1WQ7 -q8C=cGZP-<;xALndVvd2_ag_Mjg~Epd-7d1qiKHGcScfCPc6z!Isv+a`1)TGPD6chqz78G3s6gP`__-!xnd5zwR5f%sEHYeT!aq&05rEB(1&L#F>VL;)$O(6XZTp -HRG;UpEm`Oo=2IvnA%}#$EDRhbvma*9b8b;qe^PKTOA3!r6!e=NVp;JQ!m2_;QCm$8S^K}7zoWr{cU6 -W$>W#JlN+rNV|>&tu1N;|zOuf#u8+?`Uy8IjEdnI)_TPXxEP#AyQr^HL3=^_nM)AiXiq?F -+Zkop_03Pj8MJ1gCKMdh8Qwyy7T6!4%f#!DXnSG#2x?7fdt{B$JX}Cy7HFQoY=EY$PUN~CWQT3f*bmvV(D`+@rXyz;TfV*5Amx$ -m638GJem!Y9x&sK|J*`k3D5cHkiX?_l9$z>+Y=^=V3pTpE{)6oxmFz&2j6w&LGv|ILU#Geb?_uqv1Q6 -#wb;@o0lkURWQl-;2*+A*k*cI%S7qR>1R;|ypA+6=%IXGQE4rx$fmFWcqo#efNxD<)<3rQ?NXm?hH4d -Iv$@_YS-23mo9qgWesq)^*F5HW%p;3H7p}q2BM%aM1ls)oj~d+VjC)NWAW-mnMB8eQVDxS%!BQm!Yr0 -2sy!L2rpD5N;><7ba(EEAZzX!M3`0zi1P_z&zHmB!Jy3dRt-5mcW-&_{qcd;>jr7uA^l@Dyq5O2+X=u -nmJfh-XLA~OGW_1*nJfm^IAx7Vfz2eqhH;EDSMZ+ze~6vpc@6aWAK2mtey7DsFm5gCvDnpY>}p=zVGh7yZd|*b)$`gQdd~oBv~0Cds`K4h@_~UQB9z+cxQ>b*tH -jN%rIHSCS+ZuAp3NZE;!XR#n_=(rlgpJtrq8;s14O0PBJqZmm!^ax=4(Pa+s>BrmZ>OI`fN(%H1DZ;#M|aNHs2J1Vb3uq0T%wT*9t1u3ipy@K?13U?W}mi -SuWs)9;T+-Z3AAWNv=Ixi*FH_!jJMoLkf#n!Ujp5`%4Pec%BYKe7Rl^D5BLx#vWfM^0VIp(XQzj`PtA -W&KyV?Azw1dH!&H~^tQ?4S?RPe&TqVd0-mh!JqZ`8fX;wHtX2lp(*cdEnVAXsM -Z`u3gKSTV!M&MN?oY2b8@L7|An%~ld-C9^!wW{>aA(}3%mgtbdf;xqqTGU#Exd+YjL&@b+xL=EM9c5~ -tFAj(iUZ_R(a!JJ-l*Wi&AO6kDF%Zm`pXZ%(p3?wmkI<|Th7@mnikZ&=SBtAlPp;-JwsKAgUPqGKHhdbzkE@W1+BO_F)91}D8)xdv+v -ZxVKxx{_4VHoekcx=Dq9P3qQg1!rUPuWA!VRh*@T#kJ2o#0)=&sDidMI?Yp`{Q%7HQUtWXMN)_cPcs9 -W3XEi~ZO>`OnhrNwDxaNsDwco1NO9=BJv#DWrYutQVPox-U=a-LmKxVlsoOqI7GzhG=Y>WrItY{CP)< -`5(z6YtGxIMBMEyw-~@W6CfGDE4ZL9=RG&1ic;4NccKtdxXsg{{S9*X;FfOF;9im=g@t5Ktka#|b -=^s&pGR3jhGVBme+30001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFK};fY;9p~VP -|D>E^v9R8f$OcIP$xH1(BkVTqx=z#qGj?3-og7wzxJelI$H0*+Qme+U7=WLLQM%d%3Mjaxx+CSvS>=v`ta)Wm?llFv2w$to>f`a>DL&R!j0u -t)4Ya)yx9GQJ{(1O|!fz3YJS=mBJpmU^y#gvHw-D)oE2q%1hRm^LbU4`gmPcg@t%~b@l1A+xY}LiCVi -17azodf3oF16Zw|ym^rFh^ND+3&%Rxz%}Z9)ut15a0Ynjj+E^#Q`@tSqw{vRWDOu3qL3B -IDQJr<8DL{%#YIk=m7)Sx3r2*595yacn8pvzt3d!|Tl3H(S?a^2R2jMo- -K5oI_dd%8XD;W*b|bLpeaM!**)FW1)I$#9mZF$UXh(P957Jdj5?LgUrdAJc+h}Y|Bs_z&aTjM(Pw5)p -KhvZQ!pTJ_cZ!{fOnJ^-;Q8Uw^cQEdBMuq!YbC>_KQj9Ch9@O6S(TUDw$qcu{FsuUUHdbv0%kIaaKKl -{w%RZGDnbvjOl;s3?OvUw1?QBa^&H1Iz$Kr4i`fp?NRgbbmNpfj5H5?z#r=hV)(i(^Lasc%M~T{jMQm -fz;ZmD`Vxa%Sz|c!1ONfQZAwLBaQfa81LUPl?rWx>ZfRkbmL48083+kY?8Nm5QwXAeLkmdC;7$!YZYY -OmTJ9l8NT7;?^SR8|Crm+ll$GpGNy?C>lL=_55;9R))uYJhhOJL;06*F*es=z!3bxg -~Y(dbQ<(?3B?Ec(TEQ=CXzGwYO0NqvRl}ZUH0S(z@8W+>;q%n=L#uvPpEINB}pgX^B{N##YHYiFb3*D -%rw4eR-lw(y=0`BFUF)p8HYZ3qY)@(AQ -rt#(x6ibIx^Xcjw_<}kmYtM)DHj>BeIf$^=^2*AtZb-_1V=~)xx#$~H;?cMn$^B6l;W=YrJ_sV<Yb -)I$AlAh~;{ljfU@Ky=Ee>V$uv}j(LLvHgj#@yfLp#(lZ&=O8N9UC~PDIUezUFL|9(mT;)yn1pOkRuD^ -IC{ebNvOoA)#0e$2LU%{A?QfIuyZJ43C6RM}VrxJmV;;{3c}W5$XV?8sagukX6N$T6R?CTZr>qNUR^L -+AH2Pn!vPi-vsN>K+*t8wN!JTK;+nR7sd;&J#iQyybv(y(e#1dV9rq0Uyl& -*v$fnI9vU)M#a1k#-eWmkzdt2(&*NYBKfP73?E$YEG%`pmftcn_lN`=cd^+IKv>WF57Wt-{;FXRGp^Z -=tjo$-|(6Szuek@;2AGM%FiDHlXRsIaBQ0T~bb?$q4A2%~^5A)vIWgg90)%aVf4H_ugou1ctW1QaAfN -!)Y>$8E!dh=p~G@gEg)F`{}Y&~$fp H{fC!A~bSbK$m6&l_h%0hSu~H+nhK8YTI22#sZDW82F35pH -Q#*0_&GvwIj8rqxGTS~!9+hpx64(wbRw(IYKk8ea`+fvXDx9B{F)l$j|lam2WXU@ -ojMUM$38=Uq^QIqorNBY#N0AaB@LLQOJwpN+4VFdu*GV<%idp*9fIB~A^AmwJv83zHPJ23TcyLfX-et -L28JRz5+EBRacGJWZ@)3Gijm90Q6o;*7V`7yl@RP)&L2brni3@dpk+A$YLW+fU(j0-y#iOrcrPaLNM( -HWF#H&spqU5|t6LZW@}IL0CK0d(dmYCWjfp00H@NFR2p4M-j$HSJOct!kO -AE%VokJUh)zMOw9Y8xPa~+rOrCieRB1{APpxPWy+fxEsjOdtC#O&(x5dgbtmLN%>u}K)KugJUGl>WWq -QR8Vj{a=k4lKpa7}2Z>)o-0VfARBR%K02qv=Yp>Pe@;U4HmzayiBWRGdAJWu)X=_^YD(72k#IMU(&q% -DzpR@L)mm_2s=vRNpA!@GH~ro|H0YoaFiLC{KErUKU;X2!n=7`xb_l9cNWvsV-yGcdCVgWYTaIH8#1? -|Dzm>lhjnmaGiS}$RfyfmK`OL*XnOg;YwmkZy@nWT?Ss43DM&VTK~Z>EZ1x&_T~!hvAG&|6>$XJKZ{l -d0kl%tUqH~~I=+eaoQah!1EKtTiN^hd!%EoywG`KBmBKAo44&mg>9}d~ja;~FHLAcsAyyGxLHmG`oWs -ifl##H4+qePvbx?c|hNx9j+b&mr^|6?a^!OYcYakM5q%+Dwp1IO@Zbc4p_2i)OwVR|NS!QAQ=2Ay;!p -neZD>4qX?yGlaL(;J!-1ggAk-vLgTP^Tt{zhuW0~%$U*hugQji0f<`N9eRD74Ub7M5(x9o=V5quEju`3jZS|cC!VoH*;rDTy}|i?oA^81W-!@1QY-O00;o{l@>?l-NJu>2LJ$f761S+0001RX ->c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFLGsZb!BsOE^v9hSYL13HV}XJr#NH}vQt%k -*qZ@k2-0i`&@@5gVh>GV(GnfAkwlH6;^`$lw{d$iWU=sNT$g9f4{qvR@>jt&ov%-d)sGG59`HyiBRMP6rGAUnNSNtLHev(ad@Sg$Oa);0|9W8LKMjzZlEqXP)SZ73k>b$lOn5@yH8-yg20INfdxwz?|n5Y}S&b$#~8S4G -g9^(wfF7x-5ASLvBciP}RxWkYg20&EaYMuT}T=D3L{hjD;*pDYNK&KEFQoOV_v*11nNHH=#sD5qd>_?`kXz8;vN#2=du93EpdZf0Wk(;ZQ>-aJm-`rhR|j$lC?QQN1EL$ -!L!slgeYqXb;X?wHzgiji3A<84egRMQ{;{>oF`GK7(``ctaxEaxh=-j7*K{0N~O3VWDll*ZqaKFA3wZ -&g9==Kq<<&#)AIx3dy$=2S+NCtNIUKcL1@^BEQ3tS2dGPu&xT`JDp@MQG;h5}k}*x5Coh65c%u?q%0 -~`*BYk+Fr;)EE)=}DtdQk{1SSG%31*kj2Q(RS3r-xaAHD{?=1b3a=1tKkqB&$=7vTHO8%HOyngu2K$r -m#e&s-Z!CfqQ}Z>WT5EG82i=**5ZNZ5}!?w`i1^q1*NNQ((g-2qC~2q8mjK-LJ0a7gz6Zg1gDcCB+IB -3xQfL7UPO%tFRGe_8!ePX_cavQ6uKe3yg02`rOiTxZy}O;DM_lP-q#VeHNkT;5FVs#o1idc&J6mrL2p -TsqKOD$Hxzw$rRu>I9XO&u|)eViV2K|_flUpkjK;U(W%2i{-j;f^l=qgTg-MSc{E_zyN=MKLV?^A5PK -kPkTg2#Sl$K0K5N-L-DfY<&kR% -BeqG)rB|&^2FUO5-0xi0)J$vm1|MZjxw1q0xy@#u-Yl6(+Qf;6g*f3akW%9br~Z# -k3N-W>je~sSw;V4wWXTpn5@2?vR2mS<*gA%oH_-lzc=0ATjMKhw>g7Hfvr07BS3H3^rQ=5!yU4XU{z) -AUyES0CXF$m^&PeV@)78g1?QBtl}@$guL*pRQV}gc9hwLg|6klhY-IU6FNEH_6VL9?Z7jUPjpPkRh^kCzT1 -Cg0{ISFnGm>6_6Ih`t>xYKDDs0>GYI|&;8ojNkL}hr6uORYs!`8wFEhFck{`n5Z+iY`Yudr6`G0&()_ -A$Icl$o)YftfS0@gU*YZH`VjP78#I0=b&v5U9O;Lr?H(ZMMycEYBF@op09YE`mrCRw__5MtrdRP1R`h -~SF4v<)^7`=yC|JhnU=s{TZPpd-W(C6A(?9%t%zCN3tq$!1_RFN@E_lt(XQb^se&_RVh -VwEh|GTXMz99wZW<4|Xf^})8GTI5ucrHtSl3(_N3rt{9(7M4inq49T1NZc35(-%jp_0>tO*B$Y1ur^@ -@r&-LEV3u{G&Ue;S{2%!C%_GZdD&q=iS8($FttUlqNkLs>Hx|JO_#d|47}M_psf9ox5W?lf<(V<(1nf -4nmFmZV-$EoB`6Bp}>hlw$wr@He^-|JJQ8V~D$kbpZWiW+c$y6}R<6woENh0EwF>R&iNIz+6&YknkDC -=GYlRY%h6Pc%hd^$7?+_f7fSo>Hyp6sJS3a1@1UksV0C_EXr=Ba$IxCJ7|(f!TmlHc!@yO87<$Fiqw` -^K7f$8yg**nxh;yfw3;@qY-V`ApER5IGo=b5}xPqVyuHo0KLdCSAwFvZnTwzAfN1V8LT)Fizwmd1yaG -Af=^}n+hvHC)RPe;I_rZIu^&SL|~B9Xjjz)0X#Lx2EnN{!RtA?B5>8jjJci~CO8hPYNLe4o%l0hE@xA -YKEfDuy?DAsm9cqMnD#P~A@3XAVa#d|vU8PS#yBDxDk- -M2#e@crDDm8C%Jcs{=iou}^=wvS8AxEDb$AIkyh`8T%SwJUsk~5VG$yS{8}2sJYijLkNyF$Zlyhd#9`5$zvFWJz>8W$)*O}8Io+_KmJ|r{!yhqO6c1!+2^cJ?5|ZzU#}@=XM{fBwa6^Xw(!?(2%F(I -c74spYvAg5K#72+ax%-G#%RS2dl=TXMtCTs;hLvI9Yt>SXIsoDN_u^{M4rK0J5}w3(g% -2*@iYZ)iY#I5abv+5I`LsqSIk3kFZG5%eLCn381-7i20#Y`q!pM+Kzt4ipD$&#BuMb3DZnKl9w{#wpp -pVTK&%qL+zkB)2fBF15x&uOCJnyGHSv>XRSsXdCV;sDb=z0!$#U}cC#^W!alEaCs##tsfWP6-vT78m8 -mbFAc7SU6oA}(dM{7hDQp8S$uc -b(U=vEnp+x$SiB+>^yGHFGey9_62k&+OVY%8%K&mN`)TBMf^x@{?caOKg$Ucd -xo2!PWTZHP7R-E#lXQ(z?N!U*VF22qhX;6nwvu?1L0bPc2!l_k6oBYH=MV!7FgD(G#n28#F8}YMYYq2 -TenMrg?)tBObj`1JpBkg#UU^yzJuI)4> -424X-I+F-VP(h;bAH;#s)=8}?3tsX_~gwwzp&$&=1&eL!~wj!E&d&Ot=Z6n_;WX#D%ow{Wkx2#WyC|xZqZ0R{dly& -Y^{}a$B16S=uQ40vDU2e&>XWjd)QUg1bHQLS`+P1cFOcU<^ -s~J^;(W0FM76oecA48AE_JO`@!TSA1(OZLToz#K#lR;A}ap#$IM?7n|eT3Jp{QY(I%}Agds?Ci7J(?@ -ni_Vpzq@AN*}}x0Mf~Uy=xHqRA@p;U8Sc-{ol#;`I@K!#-g2jLAvWB_}587hDw*>|CP?h|R9pMe?sCS -9?Dhh$M1Qf^;slwe4H^?)W=&tWutC!l1=FOIj4gsiX68h4zC?L)mOsKo1y0@^26x76nGo;PL7C9#oJ) -`jc~&ux~k-9GRn`$0)V4)3A_ltEQwZ#Tg8PGXPs1ARiKXGhZ(KV3r6m3Qv2t;5cka#?gfGEgBP%tY^% -nz9O5(PeZ`pz;S!gCIy==S3YHBgg$R}ghLyLpevP-jSA9nfte#$aa`Vj_GvL6q$+4Q8epukVUS*=aE# -6&co1bRwS30N5_Y=(aKnCkd3E8zd$4+am0Y%WE%ZeTJ?1e7*;3qLwkqhT1)qT@$Rw}*jhw0J=La#@(1 -me9p`s7dug91*UJ0ciuFqIrH1);-J0e6=y&xe{PPgNzK8QRyx(XpltWOzeW}$%?7we!TCi5O*1UaC4S -o^Y7uVB@SRlv#JM_ah=>VZ=%AoQ|*ua-U;&@;M+vjDoAbpZz%&HgTP_8Ulku$(g*!pONq -1JtGaQYRz!n*lvDCZ>Vm3>3jD0=-rut0q4sjGzJ@vc}bW5yIy^2!z#S=t#RVwDF^0(v6n$t+x4OFLJU -;W?=Wp9Urq?aw`k2kdxN>#wrTN2pegby4Jp8Jj)~+8Q$d@U2SQO6|?{~u;IwtE9T!KD!E=|gB@OH4_ -zWd*?d_UbU`%kL>`B8Vh22t21o{n*47X9Xa}s5_`)9sSeQ6pC&;l1i<=kagXNw_jfV`|qZJzzLA15rTFFV!brRWsC{I -Tw*w0qv670LeD<*L4xT~TYRx)CISa2)cU|pj?21LI$C$+B;XZ24Z&&~9|j{8!=nMo?cJZhy`8hWOi;w -T7vszv++ObhQe4-9>JLp|v=D);Ew|V~Xyi)@k_NryWWpid1ZRk@nHn6_46&`PA$v@)+23~3)dFVBghO -LoLlY(7NgJK`B@2%!{(wa!Rt_0cTS7Rfs7BXfDKMEYr3xCmcX}`2L^`nbS1~h6rB;RtXX;EXreo4YNt -LGwgm6aTb4>r9k6K(hwdO3Mx!qv*sHD*CZ%s|mP;XJBfc_Rv1=Ti7CbD(>puM3NW~>m{N8-Fmcn8bAU|1P~?TIQ(uj7c*JT(i3pBX^)n+*6}2j$<$>G#TG?c3`EdCs9JCqQ;PXh%np0 -E7li)9H0FcB7<#F -GjjiylmjhjX_SxGnqe;+_eCM6(p~4Y&ja4kno1hoN42Ee?1xdv_GS9ZPTY$lY$W_ZO_;-P!DT!?`bY9 -_ECm~z&6?hHUh9Cr?yzfCWi8_aOXnRwHI6K9?xV0~NUV%_UkAUHJiGLK9!h1hqd<_|PaV~${Z -?C~%yY{)rrHHn*|o-xp%&pvZ@W%0B>a_avG?h?y*Y);_gMUEwNZCN*m6h@0fIM+gXL^naRlW=tqg`h+Tj?i>G7iSvRf+1ESJOC1BJzv7(2T5ze=|C+E-npB0q -Bo0p9!cm#aCZHYR+(8p!&kiGu{J&bIE?%t(=6xgmQnRU+Gq(WQN@3 -MV2!r;dJKt5x0b39`g9X%)(SmvoOHQKLLWR7G&;I$LPskL_OMcEGD$+d1UM!EToldJ9QjIz@lFJM8FH -0IyQl@X0SxjsDU{aPtLGXj1SnHiLY1RrDUiWz)6Iyq(g%$DQ*wojxVdNzE`8w^E*ne(O?geAv1tHDcC -N0Kc{L8L*UMLSE`?rn0z6YW)F^W*azZDwhV@Sp?g`HK+xYwAv6QAQNrsEK31m+^ -lvB{aD_M;EFi%L&8QlFyEKY?>CtDnyu$}ViDW-3VUTpUv1sF|V;=#zQ9=*U&i~C8MLp& -dC!StN!0d@>^IJOAiO@N(68aUlG;;L#OSMUi2El-u)fv+2R!M|yeoMtjAd)tSM=mo)eNymb2jBC8$%< -XUnfMQ`|RZOAme;TQ9JQEBI4))riUKW_4q;CR3ZNlATsVg_*_)Bhx(QgpdVJ5l?$B*z9uAAa0_(hae7 -bmo3^~1b{@FVPnA7U`tMP4Vj*+C>I7H-z7T?t(8-^LyFCd`L<+_2$34bYM)?-4%&HPe3spY+F --ohV1*i5OdHJP6u4QDgF!81?6qV;w6l_GqvR&2|~c-uQ@b`}1!lVGdy?;&P*JN@C}$4+AX()(~44wPk -rP~g=s2c6*m#u0+s;qO7-u)EUCCAo2~oh@^;9W4knSC#4&-a1zjZT&j08dg>aJzvlp5KUnP-KFyb=O} -D$)F1gf)p~F*wA^3RJQs_$dFt_Q8WEzmCH;@POAqGdl+I;UoBrU<{hvNC+bI*Ee=a{qSTRl>9cv`Bj# -U0fe`QFonGuQ8JLpdg_w3&}$30K;g?1d`c|8F3e?|14#OYTNiHQhyFo4ki>;pUv>1QkAKa=)0c=nMFe -NkJUc*W?!tEUW3P8UF;ermWNHe2v3FAAOP3Aas!d$Cv8HP@b#M;}Jx2@)ef^J^o+B-eN_b%6$>fTCK< -^yJWPEV3K^wskV{!#ITD27+V5I4138!)fcedu@zhY^xy|O(UJ_pI1O$*cxqv_1g&rD&uc%-@PCAeViH -VUeWJXY+$wSq)VX!zDIGCsC%ximCFq_s30t@jAZI+D>l`h#6Uk$rk{mTJx9rBZ2MR*$Sj^;MUMB7sHj -uzHSSFv4|O+|$Hl^@5MCsx83uWHt$moSIQ9K{`B-U?w09|3V#0~)#(s3!;YeH*`c#Vf$ry=h#DkqGt*~+|iOky54z -Be5WhV^sEe?dQg?{%{&Jsd?wkx%?U4X@W~Z>*2=zfem91QY-O00;o{l@><;00002000000000v0001R -X>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFJo_RbaH88FJE72ZfSI1UoLQY0{~D<0|XQ -R000O8^OY7y2&0?NmjwU-n-Ks2IRF3vaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR -LrZgg^KVlQrVY;ACFZ)`4bdCgZ*Z`(Eye)q57QUsDZRk7Fg#egsbnU@Aj)1q1?x+MUAAQX2 -bsb?nud!ET;j|VVGVlk;jjB-`#zrkB*K;SM$qvEH3p1a?O)i^L)(;Au^vOBG-~HOARSoJ}{8{E`b!J( -lX9RqYI@Hu -@L5T*H8??%arB4rZ6Ty)Z|Cz5*JmQnA<$PU+WJOcayIU9{eh|Izk(2b%z-a-_4IG1FxQj7@iFLMt-c{U>Ahkh~C47Ny#VsXv}ITJa%$Hd -UDSdm5JYqA41N!?+Z7nN)f6Ww))Gv(OP6jm&Xc+PbcxeBtC&q@W-XGP_kO%dB?FJrk@`1A6vqPN=JuF -Le)=8U7;467zZ8b5u!Wath$k98x_ZG4S2nG{lJbk>#|#Te{>$OAH=Ri8QHRI2exieK-%gJru0@(_YvQBB_P(@T$rZzfxf5AS -0B(g2JrbaiIa#U=$2+90wK@BP7r)0UfaOP%^VK=JA{~QG}g%NCfRSy>$Y5!LA`sSq^KVxfQ1^C>5_^5MJv!1?Tp7bxcYO-$sRlL;^Y*(QtG%JAXgFIGxX; -ceCs3)AO0zZ6MD(lwtqdp;{%dryq6EJ(hTaUiIB#m`!_FV))a9gjU-BNcl9(%pae}t{L2h- -pZRv;ly@Jm>=Hyw^#idykCOJeFV)8Xv7dhJrl{z*URNYqH`x -y%`)NELs8PoPCF$q!WGF`i38^Jm!WXL}bsnayk^*mI&XYyu?C$rdo6SYOqqhfl{cONhv$rLr&B>FRbv -R#-95@GZ(B7sP28;h%xY|J1YYDoPxv8!8#*MW|2V4DLY>Sx|sn1M>E=Bqf_R6&WLLkXOg|CP0DIw(&y -$I*BL`$R&q>dE*OEp(K8tz={F~Q9Z_2B97Z(LtZ&`@ -6aWAK2mtey7Dqx+F@<#u003?z0024w003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQb#iQMX<{= -kV{dMBa%o~OaCvWVWo~nGY%XwlwOMU*+qe<_&R>C!=SGxIX5ysnOx5ax&ygqU*pg~F$z0P6O_7j?sE1stOiK -rcwl(0-HQN)VzOcJ&s2VRgTUZjbavIj~OCy!LH&4D22m_VW=ZcPyB}wQeDpEyKwic0KK -$vjvG~?p?Uc%8oHClJHqqPQ%}_ImWOm-+5d3- -Qc|XFQ;wUS{qE>rD(bO;I`+bz5QUpFZ%c~XnfrE-trX6jJT-Y?&3S9T7t=VJQ5onO6-gr}F@%a8fg-F -3GZ-ba;O0acM2?$vB6OC2KGQ~qnbx$^e@3o0bKgT?w-kJiMsCL5FPWloAr;@Vf7APWZ_kq=1?T`mBSoU@KseY(5XJVC)Ux1do~O7wz=aVkNg+}2{e7wN{ -m6nAWRI;ul{k#`5B#vb4u_+5s0jZjOZh{+jy}gUS7fGTOoia07Mw>?dfptO?qFe2KlBwlth~CrUU>l6Tu>>|5l#*uzND1gU*67crr=5iVRs)6LHf)ll?Z?fkqjo?ux% -k|D_ck{&TbGk6SEv~APWGD9F=zSBvpE0<@FvPy_;TLe7L>~LF4dpwtPRm4XeY%0$hYA<+S72BB -^K~{bu2I>jAg&ZMtdOykHm#w>JZZBJmpM5S{e)no>v8h4spmXfsg}qt -!Hn9ir?`fq>x(qOV#X$mIv4n8R@e=sLS7kC&B$h2bXL*2mtPu-N1W)u?msht6chbb8y -Ozn%W$!|ZnY?kIg##af^5`xabX%&x=P6)2|HhA2Xt^++Cty&|@C(y0=+dA{;Ij|;X9ksz!wr|IpbA*k -afL_SX<%0nBM6DO#G)8v1G3g#P)uD4c<3t`4#*2Y2EP|=znr@qGyD$X$;{nA~I#$oq~k4F1BYI_ -6#<(k)}&3W}dR9xZQ8y#VJHhtBUyD5>lFGFt}LFgL6!!Dcu7HQ_yfIY9=~a)^S}VaqS6KdF-ZOw%}0h -_e}RNJ80zg*sHEC=FOofYV_gz=l~7YBOO_01Xt2WY;T=$g=-opBztN_KwtJm2iWgX?1`bFTQh~z6c}p -4xP))}+HR&HFWYEO$VBAR8* -c`L0usb!Tt;?`6hpeqjpuR=8OA|4GALxh@-2A?wCy+U6;vz>u(?=zi$my&C^X*#>qhp1o`@voe5j<)5 -YFO_I-D6tJ%$46XhQ$bzdN_jE@NvnA^rnqoE4nvPBtTjmYE+~&(=3O*JfM@yaC)C;P0@0f<-H#cOFe% -9A~efkXF2FzaloYpni>GfeAVOm7j?%^83X}L)-+3ehm>fuQSyh`e%{?%(O$rM4(F4UMI}~&Sb77bWo`WH9N`_l7R^tVvY)q~Oy1J#^LJ -p0#)E2xH+i!RRxhg;8hoIEdNWvTyLak&f#2G5xjGP)dvK{|O7YiJOLlJGafH%rFa&jjM7eV@Ts$Se^N -18-+Ur-m;`eBbKB<;D~T-Y=hEO}jT5pQQ)Z*bU2k&aG*B^=gEORm;Bdx*CYl!6Ubn#tLD+W;*szMqiu -wmfHW>SGEXNV%lOytN*J#*dc#G!k3D!|Cb66aI2kXdD6Qm6+rvZQlf%S(}ZM_H+~9X!8&95+qSX9QeaQLe-FX$JvMFrJ%QcA~Ydf;+BY-O_xUrt62vC&3!CxBCeJDtMR&1*HQP4TcUr -zP))NAB!ceOn*UdLaNK5+4315X9?t~m;8X8OY4ErTlXs_iMQR_HM~u%`1Ki=j=$7O==|L-Hf4T -k6^Or)^Iqt7{9omv7hvBf;0!BJr5bny`*Up1t&P?!i^L(szISpJ0ZT{c=RdvvOHcK{yjXSlb^!F94%I -pqSNHA>A2g^P9eNj(@Q%eHS3F3Hecq7W0Y+=V)$DqD_v3OJLa%?`g){2osBeY-(x5A6kHMI9#rggK-) --?sH>V@bFepbqjH_XAIUkOOP0_8(&U8aQcLfdJ%~v2mpC5MP0Xsnb2>bNz=xO%pF8ESi{put&(_6Oid -$hZ$*XjQBH^SavOb5W;|{2eLWCJN-w7nm-N<@6#2Lz}Y<+KNvEskBoLh%M -K7NhJ13jP~lQ|@bkv#g}1uvQX}!HoM&;uq}T9%1SaEvTyW>;hOHEM~1I2VbZ`c#Jt>tp+nC+_-@y{CqLBZGU_=1q`9H2dt< --kUTI||k2_0qpW3w7u#T~_q?8`biSq|4Df -32}*kl!owX*R&ocq(0>s -#Uzr=i-bN7j=1vE2`MZn-hX2t~pmT)tJH$X`ra^^z{H$R*d1##VG>>+4=`b$-FHlPZ1QY-O00;o{l@> -?8)D0j%0000=0000w0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFK}UFYhh<)b1 -z?CX>MtBUtcb8c}pwG&sB(zPb)1cElQ1#SIEpQ$S*2UNK7iu&nYcQjfe2LxY9uC^kCA(#X0f0i6zMy@ -frEWC3%Utsa#wDP)h>@6aWAK2mtey7DqVP|D?FK=>WWpZU?Uu0=xbS`jtwOVa&+c*;bo?k&UC~PkjC+Xd`*xG>4-kr)F{CP3|YXrZ(#a}P+*DJ>JgcYaaG(S6M?_ixUju<8VJr`l=)WZh-r}uZbZVW97HEJzutXhz -sOkRMj($}Sr#{!m$6F3oX4d+z#hPV9;@t9i&z%ITz>oN<;(B>a(Pzj)6E%!pN&=-Fw=sAtQnbSE6SBj -L|!s(*s6Xz6Q5&IlR5{lt=WdaSY%R0_M;W1UjwxI_A^LOnLk=@Lp~0UCLryH?g<*RTl9h@bNW{4#{s> -O#P#0PqKx@z+4FKcWY8AmtDsuY}tGwi}Ilf`Q09D8i1cX_L0hS2}vIK%i3oGIUKf<#o{!wl(?lF9cxR -e>}xlx*8E?kO%V|XUeCpfRgwo17sX~{AY^=TsHRjtz#jespuX -&~%U9N>_EEe%Ux4Bas;chWEeQI^ULC`p#! -=~jWacG=9cyXEnY#9>HXDu^O96}Pehbb#l!AP|PSxM6Jh?)~kjh`qi2*T;zceEaVQXS_sgz`NkOa}S{UqlV-UKc^u%yY&*$ZgKc3S1~n*NZi)A#X-(U6tsfBk+Y7*j8 -vF8x6U_GXMwyLy1UgK5G&4%22dO-8~y90M~0-YLx6O)T4fuWT+`>JY(Op>qc7=lS^R!@l*&pz|)ENT! -k8%IC?1J#Too2w!_bC!o)+x)Kh8SiHakq)K@-N7@p$6G3p^ZIK#Iu!o?wA5^MF1KJ(YwrQyH<- -jQwq~_@1d`DIXT6#--=%gH1|gch|bM%C*cTf6^@n^sSsOuawzrDK@WK1v9icl_R!N -o41}9CMq;r532`@2_>%Mm?3a2T#vV*jYy%Xbac+7Z0+SEL3I0F=@e#1Rdgx6puOFJ(h7GuJ3A>Wtk<9 -xY$7&v-TY6q=ITui??_65$X1rHx!k$+f7T%>Wf^I!Mgid{p_()#O;h2Co@R@vDVQmvcDFFONI!6VbmL -}i^b2%n0bpUUzPu6jik=!Cm5BO35!iiWIgGmawnksg0c%;m{Z8WD$V~qv?kn0M#9U}Xfi_g~XE$7S&R -ZNH1S&!Ch+XOgb9bMD603MQ~b5hR%Zq6AW-=->=HMV~w4&zE|A7$4~{D8qzVJG2G5O@PcJGxI&qzTb1 -U$mpwF{LSB8fc+0T|#j=rb#gGwDBWHd^& -E%*F+&hZh%N=wVwBPG{`}RxXmd*VM%kOz?1rb<8jTew7;OXDfo -c=zLR@LmPDCOr%F|@_H4*Q`YjY>u97!%7UmVtq&NmsTA1NKAsv`glF)qmUz($CBUXbg4#ExNRYrU1GC -8&jE;u@S~JR6-nTF==Gzpz1xAU==+Tx2z|MLuS7vxPKFX@ZAOmv4gZ1B+y%yJdd$wfsWxOkh -oUn_6DogJz~i%+Ox%JN6ooEgZ6lLc{Q9I-3Y^b${JQW=K$0}xf9c{C5GUNj&u#)-a#!5tqM3U<_2`5y -9a3;5K(D-(}?Ccz47NS< -?OrejS)vM_hxCXUT%hZcS*VcXo$r0p9SSF2+?I}^&{%zJTB^^c*QNM0%0DWOe+Ub!@4Tpe3ap(7$V3b -e3u#-OuPv5XxN;u9An!ZvMo2JKEAO_Xvp;zd(xzMz~F@aI{fVT?*FXPvADGb4dP^u*q?v4Vl6EF_e8X -^SC1Ak-ZS!P`C$-ip-AA#QrTBUHSHy0aTrRBn}87hgV`(>0o5Oy9SUjv&$#CRc@kauixOsNbZKUNyTx -KMe5(vi0F5dX-bwr|>~Do5nQ_oiUp*pm}kmmI^=mI(1QCgUY?kiI*|SQyaORle;2u?9*KQ -Ay*6J`5}Wiw*Y`#C&3z77{Qk#4OJC@)oi93<6ESqeD_gD0#MUcO@DZntkTo&r+1hzf;mLd+bk{BVrRR -jIUypa-qupD$&2xYb%26(!2nALvc*=PuR;y?>C><<&t{-1$Bh;Z&!(}5OlcpU}@hFVw*!Esh#bV$B=D -mv&{FVpy1*FV4-Nhqj7Bb#LGqnu@j_Se%TP~YY@1b2723ZOc)QZY5gi`J5(s`_kQ{dowF_E-BopzwP= -4a8)UQ@IprKT8+jE=!0HnoKpgkHU{cizX=1lK{R&(LiU=}GlAGdqr@8PQ_JH_%(OHwwFqztfm4KI>hv -8m1f@r%*cjYSN{+9_&me_pj&mk`GIuv$*qC90xuK*_&``gsAHNP;y5-c!napnekX0(_7Jp -+c;&Bds79TyLs^>$ypE}@UkIh4|svDa|*|3|!PU6CB5I1V-T&+sn8&-oK4%8OJ&v2JTC_o>`|UqV{Em -4Q=ezb-%P>frxPpm&!7W5dn9mm$1U!H=z9*xi!%_HX_@ -6aWAK2mtey7Dv-q9VP|D?FLP;lE^v9R8f$OkxbeGx1*@Q_e5Z9c$>9ndHbtGp*|?Y3sqMYp?R6p0GHr7si>^q=@fH -2=of%S3%TBtj5kw^CJsggPq&(02U}P+f6q?Od%C;%AlLd>^Ofa+LhNYWCGnKH1oms-;jPYc~&OOg-wN -9?odY8(@(l9@2v$MCSZ{NVbQ+6qmuY4teNEnf7l>qL8NLNy82|T1`OOcA{jxAE27%>ajJQaeeIg6G&U -5J1g1#)(5P1Hnwu?81!={#R*~eukj+%IS&77Og97I=2K#)o6wDht3a?F4 -W`f5|Cdf{(492z+jNO3oLYq`Z$Rq%)DBjFaiwqpgm2@JIoLr%SYwKjA!3b0}U@J9~b9@T2Y`vMrQZEB -GlgN9zF)*lcFcJw;fhB*0nb0DRkps?*HMh`@kWl+II@LHgp=7pQsuio)0$!SL(gb7*qM0f1TF^QHnO{ -X@a0v0|Dvs6G&V4eIXq5g5=4}EnK2=YG%(1hbCDxA|mGDHImwN5gVQZ!l{n1 -2Z~uvRHa#26@R-$4y-du%+snSAVydaOTY52N8P{p;Q}^SWc`djb2{pWF^VOc-E{x`WAQHoRfo!Dse!e -{dbJ-lvCAZ#-thQR}3C|8Upu!C-%Ib@$=AKX}hBfp9RKu)F?!e*#=5LxvI^uYPZg-0pj$t6S)HFZ*}> -$>)IG^d|#g+B&%zj#!sHbVrl^)rY(8h&_B5Jq*V^P~aN)4*G+e5s2yC_Xd*=h=noM`vp2|eA~UdBU#- -Kp#R8fcr|?ZJnFx{ov_>C-E|K}FMFU{_wugCNEX<2b=U3R2kg3g-+hnzjo1*_j0nx?_wlxeLtya$NLc -r3(jN}clB?lhGJ}4`nzrOv# -E-u(Pm^EjB@>7e!4;Oc`2+0m4GHF2L5)$4*q&Wck77)ddzw%*x+HoVE4Gmi^G&Yq9Pj}hqbZ5|42)OT -l8u$O+b6T$WvzEV!mWZ`z)N0DLutUwt`KTR>RkCO|=;)J@cB(p82%12%y{Gjik@!Ao&>Zctg6E|0I_3 -smL#qxXhSX@xv%dG0KXI>Z^~c`{`>UN19&haL^lYP-XB%7wx;r^7`?ISMmDsyvED=A!eUo -#gRYwY!R~e;k(@+bm+JYM -_2$(BV%?&UBtNsVd+LDB6nE0TWMh%(^6|UDA`hXQk#YyNAMKc5i2}aNi4l12@D_Qzl}2F;GdxjT?C5_ -$8)Rm3AlRQdO#)&`V>$8U29F_g66j-6WNV$z+HNgo*8u^`a;sqlY3(heHwVMhut7s7|9Q7YEhnQmZQCe)S%j% -yv@C6o2WAX*qY`Y^0BOZhg;@oeJ&w-sL>SIZ&b;{c0Ppqt&)HYf&DPdX9WVJ5Rp)I?1c0BLrBvOF8Ln -K?l5obqJRB&%$Afn*y8c>N|{@Sj7#2e2r3xVKydxvWlEUWN->^|@TEd8%!oTv7kQ_L~V{4=)xJwa^T) --GsL^W*tUKJxcMFrxqPMv7BND!JPv90tanX!)A?GA0S=DA(VY|EM+NHG4*$lTk?@kj&hJm;hEdX{oO; -}Bl7iOH(BLl2@*1mE0$YG6XhlBsBR~dhp|YXtgQVJ;-PJ~iO1FZewAQv;3W=YSYmNaYSY+De4+;#J=! -%~YOZaoiQu0bu_2tlQKJbZ73ssj}@(g>%8S)9S1u`j^ -~L5iyP?evnk;mV+Hk>iUAY%%VeqRPh3A^SHU~VkfyoN&QANjeigi942^syx7tTWj-$t@AT!b7p0-m`> -1I5N!J~7P%q$Pr$mc1Uy`Vv?(rBraTl41e3P-N8k-ciCq*saZxQNvX4@(Q*UeQSA?PDTJlt;b)SPeGw -_&q`soN^I>6JFj}x=#JW46UNofB70kt=F8SppzzHX4$54p~weXfh>hH=0xQ4w#fWvs$e@QuyqNCy^jjym_F#^s{N -Xz!<>1mLkJ0s49go&HmwwG#zB)w_ErCrgf@Xq#$EFw%a6AwMk}ScB<*Sfqe-MV13jtw72`$V&fh0IOb -ExTmabT!jqkk@dZc_JD9v4aR;3*7rFzcA%x*xn)m>Gm8vjomm=hwP3X92vO3!xd}dJXTr`tIzHK-(cZ -^BT>{JPHvmnU1nL10#ukAkT)(CRj|exbC+Ipi -UBBKx?e1}cA3g8vcnYCN~FjHWQ(tnCSQ;>n$ns)OqU^LZ-H!W`m=KWcVWiz1qNx;9-`BlCcn+>jXF?EpX(XTlcMVs$-8}um-d(WMpDHU7DzP)XcJyWQlB6q1-;;`6hQI1=?ba0`AA3dW&QUwaQQ#^=~3+D)T%`6r5vST8=zEYj6N1#h2&m -gW-OM}fbaNOVSPSn>}irRK4bi~&pQ?RftTBc>4E9#XrFEq^t3rq5RHw`dk5tYRht}!L69KInq?mjEd1^ayV#2%1DeMxHhmZXoW<5&7 -T%eCEy}6zfVCiFvdk?yJJd&UyvhDltPIHVpjlc)9>--+lME#a4CR@KdNnY~N_JgKB~(_V1%oaUlzG9tQ_yl*$aOLhQikfqB88*2LCXFL@g3dEXgh$UFv^bH1u -3f>&K{U2(&+Gv9xv!SZ^T~GqulfLgvz&Ym3*Elr$O;f=i%ZeUW64FI1lhQ{}zW0 -yBt1dK3{ACR09sB&IV2P|6IRS@;#kL=AcDWK&Lx}F<+aPxe6xj|YLI&Afhy-R8N-^@d-p^99A&@D}fH -GCT*kRyON@16zyRxPvOvZs}cW&NeMn8bFE2Y2WE%%jU?7%12v3aRrkM?`Td?w@pQA7 -|H4DwL1cQZy>gK=L3u1N7|qruz&r#-TDtuO9KQH000080P~d=M-Z@R<=p@P0L%dZ08Ib@0B~t=FJE?L -Ze(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvrVPk7yXJvCQb8~E8ZDDj{XkTb=b98QDZDlWCUukY ->bYEXCaCwc6!Ait15Qgu4iXZk+#nOY`1TV@Syr^#wvdPp2lT1h_yY}tvrYckrHpj`#_kEJ*`v%L~;cb -?YBkua!n>raX2TYTP3yHJfiL$uC87;KWnRADr#f)m?Numza(5Im!c&_VpWkt)6WA!|0^HG63Kt{q)q7 -k>4t574&$sw>Uo_??D*Wvqc>X$0Dm0uirru`SX_Pv&jBSp)ZEDWc4ThXgUD+9Wo>0{bYXO9Z*DGdd97FdZxcrl{oQ}X$Wi1w<6H=7DYcYJQGgbSCJ_dT3e;NP?Zs -QpyQkfCjQiL3&F-CjjssL}gG8MDn2$Ga-j4hI{_DA4idJ)}Y3Y={p~>WB*6;Uwy#u;5UXJPYTsbOLB?-Tmx{#JUJY7$oQ>AjLoh0GHQf>yX8CN@p}U&A!VXW{(EF -US0|3=t5erN|g&QpIK{c@>W#K_%R*#;E`$^>-BntENNP3$Jk5*R7s&n)WS6ae4nQ)RTa6gg*!WGZUc^ -A`7pyH^4!>hKY2s1o?p=8lSki=$jONEV}y3v3%8myy)l)`l=NlDl5;z@WzN?Qnp;QlR^zG(*gK^9{$u -z{m86ZQLdSUc$4bAnnx2cw$>{HZu7Q^5WziLtr6^oQ|}+fD7zNp#>x0&jBSG{w%Y4iZkF07gJEM9Np6q*v|Ea8-Usx;xuv9olOKM3@^DPz) -~JFCsX=2$rbH#|EqFw;H3BLlrxyk++FI~)p~+~u@kcd+F0Hs(pdUcdb8<_2E7xpKIxl9Ga&uX9OwK3KT5n(I68yQGDK8 -gvk~Jq;!SYH0MVkC__2%VMy1aT#!sAdKfDAoLf@&*Sx)|VsC9G5^ATU_XRX*>vRqhlxp9?E;k5fpwwg -B0|OeJQrB7>7Ql7jCrKaT>x!*K_=>2>LMAu|0DbOplKLcb)w2ZQ?%Sl`FS$xE%q3Jq~TtX5{y<)W5J3uoFw>|__GE2hc -{>=}h}Z%V2+rNldDAvt(lvzv@otJUzIdd$$KmB=NO_QP-h2V8529Q3SA}&a$qxWN{$ajfTk4jw* -zErHRtU?Xgkl@i&6v3$0_EfNEopI|pL`$9FzpSs8rD2HBrR>4dGMap`x2j>9j0zPx(%?Baa#EbVm^0| -&GC@V3lMn|Jxn>Y#r`Gq$ei-Bz<-xJ@n7=< -s?lvMPz7)t-~Q+0d9&%Pfnfy)MC>iF_~q>RR`XssaWlb5zUsKUR-mLEYDSOo8=P|gRFgwt?MA7dsph2 -_u&yJh=(?zswL2*D~(o!A%{|PpzT=K!Pc=io>8)$Num*P&bFi9;hEWvNl8EI5&Ub@eM$PUddFyx2*<)O=)xO+2C`R~pbGrw}PZ$P(oGVNhaRAtfY-?(<#90h4OVBaf+wYVv&Jm&V`yu_?N`9rH?a$XMTS=X?C -sK@*CwCiQZ_ets;n1O_{_fOO80qw&dB;hrFg4)GIdr=R4=LGxp? -5sq};c0RRBz0RR9t0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFLiWjY%gD5X>M -tBUtcb8c~y}?PQ)+_MfYggY9;h+mq0=(CqB@{r#=n!4omm*7aA*je -w&uTJ^ObyxvX_nP%T0_%RZzfOb}45^O*TYJ?6M&xe+2gtMa%(5a_TLGYhj8;u)CHWQJ-toZ%_=~dP1BL&58J^j|t50$CjUY5d&AggJ8xFARNp@`BZ8fG*u(-chh -?Yw19xzZ5}$c-!8XoOsk$>dn_s2`Cg-A8g0GX^yoF7qFYEYEGXD&N+z_goY(@vwKhpqh@PB#)K_O%j! -0F@0OQk5~Sg$?@<5P)h>@6aWAK2mtey7DxJZI#dh=007+#001}u003}la4%nWWo~3|axZdaadl;LbaO -9oVPk7yXJvCQb#iQMX<{=kb#!TLFJo_RZe?S1X>V>WaCwbZQE%He5PtWsI3y2|3|9!chXDfe;C0RxEK -P#O1qK9#MN5>;g(d}(O6z~$JCc$t$1Y|dku4s-yZi3$BgL-K#(~x4D|ZuT_W1{$4JhKJ~ -~2==Fd2H6lD{$8)&V2aJOhuY6!(hM{3J-vyR{$?t4$!T8vrC_EiS0Zw}`$(_%mgMux_E=PG8UhYdN)C -Nn)l*RbDa&ix74z0~b6j8$==Ns;rbH+0}gDZM_H4BwUy&baWO)*OU_B8wXkWx=oOl0V*1E>eB0@A=8= -5IKw_OS?%*tXmPv#{PnWIN4{!KuKL4qWLlBty00%g|x}Kk|3c_ba2(I4}zyk{8PF+YDaf-*tAKzFdFn -cf@fC!=7kD;mDmLY1}`0*4j(9~dgiH;-`vdIkJ;1qI`kpE6e!XkA -@QY$?J{+5D3?96Ya1V(hC4cy%L46<5Cu5^-)Q@DhM@G4U=$9%wTU2{VfU9&2k0lGRnkJ))PCXtG|RsF -6~Hv)l!Mg>xvJ%vvWp7w5wW*@WP!8)83W-7$MHZsiY!EsBJ3CA;-R~4c-jnrANVxt)P<>Wvs9G@aUuX -ICxZIO9}DzRG~KTxTJRh8k^;!KMj*R8vWA+7$pfBa*9zxs1=JO6sWTrKZDFCM=xXQNz)kJYUy`6{B_( -5TE{9D;utdB=f{Lqr)&-MZ!qTu -v>>U!|fU%K!%_LxHSu0)d6{GNgAvJ6hl%t%;$_v!aXdR7%Y&pbtF=I$Q59M26Ntzi2RruK(LA(f7^}Gg!Y4;pS2TuRF0OGDq_lp=<1@Ly=>4yl+;DFAFG -Gl^FVT6p3mAiMs5AS}agC-i&HUsHPG5>s^Dy$9$Zr|V}G)6nrsgfy75 -Bmkz82Uw5!;K=GZG9*wl{*?m&*71raFtGu@IqDkbuV1#ySEH^y0E0IRV$M0p>-Jj#OZM6tmU+MkiX)T;cQR{0aa4~K_I;xj#VGw%O0IMme -1*fM=rtSoYwSeBkTCdg*U^2AX~W3w7Z5PEj?KIm{wA!7Vh<#gEorjn#57rXxJE+^#aB%)yg=M9&`5YZ -LuXzehEy0*KT9o@4g{Y0Z7O?0%+M?X>2cYWpQ<7b963nd8JidPunmQeb2AB>Pv{01g0T0MFMGbXhNFUBzW7V)JblMM`CBT0~Ex6 -$97uhgBGT(FBIQ<&OP_DOTlZ%h{U5qpmoEAg6!xJSOC$vfxp#xuq@<#^cznSbhCuQh8Ms9LUeNqAktL)mKIoy)9725ObG-w0;RT? -e^hCiL}Yzo#ap-|Os6H=ywvm#JZn~}At~oK_5uhDNCs5KK31-@z~n6>Dc|N1j`fshmg^rzdn@4BhsU(1g{ccJhCs7sXV(UbyH!Ic#iAjth2OH~e=lOn|B93y*PyTC@CI}W+#Tph1gciB4Z?c{P)h>@6aWAK2mtey7Ds3Q;WQBe001@u001@ -s003}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQb#iQMX<{=kb#!TLFLGsbaBpsNWiD`em65?}!!Q -s;@BWI#y~Ky;19B^+&{HYF?KQ0Bm90jRgtShYzprEkyO2_-E*8i$^Jcdv1v(y-KS<*u^&8iHHoFSasq -1?FK8+-g5iTR~NC6NAeI^S^8`>IuBuEmHoNSbAYPUGORvSs-C}1bFQX@ ->a7uNSotKo`cI&4422e`_1QY-O00;o{l@>?P)Y~Lb3;+PcCIA340001RX>c!Jc4cm4Z*nhkWpQ<7b98 -eraA9L>VP|D?FLiQkY-wUMFLiWjY%g+UbaHtvaCx;_dvDvw5&z$xVv!&a>B@{8_s~{2HFXl@Vl;^ZM~ -5qLxKb-}CGkRWRX!rChWpt&GyC8!N#`zyJ0Vaga(8y-H}9dd-CmY8tFxUr$<%c&H=C^3oSdvnxnofzZ -WFPuGg(wjuLw>Ud|t|;5J|m&t+J`-Whu)sJ$T1&Z$w=lom(GDS<6J`&aE54)BfHYQSIR*p>KtTi9Js~ -@r|%7RN3vx$qBH^W`^NtBkH$sDas&@3%(O^9KxC;=T*gsp+K&F29Coi9rftZBXyf4vRG%ErsODPbV5( -(JlV369`m{uyM4_LS)Q|`6ucIUvqBv7c10B)*IU-?Q+S-R&pdBLHD;A0YV}sYF}z?a!79EM`4MP0l}P -nzNGJp8^paGpvjV8_3J!uFyvb{}mL>e!OPNonY8QS=y>q5TOq5n;-;CiAPiN2Y|1>Mv|7+J^ -;0Myx<6$rZm(4ht3g7C$Jv3MWy%;$W{lV@8*lqn2qq}^yyP^%Xj-+M2Xxz9fgX+>yqt7d8T);;IPdAR -{2?!WtIZhfQu&|{zeHyU&OCJe{6u6DOk=YVK@wRR`FF1Sg($350(Ok#Fop~Jg>xZ`TKD}1T_a_+m$jW -;NVd5{T>*|3N|HUoi6{^lzE=5E*#&BJg-`^rpQHAowz2z%T}B*l2d3W9GFI66W)+`mZ)W+*W -w4)#M>kTuVz7J>!-WJR-EiIT~+J-C*P=eayYY{5Ul?>$(XNJWtdQZudHg|4EW$h%GMltg)qQ?aiVAmY0B)X9-+f*qy#im!I5Hxhafq;mOF4iQB>I~Kb~!~%~ -ts-JhQZTLe$6_n?l^~!Er!2BHai=vLa^qXPKeKz)drV1}aYEQtk)kn<(MdJj;=J)Wte0!5?Vf&<<^X_ -(N-yj)mX{kz=_eeZ{hft!wKIeHH3>&?@nbJg^-vj^+v20r+Q5QA;SxBt=kUD;(w)TLFfIMy8i3s{#7~ -tdxZrKL@x0W|BqS-pLw~FTondmY_1v1JJCh1~jvUa92p!Rc08)fi!MbyO7krlnL0pd(zjVjdrW-;kXx -lxG-i8V1@b7!-W=VAbJ>Sd=M&)5ntD$^dLHLA0rJ8*eL#VqK;a=<43>;T%!WRJ`?LTXzn-I+Am74%xM -4t^N3J@m<~GMMeJ?1%Ub{Hd4<|yiFF<1(k?-Z;q1*~@u7{glutRUYF;-O4N}1_Cg)@LdWK&Y`1Kbi+c -0o3`Rnh4$RFW~pnuxC6ZKZ6G1z`B@~m>8#uI^=29iOEktS7ms0|E^V}+*AYxJ0EE1NtW^3oSalTgRFP -!?2bXrooMD(!h_pBQApqR81KxU!{_6)6-w;I?2E!4Ak}kkyPiR!TW!w@_#?l2L$&6%&Asd1#5zB2=UZ -Bal{Tl*7XY -rl4Za@TP2WaCS&>ht#b)SV1|+lF2o-Bb&C=F-1! -9W*(nR2v46ARuFcStz)haMXJ_o(ltH8x0qRdNajr?1KJO^^BsxbBfV=6sDU#_jB6gMzYnB>j%pYL`RK -1hv8GZj5zN0Am$;zlX!BnkC6as@glpwh*HcmS@Y%?XQ|47RW5A~J*n2L!RVbRje)?Rv~w4zK2k1 -=8C^3Dusd#Qckm^4m_18k7zB&H&5dwuK8$hu_oiV -jHf)GQqOG$wc+pS`Ol#4{XHFD8c^Z*%O*J+R;0hH=ZAx;Z1;p6RYYn+6M&Z7845;btN=-iVQ_k?R_hq -}59-SmWLD=mnSvNs2T5MpM&D71iW@pPQ2=u60*6m80GtCa)9NgdyFIV7RhDP<(GEhSuJEwM#&Vn25r% -(5B5NCP2nI;M8w<>2$V^yZhrLv-7VcsK0}BXY3NbGPWffXGhh9FgB2sP(d#53WdW}0avF?Z|H!#0Ls- -p3HyA+%#ZkYy#fS>N -n;XJ*5YgRHE62IIcX8~+SE96q4`TwmRL?}3N1#{5>0QaDoB@@tBB!{^(|!GK}Aej@`htI>zEA&SE?OP -PgyX0j4B*EN9?jfEqAJbv42|FVn@Z|5MUpvz;!D`J94d;;f3>S&h<&PBw7e0n^MDv1C -7p5p;Oa_mY}m|8!$LMZ9?aP+r=)KzT-+zRT(3wuBDFvIOmReb;E -n~4C=%8>_xwib&9g+|sY<`}z;04VQZ0G+}^};skJ461VXw$3M(1p~^h{hB_Nah2r%HaCJz|^Ta_1)px -63=rmum^P)dU)EFY$(`Vf*0Ueq^X?&_Vcb*%VVr&%HZdLQ=u`x8gmLUul@=jqJ_K$>nsO*4NT9|E(pE -gq5QIa`W0YeVD<>JZ<*7XWkpho9mG=4+H@1vl(}ukR6DAFl2_{M7~j#DYfwh=sV;dUhKigU)AbI&FSE -P|GtDBFg*R2zExTc8N`ph)D=T8uV=I1i-|k1aA?(^ly!GxWCSvEH-U}JK1t(1AW#zKV>D<0yA=H3jeZ -@qfK|6ZALuUX=2}nVN$j)3h)0;irdHb_-zAbwGtTtqirDd1mEItW1mDvgtB!`8K7k&#-!Y1{G6F -aG(bqtbpu>wv%^bf#ZSH$=k>VzSB?Y+;dOG@(r$Rbm03WB87)A!u^aHSv8vj^K%n=U*LMwg~8a7lQAU0%Sv1- -gN&SgS>?hp*XqAm3yXxf?7mw4B!di+~Euchp~S{k`xba8*ou1v1LsJRk~5M*&~g1s_=Jo|(**l#8i2u -mFjgB1p+NVS1*YU(7EP0wHZv#E!bFeIk;2QATe^Y`N&t6AqXC*qnu_-Fzbj=BcsSYH@n`O~Y;;ObXSdAc`3FFIN#Bd`AJjwr}$z1e&~l?+uq+HJ9r -@E{EcX!o^=GjX_b$`@7KVA~&H5jA>Jjl!uJI?w@@O_y3{-f%o|N9d*4mwJTm2&1+ds%4z-svJd`9Dxg0|XQR000O8^OY7y-RBv$f(-xwH75W7G5`PoaA|NaUv_0~WN -&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR>?X>2cZb8KHOaCyyIZExeo5&o`Uv9Wr?q?Ci`lFMG=@U9*KuxC*6Ya=l5j -oUO#CST1)1RwVYZvn09|SF2bq9N9Yhe!$dGa(s%hGJXt`jA~A`^E -p&zEVo{>ZaLCXby?2Q=d}$;GFfU9g)p5uLY})7kXq8n177tVAcw1kc4R5=&mh`7EqcckEgs%aYW+Yz= -$W>EzjN#Mm)=5GrR_nPg&1FoZCw!|=0Hl#2DM-V9#c_%`F4nM%Vakq_8-a{n;9xxJYT*xmi@!|nL?-3 -$z$&xfsZ-A=InTdo)$|I#s9V%M5NYiFeAZn%QDTHaP(w|7|BEH?07hVEs2`~L2JGM!%E-W*)x5D)0`^ -{2Df`ZvJixq0;Fc-%Fyrs#Bz*(Eav%k1$47@MX=77C@+y-x8>CUoYUY=hyyhj&vJ%FRk-YScN#gcG*P -^Nkvvo^Iun4A$wtWE}G#%^pvu#9ih)JY>%zn@wdTW?)dCwcQ3#Rm>ME2-EfHCQJVz!d#s$aOx+UjEA{ -|K&LW^#HV1DujAVE)h-cF!CIX140JIFS3HXZSDndD -5;zOcYuCYB2{}nou-J%HnTc@6dRK2Jr;{=M-ydj38^cHsu@rJJdLaESM4 -nqtq~atLwHZ9wvCGNy3m!hP?Mj9#Y}FaSqJR^{> -DEk%q~eQMu$vF>-Z5U}E9gar+5`sd{nhvE{pDEcrLLw^Es0x_!QB-=B;#CWn5YW9O|*`kitzz=O>&DD&B@r$ -oFQz<|>{4bymLr}Rg)rHCkSG!V8)UL!tcA5@7@?3u>}p%WbkCu@s6749z*u0;4WTcs*b_*#@vX^##IB -WBLlI7blSoP#o2v@qqfP(bA_itQ1kHj)BtTV`YGQpV!o>?g5%@q2a1CWiXw5T`uS!p*`Jmx(knjlFdG~EN^ugrv@>U6~eu@u3c%=k<}S{#_jf`-)0(@8!Y9LC24Lrx4Fk?&+aoWVPg-wjnEF -;Yjuq7uLvj1nka&R^T;TLLFxs~S|n_a@WZ<8Y&Z)GmBW7h&=SDq0iA*so5zg93iH(QKfvZZ_;COvfSU -t<0TBb@>{upN5xK+0$@2mI<__!(EVtHcrQ-cL6=@Yr1>M@~ -jX(z#3qrXhmA)&s@e7o&rQ~j3HP)BR;7XJ#~vLM)o^2aDm)&DIXE0a5R)i@(pljlS!y9-sxzz<~tU03 -Yaat$UxyzdMa2YA~a5pgIYqOfW2wSm`Ee7++6x%B@BRM5#nr=hDxVSA~~fqRr#q4tvdB-;dCr*dcLtS -!zwuF4)%x-W%7q@;tAXy$r^s!U)e%HcT~fM{Z+dTPaI{5M=hil2})A?et_#N6aOq}JrHjp2dKOF;wHG -bQ>Xsi1e3!+@`X?x{P=1gY6Pm6r0zo2c`Vlp-wy}uyYI{y)XzmAjD2zWAAZm3)jFLHIXSWuQt%S?Au_ -m0lJ`jC1Llob*FHKr(tpPkZ565PQNkyEO88ceU`!db&_EeWfD|z#nPKUHftb;TXMC+cRIo9w$S8|l>? -jpCs1W$Gy!EQdZ#*F|S>+l40N*H-Bl##{TX6aW$+WHjGUzc=kZl1hNMoJLx;^R#WP5yL_7RKZF<%icj --2_Cs#Kr>XPZiBYGcs{Z!(h+10ZI|gVmNrB1P<2bYuE;I`rE6 -{$HZROZRmCV^MZb$T$v#2laW<-(Cxc}_$W-Q6G;f4@AYw{fM2RdHoM{ZpV>CeV2-5u-MI$%&2Shr)iN -{YbWycV{M`kPw_Vij0rdWM{#M)Y-))9Z{$uT;BG+Ej56pP4(i|zNHsfMn%CFKI*;J(2X`c(&*pdUd% -KAP9+gSjEQcA&={#7J$w5CUS77$g%dpeqrWH9b4g$vyCHzznPFHRe_hawxzQInNuPDCgLpkUUv3wHy-t+qv+3bM+zo@g6>wixT)YCQNpuOonpBoUhwh{>uP(UQQ!D#tA42#mysH!wIBD?yi$Ytzx`)4Ipb)!JT!GVMCH|fhB&9@ -iqKYFIuQa3XET1r)EyAs{g2kWU~p>mlQy6m6Ny@vaIZt@La>U^%5&*v8GQM4n>$1(xLF4AYwucyGCty -XSB{pv_4AZt{1&B~SpghTCW%i^tsDY~wije+!QIKIVeO`Qm222>7f=~nV_MR`cMjP89e(tK6&(rPh>O -(sI^b{%wh9NYVXCA-~-gi2;xKh^T}()p?leq0G1i?A1bD6mlzC%p1-$Ee!iIJ}R2Y@luja5ZtfYD< -#rU;!C+EMqLD_f)hHiw|X%x>JW%6A(Sn~grJ3pbSmdcADVcqx0Koi_}xOyZ}uTb8dX1ydeBAfQD0K}{ -JAq)F=KW`tq}4ysg}EXnWQx?|T7u_UmeNLSF+a8qZ{J?8(u@bCE=>kO%ez$riL>nivqaA>XES_$moD;W`Ds=rSqH7Z+*VWXv_Oj^1z&8lgz6eZ&xal^jVd4N79L7aNPPO#QLNXK{=ORl -$_bfbSPAVWBN(y)VCygWS>Fb3{6_<`#oG{5)BiGR#r}8So%flM4UrNhdYtT+$>WNx6p+Z{ -C0JN>twDgGM2W7;F1!PMHp8s*_2B2GG@SsJuE*K?cD&$Mr~V9QbR9_QfRUt_aaU;>&xYg -=Q3aH%y=$j?cV;ano-WTDq+f-@P>3j`<Tlr#bwSE7HpMDa0`iy{}z-CFKnv)f -@X)QGVVyEKVv+r@#1z^rs}VU`RgH@B0UheKDHZK^51mWOOHchBO2<~8#E1+wE||CQ9Cy}4vTr@6aWAK2mtey7Dwy~a9}zM002lO001=r003}la4%nWWo~3|a -xZdaadl;LbaO9oVPk7yXJvCQb#iQMX<{=kb#!TLFLY^bWp8zKE^v9(T5Xftwh{iWUxB$B&q*^1?;6)l -%jP<9ZO6@w6MO1&`cZ;NNJ32!3ILw0e&}!S?&5`jNS)7VJJa45OCqpX>^}SK3w_D%wu04S&AY}jqpFX ->GAnmNb#~4=BWkufvaPlIMy{AuOt!VGxE0K9xn->ii`jvj$t5#;QOUJ*+boC%5qh%LY8Qmd-Ck+S7O& -sD{qyrTi9)D+=+c5_>CEYr^h3cj$Wyn!M6l=?R?uoEgzt*@}kU^Q -IG@Q+Hfh*aEUT-N1#PP8Kh{X>OTX{asXcI-5+uT&(J}hSL@(Z#pX{4E`=IF6iIC3ah2K7bMd!q=O5vw -lr+rwH026!RH-XrDmv-Y+2VzSSbwLVpC)?wXmITofLQGWHPB5ZcH%7)G65O5+1NhwQITQG{-}W2|f4E -46As{Rs;dCT+P5NJmO)kG<@4D)s&^%hJV3?xA9~+poODvzbGoE$z0hCz9c+5o%4*Bhz0g -|L!jL!8o8fo7+bq4@uQ`7nOmZ6x@|&C4?2MhI;j6|$&IpT+X1r;fGFgY7j~y1%(%rmHFe+OxMi>9CvO*4;A1Sn8Z$2CI5;Xr-fp^TLif+iSIg@Hnz1KHW -6%Es^JC08hGHQtXdW+P5CW+YS6`x4?5sZ>}r%`FbrIas9iSr>o!A&;IcAn`ghjej``cQOafW?CG;VEf -+-;ht_qsK>$MNN}y06XA!kP(+v%0GVcYKJj#EFvM+MpO4x%CEuLaT)meEjl8}d(Qb32?<;}GRvL}KVJ -kG_vKQr$<;MX)}Lwq`CMhX9iPR*Q0{&?7PMFEU#Mas~S;Ers~E335Qe7;^&0Bl7di`<*&8DDLnAzhx2 -;y}P(?(W`2&n3L^J#6%pJ!kL8Bv*#L{OLU|Rt<7wt$>O_L#SQEF>)xHJF-<2r&{MkXFm28zUX)nV$bw -8bd!*2=^nDJny&5S?A(rIp -z7dst%^a0iDjn;qA_fB1J$l -!k>W%R5~L)t@tJik-0-tRN>%(sw-HJ4Pni;6={n<&=1hdX2#mmEPCsX^lEXwj8!M=Xz%+Eu!3ygBfr$ -=IUe1`@hl$Hc*m1xxPGe!>X`muiR(xwgn#Kw7G;L3uvN{$QZ5Z^8l>vSdgtHx!JR)8SCn0jN>~(n`xe -_Es}^CRlza+s+C~vca+`fY$7&I?Xl;mP)s(LqEZ7AfAJGzD6?Sjy|F*4_Lod4WJ_{66QqAPrOpiroMV>WXOpN!JC1;kkZn;;Ec17D$ -zg#ngyqJ$HEaC1)r=L$lohC2(sGQ{rD6%<3Fc6T^ -yd>NsnPG{X00-SgviNexC`Pg#hs0K*^nbL|;8Iu~L7cy@~LHv*Z&!yJAn+G;SjpK^}7Aip8RZT)bG!a -~sYRd(4v?`tIX9>JTA^Z&lsvIka~JQAp^RGdw2I9{b1_TTy*Be2PHVZ7>)Q-DO5Uvit&e$ouel>&gqF!AM<5&`zfvJqs>v;kQUtw~zY}a9;6X=MGOw{1-LL$R!r(|(~@rj`Hu@YMR(R)SXeamjj!6`$fpS%9SLl*K2= -$+KpL45?%XOt$z!&a!-5OaMa%~KdXN)kftX6*7|iT74?RtfpZ7o_az|Ddmi$Q-3f?2#4@p2Uw~3Ub1Y -z`Vdl5T)V}2X53}K|L!rygKI8myqO;7Ek7_(8QqI+%&}?8;0d7A946(FrCf)u%)`6&O*H!ibT(n6)B9 -oQqrx^j;ji-AMpi&}_1ozu5I+_we1G0LOghwI7Vm(-7)DTL?Djg#Ye0napUTpl5pOt&t< -zcw`f^j^W^u{ejBfRdB?j-ZqjdFNQrm63xA5K)$utz&3=j|(!tP&?ya0M(s#-AkmIFzrg+>}nrB$w*$ -=6oYp)B_>B`x1yB%8ctnbX=>*{MBIvcMtp{)S%bzno-KdI>UCd#Aqk9?5Cc8??Bp~-CH%RWGR4K``h@ -&t(J25%_Vm8ni1_28_OEcpT=+WhGz}I+!}sVqBiqWqhN71Yij|n<%4K%iax7k7c@fn64+50P_P^qNxG -)PB^<&E%2pI2~`M(eYU*P{2L@t|t=#y*a^m;@Q#ata_`>D$iIiVuYpu)a7kB;v=-5>jG;&Bq%x^b8g9 -AX=W9C_H%G{(P-N~hZSTonJPhKMgS*j^clgJ%Z_YGOh@?vKgR?zF{;Osu9TFQ>x_|4LwZazy5f{GGxO -oS;H12TJT1V!pVP1&ch -r9}SiX$+!Ca%+C&PF!-cfj#$HayIL85gngsa)ka{e?2K*;wQu<&oVY%Ki7x4GftXQgM$#-yJNGA{8o1 -`g3jUz`r?k^rj6Xk>CL?77iT)3oknYv+1W~UV5D@G&`ed?y0Z>Z=1QY-O00;o{l@>?a;^|rc2LJ%f761S-0001RX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L ->VP|D?FLiQkY-wUMFLiWjY%g_kY%XwlrC4o`+cpyZ?q5Ny5lBWHdD8$z&gf=0O_N@MpxDbL=!eC^OG} -hZgc4Pf+Kunm-^`GbD8IxlDqzeLaLbJq?~T!BGMThSt+;c>vMY9%*nBH0k<3}bTerpEt+oz-Q3CyPzy4<{%nol#!#9cD>U -yMozi_!$1fwI>$n=K~{u8WHc`u&AFZk=g!*BZe}ZI}^_5f+5Xdc%0l{{8v$E&KB6W5&K%Q7~>92O1!+ -*&|miF_EZc+1B~;p+OH0$CR!dJMkfB}D|jvg}WxN-JLx^0>)l872FBEMqrf<32){%wecZ5v@yi1(a2lSs4{W{Hsb^A@tWsfpSUUPi(FS=fLu!@-HxH_m@Bl08T -&&dkQBAd1yk~?U~bD@*6nBPIVj0c>XZE-E2DbZ%?fv~bT|WXn$pHtPhVloNAwZwE5L_&Ma?x&es|r?WNF3M -_B><9)ZtLO&Y+>UQEC59oAq7YgdzJ&%z$;eq9c|rOF!7D&PVFc!EF?E#5#A%2tee(3;BmT_bEs#|)~# -dGb!MW_KU)bn2F1kIUi7CA?^r6bO-8V3dvRntXKTglue5Klq7>WmN5Ph0bfq6fG0TR?y#K~4z~CiYE+ -?a{eDmfF`vTe98?L -3#AGvreTkpM$|q7MAf(skt|Cg$uHTs^00=<)bGKLLf8pp&shRdN@4-%<5_kh0_K|$D`CqyRzie`iSqd -zQ?ewKbS6D;*hBXj{!!NirnA_r25k1Q95MIXe3pNT{2lobWLNP(0^UK--UGxKONkz7Z38`XRZ3%B3LU -->N>+Any!ur>Lf-I@E`<0nQb{KaUn@Y!(zD?L4hblc0g56Fkzg3E06T+ufiPpAygATa0!xE)3rR=Lia -W@wBI584{#H_;NaP$TV?`(eLrE*G3W(ZuUN4{nv87&+_6#**xAn~7#aP5(GyFez)0tj)4acQ-OC$5 -T${3>WMRe3tXOpTAtfW3PDP>uKnQ@OPq)TAZ$fZ0t`9hSX2RD -)g!w)=GG%0uiIF@P5Ye%C5q{Ig)RN+wt#-&Hdj>7kPm>1B+P!4dG!*S$rn1;&sgHEN3zYi1|Fv>!5?V@=D@=P~QR$K)^&=cO>?%Y<_Szn@(-sSUq(m-p-nMyb1GQ0@otgU!14@?t8Q!tRq! -$E^-#Q6?OEwHikIy*!9ajfw!t$K5Vu@oG5t2J*vW^%TdV4Yn7r5i8!(aT5-^VgqwoHlhzYku;OGkQ*> -;?@JM0hD+!yhhP1uw~eTSo1krPsus$MeOrI-51#-waKz3bsR3BD&RBXRnX^|%bq$3HNjJo>+wAcc`z; -uu4(8~=2r%IGUp}D?1>FtjT~@fhzM}}H#?si(@_@xr#~#9uMtBUtcb8d3}{li`y^|hVT9rBE7_rn(cKVr=?2^ -Jrw#y3BhQsaUxchf+UlqrT@L7FWZWp&0*J?Jo9Geor$tqt%|R-d8G#+jgppf$>o7iA;^iJFw}KaGE=O -OYqjb~UAMjMHPkiX-AQRn=!;RJw@`<35jf1QQnq_I39wwrl=L)2o&vOx)oOr0kTRbA={|h~aZ2nbe7; -W#ZfqjI;PZXb0M*SgvETgZ4f?3g1B=i1NiL0b7DxDVINs-bd6V%Y1@7mZj{pPz%N-J16bY&sZ!Fo8zX -ie9Y$lbY9X!tC8;@rLiD(uJ*kl$FnnVJU85^N27O~OO1dWk^mD}5Hv-I` -%15t+H^pxbf*E3P^MH|cY@0Y+Ht9+sLHJq{+v9eb%H1$tfVW9D2)b9(F>awV=vnP#>tyA+nXdAn9xX1 -t00;w%Qdw^0qw6vh(JGzSTQ`ClL%19SMoFwVGl#hTvb-w1F{b!R@V@1;hhm6copEHn@WEBGYdRX85bPjZg;aj@sr3CRFD|w*Frw)ERU#DzK>pL}mhcJJ -IY{xT4qPF!5Yw^hpE$*vOl=cMto8!AA6%Vl=vRyDJ?FTN0Kdq&g0(Y2_OKmZO~2*L+-2-{;~D&fwxQb -|3cTfWf7KlO;c?=;5Q*O6LmiNH61RldyyMlhF&mD?o6}cIg8jE^Qlpih=OGO5LQr-MB8czLT=}4^T@3 -1QY-O00;o{l@>=65Bi<>0ssKV2LJ#X0001RX>c!NZ*6U1Ze(*WV{dJ6Y-Mz5Z*DGdd977#Z<{a>{_bC -K%2EMcKq6f+IS}|((gfw!wktEe7RaONLkz_G1il|KXc4NCG-Co}BdT@7VY)&478f#eCZ`ZGYXV)`2`mvnuX_&80`}9YI6N?@B}*XXt+)*nXkxW>85I -nt%4t=Ok;@uQ#73*$?%ldrXGy|J^sp2)BSwUs$HSPFnWEH{EKdh;8Hts|&*kG&Q;-dh0o}9G2cV6-;N -aufnjEa-BB8ue5@Tz8u-~5}f+#TyeQr8!bbQ|&F`PvI!5MUPkr~I(k&5G;67y236NHh4_K -Q6M9)5-94hqM(Ghjo -OpOI&=XL*&<_5=lCbAM+uh#4=5uO_HD*KIdX^Pk%1Cx^$=$SdccY{Z^k*?Q;HW_P+TV&gT_f~G|wW|! -n;BSK^_MVsC{lP_+?u!UotN{%>yxJee%UP|Mayw42+eb5^pGvdgp8l;a;MuW`@s70%G_`FVcJtb`{#Y -*ANpc%Rse}m;Jc&%P?g*MOoXqFb`4Db+4Mi;#RQgW4kawknSvY`HIl(WUm2QXAZV?{&15ir?1QY-O00 -;o{l@>=m_|e-o0{{RT2><{V0001RX>c!NZ*6U1Ze(*WW^!d^dSxzfd8JlOi`y^|z57>)K(UiL-kukHT -39HQE)Bo44*FY63OMd4sW$fs7Tn!KpiGx9npOowRn$@za6LfA^Eni{KtH3p+3D| -ol}cXyb%%ve0DUZvz(whr)1sIVHinPocRRrur!$ihjLqZQdRDlwd2FoGaOGREPT2grk}%gaVA+A`Jg&I7^xA=F^VPEf -Vs{WS?^59wHI~F>QZNAV_W>8HSs?$d+NVcN -voB>Zs}ehtWtQ-9=+-zXfTXT)@~;pMymZgMGN;fq3`%mCH;PxSJ9H|^kSF47&Zb^8w{lsT8#&3`#_V}ZHPrBaHtI!VI}G}{AICo#3?I?6*C3#cDle* -N!gW5GPb$T=7=#I~mIABEW;3IAl6imZ@cdy>W=D;6mw4~bB>p9_0{;R~O9KQH000080P~d=M;;c?ovH -x<0M-Kl02BZK0B~t=FJo_QZDDR?b1!IRY;Z1cd2Lcli`y^|zUx;EEup{KA2#U9)0S` -Q?dtpEMWvgJf!busdMFU?GAwFJi6(T^4x10jvJ9{APiVf4tBJ0b0iGs09??y%NUa@8d8X}KQY{O@#nJ -)iGj{H)PMjzDJsjekbRyZKi_ -0PKv_9sFLYe^SAX;clmy{k=y;Ndz|7f*n=qaA*&pmj@ky+s>^q=d(RJ(bJRDoi(EN2k6iq1z^aqIOqd;zy_{UbY@H_;Tfw8w+=(la-V6{vSDk(W`)bk`>gMKOc~*ZpfC -ugUTpMblJHkG_!)*L+EycrDoG{r%l-D7;fF*@lt0owoKSQ -vab`4}?-?o^!S^IhH;rlpOH)$pYc3R_Yst$-vDDmOUD@X)-)@U)>u!0?1XWzL_tO1RY+rARlDT`iYgA -FXyB8`dAS17oI9y*5xZJ{yvGR(&W~^4^RzLe91Q!NKuaXt{l~?TQYJ;rTMV$!thr|Dk{m~SH?OCPnnd -(5+RI-fk_q56*pf_fv121_-RlzIifS(JY8d|dIIjwlQE%}<33z8R7;kINdvmH?C2ozP$ULEos&7SC%{ -ellg2V-{Wzh$O(d0R -;C?v~8ZzPQ=}5848loRdZZBSdu6iL6;xYzii1Vv+xSb5Cl)e+L1RMwIRIe}NsA?MiMnP_P~V7eIf{6( -f>2B4dP#Y*#!Zn1(}>przzQHZ_V6^l$cpoM|CXJpN!~sG7+F{H@4#`1lxW{d6D!-CZ6MAURiV;!CRw> -zkoQzBXA5p#?#G7COg*AjUjt3HYd2Eh@yD6j+wP2f`=reh87!T>pUG&AKR+Wbi*FXaV||&FA -N0vAj@pU9t;Me9d2grlTT;OT;;f)Gp#RU8?B<{=ZZpHU__g)tpJSnwlk~-CN!>MW3lyO@~XMQ`(ejh5 -0aC*|D--4Qv6t5xnvzAoO!WrU8QC^V7l6Bx+Yk@=^eH#TA5?x}*?T*ej$w9W^jSeAsXdyht}n&c5lJW -MsK)>aCzT!?-Y@<}qm4i;{aO)Q(i_g*?MMwLUti%hZt@b>xs{N=|!sOD*XB6O;R*s&im}sq$u%&z5XV -eLAi(SmPT%mP6**FUVvlI}Gq!DsoVoM4Xo$RZ|H`K>(417o{ij#kn%|{GydWhH3c%hms<@)Rn#&-B@# -qDkQ!}GbFc~N>C(Am1z0^#%aD;J4MHF8OGBAXaJ;)W(cn$pxmOw*b_BaYo`hMip~TfJwx%sPq3y2mLQ -(@)xvb~5FA*1Ln+L34sco!r}E`ar<4$pPx- -SlpaIqEY~`2OmDv1(a;%f&BM_ZV<~43#`1~eZ0H-{PF9@cmJ`kf&XHZzC%UHUt~gN_l)^$POG&mA@no -7%+dqIpIwwFb=Aj77K?4dD2Cf967A-v=MUm=Mo2+tR5NN^sn6>&lL$$we3(P|DtuK=?&Ei29-o|*9?o -pBTs6$Dy>48)b@yehe9vykYrV50l=NGOU_kj2GiCG%yR`8 -|{MHf^CNI}Dd($KwqO$DUWsMUGvSY9xp!WaH+;c+*=1kDLz?#(nzPi`|#y3s>cJK(T8aj(P48cs4KO4 -yrtbmJyMZlI`y07qR4BZeTMHI(nQC~(omLsv@J!E(|P(Mbz}@s8(2|Dx?Y%qAPC;>j9n_hzkUk<4VsP -T{69G|{v?BvDocQ;n#?>2jz{b%iW -4Ijr)nhNBkJFgy6w-7_aLU!bB{!)kvp#UoFJl%1rIza_b$KC~zzy^X25uSzMw(m>3_N}LrF@V0;X}ew -7e+Qn2&LEnqZ~8c>^K3nsfk|FI+fbg`xNgI(g_+0j%$VNw4aWUUFVLZNVQAx6N&GR%b+ENI;`EvcEYt|k6E8^Cz{dV`4**cM{$Mckm1LezMVgl1Dapkjwmvv~-Hm! -Jh?rol1NYygPYz5nlrZ}J;5_w$+E5NV?!pOhTS?+doE;w`K+i+tn7GChM4nSTnVI=K -UX#lf;N3I-tue)rTFv%^iv+`==a#&*o9$0nV8DbwKmJoy;7Lp0COn -imqGyj1%x-(F=)_?g;j%&H3k)Bj)y1lhFqrX8tS58rwPB+jV{UqMJUC*cxV~qH5Tmu&5p1v(=RR*jJW -kG~t-T^XlG0&#Bvt2pA7tAh1s#;g#+2#j6rD?GR%22>z}CLcyEkPN2HsGc#K!awo^&KWL9y-)pANGN0jD5gVjTaB^ZkS4 -ha69wNLD+9(cnik;6un2?$v7|5pB0wmOGDi*RPnxUlEZ{Za?!49E36VV3~x_q_i(B|kiAL1OqKD)jOs -Mzvy6`=Qu*`sA_K+R?}C`lBaqt4KIW}Xe{HUTYlm;ysWrY11zT6rh#Eit`>h;6CSs}%=PX@Kcs(BRyE -_>xG#v9@oGZ!FjV``w^#3J!srM_YhC1KYK3(FP!7ARh}jP_d)+WsT6tdY-854ERLP(^8Y2eUFgI3yHm -6o|v6$nvi|>h1RGsT`dSa5>Puj8UVX#3%T7uG-X+1j?=&`j7>HB5xF_{es7b()@-WnhXoII9L8`H-Eu -QV9Z@>qA~U-iLG?^;gm{fPLWKf~nM$;>`T_k2vbUf^DNzhizncw`1Jyl(I%Y0oXyC)YD$9K(cx7cj$)2_@iq%{F+f>e|&&w3oFjX6z?}aibpL{&@1SmVOk*WD2YO)x+a)=&-*y3LcjsUO -y1;%oz&drc~F^Wo>AIU8~Wwt-FuV==xm!wII@x`0?up{Ok?CCBb8(V{$hse1>(pvsHa86Y*)htY4p=9 -Qjw@*euh>b=+$WFVVGWXMec)F -s*?;U``)<(7kL4l!u}!!=}jZ8^PR?3OVL%Z010;KVq;mne>Gu>6 -9N3dS2u)_5_WzIvUsCwQ$KN{!6KNH3O1sMmPJLuh6LFYJJM;82}6N`kjqxd1NrP7bQdOc2X?3va<3>~ -Bu>$a?*Z_2QyWTC&BZ<^ADB9TaUVWBK6^(vkuA7y9l -2@kzEa$>Hx-cBW$Btt5};S&2NmL>mcFYgET41YjiVgxTFNp?N&@z(u=rP72a{ACVMdaJs=+lD$Rq&S~ -DYMxyW^qj`}2u9|bFd0_uBng{6waQuarpwQct6i!JYOD5i1!!)_wyP$olmFbw^%@Z*X%#a7B$wA0_CS -VoF?3myrX{52CPLfELSJlyr({?Eqvtjwc{3u+`_+Z;B-?E$AR=qpU(u-T0r4eF$tGM8hfe9Agia&87TP$hhi7Sm6v>?Bog2+Xp!tKY++}zQAxP(YEeB{ulGw%T}VjTLb2VLn(7V=*~I5;i6DL25IQMW -ZnTY!qfXTJaWIT;7zYiG$Y&Vlf^kJO4Y26$GE^nkm$4(7JVk9M0& -=o0R`V}dmnypCbEAf&Ty~c&{0Cjxe8T)ClFLKz(RnYR=?mG`DDktXDVw$!q*sus`oC**Hje1CC>0F%m -zNa9+TG=kYRDthmmNs2O4*6#<)7d0G$tCnG*PT+3jIRiMe6*U_*Uy*wE}LZi@VM1o?_fK7cho3)TgOJ -vMU0$z-Vtlw9a09Q_0WbF{pcO}c>u?YQH%}@OJHuKBZxgX_Fi&(Xr#iv&JuEsF2W`#Pl_+HZqi|aEL% -x*sOsHNSf&B%rlF19Sei^tDa?yWvN;}Sbe -L1&{I`xVG(D_?JP^bytF598pXb^y2PYn|S0S`?S0rFUbY%hoZ_*5%2R|{Ry|ADqUQz(paAOg?U)U+| -fyyU~%oOMYYwpuIX7NsDw{RU(;7y5z5Pe$p-RcttDo+p(P0e^e8L79Ihjqccb?Oq)$h%*6c{ -qHII#aZssQ=qfT>E@j>VTrw6Ld&T23^h4-BN1IK|0I>Yl5fy0}X0WGC7{K#1|KBylE$}6ShW!3olF4_VN*gxm(C(6yp<=TQ4c`a_e+n-DQ0MVbbtW`v(l#Y}lvVzBO1~1j%!6T^2f$b -0C69q&B+NQRKtPQY~FGoCCp#UswH|;`lk$TvWbWjJ;s{r?~SBed&5@^gVUr+iJvX^h8|8*6tzXzBZ=1QY-O00;o{l@>?Y>*thL1^@v35dZ)d00 -01RX>c!NZ*6U1Ze(*Wb7f(2V`wgLd97GmZ`(E$e)q2+S_G0>M<}rEC71_vX@(WZ(qMM50iGc+5^b}QN -R^~wdqw~I&Y?)^=5BqM1K1LI&c}28NM@^KMY3$$m`1TIBfP4mGK4;ASvH1c?fY!z#!I=|ak2BS`lS7% -VMlXNw4Tkj2wC$weWaS@vZ|;kJnnV-Iw#AA>+754vJ)=kL6njP$$MV^S(U2JSBeU4jR>+_6zmuTPxtS -;smAb9`>7o>nPIBpf|i-)f3uNX>fG`2h$~D6qn#i-=Bzec3O(}SMk%Q}Ic=zEbe7A417)G*T3 -E@vtK?u+`a3hvu7p>sk~tQw96FJvQatH6RA}5V_M1Q4)|yzljS7`duOv5`oR=g`23{c`K=v`vrNzmGM -j){UQ(^el2MiKofonDO|E7HJ}+LpXs5{*ti#Zfn&wY*2WubpQZs^R1m<)Ddg?@SDGcQhogY6nOr3s80 -m4FA!3Bx5#f$7%qX7v9y$m52wURrsmTibP9>ojzRRG7?Wo<&^yj^KDv!VstLLqa(O_s%)mD@RaMb%Ej -&#R|{^RLCMAufX`%n2$aY0&R$c8VaA=2ek_wK}DReE_rLAc3Fg^3v94G#?B@S(rt1Zl+>}K2x=b9)7= -_C~av|ngu$Y)~A|hjVgyCdsfzq=x1m(0{TR5Awp&^1-WnIL*CnFi5(QVa1Tk8%!Z!TRB5K5x!~J4*Rq -|GO&!0P51miCkgGV@E3Xso{zhsMb_a3(x -}Ue9f1sYc%Q}`FmMggD -W?SA45(f^x+tg%_4KIsKGsr!(lLsSI6E`-BpWhMyd%91=Vd=S7PX_8356~QtXu4$TnW=jvkEcFBSZWC -2ss)jJVSSE}@uDjqlE`tFANc}9QbozR93ULF_FKtqrNBRLg7`79lnAJ$!v&t -L2avN`w(s$^KDZVQ3IbsOAGkHr1PU}t@-I|1i}7jUnAgdCjn)0yoNsR{<2w(Ch@J6l0;9s7J(h#uq3Y -`}JCHc}oq6n3d6cG6=W@RMuQ*kC{g)A;d4g+KG@Y*%CM>5Pm|CkUlSh=TdMQRt4Dutx?hl4z%EFpF!4>_?Uxd -(3VRrnc|~LoDzf&Hb#-pfDK%?^ogaczZrLUI+Z)~=)+N)1k1Ilg7O#m8_Ua-U8`BMCf -C%y4iN*dXBc_u%XWX!YL;18OT_DHw|JipjDK+*fV@6aWAK2mtey7DrNv&_*E!003?i000yK003}la4%zTZEaz0WOFZbXm58eaCyC0-EZ4A5P$by -LAWR+6}Hf4W8N0zqbt@nL6YsoFjz*SZPl`Blw!Lrs;&DelttG?ojx$dGjTYuDt8Lb+n= -3`(o8psW+Lax3Elm5etvm(HzSv~x7W9wEPdovF1#`IeoG}+qLCSgZ6|07n7VW}rCY8)n6;SFiXFh?1j -MqEDMjvf;>j8l+h?+v5co`|Q+!E^Y9r)<=|WTxA<=+y6(_L$K}Zg7!Sb@?IjLE;XIrjP02&3j6<84|& -=Q%IMu7klC+#)_Al8F|CxR>9-V -{>i%9Zc;;ldf}K66i-r*?&CTb$fVgJr{IE0S#G|7VX>FMPc+{|Gx$5-6eU;DEO-eS*URYC8{^wKDqgdVo^PXWlKwl31G6ip -q!orOV2y1>h(vN5*_o)L^;FY3jHR6?88MPPnQ;`E8h3Md>$rUVw`rsPme1X%M}8pR;KV -23YM^L)o3(Gmi$pkeM=rykYMOX_J!oM?8}JYg2&x -gc&u^tH_pDTrv$Jk%zZckm_$b0-c7QfpsKG`F1-;N87%UgVGFY;5iK(?(A8DNT$1*Tg7z>9Qgt$)A7< -$JVA9QGg2pp?KN&3G|u!%$URVvDz4XUhE0$S9{I59D>6z9=Rl8WyxEdW!I8N4`nt%N_qy -RPjXh}Z7f#P2rfWA4??06l*R45anD&sM3F*{1&1+2XX&Rq1kbX0Y($nE9%_3ecsa40opP9C6_Flm}%i -aHJHybUSAP|1dJWvc43&~Y@2lGWRmLM4XSXjqQ} -g-Y>z`b88~9Og7E0R#;7^t0o2NjOp98P~IrB|~*T5Vnt(_h%Pp_h+X9*Q3B7c73D=ayb2t6Mc=%@Tq{ -qqQL{Bs3V1kim|n8FF%suQ+?}%)h_m<={~9FXHp1Oo9_RAr11M;;gyCSR)ckVG$wtSmqIhtbs{dN5v~ -H+XboEX3qL}=n?K*p-+#Kg{(0(k$Znrk=2U;YAR6tZW=ipqWcO&kC6}g(g~%Y{#>`@g_J!Jcrt08#n37 -#3%wi5JbP&MdrESrN3R+$t)cEf)QqBW^D@PPW#iJn_SxI3kRRxUFPMH4ZLZpJRE@R*3=kc#vpSM7)&C -8qAun`_&r=P{A)Xcn|X6OpUN0LVQg$JaCwzhZHwbJ5dQ98F$5OJhu8G;a=tIy7D}O%UP~# -*p(yq^7As3WN#0!keMjI8QlP5Rp&Z`jDcucZ5;5U)v|NQ`gIfy^j5S{M0B!bh>O?-{E4u%Dmvl#rY^ -jX2eM{e+`SM~^h68caI>pCZ-oun3u&cfAjIJ6g6YXufv*JkZyWH=mBIM<@6gFXO>{1xGdwIIBdh6Wuk -x#Ql~5*?aGC?pB)pc0Y{osk@vtYw2+p9>>e2WP|E7R}O~1kCBCB6?ctEEKvcXz$RVCUiUYZ`6e7_ -_Hh_oL=o5U=JwRXK5ojxgenIxN3EQM!T;>n7pWaPcgco{w@jQzynNBn5wl>Q$VVa4f+r9|uUcp3H;124SZJo -e|N%8hizJL&Q-U)OY>B(L1$v4`+VrbgN33;g`g)i`IWq~xW%5Gs&Q;uRIF&Lv*y>m&7sGJwBpx=KA1P -;fh5R6Ukk`Us(Qnku6+-Azb#KWi0Jy|gb-X#<5;l`u^xIH0RV -T_{mvNZD+cL~HLu-7^_+qH%-!>|}J;?te{nobRgI^2a6e9kRWHI$4X&W@dsC9`O)hh`8+$ZZ& -CPpi-<6pDdSG|p&AH^-M(DkbUFd8v@DC-C;DIg)LSJlU|uy>sjOw`R_ ->Ax^3(?Y1PL{it|6T!gRB5P4UKVNmW{E{+0qky^&M0=VK@%fi=3kWw3`hALcE?0;_!Sy=F|VPpGe}bm -9E5KW&s=0T-^ug0{uYk8PXIe0yb*+Qn@NKfEL955w|K^f&pF4Rs5PFDfH6qbtiww1vt`g|~{j@dmjc_ -GsvSXoL9?k^7AArpP$%fR${6^5eZ6pzk$)qN3M=+sM`2vbP~LTv*(`w{C+M|ED`D?(|UdeFEqaLhlt? -(QR9r_K%f^y+=5)K&1w6^$@Ra=U-#K98c`KB!&liP!%o^@=yiC);kGw9r;wi_q=nO4fTCWacUb$^gmE -b0|XQR000O8^OY7ycz{pFGY9|x5*+{l6#xJLaA|NaV{dJ3VQyq|FL!8VWo#~Rd8Jw1kJ~m9fA?QOxF~ -GrENvfyMYO=R*~Kjo9D-gBc?bf5mMEKDSyV~NUiYuR8IqDneK_l$9&DMM8P3O#Gei0(61|H^CURcw?@ -6PJ=sk`s3Mq~xO^Zf1lBFr($682D=uU~U(JZyU7YjFDiv1oWv_FMv-_BH4FrgM!V$JJ#M-|J&@kpz@7 -5h8;v*D5*S*3roGd(%4a`xI1ex}(A-Loeglsyf5%~-9us8mbn#5_tV{Yr&QCFP23NhRcwmi#Z4)>Iz`T=5Q9ZFyT2Sf+)%3`uiV!wf}JdX0|a#Pa9rGq2x -&weIZM&IiWImh>zB_>E=Hcsm?0yg&x0?%@}G~dP)%R -{Kl4*bLvDTE{!(MTeDc0~|a;7A4-sWQ$~yf6|hFNb-85z$d?!GuzdRBsKRC<-PO(FaCoexj8|0#QJOw -Gko_x-~DsIJ>eEg$9r_k~b0u*@?*u;g!;~EMxKn8Xg5sGfg4FTcQ|4@kW}BUM@0qPYznw_jh+@2oOng -Ai|kg$o(Cw?nP1j1f5s}uszpav- -ojSKw66p?hHCFJK?iaq(}F!`N)@Zw2S%`#qaCLc%~$1@ -y}4442KykyrHzC{eyIc18##2>I5Nh8Z2Gn66&Q(G3?5Z8Dgkb(^g6hr#B{XM3LX>MM?+ -;ul;5Eq?SkRPJRm=r;}SZxD>9Kf7dRHWnCBkYzFmC0&~v7k+^HN>B-1LiWt~#a9v@vkn-L~GmnWqxz-(=hI3ZQiZkEqJa8@UFNj!Y_u?Bry -a4T0lUbD^G|rWuYVD_UbhUrhvg`S_|Og`%);?AFKR#1Q>;$yts+S0=y3^~Fzm7{<3cCxZ`I1OTLNa4E -~Vrn{2ez~XQC8`yGju1Z1kG{fqD1EZ4JZMcHMdW&K<^04KQ=O$3?OR=NnHB?!O8CYG#%?~i=!^$o~9N -`4EFoksR3KPf@YDEe3g>b26<-?D-CKzFOlV_ksoH15GPsvg(n;}7)G@ob*{pwVre6F&x$r+S37D-kzX -wqFHbz-HcO(llbMwzIRUoWl5?R3(_h66JS)Zr>uM45fi3kVbF4e-lAvns%nIUls;$|F9~7v^N7dnuYa -^rJ^$WzyeDboRXMSpNM8Gy$&g+2; -Hi-TiRh-JTrbXwRx(zSMNZy1v=0;2v3a~xU=*;Mz#ZDCF#wnMfOm!5aqxB6ud)+*?NGKQhOZdgG5e;V -aA!w(68hT5Dn&}R{^3So9Xs1gsXny}k9G>V#fFKNy^`BQdtbJ!pUs;Jg-9T)~3)kjd{8MMG}$#;#(j$ -ZunF%AmMUXS+Z-!px@*O#p~-faGqj0uleuXOMSfv(wg+jff;U-|8>X;o)-Nl>u*Vyi@Xa_v>>dM(!iI -hsj6yNI(awI$BhiJoncpWpz1ApRES92osh{?S?#Gpsmi&){Ri%YlXUj@Gc07w3LIwxK -pA|Oa+m$`g_X~J+e5~sC#nk#?rx9w=UiQTJG6A_LYPloBjUb2e$STs_dq7DwXIF0OCg9TCeSl(9sKMl -8FQ{Vj8K72)Gog(ZaG2*?ivpp4EBL-ah;u#F=P!*y@p3zwnYw@3PN8(*sIKz~eKeZ(u3P9%*(; -VIjkm&?>w|^510I-&HMK(?p}39B*!?0{x-hq9uwHPBHjWe0r6sRkRMKkF4~-pUuTN5Nv6iCjS%Tp)TM -xFRe;t!S9K|`sO9@%gUV1n@$JSKPap2uSK49!8=2&rO&#dZCU1JAGyH2WiB#ez&pkY%0{q!J|?n#5uF -;guCR0NfFH(i%O%;pHjq8wZj_dSbld>kghE{%6MYphl4VS`4XXpBJ|CL5b{Z5~LxtIJN9nL@@ck{q_OS8$6A*7W|}QEvz_tr&TOz7HCPkgB9C{N=SVJ-A7}?hG(+Yc+2)D6^o$(;7S#mW@Zne -@SnA)BcJe3Yt_pE=5cb#?IC#vELZQX%-Y?{c&?(deLNH;-upG;z(uV--9^-hae#lT88+~uZqS -5u5dP_C4~T5@;`K5%H*Z^`?L}RTm#06p`z;!~rgES~4E5JnUyZSCb%z>TjfHA?nP&LOT@Kr8w`u)%?W -TACQB1qdE+4vXmeBcdc0Ra;O2XXGp6?-XefvHyBD`|wWQ4=lglwj_hYinpXSG>xru}NX@rK^sf0j>_m --eQ@1_g2gY5$b40h&6%&uMG_X`B8-ZCdG3ZAb{_iD{&vaZ~*Wc5~C>o$H3HTyfxF4;b>MPVo-|JSY4Q -P)h>@6aWAK2mtey7Ds#jtz(o0002r2000&M003}la4%zTZE#_9FJE72ZfSI1UoLQYl~!$U+cpsXu3vF -bP{{5aIZOJs3>nZZ?T{g`i=;(16ahnvlubk?1(LEWU_X9GQnI8t?$CU2MDp%<_wc!wIF4^^mFHkr)B+ -QE&b0v{n@=t+e5&nAN!Z|lP|^UE49bGqT3p$)m{X`aA;s^YVpSE`?mCnUc9!w&F}=_K&bbO -)EpX-H3n7cxmCvi+|8s>7GsJL#EaxwW(A2LDQXsjfN;GW11Ut@YbEiz=Z~eeKSt#kg2_UotHyZFVgO$ -q9n~HT=cfDKE3~*isW{y^y3qiS=f!Dh!9#7$b}2|>J7yEK*bY?cgk*28E!~fXEa-Jw?^ENL7Z4ckaF= -P7?RYA4G%jIFS#Z7PAgIg=GMltLM%x6xb!CPu4b3>yIa(~N2f&Yh?X|ICPL;4e!GCt*#usV1AKiS(D~ -20;vFvnu4q3+_7^S8UY0lkVpOFw9`VBPAp_RsbJkbXP;2!Fk0+4q*-6I1Mn2H%o_SBfy~Y};yXTN6%+ -9Gpx-%vDcTs9EVmyc8+lj}l5v -zt^lC+`rootGU~MrMNYSi~}Z@sT1FJ%=%1tV_~ZDl_f`7q#X6hz?zL{4T+FYs@CjPV?=-hQt-h%qCr6 -t&yllk^e!nQ~9x=j^L*8MPU9frP7?i@i9~ZRIm!ZeExX+4w)bm3po|VVL*1(_Yf%l4R@eC7jWcUx60C -j7(`GqGqS8PhxfIqU>RoZKrG$|!?JW}Y5WYsH?%-bqv%>>S~ZgJ6W|qTx55RZwSkv#`U-!}-kh9_@&C -^!@bV?Rd3v$4Io%zGnEDlHEEb2v*jX=6pI`3c -IQnt|Lv$x};O=4b!qJis>(BuaB@DXO;1ps$ZX-ygfNN3-&*`$7k5(@%{5kX0BhmHXj-ru*!3wZTcBHg -XizB{&wBo8~Dpl0h2H%n3bvu1{_|v~Hp~*HmDUg86MoRJdF55VYeTZKDHhXMu1Fj-XNm -qmNaO2nuPJ%*ky2aejS0ze{>7$QeGYGN~%L^oUQ~YEEu0=d^hy}y}V&Hg+GE7lwoCiIGDkFco<$u(UFTVqkFT+qhCmOBW5DcDXGv~K -p3&#?l%aG|BbINbWg>aJA<*=eV -PXg@U(-6E=8Io}Bd<%EHMf*eOT!yBncy5+aJ1)Yx4?J6TuT}?&XN>D=HU%kd9BEN&SYK{sn59OdMzX> -EvUg?q|*_&(K;h~*)3{bmA2AvT&Fhi)D9CM`GRC8ejHYlvI36q@JB{lQVhU$o}t#LdZ#b`7hV? -pZkW*`k07dVv_BJtLd*OFp(yG@BreH{G@6aWAK2mtey7Ds}jrI$?=001~z000;O003}la4%zTZ -E#_9FJx(BbYpLBW@%?GaCz-KYjfMkk>B+zCQ@7kZ5pwCANHb(F2$87n<<&nk+i*AGQ$FaA&C_TZ~;&f -?<)WOx_cfN00WY;y?eV!P%euEW_o)1-8~JSu<dA>7Rq_Qw6rJvxCo=YVP&E|xia^Xk=~U%q+u`W2gP*~c*Uwru466s}#?jUqP0F& -P{3jHmZJ5R-2-f(Uby@eXahgL?|+@Yjn27KB-zhO*xntLe=W9GrO;Bm+^S^_5m -pjiTxCm{8yGz!^J?7IpTAY_~MI!SZjc6nnRy$sXIIxFLiWQ5_I1%6cM#@8Vtnrp2q=*ks2939>E^wk$1=c^AsfdXYc5!e}OEx?8DyA0IG|&DvY?(`u -nZ-@_(ii{QuR@E)j1PxWmc!CWvY5+pm51IiO&4BaJq7n^sdbaw#uEh|s3Gvh;i7bg#~TtO0FENsEEzQ! -$moEXSwys|@Da|~iDm%P$wdofakFL;Xf)nlz1!sgWyB7?>@UNoR83t4zGdWs(d_#IGI`5v6XxD5;waS{fDimYAD}_FhzkV?v -6MzNJ%bj(hBIshn4CAI;;;6HCdSOz2;COn`s_A*J748Di{l95VMD5RGIzYce4 -<8oyJ20+sU{E(OPXe;81o(FR!aaabfD}so}gFO>G2%0vjmm|A!6mj^EEWUL>|!j1>V21s4T -QF4!1ih{2=_po4?NkZN*#eB4zClTQyx@x64bP;_C)QK6C31<%8ruclKc#Z9ZBXP|}%9LfrX=-dLP6E -f!bylNQGM>yh98)eZc6S!j#{0bzlvs3NxD#njdF54E%LaVuJ54R|3)-(ukhY|39O>M<)G&g}g1!FpR% -Y)}C#8{^Pw!dSc;DyGYBy -FmUH{@Jr?0+@KT41bO?3DhhF|9(7TK;@NkKu3S@jnFg6ZVO-6%`8~JP;X~ZFq%iU=Un%7|C -h8UR4HBI*&`0rQIyKXYFb;FAazZu?ku|gpAXL&AIodY3q@ha0^{ODdNp#QUqM5Ot5>&i~Vw6t(VAn#Z -GuSWec5sIV6_wl<`;dKC*Wq(}ybzIO;nyEZ|VeY%QXM&+k^?c3Fp*Ow-Yo)?9chB} -mf-eLI+X}rx`7z=_sPn`Dc>(fbT7?yF&`p>x+OY2X<^b8Ad85UNY3>2naM(iHkknh0`r_&C7$y3kgcn -UI|0$f7DQv10tMB7ktDc-^@l|=kP7*rkXr6d>_{=sxGl6c;bCw>ySrm#w?5jT_uNuQ^eH%!QvEDzInE -T5sXB6#}dN(sGbz-7f0CzRar3SBX#LALst!L#EJG1Z!k8q~A&7+6;E@Rm}Xz!Cr4u3R1mPP-x=K{nupj1yKuCVp@vDx|Lw$OH$L<=}aXK7<4zUR8RoMH80YXzX)CN(m2`J?TVJhbSX-6lZDGNLhPBOnm=KoL*%=td)jF@mz= -2`-_8C3>Sq3qxk`4HKu~{ajjKFOySVPcmps|iTJW!u)Wfj{QeG-h5uYunRMAnvu1=uD6T5 -d%oYun}u}kbz*DtU@JDpX~b -X!%XpRjW@vLxK%RJAyP&-5tlZCYfq2=6#|ilVo7lQvDg!$eJ{zhSvq;I3^cPWjIB=K^SnY=m<)V@xRn -?5HADEJnFl0)wckE}@weG_hF6oLxU2u9QQ)Y)Xcw**$*9WnY)-JP_p|eTXakAfDEe8+0pP=1I0Ww^_H -c;LEBO`j%2vt6Ju&)VB)ZR}BxMQs5cqsxL8oQ<{O@O+51<1;+j{;n@r8N@utVeq9-fnw8WlQB`~cgq~ -eMFJ~bpC0o+zw^ZMQ7_u*AGR}>IglBO}^DMhrX}dG(7+3O_=hl#J_WPlxI*ti*@R%rTUTz+|Zr0) -NMelz@%>2PfFX9lN6sttIk~CMy<6#$V1swkrbQLSUIv`v-8uBY; -e{fN?(2ksME(TXyarV!|%hn;K2_lL{+ZU2sC88?4?LwtGpL=8j~^mgE4_>pg72YftJa4Zh;d6NLz`mQfTGUbR -{m#0yzow-NI09ur||o19_a_f9b^9ewes035EVt{O|vToV4wy5L3`!5wwD?-2et*h6_*mBLr(0CzXA3_3^Y2c0mxUj+D%z>qp#6Eool>W~@3IG -xgikNgeD7gSbi*LFjNz6ysj1+6M+Zkoxgd6m!5?;$CpeHbqoG$|6-fc!DYylfFROipfH0t7qGMsz*3a -w`n^T`jrLwDKe~4We1st6E@(Fpq>FpM;H-T4-g7~1#UV9Dv}}YK1D3Vj4zQ1F|$!1=&@58^;_m -9;b~{(E?(-uS29zx(a>HjCrCP2Ky|YMi0{P(gajF{pLJM9ZyZ3zcE`6iKqxy=lssSt$#Z;>B}QB5vm_ -0$se4{d^}catVG317IhUhmHiY#%rK<>ED{>_tIOSlpIiOR~pgcae<}_6bXqlEbeqFKsg6QzD=)@3P6( -ClnR?C1Xvlc)PT$(M_;}PNeY2s8^`e(UBy$R`rWsrn&Dc|`rQTpvRN#}+i3iutSB(XG9Qv?e5(#$I1uG0dD^{BA10fug8XcgH%>>CWtwc=d7bn!z*W%@eyxo$A~YoxoQTW&%Pqgqpf8&s*N -7)vQMH6E!QTTLVEF(ds%3)2xNZep?EQ+ymXz4ib5`ew*;KnL)8K~zTyo0yjrg-r?EnC=LjT4O5PQJ8YY5Se7Siu}+ZCX$jz~ypaXcyX1l2^Ry -$Q6dJF7WITP;>+s0BmK(&yw7kfD&P>^jY76r30goay+evwNQ$ -p{d?!7|?Owty$eTt-M2&r+}*UZ&2#XiT|fpeQ39)HP6K+2Yl4^X#;G?28QoO=py{zd-Z+76(sIbWm-v -f1T78sgE(WEiJUN+5RSo?u@85rQ=oYu_J?IVKD6ISk|Cg$0~})7u9pyYaE0Oih?aEls~_*_EPwSwDe( -v3v9bUn$A~wQO~g1*dfQjgHFZJvQrbfHMSQ&3Zvq9KM5$3*FW;1An@9+wbY?G^!fl8+>4(8)ugU2ijR -POYf`BdOR6#aYG8u;=l~2UZp=1ZBd3(^QmYh9=@7WRJs7nz-htXEifCV@ie -F7!S?Dq8g|~oMt=2wLiOrUy#-=uvAdtk#Bz43$3^wHbGNHPGuBcF{PLEggQb`^zUv65VS1}r^wN}fcf -V+U_Wx+#N>xHZoPj2TEs{uO1$?S42p5CrmRGk|EXj#xyUGFeS(8?2_8YT9tb32^(Qclox@Elt0#?WL{KwD1nkK;iZ#;D#5}m+stSUhfwL%e&Wb|57~0MeJ8 -#))B#$#mx3{E=M!blI+6xZFA^&ww~@;19l7JHBeX8@9)9fY$Q+l;av(WH)qtA6&aI%jLrt>Xu|vZbN+kZ7JFd -5GM(w>lt_uSfBsY!2(v5A2Efrxd{htQAQ+tx=h~H+uhek^AnbU6Ae;DX}8viyOj5O7b+sZ_V^?_UH1Q -b+70kpY$2SGb0eZujngWUJR}-bDk(!Kk)n5)4a;i#-T9Tbc -%n_DrhK0uag0Lynqm}fKp%U>=URTkc`+{;=xx>_Z%ES$-P#R@sa&5qeednQ_e?XPg%@D#Zh$7WsFhq%y_@z;u%IvR8RYJ5KU6uPqShD9(5f&z@p+^}liar_DryKg$6wRSpk}4I&+tW#-2#LbJlA ->iW~!YH@89EP0eXtPnygO8y6mteIa`WN=TOrAyW-I -)H6o6^ACZUtO>$*$(w8zfYs8$R>gHeVgnTllIBK30{A;(U{7#W}^Be+8$2V%4vH+)k7#Mxi}07n1-02Tl -M0B~t=FKusRWo&aVUtei%X>?y-E^v8EE6UGRD99|(%gs+o%_-K)%u7kFP{_@6aWAK2mtey7Ds4KGHu}i008F!000vJ003}la4&6dWM -yn~FKKRMWq2-dd3{hpj>0euy!REkHAt)Ej>H4F@q?(e>DE;mN3lWhd*V$&REYH{@yvMa88a>_K{D>@< -AB)^+{}VkPv(+CfU|-nVP=)OOkQ=QYTNz&o2KbQN2HE%@HdU;+4sELH>%X&N97zuVCOXXF#d>i1*N1X -Ch8!-wjDhO>?`te6EdX$tYy&3+3Kil8@#Jip9YSx4B$z(6>fK1QMxDiDiQEQ0LjgS@n4ZGEGw*{eg*Q -*s+q|1EtKr}lHbYEXCaCrj&P)h>@6aWAK2mtey7Dv)CZ&hRj00 -58=000;O003}la4&CgWpZJ3X>V?GFJ^LOWqM^UaCx;?TaTkQ6n^JdSTkAyYT%)dk@C9IN~=}1ZC^TyE -C&vW6$dl6nIu#7zxUYOOae?=?ec=LzjMF%P$+pKloqwA6;Mj}sglYNw$oD7259pg1ns_%`#mrB-KT>7 -q~cXjSZ26LGkL0*>6mGg3%;Y(ajyr6g4gc+OQ{VL;yb+7T)_!SGr(%Yh3m#qw3wyXsu`+D0H=mi%-T`XFYGLSGrf*0%W(G5m-%^|p0D@*LJAk8z*TGm>^o{p{5qjA=g -j4RsOm;wor3~CQFFdu^y_gYNflD49l5eQFzNgH5U`c1J#rcDO?P0L?e&`TK+b@JN_0AdQQrSKJIO@2y4^e=8+NMGwk=9&?4;N2dc8 -lZbbIuF$q@=A}3)|kWV@!pB%P{WK*)t6)J||?|<&1uu$2Nm)*m1b?3sR$0o<-rd0nMhoPeSl^1K<%r> -t3d{*)uO0SirwrMzv#!@>fP_NYXw5_X^*S@g4-ZB_*=H@^o>JWLyF=5)mX@ -NyH&X_hIz{YPH(MpR-X&f@OVXdMVi+|SnJ`UeZ8EqAd!sl?2F7g@!D|4?;q#BsY4mOh^enfUJ^S(~~C -rp%W>2uG*#|A -rP?q};xbtpUe;|h_aDrNTStcpxadwCB#?8%b^>mD>qqRS(e`mkyK%3VU)S4o$qc|d?lDdR3umlu&p8# -%BHV=2QY-`7G?DvZsOcab-}#)hOy=Y4U+CU?o}jSD4&jD8&GR|S8q2x8HP(1@Kh68VZ_SU!_H -m1_g|j>-Zbtd78NR=vlkEI$4nY3={?#too8qj}tfcX!!h0 -{=j@Fq!99KE5N&cG4h~*U>-qEc2^RPNpV1Hf3w!Z$uQjdI@#E3{C|WS@gu#{HzsPF(&H650#2vww96T -}tjWb0lA?n6Tj}4V)Bf}P^)FCM0|XQR000O8^OY7yTxrr7fB*mh6afGL6951JaA|Naa%FKZUtei%X>? -y-E^v8ejzJ2Z);5XvABzZ8z0{)25AOpXu}4a?zK2zdq#Vhd|MU+^{1#@_#0ciYINpAD_+- -e*9&Y~~M8O9KQH000080P~d=N8H>qutp020LCQ%022TJ0B~t=FLGsZFLGsZUuJ1+WiD`ets4Dr+s5^G -{S^mi1;th2(w_!s5C$}HHV;VbCLS`tahVf&vTmkG_KviyHvQlC-hCfGTz9C@#^T+*ckla)Iy*aCd|*H -IT(ASHJ4trDVx*-)^7?LZ2D^)$XbvRLcYW6jmgj^Y+D3GQZe>&T9n1CeVqw-BX}<|(zsY^Y9^HYqL;T -EOZh4#K53DX5kxBlT9hwIwvtCpc-`cy>c|s-8%ejW12e)v*Ovl8IR(PAm#aj&THAxsbG#u6*6)zL?coU*LS>fAax@SwBkRryru`wv -)wKZWuxy{Eb<&E0R?TyO`;@}i{QHCcCq;Q`k&|T&hroFa7M7KXbvq9u@uRV%YE0iU-2LL6$Oy4lNBDh -NEfd!-@QA3e?0-U{PF8&nST2s`}3cY6tMsM>gw{t_4%9p^6L8H^8H7oWI^ELsRU?{n4laeS`GJD$ve8 -O*k~i3NcvjR-B=b5d}h -A~y&w0COJ!)yr$wb+G*>5ED!fP^l9o%LW7|vEisWC5Tv1jT`x>lGVWMAoM8A)8nby}C?#938N -#4VykT^A617YfrFIHU(+nOfu8747x}!~>o|n%($@EQUlOtTj6q20MabkW(I(UD4v6-m$mpWCZMm1_&+ -%zXN@Mb_&6j@P@ZXutvW6=6@&)v1`#eBjWWWfi^W{SG@hG4-N>l8Ugr=9qB|5S}~aur0@5&>;;I92{2 -AtJC#2zzd*z55qWAe`-K0##uHZg>M!3}-Uycjtz+%)q#Uf{`qb*YvyANTY{IHja^O-i^_?ZSB=_ueY( -z<@xa;xQnw-Um5<@`Z*Hdj*xw2-=uHbdUgzL%i&J_5M|GIJxV*W0IDs-T5?8=UZ8n~`PbfnhR;@6ju<{&KE-Lx2saGK|53C@&mZNoqQ^z9MvoZB|GCLDs$8<*#cMw{ -Kfph|V7=43St0@M5M-M?a4_z8b{u{a8gA*1Mg&_M111%{8qa6VJMM(flZKHNy=BO~+mg<;FX*&}n)zP -=ct|SJOP8mAYVh%7M6eeh&lkx1HK42ywY`0@Yr?620=&`b#%y=u6Hvrj59h61W>XhD@uoK*xkxLck?2 -Xe{$$_3!bpR3ppcUEn9pcu(OZj9u&1l&`Mf`v9tFURFpWqkhf0A-lrvUW|+XM%WdeA!T7}AklOY#9sf -VW^Nwq`+0OImgNroV&a+6!Q^Q1w4@qS(QZA&Kl;tod1)YK>qUg2z?NE^$dKQ}Z}7nTfmwY3q76ZG{=h -CKh!ShNW%Kt5Wx2!o*Z?U<$lpRMhJk26wZX>k@2m)R*W0guZ99mnj{bC%zzG3@r5IW>7%Bq-jXHenFXU|l3Lq1 -I8PV>Q(YEbu$4GAk{wG%lM;>15-oFT0ceo~p=DvDJgS-8gB4&E%dH_qHX^wN2`dVCga&DkKdI3 -5-$)iZDjd7M*R_rC1n*DR>!A|@Z$vLHxWmggleI%wO`rK6P_Ja-#I56IC+w19_z -4sNdE&(LOcu8r>Sc0aJM)pWv-6Q))1#(werPC$5^c7yN3YS9@UBrG!?7+D{yw5|9Fg8aj*(8aGp1{lK -CA-s!Yzb$)9ZY=+plbct!QH3+qN$eYw`U#oX1m9N^%8JlETSsO;m>m4euW9myKuN6T*GE=We|Lyn -H8s(7Pm=ALyr-MExsWij&*wy8`z>hZG~KhUoR*PfouM|Wbd^O6%RB4kt{jYUn-b0KN;R&F0B%RP+^7@ -1OgZ@^Qh#h13Y3Q2q-uA7;;^goaEQ8`tR2%4DRx4Qlwdq~26tnA#*^hqG~;77aE*6HcMOK#@;3;@^Q< -nHldxkk#8dAlsCSfq-Jlu8zJQ;b_^rtDAzzKe4zwA6;5ORn! -TDQ+T-}6$o3c~2=}irh9tke_|LoZHQ^nE%N~3ZnxmQ*46ECF###buD(-QNh*hwJ2C`rS3}!F5!uFmJn -sN1|S|wFefRbD{;t{y8-8EBl=qx&}Izwxu{?1`?oe%Z)nQkTi^}%}>`!!K{*I=lXYVJ5p1m>2NrYc5& -qBm#RBbN}QCsC&3irum}d49^IycjZQP0+^-J$g-)T+3*t%j;u^(&H$kWXf -Ka->kWz+wH;77;GZ{HJ#BZqu-ZTB$6E3y3_^4TKtaxtRwQ_e|&naNP4^uS$iY5u$Igdf1-yZSk<7Ywn -rqxR3$UHYX%WU32aOrSHx((9QbRjbGIYx|ZIGvW{BHpg0$uJaVv|~ngEm98W97OAnw`EmbDo~Lzs0Wybl@`wM7O>!cKVthtvbA=^2kzcBV&SSNa}Wm -ieAlt+6~a5M2an$al2ppi)!=^6~8N+v!%>=_^8VGBGhi>&2{hTw`W|mR{0k3WHSZGe(H6b@~2e+at#? -ktfV&9GjEcNsZy_5-@M@6YC;JL0f}HjS-O69ymBcvua=dXLjOcNXZfLQnG5dA_sYw4&Tho|3qMk#{(5 -965XIl;a!Agq}PqD1g|l04o^W$1B>|=oRD_F12&6114GH@grEl~2X6&?;7zY5+p)LWHzGIQ^X$70dtu -~y7&8s@~Q7JhU|ni$^+UfzuG#1$8Q#@_5PBFGbNKcXzd5Zh|@oZ0CXVh -@oOk`Uyr!WJ1I?`-M}>H(~=qSDCCD0cV?Yeu^tkp><4^{-+iVTZOmVX!l>tTePofKMw@?QDqujYuZ@? -J`O9>?j?c3&atXG`K$1Pbg7qKIh-G#f<7;1r^i@eX#0F7QR1#IvuhP1an09GOSEqD%?qg%ikHye$1kW -G$&@~Ks+Qq7M)ZBX!j$fW$^PF50aXmS<6&LsX~YE{{c`-0|XQR000O8^OY7y8ZA@;-zfk9Sf~I1761S -MaA|Naa%FKZa%FK}X>N0LVQg$JaCzlD{g>Oualh-YK<|11m?NQ&CT`z3jN@8Tsux?)ldQPu-5CbSZM(J~lX5Y%^=@PZ|NGG+@x -E?vZmQ-+{@D)lSI^|HVY3^nTK)B)ii~XAt*crUyf6C(V5#pvRs8d#HTG#$4I=^?a{O2JYq=?#8&>pfJ -37S@-Qcoq*3}LF&bDP$=Uv$ktd~VzGPZg{Z$w*N)#b$>hpC;eEdj0& -5-@VgCSM7aMx8+K8awv9vJx$=BVr&ZlvzaFNFaAYephVd(HwcoZMS)@;maH4Awox6<9wqR+YKF0_>k> -b`==&DB@g62P@N(F7SdXo~!vRenO*HVjU6ujZi>fKQhiTI98l;(G*Q{7y+*SR!D{I!=O_MjT-W1PYeE -s6v7sWSUzWu|Cx5dj>U%z<${(@ffyF$@^;r1t -Ewj~$ssOkM(-r3u@KD;)d*nZ8~h94EpN*kq%3xGQ`A*+D;nLFw~V*evzjK9!&^cN#jsm+eG3E$^?FvW -ijjR7X?CW`OQ`sgeiZ~`v8(D8?;`_*_eS4t*eE;ARzQW&!M5>Gldl-iE1wOCrnd|Ub@i%wQ+5CH9bdn -0HNhhEYFM#mEa0s!*s~w;|1gW98?vyXmp6cccjjWbTdKK&pZYy53Hb#(SI`?m3Sfx{%wKXG{m{!?j9x -q^%8FR_zPjYW|StX?C*{x}8Jwq-+s^8q}Sm@AUy -97ha|tf~=L(fnlz-JPoLst4DJC|eE%tQ=7?*>$UOWb<$PodKq3IhW!!d}!SR@=u@>QBSaH(LeFI+BuLfEI&5~t=G29)HzJTeC4;>o}Fnqp##Q8IKtK6 -6tzVjiZiB-++0j@_m!&V6n9sadn>sf@a`VY5|96uG3f7pdI4L~9Nhl43Gp-@Erd}N}`op8V*tsxszUa -5KVm%ly=w`7!YU)dE3W8R^#@t0i=DHnMO{Kx*l=@>roANEHnSj;7DI*sGrQ8jD6eVdE}pVQ>q4IpCE) -~g{Ip?fxwJg<{T7iA4 -ygPj##J|M-2PcF1!)9&h(0c}&>v1GwmlPqBtfHmdGSHNYLZI8f2P1)0A%f?N+%AFopD^}J8??t%J$O} -2aT8}0Ms24#{(WF1&yffRC5WxtMaHs6=_-I(`mEWCVpVJP6ZdFjNmdQDNg^IX$#{787rY3e(W}z?>No`yqUmKY5AYkx0PFP3`@-9Tbv$vSmFO+p;4Fi0u+;mAiT@K)Q?V -vGnZSm;G%x0%gzUtb|3BTt7&`@N4AUstn41q&rE;r~t{c?_qWM;s=RWunB8)gtsL^i-848DuAXy3Ml( -=K!%m2DBfPAjx1npriNmd!EZxEv_wI#9uckj3=A4~?|R7ikR$S&{ux5JlIuv$3KSr@4lztU4V5tFOaI -*0mJ3(UHw(xxFdbTIb84BBMlw7UKD0ss@eVoCQg!G0qe -bG6l7>%CPQIcI4dja^pjz-1S&ClWZ>r@c*;Y535%;6g7`3V~H8xmic!XwABTWZDOb09#)Gk~=93X5A@ -85o%o89>+UO+NCnoMYkI7^btZNn5-sRvx#o~fv&v7BGa6>F?8JL(PM2ZcgkjocSDq517CyP-oOx%i%QPkhC7%kDrj|ISz{g2rs -uOOSBqJnHCzLkV7y`7hcAESfP&^9g!uCl3kUbCXTEWWs0Q(E_jyWH8it7apZUe(<%=+{yzses2x2Mu5 -TllkN4l9TWbF2rM4mCuJd*Tq-Dc=-nM8UxT@lgrCi@f5T8#8$mk|ZXi3B$H2m*-tsSKO@rQWS|%FhR| -gDL&h~?p>Sxo@IYF$i-eJs*)H3=pm$pbTGZ3k!^7`MKeor6s=I$Np}r)Y?TJpGJ8xk?` -ZLnO`EH(Gyx<-$ClN)V%m=8kB$Q+%&PYvrJiclz_aXu1It)md)QtrTW0Lk-N3}z<>ey%Ut0!|P>!eTnLvjv`mCL|q -Lkeq270yjo9#AN;RkN(s5~n0f5R;!R`(acI5*-7%hj+_#+hracl!a%fx(65OaY}397Sbu4i3<=tRl%H^A|^#r6W=YHk0l|1Gv*Zx!4OS&&9r6uE -SzO%;_+rnV`5qC3*H-3}Q9`AdaYX^om$j~<|#zFawK$FL%5t)HNK!*nxnq~!RY!e~#RO -rlB{2fDuPSU)}}G%M`-bIoV3R{HPnxERL9QS3EVeZCPGP)?JtL9X3(FcZYAg;+4f;Ys6c?v2^|=16Z-e?j}p$4`_%m2hXb^Cz~4ZqLZVx_I)#i{yZ% -M*d`yvB*WWB7{LO#ZP1QxEq}-Cbp|Z&{5ZC1`)kC4QSP6>?6?l1Jyt?vvD%f6pYl^;jV8Cct4dh7WPS -lbxYRbb3zCYt4PtFEI}S($yC}6lIuDZvkgbO{xo5(o1wgU88nOfEk3cUN0;C+DT%IP!7`z7go~4{2la -JW041Hc#ACSZ2Kq79l0ITqvd@_zL-`=k9cb3lRGc4e=tGZblaJ37^n+e9BlaHM{xkdV>KuOkQ531XHU ->E!BRBjc6VZVI!@87(*NL~$Gv4I&{5VucA{zasUsY4P_UHu}-HaE2OEq>|^XbnS$C~UVDvoP%`JjN;u -tpj{)Zc1ijWT@KQOMFzwGf3{VV8Ie?c7toSXn222V3LE)1Es$uCp3prUqL9amliND -lOIVcys*lFf9FmOXH+gt}~OtrsXv@*P42RN&G1u`t_M~jildciWW1#Ojau%eZ7)4M<45A -c}qgofRF@B(z~b;w$}&ayROx`9f^+K=- -T{-ZSTIspy2xT=pFqPA8Wgq*;8bu3@g9%$Pwn>2S)5Gw^i4xDq7*2!nu3KbKvQcnCx^(uEbNr^w<$k} -!EzVxffbBSiiowyoj!?FD&FZ>XeFQK&?qXYg~7xF@-=!RitfSfjJZS&Z+CL?x)qLaBEBeIy-r3&q*V7!)k)Dt~--4gVo+@$R%9Wy}k55qf6-aL$(wt0rXMO$ha<~9gOX2s%5*ft#Y7?z4`Mq!nmcg@s4n1jiS&|RdeG}ba&;?oHf`)H -arX%P)$+V55tI347^7dndwbZ!Z5F_1us(vIBunSMCJR?<9h%;>05sEAd!TckQeOYY?vqsiI%_KC<1;r --Ybng*^{ZWNa8f`iF+xnyT^5v3?i}hOrexI+~0L54a>gjMkTr66sn00m!luRx=GbQoBO*L-@boSy!mr -cq!>@$3Fa=rI3Bk>fZqJ!_XQpeaR50X1NbaJ)F_r)412poqGcc0az`s3w7uC9jWz`RI%pe`9u41Ipx~ -YZ;FH;`X=fN(I9sl7PHb3e8|A&w6_d+UeoO5tr^$B=&7A3&bi!kdV)Km8KCZc>6ke^i9jEA!Dxr0J(* -*Q)!RK+|N(WZ51r86|R71p6HpV^y4NVh-hi5}mHix(G -;Y&s*z_%?N0vInxfU&#d$U|k_>S$pDDaI^VYJEiW8g*SLLJ#OQ(G2xLIeeMJunPX>swzX;RLGD|%yD@f-WZ7=FfUcrucdVYv^F7aB{OkMQ#|y96u$-qI?Vy^wss(5}7;!@ -lJLGKJXK=o3=Od3D6)tN|w^)F7zRBf@IIwhb9SoaH3fqr>B2Jy+m-fW_) -M%EXEyn>K7WNLrR?|b|@q?R*ESkO3|!1==+k)JR|OLEWfG$ybHU5A6g*jqfQTCOq+gk>4wMeU`;-w9J -cfDi$w-o~UXZla8!P5MSoJuze;L^VS715I{wcS0Va+>(jo1AH-p_+5^mAIo`!oe6Z|CdKFr)=V-j+;A1rqSwRxKWhV)M3tPw|;|YxgyGbNro)``^BMfc1a)0ZjwwuG@mPG`gyQhJrB}1MP` -5+Hw&js;>mJ8Yxyo=q7!;v%&*xIN3V}8}B%F!^PvrH=v2`7P!AX?jE}GG0gYlZdccjfA!h3JUku)qu3 -!Fc*yar8+_iPdc`A6u~ylDXoy{>E!&FU)oBX$z=N+<-!{PjK>1*d_(6M;!zYfiKUwQV5hbjYMMZp`i@ -gE0$bBYB+yCu*cvKC1%%O1U3*Cb$w}YWB9}lE9pCiV-hgR@8YE9vDntWLgZL%_{Yuo_s-@tzvpetIFB -G^gQohK<4O%p-W^2LyTf=()~hVhE5S!I`D;yH{n4oX0g#VRaj$j{T{{*e7IT3GY^`zUq5nr -HXS68H3Oo+$DDFVUkhu>W2yI6On9m6Fgs%9#5$L3MK)Q0z~RY5OG9wquh)QI+u!iY@od0?Wm -4Hp*IoAr(niEpNGpwe3h}#_u`z(mK$PU$b(kK|d@TC~IUg`$52%@(a=X53K{v|XX@z98_J@FR52QA&vvopB-Bs_jlgokui0Z%M-%L@~>Wm}_jlbAie1C5leG8!RFTbg<(?($^~ -Bq?nKX8h#v{WSJ!FOHR+}7iG%HdtAtlIR&Q_KHUhjTH7_yi -pMsu$=_F&%5TfY44kpm`^L>=d~H`o=_i^geLTHkION5X3g{Jqq?-DK(0ZEfv})u-i;%=n4W7JzdV02O -->f&3J>62Bxn6e^eBfpfxN}N@lSV4a{E#y1oy~?IDHJgv5p;M+6@rZpfoD3$g0GfOaQYs2Jy}A1XL_E -7+KwF+*8##z4|hM0W0TayoGdx)xm_qKA?3p4#kHc=IzNepxmYJ8vw{i0Ft}{g{8i&6U0`M5iglg0J&E -iq(AMpm9sT57q`rKB9?Wz8{2}?5BA&8Ieqn8C0`*K&q}qj-1R-MERX;>D|_Hdv7LIvi1m8|!Yb%xATO ->_{v`c_OaMIyq^pY8=f;s;Q%k!yK0o|m_VISm5SADWE!l1+3v;xb1snS0zJH4&( -_rkfHqT5#?5ZfxZ`7Ck_cfInwd-_X -pGqjZd3~z7|-&ysMaEnq3fTQ2R*%vjeB^tq5^xbnwn?5+3G|QA{o5x6=jHxs20ovmS2o`u6zm{1-4Gn(J3b8ponr>-aCsUX(qISMQ^fCb7^EQk`bvE7Q -<$RU|t4NV#0N!1mv2HPPw7>BY~ij?rP3GNtx?%IZFI`M2`r!3DsUldAVA}Xi6ZEzFKaUR1wsS_-j6X7 -~MQY_#hQ(Ih(XMG64ZR%exY_B83~`QU|8B@%WoL%2580XiJvTY~f?-3?Xdu3cn2@+s_K3T+DQGq9ntI -IZ=Fi*5*C0+j5nKMBu>p{Vgbz1Zr3-^>xbF4Y+xm=9?xbyTf)+myP*qijcd&jgu>H50)>% -{C^qroYGkp1g{?E=#_HpvN-MT#(M%MY2P`bkc}+yTH)^Z}uy`cja4Z8p9S^#Teh<>Vi%g5S> -+tx7K61K59v5Le~N2)>!{16n&_4a-O6Z2K=*XEmJFgR?wQgi#aZNk%XLV3;{_;?O!N`mf?+)Z{SG=qQ -Hc-dP>q53X2vQm2oM<1j$%BJ{B@ul?l(pE_bV3#g>G??U+nSL5!ZH%U!I)vYXUu02-aO>B@erkTp2_s -i>TvNC`)qlYA{ZlqGtfsvX;R?0E~#tRhfnpLQ9CaRyOM8wi%H93G^p%qh{4Spq8=Hy7a%e0)NG8~&%qqaa5ja%o0Z54xLJedrd?om -7(lJzE>YKVs>vEGqDP!`M98w$0dqIPTUmdtnB%CwmC;h^6l!bq_%wLy<1D|0|+&aAK3$d -=LNmM(@{XfWSR%)81Q}8l?-FC10Uk;v#C|9^-(x2O09OjVEELQDJEtx12~E1~S>zDpS%--)o56U*l_PNp^P`#|fo@T -bsXyJA)v2vnaoil60ihwCf?u}6Q`DbLizTnb(pjZ32B&D997IA -FCiI}AhB4TPbXUTVEy(1l4Kmv-}4oAT-aChnSVMbvlRdp40^ -b{f6j$;77X8S#WmBy&Z0P?%hi2l)79IzU_afDg&s7NG -k8ASe1HeU2VPq&`YA6CZ=mCtDR)X%#%sr$wMoE8x)b%)GvbY!BGLK!Pka{a1iSORE#PErJ3$^&vichs -&!01Pc2-H#1(CElo8dERwh9-bNp+LO`0hWibDbs(V?vmoeaDH$!x&>d+l?FTeis+ZWIM-UByk?*Z&*z -nWV-!5^7@AXVxAZZcsvhQK+gz$0e`HpB^lsTmflj}rKalmx!)qYxqrch6Y@`Bjqhp<}b6lf({>1@2p- -?Lmgc5c5P$v8-9y6fkXtuuApPE)j`KhN65@4Dxs-V;+fRqgX;#CH==fP`UK76zDGnz)wCreepc`&2N& -YpP?r6r2Xe#|2kHmA6LWVB^=n)3N$ovtIiUc0nt$rUY|Ug@3}8AF8|6bJHZ0Rv8M3!#lxTR**AYW0s6 -iP1pW;L#0=wHSq43`)@ElNWBPcN=RrPOgiqkmI-Rj6D%TSKHKi(?_uLC0iFb))Km6o=mJs -+n1RpWrC~5TjOovxA|e^-dLh9>G{6QKn1IxbgR1bM671@TM#A@F9NXY_+KBYJA9KNU514)gP^UEvJ7XkI;z!1cKf}SAlu^t3ZiiDtbYuQ^@<-8#Ovy@~KCeciuKyV~?O;W{sCu -mkl@SNG(U>I9+0j5t94OB_aRZF0F^AIXk%*(tc*=ukJsy(XV5T0nsSk6M&{T-O(V~^5b{Sxemxk)%&~ -q4qQ%Haa&~+$@iqpk8Kep#A8%&boC09{kC^4Fm0xyu*lZQnFGJEn5MQqcvKu=Y$ih$=tBly|D1Y*kmX -7CfwTu001W!GUWEGDLz94zIl+g?_(sXFEVxjf%JKkGjac#o~~F?Q4kd(-oKf%i6`uh)-02b~j5!#ylll!I1C4K)v6iq_%2}`vlA9^yy@N*pgw-Y -ryJ?JqcHU5ZSgjg_H^#^X;Gt-*?g95WOah3e7;%Ob=2l%1Po{bPUhRef-$npway@T=elf4a5l%(>?3D -^MCg!lLcPq*bgogEFfJMe>Zp1eFEqT^U5~dRSQToC(n)CcXiZ6T)X8Q3_>PcF`I+*e2s62f~WB{537p -Y?}a~5{!?jS20@mn53CrxAO$||2ngs!czL^>MA(ZY{hr!oF=$`4=C1vSZRR@V3B!!X-5Xb=(7!aaq%k -QihndJI64q6bggy=y34Fv=EqfE0y_Kv-sMw6;wIPZ|Q#XLx4;@S-eWrWAvfe2#8iKnIs~A6K~;Vs&-f -{Kj+lTih2VYVqVSynpF(@udQVJ97ma-_sZO(Px!+tyVjM)m5VOkS;7%2`y$pOM(gV$F#qvOtVt^q2|+m0)WyL9u;Q-G{>A%%GrJk?vfDfNT* -w^d}4qqC@Z)rHZ{1zyX&H9CwrGC6Y@>r?D>5Y>~&zLgTZ0L4IkpQQnLQRYygutx}JP_Hyo;dR-%r^Fs#HpCp2Rb}MCPa -P6hx{1i{%e~9*a#fV3ay1b`KjWjdH1}KD}aillY?>0Tnh6s1D{xL(K7x#25)Y2v&;vu5Gv>Tp^eVCCG -8$XE;n#Zx$e33LpI&a#PEKdNk#{Ubf*738`c4h%oQu{@ow0}(_a%x&N8;GEoS`vrlXByCAAYkhlhtrp -@U!cn%5H3zLr?lwD7gaCqFlTV+7nMFtp)w9mt0hrs{x!O)M#HU;~0*v2IAC5S_I=nfljUAD<=Ix|d*| -;;lH0dz{+eeqN%2V&%rR4$AWj1y#BaU?b{)v%S3ior*MY7RY&Nre6!3nNC13?%S@ffEU#V?!!5B?S>s -yYxIVCd}J@Nhw3Dz)74LQ+x&MZwHs*%N5q+s% -(^108J_--+gIGdt-ZdE^W3ZCGZiDagKnNy0Ii}p?{j}S*@ZUkmhnPk+4BYMfKi@l`?Ye3%xw>eT}s_- -ZOMS<%}xqglA8pz7;&XqoDGtKHzp#%x0~6_!m%PbC>6gQwI;2Per^DH*1_YLn2h5 -ac`!qQ)J7CL6G-8>Rq3=M`=GPuAppAvlglU9F1f~WW>Z#lSkAl~D|xQEX_t}XpUWRG&6Fg)Aj}qBJB; -h<1Lh7F6Kzh=J1j%Dvx{;`mVh91H%*@8&j4BDQZNNsNs0K#+XR>8vFu7<;8Hz5>qmL#cw*74Prs+EbJ --Uc*u;O$u2%UkC;vze3$Y7VB4S5V0M*QI`gYf4A_tVZ)ci+@6t2U;3%W41* -!6XW8JsTo+Q0+JWXcpL=#lpt*`-b?yA;g3d;wHTC*XyO#QUK%R{VkhFK5rL5mJ_pVM=_NdsCi2r??SiK1$xd{W`ZA@7WFe&^hS~PcE;%IQ_+S_Qjju;ClG&<@djsU!P -Cr_<{}|$u}nxO^PH_b8wW^9wV=a?kvJHb!I>sC45+#hYFA^gcqx7{5tq##u2Cq@|4cI>$T!{(DBHe(c -fgbK=OiQNMs%-c;MzbA1UZ@3-Q&$@q(Yd%%$r{=Np*%mfDnuql$LccU&uBD-O{HomxwNyXEWGIH#*!k=a{nl -;_>4}U2gFIzw6oEDe&I;%NEqd{&G?Nbo~oclb;JeeZgNUSotOTR|@LawIW#h!IRUOXyXf)hF}?vPLo% -7OFVgSW%_y@d_{s4uSM6@3m%ATjKAdzWy{wF5hCZX=acN}^78wu>+AEYYhte|MIBPPMhLtvnzm3q+uF -R->b3m#Y$Di@DH^(fFvp*4&vwCBCH+*6jtS2)zF1YK#tnY1P=EXdgwORozUmfMd3YI7Z?vSH?0 -HBWw|W>+yiP$F7Pkn4Vo(nJnk&-HF_nj0+?3LTRDMQTa-ygvuM%v(VjnY*t7gD@Ew5)bV}B_#qS!qN0oQr}IFZc*2r021g|MJ)4Q>+>ca_Wpoy!^{wIjV7IknBPx -P2@KwScpY&A~XqS!v&t&av(Ug&6x|7JwF@hjF(f~SnKlPu5n2Wn66Xg>B01zX2%TP9%|J1j9$BQ#Jri -zGl06I@8E^qO<0Usg~21_iZ*VSMy<70DP`~qxa3b?y`zo=az-rJO~tL}#6ywqPeITa;or>-`~&qDKlS -IKlVTp*mXBCYBB>?kadys8lnUkD=Mvk9=~&`XjVtoF7h5(Am@)>Y7cbqO&17HZXX0jRoN%*)Ufdvxk> -Z*wnIBZ1M>vNKl}8`QT&ChO5Ao-4?S~as^H_Brw* -V-lf+r&#(N_anN7my+`bmK6y~Z@9+il45|J+WdfzT6s$lL)TK};;EA6A%)eHQB@*F$}r4%uN43O8&FF -F1QY-O00;o{l@>=`7|$3%8vp<_YXATe0001RX>c!cWpOWZWpQ6~WpplZdCfg*ljAmW-}hG_Gc}QPrQy -b@e41o@-do#sTe)*w=S|jCds93}ge2ZjB#$6R)?M9yPj>?#@uW0%QVGj0k4T`=Xf*l_c-J*Ymgl>nA3 -BletUR_&*E7D6O*Ql)SHIu9*n*aEj(sR}C*rljYD=dEewM?+)GgmW=kRVdbrC;p -MeEFN`Jt9QuPTmjzv;TBTeIK5K>sB=32)w2o#4e;HxkAA4V!tsE@j`9n*m{c*Yw{uLtU)d_nmktn?e3 -&D68V@vZGNfq+n|JZ(gcF3}$-FKfuJxP8>zuPhDVyYMKJ!RFtx<_*u^$e)Rw_A0*DB7i%VJiR)jKFu} -U%j=U=WDya3!gPZBaGw{p0fWdQkJ2iaSj>E&BZ{EDYKB8lfX63WJ=zmA=mU&+DBXHgdnr$mCC9~!vm( -AwSz;UaGH)kopR4nkDyMFQ39d-b -CQR5@(2U0K0=U?-H@OilkIbm%OUXcoLa_XpZ&S_W+@!Jt3m_`Rx{lUcxfb`tD3$ewNBD>myJASp=QV_ -6GA$AZpqzZr@wVIb(d<@KTm@!oYXt?JAUye=x$6Y(F~ea8!ICdDe78FVjd(eWN$unI`VnjPzg`o1rZ0 -uVx`67{wOL9T~CmHh!Jrl*Lrg=sTh6eZG`1JOWC^F7c@V|r?asxaLT{Dp=U00zX%2G^Fx+MHR@AT(e{ -5JS9!jR*=2Fe}VhBMwOF3TRb>kbe;{c@W3g5+#{ri=si&K$p%zbEshvM;IuWodu+Idf_Fl+5(6G^tor -XMij_$I+WW3HZvd!Anunx{2!Dw;c8jP!l4=InPiCJD0z4(1p~GJ;n-G0eNm9AC-@nTw3-G+QIP|+^AQ7gjW~&}d1xA!2c;Jt*gKGcHE<^|rzi3 -!p2PowMs=x>nQ;Pr_d)*fb%bivOjIEt#2?5|#NKD6%xRX9Q9j}O#3=H5w2a0x06j9;hS=Qh(4(LdSUM -(rhE0i&%)Xb)&oKY@h?FMNv3r9rn)-T;@hJE*GN=KIh0XG -V6cp7c1A)Q)p%YFZY|fi(#ff$eJ;*AsE7mk(~Z3pCJ&~mCF~S8EBeZ?Dz0{*DP1FO=0oC>&!Ll9C^Pz -2nlW@Ic`gf(T(%=3t2tNx0al`a@G#>S!U`FqQB$|t-$~SA5uw4*=^My#t&A%v?cfWEm#X8;;xo^@cx9 -EfGBiB(DF!k^9zh2#l79*cTGJ5$2JH|XP7xGNGJ3dNmRf&B?mP}57l&*V06LSs9{-qhRxi9IsN#t8=` -1vqtA3F;hEbcNliet+;ZR=YU1kO_r`#6S4gW9d>+8m=f}u^4-5n==xzzlbajum71*TN=}s5G~qbO1JWEd -jK1m{1XQph*H%g^9higI@41hVU82GC+mz7OdLI02|hrvCXI=&3Q-BN@{dPQ$uL8dn>(1l14)H{Fc1-6 -Fk1Hq^2^4lF?zYyR=HFrYU3gp1Z6UtYi!A_85uZ~=H$v}WuJXKw?bKE0ejwfl3~S;rNZb7WAqj1exI5 -S$+91?;RCw~0WCBliyKdHyTWypETGKBzuhKU;-I!ue_3kn#~*)uaQO_^E8H9m%>1t6EkHc-x-Yj%??K -xmKU?sCNnq!1Ko1p2%#&E)HYk+`11wCA;pBObJO-jyq6=Ks7O>G>2L=SPgFn=QO9YnXVqE)0=FZi@`O -%q~+t7H~RoqRc=QL0)RQSq{z(Q{ -_f4X#-2s)4etl#B1&Q+KrCFK8Ex2tAt`qQ@W#kJL_2=~r=?9~zabzhQE_i8!E5la!xl;b!Uy$-H(y&- -;ac0j-KLZ3gm%^sSOoAQ8HG^q@6`v^P&C?`lNKD0MufPZN0kT-#=kwXn@Gsxs2^>~6j52ODhhY)qZcz -?hHX4!Eea%j=|vwc;XF2{UoI<4MMk~g$c60wOD8yyH@n>W><2krhO|-~%gXiB^Bl~@Fl34Bggk^Jqq@ -NVmUXx#GaXZQjb^s{S)i0(LzIMimn3!jaZxSio#)LE*W0g~F5WOjTZwLY8XM-!;7sw~+-}9@`3q1HGY8TZw -CeGT#km3@tWvsIbPY00+yj-iZ$FGyrIsp<^g&ih(<76v!pFyvB8av0+#pQ~vw}Lc;k)%i272dfQN#7pA)F_?}YNcF&{*Y0{DwigEh -d96dI0qoDZo-T5I{Pw^9Icwi$E40_r~BU^|gYVOFYa)AB2IFrM65iAN3rw!0?=}Bti8qzj%`r`|rdXy -LKhG06>7|sG=xC&8HPG(Tx5IURqEWU0A9Yr4(at|(5jVhBZjlcxOdneb#4v%-;DpaNTfI4*)ppCNXyI -T3gK_;`?h10o3iD}~(v|<86JmK_Kpq5H%0zR?x#}oJIEnKH+{yklNy+II6e6reri2-Gmx^0h--#1*qy~sC&_At0D*= -O^~pA?Zjo`(|QVbSQXJAmr?&boX=Li*GYCIL;SFqIt&n!B`iSA0qdO2Zr}WSJP}9Z7% -_T1qzIiMp3aXO9??@s_>kbyH*H1;v9l&h$#&lYX~ni61w7``n3L1Qd8?+h?#0fL%kZY>W2Mp@YBqeG@ -hSW!Z8Gk?ny99j?&x`#kk|x>oflDo^G=re;F(zwH_%pu%LD4boEy{@Q8cb})PYArO(eYZ&;k;HJb%L_ -Me(VPM_&q7-M++phq%R&@P2HRV*nRHc)T*LjXwE+shIQFN3aPMHuXq)R!59ejK#R_lfQB85|4D5H@X8 -a|o$sReC~cG)s$7AU!?6A(v6I$XC(_{62VwwbqGNukx{;yt-pC^a#yHO4U+3??XVXSZ!I>L*UwG6K)Px_77jwQ%vqy_W9J;4ws -#H^_;tzU_EbDR_9d_y~jAd{-O&1FgXU=2F(x(lm#&z-THz3R@LcohPfZtJkQtEl$!hwqi%9`g -P2i@-CWtI2EB%Z5kyAf&wvm!rT|dDz=!>iAMx(DU?KtV8tjgSW*}M(v$^jn;u}4U_>2m9A`F%Rs4u}jGQ9y*|6dbDT89$xL)Sf)Bt{Wkvnz3PCQA0<1mk;;x^?d2%l!JwLI5zvEu3v^IvSe5u -r@d%ZYxhc9pH(yFwOx5knM0-Eq8QsJV%<+^1=LyUey#)RxUnmZ -iN8Gf>k*e7A|&$u25y$q3cxW+^W?kN0(26*5EAtpsYoRDa4E-0*_D(T_tHrdXkf{55`h$tZo7$ik4c9 ->&EN5X6Uizm&$J?hO5u4#Df~;?mU)_8rQKM^jfJo;J%oIS&vbDOcKK4p&~#+Vh5qjMZymjzH4L)8(jg -^*l9|?wdAlVz9xcOdTlDe>_Ie{+F~Tc>2StTPh1+trm*#QPSo5L8ET6dJ_dXYA`{mdJ|o|#vC1@DuF2 -G9EqA%L$yc`Q>C)9+o`-;&UC-%}EyjjyiFuRzvA%vn)eD^&L8rfl@_i%dM9-Arjz1 -Ah-B}_%VVTlNYz7xV;dRljD)sc~OnH{@bGucF7lrWl7Y9Md;nZQLN1S+7jj8;AbYLqHuBQ6p?(NM2>b -TuRurrJJ&FOBUL2;CxlbQpN%gjgC2k4J{~zHjae*mv?09~=aM}O#zkI>bIm^E) -3Gc9CQQF$T(8bw?482mv*1~tjz>Uwd3%*u~pcU>}NIs;(63e6FlGvgRpB4o_e=>xWFn>z8Dhq+KhGPU -SW!kl%wR-MopCOVGmMmGS&`a4_u`$@tPd7Nl8ostiM#HkQ~em@GyxY -!sWkOrMj+xs!lTXuWlVYhw<LWwI$8qpPJ^q{Hh*xK@frR$51FFqt$R{#x2~=8?pN3qs8+H$yHbs -Wl~gLLkmjN8q2!=O5=mWbSF7Xr-r*Rh(FHIvlvauzF}xrjJqk<*q+Y-0Z`oI0;S9;bIZM3CU_4E1 -4scMZR44*&r-Ptnt>V{fb*6JX(u^77t#UCU-J9)p=%n&6sK9XBmEZ&M9^;bAYSIiJ_jBo(!<3!+1spp -bmKe@?fS_xak;Eiyw7az?4Fw()<>Ppna`E -TO7RHJgG8j+F+0hXUL+ws1sK_x{FL66sergfuU_SekCN{}kIeUcxk~Moc>@8BPwdW(zvVowesh%E -wV2Wc1FK^zb)$jzq=n$W+FlN9k6@NlJdQVxZ;b=^DiwjL+X2vieNQmUnWMsdz8^GXn<0iC|-z0TC)q$ -ys|Hjs!*##SE;B4oSgy8=-PmvPCvDC8AVxD&=sbKxIFN71pq*6I`m4g?(Rv4Ps7pVP^`5!bJHVZ0#%! -DzKP*&1xSijzYPpVA`e~a9h#o*QId-=c7co?2`%M9!gz04Akm%EiGtW2deFb#x~*=#=FX_Eyp5lEOv@ -O+7G-dM6n`7%x=cw-nzkRXHFM0P!Nf>_^fMwYa7%tv_B#UKpLyF{jl3q31n3o-+!45XnsI{gw^6?9?8S&Uf9*m=7~E}xO_p=WE|2f9|@FtB24rNOS4Y=EX@uXg{egCE! -ELS+Ma-ZJXnUAZq+*dMBN*{Xl?d8WyvBKmZD&`j$x_Gr6PJ-4>%K30uSV6D>JO{Rc|7dH0Jqv?zozZ*H -_nJknpBU!?fBqlu+#*nxw_p5A@&xLYaoz|;(y8XLNX5y25~yEQ{@_^4j5np8*9rf5Uz%{^^JdQCWd}2*u2oCy9=+b2`f+NendLHga -MI|vtq>c?JGK(A7meWHEGZBsx%m^Z^vaq2y2N|h|RE{2{C?{{3inEP~ZW}^V5Q4v0g+&qZ+Sk?Pq-jQ -LeoU@~iNUhg5b~ieP2+i0qy|k}%P)uGlbWCz)%Iz>*8lnWe8eN1i6q9iCYcO4YYr^J1Gq6LwdY=8g0QV_D@h4LxQus@ -)W(>F~RRJ>*C!a_y?dvOdspSf$3F49tmphtByRYU33uuckirRw+{ukD})sD+MrjW6Xaq;nyyBjgs;k1 -knmvn;cYpj}9TM@|meToX+?X9}r&yeL{{@0=4o-a($|U4T|mqRO2#9afdvMfkA>sxG~4=sIv-f#h>k7 -lyJ&pJoK5b@Eh8u1n`JJqTJH_85O=+w&Ih6U0O7pnkhe+0#APbT`T*rqtbP&zOqUHSc4nJ9#AIqgD1^ -nj3^^PHTOyHQxEm!4*I7dM^|TdSnaCSPM=8K6IY2l(;1OnkFMvS-a4bqWcEcb{fJ0<`}b7`Gof-F~Pg -4RF(+XU8SJv=84*RjSLtyj&pQ~UQLIJP?lPI1Gxhu1;tQN$z=Rons;5X;ZYlO>gZk!+}ts@NH2RBv~U -Q|VBY}!rvEvBa|{}qKSeBYGizwO3dgggihK0Qw%%WH!fzbT>K~l>q>-m>Yj4@C16!`8y%<ZFeIU4x!t}LE(S%h-2w{~*+sJ3JUD^Okth$>8d4=GkEccdd(YuTq9jh71l2=463KJ@& -W&l6Jd&zv2Qw&ERfHdVsSKfeExW<6%Drzk{(C1MAGvr8uTqC!`aJ$L?AW)wW1CHj#CzVCwLJFJ1mc5c -y6Vq0tq*KVKK%IhZ$Eu_za{p)!ZVeYgR0qdp1stpH(UxGX#6U;(1vy$#m_$|CDpWjFuWUg=IUq^14dL -oZ3)*^Cu`bmNyD|NrdP!TJu(CLMyd_`G9)ctL(q10%e(27BbsOxQC369SCMi4m&6$bl>v -dL-bieS4G*Z_iuuciMsW66mNC*R0$mxhlssz%F-KniQz1s7Ak8B_i=bOd-u2xcO+wXd^xjbR`$9%vYG -cdJA+$K8V|EO&~z8^_IxNXx=cw#4}e?AWY!<)jBXn&SkG8V$@=Jy>A{llfWe^fY2-ww9gu-vX;Nh*NW -Mjx284y(!}W4$*{D!014~u-BL#U2U7whK|rEDAHhaXdS@9GOMggh;{uWtD5diSgGr?LoI~;i*TkVI;7 -XLi -N|F;9cvdXqWg{;_F|kY_kZ|Ab~}=l{W&94G_yL8PzIG))dWYXn0dD9J*>dH=1`&FTY#@o=h)GHCE;wp -Qhe4yVbfet*f|nLEI{fF3GXf)FtBnTj(|O)d~XgvfXtlfghc7%)AFYF=>w^wxnZFLm-EDXZ$u*kON>9q_gmh6SG~Y()F#C%2x&OE}nP61-bHxop&7*YfvB-s5s~M$# -x=l(P1dW&50v;k-J6qOyAjq%lE)++FU9PcHn!nKzCYBWFwz)qfJps1 -2y#_oqYYdAnk9Gi+l~;&<$+od8JWMuE)$$b_rWdQn+I6rJ#e66(F$X>gaR&4D0Xg<_VV%4^u9Fcp&I8 -;*Y!5Djx*o$_eTZ4>1ck0tpoBQ89y@hlvZ%dEtMxevAjLP+wE|zo#OLYCp-Ybyh-~;VLHS_5EGgBIzGoFfSq4nU@qA$%oW&s!LmSmhDozaVkp!Z7b^>q -wEJJG`ggB2({XS3yX(#9vwI|)Ch%s7wB1ZNn6^6Y0NYX;qHe!dmOUr4qkIY_i6naGM_sZ?A()&j)LGw -dpDq@mkDc-I@_OCGvPEDN@;EAFzjptDT7GP@Tdk)B>R18*ZMSO;9F&(Z7=2HEoX)Zp)24=qT(%WlTF$ -S%%{mmjD9E`#Cm<`o-!#_NKeD&M?1LB?A)g$l2@A8>;1022Jbll-{`(WZ0Z@!MR_bdcqSIB-wR -)T0bpkJS;zc$u=|ffr>}S%K(~ZE(Z;A9x24p{v2xBs;JCi45bHW=wyjtcx`gAMxcnq3UaOgOionWsuN -l1|5y_iGu$kzpgj<&R+Oo5K_;yxfgjKHHs`WiDOwj2jYHJ*!)?X -=<8XlqD{-5+mGVg6A67FU@+2awr~&i^p^XiBJrgokc-HV($zEsERiQc&}oU@3p=n*Q0b7LdDv{&#$Yk -b}=wX-_D_}n+oE{?y%-gT#hV*WrnrgNjI^U3=1o;3Rl|1R~YBx5^kP?ly8O_ne<}wQSH#WL -8`1ZhbNysk;02f|6NQGs|Mo3W59H;@gb*(r+HQZE3q#RzNjze?9ZlI5NqL50rWIq@?c%n4+!cLykaij4D_FISBdmNH|R3Am=X!PelJ~=b{rD@^2@@1Y$JtAAIKkUct!Oz^G#9O0{0hZ@6b$d%M>WVsF?3|bGvgGbuC0Rt-%x0nO -ao`}o3nCUELM+p?Ck2LjH->#U`({U_FgS*)%3j7cc={JShk^=SFAq*L$9E$cTOX4Sh= -%vhLWpgzgEl4PI>vcc%{%F7{Ay5PV~U5}YT;OLW(`$+2G}P%8}knt1y%+pY|@x{a|H;Qs?qO9KQH000 -080P~d=M?@=AP_Q2W0KRAd02KfL0B~t=FLiWjY;!MPUukY>bYEXCaCz-LYjfL1lHc_!Ci3|J+7u)?$! -1F%*>P+or#i=SS@L-|wgQ8|kVFIm2mtEg+8=-Ym?r>AN;Y?OA5Mua5}4`f>FMW8_juk^D-p-@b+>M09 -E*HaS4}69Sz8tBPR9IwYfC*(tFn{VU6If96WKInrN0zaniSH0TP*T&p}#ifMb+w0b=BtAbMgLb*@ -^1^)UlFocy&+4X1WotUOH|ArPH1ph!{5h}b>((5nSLbykuTxofc~!Q0ipM2DFNy>o9yLwX*v4tK0-S` -MGY~_@T@|-oGXsOInc09(u-sv+o@Q$vWfB8R5a_d1meW&GJ|KAdDE?dbmi -q#*w1lU#fzevCB>AWT{Q?UlZAv|tE9Pro;c6x*2H2GU&=D88jS~_88@=6)(wzu&?*A*N2}^m8ocweUU -#GIbc;9tcrtw7$ga78`3SSv@EzD@j?E7Ud+L){y2bZ5ootU!MAC}Wu7R${CtI>;VWV{ka^`$P#x`G5To)^(JwRzvqlU>qgtBVgVTVQ{S3eDeAfo1eaW^XBC3+0jeyxz`bArWOl^zm!c2Vj7%pZE -c}`k_~W@QdAK%eMQg0m>43CC(!KspPx9;p?MfYK!<4d`3a&Bb+gaGWb5bSH-lC{J8E&YETF~N^S7gL7 -M~f6{+%??csO0?&>Q2i=%Myl_+xB=46-;WF#?o@cp%E^w}c*#k?)U;!`f9G(;@d6nP6sfSI{WauOk!@$bQ>H~iLCCg*C7an;04lD9HM%?Dq2L{#0d#8Yvk4Z+z>4QlvN(kwtRKYDa -=g`Xyjx1k&UfGS%zB^XIHKs*YWC$NbS1P8J5#}E6%tEpHi2vL?5R@>X#RU6@h2sHq_ZN*jIEkT~d(b3 -6^WFrjO-*vZY| -mwS7AQ*o7mwx8$MGCTZwZ*M}BV>=eY0!>A}06i{aiHNm_KO|rg6@Kg*MVlLY-#jI#8KIjGY&HO -|YmG!g`?3*576jSM|Nrp4Ka4!B07>jsQy2VD`mKs#DN0NBoVx7@&(#*f$K!nBDl2#>d^aIHsqU{zSz*w1eV`fc8n9& -mvGn1>M5olbMzr`IMqm8CIwIz#Ul|5cv~tC0#!tQBKnBzydb{mRi>#4F+rQdQkaFneqaT({y;w`1sxL -V2N0}Sj3yckY6WHOiDN;_h{Hqi#1(deOE5AJ-HcTd=rQ8qo3@iHS;BL`H=K~i0y9gsvFd}MrUnGiD_I -xaE&Xw-*bf%C=~`q%oDp;dT7YCcHWO}TJsDsfL;*CxFCQROaC=S;&RrEo(G{@2fS-F9fIhwm>_ -YyKFTnH&ln7i+RMeuH!x};lnRXSZKUgk=L~0M3@Z!R2EyiJz;gkhJp3>h>V5}~k=mjkS|9z#WfkL=M@ -B}_{l(R&c)03CidE2#!FHF}ocj!@y#~RuQMCb(eIV>kGNqWE(bs#igr&V=LYOT18VAxw$L9V^!e&=0%89Z7|4lB2h$uK+)Zm+gU -i^BO#2@Yr&|c&!)8JRKu}=3Q4n!?3_Z-k9Ee~DjL0EE-3S;Fvw89t2L(~r0HIC(P;83@+m;<}Q+!|j*@C6!wdNqpBS+kaR -qfLI4J8UU84y(E#&9OnGaO7q#jH0^>#$edu&S3{#7I%(9ByfA&IY_?;7^X(`88)WP5?F8e1tLJ}Jwg8 -imJ=3+R$j+*)<**8B*T~@0hg~Kzno+NxEqZmsH%b>0od5?TQn?VwEqSQCTxNaza%@K&jWPuqGPS&{9T -(6|58}%P|XDywd+|J>;MdGs3lgzayE9t8SY3aNWgpaRXi2@;J1rM^lM0)htdB0r|(J5xcx3QjP}$A6> -Ak9yv@+^iy^F05Swrr=^q&go?mB%q_)_LKImY2u*21J_}*GhLSlWwx1W#?Tu%X=YzXMk8AwoDuWN|x$ -fq{WT|Q^+rp$fb_J$gW20kEAF@UmOA*nU?Fatf3b+jya96Z$hH%P`%95qe!re3)0R)r-7{bq`Q6Rb#r -ni|`Rqy}HSX~}P5mp#YWlV755RSFE1KnSZgN4j}n6(S*WGJr{!AQsC|e4Bju<>~pOXHO^3PS-QNKgMvB+!J+C7Se!z$--#b`$^PRs2da%L1sLK_~2}ak>#xbrlUa*A@cER`3pFe)I3;{1tAyF3$3`2VDJt -8=BSSo@dzI7iUs0l<~BSAL*5H#fhjB_))_T&}<{HfS?-lSFeOCH@7zb7KlotO%P$W7)^}jx8Esm|;Q@eBeegB -zs-9x{30i~x)naMl?kVoYG}7$a&`XAc{GX#)R|wcZok!R*7(adbbPSzfcilF-?J{ZPZdw_nMSF-UuBW_SsJ+sJc?&ot2Q*XA2xXoo;Gy7F;En;GO-=5 -CP`*sGHDGs#+aQ*P#X^yF*qFn354XVvoCW|+OksI?#1i+~dm=DKMYF%jEgWx1UUxk&{8fHox5{*zshH -vJ9cuk*J{NeR2z0A70Z^`K?+*n>=U+tr044^4wmM{rWSQ|cr8=avQ)FP+_`}Xu2j{%GX5Qj+{rX_%D{ -ptwAfwM8_?$Yd3RuZfUJa+JTTFPGd`Qu9M+!93rfORVY%lXvy1V(utGd7q-HtZH#jI)?m{`WC1}@-;I -xNA1m;x2^!dX042#A-a5H=%mrCvge^J~44n -uxsg_3--3H@OaDwLzL~)V@M|wGO;21ZG2VeRQ6E -uvJzgm(vpBg$;zZsYgf+X`_%s6D5DAGPJu9BP9478EVJuRvz;Y}gdNl-i?f39VWIu>)E{@8TAc>-<-jnbC1g^pCyiBh@Ws1B%2Mtgwv=ML-u=YHsG?lo9=nCS8BA;n})mxb!;)bP1s6g*-W -ng!110Dt?LK}R&Ngub=!pshLfmKUA&1Y6QpPjrsIS}&%-DNs_$|UC~p;FNON(qV`UsiMRLsNa0g*S(yfmHgGTy3@zX5v;-bL6uMx<#fQ}N;4V-V;TX;hq?2b)~v&bJLoFk(C>CckFvK;HjpFY@} -($u7LRM_#7II+JDz+Ix;<+B13-YTn(8nBR67=kG)mKm}YO%gZBrtF@Z_(Bn~i9LMHf{n0=U_20zc=&#xM0Q~OOVaA5I9qW4l^@wR0#5Scz --tt-7yCZR*4q)C4!zi*pm~FklR7BDTq*qc~?1V4cvZI(s+h@ctMNlXDLK5O;w5y0lAUwAA{ncXK~gYL)NH8Rb605HG -uYbl!*QS^nS2Uq0)md2^>WZ>mtJ=nkvg^TcLG!NQuVi!{`M9*iVf8A?;}v1T-yf=v5iG-w>Ppx^6qo_ -q^BIw0xdFuORyH-8Y;RZR(ianfnAP&}^)1AnZva0gv!Js?2&`osItnXXy9orI0ZGu@7MY#rn}B8f7z_ -+hE*N2MwB~9NPg4OY7P@Qsin46yZqOe>!!>t+l{NYvAJEJ8M*M$MvFm>3Y<@Z|BO2INIqT{#C4Jq6hId=9NyF}rK1WR3Y%uLhC4e&L!T4}Hh4_i7}<;UQTfx^)dWhSyVZGeLg}jF -`l%(gn@rD$f9~>j`hjz=NgC7t0QwFq#mRFB8nZ0@JE9d-Ryl8B=P_?iKC0RB2blKfXVHefo1acMa`ee -@8_>^R(=Wu@^K<)sDRa&RM6v_7SPtH9SJ -{oSZh*)eB>YS9tRLlN#x#ooBEc^%ZVl>J7$GS67G&=EQ2_!2QP+{c7 -(C-K{tC$C@qV=|Ae^un#pV*!Ig#y`w4unj$a>PktkPCT7IlWbL(|ACHCCy{5t -@SUOw4!u%flBRDC}&tlas?>mDe1iq)wJ&rxfq7r#VO!AtghQXZJ}%`ZUooYKHlWC2Px18vLgS_u^PuI -fWiKGchw9hNNwB%sCgFm29I;)GbUb-tViCsoIu;IRHT5)NwbM%S)L}jIO8j`9?0*Mba?ZE4i9URa63y -Zv5gQV#T#3U$0tWPqa6sHN2`6kT6rY*iNE*ywN0Wi=@iVvgMO>ZV;_FCH#E+1YE@A9B^@ -bc7UrAxw^q?PxUX1h5t)m{poC^XCN?-`x^R67>Dt$~aM|*hE+;4@4m!)$sg^4;qE$J0IIAfDTej -lo-oTlzx|{o`H-_%j)j$+8$sHn^Gv!!`qxVLL}uA`;>Pj=)Bbq1fD)4aBe?{!pcg;u%bcZ_wevq8ah@ -so4L^Xdfz!p^kj+?Pw5u;0mv+H0B%9rKpmn*(GJNON!*#XghaMT@-Wr_UOkDpR(krx|_Xfe}8|R96TV -NzL6SctVwNYl&PSrhtMscLaps4tcp-cD?LU^$x%ofp_qyv`$^_1TInMQU6CR*#89+rs~w({ATyCe(_mp#ar57^|7NRm0Adz19+}N^j -k;qD}+ZOVZHQyKn=1B3<%xbRlusm_$p~|lf(~9f)`0iJGJU83B%D9@)70BQdQqv(FJQqrUoe+$xKEj@ -`&+3aXHjCPeeWUfppT)eZbo5P9CT={`T-m^ffHBY;nh`l^_;6AWmjflbBr7nLe;IA=fdBtnT4heDEm2 -azUO3O_{$_xQ`X+vQvT+4$Q0D^9z_hprkgJV#dtweVp6Qw~x^ajL<7^h8Y@ojO#`Q9%^`9)cLP^FJSZ -gzDqBQ=ML}15{?tvM;wrTjd#z0{RO0V4AvYs7h;AI@-Hsq9l8Qap_+;;DhIz#$H6}kr_~ -B&scF_V-Mympz2@M$sj_t{X|HJmgs`n;n$L5}R{-MxCS4_3jr%FLiMjg|9P74#79|j+=sly|6@fHsWl~o&PZ)s%J4tsjjD9_i{K~!zqbFQYl}aQY>(#34 -#A;AWn%=Dwg3B~1eHFPR`m@|ubTZDVo=JEe`nOdoi;`ex4e3wmxDa1TVjEGc>Puf-tE}`NlyKPKjy{v -YWDxA505h5_u$PXJEMD2sv0Nm=r$AQpkXAT+hnSm${p=JhAtSgw&eHnAiH>tO~2M>)-ouP(OV~ -Z8>^2N9mmEwTXCb~`eJJ6;kQ-$b?5>bd>uEFujSFLo${O8$#K227^8@G1Yu(8qn+6Osn@$CsDJg2Pom -p`yG^sfaLaw*rhNsN0KAKZU%~Lu+pT`vPzdH?_W!z6KBZ@vHT#Nfa{BZpDpN{&lfU(fxP#P&FKMT1rBumk&$!*G8%81;uEHPOgLhX9<>P@TS6parj?nB# -I;XpL(N_pOP_OmjW{pzXpd%hOLHO+8D5+;Gxa1g%gcTxKE;m&#jfOP0*wFwgVV|08G2f_~WuT-kUncWE;ZlD*Z=KI2oo%QK26U -!aWk5ir^oH%sms`#-3cF_e<0Je}@O@1@2*!SfOfK5$xW&JdElgM06#RthN?pUo>4JFq${`+(jr%^tCU -I59j1QjZ-jZgBg>4{I5Kdjn;!xkL_VVcacRx{msYG({!_!-q^LZsPT8Vn$p*X=Dp>V=*{sP&Ztr94t|B+(oV(pTa~k~o`V|L_Lo?x-tv;25Pg7%9%^X -M>fOb5(lN@*XkBMXCqu8r$fgS7+{2!{=st<*>Q31-hfd4WvzI6D&gf0ftTt8jIOJbGhoYpwpDChuh*| -VJ!@HvATW!WR3pAJst}A1obwF5*O+4yuRO$2$CEqAGn@ptETHV*+3l9&EqV2Oaso%riJ*Xj4Fk*0Ynu -M*w$zU4fi?M<5SJbF0R=fswQd&@`%VUyQzo~ciAhz;O>MfwYRyS8vPQ3@fHdNCKbH+7TW -ARz%#y>v2d$34}1iT0Y18;$|B0!ICz_lF|%2-aU;GPsV -U40nU>+7a;)TqfBlV#AfX8!f-j2oN3K^s8}WweNZ4)y+%ubf&9>kT0$0LQnK?S%8#kcG#hHMJOY~-8eI}#CsAHUt(@4E@C9qHrG`JI*`DnR3wSdv|h0g0gAe1g^^t(%?$4qv -AJcv47z*Y)1k5j%sm}j%9``kxbT>-?3k*Hzj2e_5ZK&&$HgKr2+v%pL3GKW2~y91yd`@|A%nm4eId|o -P__6D^fJ67`pc05#=(vq8zHusZA+Ij;=QbN(2nOFe31?~=dXC#z`?>KVcJ~6Om(T!cXciy^iwPzQ_cQ -tofjEJ0_Kxqa<>T7zT+j@aL>2fPT#-v1Hhmhl>QxD@0+A{s&UW+w(8amRXRwVU`;p55n@CDUQnsoo1| -%JE3d9^yj;XM&dc0hOhv$*;Ggf!T1X1&3R>#|$L4nS<|#9H@8+q&@{ewM>RJq}S~es0&QX{xUIUkpaD -xNH^p6PKfU!=ysy^=2MVh18g?Pt`Lmp_m@kT8(m|4Zs4oI=WC97o<>f6qtCw2Xf8gWXw8H0+|TIv_31 -(pXi`9eK#hJ;s<^9DU}`>l@{G}dx{OGH~rnYGF!L|SYI`U5P^j=uB|hIEZHU& -790VSzoCI@~y*6MVaV7g)ukzV$yRLE9YgY>x-j}74vR|mp0W93|69W{rR1^nF7!!D~?070%5^S+(j=! -DyJQ%s`<-nhe#9ueL1eJLEu!F7c&3L$@nSBgzNu0#d7yO1Vx@G^h;=5mU6s$)i@(%!^(d);{Lf_9AEM --wtHn1SpWHWK}+Zy6HB?B;Zy6u)Od8IxSj{IrstEIEY-hsMH-x`AyJQR4ZMQ&gdo(uhonHVqdE9o-i6 -#%6CoRkh~xGWIAsO0t1Fu5j1-qGcZD$@qNA6VkXxp6rHHwY}4PKP(o@oEj(wdS&BA~$0dnbkU_@__@f -?7F%=*xg;gFl!Y0)$Xk7xcj4=sAju+(f)q)wR!|Zeei1ko39NKH`y(`2zg+(;;c&PADGY_&G%m -i>V*?$QhR)hZW8?RFJW}(hGG3;a33EP -_Id^PhSHpl7aDWLknOeWI*_`x}Ds_3W4Oa1Gj8PI4cwBDbmk``Y9>s)VJAFOx$D^&tR=T^yOmGcE-Zh -0WHxUCz10g9u;+pQW~$IZNbC4-{iGB8e{#akgrIpF1gT~!sWcHOWV+%H0OtHNt^f}DwH`}kg(8WzIU< -fmhW4ND?lcrM9e(k<6j$#oQ1LMN{jAXV{5S?w~xi_P&tY1-96Z{tl -IsAOX3QTkr|al(I*y=Q6#2hqEsk5?e>_fNj$V&F>QBU#lN$@qKdU?7E8FR&mh -$9llQ79yncFh7g8q;w`v5F(+ID}6_5h+54QuwiAj`>`xCEp8~zLN`CGrL0`q8cGp>F$S%>yw*@eyvvX -*oefEMUG3|33EWT251=2DQk9W1YQv;fp6{@XaF|GzE1#ZLO^LXVS4wz44Dh2xJ1JcfFUCh!E -G)g*25Te6QnrWdJ*^wh=K8#Nwl2sK!1JJKe;BJaHa7QoS=`8L^7p#FqUL2G+MI!Td#j{a_L;&^tzW$_ -xARrd*A(*Ics4P9kux9u|R33np4yufe7{^L8kzWr$9U~K_6uUu@g6tNXG&5$Z$cv>CnM-7&+gXHUU$m -228T;06jL^vu!xbpIPh4sr!^l#f&^L^KC($4R%skIr_<19GCyM5wg*?@pWOH9;0#O~iTU6 -*5+e?)1|O1lMSmAJcHJo(^y834ps9I2cxfLbXL5USeQ|T$F>V^gfve8~e8B=w5=$?)(!j5F_IK*X%+_ -#e=I~LPaJdmL$Va9$%#cc^6DoVAv+D>_*~WKvAR^4&Ny8a4<;-~CjD!!4YgiQuSj}dwAf)Sgnp5yNb% -G)7^hznTKzq1aC;d0Ug9g59ktAbVsUu8AFdys#vav&-DoFY%IXWViMMiO4qKbed -!{L=1(H2iQ8)?~d~aAl5Kgb#J3n>KZ>~IEFQ9`YL6)dQ3z(XT=n19Aq27?oVA}y*hhpvoWZF~iMnZ~_(hUd;_G8)hlT32mw{PD3^6q`(p>MxDXxdbU^Wzd4>WP+1H}9$^#Jf%1PM+;|H0)HHSdq%;@%0W3XRm4G!xPv{0>)eWg0MIFeldgy*+S7kDQ9kqH( -D!sFFceDalVd8qQJF~a|r}54p05Eb|WX2$@eP7IU=3`@rw5DApP0%fcfpJov^DXRnQf{%H(pTS{<@IK(gpii1?8~YGy^9`6d9IfZw7# -}F7fupt^j4iVm0jTHiYe-OWfn00998xwjbE2y{QTjojb1PeuIB`koq4YXsa45h)x>S&JcA^&Cu`|)BV -P~D=4{(%E)~t^#oY%+jq(%cMGZ9;JI{-aYoS<&T-2wqMZshS(c+~QH66_`}X=jFu3Dx~oZ=2 -{=uO$aZtLSqm-SJZfneJ#J|csdw;LGZc_&6?1IqegY$KJ6~53PGyS?#A@{ZuX%Mdm7h?d6Ideq(vH!KRi!VqWyoKST|2deZ3* -e!|yKBg9*io`h=BZuVPcRq#tZIdpFl-7aun@oOF~noXeW-&}$|W@a)5yaNl3cL@(Mer9kzOS1l#H3ASi0K}7a?tjJZzhIZoho{>eaF4&1JaNmN -218D2~t{U`~WkZ3D%VMA+92saN1i`9Hf=&qQoby4~jXc4g|dnR2nCD~A5b#a;g^e=Ka(Rx&75NqJv0! -7qb6v*qgoEt*EGXvl_cZ>htp?Cu(8l>2{y*{y?j(&LCuahE<0N+#U%7;uUyM|*iGsFVoGXk@$e%L93v -NIKVGz!9+`vj}314t?wklSP$~Wv!NNc}5Sk?M}LPb9HrdUA&Yo0_ku+B40P8@8fzZsv9b*ceZ2JH^pj -wRa*HTSV5!U3-N^906twCZgX#3qK$PVhnqlX9h0C9o9ek&z|19-@&OhtTsc{gCRu1K{#rqy^So7jY_9 -CaT$`hPOA6Q$Jf_l46a{7rw_zS56H2^@OMZ=Zc^PP&pJ^kT~k`eX&A$6aKZjJcwz)w)HhcFr0dQQTAP -{t9%GmRz2PTCo!QgRX>$26iaS21iRG+(43rNcF*u!vzKB>f=%c5gbwf`{<4_ -ap89%p(qZT16DEIf6MT^f^olfTs(7Uzj?`APjbE>Zn!x?lGj*CL%Y7m+)(rd#Fhj{pA`{})Uz4g2f-> -p5OVLSpAjH0$1F$z6S9B}+c2nU{xfNowM9R6Z#PnO}0fbZMdL9Y(&{`p6yjJIzgeIFWTSSuLWO6Io%t -Zt(u<6n>yF$669K$eaFO9Fqf( -yV<($B5Tc0J#4V245MJ_blX%vZqleVLksK53fP)h>@6aWAK2mtey7DvqtO)dZe001Bb000sI003}la4 -&UqX>4;ZVs&Y3WG--drBuOg+b|5h`zyHgFb8n`0mHJxu*)tz73firZK`1_OM)b)$%_8_DA`WzpzUEZ0 -z?wY$Hym9%G(}m$e}SUp4(*%RqMo44w`GXqZ66O`iwv-lLiWqsOFRt)O2(qKNg*BJGl -1)79YW^V{YI9!K2jaCSaecX|R<;KnRwD!YS~*1lY?1CgS8ToO{Q5T%m3`1UIs{!u!%p -;=dLh@*>Q7KoGF7q0y_2goxm`GB(Wi&&r)buAafy}r$LG;Yc2bK<;W#mXwzt1Y<0_&AAOS7AMv7V(U= -WeX~=Ps>F=TXsdx8c6L&2(=!+wE1J|8AfwyjAGGHPO@opY_cry^}_#o+L_tYr{EcTr5Y=qw~|~Ek?{E -zYGR8-(TP0^^1S|v8k2yy^Pth79x+f5WGs+gs3hIwo7=vW&9Zb9J2~JE*=9swiO(t9{4qg%>p5Zwi=} -wT)9X&A6+G6Wfw}UWgXwEa#6rvP)h>@6aWAK2mtey7Dv9ThG^dc003wR000;O003}la4&UqX>4;ZWMy -!2Wn*DV>WaCyB|O>5gg5WVYH3@QN`TpxOBLtO|>4uOyaH_$^VVr7k_EvsFzv$E@d-`SPqSh7rdC= -~{4cV^za`BWUo(GAolZxw>8gacVOsz&VyoH0u3lK%m<$XEdd9bhl4=4%3xnbtv$jm52S(r8*mG2<21) -R3k{>spIx>Jg1~tWHL?4%6-&Mg6@pWyyHMae$AaXsZMfJj>?x)yMZvob>;T>j?O1Sn+7E!P@LFzt?Q} -anPSdS;8~woL|mGZvlV$H^8@d&zrliH!t^3kKbSoKjyeEXC41!>v!;dD8}daU*Mt3B;0F!`HmX`wdrow9-+GmuYF{)2vU#)+PL7R6ZFD)KC{ -~XnN?3lD*pLv*4=420$79-DjGADL~RyIpS+^Z)_XDL%ymI%2|)lgxRpYw19&QV=ytTQujICZy;KS+p> -s|b>wqbE25|y)GGIfL1ckBC$YwRt?XlOxNUchA58*C}z4Ga(#*1j;=cVEr@ULlYV+fgXOJV#gge&i`7 -S1tzg_et}$)U(SV};K7`5mKqtDeTNUiv`2L~@6+7Ztdyj;=Fi=hL>I=3p;0Zzktgk!Tte76kbUk*Se8 -2Hc_H+&T}#t4lJ$K2yLe>MTj=AY4OyGJw}`MKOokOK0-q2Q4f~!5+@LfVzTa2(}wojx&V2LwlH@Y5eW -{J^8Y77JYqu*MvyfhO@xIGE{BYm&tb0w8ZhA=f)?@JGt9zo;JsvE8L;-ZPsV};y$7YoDYp$*O)tQOJ2 -~t_8oi}*!m9xlm=Q(wDQ=8VAF>@L1V%}V=FZLY8fWOGNI-PMZ-qExOB%0_tLlGSh7>>!Dvp%HX|N?08mQ<1QY-O00;o{l -@>?xL+!w%0RRAl0{{RQ0001RX>c!fbZKmJFJ@_MWpjCRbY*QWaCvP~!EW0y488j+-r7S`ATxFz;M1^S -!+`bB0Xqh&Ovl=6(V(Qd`TNnb(ll^&Fl6$*NAihooLC|_RPKDMClmXs>V!v3ZmKPh8bQe)DIONUA-T4 -ys+Ky~p6tIh$g?NeE!X?c74+QVM~9ivvcHSy%`?GZHYY@0d5ArMx{hpgnp9PAr$HAm30n$bzd(FZo9S -*C@Hd4B6G9qEliHkC(9&6}b)s4nk@g)zg=q#m^&f=nZQthV`Y!V?KkpfA5MO@`e^SgUA4L)52u3 -Iuf~3T;RdhFyd1is-i%bn{SQz}0|XQR000O8^OY7yVN$wcvjhMD{tN&B6aWAKaA|Nab#!TLb1!UfXJ= -_{XD)DgjaFN4+cp$_*RLR)hf1wS6y4h}5AzatGvGRa9UvHrK%gbc=0=eMNhNWA{SGgZC|g;p7t7?ieC -K@UqDsjc<$2YbR?$31tZt+-h#a)!t)aR9pCsYDkiyVc!`Y!b;qrK7;&|~FpNJ?qRk}NuI!TN=|B@hh! -kIZKN=mCtUkln8w07q!rKB1OmTg_1^IjYg9qA^O4WVHTE@a&h(>gxEd8ifLu+z5p!aCj+iKT>k#kH+R)lXh9EOwD2f$#@vqz -ulfuL4+@b~ANr;TaEC^4t=o&Lo0ytugf#^rj{e9pLhu4}2a-=FLX@$IkwUCOoUVO -?thS_Z9ewQ8fC@7(q6Dv;Wg>eqCx0(VTYUxL^HBAfbN_3#XEG<#xB0oE0R;s32gB^`%&FnoBnw21L@W -}5QA$?dNK@6`yrGuq8dKZbmo1>2zSSmQt8 -m-+0(DPZU8uX}2yXNRmz`k=}eOK-<)s$Cr@K{JyW&`>zANIM0z_d#@fDk27Wl#o-b98{*J61e01j4pp -J9fIf_tp+)U`(N+Rj!=l+;I9#IiAGOIV_>NuEN4ou}rGYX80e;MEbSAwNE-jGxYwNjSPK2oIxkV!nUy -NAs`=2W8H9O?6FQCR7(f%Ps3}VwO0y7kh{LiUleK5_wHQ>BJ8a_ZfKb@(M0qFQ(ZWmX_E$3!2A`2=Y2 -cly*YD=cdPyCAzyAb0Z}j!?Du7KYqi)nTJ8brPP=ltL3dD%21Q6^?st3OY|PaSdVpDn1f`|!dmaJdFe2P2Jh9`6>V7l$qOy`)zQ8#iGvCFv+ -U@Rl^AQ(){-Dlm`tGu9KCS$?+-=v}KmSkt@6~2={}@|%a&MGtIu-NN(5N{SB{O**%3C`I7Is2M1u@AF -o>a|}UJDW*)|TB86C~Kj>SC`7$ojCBFhC#VBNIP=N+XeM0IpB6<)zPw6N&J4B~yfQvl~ntheAO@PE|? -(Z7-+6hN}KdAg@W(E`;ZO2`8XD9Df7?j{NpfeIc(Kn>vsiefqe+BhcfS=<*%GcNqQ72xLUnMvY#>oGHBAyas0 -7QbD;J>5*9Y22c2(@g($aq=!cIy`!L5+9$wn=)NWNj8+IL&r;@ZOJo`%Z-ZCimVj}X~@&5&{K8`HWt# -LZ5gEPA$+-r{DRK2kT)ul1tj+|IX6}-33@adU7Vb~K#PuE#m9%2C-IBdm+XKAi!p3oEaA -7@84}C_4WauQ$Y}~ufj_6Ja8RGGxLgW0ylm&S58OgX)MwDOyn$u`|#?BN^nOy*b2VpE_hEv|IuzJ1Oo -Sv1y9aRA`++xav5~&^X1%2z$Xfg&9f~R3CF=-{>A%ViO@bt}z)(WHho@XVv_ld99)A{N1sCA*?OK?U` -S+OoelMz#vlv;zdF_m6N*)w)%F)s>AaJJF{6{->|uheasI4?3+TRZs!1F#C7a*FdoTINMK@YScm2t5J -jk&T@l!M=AA+*;4+B^;*jWV&5h*Dt8fbJIZL^Khs=)s`u&t@s|+=HOD7+vcI*np>sKK^RN}^wfSZ@m6 -ih=Fd#s@a#L5Odo}U|53?YZR-7cm-3miSFrxhh2+9SWt8)KU4&SVC2ER%J=r0t>GIpyv>i7aM3AjxAC&cFC5 -Tj8lz%Y)Ji3T({jW!W#JJ)Up9DNI%YM4QEhA%JhW$RwPFEK2QfiB_A4l-Yz^)4TG=@ZVCnb}r2y-fDT -yG2852GZXQXLrZgo}FLUSm@a_7q@8If$J~AbH`uXfSRzGpn<{?w_q8!8-#U2VDdc1=)z9URQ38eJ*wj -E$GMi-+8Y}4ko`2iu40M4H1t*P9RxuIRdZy|T(YttO76ahGFAaO6S=SsDdrmfEkP!0rsh?R8LB}g6JQ -0Bz!kuK#GDC)B?g^_U;-FOoD|Y&BRxE^0zqiw3r6I(PFDq?Pl_?)x02*sWJk+_8gCJCX>Np!W7+fb1LbQQ!ptRbqTNWryyHr}eZrarJ<7v04p ->EBhNORYU+LzKMQmw*C2Uw56g3g5mIzBcl3DhGL9uq@v7S7dvv&VH^sGumi1$85(4&fs}Z-rmA8%<{)M`}H^c^ZU>4&k&M&VfM`S+;rXTckep -xZ&T3=5Z2FKY4BbQ{m`wrmfdK177X&a%4t)OZ52|`eQxM)y46OM@Px5(sk5Pu(OA5L$WKJTm>33;OKsuuZ=)-gI;SF|8UR~_ojRF4H;&-#Iz&mvI~@+xt~x1 ->~!pdkf~a^zQ>nJq-eM)!Sv)S@`BolpVAeH+9^Ch)JK>4$D=JsfhS4wlzw>ejo5+ub!Gb!)$cVC!2;S -fEQa8tDjj1lO>K7zIb$NW)o~N(>yQ`_ZKe)`(zxrN!;{M?_o7mNHN#UmKMJ2dI`UD8%hA -0})&9$m$avnJ@!%8-r-!hfseSv=h+!*=JT=nSgWb_|UO9KQH000080P~d=N1-nT+Zzc00CpMx01p5F0 -B~t=FLiWjY;!MlX)bVi#aT^{+c*-v`&SSS8f|5?$|Q3O(7+~{>~3RcvxDtkvi3^&WQDz$$hJhV|-(E(>bvYzZdm+u}VHlE45lI;sfb~aauP -vJ+Ma`7F)Shyh#hgubkc8{{8mTea|+@-ajZ$JI~@6UI`>(0r>rnj -{=d+yd&{w8J;MWeS{skTXSD`>w;D90W7&`Yl$g{rg}Y<)U;SF}cNjj*=Z@LupeH#xgir4f5l+Tiyy3w -NSvh3W17Y=B*({w1H}sVT!M+e)QGzvW%{xmY-Je7j)yT=JsSjW&GG7cbZ^+F7P+M6a%efvHRwqhU(P7 -3B6JC~-S!b0$^UbQQsNceGCIKawazh@j}!tM*Tdg?K7O>)1#C2Y3c^(zfh|ebP!S77K)$t*vN8>DI}u -b=h!hSFI5+$cQRuHE)^?FCVg?MyOJIBW@^c+&MD{7qx6e&X!4LnftA>gSaIDn>|1BS1#7##h{_zTmB@T8EGe{I>*4K`gg!yQu+9on!rt9|xV>dakisvPHB) --nI5yB%H(*RWPpm5^Jt=+K|t1Qc(UHa^zuX96wxM7X7ZgoymyW>_^==$w|i4j^uGAJnH1{1d?kbf -ChyZ^}xR-o`xs%D+M8Hi|}qGIKx6Z$vR}lL7N9V&WVr?ArXK*aV7>lDyz9FB`8WeQaZ%Aht(8hMo}i~ -eV7`Kq6dVA0QFp^&kVrgo0e)d_?i{o6|qVlWq~h&jQ#^VGXh?X?LrPl8!1CI8rgK*n> -E3G&g`d?NNkWxu+;XOdl**dr*z$l_k|1F~~v(5l459HG)6-G!azYIP%OQCqr;ojeHPnCo6OfR(8gsYG -zQhLmwG$7rez6EBCVDrVn<+3dz19)z=o0Lf-rGDz|_q)PGVG`a{k(9hD$T(MQA^g_XT7-sAz1Aj3cqu -fEpgCMm;4KzMK82BTgV?ACd(EOq1pn>yr@fA_|}tE4S~UeGhxvDTKvSi}ZkGB^rLjUxA)gVk;Ra3+e$~Bez>3K37R -orwkU*!qdcHmU^6%_$Qjx2j(xp0ahPVX}~Atj7OO_M)2y`BSD=C1x7q^`d#!%?7#R@%^?F6go3o -ePY|&I-zI-^)w`?F=N`3m=k?-W4hGUY(rdc3pPx3AnjQM&rC1F;lWXnB;vZ6O?Zq8y*L0n7Qr;!Y-4} -;q(&23&Ryv4``VK>s@TW?&D#cE=GZ_ZPPdX&1ey;}z$Or=sPP|g#Z29c4zUytA@+@P`=YA=Z+a89F0N -LK{gMPe-=72O^M1oN@Dfa?bu7p8r0BWgk#^$-yGDjl241>EO2r*K5PwE|CkD~#nDY1oMKNXr3ZOd -lAQE`T|<_xXylnu5>|3O~o9`)f2|HYP+;>3kL*72m>@>>nZy^eQVo_Q=Ko^yGJc6_M0%eKfcHFUs0S^75<1b*A4rz_;FfC -qHRm8Sw3g*Yxb&FM2IY3+2tk6(GMJs8#n^Ytxne9)p;}Uf?e4qyXxiEuA195?#pyh5tBx`oT;1FqwT1 -@J`p3Nn{IcM0+e|=t*Dq&+)8B^D3G%HGa`pE^iL;q=rvIr23527yr(widtEw|5{WUaidW$JA?EHgX*G)I+;r|b(y$#R$oUFVwJiO;~CY%}cCc95R7p8`E7m`YNOh-CjTUY7M`K -QCUu)JDeGNUef!QFT#{HI)g#_jP%b)GJupU2=kyd1S?> -Zxmg`FCa<2uC{WFAGDvTn1UQ%+8dG_zouY|3guf$FhkNRk>@;nX{GAo9$ -q?hu_lFZ1>(fp7Q^CI!rOiLpbDY?E5cY -zIj7l!dXXTM!tvuG!@k*Z*+DoU;L88g*(t8{sGb~agRwP8uJtjbD@Bw=!cZx~+~l~<)m?C;6MjSH;{< -$vUAwUWik|5V05nRQjld}4ubGHJFsKLD(9J!cD^-d5WrlX}il;7nqw#a63S7&D)+;g8;wT8KH|bxTkZaVJe_W|PS -zNf1WDF4>3aE;Z9Ro32Ee7@a0s{8>pYHliq}A7LtTNobhq*cHRXA89N~l7er5>j*K;xiRdw)LdKPL~8 -MeNXyxC!VaLWU~hc@IG;Y#kV)6Di6In>SrZDf#IN-V|1bX1_+^&mmcDldqJt|lu>_IJLY7Gq8IdpDCi -r>8ex;oNy>iJfY-b%brfz5%xKLA?z~ln2$(R8te<}zU9c^X -Y$L}xBM!$k!)Gla0Hgat&;qQnpoMWQ`M93#AiMe=l8(X -r;P#B&JW>re#-yXc9C>o?t@?Y5!edPL% -3#QQ30mj8;FdMbo_hXV2fY^m9C0D$1c&l<_u?Eb}S7!h$P&DekSrR350$H=P0fNi9=sw$_mLCh#9q)B<$4#;yv3~gn*!VQ40xcuA@K=_K -z%`A@N>1dn|X>ka6chn46Jq;HjX`uhg#P}5dp=1$_0%|V>uKHy*Cy4O5LtCG|*8((TBMSi{19<>#7+B -D-tU-+vI80<8G5k1J7EbEAIkdt-MRYnyfE#K^(JtvL&ea}ld-hNZ9t>&DhzBhKv%18SJZ>6Z;Vv!co( -9)TLWJF-aSTI_xXHaxVR<+K!+_0$ye&xPtW927lWZq+j-}J7CEf+kdf*ZJ5jcd#?Q(VSzdjP8S(Iy8! -)I4P=GBDDPNLCddvnZfoKOCW>lFm8ufDq7<5L)Skq4QTG -2S$7zd~otzU6zpT8fHoknLeea-W-kCw#;ZRi)T+6&}!_zU`eLIAF?Qyw}Pe5fB$`{@=WMq-$rxitmHB -eTm}>vvZPlLVc%5|9E@p4gF8k6k~548v~=PGel5U=jHv{B^yHg=JtHyi*9R-=jerz5V|$Jf4tSnbsmP -wYmFu$Hn&%f6kp8c$MVzY5#rCk}7f=&j5JYo<5NjcnninSLP~C~u3JM_|L?8F7RS|p#n20;R+2+84*M -IP0r7-7V3xEUaW_%0+j5q8I=w0OE;t8bccV}@g!LsmUU`@_bj4)W7Bw<_>cVtH=MZ-5Vmv(Oy3S%9Pp -!SxE9y4J|SrDWeWaANH5rcN*2Pi7`MXq>e$&pY+&q-Gx=wW~a-Xo2)+6>~OxrEsNR+T>>x3F3e*&D5u -ZaX=^3=Ck`&2{^6-Vi3K(i&VxNaFine`HYn!q85V6IdLmipJ=POWLu%y>M_pfmkNsIt*W-BZ^wi@$4E -XF^X@XrMxa`KjA{+DHV4 -H10!A)=I{at5eFRE-Nl(qf#`3`LLS@0GkEeA+f?ehv^3LlwVR7n%2ogi49RZj*doug*q{#`bgM|=DrR -$v8_QIc)K=xpXXdPxyJL=p5gNM*V>|i3rkXj9wZ2FSWMwsp3WOuQP$c1Q!;7dZVLq&K0s<5-8qsULEv -z`Yd-odtQ^+hvyNVW<&oCie8Is>a(LruXJ3j8p~HbbdFbBArpi4^l}zZ;Mb3%2MzW-%6htkU66W)d~N8l*bp_QA?FGGe>y_dm0iQiy&~ -^}q}kL(X5bZN2?{4yz$u&Vr!>lQkkE1ono*=svmYbD3cJl|L~6z^ofY@qJ)H$KsRhJxpI2gZ7^8#dIr -unG*8(Hw;z_s0f2ScClvY)02oOq%C1gvH^#;^ -%HZ#U+2yM`F_8rfGe(<(J?|~D;O!A8$g5cKmIK=GD7Dow67_T}-aL0~1Fx#t#A+(Bd%lVd9A1JZCY9v -7f_nw;&>aBonX;#axgRNq7O^{v+w^q)?1@ThWh^ut!9s -1rxIW&_(%CY;KwhX|l$8xP=Y?Kq-oWM&j`<}8vkjQik}qWw&6@q00&(>Zou2MplQQJchndphI_b5=ri -P&%hbX8PJEhbR^ocv|KQt{0O~Zq<9NAxSDUu4v;@xleL^9*6ur##MMf!ZL7$7Rb>ycW>h<)^?yi6pkR -Kxy*NNW*XAeDX+BuSNcI>gsIXS?&M<6t`Eo4n!%b@_g2j+fU8u -d}lYmo~VoWKnFd>d$_)A|2M5;2x64I{W1KoH^Lg#>`m+)fzT?IZ{Girdo@uz9argOtwetxu9TUFM)`8 -&2YW_32D;MVo&e9v5Q8bXqUrDi`2zfVi}R6sl;t0py%ptvgHw8z)plpmf>y@gQG@8b|e80O6kf40QlW -qR{F}|G0q+##NgGy@G*TBfjpC$m{0NXDN#;Df!A=QX+l)c#yk}3UUDy5i4%j7z{RIg%BAOx1|aM)o+1 -%e&+|~U}5UgAZ8SHr$fudmU_sZPmL@vh4}pPlW(7Vrf%LR@Va<5LVoV^*Pq;BW@1|fODXi{8rl!bh7% -ZlP|u*;hEM~t#5X`Yyki^gJgp_#Zuh0Np|2+%dP0kOSQ$a5uRT3`k1v3ezN3asgeghf`?zQnYndB&ogElaRp*b*JK%VqUURf&axj0+k9brr86 -ieya2?VNGsbqlyse~FAn@b7!omUjoCzqLqDysR@U5)tS_mMbM$&~uBZMKq<@QGxQMcVffy~mw$JsoOh -k~^z1z~BwlI}~BN5qTG8v0>qcP4Ij}HX?R?B7Yno9ecKs)^6Nq-x_^LrJyvmlzqqj;ZMQuIGH!Cwxd; -Z#?98_7Sgrc14wWc4K#f2Rn%f8F4AU2NOCnD&80=ce&JsC4AF+?m!;vum6e9Z?Jvj6*l%C~u0nY01k@ -9OJ+jP#(En!1Zr$11?N`f;(s5%aXa?>rX<19Y~(r0dy0u_+OlBcYq#prOgeC_EEb24^T@31QY-O00;o -{l@>?qnThqw1poj`5dZ)Y0001RX>c!gV{+WpR;2m84>)zkcUXqC{Pst$r~thv)j8i*h9^LTTQbR&h#+s2ZsZVfR{=t>LuWZ#MmTDG -vuxAKX@Iw=%qHa#3=(SA4U%Ab)=R<>M{+jl+E*G!eCtM2k~W$w#h}R+Xi=Pa38)-x&3DyCLw)QKRn4X -=5n})BQ2+Uhq@O8$;e(ns-V`)iLNF0qy#`jg`=dCTWc*wWC*+QJlvl6S^tc6A+tXBz;T=LRiM+Z?3eE -^;=mRCCia6lgGN0EE`of1vQd_2Aj}8jeG|$DidD+rR6=n8sggx6!&7mib6ymlICcr8@zGtb#lToQY -Z(N<+=dJjST(ewQ`){EDdqIQ8o4;fSl=NULevfO9%m#01|($-o8}EZ+`KFUTKHrjRxHaYtS!KP2DBlVn%~Gb1R4G$t0EC`C -FJ8PD*6&VT4JddIT8lg_j8spAbr+xo`URI6*GANq;lO#7FBTOF$OfFc`jS)+8Lq=%+i8dpgv8qhqtU2 -y($)=2A410>@*^O1f_VwHLqK)7Vx5aP7AmW=qd^-g_P`;)YOpqCb?+}C3`wO@JT>Lhgj-i$Mp>hguJB -FNS8YvGSyjx&W-!$~zl%wF%y!PYc*0=u(}g@zZ8F)K-LI_Fe3YI;Aj)#4L9grRy8#vYC`?-PsK7YdER -G@Gk5o3O*(7Zzt*?1z_CS!(AMEq~=O_R;qq8YY$Ya^nrS*7_Nsi -_F2s`q-$r1sB;-E5E#5g3DD#Szz!_B)R;S$I#_}gWiAdqvCB)pNn6FEDNXcW8P#{gRjj~nZ{2{5{hH` -wz_y~%9T%jKCKo4LEdKiR!LRnN-hgx4sEy;HHUH0vP~e=!r+Mx=Kw^qo& -5vDm1x3g;E~k{`GkSRJ0el$qznEnS%G5r3!quzKrj%_k1QGi!cygkwVFy%L -pH~(rR?#|B6v@6xPbYa=k9|NR%Vz+M*R*2LB7ubhv~V2MLKTGjm{W#IbltMgCrpC(dA-{w{84Z#lJz8 -Lka(<6-ddV={dICh7Y<|;TnYzGJIJ_hAysM5WutJ=a@(2Yvn$%e+rML4E(W^0(*-4)9!+|zR{sUv8`# -wX{5(bFgpD -(dJ)JO9KQH000080P~d=N7IP3k3R_j0Jt3h01f~E0B~t=FLq;dFK20VE^v938C{R#w(;G+g1E&(@~tf -26>T3}ERgh?^a=z`kxSbL#}H_VvY3@bg{16V6#4I+At{Oauy=1Cyc9K@8P4~Naw#g3Bzdb_$&!Tdsu5 -BXdQ_rpHB0RCYUTDzaXRt()IDleH90R?_bgQ0P+hE6IihWN6DMa@XF|q`KgX3gGZnY8Ecvk`)KIAyp^ -Dh;#5}+KxMaVzOlc2++woXvH7`|nAmgej=}UraMnqOxGLPIj?EzsKk^eBMxTrsgT1!!`Rx2O^=eZ`2B -ZlK{9|79>8i;!Xcu){u4N -e$a^YJAmR7#pDwt98}&@wk^c($qzILwtusPvLK~1Ft2K&(9NUuz3Wym&_IBGXm71p|i%%7;SuEsfYge -hLK(|(co79RB<+J_x$3Oq+!-sW`j_1hXu74iH6p@~dX -hepI_2Q`*EUly|3xi*NL8|}`eQsxG<~u;hO44~s7*3_{?l)7wdX9|dn#rUoTa=mBZmv@}*hf}-58`zE(q|$Gxwt;{EHXjjmpLN`O6L2$kp~36eGsZCIbHD)AVELZ4y?gi -WyJs803uc@OgM{K*$QMHGE(${nv&_HyQI5SEd5~?LK#YJ`kr#vC`nl`+Fqn;DdAZg{44m*+2n^|@*$ -0qOz&l&{-2*=<^92_~aTu4T`o1-CM5M{NZn!ypY5qeTRHjo@SN?NBFQ!4rb2G24gB!}d-#q3Opl~UXv -`H4Zv0i=-rm(SmRBqBF!iw4dj1yp*DSs?Zq@7EpQ#=}vQkVZimxeD>>o+nvOP)?Wx9bfkJUd+4rHcl5*X0NNX7tGG7iwyewN_C5)ro8sl?P<6(Z9j6s9ttL$%J!B_jjPY -zyEX@d9SK3J_i8{?Uq~h(BKOI8?0|6LJcnM#MvKqiefzh0lV -K|-Ds29 -B#_tc7B?aj91FVp0rm1nS=@`V%up=*zQ$(mG`uj*jguEEV^+AfZCXO23`Y=3$x1Ca_f=2#&xc4b}zPg -1PwP>Hex}9DJxeb?5j{)K&rK?U7`PoHh^`ioaMi_3jyW)zu$+7A2=;}&9D- -*>~unjO}~lnR5F%FmirMQKrwHv0jtHv%fkoDJq| -8rhsMdo)xryO3P!W9q|zUGD-E=guOrc&I4sD@p5V$vSd`}i-t)c#JOFN2JWo~AmCEO_YbcqTxeNzsf) -91Y1;^CU*;-_Z_QaU~&O-<>aa?VLbL(`u0fFOET$l_;2?0layQ#1oW-|s1Ohj+QP-mP@Nh8ItEY+Pfk -=q#e%|L10S?<6n}Qyh<|$4I`WFUia(qb~TeAQIH;6i(F&zpCRep% -~in(SL#FzDK+Ty@b18`(QVs6$GfW7^9u->!sb?R&CHOzP9A39Le1~gtxDFc}q0|S|{r{-;0CY}8)j!L -1w-PrL!IJI9pi;Fezp-QY95J0tN@E+pNWE43(%`5IHBSwlS<4VbIa?UDTZrymrgnkPnrRx$ZaA(TeEJAB%jh=Jb&2nGrgC{^sX+hEYt&jm$Iy -5Nv?ZP8q^to;rgYYeG+0JDQR11)4`?=3GwxT-&)8ie`B_1(qJ52s#h4#pd+;0#zV -AP0Sa8-3)f2S{-Ultor(yy9vI-7aAlyHblSUoDPV=Hzs6;+N=Gt3# -JF+^5KxJwvilVfXl};6o;e>}N8EGMI)y%gy!S!lX3rnM27~hV9$|XZCg_8F;7SXVy<-#zmc1FAi@&KI -c?{_)i=gaTMcv^?y)H0|XQR000O8^OY7y7@M0oj|Bh#ZW90i6aWAKaA|Nac4KodZDn#}b#iH8Y%Xwlw -ODP7+%^#YzQ01f^st?HP1BDD3x$xflBPv#TE)_o@M9yDA@seLb!%AKjW?TqzLsUlMd^l8yD!6zO~GsC#)@q=1?p~ileC7{+NsXDZfg2 -DZK$bYqK-x}Hj19IK@dJ;@)uK@OYueuqhvkGyfvY| ->dwb^XYE2hZKxtEm8{ATCEG!^s+fr&sYtEtxHcc!vdaaxB{Y|-6@zz@YiQ&5$G9p_xRsl?4G*2vV&X0 -;Too7Y*zj(~DULfjvtmRFTAjrXbhZ>=l$WvJoV*2)1)Ym^m)J)*0jW_1yRV;KlZ(SyX_&CSi*$1ZmjB -fpdumF7mO&xCf95KLmE{mhv*Tv#20GSDz+!~Cb2DcFuQ8lLa_g*E6#nNj-o=koB3 -Htm=b|F^Vy0Kx=kNWrN1G7jm2Tj(ZR%sS{*v@oz -8e(LD6PL~BBtnJ_?rmT}-LZEH*+_&1e@5L84qO!z8c%Q=V$)xEkD8F9BrS8waAxM86uIa*+k8EXs)|G -0mvlvMH5`FHZ3Wf*3=XzjsWe-|4hI^xYc*?7xXy>L-9nJ2O1c5g -}M8nZE|Xmr@{79a3HUI(scAhQg~$RHcZI2&a)L`O{JGT~6N7jmh!z)C(f=2NayltQk%ViIBzol>9!>|JBRNugB?E@%R!21Aoz7+ -T_4(w8Fw5_&Bp`v6yh%T037<*TyBrl+Nliqu>%!i6=K0Jpfo86D1?#pU!!vDWUuHRv_iwL=wz`-k&G{ -*Y`Buc8P25{5Z^-6b!-$9@i~rc{C$kE)j41=jFBGDsw)0+NQWqqS4ACi&x15=`D0-rSJyto+ibAE1Ob -&=>O%I^)UZEyh(hh!z>nd1gYlf0pF;ii)hdlIKo{t>$`0e<%7?$@f59&cD)ED#M3gPiR*rsIRdvE#l$H246eY13wG$P*5ggMhKjxW8#H|R&!w -_=YmRE&tF)rJdX{Te^545AWX}E%-z==DZ(3!r@~Pzt-haY9+Mqj|(Z?9yCOH=R`IBOHrwW&67TAf`TN -F-edB#Tq0Hw;{g}1`T=3NlYFGW@{J}?8@kQ+H(p~^CCl>7i!Z}*HvtO?HJ7`5ZMhnF7&^>wuW;jji}Z -qNqm9b72ZlIc4+5Pa$BrSvZu^kiEb_6&XXS|J>E_(gg(6TVYjtF*$?XuKf5nm`kZ%aeryF7l}hG$!a) -Z{aowm)vlkmUz&;_iP^gXUYx7?+Z&3^vfGV>WaCy~QZI9cy5&rI9!R}%q>DJa}uPE9W+1#~ht_YA`i?qEK@VbI*(YDUA@g8=D*shx77qX5@`%4lK(yt!f3&GFBdrjZiFK$);)*&-C}n#Ee(Xc3ak4` -?Znwli-ud26-LJW15|KT{I$<<#T#yPF$v~sH$>hxgT>OIm;!}!x?>d)|Yj`pDppnvflSottu;Nr^G=C -&Zn#><*~|NfREY@NK+%RU4pD@mBDCFcv^QH;p3G3z=bTE`dw2i(NvR3CQo(te5f)IHxryaz-iNUb2ye -2k0Tg-xQZA5yjtESS5cy=1wVz9@ZnG@#fuqC!cL?dqg89s3$j<` -V`F(gUjqWQk~?D1{wMyFtN^O=gGJJHFmGtsmM -=W`@nZoJTxdM5Op!i%}U47yZL$zcvsAI~kR+A}v+Hp|ds!=UgID>5g%9 -7bPi#lYA=Gj`mND9)R;>#{r+{cX@$I;%n82mpQwU5xeOacBG)6W2-FxZq?-$AuagQYIS#GU?`c*Fadz*<+2Hvf)Yb5#&|u`=$nrNn4;EGu -sh+axkm>6jQ7SxTzF3;AQ&etAYjQ7Bb4QO6b-2w`dDzO%9@yT++3ir&|;$(fk{Wp$uT-YeRIUM2!2T8 -jCAnS(;Gz+!bMtKyfO#U-bj>^)JQD4({_9iqMRExPJ9mn-)dxv_D%V7DV2;z6lR}m=YC*C!(|--IF@^ -kLXan+F&ShRg5@>-}W=WO=h|T+9Mv(Wo?jr&3^h~Cq#4Fc(G1WqS^|6G@gbG3PQKk{8@lQ@yGX -bz}c!I_+n3u*kgWKvmCCv^*-NnwgWVqAve5GFj4#_;I!xDiL)sEv4IG4w@tyArHWxLSf* -XUDT?a$qx7FTS+gno%04@^RhJ{cwJzBzxHe_GLSB<0^Hgwb0{FFy -?@hp?V%O;niTieM5 -*o!%UN_ljj{t^!YO0+xIg@{Y5eE8>^d8Yb-`dF3dWgWtt~uQ*1oMpH>Cc1RHTwWX7Z_NY7 -6h55X)y&Z2}g1hv^qbYk{$D^skgE$xWk7aEIqzpgzU)i8rZPeLn3G|8oNJWf+{N{+(0D&JAgK;5mtRW -LX_L?9%m0Byguy!_Qqn{LkhbL8#rc*C>iERxl|XoBBFlYZeXD2Oxh1d?$v(Dytwp8exShCN~}`wLi?|q8*>BcLaW@U@}=}Y`lK@;t6ub7_qdVi}7ll6@UOHOm- -C@Z*mo8jQDtF4@r_>B)IjR!ExB_%!SEA7d8Re+4$)i#Qb^9O)_fw#2;#i>8hd??}cbYFA^2O4dj;R{P -WyxmS9JG<9iI0N;x}zUks_R$Z&H?x-bI`y!qz&Pz|x#YpM19aobTtCZn0jNKcLA&r8Sye#onqlPAU4#;qv&V1u|1u)59~hubwC3O{cL -O6K3$7Cn$6Hq7yBppe5PlOPY66(!DFvPtjS>{>3f62^;XZL5?xmQ;N?wk1>7;<=f{Nxtq`d~v)I%ErP -O`q#d6|84bBBEjXrUc$puHyl&=EF9?xe~zQwaj1Inla9P$%XZNM=vSwt1R!kL{SZ}D@lMj(AY!@vE$E!oG`EFpy*EfcRvF*Bx#x-v3C*2uuONbMv`Ts -?6r%oL+T);F#3h1Q)YGUoN2`&hatjDOYZf>X;w?@jibs)BEykVL&H2MP-9Eui>4APgm)Ekj}b(4P~hSx&W54Tva12lWW`(vu1@^bGZetXbxQM=-o0T*!g<@60QmqY4#f@)H; -Q~Lu=YuKUkz#1FxT2NVc%o;`PA#bi*268n>T2%#Y2We>#%lQv3s<(flyF`=rc{*0bUU -cOsnjaxu9Q3NNM`C8|`(0`q;W%aEN#CjpJ49Y%xa$jzp3X$w*Gu%*I6_q+hQR;Bn;!})6-lr^c{vn<8 -xZan9?7Pys?3UrCEbmj>G!bl@Icc(-dz9Dpi9Ny-}TAe$GL2kevIp3MirWTg^nAAHVBj*Z9LII-R_;fp|x{Pv -$IirD#;msI5ycMLri9p>oC=WYj*ok>B3PYgq7L*3#bkruVkNAL2NT^YE>hR`&3fnEy&`5zRzIPkG_XF%W3c -fhj8`iO6RvH);gAM+}5|`7_-i7(~f>=8Cdog8CasI7e_PbJHmDeIP+yR06hZ$03!eZ0B~t=EjKPPE;24;X>)WfX>Mk3FGNLCLsCglR7p=xE^>2pm6E|u!! -Qhn?|F(y+>n~wD+WSCpxr7o&Ma+B8j&VZ;uh`gaoUbDG=a!1vH#EZ9|sfIX0u^z-vK{V$LgL(Xnfy;Y -oTQ~9b!nOl;Mb-cSTUmyVAz#Vn`4RJ(w0m1l3{(t#6X>QA=>rDujfx8Da#7qQl#+_;3w -S_1KEBJ-IHNicTJ54$<8&`@Y?!UPeHK?&n?5lX2o$d&a~hX@b88E6Rn1+ipqJLNQ3um39K;3Iu6@no< -YYF<&>t5i>qf-IDokWoweE~NqZKGL9h?%x#BK<;O~P55rO^)|3GKbMFcGGg({GI?;-D -Mt0BJl3(QjCu1KYfb+Bj6wdTDnq}u1j0wR_Pj;0hUl%KzZJZpZ!E4oO5W#82ms -6sO8t_~p<_V{D%lE9kh)+N}2m+%TO)465QmFZloxZE1a!t3PZfOSs`&p3~m&G*BCs0cR1QY-O00;p1l -@>=C)Al7Q0000)0000a0001RX>ct!E-@}LE@WwQbS-IaW^XTLZgg^aUvO_}Zgg`lba-@&PR`FO&d*7W -FHSDXEGQ|C>(4j9~H0ssKh1pojc0001 -RX>ct!E-@}LE@WwQbS-IaW^XTTWprU=VRT_GYIARHtyEoa6EP6{E0&*%M4dJ%REh+mP$VK18j-xA>g3 -wni|L(h{E;+@^546AzK9g@a1uP_GCSTG?|OH~;VFTQ#@WcHY{&gJt(+Aak~B>Z1@{wFs&eRoFRlgr;H -#8;oQ_7`c;UBR3gbq6|C({-Y?3Mw`^S!3S?J3ZFr+dKYiOK@5IJ(8MIj0o<OD_EFT%) -eQ*cTH*)SblGG^df@vz#I#en1)D08DjqdN6^u`KF=AhTUVQpKn=fa#-$aOs@5yF=S4`YWtIN4fkiJ6y -vB==Ow6V8MiIVn4{0L}NRP1HxS)#*ka1h}St&?oax&!=L`d1E!<&G* -rk~#%q_f`QD$_E_>S#vB;;h>x*;WC5WfP#^Ro(T8akxCOju)WfX>Mk3FK} -XVE^2dcZmU+xERHWq%}GrxPF1o}C@CsU)lpDN&n$^AOD!tS%+CV~Dw$iPBqk>(E7bx3P)h>@6aWAK2m -tt%7DvY)m%;`B000C4001EX003}la4k13F)lJLWNCABEop9MZ!dIja9?a?c4cfXba-?t$SmLj08mQ<1 -QY-O00;p1l@>>bGkct!E-@}LE@WwQbS-IaW^XT7NJT|V3(rVR&Cv}@Eh^5; -&$Ci6)HC36Pt8j$N-W7QvQkJ&$t*63F9)en&@j+5GSM^8FELh0KEqQ02}}S0B~t=EjKPPE;24;X>) -WfX>Mk3FHJ>MK}11RL6ue8Zqq;zec!JbiH8D`*S!FhOj8IAm#A$TH7Pu{8+&T6u)WJ(Qu6oA+HTT>2% -0=OGv~~GW-rl+OgIsJM`NX`6FB7iY$Pg7KugV*;$wcm581?5l`xA0rUk-yG46xGR8 -rEy-ASkFJ^MtN;{u2fzkr?}XKOtH4)>T)<`=eT%KCbJ2ku#4L+NXVph-pSH}Mdx)$!UEZpP-DP|?E@rJc)3)lCV#5%=58?5quitR -E9h^xsE`dS+`Cu-8<_NZQ?OqG^t08G@qdk_ZK0wwt;FUyQzl<*pnqRx$|s?fg+QRkkz74Tgz>FaP;Jb -$+{<9J8L(XM#DYZga*cOP$dWDF}^VrY;EQ`73k3r57b%+N-ke>)=*aA+MFVb}P}OGEMjO>wgmq<9Y)P -|)kaUI*OUM6QM#UY_<2_`&|G=g@3wq;^5u(vF_Rs#N-OD~^R5)9dvZ3+sNjc~RKO@EHqh1)jByUK3Qy0Iw`UQGE$ -evRBt8>aj$G4bLHA3XFgdz)25&QL#x490+^yy<(hMS}!JkVTrSg#>+8)>WhnW#|TJ*YSj%|7*8{5g0& -L2=q0|XQR000O8_>~q%jg!*R`zZhbR96518UO$QaA|NYH!d+QGA?9kb960fZf0*UQbj{gQbe_U$&#bW -66LfWlWRA$z#*VesAQ!3N!93tGq{kTU2P1^h~$4RSnaGd` -%%dSsc7{mW}NvLfqcx}hA3B=QTyVKO$0#%1~ANLbfK3Rmay6HGpgg=upXq$(0+r-~!9x_7 -}q#qyuHKBwL#9@O&s7BK`qu+^!G17p!yP6GlbF?f?_>u!qr0b&?#Ux!;vK!QuFP)`JT^u=?G84iLxw! -t%?YZick3`WLKIU-6cbCpF9~x;Wbtb!AP;?xB|0^UD}Ex_GHULX>542cZNA{e>0OQ&rUN>j=+|EuOpu ->L2_2!U+QsAV>Rb}9(g- -81a?1~y1rK);0}VZzb7lLf^dF8iSYFRBehwgJ{B_xJTnp08S4Xvb8)tAY?J{)K+0Z1qdSx!(Z6Ae+IQ -a{2v;uwm$(!X=dg9k4l6*<`(Qp-J`J&^CgE3!4aNFujM@&z(Z5}x2^$o~1~-0%%7Wum%G2l_@#%^+6R -}pJDi1+IS^3$}QbnKeYNbfxCht%b{`;Z&!5zll@#`Rb1>^CNJ>Z9o(9b7LG}tO23GLJ#A>8PJ0oa3+$ -~&kgH)>iI)`_15J=(GnjoxQ6Z!5F-DEaUNk6)ZJH0 -kY5Z)n#V4d<24pj`q8^lagk*uE&|ayseoE0R2E$nk>0@=NPYxN8#f5LuzwvWv@MJT_RVe@vW{}#F1}3 -ns}@MQ><5kAPSc%(Ce7FCa`4`CI*|^-VB`|7R;;Mj-m+oBVeDty6$?KE#{Pk*r -Dk_{CKp^u_loKc@U{?qQ`;**~;3V)-vICFtvHyn@LKy%fqfny|1hTC-I<F8fI!`k5r3@PYCRwlc!wjFnNhQ-5Yu48n+UVC108n=MZ6iwcl~4w -oz>9Q#aGYG;-yten!y8J2-z}>)Yh7U0{OjpYiC#5=I*K0j -Xz%AvLN#!Cqhd}@c0gS;%e4@Fb-=PqN{|5ZWmlx=HC;$^^I_h*8DD%OyI|ge4!JHHcX)NVtTjFDaGThYocldLRMH?~psCdgZLG2Mcwk;OcWXS#Tg-)i3;pA>_?T!G2B+KuT+ -3|{&crG>Lz-k@CzaNEsp1TIOvGW8w@71bi3Wnv-w;G;5l)@kG#?nUoBz5p|j`!iQC?_dZge?yRjW0&?r>c2W9tm2_oV||4_aBf7*l}B>&5*24-bg!4xMq4L?TO?C8e}{q? -@*Dgu2d8e4uCJ!WxP2u!gwUDmULe7RZT$z*!#3{wkJ;@N)`D{v>Gv(n?Qn?voxgvcn^U`t4sx{|485^ -qkhmxy@G$gPIE5C`d!^s_rN5?9d82nI^}DJ0@umN2NsU%z42%2_Y)3LAS8`D2s6)IntMLh2g-BfVYTu -%4wZ$w1|K0Qd&G9s|^S%Q3o*iSvn+#e*>O9M$!#WqNyN}>#GA|XB?oaYn!Y|9g*dZA5yOsMlO&11f|B -2_eOzoUsC^=`gd~;Q7XUaMbgsborEYqH{r$X6#Dq&Clj(U&ieqGd^Te@FOlk6VOfq=N~p}l!ZR{k)!C8U9I1Ct-KMx6N$e1)v9{F*(AT)1g1WCYfl?qog=Wf3oV446UD+&P- -F9AkFb}GO9b$#tH}o@R;W+p;Zr~2?vwV0hLS_^aVSl<=un2nhN9>-WZO%)CjmDJG(Hctq0&6?U-vsgI -739~*?>f6R5K?6HBeoSrcR(wbAgz6t!^i+VJ%sg?U7RZz?0dC{cQ8m1_}8#Mba(whPlyBz$`{49kOIN -n2#K&`(;IfWLR?%L^L3E#-~#PS( -c2{(Q>DD&2e-!QR8`KgjPADAhaDnwrI&viu}oZseKMDAEL8b&6fjE8Z0c!Z#e8 -*6a69v&vPAIQ$N9JX*_iRl!p|52P`UqknPmo~#I@Pa)kjT0v44n>jyaM#SBRtKoGdvV&2DAj>wXcQUL -Ht1GeLL~Av@UX>+a1MW>c8bX2A#3L(c@?oj9F_qixdN!{bK0QBqq2{z2yf-ex!;i#NPc6x0Y_g^TXwI -F)Tj!K8SHr(r_V8PYpBY{tkp^R>QeU1^$~Dd_)H!I^^N7mA$_f_paFHR3Ml!vHMR^*c%aI?(@Pds0kN -BJ;B_2qkdzzZLEk*(qN9S%b@NR2Gem}OASk}k2>sjM%PS6nCXVKr6h!S7k -@v2r;k%Bb=B?Go&ei}hV=p#^HM%EHI<88yIb@g3DhVvUCl#Ufsl_Y1f! -HG~4uZ@kO#Tt9E>Zulz1d+o&uu8M$<7L^|2036q-QL`F<+|jvF??k>tcM*P^-Dw9C-%Q6p3}xE;uM*D -+{o^_C__H!!6cvgNJWhg)Sh);-L8HAMbAxMNCoqjSpZmsy|DgBDoA=R1N)iy6>a|FnV7$~*pj)P4AP+ -OK99LZ1?*f&CoZo0uGV(DG>* -y0K}UJyPz1%lk}X$Q|(>xqks~ld`3(>O+LxW6~LBWfi~+uA!zzIisO}LryaYRgUk;*?0(WdI-~*+mSf -=E_#1q|M=xor?IAZrAq?oU@L=>^kYc(<82DYC2(W<@|b23ER5!0cXqskAmUR3{so^V?hwx9t8dCz2=> -hzeR3^;mWY$FNg(bp3`Wyd=YE-X{vr -X7e+0__*}Q0HOwhK(B$*|SFeI9E6hdH(*gw+-eR-PTJ_aSL-zRX@X2IE0;gc=8|-Hwc=Z$YVm_cW -rfT}`0;~by>=pGrFOI7NaY9<{n5!i|il>>6cLHY~uRMQW7OtPHQq!*k4@0xgJXkz(gh-wNTG -X>?}8;bw41f2 -Otv-2%Z}^=8g>j0+wg~VnnD^al6ln_Y?YG`v-3E*3w4nRhss(th;kar0pC=lGd)3b -+--T<^dkoToB6+5bn@e1^v(kwTuY4)NjCSBelb!Zn!8rsV$)e&f$$OezH?IHcWs;{ -DJ_D{AwGtq5I^R3GQ#vp=_X?rNw`?m1eAYr>$=K8?gnq~It5Ni2YkcN!yb7e1dp#Fk<&Kz-v4>7@6mn -5ZfWZaJ6XzzqwESj~_io@<9M8Y~^Yt}M0j?>Og-(pJ4nk0-fZ=1yLXX@O8mU8+PP*9gohVXsQ}yts=D -rJ4T^Rn|F#Z3w@IP?$?rU|4)Dil4xQ2bCQ=e$6IP@mbgwdo?F2p^i;#hPYOAF&Il5c_hyEO4+@W!+Vz -8S@BMQ`{XV`)eSu*0IeD4K!2I7I~>80Waa^!3VAn#UR6` -lV^{{ie@zn9uX!(fl*6Oq^r4w=jqupVX$$eqN*gv!uXSB0*V$p~+jQWLI}&~ -G=zYx)KEJ*8$_G!u7p+)K6z{Aeqsq%-wwhvfaV^AKZiTk01}&_6o^OtYzjtbWL*f)4HNuMQtEhzKe&9 -IIDLj`BpB;(2RD+j2lma3P3o -6?Y={4Glv@N0k3Co-5sp>Y|hIsS>>%2}o!N_#wMqb<}6}a)RZ1XMa9F+TcnY -=8oBm#F3YGDE4jadZmcNs!!5S>h0+5`L2jl0Hc7-xX@aH0deP#d9^>IKE`2$Du`@8BUHbGVdA^A^~&` -0toH%AB|bQ!kT`r(LLjpV(Uo-%hn}6T>IqTZp1A7!aOHb+vpe-(@qbCvj79O$FqDO-MkbEO*f -#nuMji|;MGfj7$w@N_FRsk`eDDlgV~iNO*{NT{TaRU+xcK?Fg#JRa`} -K-QZ$C*IK1P@$ -Uu#3{Y&J+0E69$9YN7K@FT -cm0U*LUPY^v<5hrbPN<~3-`uUiUG@s6b1lo1GPKNZM%jigD2`i_AVPu^h|3Vw&bl;2Fg0u``5-g`*bM -(ZHxGa4)!Eao11zN{yDPMZtzIAcsQJSQJ|E21|UnY(dX#hcf-UOj$v8+#2p3xEo%T$nw(bpAQNdt!|a -DQn%DI&IY~S{PeikK87X-wX6t?9UtdCRqU?*IeTLcq>dYDdaLShCEw2t95blU?^_uN6kW(^Ce=LFs|X`f@mb}Ens3Cc{2y-!=^?c>V1tidF=e^zJDn}= -OsCr&LvPAzM!S@q=aaUW_cG^o6eeH=qhL`3RHLP#~Cs7U5GSY9Y2rFe1&aQn{T0#!QSgffUZ$(+I3c` -`&jXDe-J$FMs$tSkcCb^&rZBs^e3|CzE&8XK)`I6?BiHDJnsDiB@xPk8-OAqhgL2O84~w2nKdNd=9&P -BZ$SNetUjK`Fz$Ypb931<9xMyMt(qW~VCHQAMAul6(xL5{fHuGN*Iv-phDfE${WuFXW%q) -oV%3g@Fq6#jTy$$_`RgoJWR37WjNk*Guw{oJ*u4n~n&dl@$qr-$6I8+uAqsUL_>lNM6$;3lG6oxd;VdTbg#f=Ga}moU&fWoPIy+c^}&H3{?b(?r`G -WaKBLft>W*tNEepBJR&DrrzPuE2sA2+V8Q@6=)s&jDeZY(yT}W*ih0mzg}f~c5=Fj+-hf|cSHEEbq(`>RLKQRRO@p?(Ih30(K -Sd4rb_Ki=f4+tFSvD{eu&CO2^BZGF$@I+RNR2B${5^6$hXbgo<9>r1mOxlr$>6&3J3zCzH_uM4|J~gL -`cJ1tV2WCdXKSoD5aZNS*W^)K8%G$5oWZGrM4v$7<=C$_=TNpPyHd2JkIHu>Vh6%+Jf(I4%k2fa_)_l -ts&VFTwaH1UP7U3yd&Z7{I{%w@I$lIdCYs{j%aLdI)d%r`Ihh07J;tiRCjV{b23Pw8f8WxxPvL^eM9> -faKFWhw~5HDXly*|>=?-i@F$h?i3K_@k3~CkSk^5gjTvqL+Y7jbOcZ|Kk@*Mu>+_(jNh8RB8bfkS?}> -`0_Jv72D;twev>ql6qHPgU)s(^74uRhraWCj!r0o=0WY=ZA0(IiEcnbUzlCx!ak?I=kFzUt~t=f0m;k -;~>21R^l!}regl3;F0u~c<%YT90G10I|Fb{rB|Q&LD0lT^6OSa31DO?yGex9jh(%>8v{b#J+MW-{5al -5WxWwa=lnOFIn#FxOey>f~{-iQ9TA(SG+X+&>dMo47&v<#yq1yq*|a(Ft+tYhiBhS9=rjlDWvN#~zU$ ->OsqC>jSsn${LvZF8F<-^3oWKwtv5xnyjzE3LIoYjLB>7S|VHG*h6*{Nnnt9^zhaYkxq$wZS#HX+mQG -r*OuwL5BcqOqi_ZQaO-4S2wqCSN;Kky9()L=?&SSg?iWTy8}3Ze&s_1xWPg8#{%eejP?(~O`vD)V07; -R~IfF{j@fqCHl*k`3RHaK+qWRMLaeVl{BYSomo*n;>+RisZ(;{Fjt{IK*8&HlHRHEKWILau|e1u{>>(aX5z&-%84SijEv*MM2&iuQ;Wgj2%LJ8*#rQ{ -ls@i$r?VTN(LkRx!pXIZ`VY?N~jG=q&t$Ve=T9V9r9w664ZMu;x~MCuqozeND52WPtxi`rB7m=od~8p -Q8UYlW}IqC11gnt=W@>gmi*bL^mFfzArQ5ytrJnlIxc9iT5)_-?N3i|B0)`uD*5(%`M$ob7v8k2f1X;J< -qt>6%_J9!JK%fk~&!W-Da&np2dx;e{G8qX_0ZKGg;iO2`Tb7)woPW>d94&>v-O`X!ww3FJGgs-Vs|}@ -y9%)pM73w*s+N&Tt<6Df+YSy4)7p1NKm0bkb%$moR2Ws1vY;g{T+h8x0`;;mUnM~`HJ=K2`i7~ayej2 -tf@oa;59s+#-bjX$u428P!>KHTjSX#{V&Nr4b7^Fpt@sRH#yZF6@U_R3prJ0WfYC_AQTgGaStswv-f9 -Yes6gFmTj2chIVj{;NGHAXabdU7#h>jZcV~5K*}4BLeM6_bQVmvEr{a|LCN-X=r0}fmQr4Ua> -J#=9@hMx+wWqf=1QrSi{8WV4MupxHm`bIkZ0x%CWZv8u)E&G92?k?X;S+?~BX8`AMf*7}KfTopXH#92 -Zua&^iZldvg)+eRJmD*gg%;w5qJuT@tZz6R-VMcIU4D)wJO^_D^Vg#oiaKd1Qa_ -kuH)ShP8nripdO|Z?__WlG*(~oVw|7vpo^3r!ol)e<$V?Bv#6{Es7b*69{bejQ@Yoj$`RS4HDi`)gM+ -Xe~!7h>TD)@gDIGgWnIpe@|C>-ziP1Q<#i3`|=_;cu2HxzqD=+!x>R@o^emaL=HnZ_Dl(U9yj`9J8q -2q*IN1_=<8XP8uk{+qC}HT!U(1TT5;>eEOVY&O|FZ>%^{Y}h}8Q5r{6Pv5H82lB;J;JM9>O9*I7B6Gl -PSG=B1d?MkyF6EU$hhC~E%j*|^n0fM+u6LeV4<+BSh4XO7yDE@qWkvBr>a-s2mrd+?M!1pVvfY7C -N$@rlf^l`@stbr|ep -eqn2650VDw#_2({GCIAP|`0c{1#W`Di+d6=Jh%ym -$IRx%;HO?a}Fiq0Pn`+w1**`YoI7H;90TM%Sz8^Z#CbGM+XHgP49OOJz!Rt)&4d5RhmQd4uS_ttD#@` -PweI^^bEkk(7mwo=AVWb($#(gc*-Cp+0>lU*1EO~jHfMY<3Jw~Y4YE#4g4hG-P{QQQ>e_jss-}`!7$# -)aVGe%cPJOOTT!O6Bq7R7l?p-6`O)hH+V_9#w`_PmOY{j2SM@@+*|^%vc%9&D%HL@*8*CCZ4+{ -2=uR_=_ljYO;Q)|xoO|d`;*ePr>lE3X*m#(460bYO#yib>MUps)be*I@_yL-d$K4Ei{ObP3hjN7J$DSM|=Sg -Aaf%L~9>9(32+`;g_tK6SdPeYY%wf*gNp=lFjTn7E7Cb%wOd*w>Z=-DO??ehf(Rc3Q++UAtA6(;14Lf ->~pzi0dVKQBz@tdh*uKi$oGC{=S4%q2w7nQP$A(lr36M1!$n>hOK%KgRdpRKU}$7lNfov#{-@@=82F6|DBr29t>h=4W?G&NuwINuk -*38N)NT#Oxs{Cmsqmuvo}5zU>LE3IVrLDe0B!N8EXk;w(iP%r26GfCX;$`#mRcr^CAKVRU#{!ni@s0# -xpNI&#bP0dx6bCj5J?~!{Pxy8g?Spu;=a!$5}a$=qlHT3a1o^~Yl@7=0TydPg)U;v#0So@B@km@XiZh -0y2IzKU4tMU+ePSU#vw(1>!zTpCb{-AL9%-0uA=?;G4BwM(t-15rDh|N=qj+_D0W^;wEd}-BitQ{hj-l6YD=KqE6%jB$HXFpe -?e&~3UR_VyDAUJpLHW$@e1u!gA!)ABft3y*iCF36_l^=|s1Mq6YGdApR>m!z|m`84U?l4>q+(?bwY}z -*5rL`&uIXYWn0pG9Q|0~_6D6Gkyvfz}Z=5>g|oB`TcHtFYf9|04@^W;Ia=o!j1wtT)cV!sw%l{`ZP -Kni2tT1pO;!M0r5F-cAv-=?O$D#KJ*^riDJ-*rvmRr$eorePs(j1qt+&Q7z+GSMju{FEjnxr^}vsL>i -c}HRBe>b-6%d1>e{lzJ^Coi=msG}+@ttGQFp;txs4w`9CpI!LjG9B_m=KO85zu(>TW%wql3T?tZj`L- -IbQWF|^K;Vby_ek3BpNUh9^nI_T^0AZIo;1R^$YR2Wl@B0>xK|>DUA@82em_!$*z$J51z~`5jl>f&#` -c9=?__N_yyeR$)BaxFU+V5!w>JIa3-M|1^dRJCb;e;mXIPgiI0wFN%$%7nRs0_%DYW$ZtP$L0pIYRXJ -%dtK~%7EE~pNwLvwqfs>oPW;cE!qt~dR}*SGdoH=c68p6ea;bLZg~So+*KDPC=&9tEE41pR9BVR(t`( -8^9Ug@n_whE*-VLInq`T=3wye;!}>DQ12l7U_p5kj`;E1})*L5p*&&1>U<0&Ga6?MZ81qXS!l}5{U(; -M0W&?y-!{rx}E=e%w$!%ecdFh<@8Q0$UNPqp0xs5A&o$xCLnn}dOAQxtYSP<2KtVd)YI#(!=A_&^0Gf -m3s&;-a*N<_NJ4zoHceb~a6%qf>+FVHPVP{Oct_jn*H7~|tfaq{#G6Dgf@(nYM-yn1fIFA7yx-(Ryg% -M87Ye4x_jfQ!zC*rWp|uz{k{$IR%qc=^UK(+Gk$@+&rxBRTq!D!JtNH-bgZR`V=s)&t+%NaP&t>9QqE -Zq7dbu&;z8cne)}%{{4q=0~Do_k1NlRpQC7-t_KH@!9%cqN9M%37TtvX_;=Vvv62OdCFoGGVZbj -~(O087h>2>NKi|yr*O`v59ud@g!qI7zokJzJt{BszjJC4fg-af`e@3nX?7M46z$&-6U4yDopR0 -Sa#)Tgx8Y-_)2i>62^}WhdU)I!}9PAv!15r0;jF%9_@)3qIi6W~X%&+9@0 -=7R(v~-ur5uh?K|@n-tjwRHia$1xvk5G4tDS$j$xpzKck=Gnu#DG!5IS;-%LKmLInZg9Oi>R#1pPC#o -&fX|oRG8sypxBbAHlv_w;kS40?r-9B)oVjl~zZSOc^Werqbm1QbQYPCnMnGl3SpHeoF8kXJx)J#nfXl -)sw5+!iVLS9PaHMMHHFp@4*43TIxO?JgYC}CbM@iPX4@4@)w@lG(q~|Bp}-dTqZ<0e>jW8xny)HA_cEWDmRMTRlX*;uUoqe|+tmhfG5rGMP`qwldOYr`jx^TqS}KJ -X{LTGE-kzM=PL+-XXur$iL7wX%x6a_&R<4tvkETmBr7uK&Cbk06}SBFKkJKx3%`X!|FMPu6A>?=}Zj! -;3(tkIm~z@gd^(RK`t!nIiUeYf~)vw-rO_c09R;py|bc|GSJIAocNi19{!j9RypwPq%B#nN{b>6aAOT -c-`=iE)xg~mCDSw7JH8>x`SE#O<7YATMDyI${cvhH^i4>+oG%j>F8quN&aCcz_#88bE-{wUtfhW+O{} -Yo`sD?PPpCNkuu6;gq08y!E02tq8EDvVE~Z{BWtgET(vME)7}x7qjD)<~o{0PhrwluPeBPLRJtEc|q^ -6(M%c|wGKKrNRd2twUN=A_C@}=|SW7McoSdH~du70BRqxZ$@IUZIxkp!P#GflgjRofbdz6G`07>R0h- -I+*{Rw+3QoF@z>hyWEWte|~LqLdHdxsCn(h@p3g>0>MdMvNJ1T02p)XRX -hJX{tdd-vUQ%iNV_=_~z9XPg?8L7SV-%8`eaYVzRy6^`d^{-_wutdQr;K%v$$MK_WAcN_2%>aVxrWPM -%zgf0OcVr*kAvkV?ifimP=%%nI?pmjc!JUukY>bYEXCaCuNm0Rj{ -Q6aWAK2mtey7Dr1-q-8S!002k=000jF0000000000005+c!wmocaA|NaUteuuX>MO%E^v8JO928D0~7 -!N00;o{l@>>yz1OOy3jhFlDF6Tx00000000000001_fg=w90B~t=FJfVHWn*t`ZDDR?E^v8JO928D0~ -7!N00;o{l@>?ZFvLBk3;+P(C;$Kv00000000000001_f%zH$0B~t=FJfVHWpH6~b7gWaaCuNm0Rj{Q6 -aWAK2mtey7DrVyt(^l9003<{000pH0000000000005+c&L;o>aA|NaV{K$_aCB*JZgVbhc~DCM0u%!j -000080P~d=M*_3X#M2@G0Kj|z01p5F00000000000HlEcH~;`}X>c!OZ+C8NZ((FEaCuNm0Rj{Q6aWA -K2mtey7Dw4?P5ssZ008L(000pH0000000000005+c09yb6aA|NaWq4y{aCB*JZgVbhc~DCM0u%!j000 -080P~d=M}lBlphYnN0Oz^@01N;C00000000000HlEhT>t=ZX>c!TZe(S6E^v8JO928D0~7!N00;o{l@ ->=!`MGmE3IG7~82|tf00000000000001_fpm@l0B~t=FKlmPVRUJ4ZgVbhc~DCM0u%!j000080P~d=N -AFROtn~!|080@701*HH00000000000HlH5m;eB9X>c!aWpFeyHFRNTb1rasP)h*<6ay3h000O8^OY7y -+pKr?eEc!hXk}$=E^v8JO928D0~7!N00;o{l@>>tv|7 -Pq1ONcc2><{W00000000000001_fo{YA0B~t=FJE?LZe(wAFJE72ZfSI1UoLQYP)h*<6ay3h000O8^O -Y7yhqJe*GdlnPD>nfE7ytkO0000000000q=5#>003}la4%nWWo~3|axZCcVPs@-Wpi^baCuNm0Rj{Q6 -aWAK2mtey7Dr$n2aRR{000F8000;O0000000000005+cZv+7VaA|NaUv_0~WN&gWa%C-cWo~3|axQRr -P)h*<6ay3h000O8^OY7yA$zc!Jc4cm4Z*n -hlX?QMhc~DCM0u%!j000080P~d=M|TE-#sUEV05k#s03rYY00000000000HlE+Edc;c!Jc4cm4Z* -nhRZDDe2WpZq3VlQ7`X>MtBUtcb8c~DCM0u%!j000080P~d=M=lfGq{amR0E-U*03iSX00000000000 -HlFpE&%{=X>c!Jc4cm4Z*nhRZDDe2WpZq3VlQoBa%*LBb1rasP)h*<6ay3h000O8^OY7yocgHmt^fc4 -E&%`lBme*a0000000000q=9EN0RV7ma4%nWWo~3|axY_HV`yb#Z*FvQZ)`7LUukY>bYEXCaCuNm0Rj{ -Q6aWAK2mtey7Dw@rbX@ra003kV001KZ0000000000005+cS2Y0uaA|NaUv_0~WN&gWV_{=xWn*t{baH -QOFJWY1aCBvIE^v8JO928D0~7!N00;o{l@>=5s>bjv0RR9N0{{Ra00000000000001_fsr}^0B~t=FJ -E?LZe(wAFJob2Xk}w>Zgg^QY%gPBV`ybAaCuNm0Rj{Q6aWAK2mtey7DvLpK6;V>001`u001HY000000 -0000005+c{5t^vaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJo_QaA9;VaCuNm0Rj{Q6aWAK2mtey7DvlK -7a~Fo004|9001Tc0000000000005+c&O8ACaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJo_RbaHQOY-Ms -TaCuNm0Rj{Q6aWAK2mtey7Dqt>BlV#J004Lh001Wd0000000000005+cR7n8>v9aWsL1polm4*&or000000000000 -01_fjUhA0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%geKb#iHQbZKLAE^v8JO928D0~7!N00;o{l@><~C -W4j62LJ#q7ytkz00000000000001_fi6=40B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%g>y9aj9y0001S0RR9i00000000000001_fi+ -wK0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPBV`yb_FJE72ZfSI1UoLQYP)h*<6ay3h000O8^OY7y!K -ViQTLl0B%nbklEdT%j0000000000q=89Y0RV7ma4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PVPj}zb1!CTY --L|#VPj}zE^v8JO928D0~7!N00;o{l@>?Sh{jZ=0RRBa0{{Rn00000000000001_f$w4g0B~t=FJE?L -Ze(wAFJob2Xk}w>Zgg^QY%gPBV`yb_FLGsMX>(s=VPj}zE^v8JO928D0~7!N00;o{l@>=YN2j8v0002 -t0000W00000000000001_f#GBU0B~t=FJE?LZe(wAFJo_PZ*pO6VJ}}_X>MtBUtcb8c~DCM0u%!j000 -080P~d=N0+05?KA@b000R902}}S00000000000HlG&WdQ(iX>c!Jc4cm4Z*nhVZ)|UJVQpbAVQzD2E^ -v8JO928D0~7!N00;o{l@>?-akwnw2><{tBme*-00000000000001_fi!6W0B~t=FJE?LZe(wAFJo_PZ -*pO6VJ~5Bb7^#McWG`jGA?j=P)h*<6ay3h000O8^OY7y?qbWv3IYHCJq7>(A^-pY0000000000q=8s- -0RV7ma4%nWWo~3|axY_VY;SU5ZDB8IZfSIBVQgu0WiD`eP)h*<6ay3h000O8^OY7yv#FkMF9iSq0Tci -L9RL6T0000000000q=BM!0RV7ma4%nWWo~3|axY_VY;SU5ZDB8WX>KzzE^v8JO928D0~7!N00;o{l@> ->ovL_)c1pokK761Sr00000000000001_fed>A0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~-SZggdGZ7y(mP) -h*<6ay3h000O8^OY7ygBg4GT>$_9MFIc-9{>OV0000000000q=9sR0RV7ma4%nWWo~3|axY|Qb98KJV -lQ7`X>MtBUtcb8c~DCM0u%!j000080P~d=N4dg6YELQv0MwoU0384T00000000000HlEqf&l<c!J -c4cm4Z*nhWX>)XJX<{#9Z*6d4bS`jtP)h*<6ay3h000O8^OY7y&X<4#el7q2bie=r9{>OV000000000 -0q=A^M0RV7ma4%nWWo~3|axY|Qb98KJVlQN2bYWs)b7d}Yc~DCM0u%!j000080P~d=N8$#~TnQBb0Ps --&02}}S00000000000HlFa+W`P@X>c!Jc4cm4Z*nhWX>)XJX<{#FZe(S6E^v8JO928D0~7!N00;o{l@ ->>zUvLR8G5`Rp!~g&v00000000000001_ftK(A0B~t=FJE?LZe(wAFJx(RbZlv2FKlmPVRUbDb1rasP -)h*<6ay3h000O8^OY7yp$jBOV0000000000q=5n>0swGna4%nWWo~3|axY|Qb98KJ -VlQoBZfRy^b963nc~DCM0u%!j000080P~d=M?Dd)0*wa%0E!p@03HAU00000000000HlF`G6Dc_X>c! -Jc4cm4Z*nhWX>)XJX<{#JVRCC_a&sc!Jc4cm4Z*nhWX>)XJX<{#JWprU=VRT_GaCuNm0Rj{Q6aWAK2mtey7DsQxo_Tr;00 -4I>001BW0000000000005+c@Ld7`aA|NaUv_0~WN&gWWNCABY-wUIa%FRGb#h~6b1rasP)h*<6ay3h0 -00O8^OY7ymRfBkJP`l@XEy)<9smFU0000000000q=Beu0swGna4%nWWo~3|axY|Qb98KJVlQ)Ja%pgM -b1rasP)h*<6ay3h000O8^OY7y;{G(?r>Xz|09*k88vpc -!Jc4cm4Z*nhWX>)XJX<{#QHZ(3}cx6ya0Rj{Q6aWAK2mtey7Ds=j6_hMF002J8000{R000000000000 -5+cj@|=C7H%S}82|vETmS$b0 -0000000000001_f%6vx0B~t=FJE?LZe(wAFJx(RbZlv2FLq^eb7^mGE^v8JO928D0~7!N00;o{l@>>S -MSulFrT_o{P5}TL00000000000001_f!i?z0B~t=FJE?LZe(wAFJx(RbZlv2FLyICE@gOSP)h*<6ay3 -h000O8^OY7y)W-_X6}12W0B`{S8vpc!Jc4cm4Z*nhWX> -)XJX<{#TXk}$=E^v8JO928D0~7!N00;o{l@>=M?`QnO0000I0RR9g00000000000001_f!(qN0B~t=F -JE?LZe(wAFJx(RbZlv2FJEF|V{344a&#|WUukY>bYEXCaCuNm0Rj{Q6aWAK2mtey7Dum&FJ;aF007Ga -001Qb0000000000005+c=d%R>aA|NaUv_0~WN&gWWNCABY-wUIUt(cnYjAIJbT4gbb7L-Wc~DCM0u%! -j000080P~d=M>MI?%19gl05W6%04D$d00000000000HlHVwFLlhX>c!Jc4cm4Z*nhWX>)XJX<{#5Vqs -%zaBp&SFLP*hbZKlZaCuNm0Rj{Q6aWAK2mtey7DsOu0Il``0021(001ih0000000000005+ch0+B8aA -|NaUv_0~WN&gWWNCABY-wUIUt(cnYjAIJbT4yxb7OCAW@%?GV`gViO928D0~7!N00;o{l@>=4KS&_x9 -smGNX#fB!00000000000001_fyC4W0B~t=FJE?LZe(wAFJx(RbZlv2FJEF|V{344a&#|qd2?fLZf0p` -E^v8JO928D0~7!N00;o{l@>>#LpWPwSpWdjX#oHz00000000000001_f%NkQ0B~t=FJE?LZe(wAFJx( -RbZlv2FJEF|V{344a&#|rVRB|^Y-KKRc~DCM0u%!j000080P~d=N2Z$lEQ$dD0LlUY03ZMW00000000 -000HlGPO$GpPX>c!Jc4cm4Z*nhabZu-kY-wUIUtei%X>?y-E^v8JO928D0~7!N00;o{l@>>jmU58HNd -N#@Qvm=W00000000000001_fn`qy0B~t=FJE?LZe(wAFKBdaY&C3YVlQKFZgX^DZgg`laCuNm0Rj{Q6 -aWAK2mtey7Dokc9IXFD003jk0RSTa0000000000005+caG3@GaA|NaUv_0~WN&gWXmo9CHEd~OFKBda -Y&CFUa&u*JE^v8JO928D0~7!N00;o{l@>=j&nXNA6aWClKmY(B00000000000001_fw0~N0B~t=FJE? -LZe(wAFKBdaY&C3YVlQcEVRU79ZEP-Zc~DCM0u%!j000080P~d=N1bYj3DX_`0I_=j03!eZ00000000 -000HlHQ@&*8KX>c!Jc4cm4Z*nhabZu-kY-wUIX>M?JbaQlaWnpbDaCuNm0Rj{Q6aWAK2mtey7Dve{3; -RYC008_%001EX0000000000005+c2NDMWaA|NaUv_0~WN&gWXmo9CHEd~OFLPmTX>@6NWpXZXc~DCM0 -u%!j000080P~d=M^Yzq>c!Jc4cm4Z*nhabZu-kY-wUI -bZ={AZfSaDaxQRrP)h*<6ay3h000O8^OY7y9v<;00002000000000e0000000000000 -1_fpkd+0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;MtBUtcb8c~DCM0u%!j000080P~d=M< -Rgx#FYR503HDV03`qb00000000000HlGuNe2LMX>c!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bUt(c%W -iD`eP)h*<6ay3h000O8^OY7ye-4mNAOQdXZ~_1THUIzs0000000000q=A%52LNzsa4%nWWo~3|axZ9f -ZEQ7cX<{#CX>4?5a&s?XY;b5{Vr6t`V_|GzbaZlQVs&(7b1rasP)h*<6ay3h000O8^OY7y6?b_$xB>t -Gx(WaQGXMYp0000000000q=5)b2LNzsa4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?fZfa#?bYE>{bYW -j(Xkl`5WpplZc~DCM0u%!j000080P~d=M-Z9Hz@P&F0B{fh03-ka00000000000HlEtPX_>SX>c!Jc4 -cm4Z*nhabZu-kY-wUIW@&76WpZ;bY-w(EE^v8JO928D0~7!N00;o{l@>?QlWz#g1^@sADF6U0000000 -00000001_f%8%a0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;wzKp|Jn}0AK+C04V?f00000000000HlEiS_c4dX>c!Jc4cm4Z*nhabZu-kY-wUIW@&7 -6WpZ;bb75|2bZL5JaxQRrP)h*<6ay3h000O8^OY7yW3^fp&;bAdb_4(bDgXcg0000000000q=Eig2LN -zsa4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?tXlZn1b8ul}WiD`eP)h*<6ay3h000O8^OY7y0x`qn5C -H%H>Hz=%D*ylh0000000000q=6P)2LNzsa4%nWWo~3|axZ9fZEQ7cX<{#PWpZg@Y-xIBaxY(BX>MtBU -tcb8c~DCM0u%!j000080P~d=NB8lKOLh$a05>uK05Jdn00000000000HlF$UIzehX>c!Jc4cm4Z*nha -bZu-kY-wUIb7gXAVQgu7WpXcQbZu;NWpZg@Y-xIBaxQRrP)h*<6ay3h000O8^OY7y000000ssI20000 -0EdT%j0000000000q=7VS2LNzsa4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*?y-E^v -8JO928D0~7!N00;o{l@>?jTwf3x0ssJg1^@sk00000000000001_fq`rX0B~t=FJE?LZe(wAFKBdaY& -C3YVlQ-ZWo2PxVQ_S1a&s?pVR$ZZc~DCM0u%!j000080P~d=N1#lH<>CYY08I@504)Fj00000000000 -HlH8ZU+ExX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7Vs&Y3WMy)5FJE72ZfSI1UoLQYP)h*<6ay3h000O8 -^OY7yy9}waLk<7{k2L@QDgXcg0000000000q=61}2LNzsa4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*=b!lv -5WpZ;bUt(c%WiD`eP)h*<6ay3h000O8^OY7yVJa~kmj?g<6(IlsC;$Ke0000000000q=A`&2LNzsa4% -nWWo~3|axZ9fZEQ7cX<{#Qa%E*=b!lv5WpZ;bWN&RQaCuNm0Rj{Q6aWAK2mtey7Dr&udnW`6002!f00 -1fg0000000000005+cc8Ui8aA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWny({Y-D9}b1!9da%E*MaCuNm0 -Rj{Q6aWAK2mtey7DtnxCHo}}007T6001ul0000000000005+c!juO9aA|NaUv_0~WN&gWXmo9CHEd~O -FLZKcWny({Y-D9}b1!9da%E*-Y>zHhndQ1^@tt761S&000000000 -00001_fi$8A0B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo36^Y-?q5b1z?CX>MtBUtcb8c~DCM0u%!j000 -080P~d=N6o`DuL1@D0A?Ei04V?f00000000000HlEgsRsaXX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cV -TR6WpZ;bUt(c%WiD`eP)h*<6ay3h000O8^OY7yov#Vw`2hd`jRgPzCjbBd0000000000q=8MZ2LNzsa -4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzc!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bWpr|7WiD`eP)h* -<6ay3h000O8^OY7yEf}!Z!2$pP<_G`)FaQ7m0000000000q=C4$2LNzsa4%nWWo~3|axZ9fZEQ7cX<{ -#Qa%E+AVQgz)XPWnpbDaCuNm0Rj{Q6aWAK2mtey7DqE4*c~Yb003wg001oj0000000 -000005+c$GHapaA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWp`n0Yh`kCFKl>iY-MzEWo0gKc~DCM0u%!j0 -00080P~d=M|C+zP`m;F0R9L704o3h00000000000HlFCzy|c!Jc4cm4Z*nhabZu-kY-wUIbaG{7 -cVTR6WpZ;baCK~KWN&RQaCuNm0Rj{Q6aWAK2mtey7DuU7-Kd5D007hg001Qb0000000000005+cK*I+ -BaA|NaUv_0~WN&gWXmo9CHEd~OFLZKgWiMY}X>MtBUtcb8c~DCM0u%!j000080P~d=NAzNalYIdI0G| -T@03rYY00000000000HlEl#0LOyX>c!Jc4cm4Z*nhabZu-kY-wUIbaH8BFJEF|b7d}Yc~DCM0u%!j00 -0080P~d=Mc!Jc4cm4Z*nhabZu-kY-wUIbaH8BF -JxhKa%p8QaCuNm0Rj{Q6aWAK2mtey7Dr1@Zq6M7008d>0018V0000000000005+ct;YudaA|NaUv_0~ -WN&gWXmo9CHEd~OFLZKgWiN1fE^v8JO928D0~7!N00;o{l@>?!f28$T3IG7gBLDy(00000000000001 -_fd|S50B~t=FJE?LZe(wAFKlmPYi4O|WiMY}X>MtBUtcb8c~DCM0u%!j000080P~d=M?w%8Hy;B409g -tE03-ka00000000000HlGP)CT}?X>c!Jc4cm4Z*nheZ)0m_X>4ULY-w(5Y;R+0W@&6?E^v8JO928D0~ -7!N00;o{l@>?dx-=4S0{{RT3;+Nn00000000000001_f&SMA0B~t=FJE?LZe(wAFKlmPYi4O|WiM@OW -NC72Z)0m_X>4UKaCuNm0Rj{Q6aWAK2mtey7DuGbAQDCh002!G001KZ0000000000005+cvD*g#aA|Na -Uv_0~WN&gWY;R+0W@&6?FK}sOY;R+0W@&6?E^v8JO928D0~7!N00;o{l@>?mQhD|d1pok~6#xJx0000 -0000000001_fjHy`0B~t=FJE?LZe(wAFKlmPYi4O|WiNAaY-x05Y;R+0W@&6?E^v8JO928D0~7!N00; -o{l@>==Q$=h%0{{Ru3IG5n00000000000001_fs5$}0B~t=FJE?LZe(wAFKlmPYi4O|WiNAiZER_7Yi -w_0Yi4O|WiD`eP)h*<6ay3h000O8^OY7yh-{tOM*;uMmPUteKjZ*_EEUoLQYP)h*<6ay3h000O8^OY7ySk>pY`~d&}iUR-uApigX00000 -00000q=A#~2LNzsa4%nWWo~3|axZXUV{2h&X>MmPUtei%X>?y-E^v8JO928D0~7!N00;o{l@>>5N4=Y -{0ssKz1ONaa00000000000001_fzI&<0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rFV{dJ6VRSBVc~DCM0u% -!j000080P~d=N3N1NwN(ND01*cO03-ka00000000000HlGu^alWNX>c!Jc4cm4Z*nhiVPk7yXK8L{FJ -E(Xa&=>Lb#i5ME^v8JO928D0~7!N00;o{l@>>gf||7z82|vUZ2$lx00000000000001_fm8Pf0B~t=F -JE?LZe(wAFK}UFYhh<;Zf7rZaAjj@W@%+|b1rasP)h*<6ay3h000O8^OY7y=mr%YMh*Y~tu6onAOHXW -0000000000q=Bgr2mo+ta4%nWWo~3|axZXUV{2h&X>MmPc4cyNX>V>WaCuNm0Rj{Q6aWAK2mtey7Dt# -=rN?M+0082j0RSZc0000000000005+cEguK~aA|NaUv_0~WN&gWaBF8@a%FRGb#h~6b1z?CX>MtBUtc -b8c~DCM0u%!j000080P~d=NBUZEjFJQZ0M82m03ZMW00000000000HlG~j|c#8X>c!Jc4cm4Z*nhia& -KpHWpi^cUtei%X>?y-E^v8JO928D0~7!N00;o{l@><>ChsIh1ONb&3IG5b00000000000001_fvA)S0 -B~t=FJE?LZe(wAFK}{iXL4n8b1!0HaxQRrP)h*<6ay3h000O8^OY7yE=aa)B?ABe`2_#~9{>OV00000 -00000q=6@y2mo+ta4%nWWo~3|axZXlZ)b94b8|0aZ*^{TWpXZXc~DCM0u%!j000080P~d=M;w`>M+gJ -}08R@403QGV00000000000HlG5oCpALX>c!Jc4cm4Z*nhia&KpHWpi^cXk~10WpZ;aaCuNm0Rj{Q6aW -AK2mtey7DtLR+g|Fa%FRKFLQ8dZf -<3AE^v8JO928D0~7!N00;o{l@>=vjs?i30{{R;2LJ#d00000000000001_feEAt0B~t=FJE?LZe(wAF -LGsZb!BsOb1z?CX>MtBUtcb8c~DCM0u%!j000080P~d=M^Wr;Om`6g0IER%03ZMW00000000000HlHK -rw9OWX>c!Jc4cm4Z*nhkWpQ<7b98erVPs)&bY*gLE^v8JO928D0~7!N00;o{l@>?Jp62K~1poji6#xJ -m00000000000001_fugwx0B~t=FJE?LZe(wAFLGsZb!BsOb1z|VX)bViP)h*<6ay3h000O8^OY7yDP{ -LPeh2^niW&d_8~^|S0000000000q=6Q{2mo+ta4%nWWo~3|axZdaadl;LbaO9Zb#!PhaCuNm0Rj{Q6a -WAK2mtey7Dv-iT7FD<0szvq1OOiZ0000000000005+c&c_GbaAj>!O928D0~7!N00;o{l@>>>F)xm00RRAH0ssIV00000000000001_fmcBb0B~t=FJE?LZe(wA -FLGsZb!BsOb1!3Ma&&VpaCuNm0Rj{Q6aWAK2mtey7DrUx#oRCg006xO0015U0000000000005+c_(BT -+aA|NaUv_0~WN&gWa%FLKWpi|MFJo_QaA9;VaCuNm0Rj{Q6aWAK2mtey7DvoU5zOBb001XL0018V000 -0000000005+cWJL=AaA|NaUv_0~WN&gWa%FLKWpi|MFJo_SYiVV3E^v8JO928D0~7!N00;o{l@>?R9v -nbq0{{Tk2><{h00000000000001_fq+;G0B~t=FJE?LZe(wAFLGsZb!BsOb1!9hV`Xr3X>V?GE^v8JO -928D0~7!N00;o{l@>=AcKy7I0RR9r0{{RW00000000000001_fh1fD0B~t=FJE?LZe(wAFLGsZb!BsO -b1!IbZ)Rk%}aA|NaUv_0 -~WN&gWa%FLKWpi|MFKusRWo&aUaCuNm0Rj{Q6aWAK2mtey7Ds(S{wRtX006pP001BW0000000000005 -+c41Ws%aA|NaUv_0~WN&gWa%FLKWpi|MFLPycb7^mGb1rasP)h*<6ay3h000O8^OY7yDw@gOxD{O+0034~0012T0000000000005+csG|!2aA|NaUv_0 -~WN&gWa%FLKWpi|MFLiWjY;!Jfc~DCM0u%!j000080P~d=M~^A$P06qW!04V?f00000000000Hl -FHzY73xX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJE72ZfSI1UoLQYP)h*<6ay3h000O8^OY7yac -oNbjRF7w4+Q`KF#rGn0000000000q=CA>3jlCwa4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=W -My?y-E^v8JO928D0~7!N00;o{l@>>FoWC)5kpKXqLID6V00000000000001_ftJDx0B~t= -FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoMX=gQNa%FKYaCuNm0Rj{Q6aWAK2mtey7DxV -o83Y>x005K*001)p0000000000005+cTvQAIaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB -?;bT49QXEktgZ(?O~E^v8JO928D0~7!N00;o{l@>>NvR7F%1ONcY2><{y00000000000001_fyh@30B -~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoNXkl_>Wprg@bS`jtP)h*<6ay3h000O8^ -OY7y_>jT?4haAN3M2pkIRF3v0000000000q=8Ia3;=Lxa4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQ -V`yP=WMy=iiKU-(1ONcf4gdf<000000000 -00001_fw5%_0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoNXkl`5Wprn9Z*_2Ra&K -Z~axQRrP)h*<6ay3h000O8^OY7y_!;PfTLS<9ZU+DWHUIzs0000000000q=9~F3;=Lxa4%nWWo~3|ax -Zdaadl;LbaO9oVPk7yXJvCQV`yP=WMyZfA3JVRU6}VPj}%Ze=cTc~DCM0u%!j000080P~d=Mc!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FJo_QaA9;VaCuNm0Rj{Q6aWAK2mt -ey7DxP5z|Xb<001`y001%o0000000000005+c1a%AmaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1 -!3PVRB?;bT4CXZgX^DZgg`laCuNm0Rj{Q6aWAK2mtey7DuZFCdNzy008y|001-q0000000000005+c3 -U~|vaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4CYIW#$Na&KZ~axQRrP)h*<6ay3h -000O8^OY7yrY+JraRdMWa|{3gG5`Po0000000000q=Be=3;=Lxa4%nWWo~3|axZdaadl;LbaO9oVPk7 -yXJvCQV`yP=WMyBaV~IqP -)h*<6ay3h000O8^OY7yEuuJ783O=IwcGX@0{{S#1^@sx00000000000001_fg5WL0B~t=FJE?LZe(wAFL -GsZb!BsOb1!gVV{2h&WpgiMXkl_>WppoRVlp!^GH`NlVr6nJaCuNm0Rj{Q6aWAK2mtey7DwZfttM*{0 -01vE001=r0000000000005+ch;9u4aA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4RS -Vsd47aB^>AWpXZXc~DCM0u%!j000080P~d=N0+af4!%|Z0Mobt05AXm00000000000HlFNfeip~X>c! -Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FKTIXW^!e5E^v8JO928D0~7!N00;o{l@>=Eh2+ -Rf6952|O8@{b00000000000001_fl}BF0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&WpgiMXkl_>Wp -poUaAR(CcrI{xP)h*<6ay3h000O8^OY7yNKy%m3=04N@G$@YI{*Lx0000000000q=D+|4FGUya4%nWW -o~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyc!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D -?FJow7a%5$6FKl6MXJdJCX>4q1V{LC_Wo#~Rc~DCM0u%!j000080P~d=M-d@I9c2js08}vm05<>t000 -00000000HlGW0}cRiX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FKl6MXJ>L{WovD3WM -ynFaCuNm0Rj{Q6aWAK2mtey7DpeVdkUTj001^D001}u0000000000005+cUJVWaaA|NaUv_0~WN&gWa -%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4dSZf9s^Vsd47ZEs{{Y%XwlP)h*<6ay3h000O8^OY7yP`8?X -#|i)d_%HwfI{*Lx0000000000q=8Zw4ghdza4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMy< -OY+-I^XmxI9VRC6X>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FKl6MXLM*`X>D(0Wo#~Rc~DCM0u -%!j000080P~d=N9CHTnR^BR0B{rl05t#r00000000000HlGdEe-&1X>c!Jc4cm4Z*nhkWpQ<7b98era -A9L>VP|D?FJow7a%5$6FKl6SX>Kuaa&KZ~axQRrP)h*<6ay3h000O8^OY7yrJQkdodf^?#0&rcH~;_u -0000000000q=9)f4ghdza4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=WMyP6Z*_2Ra&KZ~axQRrP)h*<6ay3h000O8^OY7y@# -SZlObh@3hD-neF8}}l0000000000q=6ef4ghdza4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCQV`yP=W -Myc!J -c4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FLPpJXkl`5Wpr?IZ(?O~E^v8JO928D0~7!N00;o -{l@>>&+~vO{1ONcr3;+N)00000000000001_frL;F0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpg -iMXkl_>WppodVqa&L8TaB^>AWpXZXc~DCM0u%!j000080P~d=N0(vnR{aD30JIJO05bpp0000000 -0000HlHbR1N@eX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FJow7a%5$6FLP>Xb8vERVr6nJaCuNm0 -Rj{Q6aWAK2mtey7Dug|Hab@a006ie0024w0000000000005+cOj-^AaA|NaUv_0~WN&gWa%FLKWpi|M -FK}UFYhh<)b1!3PVRB?;bT4&oX?A6Db75>`Wprg@bZ>GlaCuNm0Rj{Q6aWAK2mtey7Dr$EAZs23003M -H001)p0000000000005+c`(X|MaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!3PVRB?;bT4&uW;k -$iZ(?O~E^v8JO928D0~7!N00;o{l@>>Mw-zsg0{{RA2mk;v00000000000001_fof(B0B~t=FJE?LZe -(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvaUukY>bYEXCaCuNm0Rj{Q6aWAK2mtey7DpLEEQieu0 -07n~001=r0000000000005+cJ8BL9aA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR9b -Z)|L3V{~b6ZgVbhc~DCM0u%!j000080P~d=M^e;8_>~I)05c;105bpp00000000000HlFicMbq>X>c! -Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFJo_RZe?S1X>V>WaCuNm0Rj{Q6aWAK2mtey7Dq -?CMmX~z003`x001`t0000000000005+cL4yteaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY; -0*_GcRLrZf<2`bZKvHaBpvHE^v8JO928D0~7!N00;o{l@>=HHY}u+1pojR5dZ))00000000000001_f -r+FJ0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvgcw=R7bZKvHb1rasP)h*<6ay3h -000O8^OY7y^G0R)1qT2C$rbc!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFJ@_MWpHnEbS`jtP)h*<6ay3h00 -0O8^OY7yTdH&$HVXg%z9awuGynhq0000000000q=8Ab4ghdza4%nWWo~3|axZdaadl;LbaO9oVPk7yX -JvCQb#iQMX<{=kaBpvHZDDRaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR&wadl;LbS`jtP)h*<6ay3 -h000O8^OY7yLjoE44-x<;00002000000000v000000000000 -01_f&JPJ0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyveZ*FvQX<{#5UukY>bYEXCa -CuNm0Rj{Q6aWAK2mtey7Dou9o6na8005g20021v0000000000005+cR@)8$aA|NaUv_0~WN&gWa%FLK -Wpi|MFK}UFYhh<)b1!vrY;0*_GcRLrZgg^KVlQrVY;ACFZ)`4bc~DCM0u%!j000080P~d=M?z6Cg>?) -70B$4z06G8w00000000000HlFL;SKc!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFJo -_RbaH88FK~HpaAj_Db8Iefc~DCM0u%!j000080P~d=N59k!AU^;A07?J=06G8w00000000000HlEt?h -XKOX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFK}UFYhh<)b1z?CX>MtBUtcb8c~DCM0 -u%!j000080P~d=M@GS>XYdLD0OukA06qW!00000000000HlGa?hXKOX>c!Jc4cm4Z*nhkWpQ<7b98er -aA9L>VP|D?FLiQkY-wUMFK}UFYhh<)b1!dlWMy(?WM5=yV{|TXc~DCM0u%!j000080P~d=N7Gmyv0M% -S0BkJ)05t#r00000000000HlHR`3?YZX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFK} -UFYhh<)b1!pgcrI{xP)h*<6ay3h000O8^OY7y5U^VP|D?FLQHjUu|J@V`yJ!Z*z2RVQpnEU -tei%X>?y-E^v8JO928D0~7!N00;o{l@>>>)SMdx1^@uU4gdgD00000000000001_f$Iqm0B~t=FJE?L -Ze(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvrVPk7yXJvCQb8~E8ZDDj{XkTb=b98QDZDlWCX>D+ -9Wo>0{bYXO9Z*DGdc~DCM0u%!j000080P~d=N4%-@gaZKp0OkPz05$*s00000000000HlFo5Dx%wX>c -!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?FLiQkY-wUMFLiWjY%gD5X>MtBUtcb8c~DCM0u%!j000080P -~d=NBVU-R15_G0No4#05|{u00000000000HlGq5f1=xX>c!Jc4cm4Z*nhkWpQ<7b98eraA9L>VP|D?F -LiQkY-wUMFLiWjY%gPPZf<2`bZKvHE^v8JO928D0~7!N00;o{l@>>>sw2I}0ssIh2mk;z0000000000 -0001_ff^SN0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvwbZKlaa%FLKWpi{caCuN -m0Rj{Q6aWAK2mtey7Ds3Q;WQBe001@u001@s0000000000005+cG#U>8aA|NaUv_0~WN&gWa%FLKWpi -|MFK}UFYhh<)b1!vrY;0*_GcR>?X>2cYWpi+EZgXWWaCuNm0Rj{Q6aWAK2mtey7Dv$3+ayp7006`$00 -1)p0000000000005+cnHvuPaA|NaUv_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR>?X>2cYW -pr|RE^v8JO928D0~7!N00;o{l@>?c=NYzw4FCW&CjbC400000000000001_fjTG;0B~t=FJE?LZe(wA -FLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvwbZKlab8~E8E^v8JO928D0~7!N00;o{l@>?r3UFXL3jhE -}B>(_500000000000001_febbe0B~t=FJE?LZe(wAFLGsZb!BsOb1!gVV{2h&Wpgiea%^mAVlyvwbZK -labZKp6Z*_DoaCuNm0Rj{Q6aWAK2mtey7DwCS=~@2=007Ju001!n0000000000005+cnL!T#aA|NaUv -_0~WN&gWa%FLKWpi|MFK}UFYhh<)b1!vrY;0*_GcR>?X>2cba%?Vec~DCM0u%!j000080P~d=N8pYFH -H-oP0M`cq02lxO00000000000HlHENe=*UX>c!NZ*6U1Ze(*WUtei%X>?y-E^v8JO928D0~7!N00;o{ -l@>=65Bi<>0ssKV2LJ#X00000000000001_fvHRn0B~t=FJo_QZDDR?b1!3WZE$R5bZKvHE^v8JO928 -D0~7!N00;o{l@>=m_|e-o0{{RT2><{V00000000000001_f!R+F0B~t=FJo_QZDDR?b1!CcWo3G0E^v -8JO928D0~7!N00;o{l@>=H7SNrl0RRBj0{{RN00000000000001_fkRUd0B~t=FJo_QZDDR?b1!IRY; -Z1cc~DCM0u%!j000080P~d=M*}W(qBjlz07E$d02crN00000000000HlE*RSy7gX>c!NZ*6U1Ze(*WX ->N0LVQg$JaCuNm0Rj{Q6aWAK2mtey7DsW9lMpZm002`Q000yK0000000000005+ci(?M}aA|NaV{dJ3 -VQyq|FKlUZbS`jtP)h*<6ay3h000O8^OY7y+3V+&R|Wt8{1E^E761SM0000000000q=D^f4*+m!a4%z -TZEaz0WOFZbWnpq-XfAMhP)h*<6ay3h000O8^OY7yQi;$;AqD^dZW90i6aWAK0000000000q=9&G4*+ -m!a4%zTZEaz0WOFZbXm58eaCuNm0Rj{Q6aWAK2mtey7Duaz89&ei002Y_000>P0000000000005+c%X -bd|aA|NaV{dJ3VQyq|FLiEdZgX^DY-}!Yc~DCM0u%!j000080P~d=M|glw#xn>201_Pl02KfL000000 -00000HlG^dk+9`X>c!NZ*6U1Ze(*WcW7m0Y%XwlP)h*<6ay3h000O8^OY7yd;YCslm!3)N(}%2761SM -0000000000q=7hu4*+m!a4%zTZE#_9FJE72ZfSI1UoLQYP)h*<6ay3h000O8^OY7yf}*9DO%(tDI9dP -z7ytkO0000000000q=5j64*+m!a4%zTZE#_9FJx(BbYpLBW@%?GaCuNm0Rj{Q6aWAK2mtey7DuWYXS_ -iG002h-000&M0000000000005+cgP#uoaA|NaZEs{{Y;!MPUukY>bYEXCaCuNm0Rj{Q6aWAK2mtey7D -s4KGHu}i008F!000vJ0000000000005+c_@55|aA|NaZEs{{Y;!MZZe(S6E^v8JO928D0~7!N00;o{l -@><;00002000000000Q00000000000001_feN7y0B~t=FK=*Va$$67Z*FrhUtei%X>?y-E^v8JO928D -0~7!N00;o{l@>?RF>h651ONb#4*&od00000000000001_fkdGX0B~t=FK=*Va$$67Z*FrhW^!d^dSxz -fc~DCM0u%!j000080P~d=M_g&r8Grx)02BcL022TJ00000000000HlH5r4ImbX>c!cWpOWGUukY>bYE -XCaCuNm0Rj{Q6aWAK2mtey7DwFNGq6Sr0071%000vJ0000000000005+ckERa*aA|Naa%FKZa%FK}W@ -&6?E^v8JO928D0~7!N00;o{l@>=DEmQ*EDF6Uir~m*K00000000000001_fd;Y<0B~t=FLGsZFLGsZU -ukZ0bYX04E^v8JO928D0~7!N00;o{l@>=`7|$3%8vp<_YXATe00000000000001_ff?Kn0B~t=FLGsZ -FLGsZUvp)2E^v8JO928D0~7!N00;o{l@>?2NHhpv2mk=z8vpc!fbZKmJFJE72ZfSI1UoLQYP)h*<6ay3h000O8^OY7y^O&Vq2nqlI)gu4^6aWAK0000000000q= -5n;5CCv#a4&UqX>4;ZVQ_F{X>xNeaCuNm0Rj{Q6aWAK2mtey7DvqtO)dZe001Bb000sI00000000000 -05+cJSq?XaA|Nab#!TLb1!0bX>4RJaCuNm0Rj{Q6aWAK2mtey7Dv9ThG^dc003wR000;O0000000000 -005+cY%CA}aA|Nab#!TLb1!6NaB^j1VRUJ4ZZ2?nP)h*<6ay3h000O8^OY7y@4;ZW@&6?b9r-gWo<5Sc~DCM0u%!j000080P~d=M`2RBVzUGQ0R9 -XB02BZK00000000000HlFhF%ST7X>c!fbZKmJFKlmTXK8L{E^v8JO928D0~7!N00;o{l@>>}`!?~B1^ -@uF6#xJg00000000000001_fj>470B~t=FLiWjY;!Mfb#!E5bY)~NaCuNm0Rj{Q6aWAK2mtey7Du5k1 -=|}5004Fx000jF0000000000005+c13eG`aA|Nab#!TLb1!viE^v8JO928D0~7!N00;o{l@>=oql8pZ -4FCY}EdT%$00000000000001_flEdZ0B~t=FLq;dFJE72ZfSI1UoLQYP)h*<6ay3h000O8^OY7y>zRr -5%LM=cOA!D75dZ)H0000000000q=C&-5CCv#a4&Xab1!0HdSPL5E^v8JO928D0~7!N00;o{l@>?Sh_s -JC2><}N9RL6h00000000000001_fyY@80B~t=FLq;dFK20VE^v8JO928D0~7!N00;o{l@>=Bo0~X~1p -okU6951d00000000000001_fihzd0B~t=FLq;dFKuOVV|8+AVQemNc~DCM0u%!j000080P~d=M?<@N5 -j_k50OTkD02KfL00000000000HlHQXb=E!X>c!gV{~q% -{ba)VbpZeXJp%v$BLDyZ0000000000q=92~5CCv#a4k13F)lJLWNCABEop9MZ!bheQ$tcoP*h1zPA+n -DbWlqH0u%!j000080Qi*_M;X)hB`N>_07L))03-ka00000000000HlE#cMt$@X>ct!E-@}LE@WwQbS- -IaW^XTLZgg^aUvO_}Zgg`lba-@7O928D0~7!N00;p1l@>>(4j9~H0ssKh1pojc00000000000001_fr -WPv0B~t=EjKPPE;24;X>)WfX>Mk3FKuOXVPs)+VJ>QOZ*EXa0Rj{Q6aWAK2mtt%7DuH%DV{F?001rk0 -00~S0000000000005+cCwdS7aA|NYH!d+QGA?9kb960fZf0*UaAI;UYIARHP)h*<6ay3h000O8_>~q% -#~+u%1^@s61ONa4ApigX0000000000q=Arn5CCv#a4k13F)lJLWNCABEop9MZ!dIja9?a?c4cfXba-@ -7O928D0~7!N00;p1l@>>bGk)WfX>M -k3FIPxKMNCjj0Rj{Q6aWAK2mtt%7DsNd4e99u006xQ000~S0000000000005+cYkLp?aA|NYH!d+QGA -?9kb960fZf0*UO+{2eL_t(RP)h*<6ay3h000O8_>~q%jg!*R`zZhbR96518UO$Q0000000000q=Alp5 -CCv#a4k13F)lJLWNCABEop9MZ!c0sLr+pfP)h{{00000>;UWlXG{P9!Ke@b000 -""" - - -if __name__ == "__main__": - main() diff --git a/install/docker/passwd b/install/docker/passwd deleted file mode 100644 index 7b4fb2554..000000000 --- a/install/docker/passwd +++ /dev/null @@ -1,29 +0,0 @@ -root:x:0:0:root:/root:/bin/ash -bin:x:1:1:bin:/bin:/sbin/nologin -daemon:x:2:2:daemon:/sbin:/sbin/nologin -adm:x:3:4:adm:/var/adm:/sbin/nologin -lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin -sync:x:5:0:sync:/sbin:/bin/sync -shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown -halt:x:7:0:halt:/sbin:/sbin/halt -mail:x:8:12:mail:/var/spool/mail:/sbin/nologin -news:x:9:13:news:/usr/lib/news:/sbin/nologin -uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin -operator:x:11:0:operator:/root:/bin/sh -man:x:13:15:man:/usr/man:/sbin/nologin -postmaster:x:14:12:postmaster:/var/spool/mail:/sbin/nologin -cron:x:16:16:cron:/var/spool/cron:/sbin/nologin -ftp:x:21:21::/var/lib/ftp:/sbin/nologin -sshd:x:22:22:sshd:/dev/null:/sbin/nologin -at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin -squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin -xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin -games:x:35:35:games:/usr/games:/sbin/nologin -postgres:x:70:70::/var/lib/postgresql:/bin/sh -nut:x:84:84:nut:/var/state/nut:/sbin/nologin -cyrus:x:85:12::/usr/cyrus:/sbin/nologin -vpopmail:x:89:89::/var/vpopmail:/sbin/nologin -ntp:x:123:123:NTP:/var/empty:/sbin/nologin -smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin -guest:x:405:100:guest:/dev/null:/sbin/nologin -nobody:x:65534:65534:nobody:/:/sbin/nologin \ No newline at end of file diff --git a/install/docker/piprequires.txt b/install/docker/piprequires.txt deleted file mode 100644 index 1361c45c3..000000000 --- a/install/docker/piprequires.txt +++ /dev/null @@ -1,19 +0,0 @@ -#sphinx-me==0.3 -django==1.6 -#pycrypto==2.4.1 -paramiko==1.16.0 -ecdsa==0.13 -#MySQL-python==1.2.5 -#django-uuidfield==0.5.0 -#psutil==3.3.0 -xlsxwriter==0.7.7 -xlrd==0.9.4 -django-bootstrap-form==3.2 -tornado==4.3 -ansible==1.9.4 -pyinotify==0.9.6 -passlib==1.6.5 -argparse==1.4.0 -django-crontab==0.6.0 -django-smtp-ssl==1.0 -pyte==0.5.2 diff --git a/install/docker/run.sh b/install/docker/run.sh deleted file mode 100644 index 6812e5182..000000000 --- a/install/docker/run.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -cp -r /jumpserver/install/docker/config_tmpl.conf /jumpserver/jumpserver.conf -if [ ! -n "${USE_MYSQL}" ]; then -sed -i "s/__USE_MYSQL__/false/" /jumpserver/jumpserver.conf -else -sed -i "s/__USE_MYSQL__/true/" /jumpserver/jumpserver.conf -sed -i "s/__MYSQL_HOST__/${MYSQL_HOST}/" /jumpserver/jumpserver.conf -sed -i "s/__MYSQL_PORT__/${MYSQL_PORT}/" /jumpserver/jumpserver.conf -sed -i "s/__MYSQL_USER__/${MYSQL_USER}/" /jumpserver/jumpserver.conf -sed -i "s/__MYSQL_PASS__/${MYSQL_PASS}/" /jumpserver/jumpserver.conf -sed -i "s/__MYSQL_NAME__/${MYSQL_NAME}/" /jumpserver/jumpserver.conf -fi - -if [ ! -n "${MAIL_ENABLED}" ]; then -sed -i "s/__MAIL_ENABLED__/false/" /jumpserver/jumpserver.conf -else -sed -i "s/__MAIL_ENABLED__/${MAIL_ENABLED}/" /jumpserver/jumpserver.conf -sed -i "s/__MAIL_HOST__/${MAIL_HOST}/" /jumpserver/jumpserver.conf -sed -i "s/__MAIL_PORT__/${MAIL_PORT}/" /jumpserver/jumpserver.conf -sed -i "s/__MAIL_USER__/${MAIL_USER}/" /jumpserver/jumpserver.conf -sed -i "s/__MAIL_PASS__/${MAIL_PASS}/" /jumpserver/jumpserver.conf -fi -if [ ! -n "${MAIL_USE_TLS}" ]; then -sed -i "s/__MAIL_USE_TLS__/false/" /jumpserver/jumpserver.conf -else -sed -i "s/__MAIL_USE_TLS__/${MAIL_USE_TLS}/" /jumpserver/jumpserver.conf -fi - -if [ ! -f "/etc/ssh/sshd_config" ]; then - cp -r /jumpserver/install/docker/sshd_config /etc/ssh/sshd_config -fi -if [ ! -f "/etc/ssh/ssh_host_rsa_key" ]; then - ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' -fi -if [ ! -f "/etc/ssh/ssh_host_dsa_key" ]; then - ssh-keygen -t dsa -b 1024 -f /etc/ssh/ssh_host_dsa_key -N '' -fi -if [ ! -f "/etc/ssh/ssh_host_ecdsa_key" ]; then - ssh-keygen -t ecdsa -b 521 -f /etc/ssh/ssh_host_ecdsa_key -N '' -fi -if [ ! -f "/etc/ssh/ssh_host_ed25519_key" ]; then - ssh-keygen -t ed25519 -b 1024 -f /etc/ssh/ssh_host_ed25519_key -N '' -fi - -/usr/sbin/sshd -E /data/logs/jumpserver.log -python /jumpserver/manage.py syncdb --noinput -if [ ! -f "/home/init.locked" ]; then - python manage.py loaddata install/initial_data.yaml - date > /home/init.locked -fi -python /jumpserver/run_server.py >> /data/logs/jumpserver.log & -chmod -R 777 /data/logs/jumpserver.log -tail -f /data/logs/jumpserver.log diff --git a/install/docker/shadow b/install/docker/shadow deleted file mode 100644 index ba7ed7367..000000000 --- a/install/docker/shadow +++ /dev/null @@ -1,29 +0,0 @@ -root:::0::::: -bin:!::0::::: -daemon:!::0::::: -adm:!::0::::: -lp:!::0::::: -sync:!::0::::: -shutdown:!::0::::: -halt:!::0::::: -mail:!::0::::: -news:!::0::::: -uucp:!::0::::: -operator:!::0::::: -man:!::0::::: -postmaster:!::0::::: -cron:!::0::::: -ftp:!::0::::: -sshd:!::0::::: -at:!::0::::: -squid:!::0::::: -xfs:!::0::::: -games:!::0::::: -postgres:!::0::::: -nut:!::0::::: -cyrus:!::0::::: -vpopmail:!::0::::: -ntp:!::0::::: -smmsp:!::0::::: -guest:!::0::::: -nobody:!::0::::: \ No newline at end of file diff --git a/install/docker/sshd_config b/install/docker/sshd_config deleted file mode 100644 index 06bf87ed6..000000000 --- a/install/docker/sshd_config +++ /dev/null @@ -1,146 +0,0 @@ -# $OpenBSD: sshd_config,v 1.98 2016/02/17 05:29:04 djm Exp $ - -# This is the sshd server system-wide configuration file. See -# sshd_config(5) for more information. - -# This sshd was compiled with PATH=/bin:/usr/bin:/sbin:/usr/sbin - -# The strategy used for options in the default sshd_config shipped with -# OpenSSH is to specify options with their default value where -# possible, but leave them commented. Uncommented options override the -# default value. - -#Port 22 -#AddressFamily any -#ListenAddress 0.0.0.0 -#ListenAddress :: - -# The default requires explicit activation of protocol 1 -#Protocol 2 - -# HostKey for protocol version 1 -#HostKey /etc/ssh/ssh_host_key -# HostKeys for protocol version 2 -#HostKey /etc/ssh/ssh_host_rsa_key -#HostKey /etc/ssh/ssh_host_dsa_key -#HostKey /etc/ssh/ssh_host_ecdsa_key -#HostKey /etc/ssh/ssh_host_ed25519_key - -# Lifetime and size of ephemeral version 1 server key -#KeyRegenerationInterval 1h -#ServerKeyBits 1024 - -# Ciphers and keying -#RekeyLimit default none - -# Logging -# obsoletes QuietMode and FascistLogging -#SyslogFacility AUTH -#LogLevel INFO - -# Authentication: - -#LoginGraceTime 2m -#PermitRootLogin prohibit-password -#StrictModes yes -#MaxAuthTries 6 -#MaxSessions 10 - -#RSAAuthentication yes -#PubkeyAuthentication yes -PasswordAuthentication no -ChallengeResponseAuthentication no - -# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 -# but this is overridden so installations will only check .ssh/authorized_keys -AuthorizedKeysFile .ssh/authorized_keys - -#AuthorizedPrincipalsFile none - -#AuthorizedKeysCommand none -#AuthorizedKeysCommandUser nobody - -# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts -#RhostsRSAAuthentication no -# similar for protocol version 2 -#HostbasedAuthentication no -# Change to yes if you don't trust ~/.ssh/known_hosts for -# RhostsRSAAuthentication and HostbasedAuthentication -#IgnoreUserKnownHosts no -# Don't read the user's ~/.rhosts and ~/.shosts files -#IgnoreRhosts yes - -# To disable tunneled clear text passwords, change to no here! -#PasswordAuthentication yes -#PermitEmptyPasswords no - -# Change to no to disable s/key passwords -#ChallengeResponseAuthentication yes - -# Kerberos options -#KerberosAuthentication no -#KerberosOrLocalPasswd yes -#KerberosTicketCleanup yes -#KerberosGetAFSToken no - -# GSSAPI options -#GSSAPIAuthentication no -#GSSAPICleanupCredentials yes - -# Set this to 'yes' to enable PAM authentication, account processing, -# and session processing. If this is enabled, PAM authentication will -# be allowed through the ChallengeResponseAuthentication and -# PasswordAuthentication. Depending on your PAM configuration, -# PAM authentication via ChallengeResponseAuthentication may bypass -# the setting of "PermitRootLogin without-password". -# If you just want the PAM account and session checks to run without -# PAM authentication, then enable this but set PasswordAuthentication -# and ChallengeResponseAuthentication to 'no'. -#UsePAM no - -#AllowAgentForwarding yes -#AllowTcpForwarding yes -#GatewayPorts no -#X11Forwarding no -#X11DisplayOffset 10 -#X11UseLocalhost yes -#PermitTTY yes -#PrintMotd yes -#PrintLastLog yes -#TCPKeepAlive yes -#UseLogin no -#UsePrivilegeSeparation sandbox -#PermitUserEnvironment no -#Compression delayed -#ClientAliveInterval 0 -#ClientAliveCountMax 3 -#UseDNS no -#PidFile /run/sshd.pid -#MaxStartups 10:30:100 -#PermitTunnel no -#ChrootDirectory none -#VersionAddendum none - -# no default banner path -#Banner none - -# override default of no subsystems -Subsystem sftp /usr/lib/ssh/sftp-server - -# the following are HPN related configuration options -# tcp receive buffer polling. disable in non autotuning kernels -#TcpRcvBufPoll yes - -# disable hpn performance boosts -#HPNDisabled no - -# buffer size for hpn to non-hpn connections -#HPNBufferSize 2048 - - -# Example of overriding settings on a per-user basis -#Match User anoncvs -# X11Forwarding no -# AllowTcpForwarding no -# PermitTTY no -# ForceCommand cvs server \ No newline at end of file diff --git a/install/docker/useradd b/install/docker/useradd deleted file mode 100644 index cf3215e6e..000000000 --- a/install/docker/useradd +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -adduser $@ \ No newline at end of file diff --git a/install/docker/userdel b/install/docker/userdel deleted file mode 100644 index 6c2b262c0..000000000 --- a/install/docker/userdel +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -deluser --remove-home $3 \ No newline at end of file diff --git a/install/functions b/install/functions deleted file mode 100644 index 8c4d25730..000000000 --- a/install/functions +++ /dev/null @@ -1,594 +0,0 @@ -# -*-Shell-script-*- -# -# functions This file contains functions to be used by most or all -# shell scripts in the /etc/init.d directory. -# - -TEXTDOMAIN=initscripts - -# Make sure umask is sane -umask 022 - -# Set up a default search path. -PATH="/sbin:/usr/sbin:/bin:/usr/bin" -export PATH - -if [ $PPID -ne 1 -a -z "$SYSTEMCTL_SKIP_REDIRECT" ] && \ - ( /bin/mountpoint -q /cgroup/systemd || /bin/mountpoint -q /sys/fs/cgroup/systemd ) ; then - case "$0" in - /etc/init.d/*|/etc/rc.d/init.d/*) - _use_systemctl=1 - ;; - esac -fi - -systemctl_redirect () { - local s - local prog=${1##*/} - local command=$2 - local options="" - - case "$command" in - start) - s=$"Starting $prog (via systemctl): " - ;; - stop) - s=$"Stopping $prog (via systemctl): " - ;; - reload|try-reload) - s=$"Reloading $prog configuration (via systemctl): " - ;; - restart|try-restart|condrestart) - s=$"Restarting $prog (via systemctl): " - ;; - esac - - if [ -n "$SYSTEMCTL_IGNORE_DEPENDENCIES" ] ; then - options="--ignore-dependencies" - fi - - action "$s" /bin/systemctl $options $command "$prog.service" -} - -# Get a sane screen width -[ -z "${COLUMNS:-}" ] && COLUMNS=80 - -if [ -z "${CONSOLETYPE:-}" ]; then - if [ -c "/dev/stderr" -a -r "/dev/stderr" ]; then - CONSOLETYPE="$(/sbin/consoletype < /dev/stderr 2>/dev/null)" - else - CONSOLETYPE="serial" - fi -fi - -if [ -z "${NOLOCALE:-}" ] && [ -z "${LANGSH_SOURCED:-}" ] && [ -f /etc/sysconfig/i18n -o -f /etc/locale.conf ] ; then - . /etc/profile.d/lang.sh 2>/dev/null - # avoid propagating LANGSH_SOURCED any further - unset LANGSH_SOURCED -fi - -# Read in our configuration -if [ -z "${BOOTUP:-}" ]; then - if [ -f /etc/sysconfig/init ]; then - . /etc/sysconfig/init - else - # This all seem confusing? Look in /etc/sysconfig/init, - # or in /usr/share/doc/initscripts-*/sysconfig.txt - BOOTUP=color - RES_COL=60 - MOVE_TO_COL="echo -en \\033[${RES_COL}G" - SETCOLOR_SUCCESS="echo -en \\033[1;32m" - SETCOLOR_FAILURE="echo -en \\033[1;31m" - SETCOLOR_WARNING="echo -en \\033[1;33m" - SETCOLOR_NORMAL="echo -en \\033[0;39m" - LOGLEVEL=1 - fi - if [ "$CONSOLETYPE" = "serial" ]; then - BOOTUP=serial - MOVE_TO_COL= - SETCOLOR_SUCCESS= - SETCOLOR_FAILURE= - SETCOLOR_WARNING= - SETCOLOR_NORMAL= - fi -fi - -# Check if any of $pid (could be plural) are running -checkpid() { - local i - - for i in $* ; do - [ -d "/proc/$i" ] && return 0 - done - return 1 -} - -# __proc_pids {program} [pidfile] -# Set $pid to pids from /var/run* for {program}. $pid should be declared -# local in the caller. -# Returns LSB exit code for the 'status' action. -__pids_var_run() { - local base=${1##*/} - local pid_file=${2:-/var/run/$base.pid} - - pid= - if [ -f "$pid_file" ] ; then - local line p - - [ ! -r "$pid_file" ] && return 4 # "user had insufficient privilege" - while : ; do - read line - [ -z "$line" ] && break - for p in $line ; do - [ -z "${p//[0-9]/}" ] && [ -d "/proc/$p" ] && pid="$pid $p" - done - done < "$pid_file" - - if [ -n "$pid" ]; then - return 0 - fi - return 1 # "Program is dead and /var/run pid file exists" - fi - return 3 # "Program is not running" -} - -# Output PIDs of matching processes, found using pidof -__pids_pidof() { - pidof -c -m -o $$ -o $PPID -o %PPID -x "$1" || \ - pidof -c -m -o $$ -o $PPID -o %PPID -x "${1##*/}" -} - - -# A function to start a program. -daemon() { - # Test syntax. - local gotbase= force= nicelevel corelimit - local pid base= user= nice= bg= pid_file= - local cgroup= - nicelevel=0 - while [ "$1" != "${1##[-+]}" ]; do - case $1 in - '') echo $"$0: Usage: daemon [+/-nicelevel] {program}" - return 1;; - --check) - base=$2 - gotbase="yes" - shift 2 - ;; - --check=?*) - base=${1#--check=} - gotbase="yes" - shift - ;; - --user) - user=$2 - shift 2 - ;; - --user=?*) - user=${1#--user=} - shift - ;; - --pidfile) - pid_file=$2 - shift 2 - ;; - --pidfile=?*) - pid_file=${1#--pidfile=} - shift - ;; - --force) - force="force" - shift - ;; - [-+][0-9]*) - nice="nice -n $1" - shift - ;; - *) echo $"$0: Usage: daemon [+/-nicelevel] {program}" - return 1;; - esac - done - - # Save basename. - [ -z "$gotbase" ] && base=${1##*/} - - # See if it's already running. Look *only* at the pid file. - __pids_var_run "$base" "$pid_file" - - [ -n "$pid" -a -z "$force" ] && return - - # make sure it doesn't core dump anywhere unless requested - corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}" - - # if they set NICELEVEL in /etc/sysconfig/foo, honor it - [ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL" - - # if they set CGROUP_DAEMON in /etc/sysconfig/foo, honor it - if [ -n "${CGROUP_DAEMON}" ]; then - if [ ! -x /bin/cgexec ]; then - echo -n "Cgroups not installed"; warning - echo - else - cgroup="/bin/cgexec"; - for i in $CGROUP_DAEMON; do - cgroup="$cgroup -g $i"; - done - fi - fi - - # Echo daemon - [ "${BOOTUP:-}" = "verbose" -a -z "${LSB:-}" ] && echo -n " $base" - - # And start it up. - if [ -z "$user" ]; then - $cgroup $nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*" - else - $cgroup $nice runuser -s /bin/bash $user -c "$corelimit >/dev/null 2>&1 ; $*" - fi - - [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup" -} - -# A function to stop a program. -killproc() { - local RC killlevel= base pid pid_file= delay try - - RC=0; delay=3; try=0 - # Test syntax. - if [ "$#" -eq 0 ]; then - echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" - return 1 - fi - if [ "$1" = "-p" ]; then - pid_file=$2 - shift 2 - fi - if [ "$1" = "-d" ]; then - delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 '{if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1} END {printf("%d",delay+0.5)}') - if [ "$?" -eq 1 ]; then - echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" - return 1 - fi - shift 2 - fi - - - # check for second arg to be kill level - [ -n "${2:-}" ] && killlevel=$2 - - # Save basename. - base=${1##*/} - - # Find pid. - __pids_var_run "$1" "$pid_file" - RC=$? - if [ -z "$pid" ]; then - if [ -z "$pid_file" ]; then - pid="$(__pids_pidof "$1")" - else - [ "$RC" = "4" ] && { failure $"$base shutdown" ; return $RC ;} - fi - fi - - # Kill it. - if [ -n "$pid" ] ; then - [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base " - if [ -z "$killlevel" ] ; then - if checkpid $pid 2>&1; then - # TERM first, then KILL if not dead - kill -TERM $pid >/dev/null 2>&1 - usleep 50000 - if checkpid $pid ; then - try=0 - while [ $try -lt $delay ] ; do - checkpid $pid || break - sleep 1 - let try+=1 - done - if checkpid $pid ; then - kill -KILL $pid >/dev/null 2>&1 - usleep 50000 - fi - fi - fi - checkpid $pid - RC=$? - [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown" - RC=$((! $RC)) - # use specified level only - else - if checkpid $pid; then - kill $killlevel $pid >/dev/null 2>&1 - RC=$? - [ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel" - elif [ -n "${LSB:-}" ]; then - RC=7 # Program is not running - fi - fi - else - if [ -n "${LSB:-}" -a -n "$killlevel" ]; then - RC=7 # Program is not running - else - failure $"$base shutdown" - RC=0 - fi - fi - - # Remove pid file if any. - if [ -z "$killlevel" ]; then - rm -f "${pid_file:-/var/run/$base.pid}" - fi - return $RC -} - -# A function to find the pid of a program. Looks *only* at the pidfile -pidfileofproc() { - local pid - - # Test syntax. - if [ "$#" = 0 ] ; then - echo $"Usage: pidfileofproc {program}" - return 1 - fi - - __pids_var_run "$1" - [ -n "$pid" ] && echo $pid - return 0 -} - -# A function to find the pid of a program. -pidofproc() { - local RC pid pid_file= - - # Test syntax. - if [ "$#" = 0 ]; then - echo $"Usage: pidofproc [-p pidfile] {program}" - return 1 - fi - if [ "$1" = "-p" ]; then - pid_file=$2 - shift 2 - fi - fail_code=3 # "Program is not running" - - # First try "/var/run/*.pid" files - __pids_var_run "$1" "$pid_file" - RC=$? - if [ -n "$pid" ]; then - echo $pid - return 0 - fi - - [ -n "$pid_file" ] && return $RC - __pids_pidof "$1" || return $RC -} - -status() { - local base pid lock_file= pid_file= - - # Test syntax. - if [ "$#" = 0 ] ; then - echo $"Usage: status [-p pidfile] {program}" - return 1 - fi - if [ "$1" = "-p" ]; then - pid_file=$2 - shift 2 - fi - if [ "$1" = "-l" ]; then - lock_file=$2 - shift 2 - fi - base=${1##*/} - - if [ "$_use_systemctl" = "1" ]; then - systemctl status ${0##*/}.service - return $? - fi - - # First try "pidof" - __pids_var_run "$1" "$pid_file" - RC=$? - if [ -z "$pid_file" -a -z "$pid" ]; then - pid="$(__pids_pidof "$1")" - fi - if [ -n "$pid" ]; then - echo $"${base} (pid $pid) is running..." - return 0 - fi - - case "$RC" in - 0) - echo $"${base} (pid $pid) is running..." - return 0 - ;; - 1) - echo $"${base} dead but pid file exists" - return 1 - ;; - 4) - echo $"${base} status unknown due to insufficient privileges." - return 4 - ;; - esac - if [ -z "${lock_file}" ]; then - lock_file=${base} - fi - # See if /var/lock/subsys/${lock_file} exists - if [ -f /var/lock/subsys/${lock_file} ]; then - echo $"${base} dead but subsys locked" - return 2 - fi - echo $"${base} is stopped" - return 3 -} - -echo_success() { - [ "$BOOTUP" = "color" ] && $MOVE_TO_COL - echo -n "[" - [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS - echo -n $" OK " - [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL - echo -n "]" - echo -ne "\r" - return 0 -} - -echo_failure() { - [ "$BOOTUP" = "color" ] && $MOVE_TO_COL - echo -n "[" - [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE - echo -n $"FAILED" - [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL - echo -n "]" - echo -ne "\r" - return 1 -} - -echo_passed() { - [ "$BOOTUP" = "color" ] && $MOVE_TO_COL - echo -n "[" - [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING - echo -n $"PASSED" - [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL - echo -n "]" - echo -ne "\r" - return 1 -} - -echo_warning() { - [ "$BOOTUP" = "color" ] && $MOVE_TO_COL - echo -n "[" - [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING - echo -n $"WARNING" - [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL - echo -n "]" - echo -ne "\r" - return 1 -} - -# Inform the graphical boot of our current state -update_boot_stage() { - if [ -x /bin/plymouth ]; then - /bin/plymouth --update="$1" - fi - return 0 -} - -# Log that something succeeded -success() { - [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success - return 0 -} - -# Log that something failed -failure() { - local rc=$? - [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_failure - [ -x /bin/plymouth ] && /bin/plymouth --details - return $rc -} - -# Log that something passed, but may have had errors. Useful for fsck -passed() { - local rc=$? - [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_passed - return $rc -} - -# Log a warning -warning() { - local rc=$? - [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_warning - return $rc -} - -# Run some action. Log its output. -action() { - local STRING rc - - STRING=$1 - echo -n "$STRING " - shift - "$@" && success $"$STRING" || failure $"$STRING" - rc=$? - echo - return $rc -} - -# returns OK if $1 contains $2 -strstr() { - [ "${1#*$2*}" = "$1" ] && return 1 - return 0 -} - -# Check whether file $1 is a backup or rpm-generated file and should be ignored -is_ignored_file() { - case "$1" in - *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave) - return 0 - ;; - esac - return 1 -} - -# Evaluate shvar-style booleans -is_true() { - case "$1" in - [tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE]) - return 0 - ;; - esac - return 1 -} - -# Evaluate shvar-style booleans -is_false() { - case "$1" in - [fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE]) - return 0 - ;; - esac - return 1 -} - -# Apply sysctl settings, including files in /etc/sysctl.d -apply_sysctl() { - if [ -x /lib/systemd/systemd-sysctl ]; then - /lib/systemd/systemd-sysctl - else - for file in /usr/lib/sysctl.d/*.conf ; do - is_ignored_file "$file" && continue - [ -f /run/sysctl.d/${file##*/} ] && continue - [ -f /etc/sysctl.d/${file##*/} ] && continue - test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 - done - for file in /run/sysctl.d/*.conf ; do - is_ignored_file "$file" && continue - [ -f /etc/sysctl.d/${file##*/} ] && continue - test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 - done - for file in /etc/sysctl.d/*.conf ; do - is_ignored_file "$file" && continue - test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 - done - sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 - fi -} - -# A sed expression to filter out the files that is_ignored_file recognizes -__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d' - -if [ "$_use_systemctl" = "1" ]; then - if [ "x$1" = xstart -o \ - "x$1" = xstop -o \ - "x$1" = xrestart -o \ - "x$1" = xreload -o \ - "x$1" = xtry-restart -o \ - "x$1" = xforce-reload -o \ - "x$1" = xcondrestart ] ; then - - systemctl_redirect $0 $1 - exit $? - fi -fi diff --git a/install/initial_data.yaml b/install/initial_data.yaml deleted file mode 100644 index 1d82565cb..000000000 --- a/install/initial_data.yaml +++ /dev/null @@ -1,9 +0,0 @@ -- model: juser.user - pk: 5000 - fields: - username: admin - name: admin - password: pbkdf2_sha256$20000$jBIDGPB2j5JT$orxqGgzzjzykColYm1BswPjgHOiERjZkcgkuVIkD2Hc= - email: admin@jumpserver.org - role: SU - is_active: 1 diff --git a/install/install.py b/install/install.py deleted file mode 100755 index 6b71fd17f..000000000 --- a/install/install.py +++ /dev/null @@ -1,307 +0,0 @@ -#!/usr/bin/python -# coding: utf-8 - -import time -import os -import sys -from smtplib import SMTP, SMTP_SSL, SMTPAuthenticationError, SMTPConnectError, SMTPSenderRefused -import ConfigParser -import socket -import random -import string - -import re -import platform -import shlex - -jms_dir = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) -sys.path.append(jms_dir) - - -def bash(cmd): - """ - run a bash shell command - 执行bash命令 - """ - return shlex.os.system(cmd) - - -def valid_ip(ip): - if ('255' in ip) or (ip == "0.0.0.0"): - return False - else: - return True - - -def color_print(msg, color='red', exits=False): - """ - Print colorful string. - 颜色打印字符或者退出 - """ - color_msg = {'blue': '\033[1;36m%s\033[0m', - 'green': '\033[1;32m%s\033[0m', - 'yellow': '\033[1;33m%s\033[0m', - 'red': '\033[1;31m%s\033[0m', - 'title': '\033[30;42m%s\033[0m', - 'info': '\033[32m%s\033[0m'} - msg = color_msg.get(color, 'red') % msg - print msg - if exits: - time.sleep(2) - sys.exit() - return msg - - -def get_ip_addr(): - try: - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - s.connect(("8.8.8.8", 80)) - return s.getsockname()[0] - except Exception: - if_data = ''.join(os.popen("LANG=C ifconfig").readlines()) - ips = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', if_data, flags=re.MULTILINE) - ip = filter(valid_ip, ips) - if ip: - return ip[0] - return '' - - -class PreSetup(object): - def __init__(self): - self.db_host = '127.0.0.1' - self.db_port = 3306 - self.db_user = 'jumpserver' - self.db_pass = '5Lov@wife' - self.db = 'jumpserver' - self.mail_host = 'smtp.qq.com' - self.mail_port = 25 - self.mail_addr = 'hello@jumpserver.org' - self.mail_pass = '' - self.ip = '' - self.key = ''.join(random.choice(string.ascii_lowercase + string.digits) \ - for _ in range(16)) - self.dist = platform.linux_distribution()[0].lower() - self.version = platform.linux_distribution()[1] - - @property - def _is_redhat(self): - if self.dist.startswith("centos") or self.dist.startswith("red") or self.dist == "fedora" or self.dist == "amazon linux ami": - return True - - @property - def _is_centos7(self): - if self.dist.startswith("centos") and self.version.startswith("7"): - return True - - @property - def _is_fedora_new(self): - if self.dist == "fedora" and int(self.version) >= 20: - return True - - @property - def _is_ubuntu(self): - if self.dist == "ubuntu" or self.dist == "debian": - return True - - def check_platform(self): - if not (self._is_redhat or self._is_ubuntu): - print(u"支持的平台: CentOS, RedHat, Fedora, Debian, Ubuntu, Amazon Linux, 暂不支持其他平台安装.") - exit() - - @staticmethod - def check_bash_return(ret_code, error_msg): - if ret_code != 0: - color_print(error_msg, 'red') - exit() - - def write_conf(self, conf_file=os.path.join(jms_dir, 'jumpserver.conf')): - color_print('开始写入配置文件', 'green') - conf = ConfigParser.ConfigParser() - conf.read(conf_file) - conf.set('base', 'url', 'http://%s' % self.ip) - conf.set('base', 'key', self.key) - conf.set('db', 'host', self.db_host) - conf.set('db', 'port', self.db_port) - conf.set('db', 'user', self.db_user) - conf.set('db', 'password', self.db_pass) - conf.set('db', 'database', self.db) - conf.set('mail', 'email_host', self.mail_host) - conf.set('mail', 'email_port', self.mail_port) - conf.set('mail', 'email_host_user', self.mail_addr) - conf.set('mail', 'email_host_password', self.mail_pass) - - with open(conf_file, 'w') as f: - conf.write(f) - - def _setup_mysql(self): - color_print('开始安装设置mysql (请手动设置mysql安全)', 'green') - color_print('默认用户名: %s 默认密码: %s' % (self.db_user, self.db_pass), 'green') - if self._is_redhat: - if self._is_centos7 or self._is_fedora_new: - ret_code = bash('yum -y install mariadb-server mariadb-devel') - self.check_bash_return(ret_code, "安装mysql(mariadb)失败, 请检查安装源是否更新或手动安装!") - - bash('systemctl enable mariadb.service') - bash('systemctl start mariadb.service') - else: - ret_code = bash('yum -y install mysql-server') - self.check_bash_return(ret_code, "安装mysql失败, 请检查安装源是否更新或手动安装!") - - bash('service mysqld start') - bash('chkconfig mysqld on') - bash('mysql -e "create database %s default charset=utf8"' % self.db) - bash('mysql -e "grant all on %s.* to \'%s\'@\'%s\' identified by \'%s\'"' % (self.db, - self.db_user, - self.db_host, - self.db_pass)) - if self._is_ubuntu: - cmd1 = "echo mysql-server mysql-server/root_password select '' | debconf-set-selections" - cmd2 = "echo mysql-server mysql-server/root_password_again select '' | debconf-set-selections" - cmd3 = "apt-get -y install mysql-server" - ret_code = bash('%s; %s; %s' % (cmd1, cmd2, cmd3)) - self.check_bash_return(ret_code, "安装mysql失败, 请检查安装源是否更新或手动安装!") - - bash('service mysql start') - bash('mysql -e "create database %s default charset=utf8"' % self.db) - bash('mysql -e "grant all on %s.* to \'%s\'@\'%s\' identified by \'%s\'"' % (self.db, - self.db_user, - self.db_host, - self.db_pass)) - - def _set_env(self): - color_print('开始关闭防火墙和selinux', 'green') - if self._is_redhat: - os.system("export LANG='en_US.UTF-8'") - if self._is_centos7 or self._is_fedora_new: - cmd1 = "systemctl status firewalld 2> /dev/null 1> /dev/null" - cmd2 = "systemctl stop firewalld" - cmd3 = "systemctl disable firewalld" - bash('%s && %s && %s' % (cmd1, cmd2, cmd3)) - bash('localectl set-locale LANG=en_US.UTF-8') - bash('which setenforce 2> /dev/null 1> /dev/null && setenforce 0') - else: - bash("sed -i 's/LANG=.*/LANG=en_US.UTF-8/g' /etc/sysconfig/i18n") - bash('service iptables stop && chkconfig iptables off && setenforce 0') - - if self._is_ubuntu: - os.system("export LANG='en_US.UTF-8'") - bash("which iptables && iptables -F") - bash('which setenforce && setenforce 0') - - def _test_db_conn(self): - import MySQLdb - try: - MySQLdb.connect(host=self.db_host, port=int(self.db_port), - user=self.db_user, passwd=self.db_pass, db=self.db) - color_print('连接数据库成功', 'green') - return True - except MySQLdb.OperationalError, e: - color_print('数据库连接失败 %s' % e, 'red') - return False - - def _test_mail(self): - try: - if self.mail_port == 465: - smtp = SMTP_SSL(self.mail_host, port=self.mail_port, timeout=2) - else: - smtp = SMTP(self.mail_host, port=self.mail_port, timeout=2) - smtp.login(self.mail_addr, self.mail_pass) - smtp.sendmail(self.mail_addr, (self.mail_addr, ), - '''From:%s\r\nTo:%s\r\nSubject:Jumpserver Mail Test!\r\n\r\n Mail test passed!\r\n''' % - (self.mail_addr, self.mail_addr)) - smtp.quit() - return True - - except Exception, e: - color_print(e, 'red') - skip = raw_input('是否跳过(y/n) [n]? : ') - if skip == 'y': - return True - return False - - def _rpm_repo(self): - if self._is_redhat: - color_print('开始安装epel源', 'green') - bash('yum -y install epel-release') - - def _depend_rpm(self): - color_print('开始安装依赖包', 'green') - if self._is_redhat: - cmd = 'yum -y install git python-pip mysql-devel rpm-build gcc automake autoconf python-devel vim sshpass lrzsz readline-devel' - ret_code = bash(cmd) - self.check_bash_return(ret_code, "安装依赖失败, 请检查安装源是否更新或手动安装!") - if self._is_ubuntu: - cmd = "apt-get -y --force-yes install git python-pip gcc automake autoconf vim sshpass libmysqld-dev python-all-dev lrzsz libreadline-dev" - ret_code = bash(cmd) - self.check_bash_return(ret_code, "安装依赖失败, 请检查安装源是否更新或手动安装!") - - def _require_pip(self): - color_print('开始安装依赖pip包', 'green') - bash('pip uninstall -y pycrypto') - bash('rm -rf /usr/lib64/python2.6/site-packages/Crypto/') - ret_code = bash('pip install -r requirements.txt') - self.check_bash_return(ret_code, "安装JumpServer 依赖的python库失败!") - - def _input_ip(self): - ip = raw_input('\n请输入您服务器的IP地址,用户浏览器可以访问 [%s]: ' % get_ip_addr()).strip() - self.ip = ip if ip else get_ip_addr() - - def _input_mysql(self): - while True: - mysql = raw_input('是否安装新的MySQL服务器? (y/n) [y]: ') - if mysql != 'n': - self._setup_mysql() - else: - db_host = raw_input('请输入数据库服务器IP [127.0.0.1]: ').strip() - db_port = raw_input('请输入数据库服务器端口 [3306]: ').strip() - db_user = raw_input('请输入数据库服务器用户 [jumpserver]: ').strip() - db_pass = raw_input('请输入数据库服务器密码: ').strip() - db = raw_input('请输入使用的数据库 [jumpserver]: ').strip() - - if db_host: self.db_host = db_host - if db_port: self.db_port = db_port - if db_user: self.db_user = db_user - if db_pass: self.db_pass = db_pass - if db: self.db = db - - if self._test_db_conn(): - break - - print - - def _input_smtp(self): - while True: - self.mail_host = raw_input('请输入SMTP地址: ').strip() - mail_port = raw_input('请输入SMTP端口 [25]: ').strip() - self.mail_addr = raw_input('请输入账户: ').strip() - self.mail_pass = raw_input('请输入密码: ').strip() - - if mail_port: self.mail_port = int(mail_port) - - if self._test_mail(): - color_print('\n\t请登陆邮箱查收邮件, 然后确认是否继续安装\n', 'green') - smtp = raw_input('是否继续? (y/n) [y]: ') - if smtp == 'n': - continue - else: - break - print - - def start(self): - color_print('请务必先查看wiki https://github.com/jumpserver/jumpserver/wiki') - time.sleep(3) - self.check_platform() - self._rpm_repo() - self._depend_rpm() - self._require_pip() - self._set_env() - self._input_ip() - self._input_mysql() - self._input_smtp() - self.write_conf() - os.system('python %s' % os.path.join(jms_dir, 'install/next.py')) - - -if __name__ == '__main__': - pre_setup = PreSetup() - pre_setup.start() diff --git a/install/next.py b/install/next.py deleted file mode 100755 index 537681643..000000000 --- a/install/next.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/python -# coding: utf-8 - -import sys -import os -import django -from django.core.management import execute_from_command_line -import shlex -import urllib -import socket -import subprocess - - -jms_dir = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) -sys.path.append(jms_dir) - -os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' -if django.get_version() != '1.6': - setup = django.setup() - -from juser.user_api import db_add_user, get_object, User -from install import color_print -from jumpserver.api import get_mac_address, bash - -socket.setdefaulttimeout(2) - - -class Setup(object): - """ - 安装jumpserver向导 - """ - - def __init__(self): - self.admin_user = 'admin' - self.admin_pass = '5Lov@wife' - - @staticmethod - def _pull(): - color_print('开始更新jumpserver', 'green') - # bash('git pull') - try: - mac = get_mac_address() - version = urllib.urlopen('http://jumpserver.org/version/?id=%s' % mac) - except: - pass - - def _input_admin(self): - while True: - print - admin_user = raw_input('请输入管理员用户名 [%s]: ' % self.admin_user).strip() - admin_pass = raw_input('请输入管理员密码: [%s]: ' % self.admin_pass).strip() - admin_pass_again = raw_input('请再次输入管理员密码: [%s]: ' % self.admin_pass).strip() - - if admin_user: - self.admin_user = admin_user - - if not admin_pass_again: - admin_pass_again = self.admin_pass - - if admin_pass: - self.admin_pass = admin_pass - - if self.admin_pass != admin_pass_again: - color_print('两次密码不相同请重新输入') - else: - break - print - - @staticmethod - def _sync_db(): - os.chdir(jms_dir) - execute_from_command_line(['manage.py', 'syncdb', '--noinput']) - - def _create_admin(self): - user = get_object(User, username=self.admin_user) - if user: - user.delete() - db_add_user(username=self.admin_user, password=self.admin_pass, role='SU', name='admin', groups='', - admin_groups='', email='admin@jumpserver.org', uuid='MayBeYouAreTheFirstUser', is_active=True) - cmd = 'id %s 2> /dev/null 1> /dev/null || useradd %s' % (self.admin_user, self.admin_user) - shlex.os.system(cmd) - - @staticmethod - def _chmod_file(): - os.chdir(jms_dir) - os.chmod('init.sh', 0755) - os.chmod('connect.py', 0755) - os.chmod('manage.py', 0755) - os.chmod('run_server.py', 0755) - os.chmod('service.sh', 0755) - os.chmod('logs', 0777) - os.chmod('keys', 0777) - - @staticmethod - def _run_service(): - cmd = 'bash %s start' % os.path.join(jms_dir, 'service.sh') - shlex.os.system(cmd) - print - color_print('安装成功,Web登录请访问http://ip:8000, 祝你使用愉快。\n请访问 https://github.com/jumpserver/jumpserver/wiki 查看文档', 'green') - - def start(self): - print "开始安装Jumpserver ..." - self._pull() - self._sync_db() - self._input_admin() - self._create_admin() - self._chmod_file() - self._run_service() - - -if __name__ == '__main__': - setup = Setup() - setup.start() diff --git a/install/requirements.txt b/install/requirements.txt deleted file mode 100644 index 764fc47f4..000000000 --- a/install/requirements.txt +++ /dev/null @@ -1,19 +0,0 @@ -#sphinx-me==0.3 -django==1.6 -pycrypto==2.4.1 -paramiko==1.16.0 -ecdsa==0.13 -MySQL-python==1.2.5 -#django-uuidfield==0.5.0 -psutil==3.3.0 -xlsxwriter==0.7.7 -xlrd==0.9.4 -django-bootstrap-form==3.2 -tornado==4.3 -ansible==1.9.4 -pyinotify==0.9.6 -passlib==1.6.5 -argparse==1.4.0 -django-crontab==0.6.0 -django-smtp-ssl==1.0 -pyte==0.5.2 diff --git a/jasset/__init__.py b/jasset/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/jasset/admin.py b/jasset/admin.py deleted file mode 100644 index 8c38f3f3d..000000000 --- a/jasset/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/jasset/asset_api.py b/jasset/asset_api.py deleted file mode 100644 index 2d86b67b0..000000000 --- a/jasset/asset_api.py +++ /dev/null @@ -1,403 +0,0 @@ -# coding: utf-8 -from __future__ import division -import xlrd -import xlsxwriter -from django.db.models import AutoField -from jumpserver.api import * -from jasset.models import ASSET_STATUS, ASSET_TYPE, ASSET_ENV, IDC, AssetRecord -from jperm.ansible_api import MyRunner -from jperm.perm_api import gen_resource -from jumpserver.templatetags.mytags import get_disk_info - -import traceback - - -def group_add_asset(group, asset_id=None, asset_ip=None): - """ - 资产组添加资产 - Asset group add a asset - """ - if asset_id: - asset = get_object(Asset, id=asset_id) - else: - asset = get_object(Asset, ip=asset_ip) - - if asset: - group.asset_set.add(asset) - - -def db_add_group(**kwargs): - """ - add a asset group in database - 数据库中添加资产 - """ - name = kwargs.get('name') - group = get_object(AssetGroup, name=name) - asset_id_list = kwargs.pop('asset_select') - - if not group: - group = AssetGroup(**kwargs) - group.save() - for asset_id in asset_id_list: - group_add_asset(group, asset_id) - - -def db_update_group(**kwargs): - """ - add a asset group in database - 数据库中更新资产 - """ - group_id = kwargs.pop('id') - asset_id_list = kwargs.pop('asset_select') - group = get_object(AssetGroup, id=group_id) - - for asset_id in asset_id_list: - group_add_asset(group, asset_id) - - AssetGroup.objects.filter(id=group_id).update(**kwargs) - - -def db_asset_add(**kwargs): - """ - add asset to db - 添加主机时数据库操作函数 - """ - group_id_list = kwargs.pop('groups') - asset = Asset(**kwargs) - asset.save() - - group_select = [] - for group_id in group_id_list: - group = AssetGroup.objects.filter(id=group_id) - group_select.extend(group) - asset.group = group_select - - -def db_asset_update(**kwargs): - """ 修改主机时数据库操作函数 """ - asset_id = kwargs.pop('id') - Asset.objects.filter(id=asset_id).update(**kwargs) - - -def sort_ip_list(ip_list): - """ ip地址排序 """ - ip_list.sort(key=lambda s: map(int, s.split('.'))) - return ip_list - - -def get_tuple_name(asset_tuple, value): - """""" - for t in asset_tuple: - if t[0] == value: - return t[1] - - return '' - - -def get_tuple_diff(asset_tuple, field_name, value): - """""" - old_name = get_tuple_name(asset_tuple, int(value[0])) if value[0] else u'' - new_name = get_tuple_name(asset_tuple, int(value[1])) if value[1] else u'' - alert_info = [field_name, old_name, new_name] - return alert_info - - -def asset_diff(before, after): - """ - asset change before and after - """ - alter_dic = {} - before_dic, after_dic = before, dict(after.iterlists()) - for k, v in before_dic.items(): - after_dic_values = after_dic.get(k, []) - if k == 'group': - after_dic_value = after_dic_values if len(after_dic_values) > 0 else u'' - uv = v if v is not None else u'' - else: - after_dic_value = after_dic_values[0] if len(after_dic_values) > 0 else u'' - uv = unicode(v) if v is not None else u'' - if uv != after_dic_value: - alter_dic.update({k: [uv, after_dic_value]}) - - for k, v in alter_dic.items(): - if v == [None, u'']: - alter_dic.pop(k) - - return alter_dic - - -def asset_diff_one(before, after): - print before.__dict__, after.__dict__ - fields = Asset._meta.get_all_field_names() - for field in fields: - print before.field, after.field - - -def db_asset_alert(asset, username, alert_dic): - """ - asset alert info to db - """ - alert_list = [] - asset_tuple_dic = {'status': ASSET_STATUS, 'env': ASSET_ENV, 'asset_type': ASSET_TYPE} - for field, value in alert_dic.iteritems(): - field_name = Asset._meta.get_field_by_name(field)[0].verbose_name - if field == 'idc': - old = IDC.objects.filter(id=value[0]) if value[0] else u'' - new = IDC.objects.filter(id=value[1]) if value[1] else u'' - old_name = old[0].name if old else u'' - new_name = new[0].name if new else u'' - alert_info = [field_name, old_name, new_name] - - elif field in ['status', 'env', 'asset_type']: - alert_info = get_tuple_diff(asset_tuple_dic.get(field), field_name, value) - - elif field == 'group': - old, new = [], [] - for group_id in value[0]: - group_name = AssetGroup.objects.get(id=int(group_id)).name - old.append(group_name) - for group_id in value[1]: - group_name = AssetGroup.objects.get(id=int(group_id)).name - new.append(group_name) - if sorted(old) == sorted(new): - continue - else: - alert_info = [field_name, ','.join(old), ','.join(new)] - - elif field == 'use_default_auth': - if unicode(value[0]) == 'True' and unicode(value[1]) == 'on' or \ - unicode(value[0]) == 'False' and unicode(value[1]) == '': - continue - else: - name = asset.username - alert_info = [field_name, u'默认', name] if unicode(value[0]) == 'True' else \ - [field_name, name, u'默认'] - - elif field in ['username', 'password']: - continue - - elif field == 'is_active': - if unicode(value[0]) == 'True' and unicode(value[1]) == '1' or \ - unicode(value[0]) == 'False' and unicode(value[1]) == '0': - continue - else: - alert_info = [u'是否激活', u'激活', u'禁用'] if unicode(value[0]) == 'True' else \ - [u'是否激活', u'禁用', u'激活'] - - else: - alert_info = [field_name, unicode(value[0]), unicode(value[1])] - - if 'alert_info' in dir(): - alert_list.append(alert_info) - - if alert_list: - AssetRecord.objects.create(asset=asset, username=username, content=alert_list) - - -def write_excel(asset_all): - data = [] - now = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M') - file_name = 'cmdb_excel_' + now + '.xlsx' - workbook = xlsxwriter.Workbook('static/files/excels/%s' % file_name) - worksheet = workbook.add_worksheet(u'CMDB数据') - worksheet.set_first_sheet() - worksheet.set_column('A:E', 15) - worksheet.set_column('F:F', 40) - worksheet.set_column('G:Z', 15) - title = [u'主机名', u'IP', u'IDC', u'所属主机组', u'操作系统', u'CPU', u'内存(G)', u'硬盘(G)', - u'机柜位置', u'MAC', u'远控IP', u'机器状态', u'备注'] - for asset in asset_all: - group_list = [] - for p in asset.group.all(): - group_list.append(p.name) - - disk = get_disk_info(asset.disk) - group_all = '/'.join(group_list) - status = asset.get_status_display() - idc_name = asset.idc.name if asset.idc else u'' - system_type = asset.system_type if asset.system_type else u'' - system_version = asset.system_version if asset.system_version else u'' - system_os = unicode(system_type) + unicode(system_version) - - alter_dic = [asset.hostname, asset.ip, idc_name, group_all, system_os, asset.cpu, asset.memory, - disk, asset.cabinet, asset.mac, asset.remote_ip, status, asset.comment] - data.append(alter_dic) - format = workbook.add_format() - format.set_border(1) - format.set_align('center') - format.set_align('vcenter') - format.set_text_wrap() - - format_title = workbook.add_format() - format_title.set_border(1) - format_title.set_bg_color('#cccccc') - format_title.set_align('center') - format_title.set_bold() - - format_ave = workbook.add_format() - format_ave.set_border(1) - format_ave.set_num_format('0.00') - - worksheet.write_row('A1', title, format_title) - i = 2 - for alter_dic in data: - location = 'A' + str(i) - worksheet.write_row(location, alter_dic, format) - i += 1 - - workbook.close() - ret = (True, file_name) - return ret - - -def copy_model_instance(obj): - initial = dict([(f.name, getattr(obj, f.name)) - for f in obj._meta.fields - if not isinstance(f, AutoField) and \ - not f in obj._meta.parents.values()]) - return obj.__class__(**initial) - - -def ansible_record(asset, ansible_dic, username): - alert_dic = {} - asset_dic = asset.__dict__ - for field, value in ansible_dic.items(): - old = asset_dic.get(field) - new = ansible_dic.get(field) - if unicode(old) != unicode(new): - setattr(asset, field, value) - asset.save() - alert_dic[field] = [old, new] - - db_asset_alert(asset, username, alert_dic) - - -def excel_to_db(excel_file): - """ - Asset add batch function - """ - try: - data = xlrd.open_workbook(filename=None, file_contents=excel_file.read()) - except Exception, e: - return False - else: - table = data.sheets()[0] - rows = table.nrows - for row_num in range(1, rows): - row = table.row_values(row_num) - if row: - group_instance = [] - ip, port, hostname, use_default_auth, username, password, group = row - if get_object(Asset, hostname=hostname): - continue - if isinstance(password, int) or isinstance(password, float): - password = unicode(int(password)) - use_default_auth = 1 if use_default_auth == u'默认' else 0 - password_encode = CRYPTOR.encrypt(password) if password else '' - if hostname: - asset = Asset(ip=ip, - port=port, - hostname=hostname, - use_default_auth=use_default_auth, - username=username, - password=password_encode - ) - asset.save() - group_list = group.split('/') - for group_name in group_list: - group = get_object(AssetGroup, name=group_name) - if group: - group_instance.append(group) - if group_instance: - asset.group = group_instance - asset.save() - return True - - -def get_ansible_asset_info(asset_ip, setup_info): - disk_need = {} - disk_all = setup_info.get("ansible_devices") - if disk_all: - for disk_name, disk_info in disk_all.iteritems(): - if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd') or disk_name.startswith('xvd'): - disk_size = disk_info.get("size", '') - if 'M' in disk_size: - disk_format = round(float(disk_size[:-2]) / 1000, 0) - elif 'T' in disk_size: - disk_format = round(float(disk_size[:-2]) * 1000, 0) - else: - disk_format = float(disk_size[:-2]) - disk_need[disk_name] = disk_format - all_ip = setup_info.get("ansible_all_ipv4_addresses") - other_ip_list = all_ip.remove(asset_ip) if asset_ip in all_ip else [] - other_ip = ','.join(other_ip_list) if other_ip_list else '' - # hostname = setup_info.get("ansible_hostname") - # ip = setup_info.get("ansible_default_ipv4").get("address") - mac = setup_info.get("ansible_default_ipv4").get("macaddress") - brand = setup_info.get("ansible_product_name") - try: - cpu_type = setup_info.get("ansible_processor")[1] - except IndexError: - cpu_type = ' '.join(setup_info.get("ansible_processor")[0].split(' ')[:6]) - - memory = setup_info.get("ansible_memtotal_mb") - try: - memory_format = int(round((int(memory) / 1000), 0)) - except Exception: - memory_format = memory - disk = disk_need - system_type = setup_info.get("ansible_distribution") - if system_type.lower() == "freebsd": - system_version = setup_info.get("ansible_distribution_release") - cpu_cores = setup_info.get("ansible_processor_count") - else: - system_version = setup_info.get("ansible_distribution_version") - cpu_cores = setup_info.get("ansible_processor_vcpus") - cpu = cpu_type + ' * ' + unicode(cpu_cores) - system_arch = setup_info.get("ansible_architecture") - # asset_type = setup_info.get("ansible_system") - sn = setup_info.get("ansible_product_serial") - asset_info = [other_ip, mac, cpu, memory_format, disk, sn, system_type, system_version, brand, system_arch] - return asset_info - - -def asset_ansible_update(obj_list, name=''): - resource = gen_resource(obj_list) - ansible_instance = MyRunner(resource) - ansible_asset_info = ansible_instance.run(module_name='setup', pattern='*') - logger.debug('获取硬件信息: %s' % ansible_asset_info) - for asset in obj_list: - try: - setup_info = ansible_asset_info['contacted'][asset.hostname]['ansible_facts'] - logger.debug("setup_info: %s" % setup_info) - except KeyError, e: - logger.error("获取setup_info失败: %s" % e) - continue - else: - try: - asset_info = get_ansible_asset_info(asset.ip, setup_info) - print asset_info - other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand, system_arch = asset_info - asset_dic = {"other_ip": other_ip, - "mac": mac, - "cpu": cpu, - "memory": memory, - "disk": disk, - "sn": sn, - "system_type": system_type, - "system_version": system_version, - "system_arch": system_arch, - "brand": brand - } - - ansible_record(asset, asset_dic, name) - except Exception as e: - logger.error("save setup info failed! %s" % e) - traceback.print_exc() - - -def asset_ansible_update_all(): - name = u'定时更新' - asset_all = Asset.objects.all() - asset_ansible_update(asset_all, name) - diff --git a/jasset/forms.py b/jasset/forms.py deleted file mode 100644 index 7f96b30c6..000000000 --- a/jasset/forms.py +++ /dev/null @@ -1,38 +0,0 @@ -# coding:utf-8 -from django import forms - -from jasset.models import IDC, Asset, AssetGroup - - -class AssetForm(forms.ModelForm): - - class Meta: - model = Asset - - fields = [ - "ip", "other_ip", "hostname", "port", "group", "username", "password", "use_default_auth", - "idc", "mac", "remote_ip", "brand", "cpu", "memory", "disk", "system_type", "system_version", - "cabinet", "position", "number", "status", "asset_type", "env", "sn", "is_active", "comment", - "system_arch" - ] - - -class AssetGroupForm(forms.ModelForm): - class Meta: - model = AssetGroup - fields = [ - "name", "comment" - ] - - -class IdcForm(forms.ModelForm): - class Meta: - model = IDC - fields = ['name', "bandwidth", "operator", 'linkman', 'phone', 'address', 'network', 'comment'] - widgets = { - 'name': forms.TextInput(attrs={'placeholder': 'Name'}), - 'network': forms.Textarea( - attrs={'placeholder': '192.168.1.0/24\n192.168.2.0/24'}) - } - - diff --git a/jasset/models.py b/jasset/models.py deleted file mode 100644 index 0ec72e553..000000000 --- a/jasset/models.py +++ /dev/null @@ -1,111 +0,0 @@ -# coding: utf-8 - -import datetime -from django.db import models -from juser.models import User, UserGroup - -ASSET_ENV = ( - (1, U'生产环境'), - (2, U'测试环境') - ) - -ASSET_STATUS = ( - (1, u"已使用"), - (2, u"未使用"), - (3, u"报废") - ) - -ASSET_TYPE = ( - (1, u"物理机"), - (2, u"虚拟机"), - (3, u"交换机"), - (4, u"路由器"), - (5, u"防火墙"), - (6, u"Docker"), - (7, u"其他") - ) - - -class AssetGroup(models.Model): - GROUP_TYPE = ( - ('P', 'PRIVATE'), - ('A', 'ASSET'), - ) - name = models.CharField(max_length=80, unique=True) - comment = models.CharField(max_length=160, blank=True, null=True) - - def __unicode__(self): - return self.name - - -class IDC(models.Model): - name = models.CharField(max_length=32, verbose_name=u'机房名称') - bandwidth = models.CharField(max_length=32, blank=True, null=True, default='', verbose_name=u'机房带宽') - linkman = models.CharField(max_length=16, blank=True, null=True, default='', verbose_name=u'联系人') - phone = models.CharField(max_length=32, blank=True, null=True, default='', verbose_name=u'联系电话') - address = models.CharField(max_length=128, blank=True, null=True, default='', verbose_name=u"机房地址") - network = models.TextField(blank=True, null=True, default='', verbose_name=u"IP地址段") - date_added = models.DateField(auto_now=True, null=True) - operator = models.CharField(max_length=32, blank=True, default='', null=True, verbose_name=u"运营商") - comment = models.CharField(max_length=128, blank=True, default='', null=True, verbose_name=u"备注") - - def __unicode__(self): - return self.name - - class Meta: - verbose_name = u"IDC机房" - verbose_name_plural = verbose_name - - -class Asset(models.Model): - """ - asset modle - """ - ip = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"主机IP") - other_ip = models.CharField(max_length=255, blank=True, null=True, verbose_name=u"其他IP") - hostname = models.CharField(unique=True, max_length=128, verbose_name=u"主机名") - port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号") - group = models.ManyToManyField(AssetGroup, blank=True, verbose_name=u"所属主机组") - username = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"管理用户名") - password = models.CharField(max_length=256, blank=True, null=True, verbose_name=u"密码") - use_default_auth = models.BooleanField(default=True, verbose_name=u"使用默认管理账号") - idc = models.ForeignKey(IDC, blank=True, null=True, on_delete=models.SET_NULL, verbose_name=u'机房') - mac = models.CharField(max_length=20, blank=True, null=True, verbose_name=u"MAC地址") - remote_ip = models.CharField(max_length=16, blank=True, null=True, verbose_name=u'远控卡IP') - brand = models.CharField(max_length=64, blank=True, null=True, verbose_name=u'硬件厂商型号') - cpu = models.CharField(max_length=64, blank=True, null=True, verbose_name=u'CPU') - memory = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'内存') - disk = models.CharField(max_length=1024, blank=True, null=True, verbose_name=u'硬盘') - system_type = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"系统类型") - system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"系统版本号") - system_arch = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"系统平台") - cabinet = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号') - position = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置') - number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号') - status = models.IntegerField(choices=ASSET_STATUS, blank=True, null=True, default=1, verbose_name=u"机器状态") - asset_type = models.IntegerField(choices=ASSET_TYPE, blank=True, null=True, verbose_name=u"主机类型") - env = models.IntegerField(choices=ASSET_ENV, blank=True, null=True, verbose_name=u"运行环境") - sn = models.CharField(max_length=128, blank=True, null=True, verbose_name=u"SN编号") - date_added = models.DateTimeField(auto_now=True, null=True) - is_active = models.BooleanField(default=True, verbose_name=u"是否激活") - comment = models.CharField(max_length=128, blank=True, null=True, verbose_name=u"备注") - - def __unicode__(self): - return self.ip - - -class AssetRecord(models.Model): - asset = models.ForeignKey(Asset) - username = models.CharField(max_length=30, null=True) - alert_time = models.DateTimeField(auto_now_add=True) - content = models.TextField(null=True, blank=True) - comment = models.TextField(null=True, blank=True) - - -class AssetAlias(models.Model): - user = models.ForeignKey(User) - asset = models.ForeignKey(Asset) - alias = models.CharField(max_length=100, blank=True, null=True) - - def __unicode__(self): - return self.alias diff --git a/jasset/tests.py b/jasset/tests.py deleted file mode 100644 index 7ce503c2d..000000000 --- a/jasset/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/jasset/urls.py b/jasset/urls.py deleted file mode 100644 index 7daa9be20..000000000 --- a/jasset/urls.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding:utf-8 -from django.conf.urls import patterns, include, url -from jasset.views import * - -urlpatterns = patterns('', - url(r'^asset/add/$', asset_add, name='asset_add'), - url(r"^asset/add_batch/$", asset_add_batch, name='asset_add_batch'), - url(r'^asset/list/$', asset_list, name='asset_list'), - url(r'^asset/del/$', asset_del, name='asset_del'), - url(r"^asset/detail/$", asset_detail, name='asset_detail'), - url(r'^asset/edit/$', asset_edit, name='asset_edit'), - url(r'^asset/edit_batch/$', asset_edit_batch, name='asset_edit_batch'), - url(r'^asset/update/$', asset_update, name='asset_update'), - url(r'^asset/update_batch/$', asset_update_batch, name='asset_update_batch'), - url(r'^asset/upload/$', asset_upload, name='asset_upload'), - url(r'^group/del/$', group_del, name='asset_group_del'), - url(r'^group/add/$', group_add, name='asset_group_add'), - url(r'^group/list/$', group_list, name='asset_group_list'), - url(r'^group/edit/$', group_edit, name='asset_group_edit'), - url(r'^idc/add/$', idc_add, name='idc_add'), - url(r'^idc/list/$', idc_list, name='idc_list'), - url(r'^idc/edit/$', idc_edit, name='idc_edit'), - url(r'^idc/del/$', idc_del, name='idc_del'), -) \ No newline at end of file diff --git a/jasset/views.py b/jasset/views.py deleted file mode 100644 index d2dcff55d..000000000 --- a/jasset/views.py +++ /dev/null @@ -1,577 +0,0 @@ -# coding:utf-8 - -from django.db.models import Q -from jasset.asset_api import * -from jumpserver.api import * -from jumpserver.models import Setting -from jasset.forms import AssetForm, IdcForm -from jasset.models import Asset, IDC, AssetGroup, ASSET_TYPE, ASSET_STATUS -from jperm.perm_api import get_group_asset_perm, get_group_user_perm - - -@require_role('admin') -def group_add(request): - """ - Group add view - 添加资产组 - """ - header_title, path1, path2 = u'添加资产组', u'资产管理', u'添加资产组' - asset_all = Asset.objects.all() - - if request.method == 'POST': - name = request.POST.get('name', '') - asset_select = request.POST.getlist('asset_select', []) - comment = request.POST.get('comment', '') - - try: - if not name: - emg = u'组名不能为空' - raise ServerError(emg) - - asset_group_test = get_object(AssetGroup, name=name) - if asset_group_test: - emg = u"该组名 %s 已存在" % name - raise ServerError(emg) - - except ServerError: - pass - - else: - db_add_group(name=name, comment=comment, asset_select=asset_select) - smg = u"主机组 %s 添加成功" % name - - return my_render('jasset/group_add.html', locals(), request) - - -@require_role('admin') -def group_edit(request): - """ - Group edit view - 编辑资产组 - """ - header_title, path1, path2 = u'编辑主机组', u'资产管理', u'编辑主机组' - group_id = request.GET.get('id', '') - group = get_object(AssetGroup, id=group_id) - - asset_all = Asset.objects.all() - asset_select = Asset.objects.filter(group=group) - asset_no_select = [a for a in asset_all if a not in asset_select] - - if request.method == 'POST': - name = request.POST.get('name', '') - asset_select = request.POST.getlist('asset_select', []) - comment = request.POST.get('comment', '') - - try: - if not name: - emg = u'组名不能为空' - raise ServerError(emg) - - if group.name != name: - asset_group_test = get_object(AssetGroup, name=name) - if asset_group_test: - emg = u"该组名 %s 已存在" % name - raise ServerError(emg) - - except ServerError: - pass - - else: - group.asset_set.clear() - db_update_group(id=group_id, name=name, comment=comment, asset_select=asset_select) - smg = u"主机组 %s 添加成功" % name - - return HttpResponseRedirect(reverse('asset_group_list')) - - return my_render('jasset/group_edit.html', locals(), request) - - -@require_role('admin') -def group_list(request): - """ - list asset group - 列出资产组 - """ - header_title, path1, path2 = u'查看资产组', u'资产管理', u'查看资产组' - keyword = request.GET.get('keyword', '') - asset_group_list = AssetGroup.objects.all() - group_id = request.GET.get('id') - if group_id: - asset_group_list = asset_group_list.filter(id=group_id) - if keyword: - asset_group_list = asset_group_list.filter(Q(name__contains=keyword) | Q(comment__contains=keyword)) - - asset_group_list, p, asset_groups, page_range, current_page, show_first, show_end = pages(asset_group_list, request) - return my_render('jasset/group_list.html', locals(), request) - - -@require_role('admin') -def group_del(request): - """ - Group delete view - 删除主机组 - """ - group_ids = request.GET.get('id', '') - group_id_list = group_ids.split(',') - - for group_id in group_id_list: - AssetGroup.objects.filter(id=group_id).delete() - - return HttpResponse(u'删除成功') - - -@require_role('admin') -def asset_add(request): - """ - Asset add view - 添加资产 - """ - header_title, path1, path2 = u'添加资产', u'资产管理', u'添加资产' - asset_group_all = AssetGroup.objects.all() - af = AssetForm() - default_setting = get_object(Setting, name='default') - default_port = default_setting.field2 if default_setting else '' - if request.method == 'POST': - af_post = AssetForm(request.POST) - ip = request.POST.get('ip', '') - hostname = request.POST.get('hostname', '') - - is_active = True if request.POST.get('is_active') == '1' else False - use_default_auth = request.POST.get('use_default_auth', '') - try: - if Asset.objects.filter(hostname=unicode(hostname)): - error = u'该主机名 %s 已存在!' % hostname - raise ServerError(error) - if len(hostname) > 54: - error = u"主机名长度不能超过53位!" - raise ServerError(error) - except ServerError: - pass - else: - if af_post.is_valid(): - asset_save = af_post.save(commit=False) - if not use_default_auth: - password = request.POST.get('password', '') - password_encode = CRYPTOR.encrypt(password) - asset_save.password = password_encode - if not ip: - asset_save.ip = hostname - asset_save.is_active = True if is_active else False - asset_save.save() - af_post.save_m2m() - - msg = u'主机 %s 添加成功' % hostname - else: - esg = u'主机 %s 添加失败' % hostname - - return my_render('jasset/asset_add.html', locals(), request) - - -@require_role('admin') -def asset_add_batch(request): - header_title, path1, path2 = u'添加资产', u'资产管理', u'批量添加' - return my_render('jasset/asset_add_batch.html', locals(), request) - - -@require_role('admin') -def asset_del(request): - """ - del a asset - 删除主机 - """ - asset_id = request.GET.get('id', '') - if asset_id: - Asset.objects.filter(id=asset_id).delete() - - if request.method == 'POST': - asset_batch = request.GET.get('arg', '') - asset_id_all = str(request.POST.get('asset_id_all', '')) - - if asset_batch: - for asset_id in asset_id_all.split(','): - asset = get_object(Asset, id=asset_id) - asset.delete() - - return HttpResponse(u'删除成功') - - -@require_role(role='super') -def asset_edit(request): - """ - edit a asset - 修改主机 - """ - header_title, path1, path2 = u'修改资产', u'资产管理', u'修改资产' - - asset_id = request.GET.get('id', '') - username = request.user.username - asset = get_object(Asset, id=asset_id) - if asset: - password_old = asset.password - # asset_old = copy_model_instance(asset) - af = AssetForm(instance=asset) - if request.method == 'POST': - af_post = AssetForm(request.POST, instance=asset) - ip = request.POST.get('ip', '') - hostname = request.POST.get('hostname', '') - password = request.POST.get('password', '') - is_active = True if request.POST.get('is_active') == '1' else False - use_default_auth = request.POST.get('use_default_auth', '') - try: - asset_test = get_object(Asset, hostname=hostname) - if asset_test and asset_id != unicode(asset_test.id): - emg = u'该主机名 %s 已存在!' % hostname - raise ServerError(emg) - if len(hostname) > 54: - emg = u'主机名长度不能超过54位!' - raise ServerError(emg) - else: - if af_post.is_valid(): - af_save = af_post.save(commit=False) - if use_default_auth: - af_save.username = '' - af_save.password = '' - # af_save.port = None - else: - if password: - password_encode = CRYPTOR.encrypt(password) - af_save.password = password_encode - else: - af_save.password = password_old - af_save.is_active = True if is_active else False - af_save.save() - af_post.save_m2m() - # asset_new = get_object(Asset, id=asset_id) - # asset_diff_one(asset_old, asset_new) - info = asset_diff(af_post.__dict__.get('initial'), request.POST) - db_asset_alert(asset, username, info) - - smg = u'主机 %s 修改成功' % ip - else: - emg = u'主机 %s 修改失败' % ip - raise ServerError(emg) - except ServerError as e: - error = e.message - return my_render('jasset/asset_edit.html', locals(), request) - return HttpResponseRedirect(reverse('asset_detail')+'?id=%s' % asset_id) - - return my_render('jasset/asset_edit.html', locals(), request) - - -@require_role('user') -def asset_list(request): - """ - asset list view - """ - header_title, path1, path2 = u'查看资产', u'资产管理', u'查看资产' - username = request.user.username - user_perm = request.session['role_id'] - idc_all = IDC.objects.filter() - asset_group_all = AssetGroup.objects.all() - asset_types = ASSET_TYPE - asset_status = ASSET_STATUS - idc_name = request.GET.get('idc', '') - group_name = request.GET.get('group', '') - asset_type = request.GET.get('asset_type', '') - status = request.GET.get('status', '') - keyword = request.GET.get('keyword', '') - export = request.GET.get("export", False) - group_id = request.GET.get("group_id", '') - idc_id = request.GET.get("idc_id", '') - asset_id_all = request.GET.getlist("id", '') - - if group_id: - group = get_object(AssetGroup, id=group_id) - if group: - asset_find = Asset.objects.filter(group=group) - elif idc_id: - idc = get_object(IDC, id=idc_id) - if idc: - asset_find = Asset.objects.filter(idc=idc) - else: - if user_perm != 0: - asset_find = Asset.objects.all() - else: - asset_id_all = [] - user = get_object(User, username=username) - asset_perm = get_group_user_perm(user) if user else {'asset': ''} - user_asset_perm = asset_perm['asset'].keys() - for asset in user_asset_perm: - asset_id_all.append(asset.id) - asset_find = Asset.objects.filter(pk__in=asset_id_all) - asset_group_all = list(asset_perm['asset_group']) - - if idc_name: - asset_find = asset_find.filter(idc__name__contains=idc_name) - - if group_name: - asset_find = asset_find.filter(group__name__contains=group_name) - - if asset_type: - asset_find = asset_find.filter(asset_type__contains=asset_type) - - if status: - asset_find = asset_find.filter(status__contains=status) - - if keyword: - asset_find = asset_find.filter( - Q(hostname__contains=keyword) | - Q(other_ip__contains=keyword) | - Q(ip__contains=keyword) | - Q(remote_ip__contains=keyword) | - Q(comment__contains=keyword) | - Q(username__contains=keyword) | - Q(group__name__contains=keyword) | - Q(cpu__contains=keyword) | - Q(memory__contains=keyword) | - Q(disk__contains=keyword) | - Q(brand__contains=keyword) | - Q(cabinet__contains=keyword) | - Q(sn__contains=keyword) | - Q(system_type__contains=keyword) | - Q(system_version__contains=keyword)) - - if export: - if asset_id_all: - asset_find = [] - for asset_id in asset_id_all: - asset = get_object(Asset, id=asset_id) - if asset: - asset_find.append(asset) - s = write_excel(asset_find) - if s[0]: - file_name = s[1] - smg = u'excel文件已生成,请点击下载!' - return my_render('jasset/asset_excel_download.html', locals(), request) - assets_list, p, assets, page_range, current_page, show_first, show_end = pages(asset_find, request) - if user_perm != 0: - return my_render('jasset/asset_list.html', locals(), request) - else: - return my_render('jasset/asset_cu_list.html', locals(), request) - - -@require_role('admin') -def asset_edit_batch(request): - af = AssetForm() - name = request.user.username - asset_group_all = AssetGroup.objects.all() - - if request.method == 'POST': - env = request.POST.get('env', '') - idc_id = request.POST.get('idc', '') - port = request.POST.get('port', '') - use_default_auth = request.POST.get('use_default_auth', '') - username = request.POST.get('username', '') - password = request.POST.get('password', '') - group = request.POST.getlist('group', []) - cabinet = request.POST.get('cabinet', '') - comment = request.POST.get('comment', '') - asset_id_all = unicode(request.GET.get('asset_id_all', '')) - asset_id_all = asset_id_all.split(',') - for asset_id in asset_id_all: - alert_list = [] - asset = get_object(Asset, id=asset_id) - if asset: - if env: - if asset.env != env: - asset.env = env - alert_list.append([u'运行环境', asset.env, env]) - if idc_id: - idc = get_object(IDC, id=idc_id) - name_old = asset.idc.name if asset.idc else u'' - if idc and idc.name != name_old: - asset.idc = idc - alert_list.append([u'机房', name_old, idc.name]) - if port: - if unicode(asset.port) != port: - asset.port = port - alert_list.append([u'端口号', asset.port, port]) - - if use_default_auth: - if use_default_auth == 'default': - asset.use_default_auth = 1 - asset.username = '' - asset.password = '' - alert_list.append([u'使用默认管理账号', asset.use_default_auth, u'默认']) - elif use_default_auth == 'user_passwd': - asset.use_default_auth = 0 - asset.username = username - password_encode = CRYPTOR.encrypt(password) - asset.password = password_encode - alert_list.append([u'使用默认管理账号', asset.use_default_auth, username]) - if group: - group_new, group_old, group_new_name, group_old_name = [], asset.group.all(), [], [] - for group_id in group: - g = get_object(AssetGroup, id=group_id) - if g: - group_new.append(g) - if not set(group_new) < set(group_old): - group_instance = list(set(group_new) | set(group_old)) - for g in group_instance: - group_new_name.append(g.name) - for g in group_old: - group_old_name.append(g.name) - asset.group = group_instance - alert_list.append([u'主机组', ','.join(group_old_name), ','.join(group_new_name)]) - if cabinet: - if asset.cabinet != cabinet: - asset.cabinet = cabinet - alert_list.append([u'机柜号', asset.cabinet, cabinet]) - if comment: - if asset.comment != comment: - asset.comment = comment - alert_list.append([u'备注', asset.comment, comment]) - asset.save() - - if alert_list: - recode_name = unicode(name) + ' - ' + u'批量' - AssetRecord.objects.create(asset=asset, username=recode_name, content=alert_list) - return my_render('jasset/asset_update_status.html', locals(), request) - - return my_render('jasset/asset_edit_batch.html', locals(), request) - - -@require_role('admin') -def asset_detail(request): - """ - Asset detail view - """ - header_title, path1, path2 = u'主机详细信息', u'资产管理', u'主机详情' - asset_id = request.GET.get('id', '') - asset = get_object(Asset, id=asset_id) - perm_info = get_group_asset_perm(asset) - log = Log.objects.filter(host=asset.hostname) - if perm_info: - user_perm = [] - for perm, value in perm_info.items(): - if perm == 'user': - for user, role_dic in value.items(): - user_perm.append([user, role_dic.get('role', '')]) - elif perm == 'user_group' or perm == 'rule': - user_group_perm = value - print perm_info - - asset_record = AssetRecord.objects.filter(asset=asset).order_by('-alert_time') - - return my_render('jasset/asset_detail.html', locals(), request) - - -@require_role('admin') -def asset_update(request): - """ - Asset update host info via ansible view - """ - asset_id = request.GET.get('id', '') - asset = get_object(Asset, id=asset_id) - name = request.user.username - if not asset: - return HttpResponseRedirect(reverse('asset_detail')+'?id=%s' % asset_id) - else: - asset_ansible_update([asset], name) - return HttpResponseRedirect(reverse('asset_detail')+'?id=%s' % asset_id) - - -@require_role('admin') -def asset_update_batch(request): - if request.method == 'POST': - arg = request.GET.get('arg', '') - name = unicode(request.user.username) + ' - ' + u'自动更新' - if arg == 'all': - asset_list = Asset.objects.all() - else: - asset_list = [] - asset_id_all = unicode(request.POST.get('asset_id_all', '')) - asset_id_all = asset_id_all.split(',') - for asset_id in asset_id_all: - asset = get_object(Asset, id=asset_id) - if asset: - asset_list.append(asset) - asset_ansible_update(asset_list, name) - return HttpResponse(u'批量更新成功!') - return HttpResponse(u'批量更新成功!') - - -@require_role('admin') -def idc_add(request): - """ - IDC add view - """ - header_title, path1, path2 = u'添加IDC', u'资产管理', u'添加IDC' - if request.method == 'POST': - idc_form = IdcForm(request.POST) - if idc_form.is_valid(): - idc_name = idc_form.cleaned_data['name'] - - if IDC.objects.filter(name=idc_name): - emg = u'添加失败, 此IDC %s 已存在!' % idc_name - return my_render('jasset/idc_add.html', locals(), request) - else: - idc_form.save() - smg = u'IDC: %s添加成功' % idc_name - return HttpResponseRedirect(reverse('idc_list')) - else: - idc_form = IdcForm() - return my_render('jasset/idc_add.html', locals(), request) - - -@require_role('admin') -def idc_list(request): - """ - IDC list view - """ - header_title, path1, path2 = u'查看IDC', u'资产管理', u'查看IDC' - posts = IDC.objects.all() - keyword = request.GET.get('keyword', '') - if keyword: - posts = IDC.objects.filter(Q(name__contains=keyword) | Q(comment__contains=keyword)) - else: - posts = IDC.objects.exclude(name='ALL').order_by('id') - contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) - return my_render('jasset/idc_list.html', locals(), request) - - -@require_role('admin') -def idc_edit(request): - """ - IDC edit view - """ - header_title, path1, path2 = u'编辑IDC', u'资产管理', u'编辑IDC' - idc_id = request.GET.get('id', '') - idc = get_object(IDC, id=idc_id) - if request.method == 'POST': - idc_form = IdcForm(request.POST, instance=idc) - if idc_form.is_valid(): - idc_form.save() - return HttpResponseRedirect(reverse('idc_list')) - else: - idc_form = IdcForm(instance=idc) - return my_render('jasset/idc_edit.html', locals(), request) - - -@require_role('admin') -def idc_del(request): - """ - IDC delete view - """ - idc_ids = request.GET.get('id', '') - idc_id_list = idc_ids.split(',') - - for idc_id in idc_id_list: - IDC.objects.filter(id=idc_id).delete() - - return HttpResponseRedirect(reverse('idc_list')) - - -@require_role('admin') -def asset_upload(request): - """ - Upload asset excel file view - """ - if request.method == 'POST': - excel_file = request.FILES.get('file_name', '') - ret = excel_to_db(excel_file) - if ret: - smg = u'批量添加成功' - else: - emg = u'批量添加失败,请检查格式.' - return my_render('jasset/asset_add_batch.html', locals(), request) diff --git a/jlog/__init__.py b/jlog/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/jlog/admin.py b/jlog/admin.py deleted file mode 100644 index 8c38f3f3d..000000000 --- a/jlog/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/jlog/log_api.py b/jlog/log_api.py deleted file mode 100644 index 505a778c8..000000000 --- a/jlog/log_api.py +++ /dev/null @@ -1,121 +0,0 @@ -# coding: utf-8 - - -from argparse import ArgumentParser, FileType -from contextlib import closing -from io import open as copen -from json import dumps -from math import ceil -import datetime -import time -import re -import os -from os.path import basename, dirname, exists, join -from struct import unpack -from subprocess import Popen -from sys import platform, prefix, stderr -from tempfile import NamedTemporaryFile - -from jinja2 import FileSystemLoader, Template -from jinja2.environment import Environment - -from jumpserver.api import BASE_DIR, logger -from jlog.models import Log - - -DEFAULT_TEMPLATE = join(BASE_DIR, 'templates', 'jlog', 'static.jinja2') -rz_pat = re.compile(r'\x18B\w+\r\x8a(\x11)?') - - -def escapeString(string): - string = rz_pat.sub('', string) - try: - string = string.encode('unicode_escape').decode('utf-8', 'ignore') - except (UnicodeEncodeError, UnicodeDecodeError): - string = string.decode('utf-8', 'ignore') - string = string.replace("'", "\\'") - string = '\'' + string + '\'' - return string - - -def getTiming(timef): - timing = None - with closing(timef): - timing = [l.strip().split(' ') for l in timef] - timing = [(int(ceil(float(r[0]) * 1000)), int(r[1])) for r in timing] - return timing - - -def scriptToJSON(scriptf, timing=None): - ret = [] - - with closing(scriptf): - scriptf.readline() # ignore first header line from script file - offset = 0 - for t in timing: - dt = scriptf.read(t[1]) - data = escapeString(dt) - # print ('###### (%s, %s)' % (t[1], repr(data))) - offset += t[0] - ret.append((data, offset)) - return dumps(ret) - - -def renderTemplate(script_path, time_file_path, dimensions=(24, 80), templatename=DEFAULT_TEMPLATE): - with copen(script_path, encoding='utf-8', errors='replace', newline='\r\n') as scriptf: - # with open(script_path) as scriptf: - with open(time_file_path) as timef: - timing = getTiming(timef) - json = scriptToJSON(scriptf, timing) - - fsl = FileSystemLoader(dirname(templatename), 'utf-8') - e = Environment() - e.loader = fsl - - templatename = basename(templatename) - rendered = e.get_template(templatename).render(json=json, - dimensions=dimensions) - - return rendered - - -def renderJSON(script_path, time_file_path): - with copen(script_path, encoding='utf-8', errors='replace', newline='\r\n') as scriptf: - # with open(script_path) as scriptf: - with open(time_file_path) as timef: - timing = getTiming(timef) - ret = {} - with closing(scriptf): - scriptf.readline() # ignore first header line from script file - offset = 0 - for t in timing: - dt = scriptf.read(t[1]) - offset += t[0] - ret[str(offset/float(1000))] = dt.decode('utf-8', 'replace') - return dumps(ret) - -def kill_invalid_connection(): - unfinished_logs = Log.objects.filter(is_finished=False) - now = datetime.datetime.now() - now_timestamp = int(time.mktime(now.timetuple())) - - for log in unfinished_logs: - try: - log_file_mtime = int(os.stat('%s.log' % log.log_path).st_mtime) - except OSError: - log_file_mtime = 0 - - if (now_timestamp - log_file_mtime) > 3600: - if log.login_type == 'ssh': - try: - os.kill(int(log.pid), 9) - except OSError: - pass - elif (now - log.start_time).days < 1: - continue - - log.is_finished = True - log.end_time = now - log.save() - logger.warn('kill log %s' % log.log_path) - diff --git a/jlog/models.py b/jlog/models.py deleted file mode 100644 index 8982317b5..000000000 --- a/jlog/models.py +++ /dev/null @@ -1,75 +0,0 @@ -from django.db import models -from juser.models import User -import time - - -class Log(models.Model): - user = models.CharField(max_length=20, null=True) - host = models.CharField(max_length=200, null=True) - remote_ip = models.CharField(max_length=100) - login_type = models.CharField(max_length=100) - log_path = models.CharField(max_length=100) - start_time = models.DateTimeField(null=True) - pid = models.IntegerField() - is_finished = models.BooleanField(default=False) - end_time = models.DateTimeField(null=True) - filename = models.CharField(max_length=40) - ''' - add by liuzheng - ''' - # userMM = models.ManyToManyField(User) - # logPath = models.TextField() - # filename = models.CharField(max_length=40) - # logPWD = models.TextField() # log zip file's - # nick = models.TextField(null=True) # log's nick name - # log = models.TextField(null=True) - # history = models.TextField(null=True) - # timestamp = models.IntegerField(default=int(time.time())) - # datetimestamp = models.DateTimeField(auto_now_add=True) - - - def __unicode__(self): - return self.log_path - - -class Alert(models.Model): - msg = models.CharField(max_length=20) - time = models.DateTimeField(null=True) - is_finished = models.BigIntegerField(default=False) - - -class TtyLog(models.Model): - log = models.ForeignKey(Log) - datetime = models.DateTimeField(auto_now=True) - cmd = models.CharField(max_length=200) - - -class ExecLog(models.Model): - user = models.CharField(max_length=100) - host = models.TextField() - cmd = models.TextField() - remote_ip = models.CharField(max_length=100) - result = models.TextField(default='') - datetime = models.DateTimeField(auto_now=True) - - -class FileLog(models.Model): - user = models.CharField(max_length=100) - host = models.TextField() - filename = models.TextField() - type = models.CharField(max_length=20) - remote_ip = models.CharField(max_length=100) - result = models.TextField(default='') - datetime = models.DateTimeField(auto_now=True) - - -class TermLog(models.Model): - user = models.ManyToManyField(User) - logPath = models.TextField() - filename = models.CharField(max_length=40) - logPWD = models.TextField() # log zip file's - nick = models.TextField(null=True) # log's nick name - log = models.TextField(null=True) - history = models.TextField(null=True) - timestamp = models.IntegerField(default=int(time.time())) - datetimestamp = models.DateTimeField(auto_now_add=True) diff --git a/jlog/tests.py b/jlog/tests.py deleted file mode 100644 index 7ce503c2d..000000000 --- a/jlog/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/jlog/urls.py b/jlog/urls.py deleted file mode 100644 index 0790c9307..000000000 --- a/jlog/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -# coding:utf-8 -from django.conf.urls import patterns, include, url -from jlog.views import * - -urlpatterns = patterns('', - url(r'^list/(\w+)/$', log_list, name='log_list'), - url(r'^detail/(\w+)/$', log_detail, name='log_detail'), - url(r'^history/$', log_history, name='log_history'), - url(r'^log_kill/', log_kill, name='log_kill'), - url(r'^record/$', log_record, name='log_record'), - ) \ No newline at end of file diff --git a/jlog/views.py b/jlog/views.py deleted file mode 100644 index 5efd2bf9f..000000000 --- a/jlog/views.py +++ /dev/null @@ -1,379 +0,0 @@ -# coding:utf-8 -from django.db.models import Q -from django.template import RequestContext -from django.shortcuts import render_to_response, render -from jumpserver.api import * -from jperm.perm_api import user_have_perm -from django.http import HttpResponseNotFound -from jlog.log_api import renderJSON - -from jlog.models import Log, ExecLog, FileLog, TermLog -from jumpserver.settings import LOG_DIR -import zipfile -import json -import pyte - - -@require_role('admin') -def log_list(request, offset): - """ 显示日志 """ - header_title, path1 = u'审计', u'操作审计' - date_seven_day = request.GET.get('start', '') - date_now_str = request.GET.get('end', '') - username_list = request.GET.getlist('username', []) - host_list = request.GET.getlist('host', []) - cmd = request.GET.get('cmd', '') - - if offset == 'online': - keyword = request.GET.get('keyword', '') - posts = Log.objects.filter(is_finished=False).order_by('-start_time') - if keyword: - posts = posts.filter(Q(user__icontains=keyword) | Q(host__icontains=keyword) | - Q(login_type__icontains=keyword)) - - elif offset == 'exec': - posts = ExecLog.objects.all().order_by('-id') - keyword = request.GET.get('keyword', '') - if keyword: - posts = posts.filter(Q(user__icontains=keyword) | Q(host__icontains=keyword) | Q(cmd__icontains=keyword)) - elif offset == 'file': - posts = FileLog.objects.all().order_by('-id') - keyword = request.GET.get('keyword', '') - if keyword: - posts = posts.filter( - Q(user__icontains=keyword) | Q(host__icontains=keyword) | Q(filename__icontains=keyword)) - else: - posts = Log.objects.filter(is_finished=True).order_by('-start_time') - username_all = set([log.user for log in Log.objects.all()]) - ip_all = set([log.host for log in Log.objects.all()]) - - if date_seven_day and date_now_str: - datetime_start = datetime.datetime.strptime(date_seven_day + ' 00:00:01', '%m/%d/%Y %H:%M:%S') - datetime_end = datetime.datetime.strptime(date_now_str + ' 23:59:59', '%m/%d/%Y %H:%M:%S') - posts = posts.filter(start_time__gte=datetime_start).filter(start_time__lte=datetime_end) - - if username_list: - posts = posts.filter(user__in=username_list) - - if host_list: - posts = posts.filter(host__in=host_list) - - if cmd: - log_id_list = set([log.log_id for log in TtyLog.objects.filter(cmd__contains=cmd)]) - posts = posts.filter(id__in=log_id_list) - - if not date_seven_day: - date_now = datetime.datetime.now() - date_now_str = date_now.strftime('%m/%d/%Y') - date_seven_day = (date_now + datetime.timedelta(days=-7)).strftime('%m/%d/%Y') - - contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) - - session_id = request.session.session_key - return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request)) - - -@require_role('admin') -def log_detail(request): - return my_render('jlog/exec_detail.html', locals(), request) - - -@require_role('admin') -def log_kill(request): - """ 杀掉connect进程 """ - pid = request.GET.get('id', '') - log = Log.objects.filter(pid=pid) - if log: - log = log[0] - try: - os.kill(int(pid), 9) - except OSError: - pass - Log.objects.filter(pid=pid).update(is_finished=1, end_time=datetime.datetime.now()) - return render_to_response('jlog/log_offline.html', locals(), context_instance=RequestContext(request)) - else: - return HttpResponseNotFound(u'没有此进程!') - - -@require_role('admin') -def log_history(request): - """ 命令历史记录 """ - log_id = request.GET.get('id', 0) - log = Log.objects.filter(id=log_id) - if log: - log = log[0] - tty_logs = log.ttylog_set.all() - - if tty_logs: - content = '' - for tty_log in tty_logs: - content += '%s: %s\n' % (tty_log.datetime.strftime('%Y-%m-%d %H:%M:%S'), tty_log.cmd) - return HttpResponse(content) - - return HttpResponse('无日志记录!') - - -# @require_role('admin') -# def log_record(request): -# log_id = request.GET.get('id', 0) -# log = Log.objects.filter(id=int(log_id)) -# if log: -# log = log[0] -# log_file = log.log_path + '.log' -# log_time = log.log_path + '.time' -# if os.path.isfile(log_file) and os.path.isfile(log_time): -# content = renderTemplate(log_file, log_time) -# return HttpResponse(content) -# else: -# return HttpResponse('无日志记录!') -@require_role('admin') -def log_record(request): - """ - Author: liuzheng712@gmail.com - """ - if request.method == "GET": - return render(request, 'jlog/record.html') - elif request.method == "POST": - log_id = request.REQUEST.get('id', None) - if log_id: - TermL = TermLogRecorder(request.user) - log = Log.objects.get(id=int(log_id)) - if len(log.filename) == 0: - log_file = log.log_path + '.log' - log_time = log.log_path + '.time' - if os.path.isfile(log_file) and os.path.isfile(log_time): - content = renderJSON(log_file, log_time) - return HttpResponse(content) - else: - return HttpResponse(TermL.load_full_log(filename=log.filename)) - else: - return HttpResponse("ERROR") - else: - return HttpResponse("ERROR METHOD!") - - -@require_role('admin') -def log_detail(request, offset): - log_id = request.GET.get('id') - if offset == 'exec': - log = get_object(ExecLog, id=log_id) - assets_hostname = log.host.split(' ') - try: - result = eval(str(log.result)) - except (SyntaxError, NameError): - result = {} - return my_render('jlog/exec_detail.html', locals(), request) - elif offset == 'file': - log = get_object(FileLog, id=log_id) - assets_hostname = log.host.split(' ') - file_list = log.filename.split(' ') - try: - result = eval(str(log.result)) - except (SyntaxError, NameError): - result = {} - return my_render('jlog/file_detail.html', locals(), request) - - -class TermLogRecorder(object): - """ - TermLogRecorder - --- - Author: liuzheng - This class is use for record the terminal output log. - self.commands is pure commands list, it will have empty item '' because in vi/vim model , I made it log noting. - self.CMD is the command with timestamp, like this {'1458723794.88': u'ls', '1458723799.82': u'tree'}. - self.log is the all output with delta time log. - self.vim_pattern is the regexp for check vi/vim/fg model. - Usage: - recorder = TermLogRecorder(user=UserObject) # or recorder = TermLogRecorder(uid=UserID) - recoder.write(messages) - recoder.save() # save all log into database - # The following methods all have `user`,`uid`,args. Same as __init__ - list = recoder.list() # will give a object about this user's all log info - recoder.load_full_log(filemane) # will get full log - recoder.load_history(filename) # will only get the command history list - recoder.share_to(filename,user=UserObject) # or recoder.share_to(filename,uid=UserID). will share this commands to someone - recoder.unshare_to(filename,user=UserObject) # or recoder.unshare_to(filename,uid=UserID). will unshare this commands to someone - recoder.setid(id) # registered this term with an id, for monitor - """ - loglist = dict() - - def __init__(self, user=None, uid=None): - self.log = {} - self.id = 0 - if isinstance(user, User): - self.user = user - elif uid: - self.user = User.objects.get(id=uid) - else: - self.user = None - self.recoderStartTime = time.time() - self.__init_screen_stream() - self.recoder = False - self.commands = [] - self._lists = None - self.file = None - self.filename = None - self._data = None - self.vim_pattern = re.compile(r'\W?vi[m]?\s.* | \W?fg\s.*', re.X) - self._in_vim = False - self.CMD = {} - - def __init_screen_stream(self): - """ - Initializing the virtual screen and the character stream - """ - self._stream = pyte.ByteStream() - self._screen = pyte.Screen(100, 35) - self._stream.attach(self._screen) - - def _command(self): - for i in self._screen.display: - if i.strip().__len__() > 0: - self.commands.append(i.strip()) - if not i.strip() == '': - self.CMD[str(time.time())] = self.commands[-1] - self._screen.reset() - - def setid(self, id): - self.id = id - TermLogRecorder.loglist[str(id)] = [self] - - def write(self, msg): - """ - if self.recoder and (not self._in_vim): - if self.commands.__len__() == 0: - self._stream.feed(msg) - elif not self.vim_pattern.search(self.commands[-1]): - self._stream.feed(msg) - else: - self._in_vim = True - self._command() - else: - if self._in_vim: - if re.compile(r'\[\?1049', re.X).search(msg.decode('utf-8', 'replace')): - self._in_vim = False - self.commands.append('') - self._screen.reset() - else: - self._command() - """ - try: - self.write_message(msg) - except: - pass - # print "<<<<<<<<<<<<<<<<" - # print self.commands - # print self.CMD - # print ">>>>>>>>>>>>>>>>" - self.log[str(time.time() - self.recoderStartTime)] = msg.decode('utf-8', 'replace') - - def save(self, path=LOG_DIR): - date = datetime.datetime.now().strftime('%Y%m%d') - filename = str(uuid.uuid4()) - self.filename = filename - filepath = os.path.join(path, 'tty', date, filename + '.zip') - if not os.path.isdir(os.path.join(path, 'tty', date)): - mkdir(os.path.join(path, 'tty', date), mode=777) - while os.path.isfile(filepath): - filename = str(uuid.uuid4()) - filepath = os.path.join(path, 'tty', date, filename + '.zip') - password = str(uuid.uuid4()) - try: - zf = zipfile.ZipFile(filepath, 'w', zipfile.ZIP_DEFLATED) - zf.setpassword(password) - zf.writestr(filename, json.dumps(self.log)) - zf.close() - record = TermLog.objects.create(logPath=filepath, logPWD=password, filename=filename, - history=json.dumps(self.CMD), timestamp=int(self.recoderStartTime)) - if self.user: - record.user.add(self.user) - except: - record = TermLog.objects.create(logPath='locale', logPWD=password, log=json.dumps(self.log), - filename=filename, history=json.dumps(self.CMD), - timestamp=int(self.recoderStartTime)) - if self.user: - record.user.add(self.user) - try: - del TermLogRecorder.loglist[str(self.id)] - except KeyError: - pass - - def list(self, user=None, uid=None): - tmp = [] - if isinstance(user, User): - user = user - elif uid: - user = User.objects.get(id=uid) - else: - user = self.user - if user: - self._lists = TermLog.objects.filter(user=user.id) - for i in self._lists.all(): - tmp.append( - {'filename': i.filename, 'locale': i.logPath == 'locale', 'nick': i.nick, 'timestamp': i.timestamp, - 'date': i.datetimestamp}) - return tmp - - def load_full_log(self, filename, user=None, uid=None): - if isinstance(user, User): - user = user - elif uid: - user = User.objects.get(id=uid) - else: - user = self.user - if user: - if self._lists: - self.file = self._lists.get(filename=filename) - else: - self.file = TermLog.objects.get(filename=filename) - if self.file.logPath == 'locale': - return self.file.log - else: - try: - zf = zipfile.ZipFile(self.file.logPath, 'r', zipfile.ZIP_DEFLATED) - zf.setpassword(self.file.logPWD) - self._data = zf.read(zf.namelist()[0]) - return self._data - except KeyError: - return 'ERROR: Did not find %s file' % filename - return 'ERROR User(None)' - - def load_history(self, filename, user=None, uid=None): - if isinstance(user, User): - user = user - elif uid: - user = User.objects.get(id=uid) - else: - user = self.user - if user: - if self._lists: - self.file = self._lists.get(filename=filename) - else: - self.file = TermLog.objects.get(filename=filename) - return self.file.history - return 'ERROR User(None)' - - def share_to(self, filename, user=None, uid=None): - if isinstance(user, User): - user = user - elif uid: - user = User.objects.get(id=uid) - else: - pass - if user: - TermLog.objects.get(filename=filename).user.add(user) - return True - return False - - def unshare_to(self, filename, user=None, uid=None): - if isinstance(user, User): - user = user - elif uid: - user = User.objects.get(id=uid) - else: - pass - if user: - TermLog.objects.get(filename=filename).user.remove(user) - return True - return False diff --git a/jperm/README.md b/jperm/README.md deleted file mode 100644 index a5a7e026c..000000000 --- a/jperm/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Jperm App - ---- - -### 模块 ansible_api - -> 使用说明 - -+ 依赖rpm安装包: ansible、 sshpass -+ 依赖pip安装包: passlib -+ 关于ansible配置: 需要启用配置文件(/etc/ansible/ansible.cfg)的 host_key_checking = False - diff --git a/jperm/__init__.py b/jperm/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/jperm/admin.py b/jperm/admin.py deleted file mode 100644 index 8c38f3f3d..000000000 --- a/jperm/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/jperm/ansible_api.py b/jperm/ansible_api.py deleted file mode 100644 index b51b29c61..000000000 --- a/jperm/ansible_api.py +++ /dev/null @@ -1,523 +0,0 @@ -# -*- coding: utf-8 -*- - - -from tempfile import NamedTemporaryFile -import os.path - -from ansible.inventory.group import Group -from ansible.inventory.host import Host -from ansible.inventory import Inventory -from ansible.runner import Runner -from ansible.playbook import PlayBook -from ansible import callbacks -from ansible import utils -import ansible.constants as C -from passlib.hash import sha512_crypt -from django.template.loader import get_template -from django.template import Context - - -from jumpserver.api import logger - - -API_DIR = os.path.dirname(os.path.abspath(__file__)) -ANSIBLE_DIR = os.path.join(API_DIR, 'playbooks') -C.HOST_KEY_CHECKING = False - - -class AnsibleError(StandardError): - """ - the base AnsibleError which contains error(required), - data(optional) and message(optional). - 存储所有Ansible 异常对象 - """ - def __init__(self, error, data='', message=''): - super(AnsibleError, self).__init__(message) - self.error = error - self.data = data - self.message = message - - -class CommandValueError(AnsibleError): - """ - indicate the input value has error or invalid. - the data specifies the error field of input form. - 输入不合法 异常对象 - """ - def __init__(self, field, message=''): - super(CommandValueError, self).__init__('value:invalid', field, message) - - -class MyInventory(Inventory): - """ - this is my ansible inventory object. - """ - def __init__(self, resource): - """ - resource的数据格式是一个列表字典,比如 - { - "group1": { - "hosts": [{"hostname": "10.10.10.10", "port": "22", "username": "test", "password": "mypass"}, ...], - "vars": {"var1": value1, "var2": value2, ...} - } - } - - 如果你只传入1个列表,这默认该列表内的所有主机属于my_group组,比如 - [{"hostname": "10.10.10.10", "port": "22", "username": "test", "password": "mypass"}, ...] - """ - self.resource = resource - self.inventory = Inventory(host_list=[]) - self.gen_inventory() - - def my_add_group(self, hosts, groupname, groupvars=None): - """ - add hosts to a group - """ - my_group = Group(name=groupname) - - # if group variables exists, add them to group - if groupvars: - for key, value in groupvars.iteritems(): - my_group.set_variable(key, value) - - # add hosts to group - for host in hosts: - # set connection variables - hostname = host.get("hostname") - hostip = host.get('ip', hostname) - hostport = host.get("port") - username = host.get("username") - password = host.get("password") - ssh_key = host.get("ssh_key") - my_host = Host(name=hostname, port=hostport) - my_host.set_variable('ansible_ssh_host', hostip) - my_host.set_variable('ansible_ssh_port', hostport) - my_host.set_variable('ansible_ssh_user', username) - my_host.set_variable('ansible_ssh_pass', password) - my_host.set_variable('ansible_ssh_private_key_file', ssh_key) - - # set other variables - for key, value in host.iteritems(): - if key not in ["hostname", "port", "username", "password"]: - my_host.set_variable(key, value) - # add to group - my_group.add_host(my_host) - - self.inventory.add_group(my_group) - - def gen_inventory(self): - """ - add hosts to inventory. - """ - if isinstance(self.resource, list): - self.my_add_group(self.resource, 'default_group') - elif isinstance(self.resource, dict): - for groupname, hosts_and_vars in self.resource.iteritems(): - self.my_add_group(hosts_and_vars.get("hosts"), groupname, hosts_and_vars.get("vars")) - - -class MyRunner(MyInventory): - """ - This is a General object for parallel execute modules. - """ - def __init__(self, *args, **kwargs): - super(MyRunner, self).__init__(*args, **kwargs) - self.results_raw = {} - - def run(self, module_name='shell', module_args='', timeout=10, forks=10, pattern='*', - become=False, become_method='sudo', become_user='root', become_pass='', transport='paramiko'): - """ - run module from andible ad-hoc. - module_name: ansible module_name - module_args: ansible module args - """ - hoc = Runner(module_name=module_name, - module_args=module_args, - timeout=timeout, - inventory=self.inventory, - pattern=pattern, - forks=forks, - become=become, - become_method=become_method, - become_user=become_user, - become_pass=become_pass, - transport=transport - ) - self.results_raw = hoc.run() - logger.debug(self.results_raw) - return self.results_raw - - @property - def results(self): - """ - {'failed': {'localhost': ''}, 'ok': {'jumpserver': ''}} - """ - result = {'failed': {}, 'ok': {}} - dark = self.results_raw.get('dark') - contacted = self.results_raw.get('contacted') - if dark: - for host, info in dark.items(): - result['failed'][host] = info.get('msg') - - if contacted: - for host, info in contacted.items(): - if info.get('invocation').get('module_name') in ['raw', 'shell', 'command', 'script']: - if info.get('rc') == 0: - result['ok'][host] = info.get('stdout') + info.get('stderr') - else: - result['failed'][host] = info.get('stdout') + info.get('stderr') - else: - if info.get('failed'): - result['failed'][host] = info.get('msg') - else: - result['ok'][host] = info.get('changed') - return result - - -class Command(MyInventory): - """ - this is a command object for parallel execute command. - """ - def __init__(self, *args, **kwargs): - super(Command, self).__init__(*args, **kwargs) - self.results_raw = {} - - def run(self, command, module_name="command", timeout=10, forks=10, pattern=''): - """ - run command from andible ad-hoc. - command : 必须是一个需要执行的命令字符串, 比如 - 'uname -a' - """ - data = {} - - if module_name not in ["raw", "command", "shell"]: - raise CommandValueError("module_name", - "module_name must be of the 'raw, command, shell'") - hoc = Runner(module_name=module_name, - module_args=command, - timeout=timeout, - inventory=self.inventory, - pattern=pattern, - forks=forks, - ) - self.results_raw = hoc.run() - - @property - def result(self): - result = {} - for k, v in self.results_raw.items(): - if k == 'dark': - for host, info in v.items(): - result[host] = {'dark': info.get('msg')} - elif k == 'contacted': - for host, info in v.items(): - result[host] = {} - if info.get('stdout'): - result[host]['stdout'] = info.get('stdout') - elif info.get('stderr'): - result[host]['stderr'] = info.get('stderr') - return result - - @property - def state(self): - result = {} - if self.stdout: - result['ok'] = self.stdout - if self.stderr: - result['err'] = self.stderr - if self.dark: - result['dark'] = self.dark - return result - - @property - def exec_time(self): - """ - get the command execute time. - """ - result = {} - all = self.results_raw.get("contacted") - for key, value in all.iteritems(): - result[key] = { - "start": value.get("start"), - "end" : value.get("end"), - "delta": value.get("delta"),} - return result - - @property - def stdout(self): - """ - get the comamnd standard output. - """ - result = {} - all = self.results_raw.get("contacted") - for key, value in all.iteritems(): - result[key] = value.get("stdout") - return result - - @property - def stderr(self): - """ - get the command standard error. - """ - result = {} - all = self.results_raw.get("contacted") - for key, value in all.iteritems(): - if value.get("stderr") or value.get("warnings"): - result[key] = { - "stderr": value.get("stderr"), - "warnings": value.get("warnings"),} - return result - - @property - def dark(self): - """ - get the dark results. - """ - return self.results_raw.get("dark") - - -class MyTask(MyRunner): - """ - this is a tasks object for include the common command. - """ - def __init__(self, *args, **kwargs): - super(MyTask, self).__init__(*args, **kwargs) - - def push_key(self, user, key_path): - """ - push the ssh authorized key to target. - """ - module_args = 'user="%s" key="{{ lookup("file", "%s") }}" state=present' % (user, key_path) - self.run("authorized_key", module_args, become=True) - - return self.results - - def push_multi_key(self, **user_info): - """ - push multi key - :param user_info: - :return: - """ - ret_failed = [] - ret_success = [] - for user, key_path in user_info.iteritems(): - ret = self.push_key(user, key_path) - if ret.get("status") == "ok": - ret_success.append(ret) - if ret.get("status") == "failed": - ret_failed.append(ret) - - if ret_failed: - return {"status": "failed", "msg": ret_failed} - else: - return {"status": "success", "msg": ret_success} - - def del_key(self, user, key_path): - """ - push the ssh authorized key to target. - """ - if user == 'root': - return {"status": "failed", "msg": "root cann't be delete"} - module_args = 'user="%s" key="{{ lookup("file", "%s") }}" state="absent"' % (user, key_path) - self.run("authorized_key", module_args, become=True) - - return self.results - - def add_user(self, username, password=''): - """ - add a host user. - """ - - if password: - encrypt_pass = sha512_crypt.encrypt(password) - module_args = 'name=%s shell=/bin/bash password=%s' % (username, encrypt_pass) - else: - module_args = 'name=%s shell=/bin/bash' % username - - self.run("user", module_args, become=True) - - return self.results - - def add_multi_user(self, **user_info): - """ - add multi user - :param user_info: keyword args - {username: password} - :return: - """ - ret_success = [] - ret_failed = [] - for user, password in user_info.iteritems(): - ret = self.add_user(user, password) - if ret.get("status") == "ok": - ret_success.append(ret) - if ret.get("status") == "failed": - ret_failed.append(ret) - - if ret_failed: - return {"status": "failed", "msg": ret_failed} - else: - return {"status": "success", "msg": ret_success} - - def del_user(self, username): - """ - delete a host user. - """ - if username == 'root': - return {"status": "failed", "msg": "root cann't be delete"} - module_args = 'name=%s state=absent remove=yes move_home=yes force=yes' % username - self.run("user", module_args, become=True) - return self.results - - def del_user_sudo(self, username): - """ - delete a role sudo item - :param username: - :return: - """ - if username == 'root': - return {"status": "failed", "msg": "root cann't be delete"} - module_args = "sed -i 's/^%s.*//' /etc/sudoers" % username - self.run("command", module_args, become=True) - return self.results - - @staticmethod - def gen_sudo_script(role_list, sudo_list): - # receive role_list = [role1, role2] sudo_list = [sudo1, sudo2] - # return sudo_alias={'NETWORK': '/sbin/ifconfig, /ls'} sudo_user={'user1': ['NETWORK', 'SYSTEM']} - sudo_alias = {} - sudo_user = {} - for sudo in sudo_list: - sudo_alias[sudo.name] = sudo.commands - - for role in role_list: - sudo_user[role.name] = ','.join(sudo_alias.keys()) - - sudo_j2 = get_template('jperm/role_sudo.j2') - sudo_content = sudo_j2.render(Context({"sudo_alias": sudo_alias, "sudo_user": sudo_user})) - sudo_file = NamedTemporaryFile(delete=False) - sudo_file.write(sudo_content) - sudo_file.close() - return sudo_file.name - - def push_sudo_file(self, role_list, sudo_list): - """ - use template to render pushed sudoers file - :return: - """ - module_args1 = self.gen_sudo_script(role_list, sudo_list) - self.run("script", module_args1, become=True) - return self.results - - -class CustomAggregateStats(callbacks.AggregateStats): - """ - Holds stats about per-host activity during playbook runs. - """ - def __init__(self): - super(CustomAggregateStats, self).__init__() - self.results = [] - - def compute(self, runner_results, setup=False, poll=False, - ignore_errors=False): - """ - Walk through all results and increment stats. - """ - super(CustomAggregateStats, self).compute(runner_results, setup, poll, - ignore_errors) - - self.results.append(runner_results) - - def summarize(self, host): - """ - Return information about a particular host - """ - summarized_info = super(CustomAggregateStats, self).summarize(host) - - # Adding the info I need - summarized_info['result'] = self.results - - return summarized_info - - -class MyPlaybook(MyInventory): - """ - this is my playbook object for execute playbook. - """ - def __init__(self, *args, **kwargs): - super(MyPlaybook, self).__init__(*args, **kwargs) - - def run(self, playbook_relational_path, extra_vars=None): - """ - run ansible playbook, - only surport relational path. - """ - stats = callbacks.AggregateStats() - playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY) - runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY) - playbook_path = os.path.join(ANSIBLE_DIR, playbook_relational_path) - - pb = PlayBook( - playbook=playbook_path, - stats=stats, - callbacks=playbook_cb, - runner_callbacks=runner_cb, - inventory=self.inventory, - extra_vars=extra_vars, - check=False) - - self.results = pb.run() - - @property - def raw_results(self): - """ - get the raw results after playbook run. - """ - return self.results - - -class App(MyPlaybook): - """ - this is a app object for inclue the common playbook. - """ - def __init__(self, *args, **kwargs): - super(App, self).__init__(*args, **kwargs) - - -if __name__ == "__main__": - -# resource = { -# "group1": { -# "hosts": [{"hostname": "127.0.0.1", "port": "22", "username": "root", "password": "xxx"},], -# "vars" : {"var1": "value1", "var2": "value2"}, -# }, -# } - - resource = [{"hostname": "127.0.0.1", "port": "22", "username": "yumaojun", "password": "yusky0902", - # "ansible_become": "yes", - # "ansible_become_method": "sudo", - # # "ansible_become_user": "root", - # "ansible_become_pass": "yusky0902", - }] - cmd.run('ls',pattern='*') - print cmd.results_raw - - # resource = [{"hostname": "192.168.10.148", "port": "22", "username": "root", "password": "xxx"}] - # task = Tasks(resource) - # print task.get_host_info() - -# playbook = MyPlaybook(resource) -# playbook.run('test.yml') -# print playbook.raw_results - -# task = Tasks(resource) - # print task.add_user('test', 'mypass') -# print task.del_user('test') -# print task.push_key('root', '/root/.ssh/id_rsa.pub') -# print task.del_key('root', '/root/.ssh/id_rsa.pub') - -# task = Tasks(resource) -# print task.add_init_users() -# print task.del_init_users() - - diff --git a/jperm/models.py b/jperm/models.py deleted file mode 100644 index a3451c447..000000000 --- a/jperm/models.py +++ /dev/null @@ -1,60 +0,0 @@ -import datetime - -from django.db import models -from jasset.models import Asset, AssetGroup -from juser.models import User, UserGroup - - -class PermLog(models.Model): - datetime = models.DateTimeField(auto_now_add=True) - action = models.CharField(max_length=100, null=True, blank=True, default='') - results = models.CharField(max_length=1000, null=True, blank=True, default='') - is_success = models.BooleanField(default=False) - is_finish = models.BooleanField(default=False) - - -class PermSudo(models.Model): - name = models.CharField(max_length=100, unique=True) - date_added = models.DateTimeField(auto_now=True) - commands = models.TextField() - comment = models.CharField(max_length=100, null=True, blank=True, default='') - - def __unicode__(self): - return self.name - - -class PermRole(models.Model): - name = models.CharField(max_length=100, unique=True) - comment = models.CharField(max_length=100, null=True, blank=True, default='') - password = models.CharField(max_length=512) - key_path = models.CharField(max_length=100) - date_added = models.DateTimeField(auto_now=True) - sudo = models.ManyToManyField(PermSudo, related_name='perm_role') - - def __unicode__(self): - return self.name - - -class PermRule(models.Model): - date_added = models.DateTimeField(auto_now=True) - name = models.CharField(max_length=100, unique=True) - comment = models.CharField(max_length=100) - asset = models.ManyToManyField(Asset, related_name='perm_rule') - asset_group = models.ManyToManyField(AssetGroup, related_name='perm_rule') - user = models.ManyToManyField(User, related_name='perm_rule') - user_group = models.ManyToManyField(UserGroup, related_name='perm_rule') - role = models.ManyToManyField(PermRole, related_name='perm_rule') - - def __unicode__(self): - return self.name - - -class PermPush(models.Model): - asset = models.ForeignKey(Asset, related_name='perm_push') - role = models.ForeignKey(PermRole, related_name='perm_push') - is_public_key = models.BooleanField(default=False) - is_password = models.BooleanField(default=False) - success = models.BooleanField(default=False) - result = models.TextField(default='') - date_added = models.DateTimeField(auto_now=True) - diff --git a/jperm/perm_api.py b/jperm/perm_api.py deleted file mode 100644 index fb020ea07..000000000 --- a/jperm/perm_api.py +++ /dev/null @@ -1,318 +0,0 @@ -# coding: utf-8 - -from django.db.models.query import QuerySet -from jumpserver.api import * -import uuid -import re - -from jumpserver.models import Setting -from jperm.models import PermRole, PermPush, PermRule - - -def get_group_user_perm(ob): - """ - ob为用户或用户组 - 获取用户、用户组授权的资产、资产组 - return: - {’asset_group': { - asset_group1: {'asset': [], 'role': [role1, role2], 'rule': [rule1, rule2]}, - asset_group2: {'asset: [], 'role': [role1, role2], 'rule': [rule1, rule2]}, - } - 'asset':{ - asset1: {'role': [role1, role2], 'rule': [rule1, rule2]}, - asset2: {'role': [role1, role2], 'rule': [rule1, rule2]}, - } - ]}, - 'rule':[rule1, rule2,] - 'role': {role1: {'asset': []}, 'asset_group': []}, role2: {}}, - } - """ - perm = {} - if isinstance(ob, User): - rule_all = set(PermRule.objects.filter(user=ob)) - for user_group in ob.group.all(): - rule_all = rule_all.union(set(PermRule.objects.filter(user_group=user_group))) - - elif isinstance(ob, UserGroup): - rule_all = PermRule.objects.filter(user_group=ob) - else: - rule_all = [] - - perm['rule'] = rule_all - perm_asset_group = perm['asset_group'] = {} - perm_asset = perm['asset'] = {} - perm_role = perm['role'] = {} - for rule in rule_all: - asset_groups = rule.asset_group.all() - assets = rule.asset.all() - perm_roles = rule.role.all() - group_assets = [] - for asset_group in asset_groups: - group_assets.extend(asset_group.asset_set.all()) - # 获取一个规则授权的角色和对应主机 - for role in perm_roles: - if perm_role.get(role): - perm_role[role]['asset'] = perm_role[role].get('asset', set()).union(set(assets).union(set(group_assets))) - perm_role[role]['asset_group'] = perm_role[role].get('asset_group', set()).union(set(asset_groups)) - else: - perm_role[role] = {'asset': set(assets).union(set(group_assets)), 'asset_group': set(asset_groups)} - - # 获取一个规则用户授权的资产 - for asset in assets: - if perm_asset.get(asset): - perm_asset[asset].get('role', set()).update(set(rule.role.all())) - perm_asset[asset].get('rule', set()).add(rule) - else: - perm_asset[asset] = {'role': set(rule.role.all()), 'rule': set([rule])} - - # 获取一个规则用户授权的资产组 - for asset_group in asset_groups: - asset_group_assets = asset_group.asset_set.all() - if perm_asset_group.get(asset_group): - perm_asset_group[asset_group].get('role', set()).update(set(rule.role.all())) - perm_asset_group[asset_group].get('rule', set()).add(rule) - else: - perm_asset_group[asset_group] = {'role': set(rule.role.all()), 'rule': set([rule]), - 'asset': asset_group_assets} - - # 将资产组中的资产添加到资产授权中 - for asset in asset_group_assets: - if perm_asset.get(asset): - perm_asset[asset].get('role', set()).update(perm_asset_group[asset_group].get('role', set())) - perm_asset[asset].get('rule', set()).update(perm_asset_group[asset_group].get('rule', set())) - else: - perm_asset[asset] = {'role': perm_asset_group[asset_group].get('role', set()), - 'rule': perm_asset_group[asset_group].get('rule', set())} - return perm - - -def get_group_asset_perm(ob): - """ - ob为资产或资产组 - 获取资产,资产组授权的用户,用户组 - return: - {’user_group': { - user_group1: {'user': [], 'role': [role1, role2], 'rule': [rule1, rule2]}, - user_group2: {'user: [], 'role': [role1, role2], 'rule': [rule1, rule2]}, - } - 'user':{ - user1: {'role': [role1, role2], 'rule': [rule1, rule2]}, - user2: {'role': [role1, role2], 'rule': [rule1, rule2]}, - } - ]}, - 'rule':[rule1, rule2,], - } - """ - perm = {} - if isinstance(ob, Asset): - rule_all = PermRule.objects.filter(asset=ob) - elif isinstance(ob, AssetGroup): - rule_all = PermRule.objects.filter(asset_group=ob) - else: - rule_all = [] - - perm['rule'] = rule_all - perm_user_group = perm['user_group'] = {} - perm_user = perm['user'] = {} - for rule in rule_all: - user_groups = rule.user_group.all() - users = rule.user.all() - # 获取一个规则资产的用户 - for user in users: - if perm_user.get(user): - perm_user[user].get('role', set()).update(set(rule.role.all())) - perm_user[user].get('rule', set()).add(rule) - else: - perm_user[user] = {'role': set(rule.role.all()), 'rule': set([rule])} - - # 获取一个规则资产授权的用户组 - for user_group in user_groups: - user_group_users = user_group.user_set.all() - if perm_user_group.get(user_group): - perm_user_group[user_group].get('role', set()).update(set(rule.role.all())) - perm_user_group[user_group].get('rule', set()).add(rule) - else: - perm_user_group[user_group] = {'role': set(rule.role.all()), 'rule': set([rule]), - 'user': user_group_users} - - # 将用户组中的资产添加到用户授权中 - for user in user_group_users: - if perm_user.get(user): - perm_user[user].get('role', set()).update(perm_user_group[user_group].get('role', set())) - perm_user[user].get('rule', set()).update(perm_user_group[user_group].get('rule', set())) - else: - perm_user[user] = {'role': perm_user_group[user_group].get('role', set()), - 'rule': perm_user_group[user_group].get('rule', set())} - return perm - - -def user_have_perm(user, asset): - user_perm_all = get_group_user_perm(user) - user_assets = user_perm_all.get('asset').keys() - if asset in user_assets: - return user_perm_all.get('asset').get(asset).get('role') - else: - return [] - - -def gen_resource(ob, perm=None): - """ - ob为用户或资产列表或资产queryset, 如果同时输入用户和{'role': role1, 'asset': []},则获取用户在这些资产上的信息 - 生成MyInventory需要的 resource文件 - """ - res = [] - if isinstance(ob, dict): - role = ob.get('role') - asset_r = ob.get('asset') - user = ob.get('user') - if not perm: - perm = get_group_user_perm(user) - - if role: - roles = perm.get('role', {}).keys() # 获取用户所有授权角色 - if role not in roles: - return {} - - role_assets_all = perm.get('role').get(role).get('asset') # 获取用户该角色所有授权主机 - assets = set(role_assets_all) & set(asset_r) # 获取用户提交中合法的主机 - - for asset in assets: - asset_info = get_asset_info(asset) - role_key = get_role_key(user, role) - info = {'hostname': asset.hostname, - 'ip': asset.ip, - 'port': asset_info.get('port', 22), - 'ansible_ssh_private_key_file': role_key, - 'username': role.name, - # 'password': CRYPTOR.decrypt(role.password) - } - - if os.path.isfile(role_key): - info['ssh_key'] = role_key - - res.append(info) - else: - for asset, asset_info in perm.get('asset').items(): - if asset not in asset_r: - continue - asset_info = get_asset_info(asset) - try: - role = sorted(list(perm.get('asset').get(asset).get('role')))[0] - except IndexError: - continue - - role_key = get_role_key(user, role) - info = {'hostname': asset.hostname, - 'ip': asset.ip, - 'port': asset_info.get('port', 22), - 'username': role.name, - 'password': CRYPTOR.decrypt(role.password), - } - if os.path.isfile(role_key): - info['ssh_key'] = role_key - - res.append(info) - - elif isinstance(ob, User): - if not perm: - perm = get_group_user_perm(ob) - - for asset, asset_info in perm.get('asset').items(): - asset_info = get_asset_info(asset) - info = {'hostname': asset.hostname, 'ip': asset.ip, 'port': asset_info.get('port', 22)} - try: - role = sorted(list(perm.get('asset').get(asset).get('role')))[0] - except IndexError: - continue - info['username'] = role.name - info['password'] = CRYPTOR.decrypt(role.password) - - role_key = get_role_key(ob, role) - if os.path.isfile(role_key): - info['ssh_key'] = role_key - res.append(info) - - elif isinstance(ob, (list, QuerySet)): - for asset in ob: - info = get_asset_info(asset) - res.append(info) - logger.debug('生成res: %s' % res) - return res - - -def get_object_list(model, id_list): - """根据id列表获取对象列表""" - object_list = [] - for object_id in id_list: - if object_id: - object_list.extend(model.objects.filter(id=int(object_id))) - - return object_list - - -def get_role_info(role_id, type="all"): - """ - 获取role对应的一些信息 - :return: 返回值 均为对象列表 - """ - # 获取role对应的授权规则 - role_obj = PermRole.objects.get(id=role_id) - rule_push_obj = role_obj.perm_rule.all() - # 获取role 对应的用户 和 用户组 - # 获取role 对应的主机 和主机组 - users_obj = [] - assets_obj = [] - user_groups_obj = [] - asset_groups_obj = [] - for push in rule_push_obj: - for user in push.user.all(): - users_obj.append(user) - for asset in push.asset.all(): - assets_obj.append(asset) - for user_group in push.user_group.all(): - user_groups_obj.append(user_group) - for asset_group in push.asset_group.all(): - asset_groups_obj.append(asset_group) - - if type == "all": - return {"rules": set(rule_push_obj), - "users": set(users_obj), - "user_groups": set(user_groups_obj), - "assets": set(assets_obj), - "asset_groups": set(asset_groups_obj), - } - - elif type == "rule": - return set(rule_push_obj) - elif type == "user": - return set(users_obj) - elif type == "user_group": - return set(user_groups_obj) - elif type == "asset": - return set(assets_obj) - elif type == "asset_group": - return set(asset_groups_obj) - else: - return u"不支持的查询" - - -def get_role_push_host(role): - """ - asset_pushed: {'success': push.success, 'key': push.is_public_key, 'password': push.is_password, - 'result': push.result} - asset_no_push: set(asset1, asset2) - """ - # 计算该role 所有push记录 总共推送的主机 - pushs = PermPush.objects.filter(role=role) - asset_all = Asset.objects.all() - asset_pushed = {} - for push in pushs: - asset_pushed[push.asset] = {'success': push.success, 'key': push.is_public_key, 'password': push.is_password, - 'result': push.result} - asset_no_push = set(asset_all) - set(asset_pushed.keys()) - return asset_pushed, asset_no_push - - -if __name__ == "__main__": - print get_role_info(1) - diff --git a/jperm/playbooks/add_init_users/add_users.yml b/jperm/playbooks/add_init_users/add_users.yml deleted file mode 100644 index c4ff86d4f..000000000 --- a/jperm/playbooks/add_init_users/add_users.yml +++ /dev/null @@ -1,12 +0,0 @@ ---- - -- hosts: 'add_users_group' - gather_facts: no - tasks: - - name: add SA user - command: uname -a - - - - - diff --git a/jperm/playbooks/test.yml b/jperm/playbooks/test.yml deleted file mode 100644 index 1e448e445..000000000 --- a/jperm/playbooks/test.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- - -- hosts: test - gather_facts: no - tasks: - - name: just for test - command: uname -a - - diff --git a/jperm/template_filter.py b/jperm/template_filter.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/jperm/tests.py b/jperm/tests.py deleted file mode 100644 index 7ce503c2d..000000000 --- a/jperm/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/jperm/urls.py b/jperm/urls.py deleted file mode 100644 index 5fd3320a6..000000000 --- a/jperm/urls.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.conf.urls import patterns, include, url -from jperm.views import * - -urlpatterns = patterns('jperm.views', - url(r'^rule/list/$', perm_rule_list, name='rule_list'), - url(r'^rule/add/$', perm_rule_add, name='rule_add'), - url(r'^rule/detail/$', perm_rule_detail, name='rule_detail'), - url(r'^rule/edit/$', perm_rule_edit, name='rule_edit'), - url(r'^rule/del/$', perm_rule_delete, name='rule_del'), - url(r'^role/list/$', perm_role_list, name='role_list'), - url(r'^role/add/$', perm_role_add, name='role_add'), - url(r'^role/del/$', perm_role_delete, name='role_del'), - url(r'^role/detail/$', perm_role_detail, name='role_detail'), - url(r'^role/edit/$', perm_role_edit, name='role_edit'), - url(r'^role/push/$', perm_role_push, name='role_push'), - url(r'^role/recycle/$', perm_role_recycle, name='role_recycle'), - url(r'^role/get/$', perm_role_get, name='role_get'), - url(r'^sudo/list/$', perm_sudo_list, name='sudo_list'), - url(r'^sudo/add/$', perm_sudo_add, name='sudo_add'), - url(r'^sudo/del/$', perm_sudo_delete, name='sudo_del'), - url(r'^sudo/edit/$', perm_sudo_edit, name='sudo_edit'), - ) diff --git a/jperm/utils.py b/jperm/utils.py deleted file mode 100644 index 1e4966852..000000000 --- a/jperm/utils.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- - -import os.path -import shutil -from paramiko import SSHException -from paramiko.rsakey import RSAKey -from jumpserver.api import mkdir -from uuid import uuid4 -from jumpserver.api import CRYPTOR - -from jumpserver.api import logger - - -from jumpserver.settings import KEY_DIR - - -def get_rand_pass(): - """ - get a reandom password. - """ - CRYPTOR.gen_rand_pass(20) - - -def updates_dict(*args): - """ - surport update multi dict - """ - result = {} - for d in args: - result.update(d) - return result - - -def gen_keys(key="", key_path_dir=""): - """ - 在KEY_DIR下创建一个 uuid命名的目录, - 并且在该目录下 生产一对秘钥 - :return: 返回目录名(uuid) - """ - key_basename = "key-" + uuid4().hex - if not key_path_dir: - key_path_dir = os.path.join(KEY_DIR, 'role_key', key_basename) - private_key = os.path.join(key_path_dir, 'id_rsa') - public_key = os.path.join(key_path_dir, 'id_rsa.pub') - mkdir(key_path_dir, mode=755) - if not key: - key = RSAKey.generate(2048) - key.write_private_key_file(private_key) - else: - key_file = os.path.join(key_path_dir, 'id_rsa') - with open(key_file, 'w') as f: - f.write(key) - f.close() - with open(key_file) as f: - try: - key = RSAKey.from_private_key(f) - except SSHException, e: - shutil.rmtree(key_path_dir, ignore_errors=True) - raise SSHException(e) - os.chmod(private_key, 0644) - - with open(public_key, 'w') as content_file: - for data in [key.get_name(), - " ", - key.get_base64(), - " %s@%s" % ("jumpserver", os.uname()[1])]: - content_file.write(data) - return key_path_dir - - -def trans_all(str): - if str.strip().lower() == "all": - return str.upper() - else: - return str - -if __name__ == "__main__": - print gen_keys() - - diff --git a/jperm/views.py b/jperm/views.py deleted file mode 100644 index 2ee73b614..000000000 --- a/jperm/views.py +++ /dev/null @@ -1,746 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db.models import Q -from django.http import HttpResponseBadRequest, HttpResponseNotAllowed -from paramiko import SSHException -from jperm.perm_api import * - -from juser.models import User, UserGroup -from jasset.models import Asset, AssetGroup -from jperm.models import PermRole, PermRule, PermSudo, PermPush -from jumpserver.models import Setting - -from jperm.utils import gen_keys, trans_all -from jperm.ansible_api import MyTask -from jperm.perm_api import get_role_info, get_role_push_host -from jumpserver.api import my_render, get_object, CRYPTOR - - -# 设置PERM APP Log -from jumpserver.api import logger -#logger = set_log(LOG_LEVEL, filename='jumpserver_perm.log') - - -@require_role('admin') -def perm_rule_list(request): - """ - list rule page - 授权规则列表 - """ - # 渲染数据 - header_title, path1, path2 = "授权规则", "规则管理", "查看规则" - # 获取所有规则 - rules_list = PermRule.objects.all() - rule_id = request.GET.get('id') - # TODO: 搜索和分页 - keyword = request.GET.get('search', '') - if rule_id: - rules_list = rules_list.filter(id=rule_id) - - if keyword: - rules_list = rules_list.filter(Q(name__icontains=keyword)) - - rules_list, p, rules, page_range, current_page, show_first, show_end = pages(rules_list, request) - - return my_render('jperm/perm_rule_list.html', locals(), request) - - -@require_role('admin') -def perm_rule_detail(request): - """ - rule detail page - 授权详情 - """ - # 渲染数据 - header_title, path1, path2 = "授权规则", "规则管理", "规则详情" - - # 根据rule_id 取得rule对象 - try: - if request.method == "GET": - rule_id = request.GET.get("id") - if not rule_id: - raise ServerError("Rule Detail - no rule id get") - rule_obj = PermRule.objects.get(id=rule_id) - user_obj = rule_obj.user.all() - user_group_obj = rule_obj.user_group.all() - asset_obj = rule_obj.asset.all() - asset_group_obj = rule_obj.asset_group.all() - roles_name = [role.name for role in rule_obj.role.all()] - - # 渲染数据 - roles_name = ','.join(roles_name) - rule = rule_obj - users = user_obj - user_groups = user_group_obj - assets = asset_obj - asset_groups = asset_group_obj - except ServerError, e: - logger.warning(e) - - return my_render('jperm/perm_rule_detail.html', locals(), request) - - -def perm_rule_add(request): - """ - add rule page - 添加授权 - """ - # 渲染数据 - header_title, path1, path2 = "授权规则", "规则管理", "添加规则" - - # 渲染数据, 获取所有 用户,用户组,资产,资产组,用户角色, 用于添加授权规则 - users = User.objects.all() - user_groups = UserGroup.objects.all() - assets = Asset.objects.all() - asset_groups = AssetGroup.objects.all() - roles = PermRole.objects.all() - - if request.method == 'POST': - # 获取用户选择的 用户,用户组,资产,资产组,用户角色 - users_select = request.POST.getlist('user', []) # 需要授权用户 - user_groups_select = request.POST.getlist('user_group', []) # 需要授权用户组 - assets_select = request.POST.getlist('asset', []) # 需要授权资产 - asset_groups_select = request.POST.getlist('asset_group', []) # 需要授权资产组 - roles_select = request.POST.getlist('role', []) # 需要授权角色 - rule_name = request.POST.get('name') - rule_comment = request.POST.get('comment') - - try: - rule = get_object(PermRule, name=rule_name) - - if rule: - raise ServerError(u'授权规则 %s 已存在' % rule_name) - - if not rule_name or not roles_select: - raise ServerError(u'系统用户名称和规则名称不能为空') - - # 获取需要授权的主机列表 - assets_obj = [Asset.objects.get(id=asset_id) for asset_id in assets_select] - asset_groups_obj = [AssetGroup.objects.get(id=group_id) for group_id in asset_groups_select] - group_assets_obj = [] - for asset_group in asset_groups_obj: - group_assets_obj.extend(list(asset_group.asset_set.all())) - calc_assets = set(group_assets_obj) | set(assets_obj) # 授权资产和资产组包含的资产 - - # 获取需要授权的用户列表 - users_obj = [User.objects.get(id=user_id) for user_id in users_select] - user_groups_obj = [UserGroup.objects.get(id=group_id) for group_id in user_groups_select] - - # 获取授予的角色列表 - roles_obj = [PermRole.objects.get(id=role_id) for role_id in roles_select] - need_push_asset = set() - - for role in roles_obj: - asset_no_push = get_role_push_host(role=role)[1] # 获取某角色已经推送的资产 - need_push_asset.update(set(calc_assets) & set(asset_no_push)) - if need_push_asset: - raise ServerError(u'没有推送系统用户 %s 的主机 %s' - % (role.name, ','.join([asset.hostname for asset in need_push_asset]))) - - # 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色) - rule = PermRule(name=rule_name, comment=rule_comment) - rule.save() - rule.user = users_obj - rule.user_group = user_groups_obj - rule.asset = assets_obj - rule.asset_group = asset_groups_obj - rule.role = roles_obj - rule.save() - - msg = u"添加授权规则:%s" % rule.name - return HttpResponseRedirect(reverse('rule_list')) - except ServerError, e: - error = e - return my_render('jperm/perm_rule_add.html', locals(), request) - - -@require_role('admin') -def perm_rule_edit(request): - """ - edit rule page - """ - # 渲染数据 - header_title, path1, path2 = "授权规则", "规则管理", "添加规则" - - # 根据rule_id 取得rule对象 - rule_id = request.GET.get("id") - rule = get_object(PermRule, id=rule_id) - - # 渲染数据, 获取所选的rule对象 - - users = User.objects.all() - user_groups = UserGroup.objects.all() - assets = Asset.objects.all() - asset_groups = AssetGroup.objects.all() - roles = PermRole.objects.all() - - if request.method == 'POST' and rule_id: - # 获取用户选择的 用户,用户组,资产,资产组,用户角色 - rule_name = request.POST.get('name') - rule_comment = request.POST.get("comment") - users_select = request.POST.getlist('user', []) - user_groups_select = request.POST.getlist('user_group', []) - assets_select = request.POST.getlist('asset', []) - asset_groups_select = request.POST.getlist('asset_group', []) - roles_select = request.POST.getlist('role', []) - - try: - if not rule_name or not roles_select: - raise ServerError(u'系统用户和关联系统用户不能为空') - - assets_obj = [Asset.objects.get(id=asset_id) for asset_id in assets_select] - asset_groups_obj = [AssetGroup.objects.get(id=group_id) for group_id in asset_groups_select] - group_assets_obj = [] - for asset_group in asset_groups_obj: - group_assets_obj.extend(list(asset_group.asset_set.all())) - calc_assets = set(group_assets_obj) | set(assets_obj) # 授权资产和资产组包含的资产 - - # 获取需要授权的用户列表 - users_obj = [User.objects.get(id=user_id) for user_id in users_select] - user_groups_obj = [UserGroup.objects.get(id=group_id) for group_id in user_groups_select] - - # 获取授予的角色列表 - roles_obj = [PermRole.objects.get(id=role_id) for role_id in roles_select] - need_push_asset = set() - for role in roles_obj: - asset_no_push = get_role_push_host(role=role)[1] # 获取某角色已经推送的资产 - need_push_asset.update(set(calc_assets) & set(asset_no_push)) - if need_push_asset: - raise ServerError(u'没有推送系统用户 %s 的主机 %s' - % (role.name, ','.join([asset.hostname for asset in need_push_asset]))) - - # 仅授权成功的,写回数据库(授权规则,用户,用户组,资产,资产组,用户角色) - rule.user = users_obj - rule.user_group = user_groups_obj - rule.asset = assets_obj - rule.asset_group = asset_groups_obj - rule.role = roles_obj - rule.name = rule_name - rule.comment = rule_comment - rule.save() - msg = u"更新授权规则:%s成功" % rule.name - - except ServerError, e: - error = e - - return my_render('jperm/perm_rule_edit.html', locals(), request) - - -@require_role('admin') -def perm_rule_delete(request): - """ - use to delete rule - :param request: - :return: - """ - if request.method == 'POST': - # 根据rule_id 取得rule对象 - rule_id = request.POST.get("id") - rule_obj = PermRule.objects.get(id=rule_id) - rule_obj.delete() - return HttpResponse(u"删除授权规则:%s" % rule_obj.name) - else: - return HttpResponse(u"不支持该操作") - - -@require_role('admin') -def perm_role_list(request): - """ - list role page - """ - # 渲染数据 - header_title, path1, path2 = "系统用户", "系统用户管理", "查看系统用户" - - # 获取所有系统角色 - roles_list = PermRole.objects.all() - role_id = request.GET.get('id') - # TODO: 搜索和分页 - keyword = request.GET.get('search', '') - if keyword: - roles_list = roles_list.filter(Q(name=keyword)) - - if role_id: - roles_list = roles_list.filter(id=role_id) - - roles_list, p, roles, page_range, current_page, show_first, show_end = pages(roles_list, request) - - return my_render('jperm/perm_role_list.html', locals(), request) - - -@require_role('admin') -def perm_role_add(request): - """ - add role page - """ - # 渲染数据 - header_title, path1, path2 = "系统用户", "系统用户管理", "添加系统用户" - sudos = PermSudo.objects.all() - - if request.method == "POST": - # 获取参数: name, comment - name = request.POST.get("role_name", "").strip() - comment = request.POST.get("role_comment", "") - password = request.POST.get("role_password", "") - key_content = request.POST.get("role_key", "") - sudo_ids = request.POST.getlist('sudo_name') - - try: - if get_object(PermRole, name=name): - raise ServerError(u'已经存在该用户 %s' % name) - if name == "root": - raise ServerError(u'禁止使用root用户作为系统用户,这样非常危险!') - default = get_object(Setting, name='default') - if len(password) > 64: - raise ServerError(u'密码长度不能超过64位!') - - if password: - encrypt_pass = CRYPTOR.encrypt(password) - else: - encrypt_pass = CRYPTOR.encrypt(CRYPTOR.gen_rand_pass(20)) - # 生成随机密码,生成秘钥对 - sudos_obj = [get_object(PermSudo, id=sudo_id) for sudo_id in sudo_ids] - if key_content: - try: - key_path = gen_keys(key=key_content) - except SSHException, e: - raise ServerError(e) - else: - key_path = gen_keys() - logger.debug('generate role key: %s' % key_path) - role = PermRole(name=name, comment=comment, password=encrypt_pass, key_path=key_path) - role.save() - role.sudo = sudos_obj - msg = u"添加系统用户: %s" % name - return HttpResponseRedirect(reverse('role_list')) - except ServerError, e: - error = e - return my_render('jperm/perm_role_add.html', locals(), request) - - -@require_role('admin') -def perm_role_delete(request): - """ - delete role page - """ - if request.method == "GET": - try: - # 获取参数删除的role对象 - role_id = request.GET.get("id") - role = get_object(PermRole, id=role_id) - if not role: - logger.warning(u"Delete Role: role_id %s not exist" % role_id) - raise ServerError(u"role_id %s 无数据记录" % role_id) - # 删除推送到主机上的role - filter_type = request.GET.get("filter_type") - if filter_type: - if filter_type == "recycle_assets": - recycle_assets = [push.asset for push in role.perm_push.all() if push.success] - print recycle_assets - recycle_assets_ip = ','.join([asset.ip for asset in recycle_assets]) - return HttpResponse(recycle_assets_ip) - else: - return HttpResponse("no such filter_type: %s" % filter_type) - else: - return HttpResponse("filter_type: ?") - except ServerError, e: - return HttpResponse(e) - if request.method == "POST": - try: - # 获取参数删除的role对象 - role_id = request.POST.get("id") - role = get_object(PermRole, id=role_id) - if not role: - logger.warning(u"Delete Role: role_id %s not exist" % role_id) - raise ServerError(u"role_id %s 无数据记录" % role_id) - role_key = role.key_path - # 删除推送到主机上的role - recycle_assets = [push.asset for push in role.perm_push.all() if push.success] - logger.debug(u"delete role %s - delete_assets: %s" % (role.name, recycle_assets)) - if recycle_assets: - recycle_resource = gen_resource(recycle_assets) - task = MyTask(recycle_resource) - try: - msg_del_user = task.del_user(get_object(PermRole, id=role_id).name) - msg_del_sudo = task.del_user_sudo(get_object(PermRole, id=role_id).name) - except Exception, e: - logger.warning(u"Recycle Role failed: %s" % e) - raise ServerError(u"回收已推送的系统用户失败: %s" % e) - logger.info(u"delete role %s - execute delete user: %s" % (role.name, msg_del_user)) - logger.info(u"delete role %s - execute delete sudo: %s" % (role.name, msg_del_sudo)) - # TODO: 判断返回结果,处理异常 - # 删除存储的秘钥,以及目录 - try: - key_files = os.listdir(role_key) - for key_file in key_files: - os.remove(os.path.join(role_key, key_file)) - os.rmdir(role_key) - except OSError, e: - logger.warning(u"Delete Role: delete key error, %s" % e) - raise ServerError(u"删除系统用户key失败: %s" % e) - logger.info(u"delete role %s - delete role key directory: %s" % (role.name, role_key)) - # 数据库里删除记录 - role.delete() - return HttpResponse(u"删除系统用户: %s" % role.name) - except ServerError, e: - return HttpResponseBadRequest(u"删除失败, 原因: %s" % e) - return HttpResponseNotAllowed(u"仅支持POST") - - -@require_role('admin') -def perm_role_detail(request): - """ - the role detail page - the role_info data like: - {'asset_groups': [], - 'assets': [], - 'rules': [], - '': [], - '': []} - """ - # 渲染数据 - header_title, path1, path2 = "系统用户", "系统用户管理", "系统用户详情" - - try: - if request.method == "GET": - role_id = request.GET.get("id") - if not role_id: - raise ServerError("not role id") - role = get_object(PermRole, id=role_id) - role_info = get_role_info(role_id) - - # 渲染数据 - rules = role_info.get("rules") - assets = role_info.get("assets") - asset_groups = role_info.get("asset_groups") - users = role_info.get("users") - user_groups = role_info.get("user_groups") - pushed_asset, need_push_asset = get_role_push_host(get_object(PermRole, id=role_id)) - - except ServerError, e: - logger.warning(e) - - return my_render('jperm/perm_role_detail.html', locals(), request) - - -@require_role('admin') -def perm_role_edit(request): - """ - edit role page - """ - # 渲染数据 - header_title, path1, path2 = "系统用户", "系统用户管理", "系统用户编辑" - - # 渲染数据 - role_id = request.GET.get("id") - role = PermRole.objects.get(id=role_id) - role_pass = CRYPTOR.decrypt(role.password) - sudo_all = PermSudo.objects.all() - role_sudos = role.sudo.all() - sudo_all = PermSudo.objects.all() - if request.method == "GET": - return my_render('jperm/perm_role_edit.html', locals(), request) - - if request.method == "POST": - # 获取 POST 数据 - role_name = request.POST.get("role_name") - role_password = request.POST.get("role_password") - role_comment = request.POST.get("role_comment") - role_sudo_names = request.POST.getlist("sudo_name") - role_sudos = [PermSudo.objects.get(id=sudo_id) for sudo_id in role_sudo_names] - key_content = request.POST.get("role_key", "") - if len(role_password) > 64: - raise ServerError(u'密码长度不能超过64位!') - - try: - if not role: - raise ServerError('该系统用户不能存在') - - if role_name == "root": - raise ServerError(u'禁止使用root用户作为系统用户,这样非常危险!') - - if role_password: - encrypt_pass = CRYPTOR.encrypt(role_password) - role.password = encrypt_pass - # 生成随机密码,生成秘钥对 - if key_content: - try: - key_path = gen_keys(key=key_content, key_path_dir=role.key_path) - except SSHException: - raise ServerError('输入的密钥不合法') - logger.debug('Recreate role key: %s' % role.key_path) - # 写入数据库 - role.name = role_name - role.comment = role_comment - role.sudo = role_sudos - - role.save() - msg = u"更新系统用户: %s" % role.name - return HttpResponseRedirect(reverse('role_list')) - except ServerError, e: - error = e - - return my_render('jperm/perm_role_edit.html', locals(), request) - - -@require_role('admin') -def perm_role_push(request): - """ - the role push page - """ - # 渲染数据 - header_title, path1, path2 = "系统用户", "系统用户管理", "系统用户推送" - role_id = request.GET.get('id') - asset_ids = request.GET.get('asset_id') - role = get_object(PermRole, id=role_id) - assets = Asset.objects.all() - asset_groups = AssetGroup.objects.all() - if asset_ids: - need_push_asset = [get_object(Asset, id=asset_id) for asset_id in asset_ids.split(',')] - - if request.method == "POST": - # 获取推荐角色的名称列表 - # 计算出需要推送的资产列表 - asset_ids = request.POST.getlist("assets") - asset_group_ids = request.POST.getlist("asset_groups") - assets_obj = [Asset.objects.get(id=asset_id) for asset_id in asset_ids] - asset_groups_obj = [AssetGroup.objects.get(id=asset_group_id) for asset_group_id in asset_group_ids] - group_assets_obj = [] - for asset_group in asset_groups_obj: - group_assets_obj.extend(asset_group.asset_set.all()) - calc_assets = list(set(assets_obj) | set(group_assets_obj)) - - push_resource = gen_resource(calc_assets) - - # 调用Ansible API 进行推送 - password_push = True if request.POST.get("use_password") else False - key_push = True if request.POST.get("use_publicKey") else False - task = MyTask(push_resource) - ret = {} - - # 因为要先建立用户,而push key是在 password也完成的情况下的 可选项 - # 1. 以秘钥 方式推送角色 - if key_push: - ret["pass_push"] = task.add_user(role.name) - ret["key_push"] = task.push_key(role.name, os.path.join(role.key_path, 'id_rsa.pub')) - - # 2. 推送账号密码 <为了安全 系统用户统一使用秘钥进行通信, 不再提供密码方式的推送> - # elif password_push: - # ret["pass_push"] = task.add_user(role.name, CRYPTOR.decrypt(role.password)) - - # 3. 推送sudo配置文件 - if key_push: - sudo_list = set([sudo for sudo in role.sudo.all()]) # set(sudo1, sudo2, sudo3) - if sudo_list: - ret['sudo'] = task.push_sudo_file([role], sudo_list) - - logger.debug('推送role结果: %s' % ret) - success_asset = {} - failed_asset = {} - logger.debug(ret) - for push_type, result in ret.items(): - if result.get('failed'): - for hostname, info in result.get('failed').items(): - if hostname in failed_asset.keys(): - if info in failed_asset.get(hostname): - failed_asset[hostname] += info - else: - failed_asset[hostname] = info - - for push_type, result in ret.items(): - if result.get('ok'): - for hostname, info in result.get('ok').items(): - if hostname in failed_asset.keys(): - continue - elif hostname in success_asset.keys(): - if str(info) in success_asset.get(hostname, ''): - success_asset[hostname] += str(info) - else: - success_asset[hostname] = str(info) - - # 推送成功 回写push表 - for asset in calc_assets: - push_check = PermPush.objects.filter(role=role, asset=asset) - if push_check: - func = push_check.update - else: - def func(**kwargs): - PermPush(**kwargs).save() - - if failed_asset.get(asset.hostname): - func(is_password=password_push, is_public_key=key_push, role=role, asset=asset, success=False, - result=failed_asset.get(asset.hostname)) - else: - func(is_password=password_push, is_public_key=key_push, role=role, asset=asset, success=True) - - if not failed_asset: - msg = u'系统用户 %s 推送成功[ %s ]' % (role.name, ','.join(success_asset.keys())) - else: - error = u'系统用户 %s 推送失败 [ %s ], 推送成功 [ %s ] 进入系统用户详情,查看失败原因' % (role.name, - ','.join(failed_asset.keys()), - ','.join(success_asset.keys())) - return my_render('jperm/perm_role_push.html', locals(), request) - - -@require_role('admin') -def perm_sudo_list(request): - """ - list sudo commands alias - :param request: - :return: - """ - # 渲染数据 - header_title, path1, path2 = "Sudo命令", "别名管理", "查看别名" - - # 获取所有sudo 命令别名 - sudos_list = PermSudo.objects.all() - - # TODO: 搜索和分页 - keyword = request.GET.get('search', '') - if keyword: - sudos_list = sudos_list.filter(Q(name=keyword)) - - sudos_list, p, sudos, page_range, current_page, show_first, show_end = pages(sudos_list, request) - - return my_render('jperm/perm_sudo_list.html', locals(), request) - - -@require_role('admin') -def perm_sudo_add(request): - """ - list sudo commands alias - :param request: - :return: - """ - # 渲染数据 - header_title, path1, path2 = "Sudo命令", "别名管理", "添加别名" - try: - if request.method == "POST": - # 获取参数: name, comment - name = request.POST.get("sudo_name").strip().upper() - comment = request.POST.get("sudo_comment").strip() - commands = request.POST.get("sudo_commands").strip() - - if not name or not commands: - raise ServerError(u"sudo name 和 commands是必填项!") - - pattern = re.compile(r'[\n,\r]') - deal_space_commands = list_drop_str(pattern.split(commands), u'') - deal_all_commands = map(trans_all, deal_space_commands) - commands = ', '.join(deal_all_commands) - logger.debug(u'添加sudo %s: %s' % (name, commands)) - - if get_object(PermSudo, name=name): - error = 'Sudo别名 %s已经存在' % name - else: - sudo = PermSudo(name=name.strip(), comment=comment, commands=commands) - sudo.save() - msg = u"添加Sudo命令别名: %s" % name - except ServerError, e: - error = e - return my_render('jperm/perm_sudo_add.html', locals(), request) - - -@require_role('admin') -def perm_sudo_edit(request): - """ - list sudo commands alias - :param request: - :return: - """ - # 渲染数据 - header_title, path1, path2 = "Sudo命令", "别名管理", "编辑别名" - - sudo_id = request.GET.get("id") - sudo = PermSudo.objects.get(id=sudo_id) - - try: - if request.method == "POST": - name = request.POST.get("sudo_name").upper() - commands = request.POST.get("sudo_commands") - comment = request.POST.get("sudo_comment") - - if not name or not commands: - raise ServerError(u"sudo name 和 commands是必填项!") - - pattern = re.compile(r'[\n,\r]') - deal_space_commands = list_drop_str(pattern.split(commands), u'') - deal_all_commands = map(trans_all, deal_space_commands) - commands = ', '.join(deal_all_commands).strip() - logger.debug(u'添加sudo %s: %s' % (name, commands)) - - sudo.name = name.strip() - sudo.commands = commands - sudo.comment = comment - sudo.save() - - msg = u"更新命令别名: %s" % name - except ServerError, e: - error = e - return my_render('jperm/perm_sudo_edit.html', locals(), request) - - -@require_role('admin') -def perm_sudo_delete(request): - """ - list sudo commands alias - :param request: - :return: - """ - if request.method == "POST": - # 获取参数删除的role对象 - sudo_id = request.POST.get("id") - sudo = PermSudo.objects.get(id=sudo_id) - # 数据库里删除记录 - sudo.delete() - return HttpResponse(u"删除系统用户: %s" % sudo.name) - else: - return HttpResponse(u"不支持该操作") - - -@require_role('admin') -def perm_role_recycle(request): - role_id = request.GET.get('role_id') - asset_ids = request.GET.get('asset_id').split(',') - - # 仅有推送的角色才回收 - assets = [get_object(Asset, id=asset_id) for asset_id in asset_ids] - recycle_assets = [] - for asset in assets: - if True in [push.success for push in asset.perm_push.all()]: - recycle_assets.append(asset) - recycle_resource = gen_resource(recycle_assets) - task = MyTask(recycle_resource) - try: - msg_del_user = task.del_user(get_object(PermRole, id=role_id).name) - msg_del_sudo = task.del_user_sudo(get_object(PermRole, id=role_id).name) - logger.info("recycle user msg: %s" % msg_del_user) - logger.info("recycle sudo msg: %s" % msg_del_sudo) - except Exception, e: - logger.warning("Recycle Role failed: %s" % e) - raise ServerError(u"回收已推送的系统用户失败: %s" % e) - - for asset_id in asset_ids: - asset = get_object(Asset, id=asset_id) - assets.append(asset) - role = get_object(PermRole, id=role_id) - PermPush.objects.filter(asset=asset, role=role).delete() - - return HttpResponse('删除成功') - - -@require_role('user') -def perm_role_get(request): - asset_id = request.GET.get('id', 0) - if asset_id: - asset = get_object(Asset, id=asset_id) - if asset: - role = user_have_perm(request.user, asset=asset) - logger.debug(u'获取授权系统用户: ' + ','.join([i.name for i in role])) - return HttpResponse(','.join([i.name for i in role])) - else: - roles = get_group_user_perm(request.user).get('role').keys() - return HttpResponse(','.join(i.name for i in roles)) - - return HttpResponse('error') - diff --git a/jumpserver.conf b/jumpserver.conf deleted file mode 100644 index bc8209a52..000000000 --- a/jumpserver.conf +++ /dev/null @@ -1,26 +0,0 @@ -[base] -url = http://127.0.0.1 -key = 941enj9neshd1wes -ip = 0.0.0.0 -port = 8000 -log = debug - -[db] -engine = mysql -host = 127.0.0.1 -port = 3306 -user = jumpserver -password = mysql234 -database = jumpserver - -[mail] -mail_enable = 1 -email_host = -email_port = 587 -email_host_user = -email_host_password = -email_use_tls = False -email_use_ssl = False - -[connect] -nav_sort_by = ip diff --git a/jumpserver/__init__.py b/jumpserver/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/jumpserver/api.py b/jumpserver/api.py deleted file mode 100644 index ca1972532..000000000 --- a/jumpserver/api.py +++ /dev/null @@ -1,510 +0,0 @@ -# coding: utf-8 - -import os, sys, time, re -from Crypto.Cipher import AES -import crypt -import pwd -from binascii import b2a_hex, a2b_hex -import hashlib -import datetime -import random -import subprocess -import uuid -import json -import logging - -from settings import * -from django.core.paginator import Paginator, EmptyPage, InvalidPage -from django.http import HttpResponse, Http404 -from django.template import RequestContext -from juser.models import User, UserGroup -from jlog.models import Log, TtyLog -from jasset.models import Asset, AssetGroup -from jperm.models import PermRule, PermRole -from jumpserver.models import Setting -from django.http import HttpResponseRedirect -from django.shortcuts import render_to_response -from django.core.mail import send_mail -from django.core.urlresolvers import reverse - - -def set_log(level, filename='jumpserver.log'): - """ - return a log file object - 根据提示设置log打印 - """ - log_file = os.path.join(LOG_DIR, filename) - if not os.path.isfile(log_file): - os.mknod(log_file) - os.chmod(log_file, 0777) - log_level_total = {'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARN, 'error': logging.ERROR, - 'critical': logging.CRITICAL} - logger_f = logging.getLogger('jumpserver') - logger_f.setLevel(logging.DEBUG) - fh = logging.FileHandler(log_file) - fh.setLevel(log_level_total.get(level, logging.DEBUG)) - formatter = logging.Formatter('%(asctime)s - %(filename)s - %(levelname)s - %(message)s') - fh.setFormatter(formatter) - logger_f.addHandler(fh) - return logger_f - - -def list_drop_str(a_list, a_str): - for i in a_list: - if i == a_str: - a_list.remove(a_str) - return a_list - - -def get_asset_info(asset): - """ - 获取资产的相关管理账号端口等信息 - """ - default = get_object(Setting, name='default') - info = {'hostname': asset.hostname, 'ip': asset.ip} - if asset.use_default_auth: - if default: - info['username'] = default.field1 - try: - info['password'] = CRYPTOR.decrypt(default.field3) - except ServerError: - pass - if os.path.isfile(default.field4): - info['ssh_key'] = default.field4 - else: - info['username'] = asset.username - info['password'] = CRYPTOR.decrypt(asset.password) - try: - info['port'] = int(asset.port) - except TypeError: - info['port'] = int(default.field2) - - return info - - -def get_role_key(user, role): - """ - 由于role的key的权限是所有人可以读的, ansible执行命令等要求为600,所以拷贝一份到特殊目录 - :param user: - :param role: - :return: self key path - """ - user_role_key_dir = os.path.join(KEY_DIR, 'user') - user_role_key_path = os.path.join(user_role_key_dir, '%s_%s.pem' % (user.username, role.name)) - mkdir(user_role_key_dir, mode=777) - if not os.path.isfile(user_role_key_path): - with open(os.path.join(role.key_path, 'id_rsa')) as fk: - with open(user_role_key_path, 'w') as fu: - fu.write(fk.read()) - logger.debug(u"创建新的系统用户key %s, Owner: %s" % (user_role_key_path, user.username)) - chown(user_role_key_path, user.username) - os.chmod(user_role_key_path, 0600) - return user_role_key_path - - -def chown(path, user, group=''): - if not group: - group = user - try: - uid = pwd.getpwnam(user).pw_uid - gid = pwd.getpwnam(group).pw_gid - os.chown(path, uid, gid) - except KeyError: - pass - - -def page_list_return(total, current=1): - """ - page - 分页,返回本次分页的最小页数到最大页数列表 - """ - min_page = current - 2 if current - 4 > 0 else 1 - max_page = min_page + 4 if min_page + 4 < total else total - - return range(min_page, max_page + 1) - - -def pages(post_objects, request): - """ - page public function , return page's object tuple - 分页公用函数,返回分页的对象元组 - """ - paginator = Paginator(post_objects, 20) - try: - current_page = int(request.GET.get('page', '1')) - except ValueError: - current_page = 1 - - page_range = page_list_return(len(paginator.page_range), current_page) - - try: - page_objects = paginator.page(current_page) - except (EmptyPage, InvalidPage): - page_objects = paginator.page(paginator.num_pages) - - if current_page >= 5: - show_first = 1 - else: - show_first = 0 - - if current_page <= (len(paginator.page_range) - 3): - show_end = 1 - else: - show_end = 0 - - # 所有对象, 分页器, 本页对象, 所有页码, 本页页码,是否显示第一页,是否显示最后一页 - return post_objects, paginator, page_objects, page_range, current_page, show_first, show_end - - -class PyCrypt(object): - """ - This class used to encrypt and decrypt password. - 加密类 - """ - - def __init__(self, key): - self.key = key - self.mode = AES.MODE_CBC - - @staticmethod - def gen_rand_pass(length=16, especial=False): - """ - random password - 随机生成密码 - """ - salt_key = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_' - symbol = '!@$%^&*()_' - salt_list = [] - if especial: - for i in range(length - 4): - salt_list.append(random.choice(salt_key)) - for i in range(4): - salt_list.append(random.choice(symbol)) - else: - for i in range(length): - salt_list.append(random.choice(salt_key)) - salt = ''.join(salt_list) - return salt - - @staticmethod - def md5_crypt(string): - """ - md5 encrypt method - md5非对称加密方法 - """ - return hashlib.new("md5", string).hexdigest() - - @staticmethod - def gen_sha512(salt, password): - """ - generate sha512 format password - 生成sha512加密密码 - """ - return crypt.crypt(password, '$6$%s$' % salt) - - def encrypt(self, passwd=None, length=32): - """ - encrypt gen password - 对称加密之加密生成密码 - """ - if not passwd: - passwd = self.gen_rand_pass() - - cryptor = AES.new(self.key, self.mode, b'8122ca7d906ad5e1') - try: - count = len(passwd) - except TypeError: - raise ServerError('Encrypt password error, TYpe error.') - - add = (length - (count % length)) - passwd += ('\0' * add) - cipher_text = cryptor.encrypt(passwd) - return b2a_hex(cipher_text) - - def decrypt(self, text): - """ - decrypt pass base the same key - 对称加密之解密,同一个加密随机数 - """ - cryptor = AES.new(self.key, self.mode, b'8122ca7d906ad5e1') - try: - plain_text = cryptor.decrypt(a2b_hex(text)) - except TypeError: - raise ServerError('Decrypt password error, TYpe error.') - return plain_text.rstrip('\0') - - -class ServerError(Exception): - """ - self define exception - 自定义异常 - """ - pass - - -def get_object(model, **kwargs): - """ - use this function for query - 使用改封装函数查询数据库 - """ - for value in kwargs.values(): - if not value: - return None - - the_object = model.objects.filter(**kwargs) - if len(the_object) == 1: - the_object = the_object[0] - else: - the_object = None - return the_object - - -def require_role(role='user'): - """ - decorator for require user role in ["super", "admin", "user"] - 要求用户是某种角色 ["super", "admin", "user"]的装饰器 - """ - - def _deco(func): - def __deco(request, *args, **kwargs): - request.session['pre_url'] = request.path - if not request.user.is_authenticated(): - return HttpResponseRedirect(reverse('login')) - if role == 'admin': - # if request.session.get('role_id', 0) < 1: - if request.user.role == 'CU': - return HttpResponseRedirect(reverse('index')) - elif role == 'super': - # if request.session.get('role_id', 0) < 2: - if request.user.role in ['CU', 'GA']: - return HttpResponseRedirect(reverse('index')) - return func(request, *args, **kwargs) - - return __deco - - return _deco - - -def is_role_request(request, role='user'): - """ - require this request of user is right - 要求请求角色正确 - """ - role_all = {'user': 'CU', 'admin': 'GA', 'super': 'SU'} - if request.user.role == role_all.get(role, 'CU'): - return True - else: - return False - - -def get_session_user_dept(request): - """ - get department of the user in session - 获取session中用户的部门 - """ - # user_id = request.session.get('user_id', 0) - # print '#' * 20 - # print user_id - # user = User.objects.filter(id=user_id) - # if user: - # user = user[0] - # return user, None - return request.user, None - - -@require_role -def get_session_user_info(request): - """ - get the user info of the user in session, for example id, username etc. - 获取用户的信息 - """ - # user_id = request.session.get('user_id', 0) - # user = get_object(User, id=user_id) - # if user: - # return [user.id, user.username, user] - return [request.user.id, request.user.username, request.user] - - -def get_user_dept(request): - """ - get the user dept id - 获取用户的部门id - """ - user_id = request.user.id - if user_id: - user_dept = User.objects.get(id=user_id).dept - return user_dept.id - - -def api_user(request): - hosts = Log.objects.filter(is_finished=0).count() - users = Log.objects.filter(is_finished=0).values('user').distinct().count() - ret = {'users': users, 'hosts': hosts} - json_data = json.dumps(ret) - return HttpResponse(json_data) - - -def view_splitter(request, su=None, adm=None): - """ - for different user use different view - 视图分页器 - """ - if is_role_request(request, 'super'): - return su(request) - elif is_role_request(request, 'admin'): - return adm(request) - else: - return HttpResponseRedirect(reverse('login')) - - -def validate(request, user_group=None, user=None, asset_group=None, asset=None, edept=None): - """ - validate the user request - 判定用户请求是否合法 - """ - dept = get_session_user_dept(request)[1] - if edept: - if dept.id != int(edept[0]): - return False - - if user_group: - dept_user_groups = dept.usergroup_set.all() - user_group_ids = [] - for group in dept_user_groups: - user_group_ids.append(str(group.id)) - - if not set(user_group).issubset(set(user_group_ids)): - return False - - if user: - dept_users = dept.user_set.all() - user_ids = [] - for dept_user in dept_users: - user_ids.append(str(dept_user.id)) - - if not set(user).issubset(set(user_ids)): - return False - - if asset_group: - dept_asset_groups = dept.bisgroup_set.all() - asset_group_ids = [] - for group in dept_asset_groups: - asset_group_ids.append(str(group.id)) - - if not set(asset_group).issubset(set(asset_group_ids)): - return False - - if asset: - dept_assets = dept.asset_set.all() - asset_ids = [] - for dept_asset in dept_assets: - asset_ids.append(str(dept_asset.id)) - - if not set(asset).issubset(set(asset_ids)): - return False - - return True - - -def verify(request, user_group=None, user=None, asset_group=None, asset=None, edept=None): - dept = get_session_user_dept(request)[1] - if edept: - if dept.id != int(edept[0]): - return False - - if user_group: - dept_user_groups = dept.usergroup_set.all() - user_groups = [] - for user_group_id in user_group: - user_groups.extend(UserGroup.objects.filter(id=user_group_id)) - if not set(user_groups).issubset(set(dept_user_groups)): - return False - - if user: - dept_users = dept.user_set.all() - users = [] - for user_id in user: - users.extend(User.objects.filter(id=user_id)) - - if not set(users).issubset(set(dept_users)): - return False - - if asset_group: - dept_asset_groups = dept.bisgroup_set.all() - asset_group_ids = [] - for group in dept_asset_groups: - asset_group_ids.append(str(group.id)) - - if not set(asset_group).issubset(set(asset_group_ids)): - return False - - if asset: - dept_assets = dept.asset_set.all() - asset_ids = [] - for a in dept_assets: - asset_ids.append(str(a.id)) - print asset, asset_ids - if not set(asset).issubset(set(asset_ids)): - return False - - return True - - -def bash(cmd): - """ - run a bash shell command - 执行bash命令 - """ - return subprocess.call(cmd, shell=True) - - -def mkdir(dir_name, username='', mode=755): - """ - insure the dir exist and mode ok - 目录存在,如果不存在就建立,并且权限正确 - """ - cmd = '[ ! -d %s ] && mkdir -p %s && chmod %s %s' % (dir_name, dir_name, mode, dir_name) - bash(cmd) - if username: - chown(dir_name, username) - - -def http_success(request, msg): - return render_to_response('success.html', locals()) - - -def http_error(request, emg): - message = emg - return render_to_response('error.html', locals()) - - -def my_render(template, data, request): - return render_to_response(template, data, context_instance=RequestContext(request)) - - -def get_tmp_dir(): - seed = uuid.uuid4().hex[:4] - dir_name = os.path.join('/tmp', '%s-%s' % (datetime.datetime.now().strftime('%Y%m%d-%H%M%S'), seed)) - mkdir(dir_name, mode=777) - return dir_name - - -def defend_attack(func): - def _deco(request, *args, **kwargs): - if int(request.session.get('visit', 1)) > 10: - logger.debug('请求次数: %s' % request.session.get('visit', 1)) - return HttpResponse('Forbidden', status=403) - request.session['visit'] = request.session.get('visit', 1) + 1 - request.session.set_expiry(300) - return func(request, *args, **kwargs) - return _deco - - -def get_mac_address(): - node = uuid.getnode() - mac = uuid.UUID(int=node).hex[-12:] - return mac - - -CRYPTOR = PyCrypt(KEY) -logger = set_log(LOG_LEVEL) diff --git a/jumpserver/context_processors.py b/jumpserver/context_processors.py deleted file mode 100644 index e84cc60ec..000000000 --- a/jumpserver/context_processors.py +++ /dev/null @@ -1,25 +0,0 @@ -from juser.models import User -from jasset.models import Asset -from jumpserver.api import * - - -def name_proc(request): - user_id = request.user.id - role_id = {'SU': 2, 'GA': 1, 'CU': 0}.get(request.user.role, 0) - # role_id = 'SU' - user_total_num = User.objects.all().count() - user_active_num = User.objects.filter().count() - host_total_num = Asset.objects.all().count() - host_active_num = Asset.objects.filter(is_active=True).count() - request.session.set_expiry(3600) - - info_dic = {'session_user_id': user_id, - 'session_role_id': role_id, - 'user_total_num': user_total_num, - 'user_active_num': user_active_num, - 'host_total_num': host_total_num, - 'host_active_num': host_active_num, - } - - return info_dic - diff --git a/jumpserver/models.py b/jumpserver/models.py deleted file mode 100644 index 60a2be50f..000000000 --- a/jumpserver/models.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding: utf-8 - -from django.db import models - - -class Setting(models.Model): - name = models.CharField(max_length=100) - field1 = models.CharField(max_length=100, null=True, blank=True) - field2 = models.CharField(max_length=100, null=True, blank=True) - field3 = models.CharField(max_length=256, null=True, blank=True) - field4 = models.CharField(max_length=100, null=True, blank=True) - field5 = models.CharField(max_length=100, null=True, blank=True) - - class Meta: - db_table = u'setting' - - def __unicode__(self): - return self.name diff --git a/jumpserver/settings.py b/jumpserver/settings.py deleted file mode 100644 index e83de855d..000000000 --- a/jumpserver/settings.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -Django settings for jumpserver project. - -For more information on this file, see -https://docs.djangoproject.com/en/1.7/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.7/ref/settings/ -""" - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -import os -import ConfigParser -import getpass - -config = ConfigParser.ConfigParser() - -BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) -config.read(os.path.join(BASE_DIR, 'jumpserver.conf')) -KEY_DIR = os.path.join(BASE_DIR, 'keys') - -AUTH_USER_MODEL = 'juser.User' -# mail config -MAIL_ENABLE = config.get('mail', 'mail_enable') -EMAIL_HOST = config.get('mail', 'email_host') -EMAIL_PORT = config.get('mail', 'email_port') -EMAIL_HOST_USER = config.get('mail', 'email_host_user') -EMAIL_HOST_PASSWORD = config.get('mail', 'email_host_password') -EMAIL_USE_TLS = config.getboolean('mail', 'email_use_tls') -try: - EMAIL_USE_SSL = config.getboolean('mail', 'email_use_ssl') -except ConfigParser.NoOptionError: - EMAIL_USE_SSL = False -EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' if EMAIL_USE_SSL else 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_TIMEOUT = 5 - -# ======== Log ========== -LOG_DIR = os.path.join(BASE_DIR, 'logs') -SSH_KEY_DIR = os.path.join(BASE_DIR, 'keys/role_keys') -KEY = config.get('base', 'key') -URL = config.get('base', 'url') -LOG_LEVEL = config.get('base', 'log') -IP = config.get('base', 'ip') -PORT = config.get('base', 'port') - -# ======== Connect ========== -try: - NAV_SORT_BY = config.get('connect', 'nav_sort_by') -except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): - NAV_SORT_BY = 'ip' - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = '!%=t81uof5rhmtpi&(zr=q^fah#$enny-c@mswz49l42j0o49-' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -TEMPLATE_DEBUG = True - -ALLOWED_HOSTS = ['0.0.0.0/8'] - -# Application definition - -INSTALLED_APPS = ( - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'django.contrib.humanize', - 'django_crontab', - 'bootstrapform', - 'jumpserver', - 'juser', - 'jasset', - 'jperm', - 'jlog', -) - -MIDDLEWARE_CLASSES = ( - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - # 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -) - -ROOT_URLCONF = 'jumpserver.urls' - -WSGI_APPLICATION = 'jumpserver.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/1.7/ref/settings/#databases -DATABASES = {} -if config.get('db', 'engine') == 'mysql': - DB_HOST = config.get('db', 'host') - DB_PORT = config.getint('db', 'port') - DB_USER = config.get('db', 'user') - DB_PASSWORD = config.get('db', 'password') - DB_DATABASE = config.get('db', 'database') - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.mysql', - 'NAME': DB_DATABASE, - 'USER': DB_USER, - 'PASSWORD': DB_PASSWORD, - 'HOST': DB_HOST, - 'PORT': DB_PORT, - } - } -elif config.get('db', 'engine') == 'sqlite': - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': config.get('db', 'database'), - } - } -else: - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), - } - } -TEMPLATE_CONTEXT_PROCESSORS = ( - 'django.contrib.auth.context_processors.auth', - 'django.core.context_processors.debug', - 'django.core.context_processors.i18n', - 'django.core.context_processors.media', - 'django.core.context_processors.static', - 'django.core.context_processors.tz', - 'django.contrib.messages.context_processors.messages', - 'jumpserver.context_processors.name_proc', -) - -TEMPLATE_DIRS = ( - os.path.join(BASE_DIR, 'templates'), -) - -# STATIC_ROOT = os.path.join(BASE_DIR, 'static') - -STATICFILES_DIRS = ( - os.path.join(BASE_DIR, "static"), -) -# Internationalization -# https://docs.djangoproject.com/en/1.7/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'Asia/Shanghai' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = False - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.7/howto/static-files/ - -STATIC_URL = '/static/' - -BOOTSTRAP_COLUMN_COUNT = 10 - -CRONJOBS = [ - ('0 1 * * *', 'jasset.asset_api.asset_ansible_update_all'), - ('*/10 * * * *', 'jlog.log_api.kill_invalid_connection'), -] diff --git a/jumpserver/tasks.py b/jumpserver/tasks.py deleted file mode 100644 index 41bad7316..000000000 --- a/jumpserver/tasks.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -from ansible.playbook import PlayBook -from ansible import callbacks, utils - - -def playbook_run(inventory, playbook, default_user=None, default_port=None, default_pri_key_path=None): - stats = callbacks.AggregateStats() - playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY) - runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY) - # run the playbook - print default_user, default_port, default_pri_key_path, inventory, playbook - if default_user and default_port and default_pri_key_path: - playbook = PlayBook(host_list=inventory, - playbook=playbook, - forks=5, - remote_user=default_user, - remote_port=default_port, - private_key_file=default_pri_key_path, - callbacks=playbook_cb, - runner_callbacks=runner_cb, - stats=stats, - become=True, - become_user='root') - else: - playbook = PlayBook(host_list=inventory, - playbook=playbook, - forks=5, - callbacks=playbook_cb, - runner_callbacks=runner_cb, - stats=stats, - become=True, - become_user='root') - results = playbook.run() - print results - results_r = {'unreachable': [], 'failures': [], 'success': []} - for hostname, result in results.items(): - if result.get('unreachable', 2): - results_r['unreachable'].append(hostname) - print "%s >>> unreachable" % hostname - elif result.get('failures', 2): - results_r['failures'].append(hostname) - print "%s >>> Failed" % hostname - else: - results_r['success'].append(hostname) - print "%s >>> Success" % hostname - return results_r - diff --git a/jumpserver/templatetags/__init__.py b/jumpserver/templatetags/__init__.py deleted file mode 100644 index bfd53d39f..000000000 --- a/jumpserver/templatetags/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'Hudie' diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py deleted file mode 100644 index 42d42e4d0..000000000 --- a/jumpserver/templatetags/mytags.py +++ /dev/null @@ -1,306 +0,0 @@ -# coding: utf-8 - -import re -import ast -import time - -from django import template -from jperm.models import PermPush -from jumpserver.api import * -from jperm.perm_api import get_group_user_perm - -register = template.Library() - - -@register.filter(name='int2str') -def int2str(value): - """ - int 转换为 str - """ - return str(value) - - -@register.filter(name='get_role') -def get_role(user_id): - """ - 根据用户id获取用户权限 - """ - - user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} - user = get_object(User, id=user_id) - if user: - return user_role.get(str(user.role), u"普通用户") - else: - return u"普通用户" - - -@register.filter(name='groups2str') -def groups2str(group_list): - """ - 将用户组列表转换为str - """ - if len(group_list) < 3: - return ' '.join([group.name for group in group_list]) - else: - return '%s ...' % ' '.join([group.name for group in group_list[0:2]]) - - -@register.filter(name='user_asset_count') -def user_asset_count(user): - """ - 返回用户权限主机的数量 - """ - assets = user.asset.all() - asset_groups = user.asset_group.all() - - for asset_group in asset_groups: - if asset_group: - assets.extend(asset_group.asset_set.all()) - - return len(assets) - - -@register.filter(name='user_asset_group_count') -def user_asset_group_count(user): - """ - 返回用户权限主机组的数量 - """ - return len(user.asset_group.all()) - - -@register.filter(name='bool2str') -def bool2str(value): - if value: - return u'是' - else: - return u'否' - - -@register.filter(name='members_count') -def members_count(group_id): - """统计用户组下成员数量""" - group = get_object(UserGroup, id=group_id) - if group: - return group.user_set.count() - else: - return 0 - - -@register.filter(name='to_name') -def to_name(user_id): - """user id 转位用户名称""" - try: - user = User.objects.filter(id=int(user_id)) - if user: - user = user[0] - return user.name - except: - return '非法用户' - - -@register.filter(name='to_role_name') -def to_role_name(role_id): - """role_id 转变为角色名称""" - role_dict = {'0': '普通用户', '1': '组管理员', '2': '超级管理员'} - return role_dict.get(str(role_id), '未知') - - -@register.filter(name='to_avatar') -def to_avatar(role_id='0'): - """不同角色不同头像""" - role_dict = {'0': 'user', '1': 'admin', '2': 'root'} - return role_dict.get(str(role_id), 'user') - - -@register.filter(name='result2bool') -def result2bool(result=''): - """将结果定向为结果""" - result = eval(result) - unreachable = result.get('unreachable', []) - failures = result.get('failures', []) - - if unreachable or failures: - return '失败' - else: - return '成功' - - -@register.filter(name='rule_member_count') -def rule_member_count(instance, member): - """ - instance is a rule object, - use to get the number of the members - :param instance: - :param member: - :return: - """ - member = getattr(instance, member) - counts = member.all().count() - return str(counts) - - -@register.filter(name='rule_member_name') -def rule_member_name(instance, member): - """ - instance is a rule object, - use to get the name of the members - :param instance: - :param member: - :return: - """ - member = getattr(instance, member) - names = member.all() - - return names - - -@register.filter(name='user_which_groups') -def user_which_group(user, member): - """ - instance is a user object, - use to get the group of the user - :param instance: - :param member: - :return: - """ - member = getattr(user, member) - names = [members.name for members in member.all()] - - return ','.join(names) - - -@register.filter(name='asset_which_groups') -def asset_which_group(asset, member): - """ - instance is a user object, - use to get the group of the user - :param instance: - :param member: - :return: - """ - member = getattr(asset, member) - names = [members.name for members in member.all()] - - return ','.join(names) - - -@register.filter(name='group_str2') -def groups_str2(group_list): - """ - 将用户组列表转换为str - """ - if len(group_list) < 3: - return ' '.join([group.name for group in group_list]) - else: - return '%s ...' % ' '.join([group.name for group in group_list[0:2]]) - - -@register.filter(name='str_to_list') -def str_to_list(info): - """ - str to list - """ - print ast.literal_eval(info), type(ast.literal_eval(info)) - return ast.literal_eval(info) - - -@register.filter(name='str_to_dic') -def str_to_dic(info): - """ - str to list - """ - if '{' in info: - info_dic = ast.literal_eval(info).iteritems() - else: - info_dic = {} - return info_dic - - -@register.filter(name='str_to_code') -def str_to_code(char_str): - if char_str: - return char_str - else: - return u'空' - - -@register.filter(name='ip_str_to_list') -def ip_str_to_list(ip_str): - """ - ip str to list - """ - return ip_str.split(',') - - -@register.filter(name='key_exist') -def key_exist(username): - """ - ssh key is exist or not - """ - if os.path.isfile(os.path.join(KEY_DIR, 'user', username+'.pem')): - return True - else: - return False - - -@register.filter(name='check_role') -def check_role(asset_id, user): - """ - ssh key is exist or not - """ - return user - - -@register.filter(name='role_contain_which_sudos') -def role_contain_which_sudos(role): - """ - get role sudo commands - """ - sudo_names = [sudo.name for sudo in role.sudo.all()] - return ','.join(sudo_names) - - -@register.filter(name='get_push_info') -def get_push_info(push_id, arg): - push = get_object(PermPush, id=push_id) - if push and arg: - if arg == 'asset': - return [asset.hostname for asset in push.asset.all()] - if arg == 'asset_group': - return [asset_group.name for asset_group in push.asset_group.all()] - if arg == 'role': - return [role.name for role in push.role.all()] - else: - return [] - - -@register.filter(name='get_cpu_core') -def get_cpu_core(cpu_info): - cpu_core = cpu_info.split('* ')[1] if cpu_info and '*' in cpu_info else cpu_info - return cpu_core - - -@register.filter(name='get_disk_info') -def get_disk_info(disk_info): - try: - disk_size = 0 - if disk_info: - disk_dic = ast.literal_eval(disk_info) - for disk, size in disk_dic.items(): - disk_size += size - disk_size = int(disk_size) - else: - disk_size = '' - except Exception: - disk_size = disk_info - return disk_size - - -@register.filter(name='user_perm_asset_num') -def user_perm_asset_num(user_id): - user = get_object(User, id=user_id) - if user: - user_perm_info = get_group_user_perm(user) - return len(user_perm_info.get('asset').keys()) - else: - return 0 diff --git a/jumpserver/urls.py b/jumpserver/urls.py deleted file mode 100644 index 4bce88592..000000000 --- a/jumpserver/urls.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.conf.urls import patterns, include, url - - -urlpatterns = patterns('jumpserver.views', - # Examples: - url(r'^$', 'index', name='index'), - # url(r'^api/user/$', 'api_user'), - url(r'^skin_config/$', 'skin_config', name='skin_config'), - url(r'^login/$', 'Login', name='login'), - url(r'^logout/$', 'Logout', name='logout'), - url(r'^exec_cmd/$', 'exec_cmd', name='exec_cmd'), - url(r'^file/upload/$', 'upload', name='file_upload'), - url(r'^file/download/$', 'download', name='file_download'), - url(r'^setting', 'setting', name='setting'), - url(r'^terminal/$', 'web_terminal', name='terminal'), - url(r'^juser/', include('juser.urls')), - url(r'^jasset/', include('jasset.urls')), - url(r'^jlog/', include('jlog.urls')), - url(r'^jperm/', include('jperm.urls')), -) diff --git a/jumpserver/views.py b/jumpserver/views.py deleted file mode 100644 index 5aa648a92..000000000 --- a/jumpserver/views.py +++ /dev/null @@ -1,370 +0,0 @@ -# coding: utf-8 - -from __future__ import division -import uuid -import urllib - -from django.db.models import Count -from django.shortcuts import render_to_response -from django.template import RequestContext -from django.http import HttpResponseNotFound -from django.http import HttpResponse -# from jperm.models import Apply -import paramiko -from jumpserver.api import * -from jumpserver.models import Setting -from django.contrib.auth import authenticate, login, logout -from django.contrib.auth.decorators import login_required -from jlog.models import Log, FileLog -from jperm.perm_api import get_group_user_perm, gen_resource -from jasset.models import Asset, IDC -from jperm.ansible_api import MyRunner -import zipfile - - -def getDaysByNum(num): - """ - 输出格式:([datetime.date(2015, 11, 6), datetime.date(2015, 11, 8)], ['11-06', '11-08']) - """ - - today = datetime.date.today() - oneday = datetime.timedelta(days=1) - date_li, date_str = [], [] - for i in range(0, num): - today = today-oneday - date_li.append(today) - date_str.append(str(today)[5:10]) - date_li.reverse() - date_str.reverse() - return date_li, date_str - - -def get_data(x, y, z): - pass - - -def get_data_by_day(date_li, item): - data_li = [] - for d in date_li: - logs = Log.objects.filter(start_time__year=d.year, - start_time__month=d.month, - start_time__day=d.day) - if item == 'user': - data_li.append(set([log.user for log in logs])) - elif item == 'asset': - data_li.append(set([log.host for log in logs])) - elif item == 'login': - data_li.append(logs) - else: - pass - return data_li - - -def get_count_by_day(date_li, item): - data_li = get_data_by_day(date_li, item) - data_count_li = [] - for data in data_li: - data_count_li.append(len(data)) - return data_count_li - - -def get_count_by_date(date_li, item): - data_li = get_data_by_day(date_li, item) - data_count_tmp = [] - for data in data_li: - data_count_tmp.extend(list(data)) - - return len(set(data_count_tmp)) - - -@require_role(role='user') -def index_cu(request): - username = request.user.username - return HttpResponseRedirect(reverse('user_detail')) - - -@require_role(role='user') -def index(request): - li_date, li_str = getDaysByNum(7) - today = datetime.datetime.now().day - from_week = datetime.datetime.now() - datetime.timedelta(days=7) - - if is_role_request(request, 'user'): - return index_cu(request) - - elif is_role_request(request, 'super'): - # dashboard 显示汇总 - users = User.objects.all() - hosts = Asset.objects.all() - online = Log.objects.filter(is_finished=0) - online_host = online.values('host').distinct() - online_user = online.values('user').distinct() - active_users = User.objects.filter(is_active=1) - active_hosts = Asset.objects.filter(is_active=1) - - # 一个月历史汇总 - date_li, date_str = getDaysByNum(30) - date_month = repr(date_str) - active_user_per_month = str(get_count_by_day(date_li, 'user')) - active_asset_per_month = str(get_count_by_day(date_li, 'asset')) - active_login_per_month = str(get_count_by_day(date_li, 'login')) - - # 活跃用户资产图 - active_user_month = get_count_by_date(date_li, 'user') - disabled_user_count = len(users.filter(is_active=False)) - inactive_user_month = len(users) - active_user_month - active_asset_month = get_count_by_date(date_li, 'asset') - disabled_asset_count = len(hosts.filter(is_active=False)) if hosts.filter(is_active=False) else 0 - inactive_asset_month = len(hosts) - active_asset_month if len(hosts) > active_asset_month else 0 - - # 一周top10用户和主机 - week_data = Log.objects.filter(start_time__range=[from_week, datetime.datetime.now()]) - user_top_ten = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:10] - host_top_ten = week_data.values('host').annotate(times=Count('host')).order_by('-times')[:10] - - for user_info in user_top_ten: - username = user_info.get('user') - last = Log.objects.filter(user=username).latest('start_time') - user_info['last'] = last - - for host_info in host_top_ten: - host = host_info.get('host') - last = Log.objects.filter(host=host).latest('start_time') - host_info['last'] = last - - # 一周top5 - week_users = week_data.values('user').distinct().count() - week_hosts = week_data.count() - - user_top_five = week_data.values('user').annotate(times=Count('user')).order_by('-times')[:5] - color = ['label-success', 'label-info', 'label-primary', 'label-default', 'label-warnning'] - - # 最后10次权限申请 - # perm apply latest 10 - # perm_apply_10 = Apply.objects.order_by('-date_add')[:10] - - # 最后10次登陆 - login_10 = Log.objects.order_by('-start_time')[:10] - login_more_10 = Log.objects.order_by('-start_time')[10:21] - - return render_to_response('index.html', locals(), context_instance=RequestContext(request)) - - -def skin_config(request): - return render_to_response('skin_config.html') - - -def is_latest(): - node = uuid.getnode() - jsn = uuid.UUID(int=node).hex[-12:] - with open(os.path.join(BASE_DIR, 'version')) as f: - current_version = f.read() - lastest_version = urllib.urlopen('http://www.jumpserver.org/lastest_version.html?jsn=%s' % jsn).read().strip() - - if current_version != lastest_version: - pass - - -@defend_attack -def Login(request): - """登录界面""" - error = '' - if request.user.is_authenticated(): - return HttpResponseRedirect(reverse('index')) - if request.method == 'GET': - return render_to_response('login.html') - else: - username = request.POST.get('username') - password = request.POST.get('password') - if username and password: - user = authenticate(username=username, password=password) - if user is not None: - if user.is_active: - login(request, user) - # c = {} - # c.update(csrf(request)) - # request.session['csrf_token'] = str(c.get('csrf_token')) - # user_filter = User.objects.filter(username=username) - # if user_filter: - # user = user_filter[0] - # if PyCrypt.md5_crypt(password) == user.password: - # request.session['user_id'] = user.id - # user_filter.update(last_login=datetime.datetime.now()) - if user.role == 'SU': - request.session['role_id'] = 2 - elif user.role == 'GA': - request.session['role_id'] = 1 - else: - request.session['role_id'] = 0 - return HttpResponseRedirect(request.session.get('pre_url', '/')) - # response.set_cookie('username', username, expires=604800) - # response.set_cookie('seed', PyCrypt.md5_crypt(password), expires=604800) - # return response - else: - error = '用户未激活' - else: - error = '用户名或密码错误' - else: - error = '用户名或密码错误' - return render_to_response('login.html', {'error': error}) - - -@require_role('user') -def Logout(request): - logout(request) - return HttpResponseRedirect(reverse('index')) - - -@require_role('admin') -def setting(request): - header_title, path1 = '项目设置', '设置' - setting_default = get_object(Setting, name='default') - - if request.method == "POST": - try: - setting_raw = request.POST.get('setting', '') - if setting_raw == 'default': - username = request.POST.get('username', '') - port = request.POST.get('port', '') - password = request.POST.get('password', '') - private_key = request.POST.get('key', '') - - if len(password) > 30: - raise ServerError(u'秘密长度不能超过30位!') - - if '' in [username, port]: - return ServerError(u'所填内容不能为空, 且密码和私钥填一个') - else: - private_key_dir = os.path.join(BASE_DIR, 'keys', 'default') - private_key_path = os.path.join(private_key_dir, 'admin_user.pem') - mkdir(private_key_dir) - - if private_key: - with open(private_key_path, 'w') as f: - f.write(private_key) - os.chmod(private_key_path, 0600) - - if setting_default: - if password: - password_encode = CRYPTOR.encrypt(password) - else: - password_encode = password - Setting.objects.filter(name='default').update(field1=username, field2=port, - field3=password_encode, - field4=private_key_path) - - else: - password_encode = CRYPTOR.encrypt(password) - setting_r = Setting(name='default', field1=username, field2=port, - field3=password_encode, - field4=private_key_path).save() - msg = "设置成功" - except ServerError as e: - error = e.message - return my_render('setting.html', locals(), request) - - -@login_required(login_url='/login') -def upload(request): - user = request.user - assets = get_group_user_perm(user).get('asset').keys() - asset_select = [] - if request.method == 'POST': - remote_ip = request.META.get('REMOTE_ADDR') - asset_ids = request.POST.getlist('asset_ids', '') - upload_files = request.FILES.getlist('file[]', None) - date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") - upload_dir = get_tmp_dir() - # file_dict = {} - for asset_id in asset_ids: - asset_select.append(get_object(Asset, id=asset_id)) - - if not set(asset_select).issubset(set(assets)): - illegal_asset = set(asset_select).issubset(set(assets)) - return HttpResponse('没有权限的服务器 %s' % ','.join([asset.hostname for asset in illegal_asset])) - - for upload_file in upload_files: - file_path = '%s/%s' % (upload_dir, upload_file.name) - with open(file_path, 'w') as f: - for chunk in upload_file.chunks(): - f.write(chunk) - - res = gen_resource({'user': user, 'asset': asset_select}) - runner = MyRunner(res) - runner.run('copy', module_args='src=%s dest=%s directory_mode' - % (upload_dir, '/tmp'), pattern='*') - ret = runner.results - logger.debug(ret) - FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]), - filename=' '.join([f.name for f in upload_files]), type='upload', remote_ip=remote_ip, - result=ret).save() - if ret.get('failed'): - error = u'上传目录: %s
      上传失败: [ %s ]
      上传成功 [ %s ]' % (upload_dir, - ', '.join(ret.get('failed').keys()), - ', '.join(ret.get('ok').keys())) - return HttpResponse(error, status=500) - msg = u'上传目录: %s
      传送成功 [ %s ]' % (upload_dir, ', '.join(ret.get('ok').keys())) - return HttpResponse(msg) - return my_render('upload.html', locals(), request) - - -@login_required(login_url='/login') -def download(request): - user = request.user - assets = get_group_user_perm(user).get('asset').keys() - asset_select = [] - if request.method == 'POST': - remote_ip = request.META.get('REMOTE_ADDR') - asset_ids = request.POST.getlist('asset_ids', '') - file_path = request.POST.get('file_path') - date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S") - upload_dir = get_tmp_dir() - for asset_id in asset_ids: - asset_select.append(get_object(Asset, id=asset_id)) - - if not set(asset_select).issubset(set(assets)): - illegal_asset = set(asset_select).issubset(set(assets)) - return HttpResponse(u'没有权限的服务器 %s' % ','.join([asset.hostname for asset in illegal_asset])) - - res = gen_resource({'user': user, 'asset': asset_select}) - runner = MyRunner(res) - runner.run('fetch', module_args='src=%s dest=%s' % (file_path, upload_dir), pattern='*') - FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]), - filename=file_path, type='download', remote_ip=remote_ip, result=runner.results).save() - logger.debug(runner.results) - tmp_dir_name = os.path.basename(upload_dir) - file_zip = '/tmp/'+tmp_dir_name+'.zip' - zf = zipfile.ZipFile(file_zip, "w", zipfile.ZIP_DEFLATED) - for dirname, subdirs, files in os.walk(upload_dir): - zf.write(dirname) - for filename in files: - zf.write(os.path.join(dirname, filename)) - zf.close() - f = open(file_zip) - data = f.read() - f.close() - response = HttpResponse(data, content_type='application/octet-stream') - response['Content-Disposition'] = 'attachment; filename=%s.zip' % tmp_dir_name - return response - - return render_to_response('download.html', locals(), context_instance=RequestContext(request)) - - -@login_required(login_url='/login') -def exec_cmd(request): - role = request.GET.get('role') - check_assets = request.GET.get('check_assets', '') - web_terminal_uri = '/ws/exec?role=%s' % (role) - return my_render('exec_cmd.html', locals(), request) - - -@require_role('user') -def web_terminal(request): - asset_id = request.GET.get('id') - role_name = request.GET.get('role') - asset = get_object(Asset, id=asset_id) - if asset: - hostname = asset.hostname - return render_to_response('jlog/web_terminal.html', locals()) - - diff --git a/jumpserver/wsgi.py b/jumpserver/wsgi.py deleted file mode 100644 index cf26c6b87..000000000 --- a/jumpserver/wsgi.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -WSGI config for jumpserver project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ -""" - -import os -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jumpserver.settings") - -from django.core.wsgi import get_wsgi_application -application = get_wsgi_application() diff --git a/juser/__init__.py b/juser/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/juser/admin.py b/juser/admin.py deleted file mode 100644 index 8c38f3f3d..000000000 --- a/juser/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/juser/models.py b/juser/models.py deleted file mode 100644 index 54d1b94a0..000000000 --- a/juser/models.py +++ /dev/null @@ -1,54 +0,0 @@ -# coding: utf-8 - -from django.db import models -from django.contrib.auth.models import AbstractUser -import time -# from jasset.models import Asset, AssetGroup - - -class UserGroup(models.Model): - name = models.CharField(max_length=80, unique=True) - comment = models.CharField(max_length=160, blank=True, null=True) - - def __unicode__(self): - return self.name - - -class User(AbstractUser): - USER_ROLE_CHOICES = ( - ('SU', 'SuperUser'), - ('GA', 'GroupAdmin'), - ('CU', 'CommonUser'), - ) - name = models.CharField(max_length=80) - uuid = models.CharField(max_length=100) - role = models.CharField(max_length=2, choices=USER_ROLE_CHOICES, default='CU') - group = models.ManyToManyField(UserGroup) - ssh_key_pwd = models.CharField(max_length=200) - # is_active = models.BooleanField(default=True) - # last_login = models.DateTimeField(null=True) - # date_joined = models.DateTimeField(null=True) - - def __unicode__(self): - return self.username - - -class AdminGroup(models.Model): - """ - under the user control group - 用户可以管理的用户组,或组的管理员是该用户 - """ - - user = models.ForeignKey(User) - group = models.ForeignKey(UserGroup) - - def __unicode__(self): - return '%s: %s' % (self.user.username, self.group.name) - - -class Document(models.Model): - def upload_to(self, filename): - return 'upload/'+str(self.user.id)+time.strftime('/%Y/%m/%d/', time.localtime())+filename - - docfile = models.FileField(upload_to=upload_to) - user = models.ForeignKey(User) diff --git a/juser/urls.py b/juser/urls.py deleted file mode 100644 index 47952dd11..000000000 --- a/juser/urls.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.conf.urls import patterns, include, url -from jumpserver.api import view_splitter -from juser.views import * - -urlpatterns = patterns('juser.views', - # Examples: - # url(r'^$', 'jumpserver.views.home', name='home'), - # url(r'^blog/', include('blog.urls')), - url(r'^group/add/$', 'group_add', name='user_group_add'), - url(r'^group/list/$', 'group_list', name='user_group_list'), - url(r'^group/del/$', 'group_del', name='user_group_del'), - url(r'^group/edit/$', 'group_edit', name='user_group_edit'), - url(r'^user/add/$', 'user_add', name='user_add'), - url(r'^user/del/$', 'user_del', name='user_del'), - url(r'^user/list/$', 'user_list', name='user_list'), - url(r'^user/edit/$', 'user_edit', name='user_edit'), - url(r'^user/detail/$', 'user_detail', name='user_detail'), - url(r'^user/profile/$', 'profile', name='user_profile'), - url(r'^user/update/$', 'change_info', name='user_update'), - url(r'^mail/retry/$', 'send_mail_retry', name='mail_retry'), - url(r'^password/reset/$', 'reset_password', name='password_reset'), - url(r'^password/forget/$', 'forget_password', name='password_forget'), - url(r'^key/gen/$', 'regen_ssh_key', name='key_gen'), - url(r'^key/down/$', 'down_key', name='key_down'), - ) diff --git a/juser/user_api.py b/juser/user_api.py deleted file mode 100644 index 20ef30e53..000000000 --- a/juser/user_api.py +++ /dev/null @@ -1,202 +0,0 @@ -# coding: utf-8 - -from Crypto.PublicKey import RSA -from subprocess import call - -from juser.models import AdminGroup -from jumpserver.api import * -from jumpserver.settings import BASE_DIR, EMAIL_HOST_USER as MAIL_FROM - - -def group_add_user(group, user_id=None, username=None): - """ - 用户组中添加用户 - UserGroup Add a user - """ - if user_id: - user = get_object(User, id=user_id) - else: - user = get_object(User, username=username) - - if user: - group.user_set.add(user) - - -def db_add_group(**kwargs): - """ - add a user group in database - 数据库中添加用户组 - """ - name = kwargs.get('name') - group = get_object(UserGroup, name=name) - users = kwargs.pop('users_id') - - if not group: - group = UserGroup(**kwargs) - group.save() - for user_id in users: - group_add_user(group, user_id) - - -def group_update_member(group_id, users_id_list): - """ - user group update member - 用户组更新成员 - """ - group = get_object(UserGroup, id=group_id) - if group: - group.user_set.clear() - for user_id in users_id_list: - user = get_object(UserGroup, id=user_id) - if isinstance(user, UserGroup): - group.user_set.add(user) - - -def db_add_user(**kwargs): - """ - add a user in database - 数据库中添加用户 - """ - groups_post = kwargs.pop('groups') - admin_groups = kwargs.pop('admin_groups') - role = kwargs.get('role', 'CU') - user = User(**kwargs) - user.set_password(kwargs.get('password')) - user.save() - if groups_post: - group_select = [] - for group_id in groups_post: - group = UserGroup.objects.filter(id=group_id) - group_select.extend(group) - user.group = group_select - - if admin_groups and role == 'GA': # 如果是组管理员就要添加组管理员和组到管理组中 - for group_id in admin_groups: - group = get_object(UserGroup, id=group_id) - if group: - AdminGroup(user=user, group=group).save() - return user - - -def db_update_user(**kwargs): - """ - update a user info in database - 数据库更新用户信息 - """ - groups_post = kwargs.pop('groups') - admin_groups_post = kwargs.pop('admin_groups') - user_id = kwargs.pop('user_id') - user = User.objects.filter(id=user_id) - if user: - user_get = user[0] - password = kwargs.pop('password') - user.update(**kwargs) - if password.strip(): - user_get.set_password(password) - user_get.save() - else: - return None - - group_select = [] - if groups_post: - for group_id in groups_post: - group = UserGroup.objects.filter(id=group_id) - group_select.extend(group) - user_get.group = group_select - - if admin_groups_post != '': - user_get.admingroup_set.all().delete() - for group_id in admin_groups_post: - group = get_object(UserGroup, id=group_id) - AdminGroup(user=user, group=group).save() - - -def db_del_user(username): - """ - delete a user from database - 从数据库中删除用户 - """ - user = get_object(User, username=username) - if user: - user.delete() - - -def gen_ssh_key(username, password='', - key_dir=os.path.join(KEY_DIR, 'user'), - authorized_keys=True, home="/home", length=2048): - """ - generate a user ssh key in a property dir - 生成一个用户ssh密钥对 - """ - logger.debug('生成ssh key, 并设置authorized_keys') - private_key_file = os.path.join(key_dir, username+'.pem') - mkdir(key_dir, mode=777) - if os.path.isfile(private_key_file): - os.unlink(private_key_file) - ret = bash('echo -e "y\n"|ssh-keygen -t rsa -f %s -b %s -P "%s"' % (private_key_file, length, password)) - - if authorized_keys: - auth_key_dir = os.path.join(home, username, '.ssh') - mkdir(auth_key_dir, username=username, mode=700) - authorized_key_file = os.path.join(auth_key_dir, 'authorized_keys') - with open(private_key_file+'.pub') as pub_f: - with open(authorized_key_file, 'w') as auth_f: - auth_f.write(pub_f.read()) - os.chmod(authorized_key_file, 0600) - chown(authorized_key_file, username) - - -def server_add_user(username, ssh_key_pwd=''): - """ - add a system user in jumpserver - 在jumpserver服务器上添加一个用户 - """ - bash("adduser -s '%s' '%s'" % (os.path.join(BASE_DIR, 'init.sh'), username)) - gen_ssh_key(username, ssh_key_pwd) - - -def user_add_mail(user, kwargs): - """ - add user send mail - 发送用户添加邮件 - """ - user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} - mail_title = u'恭喜你的跳板机用户 %s 添加成功 Jumpserver' % user.name - mail_msg = u""" - Hi, %s - 您的用户名: %s - 您的权限: %s - 您的web登录密码: %s - 您的ssh密钥文件密码: %s - 密钥下载地址: %s/juser/key/down/?uuid=%s - 说明: 请登陆跳板机后台下载密钥, 然后使用密钥登陆跳板机! - """ % (user.name, user.username, user_role.get(user.role, u'普通用户'), - kwargs.get('password'), kwargs.get('ssh_key_pwd'), URL, user.uuid) - send_mail(mail_title, mail_msg, MAIL_FROM, [user.email], fail_silently=False) - - -def server_del_user(username): - """ - delete a user from jumpserver linux system - 删除系统上的某用户 - """ - bash('userdel -r -f %s' % username) - logger.debug('rm -f %s/%s_*.pem' % (os.path.join(KEY_DIR, 'user'), username)) - bash('rm -f %s/%s_*.pem' % (os.path.join(KEY_DIR, 'user'), username)) - bash('rm -f %s/%s.pem*' % (os.path.join(KEY_DIR, 'user'), username)) - - -def get_display_msg(user, password='', ssh_key_pwd='', send_mail_need=False): - if send_mail_need: - msg = u'添加用户 %s 成功! 用户密码已发送到 %s 邮箱!' % (user.name, user.email) - else: - msg = u""" - 跳板机地址: %s
      - 用户名:%s
      - 密码:%s
      - 密钥密码:%s
      - 密钥下载url: %s/juser/key/down/?uuid=%s
      - 该账号密码可以登陆web和跳板机。 - """ % (URL, user.username, password, ssh_key_pwd, URL, user.uuid) - return msg - diff --git a/juser/views.py b/juser/views.py deleted file mode 100644 index 5505e3bc5..000000000 --- a/juser/views.py +++ /dev/null @@ -1,468 +0,0 @@ -# coding: utf-8 -# Author: Guanghongwei -# Email: ibuler@qq.com - -# import random -# from Crypto.PublicKey import RSA -import uuid -from django.contrib.auth.decorators import login_required -from django.shortcuts import get_object_or_404 -from django.db.models import Q -from juser.user_api import * -from jperm.perm_api import get_group_user_perm - -MAIL_FROM = EMAIL_HOST_USER - - -@require_role(role='super') -def group_add(request): - """ - group add view for route - 添加用户组的视图 - """ - error = '' - msg = '' - header_title, path1, path2 = '添加用户组', '用户管理', '添加用户组' - user_all = User.objects.all() - - if request.method == 'POST': - group_name = request.POST.get('group_name', '') - users_selected = request.POST.getlist('users_selected', '') - comment = request.POST.get('comment', '') - - try: - if not group_name: - error = u'组名 不能为空' - raise ServerError(error) - - if UserGroup.objects.filter(name=group_name): - error = u'组名已存在' - raise ServerError(error) - db_add_group(name=group_name, users_id=users_selected, comment=comment) - except ServerError: - pass - except TypeError: - error = u'添加小组失败' - else: - msg = u'添加组 %s 成功' % group_name - - return my_render('juser/group_add.html', locals(), request) - - -@require_role(role='super') -def group_list(request): - """ - list user group - 用户组列表 - """ - header_title, path1, path2 = '查看用户组', '用户管理', '查看用户组' - keyword = request.GET.get('search', '') - user_group_list = UserGroup.objects.all().order_by('name') - group_id = request.GET.get('id', '') - - if keyword: - user_group_list = user_group_list.filter(Q(name__icontains=keyword) | Q(comment__icontains=keyword)) - - if group_id: - user_group_list = user_group_list.filter(id=int(group_id)) - - user_group_list, p, user_groups, page_range, current_page, show_first, show_end = pages(user_group_list, request) - return my_render('juser/group_list.html', locals(), request) - - -@require_role(role='super') -def group_del(request): - """ - del a group - 删除用户组 - """ - group_ids = request.GET.get('id', '') - group_id_list = group_ids.split(',') - for group_id in group_id_list: - UserGroup.objects.filter(id=group_id).delete() - - return HttpResponse('删除成功') - - -@require_role(role='super') -def group_edit(request): - error = '' - msg = '' - header_title, path1, path2 = '编辑用户组', '用户管理', '编辑用户组' - - if request.method == 'GET': - group_id = request.GET.get('id', '') - user_group = get_object(UserGroup, id=group_id) - # user_group = UserGroup.objects.get(id=group_id) - users_selected = User.objects.filter(group=user_group) - users_remain = User.objects.filter(~Q(group=user_group)) - users_all = User.objects.all() - - elif request.method == 'POST': - group_id = request.POST.get('group_id', '') - group_name = request.POST.get('group_name', '') - comment = request.POST.get('comment', '') - users_selected = request.POST.getlist('users_selected') - - try: - if '' in [group_id, group_name]: - raise ServerError('组名不能为空') - - if len(UserGroup.objects.filter(name=group_name)) > 1: - raise ServerError(u'%s 用户组已存在' % group_name) - # add user group - user_group = get_object_or_404(UserGroup, id=group_id) - user_group.user_set.clear() - - for user in User.objects.filter(id__in=users_selected): - user.group.add(UserGroup.objects.get(id=group_id)) - - user_group.name = group_name - user_group.comment = comment - user_group.save() - except ServerError, e: - error = e - - if not error: - return HttpResponseRedirect(reverse('user_group_list')) - else: - users_all = User.objects.all() - users_selected = User.objects.filter(group=user_group) - users_remain = User.objects.filter(~Q(group=user_group)) - - return my_render('juser/group_edit.html', locals(), request) - - -@require_role(role='super') -def user_add(request): - error = '' - msg = '' - header_title, path1, path2 = '添加用户', '用户管理', '添加用户' - user_role = {'SU': u'超级管理员', 'CU': u'普通用户'} - group_all = UserGroup.objects.all() - - if request.method == 'POST': - username = request.POST.get('username', '') - password = PyCrypt.gen_rand_pass(16) - name = request.POST.get('name', '') - email = request.POST.get('email', '') - groups = request.POST.getlist('groups', []) - admin_groups = request.POST.getlist('admin_groups', []) - role = request.POST.get('role', 'CU') - uuid_r = uuid.uuid4().get_hex() - ssh_key_pwd = PyCrypt.gen_rand_pass(16) - extra = request.POST.getlist('extra', []) - is_active = False if '0' in extra else True - send_mail_need = True if '1' in extra else False - - try: - if '' in [username, password, ssh_key_pwd, name, role]: - error = u'带*内容不能为空' - raise ServerError - check_user_is_exist = User.objects.filter(username=username) - if check_user_is_exist: - error = u'用户 %s 已存在' % username - raise ServerError - - except ServerError: - pass - else: - try: - user = db_add_user(username=username, name=name, - password=password, - email=email, role=role, uuid=uuid_r, - groups=groups, admin_groups=admin_groups, - ssh_key_pwd=ssh_key_pwd, - is_active=is_active, - date_joined=datetime.datetime.now()) - server_add_user(username=username, ssh_key_pwd=ssh_key_pwd) - user = get_object(User, username=username) - if groups: - user_groups = [] - for user_group_id in groups: - user_groups.extend(UserGroup.objects.filter(id=user_group_id)) - - except IndexError, e: - error = u'添加用户 %s 失败 %s ' % (username, e) - try: - db_del_user(username) - server_del_user(username) - except Exception: - pass - else: - if MAIL_ENABLE and send_mail_need: - user_add_mail(user, kwargs=locals()) - msg = get_display_msg(user, password=password, ssh_key_pwd=ssh_key_pwd, send_mail_need=send_mail_need) - return my_render('juser/user_add.html', locals(), request) - - -@require_role(role='super') -def user_list(request): - user_role = {'SU': u'超级管理员', 'GA': u'组管理员', 'CU': u'普通用户'} - header_title, path1, path2 = '查看用户', '用户管理', '用户列表' - keyword = request.GET.get('keyword', '') - gid = request.GET.get('gid', '') - users_list = User.objects.all().order_by('username') - - if gid: - user_group = UserGroup.objects.filter(id=gid) - if user_group: - user_group = user_group[0] - users_list = user_group.user_set.all() - - if keyword: - users_list = users_list.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)).order_by('username') - - users_list, p, users, page_range, current_page, show_first, show_end = pages(users_list, request) - - return my_render('juser/user_list.html', locals(), request) - - -@require_role(role='user') -def user_detail(request): - header_title, path1, path2 = '用户详情', '用户管理', '用户详情' - if request.session.get('role_id') == 0: - user_id = request.user.id - else: - user_id = request.GET.get('id', '') - - user = get_object(User, id=user_id) - if not user: - return HttpResponseRedirect(reverse('user_list')) - - user_perm_info = get_group_user_perm(user) - role_assets = user_perm_info.get('role') - user_log_ten = Log.objects.filter(user=user.username).order_by('id')[0:10] - user_log_last = Log.objects.filter(user=user.username).order_by('id')[0:50] - user_log_last_num = len(user_log_last) - - return my_render('juser/user_detail.html', locals(), request) - - -@require_role(role='admin') -def user_del(request): - if request.method == "GET": - user_ids = request.GET.get('id', '') - user_id_list = user_ids.split(',') - elif request.method == "POST": - user_ids = request.POST.get('id', '') - user_id_list = user_ids.split(',') - else: - return HttpResponse('错误请求') - - for user_id in user_id_list: - user = get_object(User, id=user_id) - if user and user.username != 'admin': - logger.debug(u"删除用户 %s " % user.username) - server_del_user(user.username) - user.delete() - return HttpResponse('删除成功') - - -@require_role('admin') -def send_mail_retry(request): - uuid_r = request.GET.get('uuid', '1') - user = get_object(User, uuid=uuid_r) - msg = u""" - 跳板机地址: %s - 用户名:%s - 重设密码:%s/juser/password/forget/ - 请登录web点击个人信息页面重新生成ssh密钥 - """ % (URL, user.username, URL) - - try: - send_mail(u'邮件重发', msg, MAIL_FROM, [user.email], fail_silently=False) - except IndexError: - return Http404 - return HttpResponse('发送成功') - - -@defend_attack -def forget_password(request): - if request.method == 'POST': - defend_attack(request) - email = request.POST.get('email', '') - username = request.POST.get('username', '') - name = request.POST.get('name', '') - user = get_object(User, username=username, email=email, name=name) - if user: - timestamp = int(time.time()) - hash_encode = PyCrypt.md5_crypt(str(user.uuid) + str(timestamp) + KEY) - msg = u""" - Hi %s, 请点击下面链接重设密码! - %s/juser/password/reset/?uuid=%s×tamp=%s&hash=%s - """ % (user.name, URL, user.uuid, timestamp, hash_encode) - send_mail('忘记跳板机密码', msg, MAIL_FROM, [email], fail_silently=False) - msg = u'请登陆邮箱,点击邮件重设密码' - return http_success(request, msg) - else: - error = u'用户不存在或邮件地址错误' - - return render_to_response('juser/forget_password.html', locals()) - - -@defend_attack -def reset_password(request): - uuid_r = request.GET.get('uuid', '') - timestamp = request.GET.get('timestamp', '') - hash_encode = request.GET.get('hash', '') - action = '/juser/password/reset/?uuid=%s×tamp=%s&hash=%s' % (uuid_r, timestamp, hash_encode) - - if hash_encode == PyCrypt.md5_crypt(uuid_r + timestamp + KEY): - if int(time.time()) - int(timestamp) > 600: - return http_error(request, u'链接已超时') - else: - return HttpResponse('hash校验失败') - - if request.method == 'POST': - password = request.POST.get('password') - password_confirm = request.POST.get('password_confirm') - print password, password_confirm - if password != password_confirm: - return HttpResponse('密码不匹配') - else: - user = get_object(User, uuid=uuid_r) - if user: - user.set_password(password) - user.save() - return http_success(request, u'密码重设成功') - else: - return HttpResponse('用户不存在') - - else: - return render_to_response('juser/reset_password.html', locals()) - - return http_error(request, u'错误请求') - - -@require_role(role='super') -def user_edit(request): - header_title, path1, path2 = '编辑用户', '用户管理', '编辑用户' - if request.method == 'GET': - user_id = request.GET.get('id', '') - if not user_id: - return HttpResponseRedirect(reverse('index')) - - user_role = {'SU': u'超级管理员', 'CU': u'普通用户'} - user = get_object(User, id=user_id) - group_all = UserGroup.objects.all() - if user: - groups_str = ' '.join([str(group.id) for group in user.group.all()]) - admin_groups_str = ' '.join([str(admin_group.group.id) for admin_group in user.admingroup_set.all()]) - - else: - user_id = request.GET.get('id', '') - password = request.POST.get('password', '') - name = request.POST.get('name', '') - email = request.POST.get('email', '') - groups = request.POST.getlist('groups', []) - role_post = request.POST.get('role', 'CU') - admin_groups = request.POST.getlist('admin_groups', []) - extra = request.POST.getlist('extra', []) - is_active = True if '0' in extra else False - email_need = True if '1' in extra else False - user_role = {'SU': u'超级管理员', 'GA': u'部门管理员', 'CU': u'普通用户'} - - if user_id: - user = get_object(User, id=user_id) - else: - return HttpResponseRedirect(reverse('user_list')) - - db_update_user(user_id=user_id, - password=password, - name=name, - email=email, - groups=groups, - admin_groups=admin_groups, - role=role_post, - is_active=is_active) - - if email_need: - msg = u""" - Hi %s: - 您的信息已修改,请登录跳板机查看详细信息 - 地址:%s - 用户名: %s - 密码:%s (如果密码为None代表密码为原密码) - 权限::%s - - """ % (user.name, URL, user.username, password, user_role.get(role_post, u'')) - send_mail('您的信息已修改', msg, MAIL_FROM, [email], fail_silently=False) - - return HttpResponseRedirect(reverse('user_list')) - return my_render('juser/user_edit.html', locals(), request) - - -@require_role('user') -def profile(request): - user_id = request.user.id - if not user_id: - return HttpResponseRedirect(reverse('index')) - user = User.objects.get(id=user_id) - return my_render('juser/profile.html', locals(), request) - - -def change_info(request): - header_title, path1, path2 = '修改信息', '用户管理', '修改个人信息' - user_id = request.user.id - user = User.objects.get(id=user_id) - error = '' - if not user: - return HttpResponseRedirect(reverse('index')) - - if request.method == 'POST': - name = request.POST.get('name', '') - password = request.POST.get('password', '') - email = request.POST.get('email', '') - - if '' in [name, email]: - error = '不能为空' - - if not error: - user.name = name - user.email = email - user.save() - if len(password) > 0: - user.set_password(password) - user.save() - msg = '修改成功' - - return my_render('juser/change_info.html', locals(), request) - - -@require_role(role='user') -def regen_ssh_key(request): - uuid_r = request.GET.get('uuid', '') - user = get_object(User, uuid=uuid_r) - if not user: - return HttpResponse('没有该用户') - - username = user.username - ssh_key_pass = PyCrypt.gen_rand_pass(16) - gen_ssh_key(username, ssh_key_pass) - return HttpResponse('ssh密钥已生成,密码为 %s, 请到下载页面下载' % ssh_key_pass) - - -@require_role(role='user') -def down_key(request): - if is_role_request(request, 'super'): - uuid_r = request.GET.get('uuid', '') - else: - uuid_r = request.user.uuid - if uuid_r: - user = get_object(User, uuid=uuid_r) - if user: - username = user.username - private_key_file = os.path.join(KEY_DIR, 'user', username+'.pem') - print private_key_file - if os.path.isfile(private_key_file): - f = open(private_key_file) - data = f.read() - f.close() - response = HttpResponse(data, content_type='application/octet-stream') - response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(private_key_file) - if request.user.role == 'CU': - os.unlink(private_key_file) - return response - return HttpResponse('No Key File. Contact Admin.') - diff --git a/keys/README.md b/keys/README.md deleted file mode 100644 index 9e060e41d..000000000 --- a/keys/README.md +++ /dev/null @@ -1,3 +0,0 @@ -看山是山,看水是水 -看山不是山,看水不是水 -看山是山,看水是水 diff --git a/logs/README.md b/logs/README.md deleted file mode 100644 index 309d1a147..000000000 --- a/logs/README.md +++ /dev/null @@ -1 +0,0 @@ -永远年轻,永远热泪盈眶 diff --git a/manage.py b/manage.py deleted file mode 100755 index f72e2bc4a..000000000 --- a/manage.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jumpserver.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/run_server.py b/run_server.py deleted file mode 100755 index 48a5d0467..000000000 --- a/run_server.py +++ /dev/null @@ -1,519 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -import time -import datetime -import json -import os -import sys -import os.path -import threading -import re -import functools -from django.core.signals import request_started, request_finished - -import tornado.ioloop -import tornado.options -import tornado.web -import tornado.websocket -import tornado.httpserver -import tornado.gen -import tornado.httpclient -from tornado.websocket import WebSocketClosedError - -from tornado.options import define, options -from pyinotify import WatchManager, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY, AsyncNotifier -import select - -from connect import Tty, User, Asset, PermRole, logger, get_object, gen_resource -from connect import TtyLog, Log, Session, user_have_perm, get_group_user_perm, MyRunner, ExecLog - -try: - import simplejson as json -except ImportError: - import json - -os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings' -from jumpserver.settings import IP, PORT - -define("port", default=PORT, help="run on the given port", type=int) -define("host", default=IP, help="run port on given host", type=str) -from jlog.views import TermLogRecorder - - -def django_request_support(func): - @functools.wraps(func) - def _deco(*args, **kwargs): - request_started.send_robust(func) - response = func(*args, **kwargs) - request_finished.send_robust(func) - return response - - return _deco - - -def require_auth(role='user'): - def _deco(func): - def _deco2(request, *args, **kwargs): - if request.get_cookie('sessionid'): - session_key = request.get_cookie('sessionid') - else: - session_key = request.get_argument('sessionid', '') - - logger.debug('Websocket: session_key: %s' % session_key) - if session_key: - session = get_object(Session, session_key=session_key) - logger.debug('Websocket: session: %s' % session) - if session and datetime.datetime.now() < session.expire_date: - user_id = session.get_decoded().get('_auth_user_id') - request.user_id = user_id - user = get_object(User, id=user_id) - if user: - logger.debug('Websocket: user [ %s ] request websocket' % user.username) - request.user = user - if role == 'admin': - if user.role in ['SU', 'GA']: - return func(request, *args, **kwargs) - logger.debug('Websocket: user [ %s ] is not admin.' % user.username) - else: - return func(request, *args, **kwargs) - else: - logger.debug('Websocket: session expired: %s' % session_key) - try: - request.close() - except AttributeError: - pass - logger.warning('Websocket: Request auth failed.') - - return _deco2 - - return _deco - - -class MyThread(threading.Thread): - def __init__(self, *args, **kwargs): - super(MyThread, self).__init__(*args, **kwargs) - - def run(self): - try: - super(MyThread, self).run() - except WebSocketClosedError: - pass - - -class EventHandler(ProcessEvent): - def __init__(self, client=None): - self.client = client - - def process_IN_MODIFY(self, event): - self.client.write_message(f.read().decode('utf-8', 'replace')) - - -def file_monitor(path='.', client=None): - wm = WatchManager() - mask = IN_DELETE | IN_CREATE | IN_MODIFY - notifier = AsyncNotifier(wm, EventHandler(client)) - wm.add_watch(path, mask, auto_add=True, rec=True) - if not os.path.isfile(path): - logger.debug("File %s does not exist." % path) - sys.exit(3) - else: - logger.debug("Now starting monitor file %s." % path) - global f - f = open(path, 'r') - st_size = os.stat(path)[6] - f.seek(st_size) - - while True: - try: - notifier.process_events() - if notifier.check_events(): - notifier.read_events() - except KeyboardInterrupt: - print "keyboard Interrupt." - notifier.stop() - break - - -class MonitorHandler(tornado.websocket.WebSocketHandler): - clients = [] - threads = [] - - def __init__(self, *args, **kwargs): - self.file_path = None - super(self.__class__, self).__init__(*args, **kwargs) - - def check_origin(self, origin): - return True - - @django_request_support - @require_auth('admin') - def open(self): - # 获取监控的path - self.file_path = self.get_argument('file_path', '') - MonitorHandler.clients.append(self) - thread = MyThread(target=file_monitor, args=('%s.log' % self.file_path, self)) - MonitorHandler.threads.append(thread) - self.stream.set_nodelay(True) - - try: - for t in MonitorHandler.threads: - if t.is_alive(): - continue - t.setDaemon(True) - t.start() - - except WebSocketClosedError: - client_index = MonitorHandler.clients.index(self) - MonitorHandler.threads[client_index].stop() - MonitorHandler.clients.remove(self) - MonitorHandler.threads.remove(MonitorHandler.threads[client_index]) - - logger.debug("Websocket: Monitor client num: %s, thread num: %s" % (len(MonitorHandler.clients), - len(MonitorHandler.threads))) - - def on_message(self, message): - # 监控日志,发生变动发向客户端 - pass - - def on_close(self): - # 客户端主动关闭 - # self.close() - - logger.debug("Websocket: Monitor client close request") - try: - client_index = MonitorHandler.clients.index(self) - MonitorHandler.clients.remove(self) - MonitorHandler.threads.remove(MonitorHandler.threads[client_index]) - except ValueError: - pass - - -class WebTty(Tty): - def __init__(self, *args, **kwargs): - super(WebTty, self).__init__(*args, **kwargs) - self.ws = None - self.data = '' - self.input_mode = False - - -class WebTerminalKillHandler(tornado.web.RequestHandler): - @django_request_support - @require_auth('admin') - def get(self): - ws_id = self.get_argument('id') - Log.objects.filter(id=ws_id).update(is_finished=True) - for ws in WebTerminalHandler.clients: - if ws.id == int(ws_id): - logger.debug("Kill log id %s" % ws_id) - ws.log.save() - ws.close() - logger.debug('Websocket: web terminal client num: %s' % len(WebTerminalHandler.clients)) - - -class ExecHandler(tornado.websocket.WebSocketHandler): - clients = [] - tasks = [] - - def __init__(self, *args, **kwargs): - self.id = 0 - self.user = None - self.role = None - self.runner = None - self.assets = [] - self.perm = {} - self.remote_ip = '' - super(ExecHandler, self).__init__(*args, **kwargs) - - def check_origin(self, origin): - return True - - @django_request_support - @require_auth('user') - def open(self): - logger.debug('Websocket: Open exec request') - role_name = self.get_argument('role', 'sb') - self.remote_ip = self.request.headers.get("X-Real-IP") - if not self.remote_ip: - self.remote_ip = self.request.remote_ip - logger.debug('Web执行命令: 请求系统用户 %s' % role_name) - self.role = get_object(PermRole, name=role_name) - self.perm = get_group_user_perm(self.user) - roles = self.perm.get('role').keys() - if self.role not in roles: - self.write_message('No perm that role %s' % role_name) - self.close() - self.assets = self.perm.get('role').get(self.role).get('asset') - - res = gen_resource({'user': self.user, 'asset': self.assets, 'role': self.role}) - self.runner = MyRunner(res) - message = '有权限的主机: ' + ', '.join([asset.hostname for asset in self.assets]) - self.__class__.clients.append(self) - self.write_message(message) - - def on_message(self, message): - data = json.loads(message) - pattern = data.get('pattern', '') - self.command = data.get('command', '') - self.asset_name_str = '' - if pattern and self.command: - for inv in self.runner.inventory.get_hosts(pattern=pattern): - self.asset_name_str += '%s ' % inv.name - self.write_message('匹配主机: ' + self.asset_name_str) - self.write_message('Ansible> %s\n\n' % self.command) - self.__class__.tasks.append(MyThread(target=self.run_cmd, args=(self.command, pattern))) - - for t in self.__class__.tasks: - if t.is_alive(): - continue - try: - t.setDaemon(True) - t.start() - except RuntimeError: - pass - - def run_cmd(self, command, pattern): - self.runner.run('shell', command, pattern=pattern) - ExecLog(host=self.asset_name_str, cmd=self.command, user=self.user.username, - remote_ip=self.remote_ip, result=self.runner.results).save() - newline_pattern = re.compile(r'\n') - for k, v in self.runner.results.items(): - for host, output in v.items(): - output = newline_pattern.sub('
      ', output) - if k == 'ok': - header = "[ %s => %s]\n" % (host, 'Ok') - else: - header = "[ %s => %s]\n" % (host, 'failed') - self.write_message(header) - self.write_message(output) - - self.write_message('\n~o~ Task finished ~o~\n') - - def on_close(self): - logger.debug('关闭web_exec请求') - - -class WebTerminalHandler(tornado.websocket.WebSocketHandler): - clients = [] - tasks = [] - - def __init__(self, *args, **kwargs): - self.term = None - self.log_file_f = None - self.log_time_f = None - self.log = None - self.id = 0 - self.user = None - self.ssh = None - self.channel = None - super(WebTerminalHandler, self).__init__(*args, **kwargs) - - def check_origin(self, origin): - return True - - @django_request_support - @require_auth('user') - def open(self): - logger.debug('Websocket: Open request') - role_name = self.get_argument('role', 'sb') - asset_id = self.get_argument('id', 9999) - asset = get_object(Asset, id=asset_id) - self.termlog = TermLogRecorder(User.objects.get(id=self.user_id)) - if asset: - roles = user_have_perm(self.user, asset) - logger.debug(roles) - logger.debug('系统用户: %s' % role_name) - login_role = '' - for role in roles: - if role.name == role_name: - login_role = role - break - if not login_role: - logger.warning('Websocket: Not that Role %s for Host: %s User: %s ' % (role_name, asset.hostname, - self.user.username)) - self.close() - return - else: - logger.warning('Websocket: No that Host: %s User: %s ' % (asset_id, self.user.username)) - self.close() - return - logger.debug('Websocket: request web terminal Host: %s User: %s Role: %s' % (asset.hostname, self.user.username, - login_role.name)) - self.term = WebTty(self.user, asset, login_role, login_type='web') - # self.term.remote_ip = self.request.remote_ip - self.term.remote_ip = self.request.headers.get("X-Real-IP") - if not self.term.remote_ip: - self.term.remote_ip = self.request.remote_ip - self.ssh = self.term.get_connection() - self.channel = self.ssh.invoke_shell(term='xterm') - WebTerminalHandler.tasks.append(MyThread(target=self.forward_outbound)) - WebTerminalHandler.clients.append(self) - - for t in WebTerminalHandler.tasks: - if t.is_alive(): - continue - try: - t.setDaemon(True) - t.start() - except RuntimeError: - pass - - def on_message(self, message): - jsondata = json.loads(message) - if not jsondata: - return - - if 'resize' in jsondata.get('data'): - self.termlog.write(message) - self.channel.resize_pty( - width=int(jsondata.get('data').get('resize').get('cols', 100)), - height=int(jsondata.get('data').get('resize').get('rows', 35)) - ) - elif jsondata.get('data'): - self.termlog.recoder = True - self.term.input_mode = True - if str(jsondata['data']) in ['\r', '\n', '\r\n']: - match = re.compile(r'\x1b\[\?1049', re.X).findall(self.term.vim_data) - if match: - if self.term.vim_flag or len(match) == 2: - self.term.vim_flag = False - else: - self.term.vim_flag = True - elif not self.term.vim_flag: - result = self.term.deal_command(self.term.data)[0:200] - if len(result) > 0: - TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=result).save() - self.term.vim_data = '' - self.term.data = '' - self.term.input_mode = False - self.channel.send(jsondata['data']) - else: - pass - - def on_close(self): - logger.debug('Websocket: Close request') - print self.termlog.CMD - self.termlog.save() - if self in WebTerminalHandler.clients: - WebTerminalHandler.clients.remove(self) - try: - self.log_file_f.write('End time is %s' % datetime.datetime.now()) - self.log.is_finished = True - self.log.end_time = datetime.datetime.now() - self.log.filename = self.termlog.filename - self.log.save() - self.log_time_f.close() - self.ssh.close() - self.close() - except AttributeError: - pass - - def forward_outbound(self): - self.log_file_f, self.log_time_f, self.log = self.term.get_log() - self.id = self.log.id - self.termlog.setid(self.id) - try: - data = '' - pre_timestamp = time.time() - while True: - r, w, e = select.select([self.channel, sys.stdin], [], []) - if self.channel in r: - recv = self.channel.recv(1024) - if not len(recv): - return - data += recv - self.term.vim_data += recv - try: - self.write_message(data.decode('utf-8', 'replace')) - self.termlog.write(data) - self.termlog.recoder = False - now_timestamp = time.time() - self.log_time_f.write('%s %s\n' % (round(now_timestamp - pre_timestamp, 4), len(data))) - self.log_file_f.write(data) - pre_timestamp = now_timestamp - self.log_file_f.flush() - self.log_time_f.flush() - if self.term.input_mode: - self.term.data += data - data = '' - except UnicodeDecodeError: - pass - except IndexError: - pass - - -# class MonitorHandler(WebTerminalHandler): -# @django_request_support -# @require_auth('user') -# def open(self): -# try: -# self.returnlog = TermLogRecorder.loglist[self.get_argument('id')] -# self.returnlog.write_message = self.write_message -# except: -# self.write_message('Log is None') -# self.close() -# -# def on_message(self, message): -# pass -# -# def on_close(self): -# self.close() - - -class Application(tornado.web.Application): - def __init__(self): - handlers = [ - (r'/monitor', MonitorHandler), - (r'/terminal', WebTerminalHandler), - (r'/kill', WebTerminalKillHandler), - (r'/exec', ExecHandler), - ] - - setting = { - 'cookie_secret': 'DFksdfsasdfkasdfFKwlwfsdfsa1204mx', - 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), - 'static_path': os.path.join(os.path.dirname(__file__), 'static'), - 'debug': False, - } - - tornado.web.Application.__init__(self, handlers, **setting) - - -def main(): - from django.core.wsgi import get_wsgi_application - import tornado.wsgi - wsgi_app = get_wsgi_application() - container = tornado.wsgi.WSGIContainer(wsgi_app) - setting = { - 'cookie_secret': 'DFksdfsasdfkasdfFKwlwfsdfsa1204mx', - 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), - 'static_path': os.path.join(os.path.dirname(__file__), 'static'), - 'debug': False, - } - tornado_app = tornado.web.Application( - [ - (r'/ws/monitor', MonitorHandler), - (r'/ws/terminal', WebTerminalHandler), - (r'/kill', WebTerminalKillHandler), - (r'/ws/exec', ExecHandler), - (r"/static/(.*)", tornado.web.StaticFileHandler, - dict(path=os.path.join(os.path.dirname(__file__), "static"))), - ('.*', tornado.web.FallbackHandler, dict(fallback=container)), - ], **setting) - - server = tornado.httpserver.HTTPServer(tornado_app) - server.listen(options.port, address=IP) - - tornado.ioloop.IOLoop.instance().start() - - -if __name__ == '__main__': - # tornado.options.parse_command_line() - # app = Application() - # server = tornado.httpserver.HTTPServer(app) - # server.bind(options.port, options.host) - # #server.listen(options.port) - # server.start(num_processes=5) - # tornado.ioloop.IOLoop.instance().start() - print "Run server on %s:%s" % (options.host, options.port) - main() diff --git a/service.sh b/service.sh deleted file mode 100755 index 929c319e9..000000000 --- a/service.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# jumpserver Startup script for the jumpserver Server -# -# chkconfig: - 85 12 -# description: Open source detecting system -# processname: jumpserver -# Date: 2016-02-27 -# Version: 3.0.1 -# Site: http://www.jumpserver.org -# Author: Jumpserver Team - -jumpserver_dir= - -base_dir=$(dirname $0) -jumpserver_dir=${jumpserver_dir:-$base_dir} -export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin - -if [ -f ${jumpserver_dir}/install/functions ];then - . ${jumpserver_dir}/install/functions -elif [ -f /etc/init.d/functions ];then - . /etc/init.d/functions -else - echo "No functions script found in [./functions, ./install/functions, /etc/init.d/functions]" - exit 1 -fi - -PROC_NAME="jumpserver" -lockfile=/var/lock/subsys/${PROC_NAME} - -start() { - jump_start=$"Starting ${PROC_NAME} service:" - if [ -f $lockfile ];then - echo -n "jumpserver is running..." - success "$jump_start" - echo - else - daemon python $jumpserver_dir/manage.py crontab add &>> /var/log/jumpserver.log 2>&1 - daemon python $jumpserver_dir/run_server.py &> /dev/null 2>&1 & - sleep 1 - echo -n "$jump_start" - ps axu | grep 'run_server' | grep -v 'grep' &> /dev/null - if [ $? == '0' ];then - success "$jump_start" - if [ ! -e $lockfile ]; then - lockfile_dir=`dirname $lockfile` - mkdir -pv $lockfile_dir - fi - touch "$lockfile" - echo - else - failure "$jump_start" - echo - fi - fi -} - - -stop() { - echo -n $"Stopping ${PROC_NAME} service:" - daemon python $jumpserver_dir/manage.py crontab remove &>> /var/log/jumpserver.log 2>&1 - ps aux | grep -E 'run_server.py' | grep -v grep | awk '{print $2}' | xargs kill -9 &> /dev/null - ret=$? - if [ $ret -eq 0 ]; then - echo_success - echo - rm -f "$lockfile" - else - echo_failure - echo - rm -f "$lockfile" - fi - -} - -status(){ - ps axu | grep 'run_server' | grep -v 'grep' &> /dev/null - if [ $? == '0' ];then - echo -n "jumpserver is running..." - success - touch "$lockfile" - echo - else - echo -n "jumpserver is not running." - failure - echo - fi -} - - - -restart(){ - stop - start -} - -# See how we were called. -case "$1" in - start) - start - ;; - stop) - stop - ;; - - restart) - restart - ;; - - status) - status - ;; - *) - echo $"Usage: $0 {start|stop|restart|status}" - exit 2 -esac diff --git a/static/css/animate.css b/static/css/animate.css deleted file mode 100644 index 0f9fba11e..000000000 --- a/static/css/animate.css +++ /dev/null @@ -1,2848 +0,0 @@ -@charset "UTF-8"; - -/*! -Animate.css - http://daneden.me/animate -Licensed under the MIT license - -Copyright (c) 2013 Daniel Eden - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -.animated { - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - z-index: 100; -} - -.animated.infinite { - -webkit-animation-iteration-count: infinite; - animation-iteration-count: infinite; -} - -.animated.hinge { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} - -@-webkit-keyframes bounce { - 0%, 20%, 50%, 80%, 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 40% { - -webkit-transform: translateY(-30px); - transform: translateY(-30px); - } - - 60% { - -webkit-transform: translateY(-15px); - transform: translateY(-15px); - } -} - -@keyframes bounce { - 0%, 20%, 50%, 80%, 100% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 40% { - -webkit-transform: translateY(-30px); - -ms-transform: translateY(-30px); - transform: translateY(-30px); - } - - 60% { - -webkit-transform: translateY(-15px); - -ms-transform: translateY(-15px); - transform: translateY(-15px); - } -} - -.bounce { - -webkit-animation-name: bounce; - animation-name: bounce; -} - -@-webkit-keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -@keyframes flash { - 0%, 50%, 100% { - opacity: 1; - } - - 25%, 75% { - opacity: 0; - } -} - -.flash { - -webkit-animation-name: flash; - animation-name: flash; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes pulse { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 50% { - -webkit-transform: scale(1.1); - transform: scale(1.1); - } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} - -@keyframes pulse { - 0% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } - - 50% { - -webkit-transform: scale(1.1); - -ms-transform: scale(1.1); - transform: scale(1.1); - } - - 100% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } -} - -.pulse { - -webkit-animation-name: pulse; - animation-name: pulse; -} - -@-webkit-keyframes rubberBand { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 30% { - -webkit-transform: scaleX(1.25) scaleY(0.75); - transform: scaleX(1.25) scaleY(0.75); - } - - 40% { - -webkit-transform: scaleX(0.75) scaleY(1.25); - transform: scaleX(0.75) scaleY(1.25); - } - - 60% { - -webkit-transform: scaleX(1.15) scaleY(0.85); - transform: scaleX(1.15) scaleY(0.85); - } - - 100% { - -webkit-transform: scale(1); - transform: scale(1); - } -} - -@keyframes rubberBand { - 0% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } - - 30% { - -webkit-transform: scaleX(1.25) scaleY(0.75); - -ms-transform: scaleX(1.25) scaleY(0.75); - transform: scaleX(1.25) scaleY(0.75); - } - - 40% { - -webkit-transform: scaleX(0.75) scaleY(1.25); - -ms-transform: scaleX(0.75) scaleY(1.25); - transform: scaleX(0.75) scaleY(1.25); - } - - 60% { - -webkit-transform: scaleX(1.15) scaleY(0.85); - -ms-transform: scaleX(1.15) scaleY(0.85); - transform: scaleX(1.15) scaleY(0.85); - } - - 100% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } -} - -.rubberBand { - -webkit-animation-name: rubberBand; - animation-name: rubberBand; -} - -@-webkit-keyframes shake { - 0%, 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translateX(-10px); - transform: translateX(-10px); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translateX(10px); - transform: translateX(10px); - } -} - -@keyframes shake { - 0%, 100% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 10%, 30%, 50%, 70%, 90% { - -webkit-transform: translateX(-10px); - -ms-transform: translateX(-10px); - transform: translateX(-10px); - } - - 20%, 40%, 60%, 80% { - -webkit-transform: translateX(10px); - -ms-transform: translateX(10px); - transform: translateX(10px); - } -} - -.shake { - -webkit-animation-name: shake; - animation-name: shake; -} - -@-webkit-keyframes swing { - 20% { - -webkit-transform: rotate(15deg); - transform: rotate(15deg); - } - - 40% { - -webkit-transform: rotate(-10deg); - transform: rotate(-10deg); - } - - 60% { - -webkit-transform: rotate(5deg); - transform: rotate(5deg); - } - - 80% { - -webkit-transform: rotate(-5deg); - transform: rotate(-5deg); - } - - 100% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } -} - -@keyframes swing { - 20% { - -webkit-transform: rotate(15deg); - -ms-transform: rotate(15deg); - transform: rotate(15deg); - } - - 40% { - -webkit-transform: rotate(-10deg); - -ms-transform: rotate(-10deg); - transform: rotate(-10deg); - } - - 60% { - -webkit-transform: rotate(5deg); - -ms-transform: rotate(5deg); - transform: rotate(5deg); - } - - 80% { - -webkit-transform: rotate(-5deg); - -ms-transform: rotate(-5deg); - transform: rotate(-5deg); - } - - 100% { - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); - } -} - -.swing { - -webkit-transform-origin: top center; - -ms-transform-origin: top center; - transform-origin: top center; - -webkit-animation-name: swing; - animation-name: swing; -} - -@-webkit-keyframes tada { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 10%, 20% { - -webkit-transform: scale(0.9) rotate(-3deg); - transform: scale(0.9) rotate(-3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale(1.1) rotate(3deg); - transform: scale(1.1) rotate(3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale(1.1) rotate(-3deg); - transform: scale(1.1) rotate(-3deg); - } - - 100% { - -webkit-transform: scale(1) rotate(0); - transform: scale(1) rotate(0); - } -} - -@keyframes tada { - 0% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } - - 10%, 20% { - -webkit-transform: scale(0.9) rotate(-3deg); - -ms-transform: scale(0.9) rotate(-3deg); - transform: scale(0.9) rotate(-3deg); - } - - 30%, 50%, 70%, 90% { - -webkit-transform: scale(1.1) rotate(3deg); - -ms-transform: scale(1.1) rotate(3deg); - transform: scale(1.1) rotate(3deg); - } - - 40%, 60%, 80% { - -webkit-transform: scale(1.1) rotate(-3deg); - -ms-transform: scale(1.1) rotate(-3deg); - transform: scale(1.1) rotate(-3deg); - } - - 100% { - -webkit-transform: scale(1) rotate(0); - -ms-transform: scale(1) rotate(0); - transform: scale(1) rotate(0); - } -} - -.tada { - -webkit-animation-name: tada; - animation-name: tada; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes wobble { - 0% { - -webkit-transform: translateX(0%); - transform: translateX(0%); - } - - 15% { - -webkit-transform: translateX(-25%) rotate(-5deg); - transform: translateX(-25%) rotate(-5deg); - } - - 30% { - -webkit-transform: translateX(20%) rotate(3deg); - transform: translateX(20%) rotate(3deg); - } - - 45% { - -webkit-transform: translateX(-15%) rotate(-3deg); - transform: translateX(-15%) rotate(-3deg); - } - - 60% { - -webkit-transform: translateX(10%) rotate(2deg); - transform: translateX(10%) rotate(2deg); - } - - 75% { - -webkit-transform: translateX(-5%) rotate(-1deg); - transform: translateX(-5%) rotate(-1deg); - } - - 100% { - -webkit-transform: translateX(0%); - transform: translateX(0%); - } -} - -@keyframes wobble { - 0% { - -webkit-transform: translateX(0%); - -ms-transform: translateX(0%); - transform: translateX(0%); - } - - 15% { - -webkit-transform: translateX(-25%) rotate(-5deg); - -ms-transform: translateX(-25%) rotate(-5deg); - transform: translateX(-25%) rotate(-5deg); - } - - 30% { - -webkit-transform: translateX(20%) rotate(3deg); - -ms-transform: translateX(20%) rotate(3deg); - transform: translateX(20%) rotate(3deg); - } - - 45% { - -webkit-transform: translateX(-15%) rotate(-3deg); - -ms-transform: translateX(-15%) rotate(-3deg); - transform: translateX(-15%) rotate(-3deg); - } - - 60% { - -webkit-transform: translateX(10%) rotate(2deg); - -ms-transform: translateX(10%) rotate(2deg); - transform: translateX(10%) rotate(2deg); - } - - 75% { - -webkit-transform: translateX(-5%) rotate(-1deg); - -ms-transform: translateX(-5%) rotate(-1deg); - transform: translateX(-5%) rotate(-1deg); - } - - 100% { - -webkit-transform: translateX(0%); - -ms-transform: translateX(0%); - transform: translateX(0%); - } -} - -.wobble { - -webkit-animation-name: wobble; - animation-name: wobble; -} - -@-webkit-keyframes bounceIn { - 0% { - opacity: 0; - -webkit-transform: scale(.3); - transform: scale(.3); - } - - 50% { - opacity: 1; - -webkit-transform: scale(1.05); - transform: scale(1.05); - } - - 70% { - -webkit-transform: scale(.9); - transform: scale(.9); - } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - transform: scale(1); - } -} - -@keyframes bounceIn { - 0% { - opacity: 0; - -webkit-transform: scale(.3); - -ms-transform: scale(.3); - transform: scale(.3); - } - - 50% { - opacity: 1; - -webkit-transform: scale(1.05); - -ms-transform: scale(1.05); - transform: scale(1.05); - } - - 70% { - -webkit-transform: scale(.9); - -ms-transform: scale(.9); - transform: scale(.9); - } - - 100% { - opacity: 1; - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } -} - -.bounceIn { - -webkit-animation-name: bounceIn; - animation-name: bounceIn; -} - -@-webkit-keyframes bounceInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateY(30px); - transform: translateY(30px); - } - - 80% { - -webkit-transform: translateY(-10px); - transform: translateY(-10px); - } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes bounceInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateY(30px); - -ms-transform: translateY(30px); - transform: translateY(30px); - } - - 80% { - -webkit-transform: translateY(-10px); - -ms-transform: translateY(-10px); - transform: translateY(-10px); - } - - 100% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.bounceInDown { - -webkit-animation-name: bounceInDown; - animation-name: bounceInDown; -} - -@-webkit-keyframes bounceInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateX(30px); - transform: translateX(30px); - } - - 80% { - -webkit-transform: translateX(-10px); - transform: translateX(-10px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes bounceInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateX(30px); - -ms-transform: translateX(30px); - transform: translateX(30px); - } - - 80% { - -webkit-transform: translateX(-10px); - -ms-transform: translateX(-10px); - transform: translateX(-10px); - } - - 100% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.bounceInLeft { - -webkit-animation-name: bounceInLeft; - animation-name: bounceInLeft; -} - -@-webkit-keyframes bounceInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateX(-30px); - transform: translateX(-30px); - } - - 80% { - -webkit-transform: translateX(10px); - transform: translateX(10px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes bounceInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateX(-30px); - -ms-transform: translateX(-30px); - transform: translateX(-30px); - } - - 80% { - -webkit-transform: translateX(10px); - -ms-transform: translateX(10px); - transform: translateX(10px); - } - - 100% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.bounceInRight { - -webkit-animation-name: bounceInRight; - animation-name: bounceInRight; -} - -@-webkit-keyframes bounceInUp { - 0% { - opacity: 0; - -webkit-transform: translateY(2000px); - transform: translateY(2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateY(-30px); - transform: translateY(-30px); - } - - 80% { - -webkit-transform: translateY(10px); - transform: translateY(10px); - } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes bounceInUp { - 0% { - opacity: 0; - -webkit-transform: translateY(2000px); - -ms-transform: translateY(2000px); - transform: translateY(2000px); - } - - 60% { - opacity: 1; - -webkit-transform: translateY(-30px); - -ms-transform: translateY(-30px); - transform: translateY(-30px); - } - - 80% { - -webkit-transform: translateY(10px); - -ms-transform: translateY(10px); - transform: translateY(10px); - } - - 100% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.bounceInUp { - -webkit-animation-name: bounceInUp; - animation-name: bounceInUp; -} - -@-webkit-keyframes bounceOut { - 0% { - -webkit-transform: scale(1); - transform: scale(1); - } - - 25% { - -webkit-transform: scale(.95); - transform: scale(.95); - } - - 50% { - opacity: 1; - -webkit-transform: scale(1.1); - transform: scale(1.1); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.3); - transform: scale(.3); - } -} - -@keyframes bounceOut { - 0% { - -webkit-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - } - - 25% { - -webkit-transform: scale(.95); - -ms-transform: scale(.95); - transform: scale(.95); - } - - 50% { - opacity: 1; - -webkit-transform: scale(1.1); - -ms-transform: scale(1.1); - transform: scale(1.1); - } - - 100% { - opacity: 0; - -webkit-transform: scale(.3); - -ms-transform: scale(.3); - transform: scale(.3); - } -} - -.bounceOut { - -webkit-animation-name: bounceOut; - animation-name: bounceOut; -} - -@-webkit-keyframes bounceOutDown { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateY(-20px); - transform: translateY(-20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -@keyframes bounceOutDown { - 0% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateY(-20px); - -ms-transform: translateY(-20px); - transform: translateY(-20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - -ms-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -.bounceOutDown { - -webkit-animation-name: bounceOutDown; - animation-name: bounceOutDown; -} - -@-webkit-keyframes bounceOutLeft { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateX(20px); - transform: translateX(20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -@keyframes bounceOutLeft { - 0% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateX(20px); - -ms-transform: translateX(20px); - transform: translateX(20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -.bounceOutLeft { - -webkit-animation-name: bounceOutLeft; - animation-name: bounceOutLeft; -} - -@-webkit-keyframes bounceOutRight { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateX(-20px); - transform: translateX(-20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -@keyframes bounceOutRight { - 0% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateX(-20px); - -ms-transform: translateX(-20px); - transform: translateX(-20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -.bounceOutRight { - -webkit-animation-name: bounceOutRight; - animation-name: bounceOutRight; -} - -@-webkit-keyframes bounceOutUp { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateY(20px); - transform: translateY(20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -@keyframes bounceOutUp { - 0% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 20% { - opacity: 1; - -webkit-transform: translateY(20px); - -ms-transform: translateY(20px); - transform: translateY(20px); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -.bounceOutUp { - -webkit-animation-name: bounceOutUp; - animation-name: bounceOutUp; -} - -@-webkit-keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -@keyframes fadeIn { - 0% { - opacity: 0; - } - - 100% { - opacity: 1; - } -} - -.fadeIn { - -webkit-animation-name: fadeIn; - animation-name: fadeIn; -} - -@-webkit-keyframes fadeInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-20px); - transform: translateY(-20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes fadeInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-20px); - -ms-transform: translateY(-20px); - transform: translateY(-20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.fadeInDown { - -webkit-animation-name: fadeInDown; - animation-name: fadeInDown; -} - -@-webkit-keyframes fadeInDownBig { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes fadeInDownBig { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.fadeInDownBig { - -webkit-animation-name: fadeInDownBig; - animation-name: fadeInDownBig; -} - -@-webkit-keyframes fadeInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-20px); - transform: translateX(-20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes fadeInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-20px); - -ms-transform: translateX(-20px); - transform: translateX(-20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.fadeInLeft { - -webkit-animation-name: fadeInLeft; - animation-name: fadeInLeft; -} - -@-webkit-keyframes fadeInLeftBig { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes fadeInLeftBig { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.fadeInLeftBig { - -webkit-animation-name: fadeInLeftBig; - animation-name: fadeInLeftBig; -} - -@-webkit-keyframes fadeInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(20px); - transform: translateX(20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes fadeInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(40px); - -ms-transform: translateX(40px); - transform: translateX(40px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.fadeInRight { - -webkit-animation-name: fadeInRight; - animation-name: fadeInRight; -} - -@-webkit-keyframes fadeInRightBig { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes fadeInRightBig { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.fadeInRightBig { - -webkit-animation-name: fadeInRightBig; - animation-name: fadeInRightBig; -} - -@-webkit-keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translateY(20px); - transform: translateY(20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes fadeInUp { - 0% { - opacity: 0; - -webkit-transform: translateY(20px); - -ms-transform: translateY(20px); - transform: translateY(20px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.fadeInUp { - -webkit-animation-name: fadeInUp; - animation-name: fadeInUp; -} - -@-webkit-keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translateY(2000px); - transform: translateY(2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes fadeInUpBig { - 0% { - opacity: 0; - -webkit-transform: translateY(2000px); - -ms-transform: translateY(2000px); - transform: translateY(2000px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.fadeInUpBig { - -webkit-animation-name: fadeInUpBig; - animation-name: fadeInUpBig; -} - -@-webkit-keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -@keyframes fadeOut { - 0% { - opacity: 1; - } - - 100% { - opacity: 0; - } -} - -.fadeOut { - -webkit-animation-name: fadeOut; - animation-name: fadeOut; -} - -@-webkit-keyframes fadeOutDown { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(20px); - transform: translateY(20px); - } -} - -@keyframes fadeOutDown { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(20px); - -ms-transform: translateY(20px); - transform: translateY(20px); - } -} - -.fadeOutDown { - -webkit-animation-name: fadeOutDown; - animation-name: fadeOutDown; -} - -@-webkit-keyframes fadeOutDownBig { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -@keyframes fadeOutDownBig { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - -ms-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -.fadeOutDownBig { - -webkit-animation-name: fadeOutDownBig; - animation-name: fadeOutDownBig; -} - -@-webkit-keyframes fadeOutLeft { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-20px); - transform: translateX(-20px); - } -} - -@keyframes fadeOutLeft { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-20px); - -ms-transform: translateX(-20px); - transform: translateX(-20px); - } -} - -.fadeOutLeft { - -webkit-animation-name: fadeOutLeft; - animation-name: fadeOutLeft; -} - -@-webkit-keyframes fadeOutLeftBig { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -@keyframes fadeOutLeftBig { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -.fadeOutLeftBig { - -webkit-animation-name: fadeOutLeftBig; - animation-name: fadeOutLeftBig; -} - -@-webkit-keyframes fadeOutRight { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(20px); - transform: translateX(20px); - } -} - -@keyframes fadeOutRight { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(20px); - -ms-transform: translateX(20px); - transform: translateX(20px); - } -} - -.fadeOutRight { - -webkit-animation-name: fadeOutRight; - animation-name: fadeOutRight; -} - -@-webkit-keyframes fadeOutRightBig { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -@keyframes fadeOutRightBig { - 0% { - opacity: 1; - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -.fadeOutRightBig { - -webkit-animation-name: fadeOutRightBig; - animation-name: fadeOutRightBig; -} - -@-webkit-keyframes fadeOutUp { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-20px); - transform: translateY(-20px); - } -} - -@keyframes fadeOutUp { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-20px); - -ms-transform: translateY(-20px); - transform: translateY(-20px); - } -} - -.fadeOutUp { - -webkit-animation-name: fadeOutUp; - animation-name: fadeOutUp; -} - -@-webkit-keyframes fadeOutUpBig { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -@keyframes fadeOutUpBig { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -.fadeOutUpBig { - -webkit-animation-name: fadeOutUpBig; - animation-name: fadeOutUpBig; -} - -@-webkit-keyframes flip { - 0% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); - transform: perspective(400px) translateZ(0) rotateY(0) scale(1); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); - transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); - transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); - transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 100% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); - transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -@keyframes flip { - 0% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); - -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1); - transform: perspective(400px) translateZ(0) rotateY(0) scale(1); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 40% { - -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); - -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); - transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1); - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; - } - - 50% { - -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); - -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); - transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 80% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); - -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); - transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } - - 100% { - -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); - -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); - transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1); - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; - } -} - -.animated.flip { - -webkit-backface-visibility: visible; - -ms-backface-visibility: visible; - backface-visibility: visible; - -webkit-animation-name: flip; - animation-name: flip; -} - -@-webkit-keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotateX(90deg); - transform: perspective(400px) rotateX(90deg); - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotateX(-10deg); - transform: perspective(400px) rotateX(-10deg); - } - - 70% { - -webkit-transform: perspective(400px) rotateX(10deg); - transform: perspective(400px) rotateX(10deg); - } - - 100% { - -webkit-transform: perspective(400px) rotateX(0deg); - transform: perspective(400px) rotateX(0deg); - opacity: 1; - } -} - -@keyframes flipInX { - 0% { - -webkit-transform: perspective(400px) rotateX(90deg); - -ms-transform: perspective(400px) rotateX(90deg); - transform: perspective(400px) rotateX(90deg); - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotateX(-10deg); - -ms-transform: perspective(400px) rotateX(-10deg); - transform: perspective(400px) rotateX(-10deg); - } - - 70% { - -webkit-transform: perspective(400px) rotateX(10deg); - -ms-transform: perspective(400px) rotateX(10deg); - transform: perspective(400px) rotateX(10deg); - } - - 100% { - -webkit-transform: perspective(400px) rotateX(0deg); - -ms-transform: perspective(400px) rotateX(0deg); - transform: perspective(400px) rotateX(0deg); - opacity: 1; - } -} - -.flipInX { - -webkit-backface-visibility: visible !important; - -ms-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInX; - animation-name: flipInX; -} - -@-webkit-keyframes flipInY { - 0% { - -webkit-transform: perspective(400px) rotateY(90deg); - transform: perspective(400px) rotateY(90deg); - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotateY(-10deg); - transform: perspective(400px) rotateY(-10deg); - } - - 70% { - -webkit-transform: perspective(400px) rotateY(10deg); - transform: perspective(400px) rotateY(10deg); - } - - 100% { - -webkit-transform: perspective(400px) rotateY(0deg); - transform: perspective(400px) rotateY(0deg); - opacity: 1; - } -} - -@keyframes flipInY { - 0% { - -webkit-transform: perspective(400px) rotateY(90deg); - -ms-transform: perspective(400px) rotateY(90deg); - transform: perspective(400px) rotateY(90deg); - opacity: 0; - } - - 40% { - -webkit-transform: perspective(400px) rotateY(-10deg); - -ms-transform: perspective(400px) rotateY(-10deg); - transform: perspective(400px) rotateY(-10deg); - } - - 70% { - -webkit-transform: perspective(400px) rotateY(10deg); - -ms-transform: perspective(400px) rotateY(10deg); - transform: perspective(400px) rotateY(10deg); - } - - 100% { - -webkit-transform: perspective(400px) rotateY(0deg); - -ms-transform: perspective(400px) rotateY(0deg); - transform: perspective(400px) rotateY(0deg); - opacity: 1; - } -} - -.flipInY { - -webkit-backface-visibility: visible !important; - -ms-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipInY; - animation-name: flipInY; -} - -@-webkit-keyframes flipOutX { - 0% { - -webkit-transform: perspective(400px) rotateX(0deg); - transform: perspective(400px) rotateX(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotateX(90deg); - transform: perspective(400px) rotateX(90deg); - opacity: 0; - } -} - -@keyframes flipOutX { - 0% { - -webkit-transform: perspective(400px) rotateX(0deg); - -ms-transform: perspective(400px) rotateX(0deg); - transform: perspective(400px) rotateX(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotateX(90deg); - -ms-transform: perspective(400px) rotateX(90deg); - transform: perspective(400px) rotateX(90deg); - opacity: 0; - } -} - -.flipOutX { - -webkit-animation-name: flipOutX; - animation-name: flipOutX; - -webkit-backface-visibility: visible !important; - -ms-backface-visibility: visible !important; - backface-visibility: visible !important; -} - -@-webkit-keyframes flipOutY { - 0% { - -webkit-transform: perspective(400px) rotateY(0deg); - transform: perspective(400px) rotateY(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotateY(90deg); - transform: perspective(400px) rotateY(90deg); - opacity: 0; - } -} - -@keyframes flipOutY { - 0% { - -webkit-transform: perspective(400px) rotateY(0deg); - -ms-transform: perspective(400px) rotateY(0deg); - transform: perspective(400px) rotateY(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: perspective(400px) rotateY(90deg); - -ms-transform: perspective(400px) rotateY(90deg); - transform: perspective(400px) rotateY(90deg); - opacity: 0; - } -} - -.flipOutY { - -webkit-backface-visibility: visible !important; - -ms-backface-visibility: visible !important; - backface-visibility: visible !important; - -webkit-animation-name: flipOutY; - animation-name: flipOutY; -} - -@-webkit-keyframes lightSpeedIn { - 0% { - -webkit-transform: translateX(100%) skewX(-30deg); - transform: translateX(100%) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: translateX(-20%) skewX(30deg); - transform: translateX(-20%) skewX(30deg); - opacity: 1; - } - - 80% { - -webkit-transform: translateX(0%) skewX(-15deg); - transform: translateX(0%) skewX(-15deg); - opacity: 1; - } - - 100% { - -webkit-transform: translateX(0%) skewX(0deg); - transform: translateX(0%) skewX(0deg); - opacity: 1; - } -} - -@keyframes lightSpeedIn { - 0% { - -webkit-transform: translateX(100%) skewX(-30deg); - -ms-transform: translateX(100%) skewX(-30deg); - transform: translateX(100%) skewX(-30deg); - opacity: 0; - } - - 60% { - -webkit-transform: translateX(-20%) skewX(30deg); - -ms-transform: translateX(-20%) skewX(30deg); - transform: translateX(-20%) skewX(30deg); - opacity: 1; - } - - 80% { - -webkit-transform: translateX(0%) skewX(-15deg); - -ms-transform: translateX(0%) skewX(-15deg); - transform: translateX(0%) skewX(-15deg); - opacity: 1; - } - - 100% { - -webkit-transform: translateX(0%) skewX(0deg); - -ms-transform: translateX(0%) skewX(0deg); - transform: translateX(0%) skewX(0deg); - opacity: 1; - } -} - -.lightSpeedIn { - -webkit-animation-name: lightSpeedIn; - animation-name: lightSpeedIn; - -webkit-animation-timing-function: ease-out; - animation-timing-function: ease-out; -} - -@-webkit-keyframes lightSpeedOut { - 0% { - -webkit-transform: translateX(0%) skewX(0deg); - transform: translateX(0%) skewX(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: translateX(100%) skewX(-30deg); - transform: translateX(100%) skewX(-30deg); - opacity: 0; - } -} - -@keyframes lightSpeedOut { - 0% { - -webkit-transform: translateX(0%) skewX(0deg); - -ms-transform: translateX(0%) skewX(0deg); - transform: translateX(0%) skewX(0deg); - opacity: 1; - } - - 100% { - -webkit-transform: translateX(100%) skewX(-30deg); - -ms-transform: translateX(100%) skewX(-30deg); - transform: translateX(100%) skewX(-30deg); - opacity: 0; - } -} - -.lightSpeedOut { - -webkit-animation-name: lightSpeedOut; - animation-name: lightSpeedOut; - -webkit-animation-timing-function: ease-in; - animation-timing-function: ease-in; -} - -@-webkit-keyframes rotateIn { - 0% { - -webkit-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(-200deg); - transform: rotate(-200deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -@keyframes rotateIn { - 0% { - -webkit-transform-origin: center center; - -ms-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(-200deg); - -ms-transform: rotate(-200deg); - transform: rotate(-200deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: center center; - -ms-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -.rotateIn { - -webkit-animation-name: rotateIn; - animation-name: rotateIn; -} - -@-webkit-keyframes rotateInDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -@keyframes rotateInDownLeft { - 0% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -.rotateInDownLeft { - -webkit-animation-name: rotateInDownLeft; - animation-name: rotateInDownLeft; -} - -@-webkit-keyframes rotateInDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -@keyframes rotateInDownRight { - 0% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -.rotateInDownRight { - -webkit-animation-name: rotateInDownRight; - animation-name: rotateInDownRight; -} - -@-webkit-keyframes rotateInUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -@keyframes rotateInUpLeft { - 0% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -.rotateInUpLeft { - -webkit-animation-name: rotateInUpLeft; - animation-name: rotateInUpLeft; -} - -@-webkit-keyframes rotateInUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -@keyframes rotateInUpRight { - 0% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } - - 100% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } -} - -.rotateInUpRight { - -webkit-animation-name: rotateInUpRight; - animation-name: rotateInUpRight; -} - -@-webkit-keyframes rotateOut { - 0% { - -webkit-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(200deg); - transform: rotate(200deg); - opacity: 0; - } -} - -@keyframes rotateOut { - 0% { - -webkit-transform-origin: center center; - -ms-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: center center; - -ms-transform-origin: center center; - transform-origin: center center; - -webkit-transform: rotate(200deg); - -ms-transform: rotate(200deg); - transform: rotate(200deg); - opacity: 0; - } -} - -.rotateOut { - -webkit-animation-name: rotateOut; - animation-name: rotateOut; -} - -@-webkit-keyframes rotateOutDownLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } -} - -@keyframes rotateOutDownLeft { - 0% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } -} - -.rotateOutDownLeft { - -webkit-animation-name: rotateOutDownLeft; - animation-name: rotateOutDownLeft; -} - -@-webkit-keyframes rotateOutDownRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } -} - -@keyframes rotateOutDownRight { - 0% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } -} - -.rotateOutDownRight { - -webkit-animation-name: rotateOutDownRight; - animation-name: rotateOutDownRight; -} - -@-webkit-keyframes rotateOutUpLeft { - 0% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } -} - -@keyframes rotateOutUpLeft { - 0% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: left bottom; - -ms-transform-origin: left bottom; - transform-origin: left bottom; - -webkit-transform: rotate(-90deg); - -ms-transform: rotate(-90deg); - transform: rotate(-90deg); - opacity: 0; - } -} - -.rotateOutUpLeft { - -webkit-animation-name: rotateOutUpLeft; - animation-name: rotateOutUpLeft; -} - -@-webkit-keyframes rotateOutUpRight { - 0% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } -} - -@keyframes rotateOutUpRight { - 0% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - opacity: 1; - } - - 100% { - -webkit-transform-origin: right bottom; - -ms-transform-origin: right bottom; - transform-origin: right bottom; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); - opacity: 0; - } -} - -.rotateOutUpRight { - -webkit-animation-name: rotateOutUpRight; - animation-name: rotateOutUpRight; -} - -@-webkit-keyframes slideInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 100% { - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes slideInDown { - 0% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } - - 100% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -.slideInDown { - -webkit-animation-name: slideInDown; - animation-name: slideInDown; -} - -@-webkit-keyframes slideInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes slideInLeft { - 0% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } - - 100% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.slideInLeft { - -webkit-animation-name: slideInLeft; - animation-name: slideInLeft; -} - -@-webkit-keyframes slideInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } - - 100% { - -webkit-transform: translateX(0); - transform: translateX(0); - } -} - -@keyframes slideInRight { - 0% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } - - 100% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } -} - -.slideInRight { - -webkit-animation-name: slideInRight; - animation-name: slideInRight; -} - -@-webkit-keyframes slideOutLeft { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -@keyframes slideOutLeft { - 0% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(-2000px); - -ms-transform: translateX(-2000px); - transform: translateX(-2000px); - } -} - -.slideOutLeft { - -webkit-animation-name: slideOutLeft; - animation-name: slideOutLeft; -} - -@-webkit-keyframes slideOutRight { - 0% { - -webkit-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -@keyframes slideOutRight { - 0% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(2000px); - -ms-transform: translateX(2000px); - transform: translateX(2000px); - } -} - -.slideOutRight { - -webkit-animation-name: slideOutRight; - animation-name: slideOutRight; -} - -@-webkit-keyframes slideOutUp { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -@keyframes slideOutUp { - 0% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-2000px); - -ms-transform: translateY(-2000px); - transform: translateY(-2000px); - } -} - -.slideOutUp { - -webkit-animation-name: slideOutUp; - animation-name: slideOutUp; -} - -@-webkit-keyframes slideOutDown { - 0% { - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -@keyframes slideOutDown { - 0% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(2000px); - -ms-transform: translateY(2000px); - transform: translateY(2000px); - } -} - -.slideOutDown { - -webkit-animation-name: slideOutDown; - animation-name: slideOutDown; -} - -@-webkit-keyframes hinge { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate(80deg); - transform: rotate(80deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40% { - -webkit-transform: rotate(60deg); - transform: rotate(60deg); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 80% { - -webkit-transform: rotate(60deg) translateY(0); - transform: rotate(60deg) translateY(0); - -webkit-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - 100% { - -webkit-transform: translateY(700px); - transform: translateY(700px); - opacity: 0; - } -} - -@keyframes hinge { - 0% { - -webkit-transform: rotate(0); - -ms-transform: rotate(0); - transform: rotate(0); - -webkit-transform-origin: top left; - -ms-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 20%, 60% { - -webkit-transform: rotate(80deg); - -ms-transform: rotate(80deg); - transform: rotate(80deg); - -webkit-transform-origin: top left; - -ms-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 40% { - -webkit-transform: rotate(60deg); - -ms-transform: rotate(60deg); - transform: rotate(60deg); - -webkit-transform-origin: top left; - -ms-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - } - - 80% { - -webkit-transform: rotate(60deg) translateY(0); - -ms-transform: rotate(60deg) translateY(0); - transform: rotate(60deg) translateY(0); - -webkit-transform-origin: top left; - -ms-transform-origin: top left; - transform-origin: top left; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - opacity: 1; - } - - 100% { - -webkit-transform: translateY(700px); - -ms-transform: translateY(700px); - transform: translateY(700px); - opacity: 0; - } -} - -.hinge { - -webkit-animation-name: hinge; - animation-name: hinge; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollIn { - 0% { - opacity: 0; - -webkit-transform: translateX(-100%) rotate(-120deg); - transform: translateX(-100%) rotate(-120deg); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0px) rotate(0deg); - transform: translateX(0px) rotate(0deg); - } -} - -@keyframes rollIn { - 0% { - opacity: 0; - -webkit-transform: translateX(-100%) rotate(-120deg); - -ms-transform: translateX(-100%) rotate(-120deg); - transform: translateX(-100%) rotate(-120deg); - } - - 100% { - opacity: 1; - -webkit-transform: translateX(0px) rotate(0deg); - -ms-transform: translateX(0px) rotate(0deg); - transform: translateX(0px) rotate(0deg); - } -} - -.rollIn { - -webkit-animation-name: rollIn; - animation-name: rollIn; -} - -/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ - -@-webkit-keyframes rollOut { - 0% { - opacity: 1; - -webkit-transform: translateX(0px) rotate(0deg); - transform: translateX(0px) rotate(0deg); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(100%) rotate(120deg); - transform: translateX(100%) rotate(120deg); - } -} - -@keyframes rollOut { - 0% { - opacity: 1; - -webkit-transform: translateX(0px) rotate(0deg); - -ms-transform: translateX(0px) rotate(0deg); - transform: translateX(0px) rotate(0deg); - } - - 100% { - opacity: 0; - -webkit-transform: translateX(100%) rotate(120deg); - -ms-transform: translateX(100%) rotate(120deg); - transform: translateX(100%) rotate(120deg); - } -} - -.rollOut { - -webkit-animation-name: rollOut; - animation-name: rollOut; -} \ No newline at end of file diff --git a/static/css/bootstrap.min.css b/static/css/bootstrap.min.css deleted file mode 100644 index 4af8905e5..000000000 --- a/static/css/bootstrap.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.0 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:before,:after{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px;line-height:1.5 \0}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px;line-height:1.33 \0}_:-ms-fullscreen,:root input[type=date],_:-ms-fullscreen,:root input[type=time],_:-ms-fullscreen,:root input[type=datetime-local],_:-ms-fullscreen,:root input[type=month]{line-height:1.42857143}_:-ms-fullscreen.input-sm,:root input[type=date].input-sm,_:-ms-fullscreen.input-sm,:root input[type=time].input-sm,_:-ms-fullscreen.input-sm,:root input[type=datetime-local].input-sm,_:-ms-fullscreen.input-sm,:root input[type=month].input-sm{line-height:1.5}_:-ms-fullscreen.input-lg,:root input[type=date].input-lg,_:-ms-fullscreen.input-lg,:root input[type=time].input-lg,_:-ms-fullscreen.input-lg,:root input[type=datetime-local].input-lg,_:-ms-fullscreen.input-lg,:root input[type=month].input-lg{line-height:1.33}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:30px;line-height:30px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:46px;line-height:46px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important;visibility:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/static/css/colorbox.css b/static/css/colorbox.css deleted file mode 100644 index 0a6710404..000000000 --- a/static/css/colorbox.css +++ /dev/null @@ -1,50 +0,0 @@ -/* - Colorbox Core Style: - The following CSS is consistent between example themes and should not be altered. -*/ -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} -#cboxWrapper {max-width:none;} -#cboxOverlay{position:fixed; width:100%; height:100%;} -#cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative;} -#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} -#cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} -#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} -.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} -#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} - -/* - User Style: - Change the following styles to modify the appearance of Colorbox. They are - ordered & tabbed in a way that represents the nesting of the generated HTML. -*/ -#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);} -#colorbox{outline:0;} - #cboxContent{margin-top:32px; overflow:visible; background:#000;} - .cboxIframe{background:#fff;} - #cboxError{padding:50px; border:1px solid #ccc;} - #cboxLoadedContent{background:#000; padding:1px;} - #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} - #cboxLoadingOverlay{background:#000;} - #cboxTitle{position:absolute; top:-22px; left:0; color:#000;} - #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;} - - /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ - #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;} - - /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ - #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} - - #cboxPrevious{background-position:0px 0px; right:44px;} - #cboxPrevious:hover{background-position:0px -25px;} - #cboxNext{background-position:-25px 0px; right:22px;} - #cboxNext:hover{background-position:-25px -25px;} - #cboxClose{background-position:-50px 0px; right:0;} - #cboxClose:hover{background-position:-50px -25px;} - .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;} - .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;} - .cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;} - .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;} - .cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;} diff --git a/static/css/images/controls.png b/static/css/images/controls.png deleted file mode 100644 index 36f526992..000000000 Binary files a/static/css/images/controls.png and /dev/null differ diff --git a/static/css/images/loading.gif b/static/css/images/loading.gif deleted file mode 100644 index a32df5c08..000000000 Binary files a/static/css/images/loading.gif and /dev/null differ diff --git a/static/css/magnific/magnific-popup.css b/static/css/magnific/magnific-popup.css deleted file mode 100644 index a530c65ae..000000000 --- a/static/css/magnific/magnific-popup.css +++ /dev/null @@ -1,374 +0,0 @@ -/* Magnific Popup CSS */ -.mfp-bg { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1042; - overflow: hidden; - position: fixed; - background: #0b0b0b; - opacity: 0.8; - filter: alpha(opacity=80); } - -.mfp-wrap { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1043; - position: fixed; - outline: none !important; - -webkit-backface-visibility: hidden; } - -.mfp-container { - text-align: center; - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - padding: 0 8px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -.mfp-container:before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; } - -.mfp-align-top .mfp-container:before { - display: none; } - -.mfp-content { - position: relative; - display: inline-block; - vertical-align: middle; - margin: 0 auto; - text-align: left; - z-index: 1045; } - -.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content { - width: 100%; - cursor: auto; } - -.mfp-ajax-cur { - cursor: progress; } - -.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { - cursor: -moz-zoom-out; - cursor: -webkit-zoom-out; - cursor: zoom-out; } - -.mfp-zoom { - cursor: pointer; - cursor: -webkit-zoom-in; - cursor: -moz-zoom-in; - cursor: zoom-in; } - -.mfp-auto-cursor .mfp-content { - cursor: auto; } - -.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; } - -.mfp-loading.mfp-figure { - display: none; } - -.mfp-hide { - display: none !important; } - -.mfp-preloader { - color: #CCC; - position: absolute; - top: 50%; - width: auto; - text-align: center; - margin-top: -0.8em; - left: 8px; - right: 8px; - z-index: 1044; } - .mfp-preloader a { - color: #CCC; } - .mfp-preloader a:hover { - color: #FFF; } - -.mfp-s-ready .mfp-preloader { - display: none; } - -.mfp-s-error .mfp-content { - display: none; } - -button.mfp-close, button.mfp-arrow { - overflow: visible; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - display: block; - outline: none; - padding: 0; - z-index: 1046; - -webkit-box-shadow: none; - box-shadow: none; } -button::-moz-focus-inner { - padding: 0; - border: 0; } - -.mfp-close { - width: 44px; - height: 44px; - line-height: 44px; - position: absolute; - right: 0; - top: 0; - text-decoration: none; - text-align: center; - opacity: 0.65; - filter: alpha(opacity=65); - padding: 0 0 18px 10px; - color: #FFF; - font-style: normal; - font-size: 28px; - font-family: Arial, Baskerville, monospace; } - .mfp-close:hover, .mfp-close:focus { - opacity: 1; - filter: alpha(opacity=100); } - .mfp-close:active { - top: 1px; } - -.mfp-close-btn-in .mfp-close { - color: #333; } - -.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close { - color: #FFF; - right: -6px; - text-align: right; - padding-right: 6px; - width: 100%; } - -.mfp-counter { - position: absolute; - top: 0; - right: 0; - color: #CCC; - font-size: 12px; - line-height: 18px; - white-space: nowrap; } - -.mfp-arrow { - position: absolute; - opacity: 0.65; - filter: alpha(opacity=65); - margin: 0; - top: 50%; - margin-top: -55px; - padding: 0; - width: 90px; - height: 110px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } - .mfp-arrow:active { - margin-top: -54px; } - .mfp-arrow:hover, .mfp-arrow:focus { - opacity: 1; - filter: alpha(opacity=100); } - .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a { - content: ''; - display: block; - width: 0; - height: 0; - position: absolute; - left: 0; - top: 0; - margin-top: 35px; - margin-left: 35px; - border: medium inset transparent; } - .mfp-arrow:after, .mfp-arrow .mfp-a { - border-top-width: 13px; - border-bottom-width: 13px; - top: 8px; } - .mfp-arrow:before, .mfp-arrow .mfp-b { - border-top-width: 21px; - border-bottom-width: 21px; - opacity: 0.7; } - -.mfp-arrow-left { - left: 0; } - .mfp-arrow-left:after, .mfp-arrow-left .mfp-a { - border-right: 17px solid #FFF; - margin-left: 31px; } - .mfp-arrow-left:before, .mfp-arrow-left .mfp-b { - margin-left: 25px; - border-right: 27px solid #3F3F3F; } - -.mfp-arrow-right { - right: 0; } - .mfp-arrow-right:after, .mfp-arrow-right .mfp-a { - border-left: 17px solid #FFF; - margin-left: 39px; } - .mfp-arrow-right:before, .mfp-arrow-right .mfp-b { - border-left: 27px solid #3F3F3F; } - -.mfp-iframe-holder { - padding-top: 40px; - padding-bottom: 40px; } - .mfp-iframe-holder .mfp-content { - line-height: 0; - width: 100%; - max-width: 900px; } - .mfp-iframe-holder .mfp-close { - top: -40px; } - -.mfp-iframe-scaler { - width: 100%; - height: 0; - overflow: hidden; - padding-top: 56.25%; } - .mfp-iframe-scaler iframe { - position: absolute; - display: block; - top: 0; - left: 0; - width: 100%; - height: 100%; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: #000; } - -/* Main image in popup */ -img.mfp-img { - width: auto; - max-width: 100%; - height: auto; - display: block; - line-height: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 40px 0 40px; - margin: 0 auto; } - -/* The shadow behind the image */ -.mfp-figure { - line-height: 0; } - .mfp-figure:after { - content: ''; - position: absolute; - left: 0; - top: 40px; - bottom: 40px; - display: block; - right: 0; - width: auto; - height: auto; - z-index: -1; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: #444; } - .mfp-figure small { - color: #BDBDBD; - display: block; - font-size: 12px; - line-height: 14px; } - .mfp-figure figure { - margin: 0; } - -.mfp-bottom-bar { - margin-top: -36px; - position: absolute; - top: 100%; - left: 0; - width: 100%; - cursor: auto; } - -.mfp-title { - text-align: left; - line-height: 18px; - color: #F3F3F3; - word-wrap: break-word; - padding-right: 36px; } - -.mfp-image-holder .mfp-content { - max-width: 100%; } - -.mfp-gallery .mfp-image-holder .mfp-figure { - cursor: pointer; } - -@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { - /** - * Remove all paddings around the image on small screen - */ - .mfp-img-mobile .mfp-image-holder { - padding-left: 0; - padding-right: 0; } - .mfp-img-mobile img.mfp-img { - padding: 0; } - .mfp-img-mobile .mfp-figure:after { - top: 0; - bottom: 0; } - .mfp-img-mobile .mfp-figure small { - display: inline; - margin-left: 5px; } - .mfp-img-mobile .mfp-bottom-bar { - background: rgba(0, 0, 0, 0.6); - bottom: 0; - margin: 0; - top: auto; - padding: 3px 5px; - position: fixed; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .mfp-img-mobile .mfp-bottom-bar:empty { - padding: 0; } - .mfp-img-mobile .mfp-counter { - right: 5px; - top: 3px; } - .mfp-img-mobile .mfp-close { - top: 0; - right: 0; - width: 35px; - height: 35px; - line-height: 35px; - background: rgba(0, 0, 0, 0.6); - position: fixed; - text-align: center; - padding: 0; } - } - -@media all and (max-width: 900px) { - .mfp-arrow { - -webkit-transform: scale(0.75); - transform: scale(0.75); } - - .mfp-arrow-left { - -webkit-transform-origin: 0; - transform-origin: 0; } - - .mfp-arrow-right { - -webkit-transform-origin: 100%; - transform-origin: 100%; } - - .mfp-container { - padding-left: 6px; - padding-right: 6px; } - } - -.mfp-ie7 .mfp-img { - padding: 0; } -.mfp-ie7 .mfp-bottom-bar { - width: 600px; - left: 50%; - margin-left: -300px; - margin-top: 5px; - padding-bottom: 5px; } -.mfp-ie7 .mfp-container { - padding: 0; } -.mfp-ie7 .mfp-content { - padding-top: 44px; } -.mfp-ie7 .mfp-close { - top: 0; - right: 0; - padding-top: 0; } diff --git a/static/css/patterns/congruent_pentagon.png b/static/css/patterns/congruent_pentagon.png deleted file mode 100644 index c71266032..000000000 Binary files a/static/css/patterns/congruent_pentagon.png and /dev/null differ diff --git a/static/css/patterns/header-profile-skin-1.png b/static/css/patterns/header-profile-skin-1.png deleted file mode 100644 index 41c5c089b..000000000 Binary files a/static/css/patterns/header-profile-skin-1.png and /dev/null differ diff --git a/static/css/patterns/header-profile-skin-2.png b/static/css/patterns/header-profile-skin-2.png deleted file mode 100644 index df46d46e5..000000000 Binary files a/static/css/patterns/header-profile-skin-2.png and /dev/null differ diff --git a/static/css/patterns/header-profile-skin-3.png b/static/css/patterns/header-profile-skin-3.png deleted file mode 100644 index 7a80132da..000000000 Binary files a/static/css/patterns/header-profile-skin-3.png and /dev/null differ diff --git a/static/css/patterns/header-profile.png b/static/css/patterns/header-profile.png deleted file mode 100644 index 7dea7f2c7..000000000 Binary files a/static/css/patterns/header-profile.png and /dev/null differ diff --git a/static/css/patterns/otis_redding.png b/static/css/patterns/otis_redding.png deleted file mode 100644 index 7fa3533a0..000000000 Binary files a/static/css/patterns/otis_redding.png and /dev/null differ diff --git a/static/css/patterns/shattered.png b/static/css/patterns/shattered.png deleted file mode 100644 index 90ed42b85..000000000 Binary files a/static/css/patterns/shattered.png and /dev/null differ diff --git a/static/css/patterns/triangular.png b/static/css/patterns/triangular.png deleted file mode 100644 index 7f41795c8..000000000 Binary files a/static/css/patterns/triangular.png and /dev/null differ diff --git a/static/css/plugins/bootstrap.min.css b/static/css/plugins/bootstrap.min.css deleted file mode 100644 index c95146773..000000000 --- a/static/css/plugins/bootstrap.min.css +++ /dev/null @@ -1,689 +0,0 @@ -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} -.clearfix:after{clear:both;} -.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} -.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} -body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} -.row:after{clear:both;} -[class*="span"]{float:left;margin-left:20px;} -.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.span12{width:940px;} -.span11{width:860px;} -.span10{width:780px;} -.span9{width:700px;} -.span8{width:620px;} -.span7{width:540px;} -.span6{width:460px;} -.span5{width:380px;} -.span4{width:300px;} -.span3{width:220px;} -.span2{width:140px;} -.span1{width:60px;} -.offset12{margin-left:980px;} -.offset11{margin-left:900px;} -.offset10{margin-left:820px;} -.offset9{margin-left:740px;} -.offset8{margin-left:660px;} -.offset7{margin-left:580px;} -.offset6{margin-left:500px;} -.offset5{margin-left:420px;} -.offset4{margin-left:340px;} -.offset3{margin-left:260px;} -.offset2{margin-left:180px;} -.offset1{margin-left:100px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} -.row-fluid:after{clear:both;} -.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} -.row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid > .span12{width:99.99999998999999%;} -.row-fluid > .span11{width:91.489361693%;} -.row-fluid > .span10{width:82.97872339599999%;} -.row-fluid > .span9{width:74.468085099%;} -.row-fluid > .span8{width:65.95744680199999%;} -.row-fluid > .span7{width:57.446808505%;} -.row-fluid > .span6{width:48.93617020799999%;} -.row-fluid > .span5{width:40.425531911%;} -.row-fluid > .span4{width:31.914893614%;} -.row-fluid > .span3{width:23.404255317%;} -.row-fluid > .span2{width:14.89361702%;} -.row-fluid > .span1{width:6.382978723%;} -.container{margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} -.container:after{clear:both;} -.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} -.container-fluid:after{clear:both;} -p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} -.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} -h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} -h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} -h4,h5,h6{line-height:18px;} -h4{font-size:14px;}h4 small{font-size:12px;} -h5{font-size:12px;} -h6{font-size:11px;color:#999999;text-transform:uppercase;} -.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} -.page-header h1{line-height:1;} -ul,ol{padding:0;margin:0 0 9px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;} -ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} -dl{margin-bottom:18px;} -dt,dd{line-height:18px;} -dt{font-weight:bold;line-height:17px;} -dd{margin-left:9px;} -.dl-horizontal dt{float:left;clear:left;width:120px;text-align:right;} -.dl-horizontal dd{margin-left:130px;} -hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} -strong{font-weight:bold;} -em{font-style:italic;} -.muted{color:#999999;} -abbr[title]{border-bottom:1px dotted #ddd;cursor:help;} -abbr.initialism{font-size:90%;text-transform:uppercase;} -blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} -blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} -small{font-size:100%;} -cite{font-style:normal;} -code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;color:inherit;background-color:transparent;border:0;} -.pre-scrollable{max-height:340px;overflow-y:scroll;} -form{margin:0 0 18px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} -label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} -input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.uneditable-textarea{width:auto;height:auto;} -label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} -input[type="image"]{border:0;} -input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} -select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} -input[type="file"]{line-height:18px \9;} -select{width:220px;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -textarea{height:auto;} -input[type="hidden"]{display:none;} -.radio,.checkbox{padding-left:18px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} -input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input,textarea,.uneditable-input{margin-left:0;} -input.span12, textarea.span12, .uneditable-input.span12{width:930px;} -input.span11, textarea.span11, .uneditable-input.span11{width:850px;} -input.span10, textarea.span10, .uneditable-input.span10{width:770px;} -input.span9, textarea.span9, .uneditable-input.span9{width:690px;} -input.span8, textarea.span8, .uneditable-input.span8{width:610px;} -input.span7, textarea.span7, .uneditable-input.span7{width:530px;} -input.span6, textarea.span6, .uneditable-input.span6{width:450px;} -input.span5, textarea.span5, .uneditable-input.span5{width:370px;} -input.span4, textarea.span4, .uneditable-input.span4{width:290px;} -input.span3, textarea.span3, .uneditable-input.span3{width:210px;} -input.span2, textarea.span2, .uneditable-input.span2{width:130px;} -input.span1, textarea.span1, .uneditable-input.span1{width:50px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#eeeeee;border-color:#ddd;cursor:not-allowed;} -.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#eeeeee;border-top:1px solid #ddd;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";} -.form-actions:after{clear:both;} -.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#999999;} -::-webkit-input-placeholder{color:#999999;} -.help-block,.help-inline{color:#555555;} -.help-block{display:block;margin-bottom:9px;} -.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{*margin-left:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} -.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;} -.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} -.input-append input,.input-append select .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} -.input-append .add-on,.input-append .btn{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;} -.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} -.form-search label,.form-inline label{display:inline-block;} -.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} -.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} -.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px;} -.control-group{margin-bottom:9px;} -legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;*display:inline-block;*margin-left:0;*padding-left:20px;} -.form-horizontal .help-block{margin-top:9px;margin-bottom:0;} -.form-horizontal .form-actions{padding-left:160px;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;background-color:transparent;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} -.table th{font-weight:bold;} -.table thead th{vertical-align:bottom;} -.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} -.table tbody+tbody{border-top:2px solid #dddddd;} -.table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #dddddd;border-left:0;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} -.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} -table .span1{float:none;width:44px;margin-left:0;} -table .span2{float:none;width:124px;margin-left:0;} -table .span3{float:none;width:204px;margin-left:0;} -table .span4{float:none;width:284px;margin-left:0;} -table .span5{float:none;width:364px;margin-left:0;} -table .span6{float:none;width:444px;margin-left:0;} -table .span7{float:none;width:524px;margin-left:0;} -table .span8{float:none;width:604px;margin-left:0;} -table .span9{float:none;width:684px;margin-left:0;} -table .span10{float:none;width:764px;margin-left:0;} -table .span11{float:none;width:844px;margin-left:0;} -table .span12{float:none;width:924px;margin-left:0;} -table .span13{float:none;width:1004px;margin-left:0;} -table .span14{float:none;width:1084px;margin-left:0;} -table .span15{float:none;width:1164px;margin-left:0;} -table .span16{float:none;width:1244px;margin-left:0;} -table .span17{float:none;width:1324px;margin-left:0;} -table .span18{float:none;width:1404px;margin-left:0;} -table .span19{float:none;width:1484px;margin-left:0;} -table .span20{float:none;width:1564px;margin-left:0;} -table .span21{float:none;width:1644px;margin-left:0;} -table .span22{float:none;width:1724px;margin-left:0;} -table .span23{float:none;width:1804px;margin-left:0;} -table .span24{float:none;width:1884px;margin-left:0;} -[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url("../img/glyphicons-halflings-white.png");} -.icon-glass{background-position:0 0;} -.icon-music{background-position:-24px 0;} -.icon-search{background-position:-48px 0;} -.icon-envelope{background-position:-72px 0;} -.icon-heart{background-position:-96px 0;} -.icon-star{background-position:-120px 0;} -.icon-star-empty{background-position:-144px 0;} -.icon-user{background-position:-168px 0;} -.icon-film{background-position:-192px 0;} -.icon-th-large{background-position:-216px 0;} -.icon-th{background-position:-240px 0;} -.icon-th-list{background-position:-264px 0;} -.icon-ok{background-position:-288px 0;} -.icon-remove{background-position:-312px 0;} -.icon-zoom-in{background-position:-336px 0;} -.icon-zoom-out{background-position:-360px 0;} -.icon-off{background-position:-384px 0;} -.icon-signal{background-position:-408px 0;} -.icon-cog{background-position:-432px 0;} -.icon-trash{background-position:-456px 0;} -.icon-home{background-position:0 -24px;} -.icon-file{background-position:-24px -24px;} -.icon-time{background-position:-48px -24px;} -.icon-road{background-position:-72px -24px;} -.icon-download-alt{background-position:-96px -24px;} -.icon-download{background-position:-120px -24px;} -.icon-upload{background-position:-144px -24px;} -.icon-inbox{background-position:-168px -24px;} -.icon-play-circle{background-position:-192px -24px;} -.icon-repeat{background-position:-216px -24px;} -.icon-refresh{background-position:-240px -24px;} -.icon-list-alt{background-position:-264px -24px;} -.icon-lock{background-position:-287px -24px;} -.icon-flag{background-position:-312px -24px;} -.icon-headphones{background-position:-336px -24px;} -.icon-volume-off{background-position:-360px -24px;} -.icon-volume-down{background-position:-384px -24px;} -.icon-volume-up{background-position:-408px -24px;} -.icon-qrcode{background-position:-432px -24px;} -.icon-barcode{background-position:-456px -24px;} -.icon-tag{background-position:0 -48px;} -.icon-tags{background-position:-25px -48px;} -.icon-book{background-position:-48px -48px;} -.icon-bookmark{background-position:-72px -48px;} -.icon-print{background-position:-96px -48px;} -.icon-camera{background-position:-120px -48px;} -.icon-font{background-position:-144px -48px;} -.icon-bold{background-position:-167px -48px;} -.icon-italic{background-position:-192px -48px;} -.icon-text-height{background-position:-216px -48px;} -.icon-text-width{background-position:-240px -48px;} -.icon-align-left{background-position:-264px -48px;} -.icon-align-center{background-position:-288px -48px;} -.icon-align-right{background-position:-312px -48px;} -.icon-align-justify{background-position:-336px -48px;} -.icon-list{background-position:-360px -48px;} -.icon-indent-left{background-position:-384px -48px;} -.icon-indent-right{background-position:-408px -48px;} -.icon-facetime-video{background-position:-432px -48px;} -.icon-picture{background-position:-456px -48px;} -.icon-pencil{background-position:0 -72px;} -.icon-map-marker{background-position:-24px -72px;} -.icon-adjust{background-position:-48px -72px;} -.icon-tint{background-position:-72px -72px;} -.icon-edit{background-position:-96px -72px;} -.icon-share{background-position:-120px -72px;} -.icon-check{background-position:-144px -72px;} -.icon-move{background-position:-168px -72px;} -.icon-step-backward{background-position:-192px -72px;} -.icon-fast-backward{background-position:-216px -72px;} -.icon-backward{background-position:-240px -72px;} -.icon-play{background-position:-264px -72px;} -.icon-pause{background-position:-288px -72px;} -.icon-stop{background-position:-312px -72px;} -.icon-forward{background-position:-336px -72px;} -.icon-fast-forward{background-position:-360px -72px;} -.icon-step-forward{background-position:-384px -72px;} -.icon-eject{background-position:-408px -72px;} -.icon-chevron-left{background-position:-432px -72px;} -.icon-chevron-right{background-position:-456px -72px;} -.icon-plus-sign{background-position:0 -96px;} -.icon-minus-sign{background-position:-24px -96px;} -.icon-remove-sign{background-position:-48px -96px;} -.icon-ok-sign{background-position:-72px -96px;} -.icon-question-sign{background-position:-96px -96px;} -.icon-info-sign{background-position:-120px -96px;} -.icon-screenshot{background-position:-144px -96px;} -.icon-remove-circle{background-position:-168px -96px;} -.icon-ok-circle{background-position:-192px -96px;} -.icon-ban-circle{background-position:-216px -96px;} -.icon-arrow-left{background-position:-240px -96px;} -.icon-arrow-right{background-position:-264px -96px;} -.icon-arrow-up{background-position:-289px -96px;} -.icon-arrow-down{background-position:-312px -96px;} -.icon-share-alt{background-position:-336px -96px;} -.icon-resize-full{background-position:-360px -96px;} -.icon-resize-small{background-position:-384px -96px;} -.icon-plus{background-position:-408px -96px;} -.icon-minus{background-position:-433px -96px;} -.icon-asterisk{background-position:-456px -96px;} -.icon-exclamation-sign{background-position:0 -120px;} -.icon-gift{background-position:-24px -120px;} -.icon-leaf{background-position:-48px -120px;} -.icon-fire{background-position:-72px -120px;} -.icon-eye-open{background-position:-96px -120px;} -.icon-eye-close{background-position:-120px -120px;} -.icon-warning-sign{background-position:-144px -120px;} -.icon-plane{background-position:-168px -120px;} -.icon-calendar{background-position:-192px -120px;} -.icon-random{background-position:-216px -120px;} -.icon-comment{background-position:-240px -120px;} -.icon-magnet{background-position:-264px -120px;} -.icon-chevron-up{background-position:-288px -120px;} -.icon-chevron-down{background-position:-313px -119px;} -.icon-retweet{background-position:-336px -120px;} -.icon-shopping-cart{background-position:-360px -120px;} -.icon-folder-close{background-position:-384px -120px;} -.icon-folder-open{background-position:-408px -120px;} -.icon-resize-vertical{background-position:-432px -119px;} -.icon-resize-horizontal{background-position:-456px -118px;} -.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;} -.dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;} -.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} -.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.dropdown.open .dropdown-menu{display:block;} -.pull-right .dropdown-menu{left:auto;right:0;} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} -.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} -.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} -.btn:active,.btn.active{background-color:#cccccc \9;} -.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large [class^="icon-"]{margin-top:1px;} -.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small [class^="icon-"]{margin-top:-1px;} -.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#0074cc;background-image:-moz-linear-gradient(top, #0088cc, #0055cc);background-image:-ms-linear-gradient(top, #0088cc, #0055cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));background-image:-webkit-linear-gradient(top, #0088cc, #0055cc);background-image:-o-linear-gradient(top, #0088cc, #0055cc);background-image:linear-gradient(top, #0088cc, #0055cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);border-color:#0055cc #0055cc #003580;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0055cc;} -.btn-primary:active,.btn-primary.active{background-color:#004099 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;} -.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} -button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} -button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} -button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} -.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} -.btn-group:after{clear:both;} -.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} -.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:3px;*padding-bottom:3px;} -.btn-group .btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:1px;*padding-bottom:1px;} -.btn-group .btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;} -.btn-group .btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;} -.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn .caret{margin-top:7px;margin-left:0;} -.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-mini .caret{margin-top:5px;} -.btn-small .caret{margin-top:6px;} -.btn-large .caret{margin-top:6px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;} -.alert-heading{color:inherit;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -.nav{margin-left:0;margin-bottom:18px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} -.nav li+.nav-header{margin-top:9px;} -.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list>li>a{padding:3px 15px;} -.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"]{margin-right:2px;} -.nav-list .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} -.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;} -.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} -.tabbable:after{clear:both;} -.tab-content{display:table;width:100%;} -.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below .nav-tabs{border-top:1px solid #ddd;} -.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} -.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;} -.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.navbar .container{width:auto;} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} -.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} -.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.nav-collapse.collapse{height:auto;} -.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;} -.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;} -.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} -.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} -.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.navbar-fixed-top{top:0;} -.navbar-fixed-bottom{bottom:0;} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;} -.navbar .nav>li{display:block;float:left;} -.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} -.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} -.navbar .nav.pull-right{margin-left:10px;margin-right:0;} -.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} -.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} -.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} -.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu,.navbar .nav .dropdown-menu.pull-right{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before,.navbar .nav .dropdown-menu.pull-right:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after,.navbar .nav .dropdown-menu.pull-right:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#999999;} -.breadcrumb .active a{color:#333333;} -.pagination{height:36px;margin:18px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} -.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} -.pagination .active a{color:#999999;cursor:default;} -.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} -.pager:after{clear:both;} -.pager li{display:inline;} -.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager a:hover{text-decoration:none;background-color:#f5f5f5;} -.pager .next a{float:right;} -.pager .previous a{float:left;} -.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;} -.modal-open .dropdown-menu{z-index:2050;} -.modal-open .dropdown.open{*z-index:2050;} -.modal-open .popover{z-index:2060;} -.modal-open .tooltip{z-index:2070;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{overflow-y:auto;max-height:400px;padding:15px;} -.modal-form{margin-bottom:0;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} -.modal-footer:after{clear:both;} -.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} -.modal-footer .btn-group .btn+.btn{margin-left:-1px;} -.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} -.popover.right{margin-left:5px;} -.popover.bottom{margin-top:5px;} -.popover.left{margin-left:-5px;} -.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} -.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} -.thumbnails:after{clear:both;} -.thumbnails>li{float:left;margin:0 0 18px 20px;} -.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;} -.label{padding:1px 4px 2px;font-size:10.998px;font-weight:bold;line-height:13px;color:#ffffff;vertical-align:middle;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.label:hover{color:#ffffff;text-decoration:none;} -.label-important{background-color:#b94a48;} -.label-important:hover{background-color:#953b39;} -.label-warning{background-color:#f89406;} -.label-warning:hover{background-color:#c67605;} -.label-success{background-color:#468847;} -.label-success:hover{background-color:#356635;} -.label-info{background-color:#3a87ad;} -.label-info:hover{background-color:#2d6987;} -.label-inverse{background-color:#333333;} -.label-inverse:hover{background-color:#1a1a1a;} -.badge{padding:1px 9px 2px;font-size:12.025px;font-weight:bold;white-space:nowrap;color:#ffffff;background-color:#999999;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} -.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} -.badge-error{background-color:#b94a48;} -.badge-error:hover{background-color:#953b39;} -.badge-warning{background-color:#f89406;} -.badge-warning:hover{background-color:#c67605;} -.badge-success{background-color:#468847;} -.badge-success:hover{background-color:#356635;} -.badge-info{background-color:#3a87ad;} -.badge-info:hover{background-color:#2d6987;} -.badge-inverse{background-color:#333333;} -.badge-inverse:hover{background-color:#1a1a1a;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} -.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} -.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} -.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} -.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);} -.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.accordion{margin-bottom:18px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:18px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel .item>img{display:block;line-height:1;} -.carousel .active,.carousel .next,.carousel .prev{display:block;} -.carousel .active{left:0;} -.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} -.carousel .next{left:100%;} -.carousel .prev{left:-100%;} -.carousel .next.left,.carousel .prev.right{left:0;} -.carousel .active.left{left:-100%;} -.carousel .active.right{left:100%;} -.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} diff --git a/static/css/plugins/chosen/chosen-sprite.png b/static/css/plugins/chosen/chosen-sprite.png deleted file mode 100755 index 3611ae4ac..000000000 Binary files a/static/css/plugins/chosen/chosen-sprite.png and /dev/null differ diff --git a/static/css/plugins/chosen/chosen-sprite@2x.png b/static/css/plugins/chosen/chosen-sprite@2x.png deleted file mode 100755 index ffe4d7d11..000000000 Binary files a/static/css/plugins/chosen/chosen-sprite@2x.png and /dev/null differ diff --git a/static/css/plugins/chosen/chosen.css b/static/css/plugins/chosen/chosen.css deleted file mode 100755 index e7a5495cd..000000000 --- a/static/css/plugins/chosen/chosen.css +++ /dev/null @@ -1,429 +0,0 @@ -/*! -Chosen, a Select Box Enhancer for jQuery and Prototype -by Patrick Filler for Harvest, http://getharvest.com - -Version 1.1.0 -Full source at https://github.com/harvesthq/chosen -Copyright (c) 2011 Harvest http://getharvest.com - -MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -This file is generated by `grunt build`, do not edit it by hand. -*/ - -/* @group Base */ -.chosen-container { - position: relative; - display: inline-block; - vertical-align: middle; - font-size: 13px; - zoom: 1; - *display: inline; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} -.chosen-container .chosen-drop { - position: absolute; - top: 100%; - left: -9999px; - z-index: 1010; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - border: 1px solid #aaa; - border-top: 0; - background: #fff; - box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); -} -.chosen-container.chosen-with-drop .chosen-drop { - left: 0; -} -.chosen-container a { - cursor: pointer; -} - -/* @end */ -/* @group Single Chosen */ -.chosen-container-single .chosen-single { - position: relative; - display: block; - overflow: hidden; - padding: 0 0 0 8px; - height: 23px; - border: 1px solid #aaa; - border-radius: 5px; - background-color: #fff; - background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); - background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-clip: padding-box; - box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1); - color: #444; - text-decoration: none; - white-space: nowrap; - line-height: 24px; -} -.chosen-container-single .chosen-default { - color: #999; -} -.chosen-container-single .chosen-single span { - display: block; - overflow: hidden; - margin-right: 26px; - text-overflow: ellipsis; - white-space: nowrap; -} -.chosen-container-single .chosen-single-with-deselect span { - margin-right: 38px; -} -.chosen-container-single .chosen-single abbr { - position: absolute; - top: 6px; - right: 26px; - display: block; - width: 12px; - height: 12px; - background: url('chosen-sprite.png') -42px 1px no-repeat; - font-size: 1px; -} -.chosen-container-single .chosen-single abbr:hover { - background-position: -42px -10px; -} -.chosen-container-single.chosen-disabled .chosen-single abbr:hover { - background-position: -42px -10px; -} -.chosen-container-single .chosen-single div { - position: absolute; - top: 0; - right: 0; - display: block; - width: 18px; - height: 100%; -} -.chosen-container-single .chosen-single div b { - display: block; - width: 100%; - height: 100%; - background: url('chosen-sprite.png') no-repeat 0px 2px; -} -.chosen-container-single .chosen-search { - position: relative; - z-index: 1010; - margin: 0; - padding: 3px 4px; - white-space: nowrap; -} -.chosen-container-single .chosen-search input[type="text"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 1px 0; - padding: 4px 20px 4px 5px; - width: 100%; - height: auto; - outline: 0; - border: 1px solid #aaa; - background: white url('chosen-sprite.png') no-repeat 100% -20px; - background: url('chosen-sprite.png') no-repeat 100% -20px; - font-size: 1em; - font-family: sans-serif; - line-height: normal; - border-radius: 0; -} -.chosen-container-single .chosen-drop { - margin-top: -1px; - border-radius: 0 0 4px 4px; - background-clip: padding-box; -} -.chosen-container-single.chosen-container-single-nosearch .chosen-search { - position: absolute; - left: -9999px; -} - -/* @end */ -/* @group Results */ -.chosen-container .chosen-results { - position: relative; - overflow-x: hidden; - overflow-y: auto; - margin: 0 4px 4px 0; - padding: 0 0 0 4px; - max-height: 240px; - -webkit-overflow-scrolling: touch; -} -.chosen-container .chosen-results li { - display: none; - margin: 0; - padding: 5px 6px; - list-style: none; - line-height: 15px; - -webkit-touch-callout: none; -} -.chosen-container .chosen-results li.active-result { - display: list-item; - cursor: pointer; -} -.chosen-container .chosen-results li.disabled-result { - display: list-item; - color: #ccc; - cursor: default; -} -.chosen-container .chosen-results li.highlighted { - background-color: #3875d7; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); - background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%); - background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); - color: #fff; -} -.chosen-container .chosen-results li.no-results { - display: list-item; - background: #f4f4f4; -} -.chosen-container .chosen-results li.group-result { - display: list-item; - font-weight: bold; - cursor: default; -} -.chosen-container .chosen-results li.group-option { - padding-left: 15px; -} -.chosen-container .chosen-results li em { - font-style: normal; - text-decoration: underline; -} - -/* @end */ -/* @group Multi Chosen */ -.chosen-container-multi .chosen-choices { - -moz-box-sizing: border-box; - background-color: #FFFFFF; - border: 1px solid #CBD5DD; - border-radius: 2px; - cursor: text; - height: auto !important; - margin: 0; - min-height: 30px; - overflow: hidden; - padding: 2px; - position: relative; - width: 100%; -} -.chosen-container-multi .chosen-choices li { - float: left; - list-style: none; -} -.chosen-container-multi .chosen-choices li.search-field { - margin: 0; - padding: 0; - white-space: nowrap; -} -.chosen-container-multi .chosen-choices li.search-field input[type="text"] { - margin: 1px 0; - padding: 5px; - height: 25px; - outline: 0; - border: 0 !important; - background: transparent !important; - box-shadow: none; - color: #666; - font-size: 100%; - font-family: sans-serif; - line-height: normal; - border-radius: 0; -} -.chosen-container-multi .chosen-choices li.search-field .default { - color: #999; -} -.chosen-container-multi .chosen-choices li.search-choice { - position: relative; - margin: 3px 0 3px 5px; - padding: 3px 20px 3px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background-color: #e4e4e4; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-clip: padding-box; - box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); - color: #333; - line-height: 13px; - cursor: default; -} -.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { - position: absolute; - top: 4px; - right: 3px; - display: block; - width: 12px; - height: 12px; - background: url('chosen-sprite.png') -42px 1px no-repeat; - font-size: 1px; -} -.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { - background-position: -42px -10px; -} -.chosen-container-multi .chosen-choices li.search-choice-disabled { - padding-right: 5px; - border: 1px solid #ccc; - background-color: #e4e4e4; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - color: #666; -} -.chosen-container-multi .chosen-choices li.search-choice-focus { - background: #d4d4d4; -} -.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { - background-position: -42px -10px; -} -.chosen-container-multi .chosen-results { - margin: 0; - padding: 0; -} -.chosen-container-multi .chosen-drop .result-selected { - display: list-item; - color: #ccc; - cursor: default; -} - -/* @end */ -/* @group Active */ -.chosen-container-active .chosen-single { - border: 1px solid #5897fb; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -} -.chosen-container-active.chosen-with-drop .chosen-single { - border: 1px solid #aaa; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); - background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%); - background-image: linear-gradient(#eeeeee 20%, #ffffff 80%); - box-shadow: 0 1px 0 #fff inset; -} -.chosen-container-active.chosen-with-drop .chosen-single div { - border-left: none; - background: transparent; -} -.chosen-container-active.chosen-with-drop .chosen-single div b { - background-position: -18px 2px; -} -.chosen-container-active .chosen-choices { - border: 1px solid #5897fb; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); -} -.chosen-container-active .chosen-choices li.search-field input[type="text"] { - color: #111 !important; -} - -/* @end */ -/* @group Disabled Support */ -.chosen-disabled { - opacity: 0.5 !important; - cursor: default; -} -.chosen-disabled .chosen-single { - cursor: default; -} -.chosen-disabled .chosen-choices .search-choice .search-choice-close { - cursor: default; -} - -/* @end */ -/* @group Right to Left */ -.chosen-rtl { - text-align: right; -} -.chosen-rtl .chosen-single { - overflow: visible; - padding: 0 8px 0 0; -} -.chosen-rtl .chosen-single span { - margin-right: 0; - margin-left: 26px; - direction: rtl; -} -.chosen-rtl .chosen-single-with-deselect span { - margin-left: 38px; -} -.chosen-rtl .chosen-single div { - right: auto; - left: 3px; -} -.chosen-rtl .chosen-single abbr { - right: auto; - left: 26px; -} -.chosen-rtl .chosen-choices li { - float: right; -} -.chosen-rtl .chosen-choices li.search-field input[type="text"] { - direction: rtl; -} -.chosen-rtl .chosen-choices li.search-choice { - margin: 3px 5px 3px 0; - padding: 3px 5px 3px 19px; -} -.chosen-rtl .chosen-choices li.search-choice .search-choice-close { - right: auto; - left: 4px; -} -.chosen-rtl.chosen-container-single-nosearch .chosen-search, -.chosen-rtl .chosen-drop { - left: 9999px; -} -.chosen-rtl.chosen-container-single .chosen-results { - margin: 0 0 4px 4px; - padding: 0 4px 0 0; -} -.chosen-rtl .chosen-results li.group-option { - padding-right: 15px; - padding-left: 0; -} -.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { - border-right: none; -} -.chosen-rtl .chosen-search input[type="text"] { - padding: 4px 5px 4px 20px; - background: white url('chosen-sprite.png') no-repeat -30px -20px; - background: url('chosen-sprite.png') no-repeat -30px -20px; - direction: rtl; -} -.chosen-rtl.chosen-container-single .chosen-single div b { - background-position: 6px 2px; -} -.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { - background-position: -12px 2px; -} - -/* @end */ -/* @group Retina compatibility */ -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) { - .chosen-rtl .chosen-search input[type="text"], - .chosen-container-single .chosen-single abbr, - .chosen-container-single .chosen-single div b, - .chosen-container-single .chosen-search input[type="text"], - .chosen-container-multi .chosen-choices .search-choice .search-choice-close, - .chosen-container .chosen-results-scroll-down span, - .chosen-container .chosen-results-scroll-up span { - background-image: url('chosen-sprite@2x.png') !important; - background-size: 52px 37px !important; - background-repeat: no-repeat !important; - } -} -/* @end */ diff --git a/static/css/plugins/datepicker/datepicker3.css b/static/css/plugins/datepicker/datepicker3.css deleted file mode 100755 index d5203af6d..000000000 --- a/static/css/plugins/datepicker/datepicker3.css +++ /dev/null @@ -1,789 +0,0 @@ -/*! - * Datepicker for Bootstrap - * - * Copyright 2012 Stefan Petre - * Improvements by Andrew Rowls - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - */ -.datepicker { - padding: 4px; - border-radius: 4px; - direction: ltr; - /*.dow { - border-top: 1px solid #ddd !important; - }*/ -} -.datepicker-inline { - width: 220px; -} -.datepicker.datepicker-rtl { - direction: rtl; -} -.datepicker.datepicker-rtl table tr td span { - float: right; -} -.datepicker-dropdown { - top: 0; - left: 0; -} -.datepicker-dropdown:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-top: 0; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; -} -.datepicker-dropdown:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #fff; - border-top: 0; - position: absolute; -} -.datepicker-dropdown.datepicker-orient-left:before { - left: 6px; -} -.datepicker-dropdown.datepicker-orient-left:after { - left: 7px; -} -.datepicker-dropdown.datepicker-orient-right:before { - right: 6px; -} -.datepicker-dropdown.datepicker-orient-right:after { - right: 7px; -} -.datepicker-dropdown.datepicker-orient-top:before { - top: -7px; -} -.datepicker-dropdown.datepicker-orient-top:after { - top: -6px; -} -.datepicker-dropdown.datepicker-orient-bottom:before { - bottom: -7px; - border-bottom: 0; - border-top: 7px solid #999; -} -.datepicker-dropdown.datepicker-orient-bottom:after { - bottom: -6px; - border-bottom: 0; - border-top: 6px solid #fff; -} -.datepicker > div { - display: none; -} -.datepicker.days div.datepicker-days { - display: block; -} -.datepicker.months div.datepicker-months { - display: block; -} -.datepicker.years div.datepicker-years { - display: block; -} -.datepicker table { - margin: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.datepicker table tr td, -.datepicker table tr th { - text-align: center; - width: 30px; - height: 30px; - border-radius: 4px; - border: none; -} -.table-striped .datepicker table tr td, -.table-striped .datepicker table tr th { - background-color: transparent; -} -.datepicker table tr td.day:hover, -.datepicker table tr td.day.focused { - background: #eeeeee; - cursor: pointer; -} -.datepicker table tr td.old, -.datepicker table tr td.new { - color: #999999; -} -.datepicker table tr td.disabled, -.datepicker table tr td.disabled:hover { - background: none; - color: #999999; - cursor: default; -} -.datepicker table tr td.today, -.datepicker table tr td.today:hover, -.datepicker table tr td.today.disabled, -.datepicker table tr td.today.disabled:hover { - color: #000000; - background-color: #ffdb99; - border-color: #ffb733; -} -.datepicker table tr td.today:hover, -.datepicker table tr td.today:hover:hover, -.datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today.disabled:hover:hover, -.datepicker table tr td.today:focus, -.datepicker table tr td.today:hover:focus, -.datepicker table tr td.today.disabled:focus, -.datepicker table tr td.today.disabled:hover:focus, -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.today, -.open .dropdown-toggle.datepicker table tr td.today:hover, -.open .dropdown-toggle.datepicker table tr td.today.disabled, -.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { - color: #000000; - background-color: #ffcd70; - border-color: #f59e00; -} -.datepicker table tr td.today:active, -.datepicker table tr td.today:hover:active, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.active, -.datepicker table tr td.today:hover.active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.today, -.open .dropdown-toggle.datepicker table tr td.today:hover, -.open .dropdown-toggle.datepicker table tr td.today.disabled, -.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { - background-image: none; -} -.datepicker table tr td.today.disabled, -.datepicker table tr td.today:hover.disabled, -.datepicker table tr td.today.disabled.disabled, -.datepicker table tr td.today.disabled:hover.disabled, -.datepicker table tr td.today[disabled], -.datepicker table tr td.today:hover[disabled], -.datepicker table tr td.today.disabled[disabled], -.datepicker table tr td.today.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.today, -fieldset[disabled] .datepicker table tr td.today:hover, -fieldset[disabled] .datepicker table tr td.today.disabled, -fieldset[disabled] .datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today.disabled:hover, -.datepicker table tr td.today:hover.disabled:hover, -.datepicker table tr td.today.disabled.disabled:hover, -.datepicker table tr td.today.disabled:hover.disabled:hover, -.datepicker table tr td.today[disabled]:hover, -.datepicker table tr td.today:hover[disabled]:hover, -.datepicker table tr td.today.disabled[disabled]:hover, -.datepicker table tr td.today.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.today:hover, -fieldset[disabled] .datepicker table tr td.today:hover:hover, -fieldset[disabled] .datepicker table tr td.today.disabled:hover, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover, -.datepicker table tr td.today.disabled:focus, -.datepicker table tr td.today:hover.disabled:focus, -.datepicker table tr td.today.disabled.disabled:focus, -.datepicker table tr td.today.disabled:hover.disabled:focus, -.datepicker table tr td.today[disabled]:focus, -.datepicker table tr td.today:hover[disabled]:focus, -.datepicker table tr td.today.disabled[disabled]:focus, -.datepicker table tr td.today.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.today:focus, -fieldset[disabled] .datepicker table tr td.today:hover:focus, -fieldset[disabled] .datepicker table tr td.today.disabled:focus, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus, -.datepicker table tr td.today.disabled:active, -.datepicker table tr td.today:hover.disabled:active, -.datepicker table tr td.today.disabled.disabled:active, -.datepicker table tr td.today.disabled:hover.disabled:active, -.datepicker table tr td.today[disabled]:active, -.datepicker table tr td.today:hover[disabled]:active, -.datepicker table tr td.today.disabled[disabled]:active, -.datepicker table tr td.today.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.today:active, -fieldset[disabled] .datepicker table tr td.today:hover:active, -fieldset[disabled] .datepicker table tr td.today.disabled:active, -fieldset[disabled] .datepicker table tr td.today.disabled:hover:active, -.datepicker table tr td.today.disabled.active, -.datepicker table tr td.today:hover.disabled.active, -.datepicker table tr td.today.disabled.disabled.active, -.datepicker table tr td.today.disabled:hover.disabled.active, -.datepicker table tr td.today[disabled].active, -.datepicker table tr td.today:hover[disabled].active, -.datepicker table tr td.today.disabled[disabled].active, -.datepicker table tr td.today.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.today.active, -fieldset[disabled] .datepicker table tr td.today:hover.active, -fieldset[disabled] .datepicker table tr td.today.disabled.active, -fieldset[disabled] .datepicker table tr td.today.disabled:hover.active { - background-color: #ffdb99; - border-color: #ffb733; -} -.datepicker table tr td.today:hover:hover { - color: #000; -} -.datepicker table tr td.today.active:hover { - color: #fff; -} -.datepicker table tr td.range, -.datepicker table tr td.range:hover, -.datepicker table tr td.range.disabled, -.datepicker table tr td.range.disabled:hover { - background: #eeeeee; - border-radius: 0; -} -.datepicker table tr td.range.today, -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today.disabled:hover { - color: #000000; - background-color: #f7ca77; - border-color: #f1a417; - border-radius: 0; -} -.datepicker table tr td.range.today:hover, -.datepicker table tr td.range.today:hover:hover, -.datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today.disabled:hover:hover, -.datepicker table tr td.range.today:focus, -.datepicker table tr td.range.today:hover:focus, -.datepicker table tr td.range.today.disabled:focus, -.datepicker table tr td.range.today.disabled:hover:focus, -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.range.today, -.open .dropdown-toggle.datepicker table tr td.range.today:hover, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { - color: #000000; - background-color: #f4bb51; - border-color: #bf800c; -} -.datepicker table tr td.range.today:active, -.datepicker table tr td.range.today:hover:active, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.active, -.datepicker table tr td.range.today:hover.active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.range.today, -.open .dropdown-toggle.datepicker table tr td.range.today:hover, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled, -.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { - background-image: none; -} -.datepicker table tr td.range.today.disabled, -.datepicker table tr td.range.today:hover.disabled, -.datepicker table tr td.range.today.disabled.disabled, -.datepicker table tr td.range.today.disabled:hover.disabled, -.datepicker table tr td.range.today[disabled], -.datepicker table tr td.range.today:hover[disabled], -.datepicker table tr td.range.today.disabled[disabled], -.datepicker table tr td.range.today.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.range.today, -fieldset[disabled] .datepicker table tr td.range.today:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today.disabled:hover, -.datepicker table tr td.range.today:hover.disabled:hover, -.datepicker table tr td.range.today.disabled.disabled:hover, -.datepicker table tr td.range.today.disabled:hover.disabled:hover, -.datepicker table tr td.range.today[disabled]:hover, -.datepicker table tr td.range.today:hover[disabled]:hover, -.datepicker table tr td.range.today.disabled[disabled]:hover, -.datepicker table tr td.range.today.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.range.today:hover, -fieldset[disabled] .datepicker table tr td.range.today:hover:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover, -.datepicker table tr td.range.today.disabled:focus, -.datepicker table tr td.range.today:hover.disabled:focus, -.datepicker table tr td.range.today.disabled.disabled:focus, -.datepicker table tr td.range.today.disabled:hover.disabled:focus, -.datepicker table tr td.range.today[disabled]:focus, -.datepicker table tr td.range.today:hover[disabled]:focus, -.datepicker table tr td.range.today.disabled[disabled]:focus, -.datepicker table tr td.range.today.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.range.today:focus, -fieldset[disabled] .datepicker table tr td.range.today:hover:focus, -fieldset[disabled] .datepicker table tr td.range.today.disabled:focus, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus, -.datepicker table tr td.range.today.disabled:active, -.datepicker table tr td.range.today:hover.disabled:active, -.datepicker table tr td.range.today.disabled.disabled:active, -.datepicker table tr td.range.today.disabled:hover.disabled:active, -.datepicker table tr td.range.today[disabled]:active, -.datepicker table tr td.range.today:hover[disabled]:active, -.datepicker table tr td.range.today.disabled[disabled]:active, -.datepicker table tr td.range.today.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.range.today:active, -fieldset[disabled] .datepicker table tr td.range.today:hover:active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active, -.datepicker table tr td.range.today.disabled.active, -.datepicker table tr td.range.today:hover.disabled.active, -.datepicker table tr td.range.today.disabled.disabled.active, -.datepicker table tr td.range.today.disabled:hover.disabled.active, -.datepicker table tr td.range.today[disabled].active, -.datepicker table tr td.range.today:hover[disabled].active, -.datepicker table tr td.range.today.disabled[disabled].active, -.datepicker table tr td.range.today.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.range.today.active, -fieldset[disabled] .datepicker table tr td.range.today:hover.active, -fieldset[disabled] .datepicker table tr td.range.today.disabled.active, -fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active { - background-color: #f7ca77; - border-color: #f1a417; -} -.datepicker table tr td.selected, -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected.disabled:hover { - color: #ffffff; - background-color: #999999; - border-color: #555555; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.selected:hover, -.datepicker table tr td.selected:hover:hover, -.datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected.disabled:hover:hover, -.datepicker table tr td.selected:focus, -.datepicker table tr td.selected:hover:focus, -.datepicker table tr td.selected.disabled:focus, -.datepicker table tr td.selected.disabled:hover:focus, -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.selected, -.open .dropdown-toggle.datepicker table tr td.selected:hover, -.open .dropdown-toggle.datepicker table tr td.selected.disabled, -.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { - color: #ffffff; - background-color: #858585; - border-color: #373737; -} -.datepicker table tr td.selected:active, -.datepicker table tr td.selected:hover:active, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.active, -.datepicker table tr td.selected:hover.active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.selected, -.open .dropdown-toggle.datepicker table tr td.selected:hover, -.open .dropdown-toggle.datepicker table tr td.selected.disabled, -.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { - background-image: none; -} -.datepicker table tr td.selected.disabled, -.datepicker table tr td.selected:hover.disabled, -.datepicker table tr td.selected.disabled.disabled, -.datepicker table tr td.selected.disabled:hover.disabled, -.datepicker table tr td.selected[disabled], -.datepicker table tr td.selected:hover[disabled], -.datepicker table tr td.selected.disabled[disabled], -.datepicker table tr td.selected.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.selected, -fieldset[disabled] .datepicker table tr td.selected:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected.disabled:hover, -.datepicker table tr td.selected:hover.disabled:hover, -.datepicker table tr td.selected.disabled.disabled:hover, -.datepicker table tr td.selected.disabled:hover.disabled:hover, -.datepicker table tr td.selected[disabled]:hover, -.datepicker table tr td.selected:hover[disabled]:hover, -.datepicker table tr td.selected.disabled[disabled]:hover, -.datepicker table tr td.selected.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.selected:hover, -fieldset[disabled] .datepicker table tr td.selected:hover:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover, -.datepicker table tr td.selected.disabled:focus, -.datepicker table tr td.selected:hover.disabled:focus, -.datepicker table tr td.selected.disabled.disabled:focus, -.datepicker table tr td.selected.disabled:hover.disabled:focus, -.datepicker table tr td.selected[disabled]:focus, -.datepicker table tr td.selected:hover[disabled]:focus, -.datepicker table tr td.selected.disabled[disabled]:focus, -.datepicker table tr td.selected.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.selected:focus, -fieldset[disabled] .datepicker table tr td.selected:hover:focus, -fieldset[disabled] .datepicker table tr td.selected.disabled:focus, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus, -.datepicker table tr td.selected.disabled:active, -.datepicker table tr td.selected:hover.disabled:active, -.datepicker table tr td.selected.disabled.disabled:active, -.datepicker table tr td.selected.disabled:hover.disabled:active, -.datepicker table tr td.selected[disabled]:active, -.datepicker table tr td.selected:hover[disabled]:active, -.datepicker table tr td.selected.disabled[disabled]:active, -.datepicker table tr td.selected.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.selected:active, -fieldset[disabled] .datepicker table tr td.selected:hover:active, -fieldset[disabled] .datepicker table tr td.selected.disabled:active, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active, -.datepicker table tr td.selected.disabled.active, -.datepicker table tr td.selected:hover.disabled.active, -.datepicker table tr td.selected.disabled.disabled.active, -.datepicker table tr td.selected.disabled:hover.disabled.active, -.datepicker table tr td.selected[disabled].active, -.datepicker table tr td.selected:hover[disabled].active, -.datepicker table tr td.selected.disabled[disabled].active, -.datepicker table tr td.selected.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.selected.active, -fieldset[disabled] .datepicker table tr td.selected:hover.active, -fieldset[disabled] .datepicker table tr td.selected.disabled.active, -fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active { - background-color: #999999; - border-color: #555555; -} -.datepicker table tr td.active, -.datepicker table tr td.active:hover, -.datepicker table tr td.active.disabled, -.datepicker table tr td.active.disabled:hover { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td.active:hover, -.datepicker table tr td.active:hover:hover, -.datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active.disabled:hover:hover, -.datepicker table tr td.active:focus, -.datepicker table tr td.active:hover:focus, -.datepicker table tr td.active.disabled:focus, -.datepicker table tr td.active.disabled:hover:focus, -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.active, -.open .dropdown-toggle.datepicker table tr td.active:hover, -.open .dropdown-toggle.datepicker table tr td.active.disabled, -.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} -.datepicker table tr td.active:active, -.datepicker table tr td.active:hover:active, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.active, -.datepicker table tr td.active:hover.active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td.active, -.open .dropdown-toggle.datepicker table tr td.active:hover, -.open .dropdown-toggle.datepicker table tr td.active.disabled, -.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { - background-image: none; -} -.datepicker table tr td.active.disabled, -.datepicker table tr td.active:hover.disabled, -.datepicker table tr td.active.disabled.disabled, -.datepicker table tr td.active.disabled:hover.disabled, -.datepicker table tr td.active[disabled], -.datepicker table tr td.active:hover[disabled], -.datepicker table tr td.active.disabled[disabled], -.datepicker table tr td.active.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td.active, -fieldset[disabled] .datepicker table tr td.active:hover, -fieldset[disabled] .datepicker table tr td.active.disabled, -fieldset[disabled] .datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active.disabled:hover, -.datepicker table tr td.active:hover.disabled:hover, -.datepicker table tr td.active.disabled.disabled:hover, -.datepicker table tr td.active.disabled:hover.disabled:hover, -.datepicker table tr td.active[disabled]:hover, -.datepicker table tr td.active:hover[disabled]:hover, -.datepicker table tr td.active.disabled[disabled]:hover, -.datepicker table tr td.active.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td.active:hover, -fieldset[disabled] .datepicker table tr td.active:hover:hover, -fieldset[disabled] .datepicker table tr td.active.disabled:hover, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover, -.datepicker table tr td.active.disabled:focus, -.datepicker table tr td.active:hover.disabled:focus, -.datepicker table tr td.active.disabled.disabled:focus, -.datepicker table tr td.active.disabled:hover.disabled:focus, -.datepicker table tr td.active[disabled]:focus, -.datepicker table tr td.active:hover[disabled]:focus, -.datepicker table tr td.active.disabled[disabled]:focus, -.datepicker table tr td.active.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td.active:focus, -fieldset[disabled] .datepicker table tr td.active:hover:focus, -fieldset[disabled] .datepicker table tr td.active.disabled:focus, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus, -.datepicker table tr td.active.disabled:active, -.datepicker table tr td.active:hover.disabled:active, -.datepicker table tr td.active.disabled.disabled:active, -.datepicker table tr td.active.disabled:hover.disabled:active, -.datepicker table tr td.active[disabled]:active, -.datepicker table tr td.active:hover[disabled]:active, -.datepicker table tr td.active.disabled[disabled]:active, -.datepicker table tr td.active.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td.active:active, -fieldset[disabled] .datepicker table tr td.active:hover:active, -fieldset[disabled] .datepicker table tr td.active.disabled:active, -fieldset[disabled] .datepicker table tr td.active.disabled:hover:active, -.datepicker table tr td.active.disabled.active, -.datepicker table tr td.active:hover.disabled.active, -.datepicker table tr td.active.disabled.disabled.active, -.datepicker table tr td.active.disabled:hover.disabled.active, -.datepicker table tr td.active[disabled].active, -.datepicker table tr td.active:hover[disabled].active, -.datepicker table tr td.active.disabled[disabled].active, -.datepicker table tr td.active.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td.active.active, -fieldset[disabled] .datepicker table tr td.active:hover.active, -fieldset[disabled] .datepicker table tr td.active.disabled.active, -fieldset[disabled] .datepicker table tr td.active.disabled:hover.active { - background-color: #428bca; - border-color: #357ebd; -} -.datepicker table tr td span { - display: block; - width: 23%; - height: 54px; - line-height: 54px; - float: left; - margin: 1%; - cursor: pointer; - border-radius: 4px; -} -.datepicker table tr td span:hover { - background: #eeeeee; -} -.datepicker table tr td span.disabled, -.datepicker table tr td span.disabled:hover { - background: none; - color: #999999; - cursor: default; -} -.datepicker table tr td span.active, -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active.disabled:hover { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.datepicker table tr td span.active:hover, -.datepicker table tr td span.active:hover:hover, -.datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active.disabled:hover:hover, -.datepicker table tr td span.active:focus, -.datepicker table tr td span.active:hover:focus, -.datepicker table tr td span.active.disabled:focus, -.datepicker table tr td span.active.disabled:hover:focus, -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td span.active, -.open .dropdown-toggle.datepicker table tr td span.active:hover, -.open .dropdown-toggle.datepicker table tr td span.active.disabled, -.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} -.datepicker table tr td span.active:active, -.datepicker table tr td span.active:hover:active, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.active, -.datepicker table tr td span.active:hover.active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active.disabled:hover.active, -.open .dropdown-toggle.datepicker table tr td span.active, -.open .dropdown-toggle.datepicker table tr td span.active:hover, -.open .dropdown-toggle.datepicker table tr td span.active.disabled, -.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { - background-image: none; -} -.datepicker table tr td span.active.disabled, -.datepicker table tr td span.active:hover.disabled, -.datepicker table tr td span.active.disabled.disabled, -.datepicker table tr td span.active.disabled:hover.disabled, -.datepicker table tr td span.active[disabled], -.datepicker table tr td span.active:hover[disabled], -.datepicker table tr td span.active.disabled[disabled], -.datepicker table tr td span.active.disabled:hover[disabled], -fieldset[disabled] .datepicker table tr td span.active, -fieldset[disabled] .datepicker table tr td span.active:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active.disabled:hover, -.datepicker table tr td span.active:hover.disabled:hover, -.datepicker table tr td span.active.disabled.disabled:hover, -.datepicker table tr td span.active.disabled:hover.disabled:hover, -.datepicker table tr td span.active[disabled]:hover, -.datepicker table tr td span.active:hover[disabled]:hover, -.datepicker table tr td span.active.disabled[disabled]:hover, -.datepicker table tr td span.active.disabled:hover[disabled]:hover, -fieldset[disabled] .datepicker table tr td span.active:hover, -fieldset[disabled] .datepicker table tr td span.active:hover:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover, -.datepicker table tr td span.active.disabled:focus, -.datepicker table tr td span.active:hover.disabled:focus, -.datepicker table tr td span.active.disabled.disabled:focus, -.datepicker table tr td span.active.disabled:hover.disabled:focus, -.datepicker table tr td span.active[disabled]:focus, -.datepicker table tr td span.active:hover[disabled]:focus, -.datepicker table tr td span.active.disabled[disabled]:focus, -.datepicker table tr td span.active.disabled:hover[disabled]:focus, -fieldset[disabled] .datepicker table tr td span.active:focus, -fieldset[disabled] .datepicker table tr td span.active:hover:focus, -fieldset[disabled] .datepicker table tr td span.active.disabled:focus, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus, -.datepicker table tr td span.active.disabled:active, -.datepicker table tr td span.active:hover.disabled:active, -.datepicker table tr td span.active.disabled.disabled:active, -.datepicker table tr td span.active.disabled:hover.disabled:active, -.datepicker table tr td span.active[disabled]:active, -.datepicker table tr td span.active:hover[disabled]:active, -.datepicker table tr td span.active.disabled[disabled]:active, -.datepicker table tr td span.active.disabled:hover[disabled]:active, -fieldset[disabled] .datepicker table tr td span.active:active, -fieldset[disabled] .datepicker table tr td span.active:hover:active, -fieldset[disabled] .datepicker table tr td span.active.disabled:active, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active, -.datepicker table tr td span.active.disabled.active, -.datepicker table tr td span.active:hover.disabled.active, -.datepicker table tr td span.active.disabled.disabled.active, -.datepicker table tr td span.active.disabled:hover.disabled.active, -.datepicker table tr td span.active[disabled].active, -.datepicker table tr td span.active:hover[disabled].active, -.datepicker table tr td span.active.disabled[disabled].active, -.datepicker table tr td span.active.disabled:hover[disabled].active, -fieldset[disabled] .datepicker table tr td span.active.active, -fieldset[disabled] .datepicker table tr td span.active:hover.active, -fieldset[disabled] .datepicker table tr td span.active.disabled.active, -fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active { - background-color: #428bca; - border-color: #357ebd; -} -.datepicker table tr td span.old, -.datepicker table tr td span.new { - color: #999999; -} -.datepicker th.datepicker-switch { - width: 145px; -} -.datepicker thead tr:first-child th, -.datepicker tfoot tr th { - cursor: pointer; -} -.datepicker thead tr:first-child th:hover, -.datepicker tfoot tr th:hover { - background: #eeeeee; -} -.datepicker .cw { - font-size: 10px; - width: 12px; - padding: 0 2px 0 5px; - vertical-align: middle; -} -.datepicker thead tr:first-child th.cw { - cursor: default; - background-color: transparent; -} -.input-group.date .input-group-addon i { - cursor: pointer; - width: 16px; - height: 16px; -} -.input-daterange input { - text-align: center; -} -.input-daterange input:first-child { - border-radius: 3px 0 0 3px; -} -.input-daterange input:last-child { - border-radius: 0 3px 3px 0; -} -.input-daterange .input-group-addon { - width: auto; - min-width: 16px; - padding: 4px 5px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - text-shadow: 0 1px 0 #fff; - vertical-align: middle; - background-color: #eeeeee; - border-width: 1px 0; - margin-left: -5px; - margin-right: -5px; -} -.datepicker.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - float: left; - display: none; - min-width: 160px; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *border-right-width: 2px; - *border-bottom-width: 2px; - color: #333333; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 1.428571429; -} -.datepicker.dropdown-menu th, -.datepicker.dropdown-menu td { - padding: 4px 5px; -} diff --git a/static/css/plugins/dropzone/basic.css b/static/css/plugins/dropzone/basic.css deleted file mode 100644 index 83084dbe1..000000000 --- a/static/css/plugins/dropzone/basic.css +++ /dev/null @@ -1,155 +0,0 @@ -/* The MIT License */ -.dropzone, -.dropzone *, -.dropzone-previews, -.dropzone-previews * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.dropzone { - position: relative; - border: 1px solid rgba(0,0,0,0.08); - background: rgba(0,0,0,0.02); - padding: 1em; -} -.dropzone.dz-clickable { - cursor: pointer; -} -.dropzone.dz-clickable .dz-message, -.dropzone.dz-clickable .dz-message span { - cursor: pointer; -} -.dropzone.dz-clickable * { - cursor: default; -} -.dropzone .dz-message { - opacity: 1; - -ms-filter: none; - filter: none; -} -.dropzone.dz-drag-hover { - border-color: rgba(0,0,0,0.15); - background: rgba(0,0,0,0.04); -} -.dropzone.dz-started .dz-message { - display: none; -} -.dropzone .dz-preview, -.dropzone-previews .dz-preview { - background: rgba(255,255,255,0.8); - position: relative; - display: inline-block; - margin: 17px; - vertical-align: top; - border: 1px solid #acacac; - padding: 6px 6px 6px 6px; -} -.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail], -.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] { - display: none; -} -.dropzone .dz-preview .dz-details, -.dropzone-previews .dz-preview .dz-details { - width: 100px; - height: 100px; - position: relative; - background: #ebebeb; - padding: 5px; - margin-bottom: 22px; -} -.dropzone .dz-preview .dz-details .dz-filename, -.dropzone-previews .dz-preview .dz-details .dz-filename { - overflow: hidden; - height: 100%; -} -.dropzone .dz-preview .dz-details img, -.dropzone-previews .dz-preview .dz-details img { - position: absolute; - top: 0; - left: 0; - width: 100px; - height: 100px; -} -.dropzone .dz-preview .dz-details .dz-size, -.dropzone-previews .dz-preview .dz-details .dz-size { - position: absolute; - bottom: -28px; - left: 3px; - height: 28px; - line-height: 28px; -} -.dropzone .dz-preview.dz-error .dz-error-mark, -.dropzone-previews .dz-preview.dz-error .dz-error-mark { - display: block; -} -.dropzone .dz-preview.dz-success .dz-success-mark, -.dropzone-previews .dz-preview.dz-success .dz-success-mark { - display: block; -} -.dropzone .dz-preview:hover .dz-details img, -.dropzone-previews .dz-preview:hover .dz-details img { - display: none; -} -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark, -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark { - display: none; - position: absolute; - width: 40px; - height: 40px; - font-size: 30px; - text-align: center; - right: -10px; - top: -10px; -} -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark { - color: #8cc657; -} -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark { - color: #ee162d; -} -.dropzone .dz-preview .dz-progress, -.dropzone-previews .dz-preview .dz-progress { - position: absolute; - top: 100px; - left: 6px; - right: 6px; - height: 6px; - background: #d7d7d7; - display: none; -} -.dropzone .dz-preview .dz-progress .dz-upload, -.dropzone-previews .dz-preview .dz-progress .dz-upload { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 0%; - background-color: #8cc657; -} -.dropzone .dz-preview.dz-processing .dz-progress, -.dropzone-previews .dz-preview.dz-processing .dz-progress { - display: block; -} -.dropzone .dz-preview .dz-error-message, -.dropzone-previews .dz-preview .dz-error-message { - display: none; - position: absolute; - top: -5px; - left: -20px; - background: rgba(245,245,245,0.8); - padding: 8px 10px; - color: #800; - min-width: 140px; - max-width: 500px; - z-index: 500; -} -.dropzone .dz-preview:hover.dz-error .dz-error-message, -.dropzone-previews .dz-preview:hover.dz-error .dz-error-message { - display: block; -} diff --git a/static/css/plugins/dropzone/dropzone.css b/static/css/plugins/dropzone/dropzone.css deleted file mode 100644 index fc18729c5..000000000 --- a/static/css/plugins/dropzone/dropzone.css +++ /dev/null @@ -1,410 +0,0 @@ -/* The MIT License */ -.dropzone, -.dropzone *, -.dropzone-previews, -.dropzone-previews * { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.dropzone { - position: relative; - border: 1px solid rgba(0,0,0,0.08); - background: rgba(0,0,0,0.02); - padding: 1em; -} -.dropzone.dz-clickable { - cursor: pointer; -} -.dropzone.dz-clickable .dz-message, -.dropzone.dz-clickable .dz-message span { - cursor: pointer; -} -.dropzone.dz-clickable * { - cursor: default; -} -.dropzone .dz-message { - opacity: 1; - -ms-filter: none; - filter: none; -} -.dropzone.dz-drag-hover { - border-color: rgba(0,0,0,0.15); - background: rgba(0,0,0,0.04); -} -.dropzone.dz-started .dz-message { - display: none; -} -.dropzone .dz-preview, -.dropzone-previews .dz-preview { - background: rgba(255,255,255,0.8); - position: relative; - display: inline-block; - margin: 17px; - vertical-align: top; - border: 1px solid #acacac; - padding: 6px 6px 6px 6px; -} -.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail], -.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] { - display: none; -} -.dropzone .dz-preview .dz-details, -.dropzone-previews .dz-preview .dz-details { - width: 100px; - height: 100px; - position: relative; - background: #ebebeb; - padding: 5px; - margin-bottom: 22px; -} -.dropzone .dz-preview .dz-details .dz-filename, -.dropzone-previews .dz-preview .dz-details .dz-filename { - overflow: hidden; - height: 100%; -} -.dropzone .dz-preview .dz-details img, -.dropzone-previews .dz-preview .dz-details img { - position: absolute; - top: 0; - left: 0; - width: 100px; - height: 100px; -} -.dropzone .dz-preview .dz-details .dz-size, -.dropzone-previews .dz-preview .dz-details .dz-size { - position: absolute; - bottom: -28px; - left: 3px; - height: 28px; - line-height: 28px; -} -.dropzone .dz-preview.dz-error .dz-error-mark, -.dropzone-previews .dz-preview.dz-error .dz-error-mark { - display: block; -} -.dropzone .dz-preview.dz-success .dz-success-mark, -.dropzone-previews .dz-preview.dz-success .dz-success-mark { - display: block; -} -.dropzone .dz-preview:hover .dz-details img, -.dropzone-previews .dz-preview:hover .dz-details img { - display: none; -} -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark, -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark { - display: none; - position: absolute; - width: 40px; - height: 40px; - font-size: 30px; - text-align: center; - right: -10px; - top: -10px; -} -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark { - color: #8cc657; -} -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark { - color: #ee162d; -} -.dropzone .dz-preview .dz-progress, -.dropzone-previews .dz-preview .dz-progress { - position: absolute; - top: 100px; - left: 6px; - right: 6px; - height: 6px; - background: #d7d7d7; - display: none; -} -.dropzone .dz-preview .dz-progress .dz-upload, -.dropzone-previews .dz-preview .dz-progress .dz-upload { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 0%; - background-color: #8cc657; -} -.dropzone .dz-preview.dz-processing .dz-progress, -.dropzone-previews .dz-preview.dz-processing .dz-progress { - display: block; -} -.dropzone .dz-preview .dz-error-message, -.dropzone-previews .dz-preview .dz-error-message { - display: none; - position: absolute; - top: -5px; - left: -20px; - background: rgba(245,245,245,0.8); - padding: 8px 10px; - color: #800; - min-width: 140px; - max-width: 500px; - z-index: 500; -} -.dropzone .dz-preview:hover.dz-error .dz-error-message, -.dropzone-previews .dz-preview:hover.dz-error .dz-error-message { - display: block; -} -.dropzone { - border: 1px solid rgba(0,0,0,0.03); - min-height: 360px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: rgba(0,0,0,0.03); - padding: 23px; -} -.dropzone .dz-default.dz-message { - opacity: 1; - -ms-filter: none; - filter: none; - -webkit-transition: opacity 0.3s ease-in-out; - -moz-transition: opacity 0.3s ease-in-out; - -o-transition: opacity 0.3s ease-in-out; - -ms-transition: opacity 0.3s ease-in-out; - transition: opacity 0.3s ease-in-out; - background-image: url("../images/spritemap.png"); - background-repeat: no-repeat; - background-position: 0 0; - position: absolute; - width: 428px; - height: 123px; - margin-left: -214px; - margin-top: -61.5px; - top: 50%; - left: 50%; -} -@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) { - .dropzone .dz-default.dz-message { - background-image: url("../images/spritemap@2x.png"); - -webkit-background-size: 428px 406px; - -moz-background-size: 428px 406px; - background-size: 428px 406px; - } -} -.dropzone .dz-default.dz-message span { - display: none; -} -.dropzone.dz-square .dz-default.dz-message { - background-position: 0 -123px; - width: 268px; - margin-left: -134px; - height: 174px; - margin-top: -87px; -} -.dropzone.dz-drag-hover .dz-message { - opacity: 0.15; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)"; - filter: alpha(opacity=15); -} -.dropzone.dz-started .dz-message { - display: block; - opacity: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); -} -.dropzone .dz-preview, -.dropzone-previews .dz-preview { - -webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16); - box-shadow: 1px 1px 4px rgba(0,0,0,0.16); - font-size: 14px; -} -.dropzone .dz-preview.dz-image-preview:hover .dz-details img, -.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img { - display: block; - opacity: 0.1; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; - filter: alpha(opacity=10); -} -.dropzone .dz-preview.dz-success .dz-success-mark, -.dropzone-previews .dz-preview.dz-success .dz-success-mark { - opacity: 1; - -ms-filter: none; - filter: none; -} -.dropzone .dz-preview.dz-error .dz-error-mark, -.dropzone-previews .dz-preview.dz-error .dz-error-mark { - opacity: 1; - -ms-filter: none; - filter: none; -} -.dropzone .dz-preview.dz-error .dz-progress .dz-upload, -.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload { - background: #ee1e2d; -} -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark, -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark { - display: block; - opacity: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -webkit-transition: opacity 0.4s ease-in-out; - -moz-transition: opacity 0.4s ease-in-out; - -o-transition: opacity 0.4s ease-in-out; - -ms-transition: opacity 0.4s ease-in-out; - transition: opacity 0.4s ease-in-out; - background-image: url("../images/spritemap.png"); - background-repeat: no-repeat; -} -@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) { - .dropzone .dz-preview .dz-error-mark, - .dropzone-previews .dz-preview .dz-error-mark, - .dropzone .dz-preview .dz-success-mark, - .dropzone-previews .dz-preview .dz-success-mark { - background-image: url("../images/spritemap@2x.png"); - -webkit-background-size: 428px 406px; - -moz-background-size: 428px 406px; - background-size: 428px 406px; - } -} -.dropzone .dz-preview .dz-error-mark span, -.dropzone-previews .dz-preview .dz-error-mark span, -.dropzone .dz-preview .dz-success-mark span, -.dropzone-previews .dz-preview .dz-success-mark span { - display: none; -} -.dropzone .dz-preview .dz-error-mark, -.dropzone-previews .dz-preview .dz-error-mark { - background-position: -268px -123px; -} -.dropzone .dz-preview .dz-success-mark, -.dropzone-previews .dz-preview .dz-success-mark { - background-position: -268px -163px; -} -.dropzone .dz-preview .dz-progress .dz-upload, -.dropzone-previews .dz-preview .dz-progress .dz-upload { - -webkit-animation: loading 0.4s linear infinite; - -moz-animation: loading 0.4s linear infinite; - -o-animation: loading 0.4s linear infinite; - -ms-animation: loading 0.4s linear infinite; - animation: loading 0.4s linear infinite; - -webkit-transition: width 0.3s ease-in-out; - -moz-transition: width 0.3s ease-in-out; - -o-transition: width 0.3s ease-in-out; - -ms-transition: width 0.3s ease-in-out; - transition: width 0.3s ease-in-out; - -webkit-border-radius: 2px; - border-radius: 2px; - position: absolute; - top: 0; - left: 0; - width: 0%; - height: 100%; - background-image: url("../images/spritemap.png"); - background-repeat: repeat-x; - background-position: 0px -400px; -} -@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) { - .dropzone .dz-preview .dz-progress .dz-upload, - .dropzone-previews .dz-preview .dz-progress .dz-upload { - background-image: url("../images/spritemap@2x.png"); - -webkit-background-size: 428px 406px; - -moz-background-size: 428px 406px; - background-size: 428px 406px; - } -} -.dropzone .dz-preview.dz-success .dz-progress, -.dropzone-previews .dz-preview.dz-success .dz-progress { - display: block; - opacity: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -webkit-transition: opacity 0.4s ease-in-out; - -moz-transition: opacity 0.4s ease-in-out; - -o-transition: opacity 0.4s ease-in-out; - -ms-transition: opacity 0.4s ease-in-out; - transition: opacity 0.4s ease-in-out; -} -.dropzone .dz-preview .dz-error-message, -.dropzone-previews .dz-preview .dz-error-message { - display: block; - opacity: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - -webkit-transition: opacity 0.3s ease-in-out; - -moz-transition: opacity 0.3s ease-in-out; - -o-transition: opacity 0.3s ease-in-out; - -ms-transition: opacity 0.3s ease-in-out; - transition: opacity 0.3s ease-in-out; -} -.dropzone .dz-preview:hover.dz-error .dz-error-message, -.dropzone-previews .dz-preview:hover.dz-error .dz-error-message { - opacity: 1; - -ms-filter: none; - filter: none; -} -.dropzone a.dz-remove, -.dropzone-previews a.dz-remove { - background-image: -webkit-linear-gradient(top, #fafafa, #eee); - background-image: -moz-linear-gradient(top, #fafafa, #eee); - background-image: -o-linear-gradient(top, #fafafa, #eee); - background-image: -ms-linear-gradient(top, #fafafa, #eee); - background-image: linear-gradient(to bottom, #fafafa, #eee); - -webkit-border-radius: 2px; - border-radius: 2px; - border: 1px solid #eee; - text-decoration: none; - display: block; - padding: 4px 5px; - text-align: center; - color: #aaa; - margin-top: 26px; -} -.dropzone a.dz-remove:hover, -.dropzone-previews a.dz-remove:hover { - color: #666; -} -@-moz-keyframes loading { - 0% { - background-position: 0 -400px; - } - - 100% { - background-position: -7px -400px; - } -} -@-webkit-keyframes loading { - 0% { - background-position: 0 -400px; - } - - 100% { - background-position: -7px -400px; - } -} -@-o-keyframes loading { - 0% { - background-position: 0 -400px; - } - - 100% { - background-position: -7px -400px; - } -} -@-ms-keyframes loading { - 0% { - background-position: 0 -400px; - } - - 100% { - background-position: -7px -400px; - } -} -@keyframes loading { - 0% { - background-position: 0 -400px; - } - - 100% { - background-position: -7px -400px; - } -} diff --git a/static/css/plugins/fullcalendar/fullcalendar.css b/static/css/plugins/fullcalendar/fullcalendar.css deleted file mode 100644 index b2feb028e..000000000 --- a/static/css/plugins/fullcalendar/fullcalendar.css +++ /dev/null @@ -1,977 +0,0 @@ -/*! - * FullCalendar v2.2.0 Stylesheet - * Docs & License: http://arshaw.com/fullcalendar/ - * (c) 2013 Adam Shaw - */ - - -.fc { - direction: ltr; - text-align: left; -} - -.fc-rtl { - text-align: right; -} - -body .fc { /* extra precedence to overcome jqui */ - font-size: 1em; -} - - -/* Colors ---------------------------------------------------------------------------------------------------*/ - -.fc-unthemed th, -.fc-unthemed td, -.fc-unthemed hr, -.fc-unthemed thead, -.fc-unthemed tbody, -.fc-unthemed .fc-row, -.fc-unthemed .fc-popover { - border-color: #ddd; -} - -.fc-unthemed .fc-popover { - background-color: #fff; -} - -.fc-unthemed hr, -.fc-unthemed .fc-popover .fc-header { - background: #eee; -} - -.fc-unthemed .fc-popover .fc-header .fc-close { - color: #666; -} - -.fc-unthemed .fc-today { - background: #fcf8e3; -} - -.fc-highlight { /* when user is selecting cells */ - background: #bce8f1; - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-bgevent { /* default look for background events */ - background: rgb(143, 223, 130); - opacity: .3; - filter: alpha(opacity=30); /* for IE */ -} - -.fc-nonbusiness { /* default look for non-business-hours areas */ - /* will inherit .fc-bgevent's styles */ - background: #ccc; -} - - -/* Icons (inline elements with styled text that mock arrow icons) ---------------------------------------------------------------------------------------------------*/ - -.fc-icon { - display: inline-block; - font-size: 2em; - line-height: .5em; - height: .5em; /* will make the total height 1em */ - font-family: "Courier New", Courier, monospace; -} - -.fc-icon-left-single-arrow:after { - content: "\02039"; - font-weight: bold; -} - -.fc-icon-right-single-arrow:after { - content: "\0203A"; - font-weight: bold; -} - -.fc-icon-left-double-arrow:after { - content: "\000AB"; -} - -.fc-icon-right-double-arrow:after { - content: "\000BB"; -} - -.fc-icon-x:after { - content: "\000D7"; -} - - -/* Buttons (styled
      '); - $container.append($icon); - $container.on('click', {dialog: this}, function(event) { - event.data.dialog.close(); - }); - - return $container; - }, - createBodyContent: function() { - var $container = $('

      JA=nv$40_xjP; -9&)Z{j>aoK80~PKIC8iPzL$KJdr=-UzS70<*&Ic@&`OSKFD*&=WLJPKg0jdojaF9KK6t%QG_z=*s+80 -kLBaksZ%TuzWw%FW=0;dPCy-I@c8lL?8CZ&`GFAg4eJhuIe73O;~(=7>OaMNxPD#UWyXJC{sZi -#A%BMd`uchb-4HAPQBhI7u^i)v{2w}Wh<^O>#}x9Mg3iq9Fs47|$Nv5M*@wLE+qaL^m6In=G8|>VHUP -^T))UMl5qB*(m6_XpHUifjMC^Mln$$;G-4mfu -#3`uAVcqeP}*|~r7KQTdiCnn)qjS6XzLvx@-KgKUdZ1+Q%|rSV0oGGHKpTDQX2ayq(904d2q);N{4_9 -*`HHdf0fd-qm+hkbu3NX7XOznUBa@wJR%~ZCzORElmYVL23e37EJw&=OLAbkW13?gVY$KbkL@mu*%(6 -;f&cMeav8>)p!81Qbp*&T6v~bHBl?B`sDQB{-xj;2rN#4slA{(;hI-%&cLn$iT6;R{ipq0Eew>+^nIpRrBqy_MJJ0iWQJ)85n*?oY2((E(K!)y{c-soUf|mI2*|Vpk{6im){rnC2f%O;r1353SKA>5a0r`h^k5>FGmA< -)PBz<-MDEbn}um)tnUkbFJvp|NKz{k`xTn4#5qYQF=#x`m2UP$+yl=ej#ApJF)q5khxj$Z{w2T^!GB80(2|T;S~ -xeBE=ko?Zwql;7Hm<;&CHfe;Djxlt1%jF;24D7>DkHByJ`t|h9 -H{YbF7s;P)$P!~P`8U8NnGqy=D+U}%lEO*jX=F#-Y>=^o3rk2`4hDSh -#r69v1kO6RWwEErZg`T^ZhG>le&3?G9GtUiMb*e1 -#Kc`dX_t1YAH-^?-e36Nn0$gm7#D28%WVA3&0u}#uC=@=i>w%q+$>MJz<@i_($cb1Q&Vf99cB6O(n~MVi4!N%DO0Ab-pbXfaVmZXV5aZZo*U@9IA^-LCz`A*jI>tP%V_<#8HtE^C1Z4k~*cOF_40ydWP~H=I9|LH?S{f*+PCnKrh -qht|xdpA^SH|IBp^?4RFU6iYWgF_(UMa09Ksc=0&o_ifKVtXj2-78Mo!zH;SCx^(H%i+A6BH_gn-Lo2CNq-C-R1JG?xYEAg~|Ca*us9))kzOz;Ptnp^k)khqAQr1Mx3^jcN2}=YKFT)ZMjav-z8cAA -a~c@;PJ14EAB2mSyPIuOFR1e?H3x>@(!K9a#?K7x|axd~s}m5bFch5v&i*>pS+@&SMW8Ka)Q>|Auu7% -RiK*|F6As500w31f9zyB?PMq8AIva7tR0%Mc_AnXWtdclG!&>TaV3E~AR!QF2;tENgaNc# --sbKuVq$mqh7^HndD#@H?buY1Nv&;DYNrv4prFmD!|CsH_MYWt&5M{$|MAS6oZQ`e@A;kI`JLbEd+y! -9`t|ECuuf;roT=*S>hwG?2I#;4{`*x?QIY5AAXK-FDIK!?=B$f#!s2S(d(@adAFlgI;6{-N{%C?c$#v8m7E|hJI*~^`+%s?Dr-Ue+@J -ilk+tA9dpBH%!9$?m@{+{SOORnV}W+*V>o(dK>FSJ9}`OrG$;7?_&*$j%TbXn+OucRYP|~&Sg*)C^s^ -2`9uJNn?V5gf{!{csJpaQOu$}lX=s)BDdxY(T$HbiQo_R3&UFLyfbUwNkJti@Q#x-QjBTc)eAK4v9&i -j*hw=Uv)led7+j1gHEIl3u6LbuEncJ*r`Ogn|wXMXj6T-4>PHFjBF7*qiTS|(3Vo%B@0%_*f2QB>|DO2!(?#dA4V!Ie_}q7STyo02|I(w>%1cV -+U5sIDn6fq9 -1E9;s>KZ(Lpcb_^#Y7Yfez9VeH2;kr_PcwecUcHRGb1N8q5(cvNKv&W66o4qC`fA0AFH>F+|oqJyN=8 -N1I%oMy4oC|z~oH)7IH*P4^@xhR=-cgE7_>s-g(W7wC(fl`{AhS$Vjlb^cL6W^!M|d7A6VIuYkj3IdX=jQ@}T>7?|n$z -^8int|;}$=coH0|{H+sutDmF#pSD*N~h3|ulYD#j>?w59LEp$ZEd{)doGSPNIpL$bmJNy-UjA6ADxoFok1?!`H38n~? -jOHm_3G6X>(;GX;>KQ~fxHR4ppah&Yl=8{A2<{FP~;Je32bAdgD=$;$Lh~ElxiBZJa*i|z7zXT#DWts -VCMf!V~)nVz>3Iek{dVjNM0O#1#CiNTu%RMAAL~wHNz#3S-4 -89xBziA$S#e)t@`L?Is6bU`>FJfE70Qr^k6faqDQXTetkPw$`j!Qz80)iNObm3yAID3AzVf-01$3diA -FT8Ydt>-Rk7m54zR_IMY@KCtK&xK+*Cj{mz&A)_;1he-odv4)OWjIEx#*gHMBDM(1C)HO2x~w@GNIcd -$lR`HcRf|E*iM`kr~_nL@B3{Bh_oakbeu2p#YOeZ+SZ@Z0E`TWg{(d34EIpZXskyRNRTqOq~D96s#Wu -|w-U^e(m!{f{ib4`h+P-I&vRmoBI)moCbhNRY>}sd21qp#HHbYBIxpd#B{g?ZXHvJbC7XCdaCr9U9!KO<~OV#6#Kd$3DXfnFM=t|}X-dyi~Q@s{ -gs(!g~s@@A=3w_WZmmH5L*u}1GXf7mYO$jo*s99x#q;VF?QVSt(4od?|I+{{D -uGYE&j)4utf64`T6-e{|XJumoL|RM;{oB#K?fjAscxRJMn2*S=nNd5P`230|_Q=LyCDr8kxd*--{3e%+43bL+*I<3P -aRlZ7y})(Q0x!_p=uGH5b?Vd(&(JUmz5cgt+vW=d0)-~#W}cy8@#4j5!h{KG_Uzf3Hk0==_z>qIH%4E -uFR`tyjkkf_HH5x(|MZFe*|>4z67EM%9-EKO0b5wGV1dS%Sr?p3fd?kXi@yw}g5NG<*nb;+$NNvrVYz -b>*rTedDy;Jy!Fh20%!-v&@0|#`j7~M$D$zY1Z>|6IwKg -RwdON`g};H*7^OF{!O2F5}D>DaMjW}o12`;L!)C^=B{47!hbZf$Kv{;miwws>Osli?PgH5oU|%K92iz -x7)_O>M~O8rAFBTk2rX?7E-bjbG=9)x`I&+{Sae-hSy6dzjkacOs9|nwpx91cSkkL`S{%?6c24dFarg -UV0}S4qugfR6hUw^ZIi+=Z;V)ly6zq$w(xk=hN6Q=2_PCMfdgKX=l!yAT#hcS+ysn7N*Fk!gH5!G5y2MI*gf6gFVsdCl{^_@+K41Gd*ChtqcO!NWVs -T%k@3n<=szWIUVu{#BA`7dBO&nJ*Y4J*Q;A+ez -@{;I_cbsX}e*fCyxX;aCUx0sN7qs32lVksYv89y5_1Wrj*LlrPVyGXN>i%z-`A7E9^~fo6`OrfTX`Z5 -|najVv98_%^X6XH&2Wr2oUVZU7u7AN?fAZu>?W>vnIOuJBF6IM$>ZXPNvE^?0=X^8&W=|6L!cNjZ_J} -xvd!v`d_OEkakDi8Z?gKBtiWn0%n|u=25@%z(+uPfFT}!D?4o@8?)sy5@&j8h&lkC(x`FxZo+2i$&({ -Fp?jccR$g$#Yf`_@Lwcd<7I@V2!i55JPZ5${^N!;_vK(@wl;ZH#lKSHEZNOU{{I{g$<4Po}TB+F!n?Y -_+$xysV-+E3Kxg;=bzQ5`Vd`dSZELaaCn?*UI6e{oG!>5A3Pv3yeHUtS}<_#Z8(DqUGx=3nfuj(_R?`hi-xlwa7K>G`u~6csuDd~rN-$NXkDNo_0G9Bd694|W7QgWk~iP)WEpyg9r(+#Eh0J{Rr`cZYkzVOI}MsOHs?hmXa1L(i%M;Jsmw4?TB_py -Q1CEYtf#l#~y2svr}xZJ>E{YGwfVD&n~cw?1grTz09t)8|=;YPJ6d)+0AyVecV26pR+scPP@zQwy)Ve -wnx8M($f8>SYB(qm2PENxmKQ4U=>*ltrBaQRckd^o2{MJZZZ4KR;zW~I&Gb^I;>8s%j&kSSv{5~Fg7q -QkP`3)#s|^^8G+nDUZ5aQ6j&H233LW}0x7|aU{P?l=F#ckIpI@RuqWsVjSYJ>0|XQR000O8^OY7yf29?aEI9xGKFI(88vp#p2 -)17GvcLW61pomMl;q6p?%i|!Byu+i6bgkxp{h_QY;J4@`}OL+DXtc65bckGSGzA?ZNs161!s#qIKFQe -brqb}^Y%7v^5DCAU1e!o)Kv^MPxCx@f4G0}@$?{W@7f@(vS9z{J;=N6@h58gnp>vMXkR5Rn(RGUe;GvMRl -cq)Lrg(({9+sT-?cwq7pp6I~o>(A8DIieEyh8U-X=x0TDRlil*%3+jS0QpXO_+ud4jDZqFy&M0J3h%dX-n>V9~ZKKxQ1=Ez4##qpt#< -wA7d%-n+B2<9EPmW!{YG$Eo~G?*(nbs -d`*iZ2hG!fs({{E<7PV-rbP4_3&zrWG7qhg@Wr_b?tiFR`A8l+PCj!nB#gg$=-oB@2QIcTwB!NhUyXyWgIDoxFu -hCx!OQfgi;&9U^l$R3{0>I23PheSgEY7-+F+3u%{`1$9o*)@<+>=d0G_T_LA{0V!1$TmRS!HbD&$h2!y*?r{2NY(f!Glu2kp&XzD5*#WC2`h)C^2}{pBv6kA5LQuLc1@p -%M0)ndJT9De{QPF_NB|y3RYG8P`2!Mx9FB^E+zN0INsu92n;0;NL$1_8*uhVU&@)6;v^p(HJG!!V8`X -qc=z)&mcQ}8@>4l=$g?~Z{is5q%`>?@+@fUK;W!~6{B8XEodN(F@%D|NqSBZ`t|Cy!>W=LH`QyG(?Sz -~2P^#!u*&i|$+bLbI!PCa(cT7iA76uPOgj9c5%8FSVjr5x)Z`Vx~WYe%-g%@M|a#M -vD47JI{x@@8D$GXbt$r66pq>M?P117xg&V%Jsnk9)m!PYWtO+7~R`SI*!c!9GAzrHd`Km%3XQbnAH;l --Xc{IF=6=;9|YMQ#_`46yDDCDc5JNjS@`*AfW}NC&%XImY#WWpqm7hV}QJ1d&GzStqofH^M`kem|f+g -fQK`pmsr~gkQh@ViNB4#GXU|B`k0r{;~nJIj!(CxF$!&^P2TuE^=2RUg8 -9!sr{KVS?Ys67Yoo8PJOqWId-RjX<>lb-;-rEpP(=kK}x$$;x>_txuV -xei7SNwMGB4*qp0;tGg&}|a@{3|_00y161dOk1i##9bDmT2G6X$7LAxPyucVPbf9z-;6YIA~1?Q3{<0}9rtFHaP{39<^bW$}mG83lRN0|T>{$s}lw?jak&EU0gCT5Mr -9H1}8tH0N8Gp`c~u-dSXhNxZ68k%ixwfcIPPOM!9V1>kA7fU1N#B-i>9uKAnp(t@2B3DF1Qk -pY`?zUZ7yIBj`2iI1za^|Fusvpdn5;vd_{Q%!Va`zlqF?Z-{x5YBZ2E=jt+x_UrunAquiaR&=&oYyt~ -51g38cOu(V-RkWoASL{YB2HPOmgYwWsmm{8~7WllC{%MnuF_=Q=^)e4bjpuEM{r6#fk0P1!)W>$y$(& -`eX>a|GdU!r&dl26@;(3Ng)bQgm6+t_yQ)Z; -U+Vr3BCkW@E@sgspcd<8A~e^LSkUqJ(HsHd1m*LAxz=r1?kcF#V0DTH|PumQGpIUfeyVqU3OhTp1jE$ -0iqK)V_u`C{dy97X{kNHo+J@2VWyK4FkmnpZ_!V{gk8Jn!@^c!$isCz-~M0WNHx5{AkSdcYf%EF8Tv* -3?eys5IG6(`pi}EIon52YDD$gyc8}Bn1B^A3v`vwv2v&?uNQ!C%loK+-qWn&~Rt*T~3y!gM3omPIuq3 -L-ZC)XDM0ha`SL6ndB{A`d{%WZ*WDkyMbuV&qg)rC{%!Q?h9Cd?+e;nLkIa$SDka{XDi;1)zBCP3I`A -M;u$Yla?Oz2T0`emj1D0LA*Q@>}(DWHJd^ctCtio4pSAqA!1T05Bc9Bu&>A-|4x$H6XRG+Pn>bZ*v|J -+sI3BhtpVTE}NAUdA)h70g9^wu<$0YkchmTNazItTGSGO{gH`UWGX__FPnBt^p_@Y(m|n_Qy|NPalX@`-1n|LL%}S7E -yqB1vDz^f;b|2N3e}#D^F~{B|AWe!kNg@Vi`dZ4uspL#|DdWu2` -{{VS_y@YRw91X)^j)GU4-YfBGXQqM?rA8i=;q6k;$LU+c&tQ4k(FJ~OQ^3Q!Kge|eni_N6#FA}O72Bu -n^Bob?ApIX+%V?}`8;?1;cW2&?nyop6Ovy$MlsOxe#)Mk -#H#-PR2$k7$3QOW-DFXWzYmi5@e>(N1PZkl<}*tbpzXGy>g8mC);NI{*Y!pERc5S*likPFxMI5@OrjTEZtY8x@ -yF2o|>;sSZn7?GSe3fT!6)D5d$F!=-YNWy3dn7@ly4XIKCKz0H7$Q!T|?zt?Yz^l@zy{Ko87FNGev*^ -Lco*JEuo)K4sxDW!pupQJnE=66g+x!`di()Xp?E^ilM$8( ->A=bcHI0Hx_@!>~f5B!I4W#(IccT>+@;Q623(hJE@Ej4M!{94|!B1XU%=mtgFd)X(@77Hp`c2h4DB0H -CSZpCeKK=m|Jf2lAD29SvR<>cI}(bv83B5zXG6ylCxOg1W8cy0CUjaE>KD&Gf+xe12f$^15Z*7M3TYT -V?dR-!^JTRdWfJ#8L^L6H&o^5X<^_h&IV>9h%%!Yn0jY92uo-Vr$4_Z!vJfeG?j9S07$8cpA)&|(Kcw -sz|`jwF!AreY+!#8fLWr@fj+RS5f;v3juH*wYEU7!3acqdmjO_!Opw*NsKVBR$s7j@>tEI|i>R($wGi -ADTqZ#K!Pf5UHF`cZEb6anKV|_K9K#xrVnhzIHOoK~OT>s~4>f5Z_OWi|deknkZR!2Tq9CyEK?u(<*e -Ks)sT(MkQA>l8T|DHdIq|~AvS0P&8Fb}YY!0Z&L)e&_s!Yy^@ph~V7Eo>|SoDncJi_OV+f9&AJvHC+Q -B8y7q_teO-P_Z2Q0%cOp~!-VobDbG1uIRf;KPq(iTYyjTECJo^{Z~8%<9#>bP>>G0rQh~Qb5_{FJ#qC -uwi@VV4NhZWJDvdc~@xBfo1@bY8z!1G9N6uGgwv8xbcsXA;uEa*%c+=JBs;8B4Ln>ZmpV9{-)uy(e;qydRsNazoapR -pd8%ZDy!Gc=pUnx*-t!PI#*t1&dxH7%rv$fhfCrWc>Topq(p#^PWH+t1)(@Vn2G&&m(W6ENl6^)G5N+_ -_2~hYAQj~^Mw1j`A}lvY!-Lk|yx-Tk^apkR{s;Q$=t|s4ifZfdz@gv`m+m8LZs^b1y(^UGmOu{nb}rjf36#pW#D9( -EMf05wEQy!%tjg(T+KhCbo+Hv&=tN5s-?4(+u~it7aHYW|0h#H?UzlyI;(m{h9sRUg}V@XEiO9rhU(Y -{;+J2!?e7{ro8nBtwoKjX_xv8#>;zR3Y>lSMV6I-63RrTB=)77>U3Dgui_vfQc9UZ-r()$#bmwM-2?2|OkMnIQwCDfuhQFV|O5c! -Efg!KPiexQ7#f!LHfN8^`zfR3)-m8$*M@9-OzbjEYt4O=EuzJ!sa9m!7{qB7O$#+jav)rPk1-B3te=* -qpr}6Y#L*E7wx5z+!AJ)#FgTHhXPX5b -il;L?#V7>`{QgsN^v6EY`T<%TWN56WmTv6grAo7GdrAP97KM5nhB3Fo5EMN@3@(e-_4u03n0+cCU9_N -A$Qa0Rz)q&Q^4TFe -{hB=-51M)Sej_7DXd@%!WXPac>;A-=f}Nja38eJM7VvT)kMqW8ak=d;`?MZyp6xQke=qs9s1=lK=x{gadNGQod*|^5e%pGWZlsSZQ)ga7`DlWb-b8rZzWWJK=-~3`%>Xb!8`rn^`-78jj!q9 -o)@c+o0F|9_Gdh$bxdy%FiW;$ir4|p>TIG~HMLt}5B&cO+<8JIUBuQ@qK|?>h=s$nb&S!X7arCAQvTv -&RNQ3*O&jU}7?D_DNBf}I;)2-D~;l-1}a`dee#U&rqqore3uPazO_Cm`?qRLEyU7HTJn3h1skDVv&Ab -v3kUJh-K{ava1FohrNj#^Glny6(0NJ?Mr^Vj^=yOH!aaoztYZB&=14;{GHh34w)x8Xpi{cK6haX7l@P -f$}&ct{WMsv7!)Kk2HMbYzNZnQlg9U&&}dbpOjpQ9fdeVQ@q_Qni`N?2i<2aLDm4o#zL`8wi{ZaTw!K -%tD7{#F!|7!!DSmK#901&`O-^#23PV$g8$-Yzp0%VJr~|x(b9Uq+@{+V -mn8ciRTbX1)&CA2Wqun9%5sHKY6wX`imD)CI--3mZs(J1`Sa0IU&!I40jc+!J2{Qyz<>sqwVaGL{B`C -+F*YD;b2EQ#RhC77ucr9@kG99Rm1TJJaU^B;a-4*B7SUU=hB%)XXV9bT%6xvy5WysH+P#18G_j-JJ`v -&50OH)$iH@E<5j6bxP5K@5GX(`N9NxF?`(JL+}~hMOGn$6C=txWTY)i2;I;oVOuu@#krVOct_(0JI4e -B@1P5(+VeytgMVh)WY&msF)i$3ShXKah|rDn9(z|)wQ4;Qj>m -zao9;CJ0di>$88~d=C8v~`T8OVJ20NCrqDM(zT&n7ZHq>NlnRb!1wOn2FUV^=<>~mCgfWgu-?3a}=)#3C3JDbv_&#+IN@t9y_fpql*fgAz$ugF)-SMDk3%mM`J<_I9Ym3 -&42`b?X^Nqt9sT_lF-ik{W?|>zmc#K}=YOTpZnBRi?Jj6-Cg=;O>hOhLLyUwsVQt3U8(}1VCTM0dZmU7G*MW2WE{~Y*Jg~7=d`(o0nVD+f -VTi{9w1jU?G)>p9D-g4ZqR+>>q{5=V1u4OoTq&CFQ(e*)Jlv4G3Ak9ll5COH+-nVZz(nQ4el=M|QRd# -IR%(XfVS+_3<(yyeDHxxFR?l4(n#DY3#Wv&qXVz++vih=7#o~djeT`oi-k5&sz3W+`m_~JI8rC?zW0? -y6?gaDtag%u5hZjI^&qZlra;ltckleWJDKiw{cbifw9gO*MQk57*N4bz%^eEZ=bdHeC(1QTZ+9(}YO1 -z|Kzw}0B*{+Hz9MTD8|@Mm(NA8vukzWr1yp#v7b*uHo%Vq5-jv~m0&XYYT-HhdWm7}BDikKZG++vhwCf{d66+33^w;U$l6U?iX+srri)f_n;U2$kGI$;Eo_|+p1k%eey_Y -;_oT?1Iz+d -0|w2#odjFGnUa&NKvt7ZXqbJEt=~p+!TWv{G1AWgdcz6uh#y&Vy%Xx9|g2*8RH4pKTD{5@(O6Py6|%= -eI$O^NvznJ~&g2?1+H(>*-(4#Rw~oFw>v0MA30OV3$O4f3$KY+uH!+5sLOcSmrRlGFC@Goxu|yn%SI5 -$0AT_GvDDe$`+ai$855SZS-HT|6G>Z!_#leV6_J=>O<}+C2!y?qtVNFcf`Hk<0051MX84ao$71XD@+b -*_5?Y_p|oU>)u7{W$k$Sq+lU!Z0-N7aO>@8Zg7fgXI1edki$VK+c3oyc_SY$wiAs0Exdy@hy)eC`m?| -y8bZEJt-NN(+>>SDnV6xAP^H)kIU|LHVd_Qlk=mOLxB5F!zf8K8^g -`PVK*WhpHtcrjo39j))^tr!+<#+6ML|Vp4PIAhB@!u`=}Ra4399S&Qf<=64h9Bk^J5L_@2pHQwvdKtP -e$%3kiF0a-ImVqF%(dtDB1_*^{zI5N9-G)_%@;5Fl_iUw-*d|ME|9@Lh4 -oLqcX`ZS4PVN;4A7wY6wLtf?k~1?P#5O>RfaM4}n#1cmrnP;MJas05`raM43 -<6gdX!S#Us9K;_hH78fS9YaZsPC{0^unAiNlbYa=4_-wF4+o%( -<#(*U%%bv+D>aEZ^dbE(Z^{AzdR*+8A68jQ&W{*c5ZKPfh5^>26Gx$`kmGNs@RdW#g4VO!&033KL-lDsP -2d3Sk&otX}`8?hkS37SHaQVu3iPjDlETEpaw6wJyhlF>#@NgK6LDmWl*rcQv7x^;Qad&x3H1=G4=i-^ -kYBF{_tywi7B>FCE+aMDgaAZD=HA(SgXJPXvO0%gz|2UDenh9Fq;vUe^J6ApWlw3Hz`mvT?VJXc}1`! -_jx8NkyWz4&nskFvwpAq;*@FRGnw6d>r67xYFSzW7Hv$v{GS*DI4fo?liLm9@WWiW?wS=w>*j$O4%J* -7cm3nF8qnRW;%^*h_=nOXDHbv~yr*mI8Bz}xQN2fjfSO;C1lLsN -$k>xJ5;dE;rlE&=owSdSGHcEBTUzkqhLvaW68xYBKvR#l!4p!?+7?;J4SYKj>lS?IO9lx?G+}zl(MAv -U*HZ@%jbyuDQ`3>!Vc16e1jqN$Nt-rs`GPH4Z9Zn8hF|fYCq{oJ>3UaM0?3C?*as{Iixfz?GS{rr@DY+*aSttn78Y{m$8x$QBvJxu$oK@Pwh>JIIe26JENhH2~F$Q>YQ4Bzkx9Y&dHLCigZsSIjN_s`$LeZO$eVm+Tm>}HHb$(B~VZ -W`Ffp+X6mDZf2#~2e%ohEX5*5y|Gcoh|$ZB18>2AJS8)rP*s-Pz{Z8vUhmP-#Tjso_cWuJG#}mQ?;Im -b*@#IolH=d4^1S>P?&M=>uX;KT -tjn2`D^|_<+06T*0y9M@=P*6Tdnxc4nM+k25X>C{V5v-0RmJGzd2bgP0z;0$syhzetzB+?kTTg-E_xZ -f$Ue(*&C(3lS)h#ur3kOAgX*|=AoTu`q!j~}Cz6Yj`DWl~a$cJ3HNC!gN}Jr>zr9U@gKc`$b;JkNo|&1AQ=NxK=gSupdh -44dMo!QO%ZzynjQC7@W4hGM4jHv%>s>8EWI#pxY*c$vSikS>epKj!zIz^=Xu^ -_=$(Qi7Zdfwn3tf%okKL>9#eQ@0<+TThn8-S%LzYQ4(@^>@LPRX#by)VzH-7EH;N%5Mi>`(Zs1KJKIs -4+Bnb>oL>aIXy`Ivx@l)edbzRlBmC|{+(t|2QTW7WXMC6|Agjh@){5Di -RGmHfs@r*Q>a7{j3=2}o4m3)VuH_6E2Lg+b7OLXzyQ|bPqyh)x_-1|}b7TyFRYPu8$iwQ&bOHF%kkl -6X5a>_RCl^d{1bD1L25BM>l`0>avS`nF6(Wqa8c!uJ1SStHYPVqSD;4doh``+n1(KdB;g%__?D(k+ZL -v7*?#@@~jbn~{jE>?L~q;cI`?clGSv$XkZT0MXD&lE%kpvrp%3~w8$mn%?3LEBGssAe~dt1Q1u=qL?s -oK1I)Io4uwU~Afy^)0#v9es^}*pJLvtRG%A>1tuG0Nu-u5EAvsQQe3RIOF9}h!v$Kz?PZc$t|7b`br+ -Ulod=mjI5*qdjL4li@ddaY-oQ*swcBsN$O{yy^og<2remMcQhpwMfSt7{;6Sk&WDp%+a?E&>`>p>y`oEZS+Z%SQQm6`a8|n%M*8hOFg4W!J=Fs})r07CfB(1loo9yGa -fdq(=fMwHl*6e5yc5*%Wlu;kw)llZA8;FUVkEj6niRNjw -^PfJ*Y8HP$=dfFQo=hLyO4lO_3yVDM_M1Ugs2i2D-ME;>{Mc)t0nPH$D07x%M=w@~-aa~wJwm*f&(=I -s++Po~x|hYITTjBQ;C18=!Ox-VWtz<#b@;a!Ds$dO$YdzG3#3oYFu=p^+ppp8zmiICm{cP#eFxnI9>4 -_Bw&R^rzlJ^4BRsD{^NfhP3%SAo--412S%FT3-A~1eQfR}UtDoS{CH%Qvlo$l{_GJIv;r9p0!Jp3#K4 -MHFU*#P`>GCSBAuUV?}_vSWE+mb@&^%3`c}i -Jo>BEj$z5skY)d*;dv2~>q?8+J7Xflytbp3O%`9y7BDUrdk+ -YJ_=lq_VqK+Sub(Jg92~s35ivg)ltZej$g*IT*r&(~pBjgUK1w?)XY1c}8(V{{k_DISE26)tTevV?a$ -lg@1?P;#=#LObZz{d*+*`wWz1V<%3OL4mODZp4ukQy5UyfrN0%kgC7GHB{YOrlR5p)Kf#6*m3%O%5{AK%G0Sp3a{*UsG -qm=={*7ql^*>U^r#!FFXUK}Hs`y?>}&HHGyGuA+uROWefiHXzxuK}myU)R38)!gzb)_v7?i1F2aqJ5x -~Y;v_tT;j==+cjyo&GG3$x6ZxWmM0RLwvt2Bn+AoJ?;|_YV&-sTo4WZOUzQ!jyT+H?ZNx=n_L$i`IdH -Swv~EUo*n;ej19ZXYUDv1|Ymj^po^LpOADE_1q04WAD8RvA792f>R6VLb0RZVE!`5mp=~ -53Xw*^KXSdHNC-qN8Qfi8|r0cIS#7-uSmVsHfX?fl2f>}|`!GWaA^L1Iep;c^JzPb$?mV#3OmH|W;b7X*d<3LcB#GHp;f{PgkgjP*fW?f!^=KH#4}gyZlG{yz@8c-LcD* -WN!|%S8nw&8Lrl{CM=IkKtfsDA=nvX*t=&6yA6E?d9%nf9HbVDeVIlDEZ{|L_+BNT&Rr0Gi4Zn*&PfN -O3}^5fb2Jek!AcP(mRs`ToUW3w>Co -Da|a#_49biGWCi}QlBxnm(QIDGs?qd4tB(=@(qxNEu -Iu7JWO}W>pw~p5=uvOgQz*laJCI9CdQmLkX*`)JU0ZvQKwmOy81*O2u-$9LU$kZOEzTU_~s01Jtp~Kp -XH2uRlt!dI{!q!gYC378hrj`7 -Ce8B%I?iW9u1@l>rP3AHy~jw2{WnsX%i_@k8x)1a?)qt^zG*8M58)Hn>TOv=)aCUn?&2LDf3M2rd@e^ -dyoEm&@#|jFHkawwwaT32%o>(d;VeX`6(;_^yZ3gBhp12xGxA4w3cXSF`DPC- -~j+0&ntL*Y$@eif_N4>`scYPXk?E#uj2CGN;SRu7-Zw+)aK+8d33c7;AH~t=tueDYhKju&Fv{Z_-2QRsZ?J?Li!2+P}Z0IlaMEe`|pxJyg&NJJ@;!%JeTg=jY>}FV45lw|>Dt{NUG%4#0=Q(+_XYpvlvNGq?I* -rhobQV(a|ZU(SD~mj6K~YbdS&cXH(=_^mT4^ifZId}(?>RdVDNU49*GZIJ~2xn8v|$MEMB{`vCP*vNC -`?V?Jb;I@q)zLg6g6f*f8z7L)^d(bW56M>!rdh~2->sheGgkI`MRa%1Ru!1aoS90;K8{DjerAf!%hU2 -mjbpD)TvdwNH8L>{6s9ySEnh_|@aAWoUeFWzC-d%0GKA8XujL-X(P^K2F>HLNH{Df%KW$k>N -8`7;bUO;wJ{}t1HX9g`exrptYuIntq*;?@#VjqQN1Z?_k^pX2b|8s!ml-z<`;B*Naok&obzAL&63gX7v&scDVMi_rL)XVOR`a`|dnfH@m -0FEa#l#q(ZCckwVA2tBhx~+fGHv*%-yETwX!P{!vCm8e0ITuJ~^0jC{4K88Z#i1~WEGX$eZFhf1ME}6tSAIs4z>IUln+XN7y -*oVmFC~!3*yNS&%0();HBmxir>E~JKfqnvzai~AV7FKCojYw=i;~p!gaY6d>P`M5?dXa!-aj}wgC+Uj -KOLSNeEWoH?5+Rt=;OgK1)$VzldcjTk_i8i6HO9l^AD&SRS7oogM8 -Ty-$GbH?O|@3@jwMCl>J^GJsy96Ru#LqhlBauHfegMO$xl2tmYT3xs(xTcq -kRY&RzMkl9G-GZscPo7MU-Kgz~QrroRiFu-n~6dPCp(FOl!Nd(- -71jXqW^6C-_muGCmoc4hr%9l;|J9amm*?IZO%rgyTQ7HfT&EjSp_2fOXd(^hgOoEY>HMeb(k(En2k>W -io@tKxG*^x8JQ*p73vrN->^g&g$DLl2ZKi-6vp$Z~t`CN2{ykUS_I3q*_~R;XBUe5`B}3+^&%=`{_ywX#bS0n2lPp`rJ -9IeOTc;dBhns={Q(eY`rsz1uP8ylvGT?Lj(g*93_=WJOJX~Q+{SnZ9`4S%=U5cRsb(zQV)R|dGy9(%G)Ump*NnQP;VL_cOG%vSwhZ)b?JScdljR=nSNx@|K0sh0mfSL;SZSL-K1BEjiAVA3@|{Xfq0>0ww(T_#*B{$O{ -V?Q)14+73Nk*KM2R6y3dBUMLp&bRTnjn`T`gb$DNh1r2Ex*EbwD>~4brhFGh)Xai=) -JoA3$Le#XMCv1;hg#6g#b<1`Wvp!2`{8-R45?V&$}UDI$b@16*`ldQ)f5J0wr(Ea%dlG}_Bwu)&eK1C -c)xveyf3r*uo*@+EGl;tG!snvaWs3cE;csMY1b8+1ktN;@K4H`)r7LlUh`7g{%VgiWP;oB$cHje(zBj -Q2|&zB?(YE2vfW^rr@+R@P4sG)FSa$WqQK{UX9L0MpMaJJKR|x142i{bOsIbmTeAqjKoq@#HVIB`)Bp -b$A}|5Y8bAo&Mt94yS&Fb47hD?I2oc8ch5y5^sh|eag}3019)&hR()1@20z+V+&k}VyTiYs -bb#u9QIn81k4R4zndPgfxYS;Rxiy;E~%wS2d-J5P2^4SxIyKYq(p&{-}}MLkBf&YTI|)8TorZVK<>;^%(&#wF?Ok!Bp -GOxK-FzGwrl=ixOl7wm$b)k_%|xhm6pj)HZWZ4-@SeT9$7g9?e^AS5tjFuoM;`=h-Xj4_R%i#DarIob -7yQo@?Apj)2f)zk#-%#bqc*`8@1fQD3OZ;|AC>!RG^>1t&=o~N-R7tuGTU)q8kb)$J{7GTQKGWbqbXdy(N4~sAct;Zq{(i$8N!qxB4_Jsu{0@@I}2CJ}xn%COAp6c}E -cuVT}pQO(b~hYt-o{T-~4Dnf~Dn!5|T5w^?K`*-SzO-021a3mwN_BRdh*eQ%6;N%uI2O1ij|4#)cfPr -9IFR8;FxG*zGrzTUNGZu8g -9hg8yA{A-Eo1mr_p`GrB4z;=Zh^)v-8m1j(s6BbG?@Aa%rfhR4F{A6T9tUn02V>NYB|pSw3GamPj;@V -6h_&m1#0Ww5q|cf?xC2I1^c+@`+4AVMN|EPt3UH`_iX5)GKHWSV;LidIqy@s(GU__N_h}Ty6q-U2>*8 -u-x+*Ma&hq`Sa*q0Ls&Ro*WbuP@_K}2{s#}IMmfhkMpVqFmy7yDdbDee|;>nWd|Ct+eeiLj!I()Ewcb4r -loBRGWCpV^r+5uV1wB{yk?GEbvg6A5K+@y|B|KLf<7tP5f~Z7l5Eb*z=|c%5NXzNYZlYp`=O!rry(XP -cw9tWpWX(p`EmG(L9qCL;cC0p#jYnw9h|C5gM$~f>ktg#h2On6n$qo*Awao6|HJECQp0FaS)S%os|Eg - ->OwgGW5NjAyTsXPs(a;u^a^zQ9ZR&gdH+eTVg9Vpy7-;dl~Z@|29+b|HT;N!7koH&J$vUi}96fIGv7F -Bbe)J@~8mHZ80MU$R8DYB^6-c*^5^Y!!<_JPwD7P>3-n)-_oQq?c{`>`H*ntG*Sy+W0?EO9KQH00008 -0P~d=M;R7wBCHtz0H0g{03HAU0B~t=FJE?LZe(wAFJx(RbZlv2FLq^eb7^mGE^v9>JZpE`wvylVD-b( -5Bx8z^WT$DgvD4nH+nYVD>l3HlyDKTW6a~p_B$6d5*>2tZ_MI63B*2Gk_i=mAx{XcZF&GR6^TL4ptoy -Xff_NTA%OTt3i|*%G(%J9qvo~>alZMO7oY`+2Ht6*SUHEmx-d}Qdev@Cu5xa;N`IVn?_Eo%z=6)W=kq -135IA`CyeRFztaq8vQIrF1Ad-L7d`*&~u_Wk?s-d$iJwCn8c?RDO+lNDd{D5u^mUNE06R{T1gtvK8AG -=ow=j%C3mG-F8`Z^JniY?35SbGC?6c7A%^J^cJLw=)m3JPl`?oOgqGod8S(gX3p>?MHbSXfQoOpcAeM -&MICmp-{c1ywh2v@tS!85R>HyKUz-nn}lbb&UEUpR?{gvW+Uq?PS^e_{F%>x5JOll(+a=!bC^PExgA# -iSl{raAKYjiL_u@o3pod^xhiVz@O>nyRN!=)rg4fLmpq>enp%@i2Pe-{n1-Z+2i4zDnLV9G{+dsxPN& -leR(_VT7O3_Q{%XVN(HRmNK;HM4VaDKpKVqA*n_2`97XVu(0JnfIf!guxM;_!7)|@ZcbQ(rsKAqYbUo -Bjg$twK85^pLN2d0tXKM!9M+o?24{4~dU^_NQFCF6Ehwgp5uEO(fNQI`8rz-?;pvU~#!TWh!Ck!aws6 -V~e#C`-6Cd{aNnI6I5;g8%tkP|<>SAL>F?!NLgkM7Eg`bu6a@K85uQK2A$cmjlH)u!1&NxM0YyRO_%u -$KtKpszmEOR7+$6KZ@d<(GalDpQN;zo}?Cg!i>>$w5I&0Vv(w&h&8AoE}E6(;rS+w%mq6Zu;jZwT*O< -4lYnpz0+_%}4yVCb<$pZNuUau)wvVP^Y)h00H_?uPw5w0VoXMTkxGz`(G_*I -{tlgVU*}q@rs`9s@WOwZhgri9TO|W=lYl+!PSPY?`D%1`-D~IPLP|yg_~_>A^G4Dh0Vz8m6F?qFKxo# -N$~UaXBqeu0S#J|J^C=t+{uCS*b+dZ&AJK3cz$4yJ^1ZBeQXu1wM9*YYKMo&av(kf(9=HJ0>F| -`#BlY5v9adBc5~`D#TD@LIK_GYQqbCZWewTNU(e<~+qx`pSu$i>*xf;?ZLO2WHYY}#SI3QwK(YmhR}J -J{%}waX?ahr=_i47zW;e)${$`cCOf#j9PuR(^SAzTWFdQE>H-A(N{;R%&TD3hWG}=KXuflpGvo>k8(l -jadN0#s)T-*Q$NGMF{SJm}iHpN<55OQ~TYur@2B>~8yFkjz=7i?x^+;BdW`c;FmOyf<02&_HvXj@f8i -KCBY%TaIAZ2f%XHwt0w;H}~-5CD!?b2Oy`piLKS9v)?39&Wi*{b3eISph0o!DP|so#?ZaLk}kAOathd -!*nCEwnl+MObmz8sp#ls$tuik%e9<|0i$TD0W(K2)BWhh1N -*dYd@WmkM_Z?xb3?tZdbvG)*G&cr?$hK+4&c_tbKl=K~F4K%6ijZ=;}aX)CrgZzjPQ1{hle1!O6(&74 --Hj&$pf1=Q2l4`~=Db=u$$dY_xsoXx;_BSSs(SH(WHxwrJh-~*gAySfa6%N96S;3wt63<=zlhJ)+ZA#bRV}|Y%R=DVOoW1<5DTg6+M -szlv(9!1SwWLG<+s=sD&D&w9GIvVXHTjx6P?6c1}V;2WWntr*hpFHGsI07Y&*wLyN#hiAG|zG{V~jqJ -^Y*LSoM@DbnIsH0YIflOM2YM!a0lI^i1#BApX+tI0x=b}gO?zxIQCD#xmOJQ)~~%8}48#E^;Zn4!_wm -$AB{6tp8MNKJ2{0b7k)s39sHHJvGEAzJ>i5tPEqB@6743RB?Q1A{A>2(D!R!r%(og9>GQsnGw=3%mU5 -0{}2RhaLRRh`^Kd&yNRm&QH&ej(XD{PTyU;{qAh~?zHCjZeQEr^geRvkMe*W+xBl~x4~^1I9LuY_?_l -iYC&&1i9r|2F8Ds@+Xq27ut$FP=P$eeJDyJv9qr9|4M4~@?+_glo=kCauo||K%5~QYP5BxXOy8<*!;1 -~p7M>;tt71wGRC{ -#Oy>W)6m!dWQW^CSjC0YFfRY1OGZM7HQEuu4+RPdplaCWIt%Kw11^_;MmycdPjzy$kOltDphX@2DS_jQ2Aw9_23$~~5w@s;-vwlR -)&L7i)nXHhfXxU?OI7o)k=?KuIga{j+-9noeKaD$ecu2<$%z1l;%OKtJ(Hnbf5PyLEr^$?pMdw|GJhL -~^9mekwu4;>a(m6@VG06xb>p(xCWjFM5X-QkXjcdyOb(mX;H20SJP2^)DlS$?XC%27X7g|f^Jy?kXxc -!jzFawYt(Zs69*yePbLr9SLL^q6gITSXMr?PfBP6c46@f3y!S+>*amHbZ&>!Gk8MAfKGFXHW0Fx!O`~ -5}E(`s~xSQKl4d#cM>hiuM7>?z9!>!{mzN*+LRtImF}6b&_EDF{DXu2T-HAP~Oj^XnL7Qin(J70@gG$ -o!l<9x%Rh3asiA@(k)hMSa^^Q!)0wfi=uY?`qIS?n#RX44tJ_k)+5Y7T8kVlfsm8HGwW!M=D;DlP<|z -GK^iq$VKR`U5?0zMpv-bM -(N8y{r3gAA`ml-0I+X214Fi8H+f_kU&Ka|HJzqR59?!>lF{$+U>Ky$5%iL@Cw27VZdI>M<%-mu|dFqO -g58r$KfjPFfpiRfYw2+g!!^;yPuUAOKW~uDfEM!nT!^n+kgU -24hOBXw8c|e|P%s^qcAXFTcJZ2QarsBnhn<{tEC{O21)8TNCHE9kz*K{piNdr8i2G(#NJyS0$K1ZewB -i5+SEzMeS>s-N+Fr=#{7TwV3CPe7z}j&NVX2O%0tQ{wSs6H5kx1Dn)~D>gbnlJ;rX(D!nm8;q@pYixf -!SAkx%Xq5Ru=SXdE(f6|E@9XnZ)q@|~8>4$Avi&bt_j_Op+(x`c*gEhgO=v7Oj>R7MhKUuZYHdW`Rvk -(MJdSg|O#8it&0oKpK{P~Zt=cc5M%mC#baUEfeLz$`W$P%@y>)xs%t8v@J}@ -a|hcFfcnSt!tc8#3?hc()8^@2Rlb`j0j6zA?ATR0QNPIq0+e!z-5dTAw(7sOz@(&gE%5QqsG=KaTkH` -Y^H=%p+5jFx(c6PNxK7(RDB0zjL~6d#5Jpl#|GxmxJm7Z2XRtEt0LTHu;(stI&svLPL8#f)u>)$G_s; -b^wlvdOB-{6A{NA&_hTGJ_6VhGD0EJUY;Sg()aZ#!U`p>|mH^tR(RTT7LfcpW4{2LOX#Wb@n)}P7Z=D -PNjW9jgi7Ef-ujNR{1d$v -Y2Pkw*_+ksUk!;j2*T@>sh4uYp^?u7L?cX)jZxQbDkj|{7Fm@Hg3T(4L1hZA+->WfpY -71~!&%gQd&FQzNXYbJ;w5hkPot;=C@1Q$*Y&qZ(;;*J33{9+Kur7-zK(dK~JgWgqtq&t_Vvpwzf=aEP -H||$~?lbQUV^KZ$XlqNUMLC&xAS59 -UB*Yq0MUN(Msm-^opdJVg7IN~-!2Oko<~36dqZO+>#Q1c&i86FA(YvireuJon`)TljphWyWoC@%>j{z5 -T~McFTv+@RK)%9dodQIq%Dv*2sOj=h&n1WEZO!&^FPPPbn3_rJpuI`!qb5GP!M9IDnufD?i{YT&?&LU -Bwn?eSvl7qTZ*PF^Lj56pN{gIXOc%opJHQlHEMXXZ!bn+uNjI!?6v{LWb=0fUPpMj*aDjfs1w&0 ->uxCS97aDunW@cl1R~8!wHKM4YCkSfz&r-puGj)i8D5%pipOMImcYVc#|`{7$*CQsBo5xsqV -{LV#$2=ANb45cs_-d4!Cx%U0G=vVQs))JK8SN;}q(uBHJuPg|v{ctah*}T9mO_N)ImLtM!&649n_DS= -5wDygb>K#t_&qhqXf`s8AVTmlD%B1Z?_wjtduu<-{G|wPNx(&IeK$48{1zIT8%q>BMm9nf;c`#X%p156wh)r6 -Yas{<#*2F?G$b~~Kx7*{ST5{;AlvJhgc-^{5JzeQ?aDl>I1{D_txGpuh+Y(evuvl`9Ef28AYO4Lmf@C -{uD6Wu3F^IFu$y?JB9~?paYhtkWU@RYv_p@34N-LjCc~I)6@Em)y7$JSRsjTx*A&}A64x$SJP4(K*N;<(39F%yqk}fz0bmVo%hD=t#m1iict1CZD)5h1y`H|q}e5Q{zEg9n+#0ys)>ApsO&1}UUj63>A8Hw;cpk|1 -D~@RZDvAIQ=YDpH!_4En0d;%i&w>f2ZH~s>F+~&(95I=3e>^ZJ10tmhQ|zXPFZvi*fOikx;Y~K^d418 -~#Y+)*=wtnhmkk5U;V|7(Jibm}YlD0B(cb_YMng7$L4EJgrH5JHg;8F5y-zZiq%w&2Y4Tc3(HVQM<+K -{XZhHuG+m~4pux@FlA8T7%tIm3({%~TzDg02Y2de-=Q0AdX8(n0zY$7mnVWB~dXW^W8`C@@NYPiUFzs -O~KpgRt|-gB?_a!*1>6+|gc*^s?>!R${1knO+%Dxu4q_juMjAY$6DAC2cu`@EU|Z1yY=n<9#fvq5%>_ -nh{C82%nEBt7-^Jaz#xH_798g?T9pm0+_^xhh@*s)M8F%zoiL|7;hwh^bg3$#~0G{gcW*LQb}bwa(7Y -ESCFAaXkrlGQ2d=zjR|W+cabnrZO&KWI&7XpSL8oCJNJ*zgwg{ -giK0U6{yF9#?a}Qfu$zRopJTdV%m_)Da8=zs-ndJ<=a%|wlj_|u=EDX81`=aAg^;^r5R%nmYC=yGLkg -iZZyJR<-HP@!mpyX;yr^WQ7P-X43SHuX43GCkCZ9^&!cy6ZfoM4L`(E1b$!!a)EX%M@zo#{P=^Y++`! -5EALD>+?L`y8MHcnOR*2Z;)OmDll-5M)muSRJ{bH?lhkSY}OA@5~_uGg@F&OsA8(A-2F_A!A(FX{nNI(>G8U%g4MK>rD6zdIuQUGBa@+(0XNxh(%BA*6*X7{|$cFTRB0KmMJaBsV -YKng&x4o)f?D_A{y{}BaU#`coyJ#}$1OwDbz_S26_+*eGb8YdfyW~Vi;%&Get>S@;GQ-kfkPsdQ=3r2 -+llB99KGje+D#?Lc3(63Wu9G-vq?tLxxiPuRc2e&ZATabew1}(HOy|+$B%T%PWMv*3l0d`ER3S>f+C0 -D~J>*5Z@>* -N_#%r?@!^STH%u?=uY~xmg%J)mLHC9AW)X0*Zhe57DX!oX_O3M-E&`xke*0X2@RCy3m`|6JMp>`If7V -`IHWjs6^LKPMt{wQ%)dFy7T&0Sw*5#Pb{uKW}~5NKO(${V_%wDb?*h=?BLtxKGrWV=6xA?#)?s<&vbWo1@2v;-7o6jQ6&9+ar!OjpQfv-WSNXT{ZBicK-qUu -+xNOJi;JZ2+?^n+?YN6dmr&a~J}wLfp{C1I10}T7{EK;%mrd0UNAkPKEf)TrgZS9_1!mw|$$ -aNT(8=++7J&#pen!+|hJ;hd=x5zv&YlR(Y$OzPm$*m?Zr&5lW}ecOKG5Jri -IOT$D2TGwhg!>&=Qj1X8(TSo_dNF;PLKQE5F0Km_-sC;WmC%e77oBaw)g19Dc}xy+I -B^lA<2KYi$GWGMq2KL>IXJF1N}-J^pBeoPTEDVYe$S;F{gV!T`WD2aW1M#l+xuzH%G|2o9KE0~qTc!C -QJ9u1Z&%?bJj5{$Pme3thP5wl;XOg4SoWr+r6;qxfJtY@^0}i^j_$D=AKft5!f^Sj!?xccFt)3qbnfd -O8W0-4B~nf1EM_CId+2QbZSXI3_!Pe`)G!bI(>vd1@*7&3i;Tw;co^v8cQ4o?+lgyEyI4BU79JS-idL{qu)?CI%U3O&snm`*45EV_Q7jOQ4`t9jO>ByJS3h=hgeOifRxb^#Lt; -bo#&yMqdc^GC1C#F7n>D;)c3Gb?J97+NYfyNS+5{-3ey3lm1V(qSZv?hW%6q`^~9a-|Dj%50mr5cSV( -%vaQ5N#tLNghGHid-dcj423JHLHI(ZWDcs;;Tq~!JEE|BR`=>fKBsDVuUr5&i?^WO9KQH000080P~d= -M}9?s1w^I*002$_02=@R0B~t=FJE?LZe(wAFJx(RbZlv2FLyICE@gOS?7e?{RK>Y4e)d;#l5BDoNHF} -45G)$h=n_j@f(v9rRDz2!yF>`+EynFim4D8-kxm5(K;x22mL{S4;#ey -2!RA)U@qQqo@kn??>IcGNk_1^pWeE)d=dHJyCoSAuM=9!u2dFFX$o|)9#{xE0ZIL-<`P2;%zoc_{PL##DUW+D>y1nIo0hzB>1~1UuP<8Hbl=@gcmAO0dw1S@?|ov?zuZ;SB;8x|{dcT%!F_A)x -+*s}yVxjWU(VX!pAMSOr+#-7|DW?;!kZ30b^f31{j2js?EU2VU%~tA*q@vqV6c|+|HbzSo8z8=z`q-Cm%+mUzlhNb_-*Dm8)stasW%K|{<9e@xN1svViLb#$u4-D}^gZ}yZG|>-x5E46HgKe9%7~jIeLKb61zad1O$ZH$*9GQ5icc$WL((oiL -7W)apTluMF5m!G2zW88#0NR8Tg?JUJ3u-ks~TcZaO+7cP})vwA4L6G@eIk$JSWWwdmLU(vWG)M=QJ&# -f$#|+L3*j_T8`6Wz4R_k)8tnRgC?zjL$qp!oNv&^Opfcqf=LbUcWU9PA+K=2);;XzyvwL;=Q#OQJ0Lj -e1&ktDE?zQ|WVqTyJbXzsTvvtN^j=oMo@Ov2kahT|SpJk&NcjEEL1bte^1(iLyED9y=QAHXIN?A#az{-PBKx)vHE@$_^aM) -9PNI$0ZwTyb#<=?mKG!_DuU-c6eMlDNf_e3bM-nF)|9+yP(;tB>-~>x!qJK&8NW=juo5OVt+EYx7}6{ -j`Hs)DIQC1~`&FXT&uqJQ4|Phc+qFNiV$}qdg}}JpDl%)L0L|kLoyJ)pRNdM!-gXb#{r=TO#$8oW9@e -90&qAKvmQAs-R7NdMQ-Iitn5h89Wx)1Lb?^`SYw_!j<#2RV&oIM&fwkFeEg(#)z5KuK4=TRg2>3!=fT -k6!G-cuVzE*BYj#yJ`A~h85cAMO;8_D3-8qmmN4=R4M=vaU>*V_GbB?L>C|bB(bm|V>vS5;3UZKRGNV -Pep5B{mJ&AHkC&yQnw&G(PR?Nd_IW@musVttX70kg(j)g0W9p2zNcy00qvud@1*$@rI+U3o~j&+g^3R -TU{NZ=jT)UnXi*6qdZ$WEmkS6|O^ih52Sat8Vt+-E~TMwP34kT}QhrA;m**nCASo<+*$0$6ZBd)EtzY -iK`=Ox#+We;l(t3)!H|uk^$KeNRs;Wr_c$C-&=!Yw4f##3d~8em&6?`14pd7q2W{iF21$Pz`kfa3SWH -?e+WpFo=Fl1f;YA2c*Ggejva~_%4({016ljVheX+_d=tJbSUUAFXFA~--UX)z}+lZj4j{Jis?Ith(NS -MXXnE(Aj_cNNrgM==3d+bK(#Q)>dbHz4{}1-$2CH4Pm`0=#fd@QOHbrrw}Mcz1K5!E9wURdosrN067) --~j_ptfkZZl%$v4V3Os|(Nbw(QH`O^d32{$L~hS8Rp?!_=-07kh7a?`waR5b>55#Q2ELK4UhNp|XvX=skni~({I|z|7HIqj$;OuHt>T;5D -*iA|3It`i(l(ORl#@=!kS|0up*5n+hCvUlu>kB%@w4BWq?JZ}s#moh+LrtetGx;Lb=g+Wgg_y0rHXQ0 -dk5y!FC4)YHkPjrzBb}8phIK}q$6co}&oP##_Y96gqtYf}ruzEuUVJx}KZY-H0<<0bULPF>`Bpf`Fv>dX8F`qvyUc>w7Q!t072R6|C0rvH#Bup`kh%`nf+TN4w$=YK55TYI4P;e7XbT;~YFV`dtKxs1E>yWM>l -&%x@pUNR-dlzmHP?IGo6M$eBxTXE_TYr`iScZ)3SjDx#iralzrRr_UQeWN1?%o8Z-*FdsO4wbbvxutV -|m#yvO-Ycz`q^j`WHWR2lm+a{_Nu6Eg8(pu7W910&D&H9DlKL9U9U=%611#`T6g8^b^l76Y@C*dKx*7#x8{npO8 -=#2iA*i(;BX#K*&5CBK!U=d;W4FKHDZ@uN1BtX*IM$0BPbN -d7&=RtR0a%tuD#lbTZW>x#Gms1so?%2;iHpm;n_cUodXLD$ -VaG4JVZ5WAZ60e7nvy-AwmS;<)lm@t+WwuYDJ@(cKWGWNL5gfT}$U+}h=v34*=^vPaYHvu#GA;DcR4i&(L5?bV7=sW&|J4YxJoNn;Ol76halir -^viTnX!NWTFfZ`=ysha?0TsHJi!AeHvQlXDNFcxW6*VnwX1VZ&nMvCy3;h6eB0Y`IyvB3<4MkRhgDlG -R5iR0+?kOhg6UV|mo3@JP)d|i6}T985Vxt@*p`TTMP*33zT^hzirIF)X^6eyNq`g5iP0R>n|Otk3%_BTVTjVE-3DI|W(sNA|+0U(K(j|AGMY-^ZYs0FtSq(<9>fI}aePO%e9(05>td5kP2#nBtn`^otxaS7NklU9S;Am*iV -xFLu1<%$@>{)1#YUw=g#9^PU(BY&Ye-;xhnTR-MZrdF|s+%yExGp<#|3DJZDKJD;nRu8QXFVt4V!V8C -2(E{?w740m> -ZMAxuXiQXyE8cKMLzJUTd7?#bV9seDco?X^L$s+vl5gKa>JjsR@jEBv83f3V7K2WkgvjC>^Wq^c0?9y -K%W>BrRpnBdy}3KbbZVkN1vLWfrf?O&q&Kj%8u1ZJPBc}V!tixA=0u0x$sO41))&2g7+v6|+anv*3T! -PIei^AKt7ON0Q*)zIIxQf}_&#Az=8X>WBNb-lkKi$n*(fQqV_B!(Zcl7ni_eoS^9+h`^+muG0>3LxI3 -kJ_N@dQbqaN*SRK$Vp9HWAY?Rj$Q5onLF}z^^AIOaCpAgUlWaFZ^KRCFvOWEw<3i{%4UMw -=#7oG5&7gJTnCP6m;A&Ply-dKq243V6KSrpf_97B5i9ruajzpUt<4{k+q+N)j{*;a>m9;A4^MJ$8vx0_&$>XJf-)m$3VV1jE)cBI#f{}sv>fnPW -1kW2O3|*p7Kj!&(RB`RQFGI+dk8*(?hk}*(ut+hoQPmZ{{*E>jG%k|l -kY0*O0yG>s~9;63p5{V^nR%<)D=@ea*#xwCFcnmDIn}oLKSnbx(QHj5_u0OFGgAGX{B}<}~gVA#~s3| -=8F{~4`D`H`_mO`!fv)L6GV2;jlK(>^wL#MN+n -~GDx%+W76h>vEgWO^ti1H#o7{&D)(Lxp%vWl@*tB6H{wgkjaJpC5W(5lrS5P&AVNR!Xok+h%`&#zAbV;FZT=qj5_{FlQ{NCUd($6n<-_+s|v9TbVBygoD#Y}@~}y?$-`#pudMx6qy0XE*`^r^>eqYWKXQy-c-wkGFZk -uRG?-BH>F3$$N`C^MIdQdepvo?bbA9x4z}`oa^!;m4hn#x_F2`jt(s!_de@j!xlB&sQpL(ectO~htGT -_x{=Wt474Sg6J`XQ7n*Ys+r{qxLHWX%;vYQ7{}Z*DGB?G|%c5rF(>5FPW;-Ii2y={)Vi!A6;)z5~Vj= -$Dps1Lcazs2NE%I%kruq%==R&HRt`4_}81Lj&byhd`Z^a(up^$)^>pg~!!vWU~rA0SO>@8y_qKOdY#!vkms6a;X!^;J}npC|)0Hy>I^Kbm7e@$_zlqRX!}BC@CtBZ4 -M+B{taADQ0@w;&MTzGGfXmIj9K!zr;opLXF+8Be(#wDnW3(MmPM|u;#;5hoRCjJ=!OmaYgGLX4!4R1;`2nfO!D -B9$^Alw!V4^L?*%uW-$kp8rvC}imNyItAGMBnFLicT%FCCq;nUh1g%~=7fYz$^+X<9eV-b%`jj$Eqth --(umvYBUj=jh3s|md+lkSN-7H6oP!Bxw@Rx3G^Jl@~RRB>05PotnnzRvX2&V;dR{nHa^wSJt%|tzf2T -}peNir+fK=y^LXIdb`<~LV6BdcPxaW==bRG?)Aj6loE(5}L|XeJWbh;(7?bM-Y%ZyjC-b#I(V-Yhv3J -!6xjj%Ad9NNQbb=fJ?OSF`2LB4D#N=$28|w4BUu9xq26Ub-p=<(R#-T89S^kjjxFubyQj2WvUZRnsb1 -g@vtm*tM;iRuYAVvV!Jiv+R1__EC9jcr5Zve)BjZ4?{BdTfjl>-I<>Q7U|JiXeg=xN?pHFmsINdR12< -3$@7auTsxAJcZ#KQvPqmFCpU_h&~3J~w7cAffe_4w?1!K4;egf1~ -T5(Dp7whwtC|C*1T3bqQ^gAuQ~R$jMsa$3H_eVyjGxgth^k%xI2yYqhvYriJ2_GR+n*1^Yk1l! -$TOz(b)*AT*w2*yW1`jBrJ8e&rPoJ=&^1%k#gkDY(N9%eRV;Q5A?C**yv;jCYw2RdN4C!J&4Iqq?0Gfoq3pS;zrSnQ^U -%}(mO3_BC#T2Ob+1YCnyzR4=!@^Uh2D^?GG3WQAJ=BXtql80%iqQ+ewXG*<@AbDw}v^(`2RE!3?gTBh -Zagoezq19%oB+Ae^jBac>wxE1<{4q>2!J4W%D)blAG5yii<0IO0Zisro7Gc4b#tEY#bY|0+!-3n -MEwL?MUU)=IrsY?ScAw7ADp`18z_z>|P&zh(%YaKfzUzUiEvyxwHW15t7TKmG!?|F>z_&alt4Gvg*vY -ohkAxP8tUl&|jW{f^-o#d5=0N4Tu6k&pK}p)S#@kyUvN@TkmF)15|fqHLpxlR!^31aik_Fnu8P_r>$m -OAYt8-pOIE0K&U_fp}zAt>srG#Rw -ax}=W$ja&Ui|QV%m*EO1Kw4fKtMU7pZYT48!GQdXfurB&pAAVTQI>pWAT3Fa#>6(deaD;qcWAt#-b#f -_{|HG&HY3Z8~rX%y_<_nf_T{F!Eh6`x%RnS{Zh&RpPy08HJ%~opS{ -Xm6s#u@p$7dao@Ch5w`LdSi;CI4txma4*-dJ5Tc3t7)Q%dBh~&*=1MoFOB_4>;uHu$ -W7hS}kum?Q>}j1=N??Nfob$D=_Tg2i(?1T@J(0hwG?PJ49B%L`IdGlk&M?adr4c;Qke4$+rA({L6%&>beGACxb*i(>|=jmn{qIxh7 -2msqN&-Vt$P>)1Zn{vYZF#+0F@Mon0Ot7F|%r9Qo|9Xmx$L;i~YQ4dIo~I!F#+EI(l7q{9Idwqg-aZ~ -ZREy?|qkfi)0N_pJFbnm)K52b~#%Vy%MKt%t+L0A#;*rnD7bFT|^AFddP6Mf3 -kgjQ;;7Y8|ALMQg_^w57i39Dp$iD)2-PacLw=To&WV+W_Z$8L#AUOQafmggB6XbbcS^Lp^n-aEu#le> -{mrV;=sT?m%%?F~rN**rW{I)aVUcD+N7c)TIWBP(7Bt7yeW~NSF9&2 -Su}PW;&D7(5vPs^VLj0y$_QvUK98kK*pfd%eA!94h{2#^_I!=VV?EU8JNgS(=jv$OVO@NtLdQiIC`Mb -HYkWL!YxMkCg{5HY)PhD&4fWg<1kh4Ua(T>RID^GZ4P$b!)Ql6Zdt&M%(G8GXxEeYcm^MPEDJ^{_awL -f9T?AYuNB0=7xxU(>AUoZ_@_sqVPJNWT?wXOs0Z(E$F!7rP -ZLx{rn7$2GiuOhfno|1Bla3e5m6OU_*D}L(M*bP2Gu)xThC+*Q+BAX0Krd-LyJV4e9kIOBDdV3)V!lCz60W=`Q(;0N=XQl-}Tak!N^EZD~ni0DGvhMI>lW>8}sa8+l2<5#bCyO7l<$rF^s4Tov1i{Euewc&}F0orcu9wyf*ib_hCmQRlXsfeIGIs{)QQporztmDr(-vo-{@f;~_`YB1)be -PgFC1W=lX&<~|*Ewb!R9wqY&(5}2=k^zhLgfKCjm1w5emVsvi-F-9ky)1?8rtKiO@R)#GkN%|^g -?PlGzG>{Lh0pkAgVzw||9~uy^_vw&Y+2K+B17lGb1j8pe%$$4*_G8~HwQ5R+n&qR%{*I(O05v@qLBZR -(ifv|ZMP&=?!S%3zLl{hfZrp_3`11isWebRHNt9$&#ZU?G0bzhuv-ME39-5Tzru-?A3+&h -XP-Ck&3O0*6b?Z`DeZ@V3i0a1s=9=jef(%Hb01PAr$c^OdF{IkVxr>kJz;__ot}{af>oCN|v2%%XG7q -i4$Mn2(g9yFtJU0DkS=KqbC+y@~_(ZeT789MS`&EWn2JUAY1wI8ugeu?yJ%WPJq!a$>GrahQGJqEYcq -4Cl##w-a`jBt517x7emIwqpzaA9}6~{HCRLs7 -hyRl1V{2SU|>jFuy8r3S(l*~FX}vxBSU7K2Fkqa1JI_7t(c*2*@~GCfH7M6K}yym>^=Y(JchoZ_0=fV -efxVpbaMyr;r~WYk=0B_?57At{|6{PsG$31eU;KRlpoq -z;>)j^Gy8VLU^zwqkfe3V~ZcFY&?cOV&TXDN1!dgB`m2*bEAp_!$3B1ex=bqO-20k)W -CaDq-)PrJ+==p0+*~I~=ka>wWh+$UIw!QP1wc@DZkoro$3Y3o)FaC0>0THhb~q>o532KLikuJmFbo?{81KjVRH>jKVK+qi3N#sb58^2KvzwgxaQaPoCGSL>tqr1FXO)FQ- -`QyNTD--QG>U^Q>U6+U_e1j1I&4ir>}O5O}wj+_bfLIEZ3*LtZtwOS{=95?}y2M{fvpFUfjS`OT;?Zq -ZT+^^GdKM6RBOh5;a!A~d8)g9bc)#AUz{kWXbuNBN?`ikqc2xgEbE^tOV?2FsC+xTJhnw-2?jfJ4e8l2uhzWnFvHQpuAa_hv -pac*1Y#iqc@}vE80F`Uy3Utlk#K}JT=~ue3a+G)+FkTsH<0+TaIH0nOxCtZD&TS`)YW>dRK`>P6!(b6 -K^qhXWydfVfww`~c)pi*^QTJzy-pvkN?RT9MC%8^a1@wgxu$4NPdJl5}0paILZnS`zp-Gd&9$eCjdrs -mx6|f`}iFy^ON2}wRhhjdAUYRSldAe59yD5`+dfE%sF_6bwOJ|!<6ypqKBc6O!a7M}-dfQjd*M!F+GB -vYZbHmRnp96d@AHnDFNrq2Dtd=x57=MM1;~ui)D3|QgSZ5^hp8y6TDicH$=mrjY@?Wv=Qag?_mhe_v@d05Ngb2MdDP1J~23 -=S3~bU=@xV8mujju_3yRL<4>Bz@yaUelMbN`JAy3b<(^?BPpQJf&_Cdi8NLAmCi17y%Sf6{uk8gCB1N -t~(M~U8-)>i*l#5=Y)0XNylj)O6ZflX4A2iq2E~AfBa@>rAK -yXM+GojXw8or%Z$AbajM_(DNZh5-8^5!8i%jhQ+JvC+`bFW^J@~*>m0`f&?l^r?odvtL>j3G3ndMz}g -Isk1Td9GZh&WAx$RIV81lLcCZ~U#;d@nz^ARi2HFi9vcN7!)>bpZ)*F -Do(~J$I=pD_=KH%kr$jjM`mo-mMik%ynPdg64H}JYUoyd6I!Fatj8|X`vG5c+d*%@G97|#^|Xrr=Z%kXG+f7r1;@d3d=-k45rsPBD&7(6a*qn=R!u@6& -(3p~;Z79?>@IJaGley{KouSh|x(o_!*e}d5c@XzKtLzU-%Y5|uOv6vF)JLzZ -Fq&}c>TauFc&XvtU!#7~$t*I(^Aw7xLBz=R%xIdaqtNu8E#Rf7Ikf1r6BfU}1(M@;QPtfg#yVF|vVcPR7@$s7PwtHu15 -W-VKMq0^E}GCOLt_9YoMb*8JKPs(5kkHa`=x^w8l3g&*sqOAbG2oNgwID`kQfb7%)lBu`djg2&`whj{ -@PhusWJ{$mOq!8*xfe1Z_i)}Y|298K`Ql9hmxF#jnoW#v5P@{2~YHK&HTX{}`b -P_^@ZG!bDWc^Jpadx?4pp9E1P>`}@e5u+AG?CLN|Mx_}cA=n;_wn)>AdB~rfzITLV;YqlIcAn4W*GUz -UPd|na&*`gT|X7iE6L^AV5LQ@kQ&TRJcQFK5K$ZE_BhN2m6*exa}GT|OD_cQPZ7{WB%lev(_)@=AOi^~&#Y!O5>5 -w$K>?AL_$gY!48Ndlm8%nGxZi)AmYmOjj2pv=AWoaf9|$2lN-N)Wl1r={W~*}LC?ouCnS5Bzh_Lyd -SDt_uVn`pe8_SN%WE-Xxh1*$4aceL1zz@hwg0V!+mFSE9z{CpAMIS)hH0H3Lyz%7HHH*7txa$RH3ti32A9^;_oX%z&A}@bCY`{m&MzDAWa@8XFoJH6kKx>4Jx -mIu(S5|a+f_BUz)1x%Ok&EP;Uucd -lrWwgC^~O=cRK>y#~{hL4@OC{XHV#|il2~d8#v*Mr^ClPu(Ly{Y -==r~*SAvQD>_fI8X<~;OMxR*l(eExbj4nDk^C1mUq2TkP6capBG|^XtW(ok8|{Po^$ -1Fa0(Ntib(D`b;acZ1pRFt8O%97xOx*buMYf+!5DO|U#aCX%bbMu2aPCL(C`SAPED4uz0+W4i!*SjjN -jcidAM1O+Lff@C4J}Ua|MmpepIBJJT9a2eJWZ#vZ)Wna?$;78A37>!IwOg%u+?X6l3l)o -M~yzw%OXtr*ihQxm#O@%u!Jhfu4*$9U*oLBK2hBG -0I`m?rSO_0}))+<}qfMkINF2lg8J65n&lLlkstGwbE9$>N2!Kt`q`>L^lcOdzWo9oD!SF{my8}TY2=; -C?Pr7UMxNE3EM$r<7Kh?nlTML&FPs;W}o2GGo^jttO*zG6G{GAkHMerzfp3@XDTC{Q7u%S94L`*2=`X -j<%}Cjg*6EM}Nk_RoUW#eVt&b`?Q=y;9MK>wcQ}x?V!9>h#g4Aw$djiu&+!lQ=zSs--vJaiw|%H}`Jv -)q3gJTT;6ti$PVeoNk%VNryC60PTnYE6v1DPW}!Tw;cvFP0XUJU$J^sOe@0*=^6%wpKLztP3`I2_?Oh -7g;heeDF}4n1#&k;jPLz(2QEe+1=qteDI4u)TqKnx;fE^i{$KGzLf(oFzw&UWp?4aLME$50vTg$mD>DN$_wR54yA%{aVg|-Bsfg ->kc=VeJ5RqE-b>fc#Hw=P3DK+vNj=+I2gr+Op+Q~J7uXgUL9veE$O8&D&&v`QhmMOC!hwhvfM?JF^u}qKBP~^P -X@vn|fdojZvsWd2Ad?__W~Z6M9>WZdL>@ac#IIU`upk^Y)2IWR&f`9R`4oe;CrwUm%!IbhEtD*ZG(_r#(A=!84LA4GYEk|;6AK;SCSE0t^bv!pSWLq5%2qh$uc(-6SD@pcj4(L^)4T_TPx^i&Pzj1DXA6o -VR?PJF9g0%vNzt#p%qY8Z@<&i=j?M0N|^_4fs$26=(J=fow;Kca~#-5IeiLqVjg@~DZ^UWGPgW)Gg?~ -4oZxp3pdB|eg1f`@Ax-*Dxy=E?ykQ!2XcC>%w^3aD(j&3kNgwJVujvYEx)7%IvQvP6$C6Nt{IAQ3T~w -A)(%){{z;6Q{M~jd2DGevu8 --|sJWZZLDcQ5T0vy_H+Iz5_0&5nECK{46hpoKjry!6v0`k9c>hZ%TnBpA>kk3$+e=y7oFOb#!|I3ZeF -YP1&OamYQElGqE7Ir1lXw1|tU#aY#25xut?7klMAjV|j>S^i(Wg_eKfL$-|6uTBEoKrUmk929#}cO`e -L7NxGAc=Ce|bn5&r{H}oC6!Xvqw*Yz`LcT$}i_ngFKRxef&Z*#_M6dRZwN#l(|MDiPk$4FYeGNVdm$*Y0 -&!l3A9TCx_zBrp_HHn5jhd~mZ1Yv{>0`jT{N?Qja6+JE@GY+{9NhL63CUIu#UH!Nk#j-;#$out--zC? -5oAEiETKru3Ci=paGR#0cCcwIaB70Icw^aE*mVwvijDM5evD0JN1Ow9V=m&3LyV1o(eOx!#YqYe%UZe -2{eI4BmY6Qt3-Ez;gkyHJ+=~LeU#NB0TUt+d?Egh1>mFD7>qL%iW^DTFsuWql=q^$$d7NPA)Gakxyn8 -kHLb1jsAd7mMwT<4?-bS2=_Iu~_N(F=+6OHE5?Y<2M%hb!&JF!r;5F#8wUKCw}5J~mMrN8*p(iYXsg> -Go+%JjgaYuA{G=Vz3aiXTYOD{j;F{SCB;O~Nb7DqZvSrmcRIuzEK!h{muBcd9fy5Tk=gHut~gc9)`fEpiiiCy;=^KN$J`YY+8%;l4qC#VUhK#AUZdB9whe5N*DMBsE`$(XpW52od+NnkIB -7YyI-y@9$Pj#k?I)UrZQn;vtfW==kzc<$5-a;*s&=6bO>7;5m3riigHTflHUC5=(^h(C;$;{W!|;$M0 -$fiY^1$rZ4H2S9$;4`CSOqpxn&c0f5$2z1oDYJ=!n%JxtEE#Pwg|O+2dM;}VUvz;a*}^2rrZn58WJ%D1q6A21CQ2A~e^3F6Dv&7YJ(HQQY1+5e1Crr7x&+9qKCu -&T#Ji5XIjR**f+*HJQ2G*eXElvEWYO#{Fdu^Xfp(nG`@4*F7`*DB(75PK8b_6`l$5`+i>+YSgX{+zqM -0|YLMv~cECR#j&)hn!yG6Ri*Oca=(cUgdgQSzLOd9v9^o(}uCLlNCpfkgavbT%5cSHT<&AsBR^5!1BX -Yu$o8wjI4BQ2&C>4gAx57g*$c=S?jw2uv_jm}7|A9qaJ@FX!9Mxo=r>67PuQ1<(K#5M!J;E_+^p3&#LC9dfOtc -rt51xnb5Y$C_F262-z)Jvbe|s1^wNha83W<=6w3zr#ca%J!<>hNeel1tB-#R2%_{b=SvOPRMWTdcc;9*Cz~dS~2dsro%Icffr5TgeyDqP&Y*)D11_7WSFG)}knD5#V(c@#+?146 -lPFQFUC98}V|I*}A49z2}dYf9d|JXhQN>MgbI$mt*EOy37&}1L(B>?8`2Rva3#Oef~NW{sDS7y -PKEJuI0Ffln>{{=f|#PN8750oQG(}9(I1rLA!37at!0t0u?zAXwMUyt2ru++(j>=3QRjP`~1!mD9Ro^pC -GIFLFLOo<0Yk^#e9g!8x-yCTI!(+qr`l`f-d&QTY0=KY}FC|3QEI(ccK<9ckuClpL{ix`sFKuB7nbSZmsx{Jwd=Z{wGY76V@g>X -wjBKT5;&r@58tjha-^uFuW`A{SL%&@KFrE8Am!Y+A}+TH2 -?nFL9sNbfc9@b&xPK3dYEl6!2UB-XFYX|(c!>hnQ>QyR#+zW3CZwl{|@IDFeK6v- -RyC2^D@J_-z3GX3z4~4C`HpW@{EXh=FXxQjO@OuY-6k|O6s?}YwhY`ck-+Jqf7{Kv@9)a#i!G^_ahQg -c6hm0{O9vOq&^QU(YLA^`XV!ea!Lr)Lg!`hn~lQa65l;D_n?_pztzz^R6-)-=F27Vn?mKjId7hB}dS? -`@v%~aX; -7u_f;$h3sVe`ZHO8~tST>*ZYSIJ>!C{^G|o%M{T}G*dCWzREo4VWwmo+Nz?Z*E11x0#+Vkva&tFI4-} -)Up5W6j+XRL&bZnEuF2wgdhh|=E!0NIAB#w#c?K|Q6vWKrElD9j4O{Pe-!v5Asw!-iHI!fu&V{tLtjv -AJzN7>Lhf60K*ohPR|UajV{mV@M_-kpoBoCCx#g^3_A)ShCnU5 -bq$KM{K{M!L^n@78RDa#;}sC|xq3-x9cD+qGJSMC?%$C3Dz>%6juk(N3gxa>K*9U?5N?g^WbU$6>%{5 -umbIKXnZAb6>(;X4az*s+XV`H$`ur=nnq#LkUrikwEJJ@>xpS?L*0U>GM;*{%OBM$JdTI=FOTDoxp8z -2SRZy#ViA-}vd$nkBMq>N%&i>f`vFwRAhs5@ev9g6anDqPD1dUhkPxgE1o)2-K2UHmnRkm1_ExfYD9{ -t#n6Af>1JpJ_3FW@0Lm@omjqV9^=^!ZdZCzKW+_dyV=0*M-tUnF>fYr1l+OiJn0-+UoX1grWiZh!lrBVlTHIlGw&L -f@<@#SiQOcg!26k?VPJ6Vcb~_*jBz&&7k4A26}V2<^l7U`&*K><5%otc!M+3R9;moiE3ij(e- -2ndyFYC>brO-3K=cDXtK{s9q21?bRl|5JYZGU+so^yunl>prTKFx@@@DEOQ$;W+PZ``AOKEyz6v;{EA -bR}K`~u_#nWTGP|Q7DrHa%O{x7dSHfjmX)WBqy3(wCNo{y-|Wj!4&^B|G0bWMTMOp9H~4WHp3k?1tzH -eNRjoaX6~J9)Xe#|kAhB}g1_i!VZ_3yyvtk5XqSi|pY=j<8Y*1>N3Au4zx(bN}kMrq-B_l?pSm>%gE$O5G*wY+Lk*7JtU(nZw+D5})|C@;ft7DBf -TGe5QTA*nBa!x$kyK#>uKUx3t_9*xe8;pi&OCn#Q;Lskc1%;^vDCLa&)T4WX4{5TXv!1Q$Dr^pw_LdS -)+Du{dmub~2#Am>i+mS?cPdqAH%uS@G5TuvWiCg=%v2HfD1F{CO`q4SBCZu>26AFK-0l8Qa-xaUCCI< -pY^46+T_kULF62vj6IP@Z!j#e$2hyJkWA$Rd8%Z1%SAD#g3aA}~eBNn5j{kt|u{XjJT;$q?;UDNCt9B -52O-SW-B-y}k6D8xj(F0&+w%2&_VsFzxMghcN9Ejd5)n?Qx8o(}=&Z8xfy^akbie7fej0fNba`WM_3I -?w%C2p3`&H(w}24dhPzS2cuQKs|Qy>=<^Vl-l`rOJWqW%v&L=5(wo95Gn&W46sPv3&H111Gn^4GxVG9 -6W!HR|X$DrAy3ZNyJic@b}>u%iQ-W&V)_%io4H%=)0_w8sP!p!H8Uj(h9Kv)ZM| -YKu$KmgAaa=|n$G_N59n^Fa>X26)=)fDY7 -XoBwno!n$+yjad8$RBTfj{oLCmLgEU_jGsCA`G4IZKMv9=P@VMuIiCP(J55_szl1ncxD`FyQVrhmq{aU}>D&>n -ba-^n!KC?HqxaZxgZ{dJ4h{q1mBc)NvP(L8=HppQOQwW$IkaK%@g<0b!5iTX=!9)&#{%p4o3X!pf|^Lk`O4G^ -vn$iK|wKOrC+vcK{i6I{BjHOJScqqfy~;e;Q9w-XdCVmQ-|p#1lMd%!KY|r-HE{2dS|Ky^TucO~cC*I -L|>P^x@~yElC75DneNJW -uq%ZT1k{&Cj-PItDxWcLvCC&HQvOc7EVd!WUP`VWpzl4KmJ9#-tRWW$7TDb|i1+ir_1cZrO*v#tyIC{ -gBxe^6M3#A}7&p#xNtUdPn3iE2OdMEbcl$^mL0<$hSAGB_4`>W_Q-(TU{to*i1zSp?Q#v@U#!gvwG2K76!)MFO`ymDG&Ja#ps0*P>(49H#1eIG_< -)cYZ!Rr5nhoNxedJ=lnjwgrYkEfBo=&&vNafZddmz`lWlh+0o6mOM&iEtATE)l&-O=7!L#kC(Duh{j$5QWhBxPxGhku6g0}!K?3uTGqaYk -OC_LX%^giI(BQPNl#zO9iWC_o=@otC@@=!hzSqm3+63dEy2H-i__z5>BJs% -PuUJ8s+A*a#fu0H;Q#FX9Hqo%h|PJVawT#Lg+7iszK;hp6Em{*IH@(A|n!HzCMPD -r}dJRi+$sD*rkj0{TwYaxVx?s8P0|Ck${EM<=*5jL*!8BMaWzl;DBpaVMa2*3y};PsY5+c_)#fd(mO=N$BtV -s~B=_KY*)XP3-&S@G^#=)cLJMFHMhOQJ&Cv$%H)_@he&VWoaUMPjM2Z}E_BOdEf6DjY)Y_tHrDX%w!wav3RIGq+gGD%!t%8>bNED$LccER1MkZk!mZ+=Pn?EO(J;ZzLfkC!9ff{Zq*p>7c}XTe`bh(Qdt;vQZmk5r -a`=A))O9TuB%vi<87Zl*lq)luKr!fD5xf;>GT_Rvu&borZn^&t`j^2>@JxQ-ji&ma}(D-_xVmDEZ6T_ -m&J@PPDSZaQ|pa1=-7DIvY%QE7Du<1J^Kmu2({j>*M7xZdTokHIZX#wq7u1Cz-n5DaUyw)Pl*2hm=qo -@|e!2+Fs-mU@(nUqtgJy{(^yEj#{r)=KhM^Nz_eV#sww%Jnxn -Y@n*RZfa(zd*Ok&3V?a%8n!3X3}1OWjI(zXH(RGcXem{NlfXA?Xgf-;CkA4L -31svx`ozJmc+mvx5l%GuKP&|g?CoSM-5N{kt11MNV;aLF)Zy@6jBS -u;tg-P@12+*X^(XE$kwuU0>#|$2mk8*>59ciAyP7edlXUQ?i?9`0jOA!a7go!ef$%FbInYe%|NGvBVW -n9XT4oj!?DMn+$DHPe7fyv^Pgf;xpTfP2TYR1107A;jC(+Pu|mCuxK$*{0KZO>b(z8v52qn_3trn^EX?{OU30H<9@=Pou*Q^>b|j2o(t9~=%Jw3ep$jO@JLdf#YA7}MWRp5ys-tKZEmIm>(t7 -sl3zwXgg(dZN}b)X8_QrQ@C-_pK3rF-6LE>q2$iUITpb*vhl=z;WS(Pe)-GWMml#^dFIb6oX(makQ%2 -7&dx~zMgKNnHTh)}L}1TrO!uUpf=(~* -W^wg|P469+cBTWg;nlW`S)2nM-HA1<|C#mxmIC|86hh(tZ&a~$(VaF@S3ZnJYWPNO@m4oi+3e;v!0#y -hrfzX_SHN!_{C>05t>2-sY#FW)fRUhhl3-E!ePB1xzu+m#x3qd!TpB~){%z_Y35k>U)SH+O$Ivq7bCu|GB|jY}Qa6|=nb&$teyzV+>A$Dp!0z?ZF_@qcr3Gy*x${}BIZS`WMXe^{DKgTK{}$J{c4LyWwg*v -a<5Ht{Z-ag1i60r#CW9DQv!4ABwh@DiTKj0MtX9HRl{e#tdf`D2sV>7}<$yyzIsU!w4fDHSiD-TUfd)Dmlg>M?Wa9M)Py!K?uZoRLpphkbqUMtj3 -}Ym*eM=|ux*A7rLy}UID=s(P?SS=dnG|sF!wU>E{!!Ct<9!*~W+YggHIv}RYM0e4VLOVVExfc}tUo0a+nuP6pAfSb?e2tZ!z^&_fCeb?2EL| -$>b2_`^Vd&{7`dKk#%*tMDpAyEJ4ZvG97DqQ-0iE3FVx1&}Zp3<6p=JY5@$z8qa<9VD>CG1aPiA<`Wq -2SqAg;<;eZqrh&ZBjSH(%s+jMHJ-ZxiN_Jf%{Yn>c00zrTc}ITuNDCj?twMw$WLT`&4coCnXS1ao9gj{f*Im`_a96bsYvVYs=`W;D&r;Hd{XI(`Ll*PR -!?*~mV{j&hx~o&z?!vfO2@?n|yqRDv8qhP-sGEh*8y6y7jn>0%><_?Q#~eu(t6hc2FB0~RvwUdz|Jr* -KfGDf4fBdp3u3%ZBSx$;e;WEH5Gt96I0xAfKqN2GV%AhElFyqo!1p`VNHT||}X_`yfZsk&`3GSM?q?M -_an${qelp7^^|L1d`=NSeBv%bCW`+NUy51hI8x$8OSp1Yp=+MzmV{6=duC#PiiqTt;EMBoZWW2Y( -NsyZ(51B+wM7AVZ8~;KKQegrMuipS&B;?%KCz`{vxDQ*SjkuS;g1~uQFjyWc@0WWwbpjgniRpE<)XA3vz8jP+|s~n!-h>9+JfeN^D8T;Le8I$Wc|v-R4&0*mM}~{c0<(6<5*pKUam!gb|PbU!u+Bj -M6Qnkmga675YYHd{wEdk)#Q?BlglWZAkuK;KS$wd89reF^c~BmU -l(q|d7N5&|}Xh@YqwBPDI|82hJB2ql^K#BS*3zk12(8`*g;$=`p!blcCw&2q3VjEF}(nbL$RfqTYq5H;u0SftTZ;&E{B$P4X(% -ib?Y%=+!nWtFb+Y*+*;bEZ{=t8K@VCSTwD5Ld4vJ40&ix5(ckQ9|BM3Axu -v=*s5$6LRq?S}qbgy16EyJ)3J1+Pt}TLT}uX&^42Lfn~JVCw*m-2M$V2u-iK+%Ri09HIfyh18H1UIa| -#KxKF>!Mx&$9D|0< -4J4)+jQ{o*4784K#jaMwxm$bn-6dp@h4&n^u|UBcI=@N$8*fWmW8?aLZR?im)V`Ed7Y^W{4991r`NOF -2NS;r4V%=2=eSEJ3>BABXsB|$jUq~}NAQJOe4R_v50$5oy7w_Z?=L2^b0_1P$NLn5b -AoN+`+Pjac9n^&;`jowG{HN-We@6V;tca1QUJ2)}*9qikQ_O!)U+DdSS6Yl=(jMXS?=63Am-nYY%qNg -}s7FYh&oVPm++nbw}TD#fe#4R4p13$a|v+X!`G?Q6r+i^XW-1pjc!*n}R(Uh1>PDmgP_-1PsFs3AV!Sp%w?y5R{W++SqCH&; -!}tiR7t~AMlfub;wm8KB`lZA5>6fOv*U>Mvmi0?e{LN}UfBt&xrr2-{zst_yxA;x*TP1#vi{C5a_muc -uCw>p(28oq#(NEf9pz9%iJLVz3J&(z6=?!`EyX8iWe(A@ixW(3Z({jjbQ=5_vc7el1@w-#}uEp -=Or|CD%_=Q)|>ZTaYk8u07Wb29>7%d})*SzVH_9v~d3i_W-b@e|YElK~QcGmyE8Ty}r;=7*4UQe`;v_ -EgWENOp0F4kL|=soVlfhq?F%1=Z4v#E~u$FEG*{%jQ59|SMoBy=jUx|hG3#OG8qRHH&VJU$v -b$}o$caXg9@~V*XNUVW5lST$y=`Q5$ueZ>RrD*=JtrM&o^UK&b5U?*173=`*Me3aIMV<+uEri1g`@fK -+6Wzbv){zk?BWm#E(i$Tir<-s%TFmfqHhU*=!c#K-uA{`MOSWO^zK#skvkX*fegIXN5OByVW(DU^$nc -QG`D!~4b1P5Esft{>@MC16#2S0g*piS3G<7=(FA*6F=oWAw_YV1P?IYfryFL~-QTA!vhL_(MR)WA7HF!{Em -_bV`3l|9N})Rv?L)~12##f(To<4<8s`#A#Om_TaU|%A#EX_Hs-A -;lmoGv|N*+6agaqA$YH3?dtVx>LxD#m+F-L|xsEGCIR(D+0OjZ -b9tl8QF6AF)=^`iM}nbG@1$g#%Kf4R`YD*#)_17jOP->@kGj&CXX!taa -N-O!-RPc%>1BI5Tky}|Yw_f%W-bbpWTne|MLQx^C6>B0uVXevH_nJ`rxKHX)(Q>T|nSK?G*1B3+Pg0F -YE17>lB!5ay-nJDTwV!A({kDp6h7iTI&8@x_4@jNTB$d=F4YWTglnt=+5khbA4c~w`wyhY4*_Is>b>V ->25+a!WiK|NSLfg|zvbtNl*hDTB?Ix+Ev~4>E+Pl|H{cPb@(Xd%3+m?xr>E!Gbn-Kh34YAS!uNHN%zk -UBN(n5UkJW;T-effsfg0liWk)6Ht3g>QH5nx2|$^3N{JqzcHj4L`zHCm#Gi&9kR5)n7bnjXBcnSnAvm -WO46Zedx{mAWh|+=|vnsCruW^}uZGRqS%L --r=s)=sKpDIa6g_Pwyor*86!Avk)92xNotEbtT9oNL?c9dT?xeQgP|@5z>M}-XQ7o>`HO6v!o*ND*L` -sVMt4E4U(^Tz#cN|1BG^G@y0F^>)nZyu2gs?PP$s*mN@Aezo$Lc=o^=`ZxmQMvf^I*EAt#H6mQQ{R)! -o$r`X~>#Q{FXPiBrZwh%ZZ+Hg0s?dLkDOG~RY+QJYux2TodChqt9#Nr)e@r-Ezi^ArOXr@_lk6l%RMY -nn4j1A`l#pRV2AA55NL;KG*r}d{=OD^r~cAFIDQ%4wk4p}QczxC7hYf+wr^QSgp>*~O-rL@CAf(l;Wb`@S$5UCAQZpQ-ea>>fNL#tQyIA_BTi;y1 -2^Z^DuiNk`_(?*8GBG~oeA{2WU%)qa+;u(4XW~Rq(Fsh5KPNtFKQ*bDy~R`Vt$<>8A9N$l?3PzL!Z^h-Nibxa5ha^^@L$A5(+#SNt_UF_ua}0kCM -@+D%@~jr@5Mn7zH=$6tlLOKc;!2L^sm3+?Oa3Qn=exQD~cW+-5yZ=?5_SBT3yX7nxZj#C8W0e()%nbxx9mLxpELl$}w^Yc~WZ$qpSoxa#h__^2GubG`&$&NQ?CYd)|~^SV?zC=qu*cu|CW+xEh< -`DOOT7M;A)Jk2ZLg&@KkKPvpF@ngbI0)EEgCue>MhB5uDhl@Y6=xp0*K5Ox+aHHk~@#n{Q_p@FrJnLm -?Z`&Stvh0GZ#j~XC{22FGYgOTCH%p_rZ6o?we;YY`hwb?FlZ89H{f-8f4z?XFJPSXUh*;}yWfh1+DY^ -HzRy|Ta6s&B@?@>{0U4>7c152?myin+W=Q%1WRa_t4-yX+ATZ~M6?s4kvpa3Q#nSO`9tXw -Oit&y$XkcCq*;+ApD>AffUVU&vUS$?NCQ=kOW9IVSEhY-|7F3GszXiKl)46Sq52F>0=|I=sBv`P(C`M -aEa!cP7yio{;&%M_*6ZdYbM|9H(#>D|)#mNg$rG{aF4OD*EtS}a@ -^U&9?Io^~&bxP!7HKB+=2uIm|A>*I-TW%3PlV}dZi&EG`?I|LD)0NvYc4*2%J(#0_7dO5ZpHvPagry$M_ndvvmPsirW%*9+Fvbp+%vGW7 -zz||kkdp=evr#OF5)=DXyV1prupv1%en5h9Tl#&-MGOG0gitwv=Tr~y9BvUZo4!1UVvB -bSXS8SCUZ}g=5!Fiu3F3x?XC8bq!q>Gl$!p^bcdw62rCoMMs^;9lIYpKPGReWxn@pTa)CHz1vpfLPom -oQ*V%!UCP3On?`##yK;Ov}&{VsD`RdlWG`dGn!*9v<|J*7K_5{HR(?Thx87UOcui?#u+15X-1 -vED=J&hNJ^t?<{j)7;af^Fk{6e}IX=Bo{=_djM?x$|C9#v=AdK-E9l-owV0Rcb5v){Gru@C%McY>Nz- -Jko}^#McYRTXrb9#bhUnT72208XkQ?yNw(dhOYtf$L$h|I@JxQ$g~k?hMWgvIO8rW9BZ2|cuVfFSekF -Sh`jy561JTtap{q$Ir|dN9YO=GatI3{9T}}4v9P*fe?k5}F&op#D`8o49q7>(gPr75RtBUtoVr)msF5 -vw2HqQCwH=aM$dw#xmto2gi883@34H?T_EiG*Kmb95a)qQ@xdyMrmz9De4G{I30efq{&uMZ!SJbK4Rm -;w78_S-+mwp|Hu@7y*bK$*Q(68)@~N0dYL>U1C9p!spWo_-Y1%dPCbea*^7ls9e4n8UTP;(7%un>A-S -dlikxPKBxN_Ul>rQrOdeNtn&;KM2#?{;e=u+rJd1kNpr#t$nX}RoP30>1+Q$nBDB_gxTG`R+wu03Sny -Oi-p}NL%GtNF*mi0uc3b)jfWgcV9)`v -=0h7}mFhbt$YXg>?n2&kO5nSmy~V_Ho$fWI7HOn40N07GSclLLX)yE3D{p?L&q2fT*wv$~aTN9wIz&) -Pdb!SaFn>y^FA(g7rROJq@e3u;PqiyN9sag~9?mHa1=q^b4yvbl{w@Rtoxs^@^ZhSgQp6!YZ!S`#@Mx -+wE@&D~>v~uM}2%6l;GzLq-|58`(>Q2R`Am&lc9!u;vM?53Cb~6-&$Z(ZZ^Nb+EAd!rE6@yTKYFthj; -B?k}urSi1@{f%S9qSV`?3tZW&=~Wb_b6Ry0nq&zvl-?sYeMjFMd@NiHoN18^&KgUeA_7$L+ogGh!MH`SLID1$CwIhS>c$n4D)vN>@c*FRXIS)yev3QIjpqOagg&nv;BuUOtp5+_aKd@~$%<||z|jJj+K($Ih>F;NO2hD -cvvf9nqEf?{zDXmPx^*1z)%(CI*jIS=|#8D;jaDO5EgDm6Qm|#MULEAjy8{198aZ -6+141u|-#nm~TFZgTLad13$HQO?7Jk#gfq|(K*AneZHYv=y=wQ}wzHo6H=@$#v9XA_Wjc_HAJpiWJ9=Od7Fp0k9KY&c~6RT9IV(T -62hg^u@Od`zYyPiP-4{W=C=4y7*6pU%!`>a5HN0R#Bkc{^w*!~0Rb!8Cyyq -a?<{}mcEN8LzXJ4(`nx*lfyWd`#93Aeo*S51WBl$G$&24Hc8}W>dmAL!v=z+;%F{>zdzMAyvbC`!JSC -h82=T39JnpB`s9_k`rPC9g&<8sn7Yh5gDaDND{CdCO`b*?7GrGPlYdy;G6=}RM^#ig^GCEzNYTo-BTjOv- --kPm*3MjY-S&g&Z{-v>aCZD@0xN9NkJ)Y7DIyNlNw?!Fa2(*S_FH*zm5b9u6n@Y?O-waVQ$?t{Ba9P -e0oU+Iz4g{3Y#u5TA7GWtB}O1MxmKM(>G>D2Y@*i2|yoo2&nkK}QXTz4b=U6lUT!ZO#2xe7jaMxTuf! -kR0D{XD-9mnaik*xl%VB4ufss5*heBXG3pDpaB!N>!q$RX1roAsx%A+zcKZ-F)g@RI$?vgPEm?i4ZeJ -H_!dqc|VpoFEP;;@7-*lB_5c}YQ8Dr{YN&cfM=Jc=bmhA=}MS&BFqZ+xEOxOZDjavnyc&ghCO84LAKq -7)7ECVgX>7(KEr8C6Kwh7xvtm0vXza*d2zL??*VaiWt^{fv%NU|(b@!8aa}*N-J2y|KO=7gOZ9E-CfU -xo9UVztyz?_e)c=h~O;egMf&_v|1k(wgBzTEnJ;7muiv+Ic8S^2~5X2IUA;=<_O|Xz)1;Gad`w4Cm-1 -R+U9SM387zpAB#t>Kt9w&H#U?agX0y_cwfzl^15hM_dBCrq?5iBHliQr9wjRXe?z9G0m(46LBJ_KC|0 -tliA1{0(bJWB8k!RrJ&3BDotiNL*_u?Gmc5NHTY1hE9e2qqF(2yhk0a|EvtY$y1F;2gmff<`nqxc7p@ -zwgiA%G0#2CibJz#7d`{*pOFDY|Jo|!>`vzCf25#>DEY2&-3538VVD&ehfj*Hv|V6i_FfAo}O+=$ju& -a&dXygljX7TESu#rGyU~ssVsy37*lZ*n@%vE{wNq5%7(B$tOwIO+5MT8#j$9S-%vJy#jr>=kVOfX{`5 -PT+@dK&APbyv9X!%Q?=hNWa!g}twnJt89`dpyGCGAqks7M4z!nwg3qm;QjSN~G0-H5 -KL%N_!wnq(A2{l5ZkmHh}f5$A`+AV#Tuv5u!eSJcEf&HBk{LTzgQs2*Suhp)*+ynJR*8`n3|LfMdMKF -^+8DY^rce6X|A(uoH=zJhG+GZ=OhH9PxYxxujAWx#XM0CeT|Jg#hJKMG7@(!9QL2q)@zc_NW{#o7|fc -CzSLNE|q@A3xBhmr;2j3iuB>HqI|POuJFsDzYIqVDaD@T6CmrJh0N8)g{;2P@ne}!Dsr97vHvid0h_ZNTI|O#iR -QOYNLe1;10|)RlB=>LGZVE##q_Xh$cCJ_j}3?BJ~=4Y$@uwNv@rIerKs$so!sQ@mSh;iq;gpF2-Cg?= -Yc2qne5TjW>m)Ly5FGLUMI)Z^sPd%B3J61`K7aLE<#3KmkF)LOhy#!v1&OHqx3bxH*k}!{oB5okO&vMm#9ePN(y@XtB^V@`jrclf8oRsB!1|NnvK)-s*=-z@-zmK{bk}tecZsrsIgb?<6+iyO+>$44^X4yjYT=@PKmE+J&pp3*$qO$oUG~!Q6)&$`wR -+7fudaRV^*7#p>+N^ez5Cw#>o;uN^udQ8ZQio=<87s7+js2TwR_LrefvK-@ae%rhmU-A^w{TLe0lt<6 -DLo7{mr+h&z$}4-1+Z+u$Nz`xcK8wmnwh$4?XPHy+_YpYX5*hO^{Zn4>lM>Lc_vMDdWbcn$spsOrJD4BQq; -IXG(6K#X5D`^cjzi95s4O^4Ny`|21>g?EL>}`v0f%|Bv|}(K|9Kx=-JJF|qyQ;s*>&7&JI>$k1U)!$& -+K@xNjJ|0nqGLBpnIa*KFB+1+LPb53?#nd~Xs7dY9UaAWM8fsi5d=(rO -ycB#C9F)A3e5HJ5IPzBVRq|BwK{_d7cAG2aJ`xUn1hzHrSm{8BJSVp#F{;lJs~w8#5DMk|9xvuBHE|L -JZqDy1f)*)1B_AbiB|Rk_B|griG-PHP@`P}t($ifPPmcWnY -gX2#lhU(Nv!^9mQY`7&!hL9-Id|Z=N#^mEn5?wy+)Uw-MEQ_kTuPoLV!S1NsyQJ$$C@MDq<1M97EdXr -OfdJ(o}R>pQpsR-y6(DkHzCQG4L>BkXIV2c$l3`1)FXQ{w??dytG9b}bhHPaAT`xj1XSr0hBx+PI<-0 -}p)n2LRHDi796NC=J&aAynNE)wA}1W3N50uP7g{vi_IQKc{{{RHN|Sqosph3 -L6s&lzr{b#Y_T|bvph>Gp`L2Z$w(hBg;0Ei9}!x=C;6FkbL;o3!FxO*ZZWHJq?)3#<{|5@o%6an@n(Y -ALaa%*sK#ffnpN3pN@&dGv6dyZ_0iLFs6t6GB#u$|%*+(B5!a9`k%n%OV7;7Fehio?Z~LX<_vR6o_SQ -?p)rZVOKD+x=A@#9S=fuQb^eT1PN*Lje9r^(m~1NVU-_77`Ipx5-*%trw(-ZPZtuUZZKd;cE?*Y-b9$A88U$zP;3#MEFqr-$A?pI=7bKA$r4?aS?_?A!Zq$i02~PfWeNe -^kls@o&B8_W2)JRoj1W9sfmZYWVo+>W29k@T!T~&pLv#X! -3(6BNG**w4x|BHTQIgmc_e8Vv7@x*k(zu_EbHT=uxb$(kn7gcHkzyRAOcOpGDVJXG#XAt+KHCbe#9S)QC -(f-`HmPMQ_JBh&zT}pQ*#A2A#QQmDXB7-D1{#2rxTe{O1aF=qU2$wSx$T~i_FN*Q{MVV4;~O5r;OC2T -@o$1^dCc%CH9L;ib#kN9zHd+OYz8mKjxKSP; -5W$X$@UDJ~TdP-1Jqm4?0DV)CNQsuW?L!U3zV)iw|v|OTQY -`b(LgYj9U)F;m@T&?9`0Pm#J64ULma!N_Q3AgO|=(qj(t|U@g@r55@AQVQH;sv)R-)qQe+D0&jVka4!J4Lhy(OFZ|bF;I6fFw)Q6twbCD%Fr|M@?fVMD497ID1v9s|n^@A!J$OCB!J}r;+oJ^zoBrOv`R< -V~8O$ggnm3vzRk6k&Va`w2+Ox=bo5hHs`RXtO(1EaK0&G{Qk|yIZ#umbn<&H+;Gt8y;ZEtv_-5z!F=HLatVni}OP>sD-bA3*+nSa}V`#=c6S) -mGOG1^1)S|Oe2c}6S80%WIQiE{R%DBZv#uIvirNmKRNfKn7lIrhL|9Sp@@L+$$fbUJ4-)*}s3h$*YBb -Z`Jnk@P8u0O8Jtjb|9SpTJdh`RTd&BDn`}a7guOVpaueqf;BZ6eb8u`L^f{ig*+e#*%6`q9{ -O*mh*d6cHbo9cTo2KQug<0Eb&6&nZk2tll@8ehW!6*_=f!dCm$| -9t)`jSoxuP0=a2SFxYl{xQpn$+akU=n(U< -g41K^%dJpgVzzpox2pjQh~LH-RSsBdGeq#3~8w1jh;X5_~|gnqVP80YL^qD#0j%Ap~&*Q3N3b8iMWwz -69+FS`#!UsQ#SNBsfKI_;V@zPBK3rSWEB>K@mX?!6x$#ns( -&HT8UBADi)*ta@gzd@GqRuaV3-%THsAH#5yH5awD6U$*MRDpdpN&bcX>CfVF@hv6e+b0dX6wDR1_cI^ -C0`^u3Gr$75;VH-pP>Om*QoKUgk6O&E^+#3Gq@o!H5%9#IbDdutNJNF*1S*IUDeZBM3Q-%a;YZID9{2 -}Da&kzbfgx(thrR{c+(^uMd1rNv5-=k3jtorA<%_Hr}a})EeZZsWf$;4cx0CTRn()7eBTw}ri737Zb* -au`H-eEG~ZzmJ;GzwIJ!tfyzb1}6`-E>^UPKJKC*RZH*r2!GÐ2vK@_V)9k -29{S@lNSilRq8`lP{$&y=Pn(;SU@*v|DnxF4F%N`AhGVKj*eXP^!WW_*EbJ^;>$o27iJ7W7SU{s6KEF -Y2f|l;88IYpgM!nr+1Gn`&vJ=^uQq^Ar1WTJpR_4yDv#|Qk*5``Fn9dtGEM)D8xLl%d`5m7yR{70P$Y -+>7msf-#j3~0?7ShLt3+@Z -DaY{E^SMjoXzs7h|;!kp1-XknIvIy{!dqvHzmYa;-}#|Khi*%Y)4V}u^5obl13BN2%x9N$ --8OP)GRxN$|Z5W`-WGmdRqoWpiM)t?<+HJNq$n6vKNIrHDmS@=%Qg7 -$M3a*(r8pK=y?jI;hHI2-gWXL$re&vG{M2hPTy=4{+W&gRUS!%9j@*rG*?*z?an&z3A%!j>*w%2upc! -Pcx8GEvBS(&~W57#DERW2DE@JZ{|&|ej^dY7{7V%7np6B@xvtQrk?8Xu9h<_i&??LgyDgI!JKc3=GrTB9x{t} -A+3dLVf@wZd_LlplM#jkLR?7NL#YTpQM?@v}=+?DsXWzbkJ1Hqd#gI4s$B-o|D%tNL1nApWC -Hu$5M@GknQ}WS~5#hZflDi{7=gu7;l>KAkO%bsXkx`KpA9(fb?&lYlT!Un6e5~^HxzDFfa?hSp3cej5 -RCVf$_>_KZY)p7;^8I(W^&x)>&`l1|C7I%fM<8-!Z1R0~-`!U77dZNMR1uOfj`Wl7X?^$I{X<0nKM~+ -T72-!m!8Zc_t?$0Szl>Vk!^nZ+Cx=JG4~UJ8j!kZd1lszvX>)J$=FQv3AqV)!i-*#0S1Uj=*Z}{?==h -k}*!bx94z&W1f7gda`n}_$Vx!}u;`=<%?jAV+{2%JpBaTVwM~W;It|f;cfXqLUzP~Y^SR5Z68!w0uIV -k)m{F9^nO+X=*(rDMG&)s+5O#vMK$=XKAre4vM!2t4qpiduxLVJgQq?d=6zNI=kHY%RD+^2&e;{HCec -!V1wA_CmJJk;UI@yYQq(K43tigd+9YI;ZZa(8JuK=uHyVxl4({>j0;yqh#~acR|$Fa(P6vEd|0HU1I0 -Aa!69H_y9b$TPAx$+AWh8Cm0>oZLHNps{6R4=q_ElaYE%R89WLkq9!-*uu533I37cB(AZn#vlA40W&p -g)pB5RWPG@hWQ{TB^rfetcdOv|2;yUmlQ+_j65iyl3yd_z)b^I-htiKCL5ztGGSu;QN}pI06Je<1&0= -dm@pZg8FU_y=DhNMK1BueVXFQi*57axBD`4Su#&fqHrzqpO!Gi~j@yKj*U&q+v)#+huZhACZoEyp3KN -ii_y)c{U_R^Sw+PQvTayIO&G-jAi=5xu9X7bLUQW@Zdo)HaK_oTXy#BS$6K+IaX0o!7g6B$bR|xk{BCYy?T}X{`>E2(RI$=rS~H@oZ8u5 -4^l^`qmGX1<-+mQ(aoTa?kVc%USX~HdgjkRW`p=%HiaK$i})$_EJSrXMxR5S?ZWO9UrX^ -#6hD^YkEHlhDE<=^e;LJpkK*s6_%;39KjV~t#wq_>$0_aPHlSU*c4Dcvt)g3(=U%P6y&h^o@9iG!)U_*xZROpemtQYG*1qGz-Fn^Mv{x$%(6U8~2iiZ_xm -&MhO}jlHJE&CM9`5Do*}NOYdFZZ|E!z3CdAL_IPtT@JJUp5|*Aa~sK~%SGXYb%qwsbUd0uMRY|BmOcs4;;rwou&Dp+g5 -S6@X9Tx-@ChgjyDHfGcrI91TM)h1iCnaQyFj+~jnd|4~5s0bkKQLi|8GE5puX -qqk3ar+p3HBrT)A?I=B4LOojUdIo;`bPE-o&9At52XWSV^Bbg(4_eE2i`Ls_F^zN<@@E}h5(uUg(=T% -VC6M}}+ZA^Uw_e);87G>_)nwr%4-{O|*({*-_5#TQth;@^JzEvNZ6hdQ -`7A#nhK;vrQhV4OqZQ8U6EGa2@Bp@IFyz_~Qit2`R|1AEOFJI;~mRZ!PQ>P%};erbnF7VRQQU{+89Xi -Cn`syozCzX%D9rn|wPxF%}Pl|WYqyUY1gh?`Y<>#M&t|Ga+L2255`|UUW%P+rN{`~XLKm6{y@4ltHen -mK<^J%JYL4?Bs#Qn4Q(|8JbIRN-802&lPnJ57K6*?5V0(EIofN*vImAM0)-2s0E{~bGa%%gJbNHS3b8 -n$oWF7StZoH%hpl);%ZXT&>jM4g~IEX<=vj|xEDKzYDKxuNbL&L^LIBJf8UQvK&BhnqKVa_5KMZ;*R6 -{HYEH{2BbOUAxAq8xr!b*Xz4Ljsd{`(@#I;n>TOfROXz<%%Tp1|0s`r`}PR{?tAy{6?NtK@#De{8qfw -n-cV0aM!;?3Pn?@ia2|e;bIm@^d+owKs+{*M<$Umd&R;*z`PFOJj#6D||7Y<3_~VZk`TF_>(HMRKwU; -OlK?Cpw&%syFgR%hbu%qn1`Q{q|u!HB|H}HiVfEM5l{-canUgSLL3(ifSac(@sx$XexfqRLDot!^RG< -4a@dB=}9UvP@^>gwvHe+GYQ>m3066;R4Tfxl8uP!Aw4N#AhZ_c-T~pA-K<1C@dH6V3yOhO93+zgEq8+ -7ZsxA3IbNcZC1->(?R6^8y0{JCZCEfd(pvTWA3;kR#w&A06O3c#blH+(7=(?$Vr1AT*Hh?|)LFq4zP) -!w6Rc(GWy(lXG0cKm91@zFVX^ai{oGpTU*(AM#KA5eL*Q6GhI!SCj?h3bLWlfjSO3gWRKDC?@I!p2Rb -p49Mw_K@HOW#L_;*uu3%z>e2zZh -g{dCL!kw-4mtYvzbF3llWp8C}l#2$_b2Z#j=6ocev`RG&eET%UWQO`;N_}h;f`D@dOhN+?aYUKs~YtT1s -VmXYX>+~plE9zF_w#~+f;!R|r3m<=U4#jl0Sy@QD73&0eXTMsgCF`^j2ZBJR1nNJ&JO195)E$=4Qq*p -ElaZbl}qJ!)Yz00otac7dZj+gV~nmJ*N;Ei3q}47216H=g#xIrz#F&$cZC+T{b=touR*(sz6yOCo{t~ -X^ACxJ4YLh=-Ap5YlW3@0pP!{RX;EebpEtQTpPL@Z3nxVK{M0CJvp&MV`SP%!!Fi0)Qyyb9gg>?SLjD -P#1;874!30jg8}$KrD`kQ<-g$hC{ueYt{&&m`<6DV_4~T~Kvxo+&3#iYaVWmvN5}AgDpkY#P{=`J0Au -Wo}PK_2c;6a;Ya2jI-?W$k?(Pp3z!#D!4cI{gJ#v5;NjEfX-E|c5Uliz>;ogaQFg_jlT_?9_D1J#B1i -H3LN`iwT|WosB;mK(+w=Y;cTvP}G`j0kQc8XhMa9wQoN5e<0ijxoj@t-t*N{v-=R{zvCMorK1+_^_bHn-bIVS!z(XfDMc#>!+COMj87Pp6rHYvh -sjPZU&{p~;SSLEMlGcH&Tvjq*#^7Th$0uyzr?i{PW=g -XaMJH{BO&-3N_T<5v%_y_o-?ECfWhjQSrz4n?Idtoe7Qc}XFPMzwY;dXS~u1xTtO^-|>a#M&SR&Wwg;W>*2>&fxws_H4XNZD-j~+d=X=!O$si~tBpaJbEGVYzkh!*M%cA$myieG4qQ=2id-q>0s -0_&nCD9TQrOR%if>n89_N=g!dI<3&~@WT)DY15{OazLM?z6t{ -)khTj{0OvsT+z3IYN5?xk7u4vQySK2q&o9?o@vv@F%+GX|>vp#KR)g=dD|}3L3y4tQ%7O5HzHur0}@7 -I3ZiBSFaZMgV*3W?7$oK0PPRlF*b$#V62ULfI5IWfppOZ6Ye)DogyC}9}|`P%AGrLx{lEKG`>^(k+1X -kN8u{~^F`o8Wy@)7fnCL-K2Ujck~bj(=%c`6C62P5h;|e_Mf?BWd++hL-+o*4f$zNYj)(_d6QAtVwvD -Dfawg%vo!oE}IrJWPs=pEAH;jMK{!@KifOph4n7{?)jXFzmD#j9-nVF((rMfQqH?%d7Z$%DK4^S^rCX -f@90or8e@eu4t7iEOUz8q_eD_mV&|19nf{FU)P@w*5#DD7f>bb#MzgQ)Ko^90Bg`r3Nd^acJX8)Xauy$<9a -vIL%^4lTxJ{y)$6TKGH5KiY`8eQaG?U}BAZ)TmMX`RAV(^6kub1rQFh1X;&B`T*dr=tpQ=yX-%}UEuF -L|E0cX0pt>W5a>|W`_X=&twVq0Ob2+oapOk*!V515c~WAKf&FBzjM -FnJce-|+uW{904r9k5b;45!h<&83)w>330f4~X?*(1UzGP-@CPnbzl8i#|6Qcazivm1vgWDi?@%^yLp -dlqIg}aNBIpvJg90tUo$~lA?aXcQcV7Qd=2EvS6O8XM{=qx+asbE{%-y?pi*^@0Kz)V01Ao*5lE>A5B -klr!=k-r&CmicPpaFd+#xH39AP4A=(078zm~(>nCraLg+P!=D!d3 -ygRo=@K@F?z-Q11StmKVNn->%l@*=!y}2r>oGO(U|ipwYTNeE?uN{=>(0>SJK#a5{-fJ4 -TC>HM;dQjns83ilVL3sdOoAPmV4|n=ZAjgJbb6f|EJsJe?PV1t0>PZXMMV|*F;%Am&g1!2`*Ecdz9ME -kB~5QrqDM+&jtMo*2J+E`}q~l5C3vUy50_GryqOlv6N??d1e@Jz}N}%2lS6<*U=ZDt;Sdu;}rP8j%TF -3MqdaW5A>Z_(}sQrYx2;s{Zamy1JE2ai{=ZHl=(g8xyTpeXz)at^I+WM{6Js!$Pbdf54y7TmGv!M)Os -$}kq42#^WKNLdmg|O^j|-oKfzxu946K=7szXX<9_5k`GTZ3O*|{x7~5uqu*AkeNghp_{UjST37!L -T=1-u^%JY6O6###E?wYrey)uJ#ut}eK)4jAQM_C&bQcR^Q#HBGFIEAohSap+f|n-DrKIsaLyeMDY;o# -Zj}K<)C!n5?9vBxUK+rNdAcG2h4d9CQO0@Brp#tI~zu5c(>ttG*$xZ7-Mg3#b#&k3d&gV2*O|0FQGU4 -c)D?{G)C?`skxs)c#LW^aGd|U~UJVpzQ%KuGqig`=3q_dIGFZuano;S3A`S=$UM?o-AL+0gsSJ%6AmO -sq3}tzcN2VJ;a#bSEU}^tW$6T2m+LlSe06tGE5f7<=Z-nORRf@kA#0@YGXJiFOa|F8V&S|Bwan1G0#`opnw>ojt -~XJo^RJi8}I_5#i94-7bIhDOl&gnl5;Z`4!bg$69(_U6@ifD2rW-5_sjgWBk&0U)0E>rA8iKoIL{B*W -3S7`mRd;!-fqz6CNHe)?J~SPESwgPd@pinBM^>r7cj}N|X1^AAET-|FAGZ>;+KdapjCY{Jm#$c -*VI>oHsE32@4AgG?`2@K*#Lav$MyI8@ETTR`bb|CyRC91q&94wF_nL1D?YK|CPOs;78p)84uE=aG#NE --FE!fqeqXSRPV(+5Pd!LGSDs2IE#-QIa1Kw&{}idvQheRWp5=VkA2U#|G=O4kGyI8aRItStQ*I~#EA7 -*;4o#%6v2122a1kFkpX25S&;|oC#o|tGA58L=g}AmA9iET|3`DG4&W8>e&NK46L&+$gEji0Lx*yd1@v -pwFFW)F;JYG+${rELq`vAm;^)68t>rX7|B*?bZ2ZyFL0RKR8W`Jw-&o6q3}P)EdJWVMXFUSS0PO;JIzvwx`&g=_o|~pEqw_%F8dmJWQE$qnv@mgb5S4pPwHeFkpbdO-xl!5+>`Q#_z -4ve=<~?_ix5yuPqWvi>ES!Y&uqKZ_A8ihF3!_Jm7CL6s3xvf39w=+P7%xMof^j?1u=G#l?a06G8kX~# -1p1@g++5K%V6UpOu88siuR%B3H!?1pjK@4*Kt84HWGR+CG%?x^?Rye?Jm0N|>~M@>d^xYvT -PE0rl&T+P4Ou>JA0rr(J4&dkgrZZ+4x(-F3uc64X6^JK|Kikjw1O9(IMS}`XF?vQ` -v``YXnF~+$}bFde$NNHd$j=2}+ewg=R-l?Z~C&n-sQvq+ZTX-;s!FcigXQzlXoS%vt(wYv|5in;1|4> -fogOoj}n;(xB<1LK$FxJCZ6JuS>H{M)YBGSN|qaWdc@*6Q?gwS)N4Fexe?|hkWEC?0zNsQewZpXX#z>W;+^m#q`y{#oN4V{Q<;0sNzWL9|=Y$zlJ1(wE|ScXk-Ra -Qdj=C+1Ma=_3CtO8G-T4;DN{JB_mZX8TJ1-eY~m{?BF8`}6%Dy^8o7l=vTi{IM9TDf@BI -Zez@a@<4m)j0^1O%bn#P;g#}N_9P)K^pnUR{SoE~NE_`k_5JzI@zG8LZ=?fWKvx8s&}U;k32`ycM&G@ -2=gwMj@yu@gW`s8ZbCZGH29z+3W$=Q#3v0|&DsOSx6HZ)n!3mt=4d<=7GMuZ4lLK(tnj6C@oOr`oYwk ->~mRcvAwB{j)REcxe8p$D5;*_<i_&zw0fV}@#aW=2+CXh&;qmLYHaL~~|JUXRT5@wwS~*=d#@DgJK9sPT%JBGDrs#1kma;1< -eH~gDHn5ULT>uh^bGR^bDqP~**jWXNJogonWvgFR2ldU?U<4mlQlJavN^Y-%9e7J1+=l$<{M<;xm>Y0bSnffku2Xz;)xyRBu;*uC7)$@_)ep7yrQllLMX&cs*caz@dOs0lx%z1$GGx4ICS24tyeTY2b%}Uj&{Hyd3DI@zM -0u1Zl!G{WXthk~LE_`I;il4$WDOTTo=sprGkNuLZpq^kLA!pbJ4vtJ99uPS&o|ey8oJi_(3m`%UMg@1 -|d)PYNC#oEDrJ{8X^Jp}C=h;bB8BLxiEfA;FMgm};13c;4`?VT)m>;h5osp~B#6>}ecg9BH%~XBuBM4 -hR_%k`}TzmSf}*GK64>!;{f>)+RJ(Vy0P1wRmc($K=#-Pqsww(*GZvhk -)-6A~4Y6_Ot^FXZWvRUsQfJ_>0X+CH>8v{BgIVS~bkhnd4Bhpi3U8TLciZ(;u71HxB^Goc|FOKsUqb& --0hdXu`Pe~^EKe_X(ffP#Q01C|E7A5a#sC*VTB&jC#X9|-gf>=9@RObuKeSQY4_>8Ke&<&>())lAdO) -XdQ=(v)g;YYuAe32GNKBxpp?*dTLIM$nX?{Gii8!NF_ -yO%iOt9w|d)rII{h!-Pt<8{Tl7l;Q;-$<|4YxN=e!TL%1h5Dw!J%V+?*}>C-OM`a@p9($`TpoNW_*!s -vu$!TYp_ReMaKE9mp{K!M2scC-VhsZfLkuGf$%a%zo}t9>6iL8R!)n88BnKM}TMY*cM+{#YP8*o9k?{ -dzgt4D7!B}eCWjtv7+Q>pYLYjs=7-9{1G~~sQ6(PGqJ_$JzGCg!w=u@F@g_ecx2@MX53mX%*CTwfip0 -KlF7s4vTZiWSfhldXdFDCB(1pbgUzV)UT>r2ZRQ!58NCWrs<;@sY%ngXdl*Ub@96Ib -glJEf(H_|EsX7rPa9VltyG#FLPt}6n?k+AXM`^gUlV>P92ZEer!-ru@1v>yH1!psyP)3woe(T~wj)W4= -*um4zoNPj~Ag5eFr`-Tq6|8!yy47VIdPjvWYh@khHxM@_opqkQ* -VI(9qDB&~c%Kq4PrD4=oMd6?!yuIruPE!nuR`N#em4^+EL+^<{OSf1-akO{}I+^SWlg=9s2J;~f-8(! -zA7bP@V^{Vx5tdb_?|@TB0S!Rv!J2k!{p8+;)6aPY6e9SosVy8R4sRI`T|h8sp1#u{EXtTU`Pd_eWPq -p=5-XS5qH8Y_)gj8(>JW1ow}tP1!t;B3If0FOYgz>a}^0%rxj7q}}hNHbXTBDD+;1-%sXdeGL -OL)2FN67*Y8D=OhW+JV}k+A-Sk)IKcHZr2{wdQc0np4zUnRL84yzw27+@71@blISj^y^nsN{tGMkAzGQc`3v-v|Xqvl!-|d?i3lW9_W8Mpi|($z?{Iupl!Mxx;<37hjd3NkC -VDiREuKt6ZEU}pXkQ~Zw(%6C@|z0ml%IBjtw=0H4Qh04+{Tx_`9HcA!8wA3{V%S*Q&etKk5IL{~mw4f -75_OY7zPb4hp;)I9}66>#A#~3)A&A*o?bFnuG?0CWV^9aj@@nw3+_z_`mPJ$$zu|Hvb(I`=tL*{@mX; -AUPnH+LhM>eh=sz7#8>l^#JPww*~$fcq7nV6QvoZ`L|}1W~b(&=7FFtL8(E*wWGBYw2QRwQk(g+wzs~ -Yeu&;i6m$sg61+0_HEQGi4f%$CM#^v<(ND&D^=|cX^#$sCI{It;`}hy{pX5K&e}VrB|M&cN`hP)G{N{ -gmz^H($0lNajHRCilG!v;+I<7shb=M8mk0NR7K&{8a1~v5>_afa=>HgXwl+q~wvHq$4IsO*^WB$ke&l -xTnt{AEf?#AZE)>L18sV&wRLyS?zIFh?j##Cd5(L()7k#QcTW^ZgVaHqAbn6skSQoCs9#WAP=a=dcCYq;_OSLCQG1Ho-g8s#x6Nd8rNU+T%{>KE(RlGN`dsj -t#k>shdSuxGG7R2`-XGf`hQDr{^Rc$pEF6J`mU9yT*lUT1OGh#JpVlZJ -pVlZJpVlZ`Sbq)P)h>@6aWAK2mtey7Dv>_3eOd_0001R0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ_# -G%jU$W#qkkd{agC0DjXXZTjMdM<6^Z5rU#ssaqedp_)q*xRF#*K&yhH)yl4@Y_QHm&3L7Z?w3TPiZdVlB4Bx!lL`~Cg?{qdo>cV^DK&YU@O&Y3fFi*8>b7zI -Hv!Jn=RLao66xrP7zuLu4Hja@TH_)qHQ^J@+M&F9aW|I2d6!m@|&FT49eN6Fm}J@l~RxaU4cS>PeZFC -TJvZk*|O@Zo#!yDT#^%^54>yvtv<-9F>k)c9Y^c@Ipz1D?|6;;A0?ylv`L?D^o-ned!Bao*Is80^uhM -ixIe2LH?0^C9-U`Ija0vAmya`wXuj-1}6r@ciz?u9C>dj(<4{~ntDe;tDGLekG -CU#8r*Sb^ttb+HCv-%Y2(IG{C`mEC){ayQg{B`;IB3jP{ThjYXK%Q%=&orf8r!NcHr@+`Qz%NBA#)<@ -{8kcRae&MvR4ysQM?8BPE^05#WoCP=K=P~jB&ws%dF^EI%CtvwOGp$9TLV -HnYx?|?8a^*o8a3~Y=H=;q1bJxkCDrb%fAvdf+?E1omb~)^K=6J$W^juvId7KV9`)bG%&ivvaa1-0aR -?OcHMf~GRC?Z%FxI_-_Qm&W7w)F=wX`^mCxfNbQ=3opUokcE#NNv17Y+i+6;aSccX|+`_2)Qjy9_Pf` -bU`Q$Epa;Z*3~$`y6tL!-_)>44$W~|3 -5=Leqz`rrTcn1r!}F%JJsz^M~%sp$9F3AdyYMI!No$1VMZ@LKpYxx=a8j>~SXLw$ayzA##dx=x>Me7k -^2o6kdB0z=FCY$|t?Kbz}!!It=@O*_JpB64@cungAU>vYCz;%$_o7rIeN3jvXBf?dZTdhG9YpOcuFB_ -hp}wjVGc{0v4o96&7LwT+7KJLJ7=2#gnp|-9A18bW -IwcQY&ldTuIzAhUj)|ih$a;cPWRMLvF_dsO%QO#IH_A(q#!v2KkINd(7&PVRZ^O16ReO&gDz0zIMozh -%s&fJDgXV8{gCSS^=SGRq)2`W~{3qY4S$Ys|W*j$2^H2cX$ne2cZ6V-d24xrMDHVXo22O`hVZKoig+L -J7Lb|ZlmbNZSA^yNnSQV&iHwgiTd%u=A9V2fhOZPRVbAxkY54^R^uVl=qKX`d~J7dR_mx>gw2bp1s}Y -`S_ELKAb_a$9uU6PvJ;-VSN?3W3i_AcGleQdwXlo4UHq2S7k3gDaOfXCPQ0g-tIlDYpes{81D}ZOaK= -uPo{mat0O`FGjb0x{=ZR`v6Ls=_>%7+lDM+A+U(~^c7e-R(I*T4#-+KpH18!Scch%F8U%;YS{J%p7~z -Ly!s~q)@>~us2PC*9OyS3=sE=YkpaEVfm#u01_ugppiw6$t9aU=-)eWR|lS@Zkw%{UgT!pzR1s{L -Xp0?b40>wOHK%jeakdP>eiohHk6jW!ibe?}h>)5#n!!_)S2A1V*(OsBk`v{6b(piyfTxz~C=5vcbPHE -y1hj8L^p8$olCxXmM$No?;H)*r%n4HCtu1&Lq}sLu9=NtUR~N6E3wN|4sFWFKzjrbKm(%+E9sX7i*g7 -{tQMMgM8}xBuT9C3Z($M*B`#}lS>W4CpaZ@TYTgT4_U9R!2_>f`@DkEpSeZ5&S%8DcQnUaVAz?(u0`~^yqqNNLk{>dF3w6SDbDIm` -D+@n(g%KbcTpD84yvL9}oijOVy>qc-Dbl%GvoFP=F@JF!wgkkck=Mh}(yG&S!akiscCm%(M7hc>s9g_ -lS(mx@{{A>PO=kr|Ce>{)^K5g%;(K()?nJa)DSQTh>^R$L6qd0>dEdq5ZgE`<)iu_It>zHIgkwK`e9M -evYyqyLH{CuCtWp&lLjWfmx1mvIb^+&l|WM(sA6J0F=afp8(1Ko)_@}fM`Q_)gPwC31%G&CI?4Vf8>djR5c>wId94(qg!oD9!MDn0t1Oisz&+x%e(Vmt-BF_(uI>#T*^iaequ;b5Uveh5D7l~y72sU-ei2JRy3dnU6&P -CwS^nsH+aMr)lQgLh*ldoh~<}1ktAuw2uM69LV5nT@?9cz#yE!OB}5oUG2EO9H&WhgdBhFTq77+EH{c -ykX)WW5Y>+H-XbGY3H=Dz=*Ce%zgShsPH%;G(x5q|+6q=F6VLV|2M-yMwoOoX3jGs8;mYT@qhXVlTI#A-2Fq -#$riTG%$6<&Fm}C-Z$gOLL)d`h_Gv_uV6Z~{N8+K(Rbj{U_wKVItCu5Ny^60Ixk~byt(i&J*a828_j` -7~rNY>HwvM|8khm65@4o?dltW>}NJH))>7K3zS_O$}eRC29sOaxbKt+> -wXfpt-&I@_LLnuQwHVWxH7Q}P|66v#ZZ}~1DYY{ws_9yz?_=~xva(K`u069?A?GT;>sr1Y7n3gq-ffUH_&<35W18PA!R)?Z!W)hZt$jK@bVSUYQkzlU -twgWB@^y|**E0euEK*D^YFnJpUF_>5|HZ#H0{6K6*bG+3;9ji*jwsn0ZULdO-uPr9%b6a9o@I8Rm&TbKqQyZXu&(){xPG(RPfr0vIuyJ -RBjHb2YXPRC$kC`AXhlG%9;mi&u`n0A!e&cfp$>~|dtnEfuQeC#L3u-g-5{>(|#8EcF7A`Ho-^=wG2@ -SrtJ#I{|+qp~pSb%hjXOxglQv@fo!D>CsBOgs@wKQkSt*c7UGOvjB;sQ -7>4n{!D@?^_963wcNjK9w73t2z1$X%^bFDIENK%Hw;+ntNAoczF}Iq4#9$`O1FC`it99gGPzW8$^C9( -K&0zf`0{D47qxr_* -cU4OpE!WI;7AUd9=^B+f6jw`0+gPniTBY>`E8FEq_I9`)9ifP)?bN?v^)VlxCQGwTz54@FNHZ%{8mM# -L@@ML4mcE}U=P0}09?WC|^#`I4`_Mc=g{BSsEPUrW5oq){6}Ujr!mn?z)MmM|4HHo1$Sl#IN=iUkBDp -WYn!(bwHBkFJx)M;bPPj*q%M^d}FL_ldqxVW&?mp#l{zVOm9AOwV!5zGdJXbD%;?j>sWD%C;MdNN*7? -PDka?EayV3Z&VQsn5`(-6}XUg4oj>~sGssCA^|xP1a#+ISYAJNGIk%-l|i5*sLi^s`$xa4`H_ocwNF> -9e$trRhC1GYi@0(LfUgYz>{;}jk9_45-`mqY&7Q%8L`_NdkQ<#^va}ivSsrNaJQ-$tRWT&TprkdxxRx -n*`b!pByumJIhFFc_ywCN6N1XDLmu&I7TEwRhFv$w!hHbb8&Zj3qaq(QV$Rd$OKj3=4oK0mz3Z^aepj -huWcFNh!(N|bDNcWP6&qd4TdjTyD=!WaSBk2;U_mZPh_Yo~sChI-qCtr7`C;Oj$-mA;hCql;Oya0Xo{RWpRh`evWr2!avA2+BG0 -aVP=iP;?KjvxxA_1j0{T2t#-AP#i^+Fr!xjhSV6^E6fe~ -aKv;b_PHz3pFVn}&96GK2-WhCduSs}{=bXh;S7bFuVlrY^IWId2|I)@;>OWS*(Esu_hwcY#bknG -nk*(enB@fV{^O_O{@`-vLoGvb~H?Dg=ir90`gJcRcwY-e*yGZi) -MM?5`()6?G_~+fkDqDJ&KV$?v%sk3FjMx>!Eg5vk8QhrtI#p=Sm?)It!3=6p)sIeu^3MVyr91AFVil; -&=3=GQd_!$u5x|V6I%kAKucO5_Uf@^W&w&H3R*|_S~JiN8b^pk+OfgCr(tE+pafRt58|!AG`LGiQ%@ -Kavw9*a@HHKi0yy%J2J!`RvmX#q?ToLbpnAX&b!OeXMs=$mn=iv?S${=(rXZv@X;Zr-yQ*A6Gp=NvBt -3LW9`A17BqlpNd^J+dqh=^Z1JQZ2}LAyaNS&f@VG@JnaH-df%I?xL0nZ!_>wt6%sbfHzxHmjD|{WnhnC7` -;1y@#MQS~WQa%LLO6084+JAB#deBdvib#&7AB$507TQeY5YMYzo{uw5SK0)tosf{C;mca%J$cY~kQ;m -Wm@%AJU8l%8SX!ECvhZ7Td|qezeXF~fuqut3TLh}=Y7@Vf#B|0O5xi^`Sja3r`6h5CO(0k_6RZ)SokB -MBI;YBpS%zfMQ7{;e8jn45!ES*W@gEs3y5%wu*xdg3)f;Ci_VE0v%~auW#o%y0mbtIU-Wlwt90A~3Eo ->AW0R2mQFTc~I$w;&NN)8&H-uP9{}O)_{X3IHdg=~ACl4nT=aC?^Q#yJx@%GUu7rSEaC;hCi8$P~1(>k%Lo^ -;kRZJhhc@@JjHWm=f_M`5w_(BiZeW7v(?oFMh_Z5*xEk)#VBAI;T(Y&JU?jrJypB#`$bY-a+JOqXKN` -5W-LerazLWQj$KD(|K)k+i;je!3-O&O%H$M5PCpIix`r0^uZt1q!d%Or?ZzsEP1K^X~3EKWQh`P^r0( -pzzT2|?NuO65|ar2N5-z(i1L`z}GH_B`nEPw+RV*5r2~vcxN(M(3GJWJtT^FlgVz^)#bBgy+MxbHOa<3q!5 -Je&a!-twerio!9$AKFq{Q@nPwQs%2{#`6*Z9 -Rmho`e8?G9O=VEZ>H{P8-zRC|Xl9SUSZFFP~G^@$vN|Hbzt!nU19un8N=fZWV;S#z2fT_mpgHRQ_PFr -ZD{(K8wp-D*L`6v=_&UV`GV+DvgxnO%gsqyNH0tWck@ELK-sMzW*O;TXsda>$kM4l@Ye+%6x9dc#j}` -{|dUxq?#XC0}^SZdfR<38VoPCc&Fa=@M&y8ooQHA!6aLyE -Q#3JTllwjS_WzPps5D3y`))O(=|xT#!wau{V -+(&ia}-oq^ODFn(s5p%@X-SGeJZKc0bnlpb3igqQbovXO*cR(?GJPU<9RFBjbmk(LIGsQV;%)sh5(C*gB>`dukil9ufc%4jq{Kk#rtoH@@yZ4P -nDw-#c=B__;6Y|s^P^h73B+UI-na>fo2@ig;sxvk5Z!ze=vu(O=Z6CJkavtH6tMV10jOv_Jgo3Hkt@9 -*MklOlIj8fy(`-&Txx2#C4fHJ(6?1hoGr9_Xa{*|b;e*)zl5Sv5cMeA$F}YJvN@dVyy4-d(FuU7r7b; --H{NZV*)E?_1YxqVhU1H|ugZEkAZ4)pf8Fmz;qU4jh?k8D8ha)#L9m6t|44Je-67FwkW*MnXZ;Cz&om -^dv)8gqXxwRYj@6BJ@P?pH(LAiN0&gM0L6LEEKdzTHsdBDnQ5QJp((s2h_UH^ozPj#LUG$$1BC!X4ad -376k7p*8+RR}`HoIvp#okp@MOIWW^*#)`W%68qkfIfXpOdzaa{wfUv)PKM*vma-E0=%`MUtgIGyh9GZ -?X;qSuJT}~nF%>P=(2&Er@;;r8bm?$0@1!#2c8^8edu22LMDbQpr_V8i#2W;&X=-{cWyC$hz&|+iY~KK|PS6p3p&x-bh#GVhLgFyqvpHNE2#|5o23IuYV* -#P+7=|ffMsBRnaHfo|9{U~~aO0*f#b-o|PTz_a5`u&`#rn7ODVe-x6Zb*0POdeMc=E=n5&ACSTO$Tm;dZE>Y3*?OJN*sAtiT6Q!n9a4J+FG{Y>M2WOA;(?5{O!@8w<#}pdgZzR-JP{M -e1-&qZ4Qn73R>8xEIRmV-a$gNhPZ^N@Sv-9hOHbIv_a^tlyqACp+3AL4q%+$e568Bw{NWi^7%&$!NeU -$;jMnGcf2=&%4&zyrTUUg>4S)d-eh9)1t4^)O;+`Ub4d&Lc -j-5BlO@~&Ak6`}uK}c2;3Df_0JUA`vY&kFWO`KAd}s#&c9|`MusT|O++sk(7Kr87y~*TrO1?*$Kz`C- -mGv!w?U2d!1Ex)9Y%LvBfk3iu6A_-lYz^!^w^2kc0b$bIbqE!W7T{{lK>l@aAYM<$(QGDamF!&0J$ec -@GWBQ#eLF)C!Z&15Pg-1&{?%Tzah{NkFc~j>84C8POHP5HXd;c;qpK$(NcW_~{)R{&g2gDlKcE#eEtr --H+}^;m1}=@U=t*zz4HaArpWY9;@GtuFc4?Wu(413(mP{8w66DUTJA|2z0;AE?a}CPe)9fQy<$nw1nls^w4+Mv5YXHz-%q=m|t5lOZ30SIrI6p%UvOnUBFE`V7;7COpBT7QsVX0^w2~z6-+ -(==P+Wvw0^W9VtYax;P@<+k|4cZ1q|iBrS*Ne! -&FZ{WeUwXmbQ?ZtoKvPFIBDMKIygkN;tEeakAq)Fi-BhA~u0}FH7SISZ_3xZO41~>Jufds6iFi`)whB$s80PX;*$l -t<)>x^)qp-2E8y}G2r6Vi@nzvSGvOSlRY_h8u)2YWIFF;2-wk0`+C5Jw$WAjoE3<9}HW@V@>iV%Fze3 -+;!c#Z?db^Yi34|Lm)uffn{CTnP%*KKQGPcSkWB#Jf7FazkHvg46TF3H?=fO&}koif;s5Ia1#jdn8G< -1ZMePPgbGqn1Md^Np_O?!x`-CtgoThOuVE{5F2A$K7L*Ct2xj-(Wbl4U7ies*4PqdH3%F6JH*3Br~1G -fTznmG?j;nc_@#E=JU|SJhYI9#_-T$9vZ|#q$0-X%=AZ!oY!{#QG69~pa#$@_-2bwXr(s{k{QM`p`kB_2~jpot8Xm@ZGJO-JSQBcZYTmfA@FjcM-KqL -W(Ke!U3It=~uVA+__!ACc4w2tBRyRTq1+1JeswDW*Zf53((l{pIL>%*W2lB7YQ-n9Np%9m8}#Hjb!%EyYLa*6)=Yj? -OHNQ0Etr0l4;_5bAED!9^SCd_2skI;Fh)Qs+Ywnt+KIIcD0rbMws)V?YX;Q=amcPO%6yn+zKAoG$#O(D%Hc6 -R%#2#{3hUuB%s910x6Nc>NC%ABrt-x5S>kRikxtshDgN|5)6@67a6Q(L6?V6euIp~sn`3KmKmQ45{W- -$6B%Y1@obONn+&e8_InTG?|82g#`vu|CG=|=E-S*($crP&*2xr>q3}?VUnM79O?n!CBMKR`r5MLrsmW -|E1b(Q&Sza(P~-!HkzE24h)X|-fa>w&S{93eCl`^g&NT}3NRuHRdnO=J7wq8)8KOSa8Nyq%-TTIkOAKJN7`Od -f)9A?0@OTR=w=Gb2vy7KcA%tEf){`E3?1ub!Y5A|FOB|HfwaKHaCQyEvV^=oykZ*=|IIWf&?1$&MbB{+I7#2e0^XfkNO=(#oXLKd5Q58qz=#^fQjBnzF?nn9>v@ -TBs}D|bK6jCB+YK?3lgmc|ul@5Wfq8f3NUQOv7dltfzBKTJ#6UU2hnvaAagEHv6A4o~9(i;%=Pq3)q>FwEhr;#bu@P|-DV@2tNztw#4@!vF -_6pyXYC;mSYOx~B7S~oM((a6(&0zD$Wb|5)b0rvPDIz7UO6>N!I3R(x5o>3 -RD;a2`gbY>3jWWy5uj*CWORSSD*6RS{e@wr+bDWVlWAdOBnfQ<27AutF#T7l;K`QF(?ZW1CpxK*ec-I -jX#0t@K%kW0-QCkAmXrjsEQvTIM!+#lFck(UZ_LEr2lj#yz0=P1ktg*AG{>H?NH3Z19|c6#&>D>sl!= -^@l29NI;}x<@BArZA{1+I9%X4E?IKbh`dfVgPSG#0KzZyian_+<~^NxPfaTw`$S9_9bjt9M6E``GDhv -j*uKz3^o9Y=@3x&$#lD1(%BVxGBAQ(&#K1#balGjfx6`tFuYw6w~|RO>u=+?xq4T`po|PXZt03x#i|g -a;zFzXO&=__q3L!~Xoobl)832ts -$E9W9w+RTyPk5JhKNvmXGmn__@UNTE}24i#F0hn^VeA?qRgo3l|@&~8;*9MFR3bwJ?g!8Ts)>r>8S=g -=DQTn@}j^_#J{IfuJ)vN5AxOM$V?=zxAo7Kbt-w~cIJzDBkp0Ur3dQ+_7G*SZimGN{nPU(vl}4^WutEzab+HnX0>e}WlhjyfH)tuMHR+h -R%rMZ$^_=!XSQFJAOW90uRhw_MA@+YL2@c0%|5l`I$tE39LVQ^6bK -lV!KJ08D?n95KYa`CdH#s*e`(c&W1gv94dPh0fI#rySJ{iln#*$#K6DfCi<_*F&kfIZ`0IfD@SyP534 -c9-cJ0}iy;5u#41bUVes~smX~!Ry37!;xI`O9`(Ars%;S{2?xPAElBM)vzG6~{*Pdbp8!oQ8ODIEPLV -`DKky!#AJ>#GD!MZfNm)Fy8`GG;BMFl=%H|BbV2A;u&2fkr+9M@oyED2oXxp+bIyGr&bhb5IrsV)=bk|uX@YZ -qR2=8riwAPtM=O|}jWXu_aPdIqy?7w=?k^9w<4ZlE1$Xrg_C1siVBg6!G4_A>KEb|cATKz_IheEj$$R-xn7Z#1r4+$ybSV00O7@kiScOb+rC -SW5;bvu$lCCy8LXtg-*jAej@XFb33SE2?YQZv*V5|%%iHuLh{gY`RyDGu -4(os19xGDqZYonPsYG^EYPP+!azIj!jr9X_{yW*xa-(1M^2b&y#*_1m(;yuiyqij>^F|tt)=+GS?_)c -lJD|Di}T6JPX^55nuqO~mCKleVPG`WW>IX=s_tpb8IyTwi=Idb+bQZdTEtZbJk=KxwPC1dsvTCf&YC* -SuHJ7EV%R<1*B!Shthiq>d*%R#bvA*E<&ua*+MB!`Xm|+C-G>7>l9ufU?M4sfQQ!Xf0vKJN45X?9kyg -JBZ!U8(^ixz{VCTI${iFv}wH@z+sut1B>i)6Q$uqr5$ZVN)p#@_EbMOPj69%0nbb)4c)CP4a!P&Z -=atW)#k;*FKp8!SGy!mX@^C$X9SWwvlEY|4}TXIXlWIDWrvkI%s^H}a&8;*5hhF>$`szm-Prc&q>6RP -ADWZnjt6|?3#k^>>n=|Y@YX6cWGwgRq)OK`i&ekDr3bq66g;KsLGe72x!y={;BscDh2Wx)Qg6D^4YeRnH`$Ux -$(@Ra~1ENU8AWSWKF^;@%v~317)NAK6_*e()I^fh|+!NH!YJ8hnhlI%&CAm^@0XLQW`MvrfsZHp+T~P -hTJ1#8z7`mGx%7iuD -Zh&bcTAHyq@1%2|n9;D)v888jBu>-4gb9^OfsfY{KeGl2|&E8+Jbe=&BZcAc^lEf-B2Fm)zE@K6VhI& -Kv1E`pJ&}pK2+_Y>2w61Ij0OyT$MgWTw7(p5T1Uc4}FVNe=#z;je0ZyrRsIAdM -LA`UN*LCb5BQy3#zIHx>k=TEg8Jr7{>|5dM?jbj~fGL#a@FYWw&cX0YBYe#xPXUMz4gGo_P29$%8Yb? -A_a_hioh&jkx&awz1R4c+eC^3pal}qyraB-S*=%%nP~q8(2Z0xf`G`R|A>bA&1R(zpd-n#~SMvpKJ0O -_l1_^$kBf=AEPxmIhD*(DS!BXCCGVg1d%P|r)#cuu1A_VSyw$UEuF?ER#nwdrfVng@RJ$66N^YvhwE!5PkuG-wZKd(rkG~1B0M;~I%Z -SJAf0M}v;}I!9*Ym_DQQ+6cos+IJI7&GRIcdWHA{i99eo`zx&{-~Sf#E&TCyAb~NP~8pZacLc*H|;~> -reN@S0cKdy`qm(R62zM&w~LI*`s|3^sy6?qL-XPGq*O1zO{#~F;)Fp2k+q$h`O%0|D4qwa|hm4!u-_- -9_x~Dc{?DN^r||pjkoN<-I9=33MvZw$&WNrP0`gG;0MJa>&hyc -j@r!Y?}+bPF%!C&(E;)m#bh(5lI(@(ht(pOs~@L*-x4gIUnyjr_RNileAUbSdj)*NO5B`XT0L!sS}#X -L6RnGf*b)-;=03xPlurak7~~MPGwHTH#+clg;!_E1Dg4r+a|9KODr7lWJ5>q%xaB$Rsc73V!-)fJ4 -Bpwl=mz!#vgx5V)g3MBsUd{dF}yL`Lox4Slq;ip*-3jTN~)_Sy?zAAFF-+W>#$J)ZxteQ}Y@$-=FZj5 -n7$|X5GgEzS1o=Fv_H99A4K!a1xZfpy&jb^=Qvba85QmrMEtn@?Z_SF~M^~4gNI@zf!^YPKA+%0u^1% -q-sJ}iMjK9b?oZDrNWTI`ie4ujgU{U9_Qy((m~Ui~g+cQ{lm8!w6Yh{*|zn27@D(N*oW=(hhn&Bc;mB -2V&W=uNPicRCc%5;;ky9Thz!; -xRQFBb=z}KVM{185f>pAWwtrAmes1b#8sd|UgA=Fl8}kHEN(4L?J)+-_-+AGa#>>@BAKyf*5lTj$CaU -FGH|)cg!V7=nk<&|b#mniX2E$z#^WrR>u{smcKy?+0;2tR1>5jKHS>XlnmO=1)j++dWGDB#+eq)cm78 -S(R{G~J6Xq(InKygLR(9x%b?MksXp=!W!0JDOd{Z6zmT?L`+O!oN6VPE7Fu*oamhbYjPW -YCy^)%^fW($1Kq7ueXoTQ~#!q03{B@jr=dhlE}1D3mswKEJb{|LtTIa|U?xt&9PVrqA(M`d~lc@%8~6 -FtMd~*PUnIl_lAcP3&|UCnp82>z0^BPPvNYXFqBU>Q7usTiGuDOsj|8b#noTI?Bb$#Nz1j2S|&LgzbIlQLd!gzBBzXm9XPU^svzDONg?C&GfSGZz?Q`!_3N*tbyZF -!Wk#h%VIQCz+aH#IRJ+)5mFX2D=ps?Z5M4PA5297;rSL-*y$7GQB_rIkWg|QEr3wPNSe+qZp>@hCr&j -surz`fizcdAgjwg&!CK;hFP(lcf6b6$C=0x8v%q$8M7ZC`K_e)EgOjH=`_>ONQ2gHT -KPTy%va$7CjWOt=%G)bC+N>BYche}oy8$7a;kQ1|blr7JMD%aaE)DjlMl*!fFs5WPN8KF|at44TCb>5 -Zm0#Tsx?0)Vdie1LI>`5xl@;WUf{0d%a4gBOc3MkYQhz4lXGuPm{5pI|--AQgrRt!SBz`4yndK@637? -C?;wy4Y?COdxJY0lHZ#wu1BVF{of1K2iz<_n!=bWU9e5-qgSU8}ohpfb9roR|-Nb>0CaLGVsz~y8J6x -WO7^L+q%!3=17*GuUO^qlguWqMy$9t9*l=w&E+OYH~L5mv*X>2i#U-iMOcg%kIthMo9PevEK=Bgl5Hd -S@H{G$H7;QFyv00|L;uEy`l!hw2D?zT%VD*vtPyIx)gSUF^~jaSvDziySLTBvTSq=ZFRXyrq~cQ*VjH -QI`LLqY#iNlxqQ7C$zr*MZ9*yQ~?Xk-IKMaV&byF*?%nuKU!<+B4n=A8wJ0K428rrp$`M)0!hvzP|i! -1X#OzMwA{Y4vIng1V%BTZ|t5u&F)#L~zg@RuE9l=RjR>xq_zh$21{#K<9rm+1CBMknWTCLM6ci=JOl4 -_FJB>Eq)NZCTHDG4G&HoK0M99JaXi -cX4+)tyVxP~>}_1g0|aD+;2qmP19J}>hk=6dLW6RdT=GNwC>?!&Ms61hP3BvE;x2KC`vT7JCO^}0JZ&4h<{qW4eHP{0U*^~)uoJvCFvb^MV~`ShTqh{D+rU?I87Hcpo5LMU4SOBYOjE}b|~fwS8BkF -#BqehZxr}ehQ$|}jQ4(7Bt1EHr;CPQdZfZNN9n>QUsbgskOivDAURxUsK^@^V5dgX5p}^XB*D&YQEjl -^g7qgirp$pRVv}M0*N{Av8-rZ|%VdW#ZE~to2ne}aT-!`f-o(ArM&n`1U08R^8Y&M&(5C++)UUpLickqZ^zDPeoXNVG<`M6<^|HjI$Bjt1C5Cu~WY@MbX -z&JVPD=QJYlc5OyRv@y5N6Uy2M@0ziH$3o%T%y<2l{d%`B^Z?49Lm3u3G&MfZm3TXdx2NUF+3onuk++>-=deBD>4w}E4_>T>@u0F^|2Q%Q3O%_ACwMknGtii -=NUQ{w9ka13baGn;T;L}@&Zd1j-bmI|gYHy6%INNS_%SS_QA=l`Zyt+J@`0N(FyQmqy+(7mJQ7E@=6Ugm2Oh)uKL -`4iyGyR+V+}Fm+vVEaSap8a9zQU2e<-UIYV&n}25i$B5gx8R644}a+Cj;6Fwi_;O#+O`1J?^5^Ke6tQE(g6+cR@9|LRu7b?y=zo&<9G*E2|=n&z%j9l~B{DUAYy-zNI1=s -w_ZXtGf59l(ZlPMQg`qxkRhHbLm1e$|WJuz&_C1Uc02 -cmRu39YE3?gsSSx4fyev3ze_}v||Pv1bRJc!Cst}cC8A(108`LfAN@wPxu_aS^lp$V*I`o!UM}S!o!UruSEEI-K$QYic}PM-rdu<5Nhc| -q=LrSsq)(WB6tyas;?H>e8Hqol+UpKfd0m}khxly0HdrFtv+L{jgLs|P9S -BfEh3vi!PxwruD(^t+bz&%dok^;2nDiaHYWOxj6MUaEJ8h`+G1_{ybm?Q<|HIaOvl=@SD% -vCkJC)(f&F4WEyIRM2=dY{?OO>Lh8Iqu9Ze_T*COS$I*Zg2rH<+L)5RbhQ*X++IPnObSaIowH+-NNg- -mOXsypMqdDo?}f($HjbKAqPR$MIDysPf<_(`Y1GwmUJD4*~kf8X>hL$vrkGLX%Lbg-luIg0sp^SK;(21_G=PVFAq}xgc6dJfjF2M_B@88KBRR;L -?fS%WgwwylQ_G&rXQTb=HuG4$qhvY^7Y>FwhYn7Os$cl0Nw_@&K#ejBvXEVE(=7W_OTu>Mq2U4QpD}9 -~`-RxyYwkhe+~Lw^TSld67F0wmo_*5mfvzYoGddYchTBkA%c&_VMMS}B5tY(1>&QFLx1>2i4XcHV~4( -9-R6bqDiV98sz+-99Q{l}lzfBfO8h1FVD6QB0w?9OO*t-#ja8!Z>Kc8l2Iq(M%IO8ptHx_VM)rQ~D7t -DZLX0y&lNDumGiO<)Q-oe1bBr06(69)4>go^9%5rex~M{gg}<3+FPuRSdHiGV-%C-seZ6nGaLSzBsCJS8=G5EM4w#SGksJyQ49s_B{-5Vilfe2T -D;!BaPf$xwQH4N1qCTOi$R|hux0uLDjLw+g#8G!a!gYjKSz1fPP9FtpIONui=S2 -xN1Wc)WEb<~e>W|%($PV4szA%Q5D|OrChZ&cV*1^JCGTKKPm?;bzfHp8}z?6!6?Up_m$OG2_0hQrFbL -`m$*0bJt&$h@RQyOWCUfRnHGznMmB_O^3sU8*1xDCL~WKtBQmf+oeI=^blPM0m`k -xJRAE^#gvKuzq9EMvE$A-O$^DWBr4fD`eoufsz&u=_T5FzJ?liI+3CL&6o1IR}<9JcKQmh=6N`=&-Hh -Gwx%F{*}a3&lo2WX~fOFL(0%IQ`Dos()EP(%zYO>Pm(8*2)jGcOIrOPUI5M+jo`^Y4}mdj^MTT?pXuL -v4!s045+A!?5CvVbjv1ylFtxfRFpAz?pV-*@Ap#x8oyh20F|GR>wrS=g+vp8np!@_9nm4~>Sl~K2yIZ -Uob8V@5LMlsx-`f|NO4SC3Sd&t!_OPfP7FFkv)utp_->kSxLCbTMy4saS?FzAG5IT)I=-6pEt3?(NYu -c$e4GE|*DV{40bD1&MCb6bjtZB%Oc=ABy!TT3r2-H_l!a4O{G#73Q%&o)YDP(89xo;~lhef#Q_*ks}k -^cVI#rn@}h1h?8_LqfXO~%ktwU_m(m-Q;*ki?oHrRs4Ocbvu5JA7(=l232OHn(7#Hz@1GntHLOCA*nK -Sdl=#bar3NsUQ6T?YVUg{DNj>NU19+kcl@o%eV$`SSn3nxzbjU3OrD^+gKHN%TFC)A>n<-j!$F0^aXW3&SF3Zx -f&V3pb2f%I@xpq$pRRTXp(!QyO5R8ol1SB1wu^N+3d|Nu?nJVyY`*QZjjziN%=Ey*3gx2X5joM$o$hm$94DM7t-=EmuZRwuNSZdJ#p4S~tT_2CvUAHl+H|k=IZBX;zG -~L(pf%I6KBUFm57x_+oqq##4;v4bz)3w$snNeBbm{QmnyO*~6R+Rcs{p{9WD0ntMk7;ctb{*nH*y$$C -qCjMxClYBXuUAh7|0I8$Pf;sZ3Je}L4e1#!v{XXqcG6h1)0fGYlvNhN*^3MZqnQ-{^M(s6pwetIxxU@$BdOSQ?^xv*`?`{*@4qZ0;`Sdr-g -1n{86JpwY>8J7O2ItR`XSZFHo!r)H50>4Vd&j9}sB>=TW@AMc_2eixtVatG~#l!Y9!a1jf2exkad$HD -K#9D_SX}o!v@#e+ic>6ZQ+vhP<&ts;tNW)pa#g!9T%1*5GQ8}DBf}J6bC=bd+jW_;oHBSi4kqP0gZ&8 -M;`FKOave((^V=RH5z;kqj*iVO;I{@NA4uOSI?|}Gx_O8ZzJ`F1a+9i1gMsj_~H*FkVhNw@G2IcIn)W -G9r7n)O|L0w{JEe?LS0fs*T}RxkEeJqYBXIcf;e%OVVZWsfcpSq=cs2#n7u51+T*es(CF;4T3d&6Ss6sHWa%$pP|M~gvmg5 -yH?70$9KK9!Z+(F0z4O%?pYrfGP4CcCg{A=B`W5T7abDV;0s!w*^+xc3Tva{w>!^E($-8}vG;)YVY-({hjVmPU_rA -@pyF^A_zQan-E`kGQJNlzN`FuLJnFfv-_jm0)UZQGT2T2Vedk`*%4|bV&Lv9P&3F+-q&jB99&)=P%Lt-}}#xhN -qiljb!p`Sy_*FJnvO@C{l1>_(}}Xi!osQmxB9X?wLn5KL066{!wsxyQ1%x)PD4r8HLZD?dSEP#Z -u<-56-ruER5vH)H`G{wjst4z*|GA`27~p5o9lBn%CLQo>U@&L~5#M?`;C)+Ceg!q}ZshhF4IN-OxCQg -$CH2Lb%?i9WJ-ZbSby3v}*UcCmMy?ymwF3~xD!(LFHX7f^@M7VzsSo?gxTH2%sDQz3?2S;zhbfKzbuW -pt;W9vF`E4VggvS_CtF?yp#fdBeXj)6*<3F@MZLFrI8(fueW~6KV&{nJfO9I5MB`7h?0(jdyV1U0rST -Bzk;K$XbW0*onTtgeLQ#b$q{3x2?QK5Gs}c@hCF~%K4gCJ#i{9q{+OmArAQnKx*676DI@1(2>s3WNwb -75w}VEh!>K9Njd7@SRrgGySZPCJ!aMAA1pJE{9A0cu+K;wr9PcqkI{qYxN&;`&k;q3C$S^h>p#FRG{{ -8rk@eEYSYdu1cj1$an|#KDc)CyRHJ3#zb$SZV?itzn?@o-MBFsBnI#e8h< -KvoaIZ0%OzWvSB=Cq6Cqmhb8=1EZkWu&-o;j1uuGYicjH~Ee-XQs)%_0Z614fjf9txIjW(+b01xlIfq --8r?C9w_Ud5XA;_C_XPfRF8|gNZp}ou{Hb59KJ9#}+`UtN1Mlzzjd{g#tE|^mwJCS4Oac9=R_|l~ -p76oi&;C_{U|ob45!PA!#tm|Jn=f~pZ~SKp=(IC>Am2?@UCJ~$a=;4j`S3m|_I^IRkKnIqRb7GAz=sS -V#K3PK`#r^ePqN<=?DshP?Pb3`4ept<2Y8OofDwD~#RU76B?9`>Q9p@N(<)@ba(>p(wQNUU40867nf? -ea0Dr$Dz8fx9{eelowr>Nm&5X$HF`MmUhFHw~cQAES33Sm2buk{ly*pCD7BMJl8Z8>qcJ@^tb7Xy%nAIrG$6MngidFm(Za?fd>@ICc={H{I9T -$aVj@@8K83G1(J8+Lo_>vmnrWOiGo{slfRX0}O*39=}9ZB?$&ZEJ56VpmDDCO(QvGFQd`hU&JLV*nO*Q5XL_)1x0F64Y3V)k8KHvBL=rgu6DPlLqib@%PO -7H6yVXc}MJ?DQ|9@pLx(JgHTUMMGHVysV6j;*1gkjzV*Mub~c$PUh2so3~~+{%s@Uqf+xt6OTD4N+Gb -yNGYH#4>6DPk082m;n%B$-6h$B_0?}W+6F*9@GPh29C!wd{vF27hwlGNMKWzaA08GM`jlh--!9;UuXr -xB5jbq@AW({cK8*leF(NA{zNxe_))dORSvcH5zC6yM2OheI9h>eA`rrY2{cuzJKnO+*2b5kG4n=`Z(*or^C9qUpwpfg9Th*)ElS^wJtKg!t=yvIdv?)NYL -d7S&-?(b0hTm2pSzhKrHZ-!P6h-->{t97wM?M-?jQ|&bdh7)ruEH~Qu#M}(eP-Z=bhSD8xCD`D-Z^aM -m#P9y>nqqhRNIQsf>SI>WJ|$hyCg|5&7K31xRBe&)7obsBNXv@^R`cij7CMOCg1#PV4h&IU7Y7FOln<_>KjOuZUCXxNE%HV@d3Bagp5wH$)b@cM3*on&I -eknqY~}YFUG`jDF>L0l9|-2`n@6zp&X>bQ6+V~-q!(E6y&y2)XBpUcA#fW6eIn+--z=IBn5K?5QO#|W -L*Bok{C^1*-%O0-OK&h0*poN+1vD>tSHxs+6asgppvh>9-c@LK`@@;fDY`BO|IQY$ja1#pzSUNNHypV -dm5F%Tdc41+4geP@=*HA6sU2*asOW*Z;v!>J3m!Vt@GD6G;sX#Eg1lvci!k?jn0usL(t5_Wneo{OJE} -G%uR^(m7Qc~b_IE4K-E4_8Mx80>}95+s6EAE)fX&uJIK^Mck|t4wWma^dK=kMHhv48r1;SF6uF*EK>P)@^8)c -xsCdnH>E%QI)CBZ|!clhpww`Dg6VqooXGIUPkM?HCf9GW3=mrJsbBL3=*XLN!+Ys^}O81emlByW$ndq9@D1i;I3MoK;ePPUS+cSaV|!`}i{62wg-PsN)(o`1qkrC~powdn+xU)& -n85(h1dG0G?YH&4V^V++vKADqv=+o86cokz+w!44s$6l0B$RMCUMM-zPp}G~&zsPqe8$zvSnk)t-m=h -2(0_!`#TK_AFFN)Shy&Dg_x-Pat;TYR_UZ*Z>99UWjd)p*OST5%(yPfU9@P*&F3;y_$o2LTB~7#t@*T ->CK+J!RQ|v0jQ(d8-WGL(Z}&JfBaYtqC{ku!6P4#*avL9Rfis(W4fu)w!8kksq<`Lxy(m)E*M@D&S5how*GB! -Y1$}sqKD=9_dr_*}05inHnu(G)1q7ryFdC9aM7S4oq?NN)byB)h@!BW#$sbxklsSE0lrm(ABwRB1Su3 -K`Qki;8L07JbOuZIo4jA?kOU(5InfEz!k=Uam<%gnfeI2P|af%(}YcOUVSy6}`7wI~0HBx565^EPVR* --8-(VhNzIc(T!{97S7iP!p?0FvFXYTH(qOtC%jPZ`2{N(U=oGfvSU5syKOnpb)8qH7`HbG%Tu8$8+yb -Tu|ABo*AG4(GfdPt?|AuGjCtgPP#PovT5m*gwy45Gwz4}iK}=i -hCylt_4X+;18c}!zh+4f>BBv_9M}1Z~FSjlq$_@;NVjG`F(XX17GrNKbe5~Q4f;vn83rn9rFulTcX~4 -q90*#(9tFJ!>5{7~fzisT3DEYITbHw27%#Y>&Ved=eqO8{c&#=hI;($uxKJF-~C}=1yjLg_TkhrCl2F -M~50>O-8xu8IaBc^3#yOovQx?L-CtE;$cnOmE;l}c-f7TOS(Jpbo=&UuFc!K`2Rw|xHh9bTTZpXYhbb -N2H-hstjVN=skp1Cbj@#Z&(d-18&Bu@Glmrm?;&qR)@%lMw^NL_oAv-d?C!%ll~91wWI&xhO#=bKl8S}`a5axsy --zRy6TT$Ag23NAD2!Z)dzo*Tr0xA8TdCH{}L>YZ!~ITNB;x`biVh5YX~-rj4@I6wbgglxu5Y-pTB~gQ -PgtG=%UUW1vwvjLi-*K>nAnSh{aK0@hG%ym_L7eo#@7*5FGQ^c-a7x_&-ijYYw?Sf(_fqn*9hCi^x%z -ego9pH?RqA-@qE5kRQy|KkoWs4|iwLlxS}B=-2>@iJ{jVeE -vH(H5aRp$FQNw0~K!p$|ocQmv1@yR$WA-XqHS#bd4_&wEU+4)4NM4vzB)jxVhh-j8GDZr25GQ_0ue@q -sD6bx2CQjZZf%w;7_KJv}AHqb}yy#hBuY9^xAwoxL@U(}fP8hfQ^6gWhNhpoZ}+p~>!5Tmku(^9>)l! -v3b%`|%#}623h3s-oaN&}#E47EUj$7wb+HB)3+_vP!v2YIq6y*E+B4or`8e1b`ng+~6Ri5@uOTW2UM#TK7mL}l?=U&ES8Ospt_m;Nq3f~_)@Ea;HLY}k7 -0kgzPFcdFDHvP_Kp)5%L*kyjIk3GX03A7?og8lH4#8wzaoy+(Qse}b{bM-vn7tsN1VW^G;!k)-=jV_dEBa0w-`#V*U8PKB>ABj5qBK7t2 -q1*qDz`C2mli;j=eniDyw8-Pn;t?ZwmX(lLQC59McUeyfK@gE}dbaHA(G@XlX8_G^yK92@ulJC}Bw(5 -8i&QOnW~Q=}gxdR=ffa8pH4dHFrQ}gyeYGyBW54S|Uzmmel)ZmV-{in!Q422}xZ7^zajK3qDd@T)EMXafm#sC5*Z6p9D7V*`)Gz**thx{63peE)cXAW1;XqA5%YyMEg8U9!2tG;jMQnb4l;}7uBo3de2^s84J#oe40JG -@rD_%1~!Pg;^W3NJ|pJ};Q?>N49l&{@y*;OWdEVp0mL+@JF3dSX8c{|1mj#zul!052dDD-#jH-}ZCjZ -Csu1bi*-4e{S)M&E=R4@7~Wc&s!yLU`Wdv-Atf3~u7B76J=YayY8#2qUGU1$|IB&R1yqV>#gmuZ;i=c2%%M^NF0fi=u -q%iSf%M=dKT}mNtt*H*uDY~##Z4!6vi2Zq70jyCpxG_ckByBqF2q9jzOJ!YhZUg08u;0B#qc-P<9TeO -1sK--r4eKtUhUuZO-4Q2_*P9&&HH>BD-em?C>cwmh^}kLsLsrGKBi4#F0SIkz93Tdr+8`Mubh1jmIQ; -eIu>Cx^zf>db=V_yXdGy7_TWj<@*dNMiPr@2(a$JxEQ#(Ktd&5#sTtERH(@>}kSyMYZqvX7|{W|B94> -o*<{-Drxxb>{i13gZBlYa=MVx>0NC{VD7b!i^_oV;JH^wkS$5dTrldg>R}Pzu#WLUF$=Nh -_U&ZiWjm@hSH%FMC|b$VB-GQQ4fk9wR$wUhmkyB&8`C7Acnu4@07#eWu3+F7u{x~o8GTr4Ds;;vd7-^ -Kr?zY<~?_b9*wN$TGpfSXuC`FXvi@{yLzQZ<9b&v&a?;I^l13DS9&xO6*_$y0={y8OL{cq`YrdKg54d -*zl2gl=j?+@(<_NVK*@C>dfc)ch-F~1cv&lAjpQJDEujuJR%pu*>g!!P0!q$avY0>qagsm1M#ABQ-k#gOn;z$R -^~ZG<^e^S=+(K`0s)OdfN8}ZR&bq!rFBZ)b#VzsG2snb;(nVve6*;|o^9lN*tE>(K^xf&K4j;p2y-?c -fQ`5$%Ms_>eYGPlR5gp|$%FU#SVu3CN5;jN*AWn~Nbb}g(pg6YR6Z%b2H4Zg-o2&|SD -do1RoBeW)V>{-h}xK=dfNMl+nK0o?jgUiO~I-}miS5mqX1-^M9n}&VinF^pMDli-OMU+&c2sWj&9gYg -m{{xGU~-@bgf#AmUnyn-LTm}Q_?DD6_ZWcgQ92?tIUpaD5^7+oYgG~H%0%rAPj01h=8(>4EI+iI1X%Y -Ef@Ae#R#7V7mk(@X{g@Tnzlq}xr?qX=xdIet+N>&!U0GaN{5TXa*4HSvR{okv@_&hO{?G~m||4#Ay%s -Q%8{eQ!Bl~>%m<|MSxc2b!(sK}!PTSW$C0>bsODLkXIUZ+RTony+UN|CbNe&0p(eT8{1J`OV{iz7I>a -0MVENE>^vCTx0der>@TF&w^8aK?E$>ZT<=l!Jfgt;t(Yx&4C4Ss(GwS#Dq6}NqUX)=A_M-0px9>&8%D -t!&G@fwVjOr@38uxi%H!2vrQSG;l#kR8W7vG+g)h#}J1shV$?ME3ei2W#Wm!iY_@jJBH<1tUS{iq^q` -P5>n8mq*1)Q<_|l!S}5X^P?6ld`HksT}N2IiGo&WO2nk+Md)_xhHk!J+5h{{vK^}XM+&Zb#6jB!xz+9 -icxppvKY36nj9xAj&l~rn^+se7Eh+7>^nng4_~pbQ(1C^S6qLix#E@{*bPl6w-iHpYJF>=L~>uIDQpi -F{=8rsNYqW0ZidYX`l?H|cy?Jm4`O~a75A}k_SczqReRyHqb#budPC_CNYHV}f|J(qYF8(*wS@J`{)~ -dF6tpPVPww`VB`Kt~r4zByyA1cV^}z1PFi*A9b6DHynW$4cJ=?XNo|olLkD+vz*lCz6eDm$#Ua}${$-M`<5d$?B1+|>MC>8Rff_)4juPxsQF#xOg%4`YlZ% -p{c_G^j^+#Aum0v@<4ma(1eGSCJRkGS6hVoWvn`Tl`RUkpG%uUdJ0l^j7%guCRRZ+1=}>^~EIg}no9~ -CXIW=CH<(6aCikZhOj^C;m;=GY%nMmH^S+i|6!#CuZN|hYOHq;P$&ifp5$^wj(XnI)AIp}D;G3~Wzid -rtMFinmw3jeLuoOw1lP`6DsD2OJiIe$T;fsgL$jnDv0=5!Q?gQSScwEp{|s- -ucU5I;ohYTbW(4Hczn~Ttq}Ng8h&mzmug2HcbfLC}K(KIYm6$eO>|c$qZwTnViS@0Xk{6p;r=sutJuY&5;2#3Me=_^XrpUwjtVoBdZIn&Z; -|AimxWdTO4Y$0lxdExwvROl+^Qd>GK{V_?ZlpxVM0ApGez@7{Tg<$Ccfd?#WIv;{U#6gpTTtATH|SUa -B3cCWEQ;uJ6WpSOoko5$?dF49;_QCHeFW9y{yD#X2(%=NidCf_FEnAn1#aKV>G{1TUnhgYM<)jotUs! -Mv8r^Rbrn?)Br(&wwZNY1bW0hkZ6};qN2r)*0d&Y?CmlU -(?ZoFs!m*<0bFr<}8ar9S*(}xF*?JdQ!p@k(&QJ_(Gs|&M>`A@vd{%B|ZFOyC&2Zby`s9qrMsMp(|Gn -(NBG9&Q(VdIfS=d1;`_4{19AA`bb(}ZhMp(-#+3+OL99}j=G>)dB!B4-)Mipvl7WKh~MiCanZ*Jby!ds$0BWpj|UifRZWn_JXfBbba(Jq%l0NJH9daCzCjlKMDXQb~Q5Ep}UuXt``5;zsY1`gw-3AP?C9 -`BnSi3N+IQz3{WQLGKR_|LX6>ko$08^=T~M_YY|4$g>*cU!yR7(Ze`}u0iq;7#CRl~_OX-rVL#u0)mPtB^w4oGd70lwK4+>5$>C#YB+iZ -6B{#6u0^$~mvXe#+_fSpD{qOlYNi<*b}i(UkmRyi(`i&b2_AoiuU>{I(v*6NdD9aQW~S*za?s3N_qO| -o%xOHXZ4;m8Pa(Cf@eu_Fbw%C4O%N>|&dDrRy#V~XBm8&gu>%Qkddm@Kef+XhNQdm-M@yJR6vqeS&J6 -OnYyc>1rai2?t8sCh0q>`@b8E}yy#SmwCzQhgyQlY@#th!V*VKFiL+Fi|9oVWJonmeqr6G}miIqc$J= -Xmiw5F~Uq-r)`SvwmK>>yv5YhJ6o;_g?o!tA#tC&+p3WBP^oLgdP8aRBUZ=$nwMJm9?9_`O^jzp2i$x -=V};4qw6oTVfs=9M%W($UAa`B#hDJ!5^85+~J3ibVT{60D9&RD)gU{IbA)6mRWbY{MRIBmd_A7w*wmP -9tF#;Fvh?wPFd?G4os?)X9wTd#dR4y2~Zlk!&JVl^Nc-|fz@ah`EGh1AUJn)4zNdLUh7Qnr+hDEvk#^ -iF9h0qP*RN|x4a)E9?H*`BUgD!48TN*A9{*6fW_v8ZO+e%y*7nd}Hv8LlztuqBXZ<3*$LtPPT5()Jo( -E;`M5$gS|X~$`lUwa>NazA8-#lt#tAYo2jmsem-7iXYK$+^^pf_})*gH|<9ieF}P97xG!=C7Mj+-O=<<-}>QIVB#o8dZ#|5p^YV;~O ->9RzKkO>VHpVue+%?TK;}6koizIf^Nnz(6bS;~dB?xz}4;{%tW`qV&I+;pUc{ZEQt-Cd}b{>o4W -z4H7(HEtS}I?Uq_Iv;%%gC<a$(B$|d(opRHWkhKl^%xOrLXvqe)8Mo!VCGL}u~`RtKfcG~97tYwERMDdzSTD|^kYI=L$&grX3~ae22Rw4xlUE)aT;)%Uj4E(Ty7 -QZG)ao0sXF^A